[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [12676] trunk/blender/source/blender: Fixes for some long standing transform bugs.

Martin Poirier theeth at yahoo.com
Mon Nov 26 02:52:48 CET 2007


Revision: 12676
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=12676
Author:   theeth
Date:     2007-11-26 02:52:48 +0100 (Mon, 26 Nov 2007)

Log Message:
-----------
Fixes for some long standing transform bugs.

- [#6112] is this an extrusion bug?

When extruding, x-mirror was giving weird behavior since the extruded vertice could match with their non-extruded counterpart on the other side.

The solution is to disable x-mirror (with a transform context flag, like disabling PET) in that case.

- External constraint setup calls (BIF_*) didn't setup some internal structs properly.

For the user, this resulted in some transform (extrude particularly) showing a full 3d vector in the header instead of a scalar along the constraint axis (this messed up num input a bit too, you could type values in unused axis).

Modified Paths:
--------------
    trunk/blender/source/blender/include/BIF_transform.h
    trunk/blender/source/blender/src/editmesh_tools.c
    trunk/blender/source/blender/src/transform_constraints.c
    trunk/blender/source/blender/src/transform_conversions.c
    trunk/blender/source/blender/src/transform_generics.c

Modified: trunk/blender/source/blender/include/BIF_transform.h
===================================================================
--- trunk/blender/source/blender/include/BIF_transform.h	2007-11-26 01:04:01 UTC (rev 12675)
+++ trunk/blender/source/blender/include/BIF_transform.h	2007-11-26 01:52:48 UTC (rev 12676)
@@ -66,6 +66,7 @@
 #define CTX_EDGE			2
 #define CTX_NO_PET			4
 #define CTX_TWEAK			8
+#define CTX_NO_MIRROR		16
 
 void initTransform(int mode, int context);
 void Transform(void);

Modified: trunk/blender/source/blender/src/editmesh_tools.c
===================================================================
--- trunk/blender/source/blender/src/editmesh_tools.c	2007-11-26 01:04:01 UTC (rev 12675)
+++ trunk/blender/source/blender/src/editmesh_tools.c	2007-11-26 01:52:48 UTC (rev 12676)
@@ -679,15 +679,15 @@
 		/* individual faces? */
 		BIF_TransformSetUndo("Extrude");
 		if(nr==2) {
-			initTransform(TFM_SHRINKFATTEN, CTX_NO_PET);
+			initTransform(TFM_SHRINKFATTEN, CTX_NO_PET|CTX_NO_MIRROR);
 			Transform();
 		}
 		else {
-			initTransform(TFM_TRANSLATION, CTX_NO_PET);
+			initTransform(TFM_TRANSLATION, CTX_NO_PET|CTX_NO_MIRROR);
 			if(transmode=='n') {
 				Mat4MulVecfl(G.obedit->obmat, nor);
 				VecSubf(nor, nor, G.obedit->obmat[3]);
-				BIF_setSingleAxisConstraint(nor, NULL);
+				BIF_setSingleAxisConstraint(nor, "along normal");
 			}
 			Transform();
 		}

Modified: trunk/blender/source/blender/src/transform_constraints.c
===================================================================
--- trunk/blender/source/blender/src/transform_constraints.c	2007-11-26 01:04:01 UTC (rev 12675)
+++ trunk/blender/source/blender/src/transform_constraints.c	2007-11-26 01:52:48 UTC (rev 12676)
@@ -594,12 +594,21 @@
 	Mat3Ortho(space);
 
 	Mat3CpyMat3(t->con.mtx, space);
-	t->con.mode = (CON_AXIS0|CON_APPLY);
+	t->con.mode = CON_AXIS0;
+	
 	getConstraintMatrix(t);
 
+	startConstraint(t);
+	
 	/* start copying with an offset of 1, to reserve a spot for the SPACE char */
-	if(text) strncpy(t->con.text+1, text, 48);	// 50 in struct
-
+	if(text)
+	{
+		strncpy(t->con.text+1, text, 48);	/* 50 in struct */
+	}
+	else
+	{
+		t->con.text[1] = '\0'; /* No text */
+	}
 	
 	t->con.drawExtra = NULL;
 	t->con.applyVec = applyAxisConstraintVec;
@@ -618,11 +627,21 @@
 	Mat3Ortho(space);
 	
 	Mat3CpyMat3(t->con.mtx, space);
-	t->con.mode = (CON_AXIS0|CON_AXIS1|CON_APPLY);
+	t->con.mode = CON_AXIS0|CON_AXIS1;
+
 	getConstraintMatrix(t);
+
+	startConstraint(t);
 	
 	/* start copying with an offset of 1, to reserve a spot for the SPACE char */
-	if(text) strncpy(t->con.text+1, text, 48);	// 50 in struct
+	if(text)
+	{
+		strncpy(t->con.text+1, text, 48);	/* 50 in struct */
+	}
+	else
+	{
+		t->con.text[1] = '\0'; /* No text */
+	}
 
 	t->con.drawExtra = NULL;
 	t->con.applyVec = applyAxisConstraintVec;

Modified: trunk/blender/source/blender/src/transform_conversions.c
===================================================================
--- trunk/blender/source/blender/src/transform_conversions.c	2007-11-26 01:04:01 UTC (rev 12675)
+++ trunk/blender/source/blender/src/transform_conversions.c	2007-11-26 01:52:48 UTC (rev 12676)
@@ -1689,7 +1689,12 @@
 	float mtx[3][3], smtx[3][3], (*defmats)[3][3] = NULL, (*defcos)[3] = NULL;
 	int count=0, countsel=0, a, totleft;
 	int propmode = t->flag & T_PROP_EDIT;
-	int mirror= (G.scene->toolsettings->editbutflag & B_MESH_X_MIRROR);
+	int mirror = 0;
+	
+	if ((t->context & CTX_NO_MIRROR) == 0 || (G.scene->toolsettings->editbutflag & B_MESH_X_MIRROR))
+	{
+		mirror = 1;
+	}
 
 	// transform now requires awareness for select mode, so we tag the f1 flags in verts
 	if(G.scene->selectmode & SCE_SELECT_VERTEX) {

Modified: trunk/blender/source/blender/src/transform_generics.c
===================================================================
--- trunk/blender/source/blender/src/transform_generics.c	2007-11-26 01:04:01 UTC (rev 12675)
+++ trunk/blender/source/blender/src/transform_generics.c	2007-11-26 01:52:48 UTC (rev 12676)
@@ -377,7 +377,7 @@
 				if(t->state != TRANS_CANCEL)
 					clipMirrorModifier(t, G.obedit);
 				
-				if(G.scene->toolsettings->editbutflag & B_MESH_X_MIRROR)
+				if((t->context & CTX_NO_MIRROR) == 0 && (G.scene->toolsettings->editbutflag & B_MESH_X_MIRROR))
 					editmesh_apply_to_mirror(t);
 				
 				DAG_object_flush_update(G.scene, G.obedit, OB_RECALC_DATA);  /* sets recalc flags */





More information about the Bf-blender-cvs mailing list