[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [25505] trunk/blender/source/blender/ editors/transform: Sequence Slide transformation ( easier to do special sequence code there than in a generic transform)

Martin Poirier theeth at yahoo.com
Mon Dec 21 18:23:44 CET 2009


Revision: 25505
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=25505
Author:   theeth
Date:     2009-12-21 18:23:44 +0100 (Mon, 21 Dec 2009)

Log Message:
-----------
Sequence Slide transformation (easier to do special sequence code there than in a generic transform)

Also make the transform operator creation a bit more automagic (I always forget either operator registration or modal keymap registration, this is all automatic now).

Modified Paths:
--------------
    trunk/blender/source/blender/editors/transform/transform.c
    trunk/blender/source/blender/editors/transform/transform.h
    trunk/blender/source/blender/editors/transform/transform_ops.c

Modified: trunk/blender/source/blender/editors/transform/transform.c
===================================================================
--- trunk/blender/source/blender/editors/transform/transform.c	2009-12-21 16:57:39 UTC (rev 25504)
+++ trunk/blender/source/blender/editors/transform/transform.c	2009-12-21 17:23:44 UTC (rev 25505)
@@ -450,55 +450,6 @@
 #endif
 }
 
-#if 0
-static char *transform_to_undostr(TransInfo *t)
-{
-	switch (t->mode) {
-		case TFM_TRANSLATION:
-			return "Translate";
-		case TFM_ROTATION:
-			return "Rotate";
-		case TFM_RESIZE:
-			return "Scale";
-		case TFM_TOSPHERE:
-			return "To Sphere";
-		case TFM_SHEAR:
-			return "Shear";
-		case TFM_WARP:
-			return "Warp";
-		case TFM_SHRINKFATTEN:
-			return "Shrink/Fatten";
-		case TFM_TILT:
-			return "Tilt";
-		case TFM_TRACKBALL:
-			return "Trackball";
-		case TFM_PUSHPULL:
-			return "Push/Pull";
-		case TFM_BEVEL:
-			return "Bevel";
-		case TFM_BWEIGHT:
-			return "Bevel Weight";
-		case TFM_CREASE:
-			return "Crease";
-		case TFM_BONESIZE:
-			return "Bone Width";
-		case TFM_BONE_ENVELOPE:
-			return "Bone Envelope";
-		case TFM_TIME_TRANSLATE:
-			return "Translate Anim. Data";
-		case TFM_TIME_SCALE:
-			return "Scale Anim. Data";
-		case TFM_TIME_SLIDE:
-			return "Time Slide";
-		case TFM_BAKE_TIME:
-			return "Key Time";
-		case TFM_MIRROR:
-			return "Mirror";
-	}
-	return "Transform";
-}
-#endif
-
 /* ************************************************* */
 
 /* NOTE: these defines are saved in keymap files, do not change values but just add new ones */
@@ -521,7 +472,7 @@
 #define TFM_MODAL_REMOVE_SNAP	17
 
 /* called in transform_ops.c, on each regeneration of keymaps */
