[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [35537] trunk/blender/source/blender: Bugfixes:

Joshua Leung aligorith at gmail.com
Mon Mar 14 11:45:42 CET 2011


Revision: 35537
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=35537
Author:   aligorith
Date:     2011-03-14 10:45:42 +0000 (Mon, 14 Mar 2011)
Log Message:
-----------
Bugfixes:

- Sync Markers option works for local markers (or any other list of
markers in future) too now.
- Apply Pose to Restpose operator now displays a warning if an action
was found (warning about the action now being invalid)

Modified Paths:
--------------
    trunk/blender/source/blender/blenkernel/BKE_scene.h
    trunk/blender/source/blender/blenkernel/intern/scene.c
    trunk/blender/source/blender/editors/animation/anim_markers.c
    trunk/blender/source/blender/editors/armature/editarmature.c
    trunk/blender/source/blender/editors/armature/poseUtils.c
    trunk/blender/source/blender/editors/include/ED_markers.h
    trunk/blender/source/blender/editors/transform/transform_conversions.c

Modified: trunk/blender/source/blender/blenkernel/BKE_scene.h
===================================================================
--- trunk/blender/source/blender/blenkernel/BKE_scene.h	2011-03-14 10:31:50 UTC (rev 35536)
+++ trunk/blender/source/blender/blenkernel/BKE_scene.h	2011-03-14 10:45:42 UTC (rev 35537)
@@ -78,9 +78,6 @@
 
 char *scene_find_marker_name(struct Scene *scene, int frame);
 char *scene_find_last_marker_name(struct Scene *scene, int frame);
-int scene_marker_tfm_translate(struct Scene *scene, int delta, unsigned int flag);
-int scene_marker_tfm_extend(struct Scene *scene, int delta, int flag, int frame, char side);
-int scene_marker_tfm_scale(struct Scene *scene, float value, int flag);
 
 struct Base *scene_add_base(struct Scene *sce, struct Object *ob);
 void scene_deselect_all(struct Scene *sce);

Modified: trunk/blender/source/blender/blenkernel/intern/scene.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/scene.c	2011-03-14 10:31:50 UTC (rev 35536)
+++ trunk/blender/source/blender/blenkernel/intern/scene.c	2011-03-14 10:45:42 UTC (rev 35537)
@@ -832,55 +832,7 @@
 	return best_marker ? best_marker->name : NULL;
 }
 
