[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [25445] trunk/blender/source/blender/ editors/transform: Bugfix: [#20406] reapeat duplication along axis+view transform orientation
Martin Poirier
theeth at yahoo.com
Thu Dec 17 18:34:56 CET 2009
Revision: 25445
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=25445
Author: theeth
Date: 2009-12-17 18:34:56 +0100 (Thu, 17 Dec 2009)
Log Message:
-----------
Bugfix: [#20406] reapeat duplication along axis+view transform orientation
Saving back orientation in operator didn't take into account that constraint orientation can be different than user selected orientation.
Also simplify the switching logic a little.
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_constraints.c
Modified: trunk/blender/source/blender/editors/transform/transform.c
===================================================================
--- trunk/blender/source/blender/editors/transform/transform.c 2009-12-17 17:15:38 UTC (rev 25444)
+++ trunk/blender/source/blender/editors/transform/transform.c 2009-12-17 17:34:56 UTC (rev 25445)
@@ -673,7 +673,7 @@
}
else {
if (t->flag & T_2D_EDIT) {
- setConstraint(t, mati, (CON_AXIS0), "along X axis");
+ setUserConstraint(t, V3D_MANIP_GLOBAL, (CON_AXIS0), "along X");
}
else {
setUserConstraint(t, t->current_orientation, (CON_AXIS0), "along %s X");
@@ -689,7 +689,7 @@
}
else {
if (t->flag & T_2D_EDIT) {
- setConstraint(t, mati, (CON_AXIS1), "along Y axis");
+ setUserConstraint(t, V3D_MANIP_GLOBAL, (CON_AXIS1), "along Y");
}
else {
setUserConstraint(t, t->current_orientation, (CON_AXIS1), "along %s Y");
@@ -699,17 +699,12 @@
}
break;
case TFM_MODAL_AXIS_Z:
- if ((t->flag & T_NO_CONSTRAINT)==0) {
+ if ((t->flag & (T_NO_CONSTRAINT|T_2D_EDIT))== 0) {
if (cmode == 'Z') {
stopConstraint(t);
}
else {
- if (t->flag & T_2D_EDIT) {
- setConstraint(t, mati, (CON_AXIS0), "along Z axis");
- }
- else {
- setUserConstraint(t, t->current_orientation, (CON_AXIS2), "along %s Z");
- }
+ setUserConstraint(t, t->current_orientation, (CON_AXIS2), "along %s Z");
}
t->redraw = 1;
}
@@ -886,32 +881,28 @@
break;
case XKEY:
if ((t->flag & T_NO_CONSTRAINT)==0) {
- if (cmode == 'X') {
- if (t->flag & T_2D_EDIT) {
+ if (t->flag & T_2D_EDIT) {
+ if (cmode == 'X') {
stopConstraint(t);
+ } else {
+ setUserConstraint(t, V3D_MANIP_GLOBAL, (CON_AXIS0), "along X");
}
- else {
- if (t->con.mode & CON_USER) {
+ } else {
+ if (cmode == 'X') {
+ if (t->con.orientation != V3D_MANIP_GLOBAL) {
stopConstraint(t);
- }
- else {
+ } else {
short orientation = t->current_orientation != V3D_MANIP_GLOBAL ? t->current_orientation : V3D_MANIP_LOCAL;
if ((t->modifiers & MOD_CONSTRAINT_PLANE) == 0)
setUserConstraint(t, orientation, (CON_AXIS0), "along %s X");
else if (t->modifiers & MOD_CONSTRAINT_PLANE)
setUserConstraint(t, orientation, (CON_AXIS1|CON_AXIS2), "locking %s X");
}
- }
- }
- else {
- if (t->flag & T_2D_EDIT) {
- setConstraint(t, mati, (CON_AXIS0), "along X axis");
- }
- else {
+ } else {
if ((t->modifiers & MOD_CONSTRAINT_PLANE) == 0)
- setConstraint(t, mati, (CON_AXIS0), "along global X");
+ setUserConstraint(t, V3D_MANIP_GLOBAL, (CON_AXIS0), "along %s X");
else if (t->modifiers & MOD_CONSTRAINT_PLANE)
- setConstraint(t, mati, (CON_AXIS1|CON_AXIS2), "locking global X");
+ setUserConstraint(t, V3D_MANIP_GLOBAL, (CON_AXIS1|CON_AXIS2), "locking %s X");
}
}
t->redraw = 1;
@@ -919,56 +910,50 @@
break;
case YKEY:
if ((t->flag & T_NO_CONSTRAINT)==0) {
- if (cmode == 'Y') {
- if (t->flag & T_2D_EDIT) {
+ if (t->flag & T_2D_EDIT) {
+ if (cmode == 'Y') {
stopConstraint(t);
+ } else {
+ setUserConstraint(t, V3D_MANIP_GLOBAL, (CON_AXIS1), "along Y");
}
- else {
- if (t->con.mode & CON_USER) {
+ } else {
+ if (cmode == 'Y') {
+ if (t->con.orientation != V3D_MANIP_GLOBAL) {
stopConstraint(t);
- }
- else {
+ } else {
short orientation = t->current_orientation != V3D_MANIP_GLOBAL ? t->current_orientation : V3D_MANIP_LOCAL;
if ((t->modifiers & MOD_CONSTRAINT_PLANE) == 0)
setUserConstraint(t, orientation, (CON_AXIS1), "along %s Y");
else if (t->modifiers & MOD_CONSTRAINT_PLANE)
setUserConstraint(t, orientation, (CON_AXIS0|CON_AXIS2), "locking %s Y");
}
- }
- }
- else {
- if (t->flag & T_2D_EDIT) {
- setConstraint(t, mati, (CON_AXIS1), "along Y axis");
- }
- else {
+ } else {
if ((t->modifiers & MOD_CONSTRAINT_PLANE) == 0)
- setConstraint(t, mati, (CON_AXIS1), "along global Y");
+ setUserConstraint(t, V3D_MANIP_GLOBAL, (CON_AXIS1), "along %s Y");
else if (t->modifiers & MOD_CONSTRAINT_PLANE)
- setConstraint(t, mati, (CON_AXIS0|CON_AXIS2), "locking global Y");
+ setUserConstraint(t, V3D_MANIP_GLOBAL, (CON_AXIS0|CON_AXIS2), "locking %s Y");
}
}
t->redraw = 1;
}
break;
case ZKEY:
- if ((t->flag & T_NO_CONSTRAINT)==0) {
+ if ((t->flag & (T_NO_CONSTRAINT|T_2D_EDIT))==0) {
if (cmode == 'Z') {
- if (t->con.mode & CON_USER) {
+ if (t->con.orientation != V3D_MANIP_GLOBAL) {
stopConstraint(t);
- }
- else {
+ } else {
short orientation = t->current_orientation != V3D_MANIP_GLOBAL ? t->current_orientation : V3D_MANIP_LOCAL;
if ((t->modifiers & MOD_CONSTRAINT_PLANE) == 0)
setUserConstraint(t, orientation, (CON_AXIS2), "along %s Z");
- else if ((t->modifiers & MOD_CONSTRAINT_PLANE) && ((t->flag & T_2D_EDIT)==0))
+ else if (t->modifiers & MOD_CONSTRAINT_PLANE)
setUserConstraint(t, orientation, (CON_AXIS0|CON_AXIS1), "locking %s Z");
}
- }
- else if ((t->flag & T_2D_EDIT)==0) {
+ } else {
if ((t->modifiers & MOD_CONSTRAINT_PLANE) == 0)
- setConstraint(t, mati, (CON_AXIS2), "along global Z");
+ setUserConstraint(t, V3D_MANIP_GLOBAL, (CON_AXIS2), "along %s Z");
else if (t->modifiers & MOD_CONSTRAINT_PLANE)
- setConstraint(t, mati, (CON_AXIS0|CON_AXIS1), "locking global Z");
+ setUserConstraint(t, V3D_MANIP_GLOBAL, (CON_AXIS0|CON_AXIS1), "locking %s Z");
}
t->redraw = 1;
}
@@ -1464,7 +1449,14 @@
if (RNA_struct_find_property(op->ptr, "constraint_axis"))
{
- RNA_enum_set(op->ptr, "constraint_orientation", t->current_orientation);
+ /* constraint orientation can be global, event if user selects something else
+ * so use the orientation in the constraint if set
+ * */
+ if (t->con.mode & CON_APPLY) {
+ RNA_enum_set(op->ptr, "constraint_orientation", t->con.orientation);
+ } else {
+ RNA_enum_set(op->ptr, "constraint_orientation", t->current_orientation);
+ }
if (t->con.mode & CON_APPLY)
{
Modified: trunk/blender/source/blender/editors/transform/transform.h
===================================================================
--- trunk/blender/source/blender/editors/transform/transform.h 2009-12-17 17:15:38 UTC (rev 25444)
+++ trunk/blender/source/blender/editors/transform/transform.h 2009-12-17 17:34:56 UTC (rev 25445)
@@ -112,6 +112,7 @@
} TransSnap;
typedef struct TransCon {
+ short orientation; /**/
char text[50]; /* Description of the Constraint for header_print */
float mtx[3][3]; /* Matrix of the Constraint space */
float imtx[3][3]; /* Inverse Matrix of the Constraint space */
Modified: trunk/blender/source/blender/editors/transform/transform_constraints.c
===================================================================
--- trunk/blender/source/blender/editors/transform/transform_constraints.c 2009-12-17 17:15:38 UTC (rev 25444)
+++ trunk/blender/source/blender/editors/transform/transform_constraints.c 2009-12-17 17:34:56 UTC (rev 25445)
@@ -599,6 +599,8 @@
break;
}
+ t->con.orientation = orientation;
+
t->con.mode |= CON_USER;
}
More information about the Bf-blender-cvs
mailing list