-void transform_modal_keymap(wmKeyConfig *keyconf)
+wmKeyMap* transform_modal_keymap(wmKeyConfig *keyconf)
 {
 	static EnumPropertyItem modal_items[] = {
 	{TFM_MODAL_CANCEL, "CANCEL", 0, "Cancel", ""},
@@ -546,7 +497,7 @@
 	wmKeyMap *keymap= WM_modalkeymap_get(keyconf, "Transform Modal Map");
 	
 	/* this function is called for each spacetype, only needs to add map once */
-	if(keymap) return;
+	if(keymap) return NULL;
 	
 	keymap= WM_modalkeymap_add(keyconf, "Transform Modal Map", modal_items);
 	
@@ -568,19 +519,7 @@
 	WM_modalkeymap_add_item(keymap, AKEY, KM_PRESS, 0, 0, TFM_MODAL_ADD_SNAP);
 	WM_modalkeymap_add_item(keymap, AKEY, KM_PRESS, KM_ALT, 0, TFM_MODAL_REMOVE_SNAP);
 
-	/* assign map to operators */
-	WM_modalkeymap_assign(keymap, "TRANSFORM_OT_transform");
-	WM_modalkeymap_assign(keymap, "TRANSFORM_OT_translate");
-	WM_modalkeymap_assign(keymap, "TRANSFORM_OT_rotate");
-	WM_modalkeymap_assign(keymap, "TRANSFORM_OT_tosphere");
-	WM_modalkeymap_assign(keymap, "TRANSFORM_OT_resize");
-	WM_modalkeymap_assign(keymap, "TRANSFORM_OT_shear");
-	WM_modalkeymap_assign(keymap, "TRANSFORM_OT_warp");
-	WM_modalkeymap_assign(keymap, "TRANSFORM_OT_shrink_fatten");
-	WM_modalkeymap_assign(keymap, "TRANSFORM_OT_tilt");
-	WM_modalkeymap_assign(keymap, "TRANSFORM_OT_trackball");
-	WM_modalkeymap_assign(keymap, "TRANSFORM_OT_mirror");
-	WM_modalkeymap_assign(keymap, "TRANSFORM_OT_edge_slide");
+	return keymap;
 }
 
 
@@ -1620,6 +1559,9 @@
 	case TFM_ALIGN:
 		initAlign(t);
 		break;
+	case TFM_SEQ_SLIDE:
+		initSeqSlide(t);
+		break;
 	}
 
 	/* overwrite initial values if operator supplied a non-null vector */