-/* markers need transforming from different parts of the code so have
- * a generic function to do this */
-int scene_marker_tfm_translate(Scene *scene, int delta, unsigned int flag)
-{
-	TimeMarker *marker;
-	int tot= 0;
 
-	for (marker= scene->markers.first; marker; marker= marker->next) {
-		if ((marker->flag & flag) == flag) {
-			marker->frame += delta;
-			tot++;
-		}
-	}
-
-	return tot;
-}
-
-int scene_marker_tfm_extend(Scene *scene, int delta, int flag, int frame, char side)
-{
-	TimeMarker *marker;
-	int tot= 0;
-
-	for (marker= scene->markers.first; marker; marker= marker->next) {
-		if ((marker->flag & flag) == flag) {
-			if((side=='L' && marker->frame < frame) || (side=='R' && marker->frame >= frame)) {
-				marker->frame += delta;
-				tot++;
-			}
-		}
-	}
-
-	return tot;
-}
-
-int scene_marker_tfm_scale(struct Scene *scene, float value, int flag)
-{
-	TimeMarker *marker;
-	int tot= 0;
-
-	for (marker= scene->markers.first; marker; marker= marker->next) {
-		if ((marker->flag & flag) == flag) {
-			marker->frame= CFRA + (int)floorf(((float)(marker->frame - CFRA) * value) + 0.5f);
-			tot++;
-		}
-	}
-
-	return tot;
-}
-
 Base *scene_add_base(Scene *sce, Object *ob)
 {
 	Base *b= MEM_callocN(sizeof(*b), "scene_add_base");

Modified: trunk/blender/source/blender/editors/animation/anim_markers.c
===================================================================
--- trunk/blender/source/blender/editors/animation/anim_markers.c	2011-03-14 10:31:50 UTC (rev 35536)
+++ trunk/blender/source/blender/editors/animation/anim_markers.c	2011-03-14 10:45:42 UTC (rev 35537)
@@ -68,6 +68,7 @@
 #include "ED_util.h"
 #include "ED_numinput.h"
 #include "ED_object.h"
+#include "ED_transform.h"
 #include "ED_types.h"
 
 /* ************* Marker API **************** */
@@ -114,6 +115,57 @@
 
 /* --------------------------------- */
 
+/* Apply some transformation to markers after the fact 
+ * < markers: list of markers to affect - this may or may not be the scene markers list, so don't assume anything
+ * < scene: current scene (for getting current frame)
+ * < mode: (TfmMode) transform mode that this transform is for
+ * < value: from the transform code, this is t->vec[0] (which is delta transform for grab/extend, and scale factor for scale)
+ * < side: (B/L/R) for 'extend' functionality, which side of current frame to use
+ */
+int ED_markers_post_apply_transform (ListBase *markers, Scene *scene, int mode, float value, char side)
+{
+	TimeMarker *marker;
+	float cfra = (float)CFRA;
+	int changed = 0;
+	
+	/* sanity check */
+	if (markers == NULL)
+		return changed;
+	
+	/* affect selected markers - it's unlikely that we will want to affect all in this way? */
+	for (marker = markers->first; marker; marker = marker->next) {
+		if (marker->flag & SELECT) {
+			switch (mode) {
+				case TFM_TIME_TRANSLATE:
+				case TFM_TIME_EXTEND:
+				{
+					/* apply delta if marker is on the right side of the current frame */
+					if ((side=='B') ||
+						(side=='L' && marker->frame < cfra) || 
+					    (side=='R' && marker->frame >= cfra))
+					{
+						marker->frame += (int)floorf(value + 0.5f);
+						changed++;
+					}
+				}
+					break;
+					
+				case TFM_TIME_SCALE:
+				{	
+					/* rescale the distance between the marker and the current frame */
+					marker->frame= cfra + (int)floorf(((float)(marker->frame - cfra) * value) + 0.5f);
+					changed++;
+				}
+					break;
+			}
+		}
+	}
+	
+	return changed;
+}
+
+/* --------------------------------- */
+
 /* Get the marker that is closest to this point */
 /* XXX for select, the min_dist should be small */
 TimeMarker *ED_markers_find_nearest_marker (ListBase *markers, float x) 

Modified: trunk/blender/source/blender/editors/armature/editarmature.c
===================================================================
--- trunk/blender/source/blender/editors/armature/editarmature.c	2011-03-14 10:31:50 UTC (rev 35536)
+++ trunk/blender/source/blender/editors/armature/editarmature.c	2011-03-14 10:45:42 UTC (rev 35537)
@@ -638,6 +638,8 @@
 	
 	/* helpful warnings... */
 	// TODO: add warnings to be careful about actions, applying deforms first, etc.
+	if (ob->adt && ob->adt->action) 
+		BKE_report(op->reports, RPT_WARNING, "Actions on this armature will be destroyed by this new rest pose as the transforms stored are relative to the old rest pose");
 	
 	/* Get editbones of active armature to alter */
 	ED_armature_to_edit(ob);	

Modified: trunk/blender/source/blender/editors/armature/poseUtils.c
===================================================================
--- trunk/blender/source/blender/editors/armature/poseUtils.c	2011-03-14 10:31:50 UTC (rev 35536)
+++ trunk/blender/source/blender/editors/armature/poseUtils.c	2011-03-14 10:45:42 UTC (rev 35537)
@@ -211,7 +211,7 @@
 }
 
 /* perform autokeyframing after changes were made + confirmed */
-void poseAnim_mapping_autoKeyframe (bContext *C, Scene *scene, Object *ob, ListBase *pfLinks, float UNUSED(cframe))
+void poseAnim_mapping_autoKeyframe (bContext *C, Scene *scene, Object *ob, ListBase *pfLinks, float cframe)
 {
 	/* insert keyframes as necessary if autokeyframing */
 	if (autokeyframe_cfra_can_key(scene, &ob->id)) {
@@ -235,7 +235,7 @@
 		}
 		
 		/* insert keyframes for all relevant bones in one go */
-		ANIM_apply_keyingset(C, &dsources, NULL, ks, MODIFYKEY_MODE_INSERT, (float)CFRA);
+		ANIM_apply_keyingset(C, &dsources, NULL, ks, MODIFYKEY_MODE_INSERT, cframe);
 		BLI_freelistN(&dsources);
 	}
 }

Modified: trunk/blender/source/blender/editors/include/ED_markers.h
===================================================================
--- trunk/blender/source/blender/editors/include/ED_markers.h	2011-03-14 10:31:50 UTC (rev 35536)
+++ trunk/blender/source/blender/editors/include/ED_markers.h	2011-03-14 10:45:42 UTC (rev 35537)
@@ -36,6 +36,7 @@
 struct wmKeyConfig;
 struct bContext;
 struct bAnimContext;
