Animation: Add function to remove all FCurves from an Action
Add a `BKE_action_fcurves_clear(action)` function, which removes all the Action's FCurves, and expose it as `ActionFCurves.clear()` in RNA. This is more ergonomic than calling `remove` on f-curves until the list is empty. Reviewed By: sybren Differential Revision: https://developer.blender.org/D14660
This commit is contained in:
parent
2ae4397ec9
commit
091100bfd7
|
@ -92,6 +92,11 @@ bool action_has_motion(const struct bAction *act);
|
|||
*/
|
||||
bool BKE_action_is_cyclic(const struct bAction *act);
|
||||
|
||||
/**
|
||||
* Remove all fcurves from the action.
|
||||
*/
|
||||
void BKE_action_fcurves_clear(struct bAction *act);
|
||||
|
||||
/* Action Groups API ----------------- */
|
||||
|
||||
/**
|
||||
|
|
|
@ -1983,3 +1983,16 @@ void BKE_pose_blend_read_expand(BlendExpander *expander, bPose *pose)
|
|||
BLO_expand(expander, chan->custom);
|
||||
}
|
||||
}
|
||||
|
||||
void BKE_action_fcurves_clear(bAction *act)
|
||||
{
|
||||
if (!act) {
|
||||
return;
|
||||
}
|
||||
while (act->curves.first) {
|
||||
FCurve *fcu = act->curves.first;
|
||||
action_groups_remove_channel(act, fcu);
|
||||
BKE_fcurve_free(fcu);
|
||||
}
|
||||
DEG_id_tag_update(&act->id, ID_RECALC_ANIMATION_NO_FLUSH);
|
||||
}
|
||||
|
|
|
@ -168,6 +168,12 @@ static void rna_Action_fcurve_remove(bAction *act, ReportList *reports, PointerR
|
|||
WM_main_add_notifier(NC_ANIMATION | ND_KEYFRAME | NA_EDITED, NULL);
|
||||
}
|
||||
|
||||
static void rna_Action_fcurve_clear(bAction *act)
|
||||
{
|
||||
BKE_action_fcurves_clear(act);
|
||||
WM_main_add_notifier(NC_ANIMATION | ND_KEYFRAME | NA_EDITED, NULL);
|
||||
}
|
||||
|
||||
static TimeMarker *rna_Action_pose_markers_new(bAction *act, const char name[])
|
||||
{
|
||||
TimeMarker *marker = MEM_callocN(sizeof(TimeMarker), "TimeMarker");
|
||||
|
@ -788,6 +794,10 @@ static void rna_def_action_fcurves(BlenderRNA *brna, PropertyRNA *cprop)
|
|||
parm = RNA_def_pointer(func, "fcurve", "FCurve", "", "F-Curve to remove");
|
||||
RNA_def_parameter_flags(parm, PROP_NEVER_NULL, PARM_REQUIRED | PARM_RNAPTR);
|
||||
RNA_def_parameter_clear_flags(parm, PROP_THICK_WRAP, 0);
|
||||
|
||||
/* Action.fcurves.clear() */
|
||||
func = RNA_def_function(srna, "clear", "rna_Action_fcurve_clear");
|
||||
RNA_def_function_ui_description(func, "Remove all F-Curves");
|
||||
}
|
||||
|
||||
static void rna_def_action_pose_markers(BlenderRNA *brna, PropertyRNA *cprop)
|
||||
|
|
Loading…
Reference in New Issue