Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCampbell Barton <ideasman42@gmail.com>2019-02-26 12:17:40 +0300
committerCampbell Barton <ideasman42@gmail.com>2019-02-26 13:15:45 +0300
commit0a87bf67849be91d4b874862815c8ca9e93a4047 (patch)
treec12214b43e827cb1215ec44b20f03cb08bb427f5
parent13dd8b69f036980b7ad14b692ad5c1edb11745d0 (diff)
Transform: don't set the user constraint when it's not set
The orientation for the redo panel would be set even when not used, add an 'unset' orientation which defaults to global.
-rw-r--r--source/blender/editors/transform/transform.c4
-rw-r--r--source/blender/editors/transform/transform.h7
-rw-r--r--source/blender/editors/transform/transform_constraints.c21
-rw-r--r--source/blender/editors/transform/transform_generics.c1
4 files changed, 24 insertions, 9 deletions
diff --git a/source/blender/editors/transform/transform.c b/source/blender/editors/transform/transform.c
index 487adf29ad8..e10d32716ac 100644
--- a/source/blender/editors/transform/transform.c
+++ b/source/blender/editors/transform/transform.c
@@ -2171,7 +2171,7 @@ void saveTransform(bContext *C, TransInfo *t, wmOperator *op)
if ((prop = RNA_struct_find_property(op->ptr, "constraint_axis"))) {
/* constraint orientation can be global, even if user selects something else
* so use the orientation in the constraint if set */
- short orientation = (t->con.mode & CON_APPLY) ? t->con.orientation : t->orientation.user;
+ short orientation = (t->con.mode & CON_APPLY) ? t->con.orientation : t->orientation.unset;
if (orientation == V3D_ORIENT_CUSTOM) {
const int orientation_index_custom = BKE_scene_transform_orientation_get_index(
@@ -2194,7 +2194,7 @@ void saveTransform(bContext *C, TransInfo *t, wmOperator *op)
RNA_enum_set(op->ptr, "constraint_matrix_orientation", orientation);
}
}
- if (t->con.mode & CON_APPLY) {
+ if (t->con.mode & CON_APPLY || (t->orientation.unset != V3D_ORIENT_GLOBAL)) {
RNA_float_set_array(op->ptr, "constraint_matrix", &t->con.mtx[0][0]);
}
else {
diff --git a/source/blender/editors/transform/transform.h b/source/blender/editors/transform/transform.h
index 881de792391..b234dabdc0b 100644
--- a/source/blender/editors/transform/transform.h
+++ b/source/blender/editors/transform/transform.h
@@ -607,6 +607,10 @@ typedef struct TransInfo {
short launch_event;
struct {
+ /** Orientation type when when we're not constrained.
+ * nearly always global except for rotate which defaults to screen-space orientation. */
+ short unset;
+ /** Orientation to use when a key is pressed. */
short user;
/* Used when user is global. */
short user_alt;
@@ -913,7 +917,8 @@ void constraintNumInput(TransInfo *t, float vec[3]);
bool isLockConstraint(TransInfo *t);
int getConstraintSpaceDimension(TransInfo *t);
-char constraintModeToChar(TransInfo *t);
+int constraintModeToIndex(const TransInfo *t);
+char constraintModeToChar(const TransInfo *t);
void startConstraint(TransInfo *t);
void stopConstraint(TransInfo *t);
diff --git a/source/blender/editors/transform/transform_constraints.c b/source/blender/editors/transform/transform_constraints.c
index 5bf65c16329..4bed5a3f05c 100644
--- a/source/blender/editors/transform/transform_constraints.c
+++ b/source/blender/editors/transform/transform_constraints.c
@@ -1092,26 +1092,35 @@ void setNearestAxis(TransInfo *t)
/*-------------- HELPER FUNCTIONS ----------------*/
-char constraintModeToChar(TransInfo *t)
+int constraintModeToIndex(const TransInfo *t)
{
if ((t->con.mode & CON_APPLY) == 0) {
- return '\0';
+ return -1;
}
switch (t->con.mode & (CON_AXIS0 | CON_AXIS1 | CON_AXIS2)) {
case (CON_AXIS0):
case (CON_AXIS1 | CON_AXIS2):
- return 'X';
+ return 0;
case (CON_AXIS1):
case (CON_AXIS0 | CON_AXIS2):
- return 'Y';
+ return 1;
case (CON_AXIS2):
case (CON_AXIS0 | CON_AXIS1):
- return 'Z';
+ return 2;
default:
- return '\0';
+ return -1;
}
}
+char constraintModeToChar(const TransInfo *t)
+{
+ int index = constraintModeToIndex(t);
+ if (index == -1) {
+ return '\0';
+ }
+ BLI_assert((uint)index < 3);
+ return 'X' + index;
+}
bool isLockConstraint(TransInfo *t)
{
diff --git a/source/blender/editors/transform/transform_generics.c b/source/blender/editors/transform/transform_generics.c
index 0bdd18793f4..9dc64d9fd49 100644
--- a/source/blender/editors/transform/transform_generics.c
+++ b/source/blender/editors/transform/transform_generics.c
@@ -1410,6 +1410,7 @@ void initTransInfo(bContext *C, TransInfo *t, wmOperator *op, const wmEvent *eve
}
TransformOrientationSlot *orient_slot = &t->scene->orientation_slots[SCE_ORIENT_DEFAULT];
+ t->orientation.unset = V3D_ORIENT_GLOBAL;
t->orientation.user = orient_slot->type;
t->orientation.custom = BKE_scene_transform_orientation_find(t->scene, orient_slot->index_custom);