+struct Scene;
 struct TimeMarker;
 
 /* Drawing API ------------------------------ */
@@ -53,6 +54,8 @@
 ListBase *ED_context_get_markers(const struct bContext *C);
 ListBase *ED_animcontext_get_markers(const struct bAnimContext *ac);
 
+int ED_markers_post_apply_transform(ListBase *markers, struct Scene *scene, int mode, float value, char side);
+
 struct TimeMarker *ED_markers_find_nearest_marker(ListBase *markers, float x);
 int ED_markers_find_nearest_marker_time(ListBase *markers, float x);
 

Modified: trunk/blender/source/blender/editors/transform/transform_conversions.c
===================================================================
--- trunk/blender/source/blender/editors/transform/transform_conversions.c	2011-03-14 10:31:50 UTC (rev 35536)
+++ trunk/blender/source/blender/editors/transform/transform_conversions.c	2011-03-14 10:45:42 UTC (rev 35537)
@@ -4707,10 +4707,10 @@
 
 			if(t->mode == TFM_SEQ_SLIDE) {
 				if(t->frame_side == 'B')
-					scene_marker_tfm_translate(t->scene, floor(t->values[0] + 0.5f), SELECT);
+					ED_markers_post_apply_transform(&t->scene->markers, t->scene, TFM_TIME_TRANSLATE, t->vec[0], t->frame_side);
 			}
 			else if (ELEM(t->frame_side, 'L', 'R')) {
-				scene_marker_tfm_extend(t->scene, floor(t->vec[0] + 0.5f), SELECT, t->scene->r.cfra, t->frame_side);
+				ED_markers_post_apply_transform(&t->scene->markers, t->scene, TFM_TIME_EXTEND, t->vec[0], t->frame_side);
 			}
 		}
 
@@ -4783,22 +4783,6 @@
 				posttrans_action_clean(&ac, (bAction *)ac.data);
 			}
 		}
-
-		/* marker transform, not especially nice but we may want to move markers
-		 * at the same time as keyframes in the dope sheet. */
-		// FIXME: this only does scene markers, but fails when action editor is displaying local markers only...
-		if ((saction->flag & SACTION_MARKERS_MOVE) && (cancelled == 0)) {
-			if (t->mode == TFM_TIME_TRANSLATE) {
-				if (ELEM(t->frame_side, 'L', 'R')) /* TFM_TIME_EXTEND */
-					scene_marker_tfm_extend(t->scene, floor(t->vec[0] + 0.5f), SELECT, t->scene->r.cfra, t->frame_side);
-				else /* TFM_TIME_TRANSLATE */
-					scene_marker_tfm_translate(t->scene, floor(t->vec[0] + 0.5f), SELECT);
-			}
-			else if (t->mode == TFM_TIME_SCALE) {
-				scene_marker_tfm_scale(t->scene, t->vec[0], SELECT);
-			}
-		}
-		
 		else if (ac.datatype == ANIMCONT_GPENCIL) {
 			/* remove duplicate frames and also make sure points are in order! */
 				/* 3 cases here for curve cleanups:
@@ -4820,6 +4804,21 @@
 			}
 		}
 		
+		/* marker transform, not especially nice but we may want to move markers
+		 * at the same time as keyframes in the dope sheet. 
+		 */
+		if ((saction->flag & SACTION_MARKERS_MOVE) && (cancelled == 0)) {
+			if (t->mode == TFM_TIME_TRANSLATE) {
+				if (ELEM(t->frame_side, 'L', 'R')) /* TFM_TIME_EXTEND */
+					ED_markers_post_apply_transform(ED_context_get_markers(C), t->scene, t->mode, t->vec[0], t->frame_side);
+				else /* TFM_TIME_TRANSLATE */
+					ED_markers_post_apply_transform(ED_context_get_markers(C), t->scene, t->mode, t->vec[0], t->frame_side);
+			}
+			else if (t->mode == TFM_TIME_SCALE) {
+				ED_markers_post_apply_transform(ED_context_get_markers(C), t->scene, t->mode, t->vec[0], t->frame_side);
+			}
+		}
+		
 		/* make sure all F-Curves are set correctly */
 		ANIM_editkeyframes_refresh(&ac);
 		




More information about the Bf-blender-cvs mailing list