[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [19438] branches/blender2.5/blender/source /blender/editors/transform: Correctly cancel operator is there' s no transform data.

Martin Poirier theeth at yahoo.com
Sat Mar 28 21:46:39 CET 2009


Revision: 19438
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=19438
Author:   theeth
Date:     2009-03-28 21:46:38 +0100 (Sat, 28 Mar 2009)

Log Message:
-----------
Correctly cancel operator is there's no transform data.

Don't access RegionView3D if region is of the wrong type.

Correctly draw extra transform stuff (like snap and pet circles) in multiple 3d regions.

Modified Paths:
--------------
    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_conversions.c
    branches/blender2.5/blender/source/blender/editors/transform/transform_generics.c
    branches/blender2.5/blender/source/blender/editors/transform/transform_ops.c
    branches/blender2.5/blender/source/blender/editors/transform/transform_orientations.c
    branches/blender2.5/blender/source/blender/editors/transform/transform_snap.c

Modified: branches/blender2.5/blender/source/blender/editors/transform/transform.c
===================================================================
--- branches/blender2.5/blender/source/blender/editors/transform/transform.c	2009-03-28 19:31:22 UTC (rev 19437)
+++ branches/blender2.5/blender/source/blender/editors/transform/transform.c	2009-03-28 20:46:38 UTC (rev 19438)
@@ -163,7 +163,7 @@
 
 void setTransformViewMatrices(TransInfo *t)
 {
-	if(t->spacetype==SPACE_VIEW3D) {
+	if(t->spacetype==SPACE_VIEW3D && t->ar->regiontype == RGN_TYPE_WINDOW) {
 		RegionView3D *rv3d = t->ar->regiondata;
 		
 		Mat4CpyMat4(t->viewmat, rv3d->viewmat);
@@ -186,7 +186,10 @@
 void convertViewVec(TransInfo *t, float *vec, short dx, short dy)
 {
 	if (t->spacetype==SPACE_VIEW3D) {
-		window_to_3d_delta(t->ar, vec, dx, dy);
+		if (t->ar->regiontype == RGN_TYPE_WINDOW)
+		{
+			window_to_3d_delta(t->ar, vec, dx, dy);
+		}
 	}
 	else if(t->spacetype==SPACE_IMAGE) {
 		View2D *v2d = t->view;
@@ -935,9 +938,9 @@
 {
 	TransInfo *t = arg;
 	
-	drawConstraint(t);
-	drawPropCircle(t);
-	drawSnapping(t);
+	drawConstraint(C, t);
+	drawPropCircle(C, t);
+	drawSnapping(C, t);
 }
 
 void saveTransform(bContext *C, TransInfo *t, wmOperator *op)
@@ -1016,7 +1019,7 @@
 	}
 }
 
-void initTransform(bContext *C, TransInfo *t, wmOperator *op, wmEvent *event, int mode)
+int initTransform(bContext *C, TransInfo *t, wmOperator *op, wmEvent *event, int mode)
 {
 	int options = 0;
 
@@ -1028,15 +1031,21 @@
 	
 	t->mode = mode;
 
-	initTransInfo(C, t, op, event);					// internal data, mouse, vectors
+	if (!initTransInfo(C, t, op, event))					// internal data, mouse, vectors
+	{
+		return 0;
+	}
 
 	initTransformOrientation(C, t);
 
 	if(t->spacetype == SPACE_VIEW3D)
 	{
-		RegionView3D *rv3d = t->ar->regiondata;
 		//calc_manipulator_stats(curarea);
-		Mat3CpyMat4(t->spacemtx, rv3d->twmat);
+		if (t->ar->regiontype == RGN_TYPE_WINDOW)
+		{
+			RegionView3D *rv3d = t->ar->regiondata;
+			Mat3CpyMat4(t->spacemtx, rv3d->twmat);
+		}
 		Mat3Ortho(t->spacemtx);
 		
 		t->draw_handle = ED_region_draw_cb_activate(t->ar->type, drawTransform, t, REGION_DRAW_POST);
@@ -1050,13 +1059,13 @@
 
 	createTransData(C, t);			// make TransData structs from selection
 
-	initSnapping(t); // Initialize snapping data AFTER mode flags
-
 	if (t->total == 0) {
 		postTrans(t);
-		return;
+		return 0;
 	}
 
+	initSnapping(t); // Initialize snapping data AFTER mode flags
+
 	/* EVIL! posemode code can switch translation to rotate when 1 bone is selected. will be removed (ton) */
 	/* EVIL2: we gave as argument also texture space context bit... was cleared */
 	/* EVIL3: extend mode for animation editors also switches modes... but is best way to avoid duplicate code */
@@ -1190,6 +1199,8 @@
 			setUserConstraint(t, t->con.mode, "%s");		
 		}
 	}
+	
+	return 1;
 }
 
 void transformApply(bContext *C, TransInfo *t)
@@ -3078,8 +3089,6 @@
 
 	ED_area_headerprint(t->sa, str);
 
-	drawSnapping(t);
-
 	return 1;
 }
 

Modified: branches/blender2.5/blender/source/blender/editors/transform/transform.h
===================================================================
--- branches/blender2.5/blender/source/blender/editors/transform/transform.h	2009-03-28 19:31:22 UTC (rev 19437)
+++ branches/blender2.5/blender/source/blender/editors/transform/transform.h	2009-03-28 20:46:38 UTC (rev 19438)
@@ -367,7 +367,7 @@
 
 void TFM_OT_transform(struct wmOperatorType *ot);
 
-void initTransform(struct bContext *C, struct TransInfo *t, struct wmOperator *op, struct wmEvent *event, int mode);
+int initTransform(struct bContext *C, struct TransInfo *t, struct wmOperator *op, struct wmEvent *event, int mode);
 void saveTransform(struct bContext *C, struct TransInfo *t, struct wmOperator *op);
 void transformEvent(TransInfo *t, struct wmEvent *event);
 void transformApply(struct bContext *C, TransInfo *t);
@@ -454,7 +454,7 @@
 int Align(TransInfo *t, short mval[2]);
 
 
-void drawPropCircle(TransInfo *t);
+void drawPropCircle(const struct bContext *C, TransInfo *t);
 
 /*********************** transform_conversions.c ********** */
 struct ListBase;
@@ -488,7 +488,7 @@
 
 /*********************** Constraints *****************************/
 
-void drawConstraint(TransInfo *t);
+void drawConstraint(const struct bContext *C, TransInfo *t);
 
 void getConstraintMatrix(TransInfo *t);
 void setConstraint(TransInfo *t, float space[3][3], int mode, const char text[]);
@@ -526,7 +526,7 @@
 void applySnapping(TransInfo *t, float *vec);
 void resetSnapping(TransInfo *t);
 int  handleSnapping(TransInfo *t, struct wmEvent *event);
-void drawSnapping(TransInfo *t);
+void drawSnapping(const struct bContext *C, TransInfo *t);
 int usingSnappingNormal(TransInfo *t);
 int validSnappingNormal(TransInfo *t);
 
@@ -552,7 +552,7 @@
 
 /*********************** Generics ********************************/
 
-void initTransInfo(struct bContext *C, TransInfo *t, struct wmOperator *op, struct wmEvent *event);
+int initTransInfo(struct bContext *C, TransInfo *t, struct wmOperator *op, struct wmEvent *event);
 void postTrans (TransInfo *t);
 void resetTransRestrictions(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-03-28 19:31:22 UTC (rev 19437)
+++ branches/blender2.5/blender/source/blender/editors/transform/transform_constraints.c	2009-03-28 20:46:38 UTC (rev 19438)
@@ -710,7 +710,7 @@
 
 /*----------------- DRAWING CONSTRAINTS -------------------*/
 
-void drawConstraint(TransInfo *t)
+void drawConstraint(const struct bContext *C, TransInfo *t)
 {
 	TransCon *tc = &(t->con);
 
@@ -769,17 +769,16 @@
 }
 
 /* called from drawview.c, as an extra per-window draw option */
-void drawPropCircle(TransInfo *t)
+void drawPropCircle(const struct bContext *C, TransInfo *t)
 {
 	if (t->flag & T_PROP_EDIT) {
+		RegionView3D *rv3d = CTX_wm_region_view3d(C);
 		float tmat[4][4], imat[4][4];
 
 		UI_ThemeColor(TH_GRID);
 		
-		if(t->spacetype == SPACE_VIEW3D)
+		if(t->spacetype == SPACE_VIEW3D && rv3d != NULL)
 		{
-			RegionView3D *rv3d = t->ar->regiondata;
-			
 			Mat4CpyMat4(tmat, rv3d->viewmat);
 			Mat4Invert(imat, tmat);
 		}

Modified: branches/blender2.5/blender/source/blender/editors/transform/transform_conversions.c
===================================================================
--- branches/blender2.5/blender/source/blender/editors/transform/transform_conversions.c	2009-03-28 19:31:22 UTC (rev 19437)
+++ branches/blender2.5/blender/source/blender/editors/transform/transform_conversions.c	2009-03-28 20:46:38 UTC (rev 19438)
@@ -5013,16 +5013,18 @@
 		t->flag |= T_POINTS;
 	}
 	else {
-		View3D *v3d = t->view;
-		RegionView3D *rv3d = t->ar->regiondata;
-		
 		t->flag &= ~T_PROP_EDIT; /* no proportional edit in object mode */
 		createTransObject(C, t);
 		t->flag |= T_OBJECT;
 		
-		if((t->flag & T_OBJECT) && v3d->camera == OBACT && rv3d->persp==V3D_CAMOB)
+		if (t->ar->regiontype == RGN_TYPE_WINDOW)
 		{
-			t->flag |= T_CAMERA;
+			View3D *v3d = t->view;
+			RegionView3D *rv3d = t->ar->regiondata;
+			if((t->flag & T_OBJECT) && v3d->camera == OBACT && rv3d->persp==V3D_CAMOB)
+			{
+				t->flag |= T_CAMERA;
+			}
 		}
 	}
 

Modified: branches/blender2.5/blender/source/blender/editors/transform/transform_generics.c
===================================================================
--- branches/blender2.5/blender/source/blender/editors/transform/transform_generics.c	2009-03-28 19:31:22 UTC (rev 19437)
+++ branches/blender2.5/blender/source/blender/editors/transform/transform_generics.c	2009-03-28 20:46:38 UTC (rev 19438)
@@ -663,7 +663,7 @@
 	t->flag &= ~T_ALL_RESTRICTIONS;
 }
 
-void initTransInfo (bContext *C, TransInfo *t, wmOperator *op, wmEvent *event)
+int initTransInfo (bContext *C, TransInfo *t, wmOperator *op, wmEvent *event)
 {
 	Scene *sce = CTX_data_scene(C);
 	ARegion *ar = CTX_wm_region(C);
@@ -828,6 +828,8 @@
 	setTransformViewMatrices(t);
 	initNumInput(&t->num);
 	initNDofInput(&t->ndof);
+	
+	return 1;
 }
 
 /* Here I would suggest only TransInfo related issues, like free data & reset vars. Not redraws */

Modified: branches/blender2.5/blender/source/blender/editors/transform/transform_ops.c
===================================================================
--- branches/blender2.5/blender/source/blender/editors/transform/transform_ops.c	2009-03-28 19:31:22 UTC (rev 19437)
+++ branches/blender2.5/blender/source/blender/editors/transform/transform_ops.c	2009-03-28 20:46:38 UTC (rev 19438)
@@ -150,8 +150,9 @@
 	op->customdata = NULL;
 }
 
-static void transformops_data(bContext *C, wmOperator *op, wmEvent *event)
+static int transformops_data(bContext *C, wmOperator *op, wmEvent *event)
 {
+	int retval = 1;
 	if (op->customdata == NULL)
 	{
 		TransInfo *t = MEM_callocN(sizeof(TransInfo), "TransInfo data");
@@ -171,11 +172,13 @@
 			mode = RNA_int_get(op->ptr, "mode");
 		}
 
-		initTransform(C, t, op, event, mode);
+		retval = initTransform(C, t, op, event, mode);
 	
 		/* store data */
 		op->customdata = t;
 	}
+	
+	return retval; /* return 0 on error */
 }
 
 static int transform_modal(bContext *C, wmOperator *op, wmEvent *event)
@@ -214,7 +217,10 @@
 {
 	TransInfo *t;
 
-	transformops_data(C, op, NULL);
+	if (!transformops_data(C, op, NULL))
+	{
+		return OPERATOR_CANCELLED;
+	}
 
 	t = op->customdata;
 
@@ -231,7 +237,10 @@
 
 static int transform_invoke(bContext *C, wmOperator *op, wmEvent *event)
 {
-	transformops_data(C, op, event);
+	if (!transformops_data(C, op, event))
+	{
+		return OPERATOR_CANCELLED;
+	}
 
 	if(RNA_property_is_set(op->ptr, "value")) {
 		return transform_exec(C, op);

Modified: branches/blender2.5/blender/source/blender/editors/transform/transform_orientations.c
===================================================================
--- branches/blender2.5/blender/source/blender/editors/transform/transform_orientations.c	2009-03-28 19:31:22 UTC (rev 19437)
+++ branches/blender2.5/blender/source/blender/editors/transform/transform_orientations.c	2009-03-28 20:46:38 UTC (rev 19438)
@@ -448,7 +448,7 @@
 void initTransformOrientation(bContext *C, TransInfo *t)
 {
 	View3D *v3d = CTX_wm_view3d(C);
-	RegionView3D *rv3d= CTX_wm_region_view3d(C);
+	RegionView3D *rv3d = CTX_wm_region_view3d(C);
 	Object *ob = CTX_data_active_object(C);
 	Object *obedit = CTX_data_active_object(C);
 	float normal[3]={0.0, 0.0, 0.0};


@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list