@@ -3290,11 +3232,11 @@
 /* uses t->vec to store actual translation in */
 int Translation(TransInfo *t, short mval[2])
 {
-	float tvec[3];
 	char str[250];
 
 	if (t->con.mode & CON_APPLY) {
 		float pvec[3] = {0.0f, 0.0f, 0.0f};
+		float tvec[3];
 		applySnapping(t, t->values);
 		t->con.applyVec(t, NULL, t->values, tvec, pvec);
 		VECCOPY(t->values, tvec);
@@ -5018,6 +4960,90 @@
 	return 1;
 }
 
+/* ************************** SEQ SLIDE *************************** */
+
+void initSeqSlide(TransInfo *t)
+{
+	t->transform = SeqSlide;
+
+	initMouseInputMode(t, &t->mouse, INPUT_VECTOR);
+
+	t->idx_max = 1;
+	t->num.flag = 0;
+	t->num.idx_max = t->idx_max;
+
+	t->ndof.axis = 1|2;
+
+	t->snap[0] = 0.0f;
+	t->snap[1] = floor(t->scene->r.frs_sec / t->scene->r.frs_sec_base);
+	t->snap[2] = 10.0f;
+}
+
+static void headerSeqSlide(TransInfo *t, float val[2], char *str)
+{
+	char tvec[60];
+
+	if (hasNumInput(&t->num)) {
+		outputNumInput(&(t->num), tvec);
+	}
+	else {
+		sprintf(&tvec[0], "%.0f, %.0f", val[0], val[1]);
+	}
+
+	sprintf(str, "Sequence Slide: %s%s", &tvec[0], t->con.text);
+}
+
+static void applySeqSlide(TransInfo *t, float val[2]) {
+	TransData *td = t->data;
+	int i;
+
+	for(i = 0 ; i < t->total; i++, td++) {
+		float tvec[2];
+
+		if (td->flag & TD_NOACTION)
+			break;
+
+		if (td->flag & TD_SKIP)
+			continue;
+
+		copy_v2_v2(tvec, val);
+
+		mul_v2_fl(tvec, td->factor);
+
+		td->loc[0] = td->iloc[0] + tvec[0];
+		td->loc[1] = td->iloc[1] + tvec[1];
+	}
+}
+
+int SeqSlide(TransInfo *t, short mval[2])
+{
+	char str[200];
+
+	if (t->con.mode & CON_APPLY) {
+		float pvec[3] = {0.0f, 0.0f, 0.0f};
+		float tvec[3];
+		t->con.applyVec(t, NULL, t->values, tvec, pvec);
+		VECCOPY(t->values, tvec);
+	}
+	else {
+		applyNDofInput(&t->ndof, t->values);
+		snapGrid(t, t->values);
+		applyNumInput(&t->num, t->values);
+	}
+
+	t->values[0] = floor(t->values[0] + 0.5);
+	t->values[1] = floor(t->values[1] + 0.5);
+
+	headerSeqSlide(t, t->values, str);
+	applySeqSlide(t, t->values);
+
+	recalcData(t);
+
+	ED_area_headerprint(t->sa, str);
+
+	return 1;
+}
+
 /* ************************** ANIM EDITORS - TRANSFORM TOOLS *************************** */
 
 /* ---------------- Special Helpers for Various Settings ------------- */

Modified: trunk/blender/source/blender/editors/transform/transform.h
===================================================================
--- trunk/blender/source/blender/editors/transform/transform.h	2009-12-21 16:57:39 UTC (rev 25504)
+++ trunk/blender/source/blender/editors/transform/transform.h	2009-12-21 17:23:44 UTC (rev 25505)
@@ -53,6 +53,8 @@
 struct wmOperatorType;
 struct wmOperator;
 struct wmWindowManager;
+struct wmKeyMap;
+struct wmKeyConfig;
 struct bContext;
 struct wmEvent;
 struct wmTimer;
@@ -522,9 +524,12 @@
 void initAlign(TransInfo *t);
 int Align(TransInfo *t, short mval[2]);
 
+void initSeqSlide(TransInfo *t);
+int SeqSlide(TransInfo *t, short mval[2]);
+
 void drawPropCircle(const struct bContext *C, TransInfo *t);
 
-void transform_modal_keymap(struct wmKeyConfig *keyconf);
+struct wmKeyMap *transform_modal_keymap(struct wmKeyConfig *keyconf);
 
 
 /*********************** transform_conversions.c ********** */

Modified: trunk/blender/source/blender/editors/transform/transform_ops.c
===================================================================
--- trunk/blender/source/blender/editors/transform/transform_ops.c	2009-12-21 16:57:39 UTC (rev 25504)
+++ trunk/blender/source/blender/editors/transform/transform_ops.c	2009-12-21 17:23:44 UTC (rev 25505)
@@ -51,6 +51,7 @@
 {
 	char *idname;
 	int		mode;
+	void (*opfunc)(wmOperatorType*);
 } TransformModeItem;
 
 static float VecOne[3] = {1, 1, 1};
@@ -66,21 +67,35 @@
 char OP_TRACKBALL[] = "TRANSFORM_OT_trackball";
 char OP_MIRROR[] = "TRANSFORM_OT_mirror";
 char OP_EDGE_SLIDE[] = "TRANSFORM_OT_edge_slide";
+char OP_SEQ_SLIDE[] = "TRANSFORM_OT_seq_slide";
 
+void TRANSFORM_OT_translate(struct wmOperatorType *ot);
+void TRANSFORM_OT_rotate(struct wmOperatorType *ot);
+void TRANSFORM_OT_tosphere(struct wmOperatorType *ot);
+void TRANSFORM_OT_resize(struct wmOperatorType *ot);
+void TRANSFORM_OT_shear(struct wmOperatorType *ot);
+void TRANSFORM_OT_warp(struct wmOperatorType *ot);
+void TRANSFORM_OT_shrink_fatten(struct wmOperatorType *ot);
+void TRANSFORM_OT_tilt(struct wmOperatorType *ot);
+void TRANSFORM_OT_trackball(struct wmOperatorType *ot);
+void TRANSFORM_OT_mirror(struct wmOperatorType *ot);
+void TRANSFORM_OT_edge_slide(struct wmOperatorType *ot);
+void TRANSFORM_OT_seq_slide(struct wmOperatorType *ot);
 
 TransformModeItem transform_modes[] =
 {
-	{OP_TRANSLATION, TFM_TRANSLATION},
-	{OP_ROTATION, TFM_ROTATION},
-	{OP_TOSPHERE, TFM_TOSPHERE},
-	{OP_RESIZE, TFM_RESIZE},
-	{OP_SHEAR, TFM_SHEAR},
-	{OP_WARP, TFM_WARP},
-	{OP_SHRINK_FATTEN, TFM_SHRINKFATTEN},
-	{OP_TILT, TFM_TILT},
-	{OP_TRACKBALL, TFM_TRACKBALL},
-	{OP_MIRROR, TFM_MIRROR},
-	{OP_EDGE_SLIDE, TFM_EDGE_SLIDE},
+	{OP_TRANSLATION, TFM_TRANSLATION, TRANSFORM_OT_translate},
+	{OP_ROTATION, TFM_ROTATION, TRANSFORM_OT_rotate},
+	{OP_TOSPHERE, TFM_TOSPHERE, TRANSFORM_OT_tosphere},
+	{OP_RESIZE, TFM_RESIZE, TRANSFORM_OT_resize},
+	{OP_SHEAR, TFM_SHEAR, TRANSFORM_OT_shear},
+	{OP_WARP, TFM_WARP, TRANSFORM_OT_warp},
+	{OP_SHRINK_FATTEN, TFM_SHRINKFATTEN, TRANSFORM_OT_shrink_fatten},
+	{OP_TILT, TFM_TILT, TRANSFORM_OT_tilt},
+	{OP_TRACKBALL, TFM_TRACKBALL, TRANSFORM_OT_trackball},
+	{OP_MIRROR, TFM_MIRROR, TRANSFORM_OT_mirror},
+	{OP_EDGE_SLIDE, TFM_EDGE_SLIDE, TRANSFORM_OT_edge_slide},
+	{OP_SEQ_SLIDE, TFM_SEQ_SLIDE, TRANSFORM_OT_seq_slide},
 	{NULL, 0}
 };
 
@@ -671,6 +686,26 @@
 	Properties_Snapping(ot, 0, 0);
 }
 
