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
path: root/source
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 /source
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.
Diffstat (limited to 'source')
-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);