diff options
-rw-r--r-- | release/scripts/startup/bl_ui/properties_data_curve.py | 1 | ||||
-rw-r--r-- | source/blender/blenkernel/intern/constraint.c | 6 | ||||
-rw-r--r-- | source/blender/blenkernel/intern/object.c | 4 | ||||
-rw-r--r-- | source/blender/blenloader/intern/versioning_290.c | 18 | ||||
-rw-r--r-- | source/blender/makesdna/DNA_curve_types.h | 2 | ||||
-rw-r--r-- | source/blender/makesrna/intern/rna_curve.c | 8 |
6 files changed, 37 insertions, 2 deletions
diff --git a/release/scripts/startup/bl_ui/properties_data_curve.py b/release/scripts/startup/bl_ui/properties_data_curve.py index 4bd2d66e257..85f672cd50f 100644 --- a/release/scripts/startup/bl_ui/properties_data_curve.py +++ b/release/scripts/startup/bl_ui/properties_data_curve.py @@ -267,6 +267,7 @@ class DATA_PT_pathanim(CurveButtonsPanelCurve, Panel): # these are for paths only col.separator() + col.prop(curve, "use_path_clamp") col.prop(curve, "use_path_follow") diff --git a/source/blender/blenkernel/intern/constraint.c b/source/blender/blenkernel/intern/constraint.c index 17f36bd0860..9293a2b449a 100644 --- a/source/blender/blenkernel/intern/constraint.c +++ b/source/blender/blenkernel/intern/constraint.c @@ -1473,8 +1473,12 @@ static void followpath_get_tarmat(struct Depsgraph *UNUSED(depsgraph), * that's animated, but this will only work if it actually is animated... * * we divide the curvetime calculated in the previous step by the length of the path, - * to get a time factor, which then gets clamped to lie within 0.0 - 1.0 range. */ + * to get a time factor. */ curvetime /= cu->pathlen; + + if (cu->flag & CU_PATH_CLAMP) { + CLAMP(curvetime, 0.0f, 1.0f); + } } else { /* fixed position along curve */ diff --git a/source/blender/blenkernel/intern/object.c b/source/blender/blenkernel/intern/object.c index 109037bc95a..034af924ab1 100644 --- a/source/blender/blenkernel/intern/object.c +++ b/source/blender/blenkernel/intern/object.c @@ -3285,6 +3285,10 @@ static bool ob_parcurve(Object *ob, Object *par, float r_mat[4][4]) ctime = cu->ctime; } + if (cu->flag & CU_PATH_CLAMP) { + CLAMP(ctime, 0.0f, 1.0f); + } + unit_m4(r_mat); /* vec: 4 items! */ diff --git a/source/blender/blenloader/intern/versioning_290.c b/source/blender/blenloader/intern/versioning_290.c index 2b6f44c694b..565e62158ff 100644 --- a/source/blender/blenloader/intern/versioning_290.c +++ b/source/blender/blenloader/intern/versioning_290.c @@ -2069,6 +2069,24 @@ void blo_do_versions_290(FileData *fd, Library *UNUSED(lib), Main *bmain) } } + /* Set default value for the new bisect_threshold parameter in the mirror modifier. */ + if (!MAIN_VERSION_ATLEAST(bmain, 293, 19)) { + LISTBASE_FOREACH (Object *, ob, &bmain->objects) { + LISTBASE_FOREACH (ModifierData *, md, &ob->modifiers) { + if (md->type == eModifierType_Mirror) { + MirrorModifierData *mmd = (MirrorModifierData *)md; + /* This was the previous hard-coded value. */ + mmd->bisect_threshold = 0.001f; + } + } + } + + LISTBASE_FOREACH (Curve *, cu, &bmain->curves) { + /* Turn on clamping as this was implicit before. */ + cu->flag |= CU_PATH_CLAMP; + } + } + /** * Versioning code until next subversion bump goes here. * diff --git a/source/blender/makesdna/DNA_curve_types.h b/source/blender/makesdna/DNA_curve_types.h index 517c5c6c5f1..716c480bab8 100644 --- a/source/blender/makesdna/DNA_curve_types.h +++ b/source/blender/makesdna/DNA_curve_types.h @@ -328,7 +328,7 @@ enum { CU_BACK = 1 << 2, CU_PATH = 1 << 3, CU_FOLLOW = 1 << 4, - /* CU_UV_ORCO = 1 << 5, */ /* DEPRECATED */ + CU_PATH_CLAMP = 1 << 5, CU_DEFORM_BOUNDS_OFF = 1 << 6, CU_STRETCH = 1 << 7, /* CU_OFFS_PATHDIST = 1 << 8, */ /* DEPRECATED */ diff --git a/source/blender/makesrna/intern/rna_curve.c b/source/blender/makesrna/intern/rna_curve.c index e670b17b79a..abc96ddc820 100644 --- a/source/blender/makesrna/intern/rna_curve.c +++ b/source/blender/makesrna/intern/rna_curve.c @@ -1030,6 +1030,14 @@ static void rna_def_path(BlenderRNA *UNUSED(brna), StructRNA *srna) RNA_def_property_ui_text(prop, "Follow", "Make curve path children to rotate along the path"); RNA_def_property_update(prop, 0, "rna_Curve_update_data"); + prop = RNA_def_property(srna, "use_path_clamp", PROP_BOOLEAN, PROP_NONE); + RNA_def_property_boolean_sdna(prop, NULL, "flag", CU_PATH_CLAMP); + RNA_def_property_ui_text( + prop, + "Clamp", + "Clamp the curve path children so they can't travel past the start/end point of the curve"); + RNA_def_property_update(prop, 0, "rna_Curve_update_data"); + prop = RNA_def_property(srna, "use_stretch", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, NULL, "flag", CU_STRETCH); RNA_def_property_ui_text(prop, |