+void TRANSFORM_OT_seq_slide(struct wmOperatorType *ot)
+{
+	/* identifiers */
+	ot->name   = "Sequence Slide";
+	ot->description= "Slide a sequence strip in time.";
+	ot->idname = OP_SEQ_SLIDE;
+	ot->flag = OPTYPE_REGISTER|OPTYPE_UNDO|OPTYPE_BLOCKING;
+
+	/* api callbacks */
+	ot->invoke = transform_invoke;
+	ot->exec   = transform_exec;
+	ot->modal  = transform_modal;
+	ot->cancel  = transform_cancel;
+	ot->poll   = ED_operator_sequencer_active;
+
+	RNA_def_float_vector(ot->srna, "value", 2, VecOne, -FLT_MAX, FLT_MAX, "angle", "", -FLT_MAX, FLT_MAX);
+
+	Properties_Snapping(ot, 0, 0);
+}
+
 void TRANSFORM_OT_transform(struct wmOperatorType *ot)
 {
 	static EnumPropertyItem transform_mode_types[] = {
@@ -701,6 +736,7 @@
 			{TFM_BWEIGHT, "BWEIGHT", 0, "Bweight", ""},
 			{TFM_ALIGN, "ALIGN", 0, "Align", ""},
 			{TFM_EDGE_SLIDE, "EDGESLIDE", 0, "Edge Slide", ""},
+			{TFM_SEQ_SLIDE, "SEQSLIDE", 0, "Sequence Slide", ""},
 			{0, NULL, 0, NULL, NULL}
 	};
 
@@ -729,18 +765,14 @@
 
 void transform_operatortypes(void)
 {
+	TransformModeItem *tmode;
+
+	for (tmode = transform_modes; tmode->idname; tmode++)
+	{
+		WM_operatortype_append(tmode->opfunc);
+	}
+
 	WM_operatortype_append(TRANSFORM_OT_transform);
-	WM_operatortype_append(TRANSFORM_OT_translate);
-	WM_operatortype_append(TRANSFORM_OT_rotate);
-	WM_operatortype_append(TRANSFORM_OT_tosphere);
-	WM_operatortype_append(TRANSFORM_OT_resize);
-	WM_operatortype_append(TRANSFORM_OT_shear);
-	WM_operatortype_append(TRANSFORM_OT_warp);
-	WM_operatortype_append(TRANSFORM_OT_shrink_fatten);
-	WM_operatortype_append(TRANSFORM_OT_tilt);

@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list