[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