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:
-rw-r--r--release/scripts/startup/bl_ui/properties_constraint.py9
-rw-r--r--source/blender/blenkernel/intern/constraint.c10
-rw-r--r--source/blender/makesdna/DNA_constraint_types.h2
-rw-r--r--source/blender/makesrna/intern/rna_constraint.c11
4 files changed, 25 insertions, 7 deletions
diff --git a/release/scripts/startup/bl_ui/properties_constraint.py b/release/scripts/startup/bl_ui/properties_constraint.py
index dce2d2f2758..b75d67b5350 100644
--- a/release/scripts/startup/bl_ui/properties_constraint.py
+++ b/release/scripts/startup/bl_ui/properties_constraint.py
@@ -543,11 +543,14 @@ class ConstraintButtonsPanel:
col.active = con.use_bulge_min or con.use_bulge_max
col.prop(con, "bulge_smooth", text="Smooth")
- row = layout.row()
- row.label(text="Volume:")
+ split = layout.split(factor=0.3)
+ split.label(text="Volume:")
+ row = split.row()
row.prop(con, "volume", expand=True)
- row.label(text="Plane:")
+ split = layout.split(factor=0.3)
+ split.label(text="Rotation:")
+ row = split.row()
row.prop(con, "keep_axis", expand=True)
def FLOOR(self, _context, layout, con):
diff --git a/source/blender/blenkernel/intern/constraint.c b/source/blender/blenkernel/intern/constraint.c
index bee2e05f8d9..c397fbcf115 100644
--- a/source/blender/blenkernel/intern/constraint.c
+++ b/source/blender/blenkernel/intern/constraint.c
@@ -3242,6 +3242,12 @@ static void stretchto_evaluate(bConstraint *con, bConstraintOb *cob, ListBase *t
float size[3], scale[3], vec[3], xx[3], zz[3], orth[3];
float dist, bulge;
+ /* Remove shear if using the Damped Track mode; the other modes
+ * do it as a side effect, which is relied on by rigs. */
+ if (data->plane == SWING_Y) {
+ orthogonalize_m4_stable(cob->matrix, 1, false);
+ }
+
/* store scaling before destroying obmat */
normalize_m4_ex(cob->matrix, size);
@@ -3329,6 +3335,10 @@ static void stretchto_evaluate(bConstraint *con, bConstraintOb *cob, ListBase *t
mul_v3_v3(size, scale);
switch (data->plane) {
+ case SWING_Y:
+ /* Point the Y axis using Damped Track math. */
+ damptrack_do_transform(cob->matrix, vec, TRACK_Y);
+ break;
case PLANE_X:
/* new Y aligns object target connection*/
copy_v3_v3(cob->matrix[1], vec);
diff --git a/source/blender/makesdna/DNA_constraint_types.h b/source/blender/makesdna/DNA_constraint_types.h
index 83fc4d2a3f7..d7b392d5133 100644
--- a/source/blender/makesdna/DNA_constraint_types.h
+++ b/source/blender/makesdna/DNA_constraint_types.h
@@ -930,7 +930,7 @@ typedef enum eStretchTo_VolMode {
/* Stretch To Constraint -> plane mode */
typedef enum eStretchTo_PlaneMode {
PLANE_X = 0,
- PLANE_Y = 1,
+ SWING_Y = 1,
PLANE_Z = 2,
} eStretchTo_PlaneMode;
diff --git a/source/blender/makesrna/intern/rna_constraint.c b/source/blender/makesrna/intern/rna_constraint.c
index c0211799192..6a10074810d 100644
--- a/source/blender/makesrna/intern/rna_constraint.c
+++ b/source/blender/makesrna/intern/rna_constraint.c
@@ -1811,8 +1811,13 @@ static void rna_def_constraint_stretch_to(BlenderRNA *brna)
};
static const EnumPropertyItem plane_items[] = {
- {PLANE_X, "PLANE_X", 0, "X", "Keep X Axis"},
- {PLANE_Z, "PLANE_Z", 0, "Z", "Keep Z Axis"},
+ {PLANE_X, "PLANE_X", 0, "XZ", "Rotate around local X, then Z"},
+ {PLANE_Z, "PLANE_Z", 0, "ZX", "Rotate around local Z, then X"},
+ {SWING_Y,
+ "SWING_Y",
+ 0,
+ "Swing",
+ "Use the smallest single axis rotation, similar to Damped Track"},
{0, NULL, 0, NULL, NULL},
};
@@ -1836,7 +1841,7 @@ static void rna_def_constraint_stretch_to(BlenderRNA *brna)
prop = RNA_def_property(srna, "keep_axis", PROP_ENUM, PROP_NONE);
RNA_def_property_enum_sdna(prop, NULL, "plane");
RNA_def_property_enum_items(prop, plane_items);
- RNA_def_property_ui_text(prop, "Keep Axis", "Axis to maintain during stretch");
+ RNA_def_property_ui_text(prop, "Keep Axis", "The rotation type and axis order to use");
RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update");
prop = RNA_def_property(srna, "rest_length", PROP_FLOAT, PROP_DISTANCE);