Fix T87854: Add clamp option to Path Animation
Previously, the "follow path constraint" and "follow parented curve" were clamped. This restriction was lifted in rBcf2baa585cc8 Add back an option to get the old behavior in the "Path animation" settings. Reviewed By: Sybren Differential Revision: http://developer.blender.org/D11263
This commit is contained in:
parent
2e7d3ad7b5
commit
6a0906c09a
Notes:
blender-bot
2023-02-14 09:48:23 +01:00
Referenced by issue #89153, Follow Path for empty works only in negative values Referenced by issue #87854, Blender 2.93 - Follow Path: Camera overshoots path end and drops indefinetely in Z direction
|
@ -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")
|
||||
|
||||
|
||||
|
|
|
@ -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 */
|
||||
|
|
|
@ -3288,6 +3288,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! */
|
||||
|
|
|
@ -2080,6 +2080,11 @@ void blo_do_versions_290(FileData *fd, Library *UNUSED(lib), Main *bmain)
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
LISTBASE_FOREACH (Curve *, cu, &bmain->curves) {
|
||||
/* Turn on clamping as this was implicit before. */
|
||||
cu->flag |= CU_PATH_CLAMP;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -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 */
|
||||
|
|
|
@ -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,
|
||||
|
|
Loading…
Reference in New Issue