[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [18300] branches/blender2.5/blender/source /blender/editors: 2.5

Martin Poirier theeth at yahoo.com
Sat Jan 3 23:16:00 CET 2009


Revision: 18300
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=18300
Author:   theeth
Date:     2009-01-03 23:15:59 +0100 (Sat, 03 Jan 2009)

Log Message:
-----------
2.5

Transform operator replay

Basic support working. Only saves mode and values, not constraint setup.

Removed event pointer from TransInfo (it's not available in operator exec). Replaced checks to event->modifiers to a functional modifier bitfield in TransInfo (that is, instead of checking for Shift, it checks for MOD_PRECISION) to make it remappable later.

Misc:
	X-Mirror for mesh now working with transform

Modified Paths:
--------------
    branches/blender2.5/blender/source/blender/editors/include/ED_mesh.h
    branches/blender2.5/blender/source/blender/editors/mesh/mesh_intern.h
    branches/blender2.5/blender/source/blender/editors/transform/transform.c
    branches/blender2.5/blender/source/blender/editors/transform/transform.h
    branches/blender2.5/blender/source/blender/editors/transform/transform_constraints.c
    branches/blender2.5/blender/source/blender/editors/transform/transform_generics.c
    branches/blender2.5/blender/source/blender/editors/transform/transform_input.c
    branches/blender2.5/blender/source/blender/editors/transform/transform_ops.c
    branches/blender2.5/blender/source/blender/editors/transform/transform_snap.c

Modified: branches/blender2.5/blender/source/blender/editors/include/ED_mesh.h
===================================================================
--- branches/blender2.5/blender/source/blender/editors/include/ED_mesh.h	2009-01-03 21:10:48 UTC (rev 18299)
+++ branches/blender2.5/blender/source/blender/editors/include/ED_mesh.h	2009-01-03 22:15:59 UTC (rev 18300)
@@ -89,6 +89,7 @@
 void		remake_editMesh(Scene *scene, Object *ob);
 void		free_editMesh(struct EditMesh *em);
 
+void		recalc_editnormals(struct EditMesh *em);
 
 void		EM_init_index_arrays(struct EditMesh *em, int forVert, int forEdge, int forFace);
 void		EM_free_index_arrays(void);

Modified: branches/blender2.5/blender/source/blender/editors/mesh/mesh_intern.h
===================================================================
--- branches/blender2.5/blender/source/blender/editors/mesh/mesh_intern.h	2009-01-03 21:10:48 UTC (rev 18299)
+++ branches/blender2.5/blender/source/blender/editors/mesh/mesh_intern.h	2009-01-03 22:15:59 UTC (rev 18300)
@@ -127,8 +127,6 @@
 extern void flipface(EditMesh *em, EditFace *efa); // flips for normal direction
 extern int compareface(EditFace *vl1, EditFace *vl2);
 
-void recalc_editnormals(EditMesh *em);
-
 /* flag for selection bits, *nor will be filled with normal for extrusion constraint */
 /* return value defines if such normal was set */
 extern short extrudeflag_face_indiv(EditMesh *em, short flag, float *nor);

Modified: branches/blender2.5/blender/source/blender/editors/transform/transform.c
===================================================================
--- branches/blender2.5/blender/source/blender/editors/transform/transform.c	2009-01-03 21:10:48 UTC (rev 18299)
+++ branches/blender2.5/blender/source/blender/editors/transform/transform.c	2009-01-03 22:15:59 UTC (rev 18300)
@@ -59,7 +59,10 @@
 #include "DNA_userdef_types.h"
 #include "DNA_view3d_types.h"
 #include "DNA_space_types.h"
+#include "DNA_windowmanager_types.h"
 
+#include "RNA_access.h"
+
 //#include "BIF_editview.h"		/* arrows_move_cursor	*/
 #include "BIF_gl.h"
 #include "BIF_glutil.h"
@@ -560,8 +563,6 @@
 	float mati[3][3] = {{1.0f, 0.0f, 0.0f}, {0.0f, 1.0f, 0.0f}, {0.0f, 0.0f, 1.0f}};
 	char cmode = constraintModeToChar(t);
 	
-	t->event = event;
-	
 	t->redraw |= handleMouseInput(t, &t->mouse, event);
 
 	if (event->type == MOUSEMOVE)
@@ -569,6 +570,8 @@
 		t->mval[0] = event->x - t->ar->winrct.xmin;
 		t->mval[1] = event->y - t->ar->winrct.ymin;
 		
+		t->redraw = 1;
+		
 		applyMouseInput(t, &t->mouse, t->mval, t->values);
 	}
 	
@@ -577,9 +580,16 @@
 		/* enforce redraw of transform when modifiers are used */
 		case LEFTCTRLKEY:
 		case RIGHTCTRLKEY:
+			t->modifiers |= MOD_SNAP_GEARS;
 			t->redraw = 1;
 			break;
 			
+		case LEFTSHIFTKEY:
+		case RIGHTSHIFTKEY:
+			t->modifiers |= MOD_CONSTRAINT_PLANE;
+			t->redraw = 1;
+			break;
+
 		case SPACEKEY:
 			if ((t->spacetype==SPACE_VIEW3D) && event->alt) {
 #if 0 // TRANSFORM_FIX_ME
@@ -597,7 +607,6 @@
 			}
 			break;
 			
-			
 		case MIDDLEMOUSE:
 			if ((t->flag & T_NO_CONSTRAINT)==0) {
 				/* exception for switching to dolly, or trackball, in camera view */
@@ -610,7 +619,7 @@
 					}
 				}
 				else {
-					t->flag |= T_MMB_PRESSED;
+					t->modifiers |= MOD_CONSTRAINT_SELECT;
 					if (t->con.mode & CON_APPLY) {
 						stopConstraint(t);
 					}
@@ -867,11 +876,22 @@
 	}
 	else {
 		switch (event->type){
-		/* no redraw on release modifier keys! this makes sure you can assign the 'grid' still 
-		   after releasing modifer key */
+		case LEFTSHIFTKEY:
+		case RIGHTSHIFTKEY:
+			t->modifiers &= ~MOD_CONSTRAINT_PLANE;
+			t->redraw = 1;
+			break;
+
+		case LEFTCTRLKEY:
+		case RIGHTCTRLKEY:
+			t->modifiers &= ~MOD_SNAP_GEARS;
+			/* no redraw on release modifier keys! this makes sure you can assign the 'grid' still 
+			   after releasing modifer key */
+			//t->redraw = 1;
+			break;
 		case MIDDLEMOUSE:
 			if ((t->flag & T_NO_CONSTRAINT)==0) {
-				t->flag &= ~T_MMB_PRESSED;
+				t->modifiers &= ~MOD_CONSTRAINT_SELECT;
 				postSelectConstraint(t);
 				t->redraw = 1;
 			}
@@ -928,8 +948,19 @@
 	return success;
 }
 
-void initTransform(bContext *C, TransInfo *t, int mode, int options, wmEvent *event)
+void saveTransform(bContext *C, TransInfo *t, wmOperator *op)
 {
+	RNA_int_set(op->ptr, "mode", t->mode);
+	RNA_int_set(op->ptr, "options", t->options);
+	RNA_float_set_array(op->ptr, "values", t->values);
+}
+
+void initTransform(bContext *C, TransInfo *t, wmOperator *op, wmEvent *event)
+{
+	int mode    = RNA_int_get(op->ptr, "mode");
+	int options = RNA_int_get(op->ptr, "options");
+	float values[4];
+
 	/* added initialize, for external calls to set stuff in TransInfo, like undo string */
 
 	t->state = TRANS_RUNNING;
@@ -1053,19 +1084,25 @@
 		initNodeTranslate(t);
 		break;
 	}
+
+
+
+	RNA_float_get_array(op->ptr, "values", values);
+	
+	/* overwrite initial values if operator supplied a non-null vector */
+	if (!QuatIsNul(values))
+	{
+		QUATCOPY(t->values, values); /* vec-4 */
+	}
+
 }
 
 void transformApply(TransInfo *t)
 {
-	if (1) // MOUSE MOVE
+	if (t->redraw)
 	{
-		if (t->flag & T_MMB_PRESSED)
+		if (t->modifiers & MOD_CONSTRAINT_SELECT)
 			t->con.mode |= CON_SELECT;
-		t->redraw = 1;
-	}
-	if (t->redraw)
-	{
-		// RESET MOUSE MOVE
 
 		selectConstraint(t);
 		if (t->transform) {
@@ -1090,15 +1127,25 @@
 
 int transformEnd(bContext *C, TransInfo *t)
 {
+	int exit_code = OPERATOR_RUNNING_MODAL;
+	
 	if (t->state != TRANS_RUNNING)
 	{
 		/* handle restoring objects */
-		if(t->state == TRANS_CANCEL) {
+		if(t->state == TRANS_CANCEL)
+		{
+			exit_code = OPERATOR_CANCELLED;
+			
+			/* TRANSFORM_FIX_ME fix jesty's node stuff, shouldn't be exceptional at this level */	
 			if(t->spacetype == SPACE_NODE)
 				restoreTransNodes(t);
 			else
 				restoreTransObjects(t);	// calls recalcData()
 		}
+		else
+		{
+			exit_code = OPERATOR_FINISHED;
+		}
 		
 		/* free data */
 		postTrans(t);
@@ -1119,12 +1166,9 @@
 			else ED_undo_push(C, transform_to_undostr(t));
 		}
 		t->undostr= NULL;
-
-		return 1;
 	}
-	t->event = NULL;
 	
-	return 0;
+	return exit_code;
 }
 
 /* ************************** Manipulator init and main **************************** */
@@ -3980,6 +4024,7 @@
 
 /* ---------------- Special Helpers for Various Settings ------------- */
 
+
 /* This function returns the snapping 'mode' for Animation Editors only 
  * We cannot use the standard snapping due to NLA-strip scaling complexities.
  */
@@ -4008,14 +4053,15 @@
 			autosnap= snla->autosnap;
 	}
 	else {
-		// FIXME: this still toggles the modes...
-		if (t->event->ctrl) 
-			autosnap= SACTSNAP_STEP;
-		else if (t->event->shift)
-			autosnap= SACTSNAP_FRAME;
-		else if (t->event->alt)
-			autosnap= SACTSNAP_MARKER;
-		else
+		// TRANSFORM_FIX_ME This needs to use proper defines for t->modifiers
+//		// FIXME: this still toggles the modes...
+//		if (ctrl) 
+//			autosnap= SACTSNAP_STEP;
+//		else if (shift)
+//			autosnap= SACTSNAP_FRAME;
+//		else if (alt)
+//			autosnap= SACTSNAP_MARKER;
+//		else
 			autosnap= SACTSNAP_OFF;
 	}
 	

Modified: branches/blender2.5/blender/source/blender/editors/transform/transform.h
===================================================================
--- branches/blender2.5/blender/source/blender/editors/transform/transform.h	2009-01-03 21:10:48 UTC (rev 18299)
+++ branches/blender2.5/blender/source/blender/editors/transform/transform.h	2009-01-03 22:15:59 UTC (rev 18300)
@@ -46,6 +46,7 @@
 struct bConstraint;
 struct BezTriple;
 struct wmOperatorType;
+struct wmOperator;
 struct bContext;
 struct wmEvent;
 struct ARegion;
@@ -187,6 +188,7 @@
 typedef struct TransInfo {
     int         mode;           /* current mode                         */
     int	        flag;           /* generic flags for special behaviors  */
+    int			modifiers;		/* special modifiers, by function, not key */
 	short		state;			/* current state (running, canceled,...)*/
     int         options;        /* current context/options for transform                      */
     float       val;            /* init value for some transformations (and rotation angle)  */
@@ -239,7 +241,6 @@
 	struct ScrArea	*sa;
 	struct ARegion	*ar;
 	struct Scene	*scene;
-	struct wmEvent	*event;		/* last event, reset at the start of each transformApply and nulled at the transformEnd */
     short       mval[2];        /* current mouse position               */
     struct Object   *obedit;
 } TransInfo;
@@ -282,9 +283,6 @@
 #define T_PROP_EDIT			(1 << 11)
 #define T_PROP_CONNECTED	(1 << 12)
 
-	/* if MMB is pressed or not */
-#define	T_MMB_PRESSED		(1 << 13)
-
 #define T_V3D_ALIGN			(1 << 14)
 	/* for 2d views like uv or ipo */
 #define T_2D_EDIT			(1 << 15) 
@@ -294,6 +292,13 @@
 	/* auto-ik is on */
 #define T_AUTOIK			(1 << 18)
 
+/* TransInfo->modifiers */
+#define	MOD_CONSTRAINT_SELECT	0x01
+#define	MOD_PRECISION			0x02
+#define	MOD_SNAP_GEARS			0x04
+#define	MOD_CONSTRAINT_PLANE	0x08
+
+
 /* ******************************************************************************** */
 
 /* transinfo->con->mode */
@@ -342,7 +347,8 @@
 
 void TFM_OT_transform(struct wmOperatorType *ot);
 
-void initTransform(struct bContext *C, struct TransInfo *t, int mode, int context, struct wmEvent *event);
+void initTransform(struct bContext *C, struct TransInfo *t, struct wmOperator *op, struct wmEvent *event);
+void saveTransform(struct bContext *C, struct TransInfo *t, struct wmOperator *op);
 void transformEvent(TransInfo *t, struct wmEvent *event);
 void transformApply(TransInfo *t);
 int  transformEnd(struct bContext *C, TransInfo *t);

Modified: branches/blender2.5/blender/source/blender/editors/transform/transform_constraints.c
===================================================================
--- branches/blender2.5/blender/source/blender/editors/transform/transform_constraints.c	2009-01-03 21:10:48 UTC (rev 18299)
+++ branches/blender2.5/blender/source/blender/editors/transform/transform_constraints.c	2009-01-03 22:15:59 UTC (rev 18300)
@@ -906,7 +906,6 @@
 
 static void setNearestAxis3d(TransInfo *t)
 {
-	wmEvent *event = t->event;
 	float zfac;
 	float mvec[3], axis[3], proj[3];
 	float len[3];
@@ -950,7 +949,7 @@
 	}
 
 	if (len[0] <= len[1] && len[0] <= len[2]) {
-		if (event->shift) {
+		if (t->modifiers & MOD_CONSTRAINT_PLANE) {
 			t->con.mode |= (CON_AXIS1|CON_AXIS2);
 			sprintf(t->con.text, " locking %s X axis", t->spacename);
 		}
@@ -960,7 +959,7 @@
 		}
 	}
 	else if (len[1] <= len[0] && len[1] <= len[2]) {
-		if (event->shift) {

@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list