83 const bool include_handles,
87 const bool fcu_selection_only =
false;
89 fcu, fcu_selection_only, include_handles, range, r_bounds);
100 r_bounds->
ymin = (r_bounds->
ymin + offset) * unit_fac;
101 r_bounds->
ymax = (r_bounds->
ymax + offset) * unit_fac;
103 const float min_height = 0.01f;
105 if (height < min_height) {
106 r_bounds->
ymin -= (min_height - height) / 2;
107 r_bounds->
ymax += (min_height - height) / 2;
115 bool found_start =
false;
119 if (gpf->framenum < range[0]) {
122 if (gpf->framenum > range[1]) {
126 start_frame = gpf->framenum;
129 end_frame = gpf->framenum;
131 r_bounds->
xmin = start_frame;
132 r_bounds->
xmax = end_frame;
140 const float range[2],
144 const Layer &layer = gplayer->wrap();
146 bool found_start =
false;
151 if (key < range[0]) {
154 if (key > range[1]) {
164 r_bounds->
xmin = start_frame;
165 r_bounds->
xmax = end_frame;
174 const float range[2],
175 const bool include_handles,
178 bool found_bounds =
false;
193 fcu, ac->
sl, ac->
scene, ale->
id, include_handles, range, r_bounds);
245 ListBase anim_data = {
nullptr,
nullptr};
257 if (channel_type != ale->
type) {
342 switch (channel_type) {
390 if (ale && ale->
adt) {
463 return grease_pencil->is_layer_active(
497 const bool change_active)
527 ListBase anim_data = {
nullptr,
nullptr};
656 switch (selectmode) {
658 selectable_thing.set_selected(!selectable_thing.is_selected());
661 selectable_thing.set_selected(
true);
674 selectable_thing.set_selected(
false);
694 Scene *scene =
static_cast<Scene *
>(ale->data);
792 Layer *layer =
static_cast<Layer *
>(ale->data);
850 const int matchLevel)
875 int prevLevel = matchLevel;
880 if (acf ==
nullptr) {
889 if (level == prevLevel) {
894 if (level > prevLevel) {
896 if (prevLevel == 0) {
921 const int matchLevel)
928 if (acf ==
nullptr) {
940 if (level > matchLevel) {
964 if (
ELEM(
nullptr, anim_data, anim_data->
first)) {
975 if ((ale->data == ale_setting->
data) && (ale->type == ale_setting->
type)) {
979 if (ale->id == ale_setting->
id) {
985 if (match ==
nullptr) {
986 printf(
"ERROR: no channel matching the one changed was found\n");
992 if (acf ==
nullptr) {
993 printf(
"ERROR: no channel info for the changed channel\n");
1012 if (!window_region) {
1016 ListBase anim_data = {
nullptr,
nullptr};
1027 const bool include_handles =
false;
1035 rctf channel_bounds;
1037 ac, ale, frame_range, include_handles, &channel_bounds);
1127 {0,
nullptr, 0,
nullptr,
nullptr},
1308 const bool is_hidden)
1312 bool is_sel =
false, is_untouchable =
false;
1344 "rearrange_animchannel_add_to_islands(): don't know how to handle channels of type %d\n",
1351 (island ==
nullptr) ||
1367 if (is_untouchable) {
1407 ListBase anim_data = {
nullptr,
nullptr};
1416 if (ale->type != type) {
1433 *anim_data_visible = anim_data;
1443 ListBase islands = {
nullptr,
nullptr};
1444 Link *channel, *chanNext =
nullptr;
1453 for (channel =
static_cast<Link *
>(list->
first); channel; channel = chanNext) {
1455 const bool is_hidden =
1457 chanNext = channel->
next;
1470 (mode > 0) ? islands.
last : islands.
first);
1473 for (island = first; island; island = isn) {
1474 isn = (mode > 0) ? island->
prev : island->
next;
1477 if (rearrange_func(&islands, island)) {
1500 ListBase anim_data_visible = {
nullptr,
nullptr};
1508 if (rearrange_func ==
nullptr) {
1518 ListBase extracted_nonlocal_nla_tracks = {
nullptr,
nullptr};
1519 if (is_liboverride) {
1522 nla_track = nla_track->
next)
1528 if (nla_track !=
nullptr && nla_track->
prev !=
nullptr) {
1530 extracted_nonlocal_nla_tracks.
last = nla_track->
prev;
1533 nla_track->
prev =
nullptr;
1550 extracted_nonlocal_nla_tracks.
last);
1569 ListBase anim_data_visible = {
nullptr,
nullptr};
1571 if (rearrange_func ==
nullptr) {
1598 if (act ==
nullptr) {
1606 FCurve *
const group_fcurves_first =
static_cast<FCurve *
>(agrp->channels.first);
1607 FCurve *
const group_fcurves_last =
static_cast<FCurve *
>(agrp->channels.last);
1608 if (group_fcurves_first ==
nullptr) {
1619 group_fcurves_first->
prev->
next = group_fcurves_last->
next;
1622 if (group_fcurves_last == act->
curves.
last) {
1628 group_fcurves_last->
next->
prev = group_fcurves_first->
prev;
1632 group_fcurves_first->
prev = group_fcurves_last->
next =
nullptr;
1645 fcu->
prev =
nullptr;
1651 fcu->
next =
nullptr;
1672 const ListBase group_channels = agrp->channels;
1674 agrp->channels = group_channels;
1706 ListBase anim_data_selected_visible = {
nullptr,
nullptr};
1710 int total_moved = 0;
1718 reinterpret_cast<bAction *
>(ale->fcurve_owner_id)->
wrap();
1720 const int current_index = action.
slots().first_index_try(&slot);
1721 const int to_index = current_index - 1;
1743 reinterpret_cast<bAction *
>(ale->fcurve_owner_id)->
wrap();
1745 const int current_index = action.
slots().first_index_try(&slot);
1746 const int to_index = 0;
1747 if (current_index != to_index) {
1760 reinterpret_cast<bAction *
>(ale->fcurve_owner_id)->
wrap();
1762 const int current_index = action.
slots().first_index_try(&slot);
1763 const int to_index = current_index + 1;
1785 reinterpret_cast<bAction *
>(ale->fcurve_owner_id)->
wrap();
1787 const int current_index = action.
slots().first_index_try(&slot);
1788 const int to_index = action.
slots().size() - 1;
1789 if (current_index != to_index) {
1800 return total_moved > 0;
1825 ListBase anim_data_visible = {
nullptr,
nullptr};
1837 if (ale->adt && &ale->adt->action->wrap() != &action) {
1846 const int group_index = bag.
channel_groups().first_index_try(group);
1847 const int to_index = group_index - 1;
1865 if (ale->adt && &ale->adt->action->wrap() != &action) {
1881 if (ale->adt && &ale->adt->action->wrap() != &action) {
1890 const int group_index = bag.
channel_groups().first_index_try(group);
1891 const int to_index = group_index + 1;
1909 if (ale->adt && &ale->adt->action->wrap() != &action) {
1948 ListBase anim_data_visible = {
nullptr,
nullptr};
1965 FCurve *fcurve =
static_cast<FCurve *
>(fcurve_ale->data);
1967 return *fcurve->
grp;
1971 fcurve_ale->slot_handle);
1998 if (ale->adt && &ale->adt->action->wrap() != &action) {
2005 if (should_skip(*fcurve, group)) {
2010 const int fcurve_index = bag.
fcurves().first_index_try(fcurve);
2011 const int to_index = fcurve_index - 1;
2028 if (ale->adt && &ale->adt->action->wrap() != &action) {
2035 if (should_skip(*fcurve, group)) {
2047 if (ale->adt && &ale->adt->action->wrap() != &action) {
2054 if (should_skip(*fcurve, group)) {
2059 const int fcurve_index = bag.
fcurves().first_index_try(fcurve);
2060 const int to_index = fcurve_index + 1;
2079 if (ale->adt && &ale->adt->action->wrap() != &action) {
2086 if (should_skip(*fcurve, group)) {
2120 ListBase anim_data_visible = {
nullptr,
nullptr};
2126 if (rearrange_func ==
nullptr) {
2155 &agrp->channels, rearrange_func, mode,
ANIMTYPE_FCURVE, &anim_data_visible);
2173 ListBase anim_data_visible = {
nullptr,
nullptr};
2178 if (rearrange_func ==
nullptr) {
2207 ListBase anim_data = {
nullptr,
nullptr};
2217 Layer *layer =
static_cast<Layer *
>(ale->data);
2218 if (layer->is_selected()) {
2219 grease_pencil.move_node_top(layer->
as_node());
2226 Layer *layer =
static_cast<Layer *
>(ale->data);
2230 if (layer->is_selected()) {
2231 grease_pencil.move_node_up(layer->
as_node());
2236 if (layer->is_selected()) {
2237 grease_pencil.move_node_down(layer->
as_node());
2242 if (layer->is_selected()) {
2243 grease_pencil.move_node_bottom(layer->
as_node());
2259 ListBase anim_data = {
nullptr,
nullptr};
2265 if (rearrange_func ==
nullptr) {
2281 ListBase anim_data_visible = {
nullptr,
nullptr};
2331 printf(
"Mask does not supported for moving yet\n");
2338 ListBase anim_data = {
nullptr,
nullptr};
2377 printf(
"Animdata has no action\n");
2396 printf(
"Animdata has no action\n");
2417 ot->name =
"Move Channels";
2418 ot->idname =
"ANIM_OT_channels_move";
2419 ot->description =
"Rearrange selected animation channels";
2496 if (act ==
nullptr) {
2501 ListBase anim_data = {
nullptr,
nullptr};
2506 if (anim_data.
first ==
nullptr) {
2561 if (channelbag != last_channelbag) {
2562 last_channelbag = channelbag;
2588 ListBase anim_data = {
nullptr,
nullptr};
2614 ot->name =
"Group Channels";
2615 ot->idname =
"ANIM_OT_channels_group";
2616 ot->description =
"Add selected F-Curves to a new group";
2632 "Name of newly created group");
2647 ListBase anim_data = {
nullptr,
nullptr};
2666 if (fcu->
grp ==
nullptr) {
2671 if (!ale->adt || !ale->adt->action) {
2674 bAction *act = ale->adt->action;
2707 ot->name =
"Ungroup Channels";
2708 ot->idname =
"ANIM_OT_channels_ungroup";
2709 ot->description =
"Remove selected F-Curves from their current groups";
2732 if (adt !=
nullptr) {
2734 if (adt->
action !=
nullptr) {
2759 ListBase anim_data = {
nullptr,
nullptr};
2762 bool must_skip_groups =
false;
2763 bool has_skipped_group =
false;
2767 switch (ale->type) {
2772 "fcurve_owner_id should be an Action");
2775 reinterpret_cast<bAction *
>(ale->fcurve_owner_id)->
wrap();
2784 must_skip_groups =
true;
2789 if (must_skip_groups) {
2792 has_skipped_group =
true;
2801 if (adt ==
nullptr || adt->
action ==
nullptr) {
2845 for (
int i = 0;
i < fcurve_range_length;
i++) {
2905 return has_skipped_group;
2919 "Expecting only driver F-Curves in the drivers editor");
2944 printf(
"ERROR: Trying to delete NLA Control Curve for unknown property '%s'\n",
2960 ListBase anim_data = {
nullptr,
nullptr};
2992 switch (ale->type) {
3012 scene->
gpd =
nullptr;
3022 Layer *layer =
static_cast<Layer *
>(ale->data);
3023 grease_pencil->remove_layer(*layer);
3096 ot->name =
"Delete Channels";
3097 ot->idname =
"ANIM_OT_channels_delete";
3098 ot->description =
"Delete all selected animation channels";
3120 {0,
nullptr, 0,
nullptr,
nullptr},
3128 {0,
nullptr, 0,
nullptr,
nullptr},
3147 ListBase anim_data = {
nullptr,
nullptr};
3148 ListBase all_data = {
nullptr,
nullptr};
3261 ot->name =
"Enable Channel Setting";
3262 ot->idname =
"ANIM_OT_channels_setting_enable";
3263 ot->description =
"Enable specified setting on all selected animation channels";
3287 ot->name =
"Disable Channel Setting";
3288 ot->idname =
"ANIM_OT_channels_setting_disable";
3289 ot->description =
"Disable specified setting on all selected animation channels";
3313 ot->name =
"Toggle Channel Setting";
3314 ot->idname =
"ANIM_OT_channels_setting_toggle";
3315 ot->description =
"Toggle specified setting on all selected animation channels";
3339 ot->name =
"Toggle Channel Editability";
3340 ot->idname =
"ANIM_OT_channels_editable_toggle";
3341 ot->description =
"Toggle editability of selected channels";
3369 bool onlysel =
true;
3393 ot->name =
"Expand Channels";
3394 ot->idname =
"ANIM_OT_channels_expand";
3395 ot->description =
"Expand (open) all selected expandable animation channels";
3406 ot->srna,
"all",
true,
"All",
"Expand all channels (not just selected ones)");
3418 bool onlysel =
true;
3442 ot->name =
"Collapse Channels";
3443 ot->idname =
"ANIM_OT_channels_collapse";
3444 ot->description =
"Collapse (close) all selected expandable animation channels";
3455 ot->srna,
"all",
true,
"All",
"Collapse all channels (not just selected ones)");
3479 ListBase anim_data = {
nullptr,
nullptr};
3498 bool nla_empty =
false;
3499 bool drivers_empty =
false;
3502 BLI_assert((
id !=
nullptr) && (adt !=
nullptr));
3517 action_empty =
true;
3527 if (nlt->strips.first) {
3534 if (nlt->strips.first ==
nullptr) {
3545 if (action_empty && nla_empty && drivers_empty) {
3563 ot->name =
"Remove Empty Animation Data";
3564 ot->idname =
"ANIM_OT_channels_clean_empty";
3565 ot->description =
"Delete all empty animation data containers from visible data-blocks";
3603 ListBase anim_data = {
nullptr,
nullptr};
3644 ot->name =
"Revive Disabled F-Curves";
3645 ot->idname =
"ANIM_OT_channels_fcurves_enable";
3646 ot->description =
"Clear 'disabled' tag from all F-Curves to get broken F-Curves working again";
3667 if (area ==
nullptr) {
3721 ot->name =
"Filter Channels";
3722 ot->idname =
"ANIM_OT_channels_select_filter";
3724 "Start entering text which filters the set of channels shown to only include those with "
3777 ot->name =
"Select All";
3778 ot->idname =
"ANIM_OT_channels_select_all";
3779 ot->description =
"Toggle selection of all animation channels";
3800 ListBase anim_data = {
nullptr,
nullptr};
3837 if (ymax >= rectf.
ymin && ymin <= rectf.
ymax) {
3843 switch (ale->type) {
3862 Slot *slot =
static_cast<Slot *
>(ale->data);
3926 short selectmode = 0;
3961 ot->name =
"Box Select";
3962 ot->idname =
"ANIM_OT_channels_select_box";
3963 ot->description =
"Select all animation channels within the specified region";
3990 ListBase anim_data = {
nullptr,
nullptr};
3994 bool success =
false;
4007 if (ale ==
nullptr) {
4010 printf(
"Error: animation channel (index = %d) not found in rename_anim_channels()\n",
4025 if (ale->
id !=
nullptr) {
4033 switch (ale->
type) {
4111 return channel_index;
4141 ot->name =
"Rename Channel";
4142 ot->idname =
"ANIM_OT_channels_rename";
4143 ot->description =
"Rename animation channel under mouse";
4159 const short selectmode)
4185 bool is_active_found =
false;
4188 if (ale->type != type) {
4192 if (is_active_found) {
4198 return is_active_found;
4205 bool in_selection_range =
false;
4210 if (ale->type != cursor_elem->
type) {
4214 const bool is_cursor_elem = (ale->data == cursor_elem->
data);
4219 if (is_active_elem || is_cursor_elem) {
4222 in_selection_range = !in_selection_range;
4227 else if (in_selection_range) {
4235 if (is_active_elem && is_cursor_elem) {
4248 const short selectmode)
4280 if (
b->object->adt) {
4308 const short selectmode)
4310 if (ale->
adt ==
nullptr) {
4339 const short selectmode,
4357 ob =
reinterpret_cast<Object *
>(ale->
id);
4380 else if (selectmode == -1) {
4442 const short selectmode,
4482 "fcurve_owner_id of an Action Slot should be an Action");
4490 switch (selectmode) {
4515 const short selectmode)
4518 Key *key =
reinterpret_cast<Key *
>(ale->
id);
4554 const short selectmode,
4625 const short selectmode,
4633 layer->set_selected(!layer->is_selected());
4641 layer->set_selected(
true);
4646 grease_pencil->set_active_layer(layer);
4671 const short selectmode)
4691 const int channel_index,
4694 ListBase anim_data = {
nullptr,
nullptr};
4697 int notifierFlags = 0;
4711 if (ale ==
nullptr) {
4714 printf(
"Error: animation channel (index = %d) not found in mouse_anim_channels()\n",
4740 switch (ale->
type) {
4809 printf(
"Error: Invalid channel type in mouse_anim_channels()\n");
4818 return notifierFlags;
4836 int notifierFlags = 0;
4891 ot->name =
"Mouse Click on Channels";
4892 ot->idname =
"ANIM_OT_channels_click";
4893 ot->description =
"Handle mouse clicks over animation channels";
4913 "Selection of active channel to clicked channel");
4917 prop =
RNA_def_boolean(
ot->srna,
"children_only",
false,
"Select Children Only",
"");
4923 ListBase anim_data = {
nullptr,
nullptr};
4926 bool success =
false;
4939 if (ale ==
nullptr) {
4942 printf(
"Error: animation channel (index = %d) not found in rename_anim_channels()\n",
4957 success = (fcu !=
nullptr);
4962 if (fcu && fcu->
bezt) {
4972 if (fcu_inner !=
nullptr && fcu_inner->
bezt !=
nullptr) {
4974 bezt->
f2 = bezt->
f1 = bezt->
f3 = 0;
5022 ot->name =
"Select Channel Keyframes";
5023 ot->idname =
"ANIM_OT_channel_select_keys";
5024 ot->description =
"Select all keyframes of channel under mouse";
5032 prop =
RNA_def_boolean(
ot->srna,
"extend",
false,
"Extend",
"Extend selection");
5045 r_range[0] = scene->
r.
psfra;
5046 r_range[1] = scene->
r.
pefra;
5049 r_range[0] = scene->
r.
sfra;
5050 r_range[1] = scene->
r.
efra;
5064 if (!window_region) {
5068 ListBase anim_data = {
nullptr,
nullptr};
5074 if (anim_data_length == 0) {
5091 bool valid_bounds =
false;
5093 rctf channel_bounds;
5095 &ac, ale, range, include_handles, &channel_bounds);
5098 valid_bounds =
true;
5102 if (!valid_bounds) {
5131 ot->name =
"Frame Selected Channels";
5132 ot->idname =
"ANIM_OT_channels_view_selected";
5133 ot->description =
"Reset viewable area to show the selected channels";
5145 "Include handles of keyframes when calculating extents");
5148 "use_preview_range",
5150 "Use Preview Range",
5151 "Ignore frames outside of the preview range");
5166 if (!window_region) {
5170 ListBase anim_data = {
nullptr,
nullptr};
5179 if (ale ==
nullptr) {
5193 if (!found_bounds) {
5217 ot->name =
"Frame Channel Under Cursor";
5218 ot->idname =
"ANIM_OT_channel_view_pick";
5219 ot->description =
"Reset viewable area to show the channel under the cursor";
5231 "Include handles of keyframes when calculating extents");
5234 "use_preview_range",
5236 "Use Preview Range",
5237 "Ignore frames outside of the preview range");
5241 {
BEZT_IPO_BEZ,
"BEZIER", 0,
"Bézier",
"New keys will be Bézier"},
5242 {
BEZT_IPO_LIN,
"LIN", 0,
"Linear",
"New keys will be linear"},
5243 {
BEZT_IPO_CONST,
"CONST", 0,
"Constant",
"New keys will be constant"},
5244 {0,
nullptr, 0,
nullptr,
nullptr},
5257 ListBase anim_data = {
nullptr,
nullptr};
5263 if (anim_data_length == 0) {
5275 frame_range[1] = std::max(frame_range[1], frame_range[0]);
5277 if (frame_range[0] == 0 && frame_range[1] == 0) {
5282 frame_range = {scene->
r.
sfra, scene->
r.
efra};
5290 const int interpolation_type =
RNA_enum_get(op->
ptr,
"interpolation_type");
5304 if (!bake_modifiers) {
5313 fcu->
bezt, nla_mapped_range[1], fcu->
totvert, &replace);
5322 if (bake_modifiers) {
5326 int modifier_index = 0;
5328 modifier->flag = modifier_flags[modifier_index];
5335 if (key->
vec[1][0] < nla_mapped_range[0]) {
5338 if (key->
vec[1][0] > nla_mapped_range[1]) {
5342 key->
ipo = interpolation_type;
5355 ot->name =
"Bake Channels";
5356 ot->idname =
"ANIM_OT_channels_bake";
5358 "Create keyframes following the current shape of F-Curves of selected channels";
5372 "The range in which to create new keys",
5382 "At which interval to add keys",
5387 "remove_outside_range",
5389 "Remove Outside Range",
5390 "Removes keys outside the given range, leaving only the newly baked");
5393 "interpolation_type",
5396 "Interpolation Type",
5397 "Choose the interpolation type with which new keys will be added");
5403 "Bake Modifiers into keyframes and delete them after");
5416 ListBase anim_data = {
nullptr,
nullptr};
5422 if (anim_data_length == 0) {
5433 bAction *owning_action =
reinterpret_cast<bAction *
>(ale->fcurve_owner_id);
5434 slots.
append({
reinterpret_cast<Slot *
>(ale->data), owning_action});
5438 if (slots.
size() == 0) {
5447 if (slots.
size() == 1) {
5450 target_action = &
action_add(*bmain, actname);
5457 layer.strip_add(*target_action, Strip::Type::Keyframe);
5459 for (std::pair<Slot *, bAction *> &slot_data : slots) {
5460 Action &source_action = slot_data.second->wrap();
5461 move_slot(*bmain, *slot_data.first, source_action, *target_action);
5483 if (!action->wrap().is_action_layered()) {
5492 ot->name =
"Move Slots to new Action";
5493 ot->idname =
"ANIM_OT_slot_channels_move_to_new_action";
5494 ot->description =
"Move the selected slots into a newly created action";
5514 int created_actions = 0;
5522 layer.strip_add(target_action, Strip::Type::Keyframe);
5523 move_slot(*bmain, *slot, *action, target_action);
5529 "Separated %s into %i new actions",
5543 if (!active_object) {
5561 ot->name =
"Separate Slots";
5562 ot->idname =
"ANIM_OT_separate_slots";
5564 "Move all slots of the action on the active object into newly created, separate actions. "
5565 "All users of those slots will be reassigned to the new actions. The current action won't "
5566 "be deleted but will be empty and might end up having zero users";
5605 ListBase anim_data = {
nullptr,
nullptr};
5624 ListBase anim_data = {
nullptr,
nullptr};
5636 filtered_fcurves.
add(fcu,
true);
5639 int hidden_fcurve_count = fcurves.
size();
5640 for (
FCurve *fcu : fcurves) {
5641 if (filtered_fcurves.
contains(fcu)) {
5642 hidden_fcurve_count--;
5646 return hidden_fcurve_count;
5655 if (anim_data ==
nullptr) {
5666 anim_data, path->c_str(),
i,
nullptr,
nullptr);
5667 if (fcurve !=
nullptr) {
5674 anim_data, path->c_str(), index,
nullptr,
nullptr);
5675 if (fcurve !=
nullptr) {
5698 if (anim_data ==
nullptr) {
5702 float frame_range[2];
5704 float mapped_frame_range[2];
5710 const bool include_handles =
false;
5712 for (
FCurve *fcurve : fcurves) {
5716 fcurve, space_link, scene,
id, include_handles, mapped_frame_range, &fcu_bounds);
5731 const bool whole_array,
5732 int *r_filtered_fcurve_count)
5740 for (
const PointerRNA &selected : selection) {
5741 ID *selected_id = selected.owner_id;
5749 &selected, id_to_prop_path.
c_str(), &resolved_ptr, &resolved_prop);
5755 resolved_ptr = selected;
5756 resolved_prop = prop;
5759 selected_id, &resolved_ptr, resolved_prop, whole_array, index);
5790 } wm_context_prev = {
nullptr}, wm_context_temp = {
nullptr};
5793 std::optional<std::string> id_to_prop_path;
5795 C, &button_ptr, button_prop, &selection, &path_from_id, &id_to_prop_path);
5798 C, &wm_context_temp.win, &wm_context_temp.area, &wm_context_temp.region))
5830 int filtered_fcurve_count = 0;
5831 if (selected_list_success && !selection.
is_empty()) {
5835 id_to_prop_path.value_or(
""),
5838 &filtered_fcurve_count);
5846 button_ptr.
owner_id, &button_ptr, button_prop, whole_array, index);
5854 if (filtered_fcurve_count > 0) {
5857 "One or more F-Curves are not visible due to filter settings");
5865 ARegion *region = wm_context_temp.region;
5866 ScrArea *area = wm_context_temp.area;
5888 ot->name =
"View In Graph Editor";
5889 ot->idname =
"ANIM_OT_view_curve_in_graph_editor";
5890 ot->description =
"Frame the property under the cursor in the Graph Editor";
5899 "Frame the whole array property instead of only the index under the cursor");
5905 "Hides all F-Curves other than the ones being framed");
Functions and classes to work with Actions.
Functions for backward compatibility with the legacy Action API.
Functions to work with AnimData.
Functions to modify FCurves.
Blender kernel action and pose functionality.
void action_groups_add_channel(bAction *act, bActionGroup *agrp, FCurve *fcurve)
bPoseChannel * BKE_pose_channel_find_name(const bPose *pose, const char *name)
void action_groups_remove_channel(bAction *act, FCurve *fcu)
bActionGroup * action_groups_add_new(bAction *act, const char name[])
bool BKE_animdata_id_is_animated(const ID *id)
AnimData * BKE_animdata_from_id(const ID *id)
void BKE_animdata_free(ID *id, bool do_id_user)
void CTX_wm_operator_poll_msg_set(bContext *C, const char *msg)
ScrArea * CTX_wm_area(const bContext *C)
wmWindow * CTX_wm_window(const bContext *C)
Object * CTX_data_active_object(const bContext *C)
SpaceLink * CTX_wm_space_data(const bContext *C)
Scene * CTX_data_scene(const bContext *C)
void CTX_wm_window_set(bContext *C, wmWindow *win)
Main * CTX_data_main(const bContext *C)
void CTX_wm_area_set(bContext *C, ScrArea *area)
void CTX_wm_region_set(bContext *C, ARegion *region)
ARegion * CTX_wm_region(const bContext *C)
wmWindowManager * CTX_wm_manager(const bContext *C)
wmMsgBus * CTX_wm_message_bus(const bContext *C)
ViewLayer * CTX_data_view_layer(const bContext *C)
int BKE_fcurve_bezt_binarysearch_index(const BezTriple array[], float frame, int arraylen, bool *r_replace)
FCurve * BKE_animadata_fcurve_find_by_rna_path(AnimData *animdata, const char *rna_path, const int rna_index, bAction **r_action, bool *r_driven)
void free_fmodifiers(ListBase *modifiers)
void BKE_fcurve_free(FCurve *fcu)
bool BKE_fcurve_calc_bounds(const FCurve *fcu, bool selected_keys_only, bool include_handles, const float frame_range[2], rctf *r_bounds)
void BKE_gpencil_layer_active_set(struct bGPdata *gpd, struct bGPDlayer *active)
void BKE_gpencil_free_data(struct bGPdata *gpd, bool free_all)
void BKE_gpencil_layer_delete(struct bGPdata *gpd, struct bGPDlayer *gpl)
Low-level operations for grease pencil.
void BKE_view_layer_synced_ensure(const Scene *scene, ViewLayer *view_layer)
ListBase * BKE_view_layer_object_bases_get(ViewLayer *view_layer)
void BKE_id_free_us(Main *bmain, void *idv) ATTR_NONNULL()
void BKE_mask_layer_remove(struct Mask *mask, struct MaskLayer *masklay)
bool BKE_nlastrip_controlcurve_remove(NlaStrip *strip, FCurve *fcurve)
float BKE_nla_tweakedit_remap(AnimData *adt, float cframe, eNlaTime_ConvertModes mode)
bool BKE_nlatrack_is_nonlocal_in_liboverride(const ID *id, const NlaTrack *nlt)
void BKE_reportf(ReportList *reports, eReportType type, const char *format,...) ATTR_PRINTF_FORMAT(3
void BKE_report(ReportList *reports, eReportType type, const char *message)
ARegion * BKE_area_find_region_type(const ScrArea *area, int region_type)
#define BLI_assert_unreachable()
#define BLI_assert_msg(a, msg)
int BLI_findindex(const ListBase *listbase, const void *vlink) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(1)
void * BLI_findlink(const ListBase *listbase, int number) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(1)
void void void BLI_movelisttolist(ListBase *dst, ListBase *src) ATTR_NONNULL(1
#define LISTBASE_FOREACH(type, var, list)
BLI_INLINE bool BLI_listbase_is_empty(const ListBase *lb)
void BLI_freelinkN(ListBase *listbase, void *vlink) ATTR_NONNULL(1)
#define LISTBASE_FOREACH_MUTABLE(type, var, list)
#define LISTBASE_FOREACH_BACKWARD(type, var, list)
void void BLI_freelistN(ListBase *listbase) ATTR_NONNULL(1)
void BLI_addtail(ListBase *listbase, void *vlink) ATTR_NONNULL(1)
void BLI_insertlinkafter(ListBase *listbase, void *vprevlink, void *vnewlink) ATTR_NONNULL(1)
void BLI_remlink(ListBase *listbase, void *vlink) ATTR_NONNULL(1)
void * BLI_findptr(const struct ListBase *listbase, const void *ptr, int offset) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(1)
void BLI_insertlinkbefore(ListBase *listbase, void *vnextlink, void *vnewlink) ATTR_NONNULL(1)
MINLINE int min_ii(int a, int b)
MINLINE int max_ii(int a, int b)
void BLI_rctf_union(struct rctf *rct_a, const struct rctf *rct_b)
bool BLI_rctf_is_valid(const struct rctf *rect)
void BLI_rctf_pad_y(struct rctf *rect, float boundary_size, float pad_min, float pad_max)
void BLI_rctf_scale(rctf *rect, float scale)
BLI_INLINE float BLI_rctf_size_y(const struct rctf *rct)
#define SNPRINTF_UTF8(dst, format,...)
#define STRNCPY_UTF8(dst, src)
#define UNUSED_VARS_NDEBUG(...)
void DEG_id_tag_update(ID *id, unsigned int flags)
void DEG_relations_tag_update(Main *bmain)
@ ID_RECALC_ANIMATION_NO_FLUSH
#define ID_IS_EDITABLE(_id)
#define ID_IS_OVERRIDE_LIBRARY(_id)
@ ADT_NLA_SKEYS_COLLAPSED
@ NLATRACK_OVERRIDELIBRARY_LOCAL
@ GP_LAYER_TREE_NODE_SELECT
@ GREASE_PENCIL_ANIM_CHANNEL_EXPANDED
Object is a sort of wrapper for general info.
#define BASE_SELECTABLE(v3d, base)
@ ACHANNEL_SETFLAG_TOGGLE
@ ACHANNEL_SETFLAG_EXTEND_RANGE
@ ACHANNEL_SETFLAG_INVERT
@ ANIMTYPE_SPECIALDATA__UNUSED
@ ANIMTYPE_GREASE_PENCIL_DATABLOCK
@ ANIMTYPE_GREASE_PENCIL_LAYER
@ ANIMTYPE_FILLACT_LAYERED
@ ANIMTYPE_GREASE_PENCIL_LAYER_GROUP
#define NLATRACK_FIRST_TOP(ac)
#define EXPANDED_AGRP(ac, agrp)
@ ALE_GREASE_PENCIL_GROUP
#define NLATRACK_STEP(snla)
@ ACHANNEL_SETTING_ALWAYS_VISIBLE
@ ACHANNEL_SETTING_PROTECT
@ ACHANNEL_SETTING_VISIBLE
@ ACHANNEL_SETTING_EXPAND
@ ACHANNEL_SETTING_SELECT
#define ACHANNEL_SET_FLAG(channel, smode, sflag)
#define EXPANDED_DRVD(adt)
#define NLATRACK_NAMEWIDTH
@ ANIMFILTER_DATA_VISIBLE
@ ANIMFILTER_CURVE_VISIBLE
@ ANIMFILTER_LIST_VISIBLE
@ ANIMFILTER_LIST_CHANNELS
void ED_area_tag_redraw(ScrArea *area)
bool ED_operator_graphedit_active(bContext *C)
bool ED_operator_action_active(bContext *C)
void ED_region_toggle_hidden(bContext *C, ARegion *region)
void ED_region_tag_redraw(ARegion *region)
Read Guarded memory(de)allocation.
bool UI_textbutton_activate_rna(const bContext *C, ARegion *region, const void *rna_poin_data, const char *rna_prop_id)
uiBut * UI_context_active_but_prop_get(const bContext *C, PointerRNA *r_ptr, PropertyRNA **r_prop, int *r_index)
bool UI_context_copy_to_selected_list(bContext *C, PointerRNA *ptr, PropertyRNA *prop, blender::Vector< PointerRNA > *r_lb, bool *r_use_path_from_id, std::optional< std::string > *r_path)
void UI_view2d_smooth_view(const bContext *C, ARegion *region, const rctf *cur, int smooth_viewtx)
#define UI_MARKER_MARGIN_Y
#define V2D_SCROLL_HANDLE_HEIGHT
#define UI_TIME_SCRUB_MARGIN_Y
void UI_view2d_listview_view_to_cell(float columnwidth, float rowheight, float startx, float starty, float viewx, float viewy, int *r_column, int *r_row)
void UI_view2d_region_to_view(const View2D *v2d, float x, float y, float *r_view_x, float *r_view_y) ATTR_NONNULL()
#define ND_SPACE_PROPERTIES
void ANIM_channel_setting_set(bAnimContext *ac, bAnimListElem *ale, eAnimChannel_Settings setting, eAnimChannels_SetFlag mode)
float ANIM_UI_get_channel_name_width()
float ANIM_UI_get_channel_step()
float ANIM_UI_get_first_channel_top(View2D *v2d)
short ANIM_channel_setting_get(bAnimContext *ac, bAnimListElem *ale, eAnimChannel_Settings setting)
const bAnimChannelType * ANIM_channel_get_typeinfo(const bAnimListElem *ale)
static bool slot_channels_move_to_new_action_poll(bContext *C)
static bool get_gpencil_bounds(bGPDlayer *gpl, const float range[2], rctf *r_bounds)
static wmOperatorStatus animchannels_select_filter_invoke(bContext *C, wmOperator *op, const wmEvent *)
static int click_select_channel_grease_pencil_datablock(bAnimListElem *ale)
static void rearrange_gpencil_channels(bAnimContext *ac, eRearrangeAnimChan_Mode mode)
static void anim_flush_channel_setting_down(bAnimContext *ac, const eAnimChannel_Settings setting, const eAnimChannels_SetFlag mode, bAnimListElem *const match, const int matchLevel)
void ANIM_flush_setting_anim_channels(bAnimContext *ac, ListBase *anim_data, bAnimListElem *ale_setting, eAnimChannel_Settings setting, eAnimChannels_SetFlag mode)
static void box_select_anim_channels(bAnimContext *ac, const rcti &rect, short selectmode)
void ANIM_anim_channels_select_set(bAnimContext *ac, eAnimChannels_SetFlag sel)
static void add_region_padding(bContext *C, ARegion *region, rctf *bounds)
static bool animchannels_enable_poll(bContext *C)
static void join_groups_action_temp(bAction *act)
static void tag_update_animation_element(bAnimListElem *ale)
static void ANIM_OT_channel_select_keys(wmOperatorType *ot)
static wmOperatorStatus animchannels_ungroup_exec(bContext *C, wmOperator *)
@ REORDER_ISLAND_UNTOUCHABLE
@ REORDER_ISLAND_SELECTED
static bool animchannel_has_active_of_type(bAnimContext *ac, const eAnim_ChannelType type)
static bool get_normalized_fcurve_bounds(FCurve *fcu, SpaceLink *space_link, Scene *scene, ID *id, const bool include_handles, const float range[2], rctf *r_bounds)
void ED_keymap_animchannels(wmKeyConfig *keyconf)
static void split_groups_action_temp(bAction *act, bActionGroup *tgrp)
static bool animchannels_select_filter_poll(bContext *C)
static const EnumPropertyItem prop_animchannel_rearrange_types[]
static bool animchannels_delete_containers(const bContext *C, bAnimContext *ac)
static void setflag_anim_channels(bAnimContext *ac, eAnimChannel_Settings setting, eAnimChannels_SetFlag mode, bool onlysel, bool flush)
static void get_view_range(Scene *scene, const bool use_preview_range, float r_range[2])
static void rearrange_animchannels_filter_visible(ListBase *anim_data_visible, bAnimContext *ac, const eAnim_ChannelType type, const eAnimFilter_Flags additional_filters=eAnimFilter_Flags(0))
static void ANIM_OT_channels_clean_empty(wmOperatorType *ot)
static bool rearrange_island_bottom(ListBase *list, tReorderChannelIsland *island)
static void rearrange_animchannel_add_to_islands(ListBase *islands, ListBase *srcList, Link *channel, eAnim_ChannelType type, const bool is_hidden)
static wmOperatorStatus animchannels_delete_exec(bContext *C, wmOperator *)
static void select_pchan_for_action_group(bAnimContext *ac, bActionGroup *agrp, bAnimListElem *ale, const bool change_active)
static bool rearrange_island_up(ListBase *list, tReorderChannelIsland *island)
bool(*)(ListBase *list, tReorderChannelIsland *island) AnimChanRearrangeFp
static void rearrange_nla_tracks(bAnimContext *ac, AnimData *adt, eRearrangeAnimChan_Mode mode)
static bool select_anim_channel_keys(bAnimContext *ac, int channel_index, bool extend)
static bool get_channel_bounds(bAnimContext *ac, bAnimListElem *ale, const float range[2], const bool include_handles, rctf *r_bounds)
void ED_anim_ale_fcurve_delete(bAnimContext &ac, bAnimListElem &ale)
static wmOperatorStatus animchannels_channel_select_keys_invoke(bContext *C, wmOperator *op, const wmEvent *event)
static wmOperatorStatus animchannels_box_select_exec(bContext *C, wmOperator *op)
static wmOperatorStatus view_curve_in_graph_editor_exec(bContext *C, wmOperator *op)
static wmOperatorStatus animchannels_setflag_exec(bContext *C, wmOperator *op)
static wmOperatorStatus animchannels_rearrange_exec(bContext *C, wmOperator *op)
static int click_select_channel_maskdatablock(bAnimListElem *ale)
static int click_select_channel_object(bContext *C, bAnimContext *ac, bAnimListElem *ale, const short selectmode)
static void anim_flush_channel_setting_up(bAnimContext *ac, const eAnimChannel_Settings setting, const eAnimChannels_SetFlag mode, bAnimListElem *const match, const int matchLevel)
static void ANIM_OT_channels_delete(wmOperatorType *ot)
static int animchannels_channel_get(bAnimContext *ac, const int mval[2])
static rctf calculate_fcurve_bounds_and_unhide(SpaceLink *space_link, Scene *scene, ID *id, const blender::Span< FCurve * > fcurves)
void ANIM_frame_channel_y_extents(bContext *C, bAnimContext *ac)
static wmOperatorStatus animchannels_select_filter_modal(bContext *C, wmOperator *, const wmEvent *)
static int click_select_channel_action_slot(bAnimContext *ac, bAnimListElem *ale, short selectmode)
static int click_select_channel_group(bAnimContext *ac, bAnimListElem *ale, const short selectmode, const int filter)
static void rearrange_driver_channels(bAnimContext *ac, AnimData *adt, eRearrangeAnimChan_Mode mode)
static int click_select_channel_grease_pencil_layer_group(bContext *C, bAnimListElem *ale)
static void rearrange_animchannel_flatten_islands(ListBase *islands, ListBase *srcList)
static const EnumPropertyItem prop_animchannel_settings_types[]
static void ANIM_OT_slot_channels_move_to_new_action(wmOperatorType *ot)
bool ANIM_is_active_channel(bAnimListElem *ale)
static bool animedit_poll_channels_active(bContext *C)
static void ANIM_OT_separate_slots(wmOperatorType *ot)
static bool rearrange_layered_action_slots(bAnimContext *ac, const eRearrangeAnimChan_Mode mode)
static ListBase anim_channels_for_selection(bAnimContext *ac)
static wmOperatorStatus animchannels_group_exec(bContext *C, wmOperator *op)
static void ANIM_OT_channels_expand(wmOperatorType *ot)
static wmOperatorStatus separate_slots_exec(bContext *C, wmOperator *op)
static wmOperatorStatus animchannels_selectall_exec(bContext *C, wmOperator *op)
static void ANIM_OT_channels_rename(wmOperatorType *ot)
static void deselect_all_fcurves(bAnimContext *ac, const bool hide)
static int click_select_channel_shapekey(bAnimContext *ac, bAnimListElem *ale, const short selectmode)
static void ANIM_OT_view_curve_in_graph_editor(wmOperatorType *ot)
static bool animedit_poll_channels_nla_tweakmode_off(bContext *C)
void ANIM_set_active_channel(bAnimContext *ac, void *data, eAnimCont_Types datatype, eAnimFilter_Flags filter, void *channel_data, eAnim_ChannelType channel_type)
static wmOperatorStatus animchannels_clean_empty_exec(bContext *C, wmOperator *)
static bool separate_slots_poll(bContext *C)
static void animchannel_select_range(bAnimContext *ac, bAnimListElem *cursor_elem)
static wmOperatorStatus graphkeys_channel_view_pick_invoke(bContext *C, wmOperator *op, const wmEvent *event)
static void animchannels_group_channels(bAnimContext *ac, bAnimListElem *adt_ref, const char name[])
static wmOperatorStatus slot_channels_move_to_new_action_exec(bContext *C, wmOperator *op)
static bool rename_anim_channels(bAnimContext *ac, int channel_index)
static int click_select_channel_nlacontrols(bAnimListElem *ale)
static bool rearrange_island_down(ListBase *list, tReorderChannelIsland *island)
static void ANIM_OT_channels_select_box(wmOperatorType *ot)
static void ANIM_OT_channels_editable_toggle(wmOperatorType *ot)
static blender::Vector< FCurve * > get_fcurves_of_property(ID *id, PointerRNA *ptr, PropertyRNA *prop, const bool whole_array, const int index)
static wmOperatorStatus channels_bake_exec(bContext *C, wmOperator *op)
static bool rearrange_island_top(ListBase *list, tReorderChannelIsland *island)
static wmOperatorStatus animchannels_mouseclick_invoke(bContext *C, wmOperator *op, const wmEvent *event)
static void ANIM_OT_channels_fcurves_enable(wmOperatorType *ot)
static void ANIM_OT_channels_ungroup(wmOperatorType *ot)
static void rearrange_action_channels(bAnimContext *ac, bAction *act, eRearrangeAnimChan_Mode mode)
static void ANIM_OT_channels_view_selected(wmOperatorType *ot)
static int click_select_channel_gplayer(bContext *C, bAnimContext *ac, bAnimListElem *ale, const short selectmode, const int filter)
static bool rearrange_animchannel_islands(ListBase *list, AnimChanRearrangeFp rearrange_func, eRearrangeAnimChan_Mode mode, eAnim_ChannelType type, ListBase *anim_data_visible)
static void ANIM_OT_channels_setting_enable(wmOperatorType *ot)
static int click_select_channel_grease_pencil_layer(bContext *C, bAnimContext *ac, bAnimListElem *ale, const short selectmode, const int)
static const EnumPropertyItem channel_bake_key_options[]
static int mouse_anim_channels(bContext *C, bAnimContext *ac, const int channel_index, short selectmode)
static void ANIM_OT_channels_setting_toggle(wmOperatorType *ot)
static bool context_find_graph_editor(bContext *C, wmWindow **r_win, ScrArea **r_area, ARegion **r_region)
static bool animchannels_grouping_poll(bContext *C)
static void rearrange_layered_action_channel_groups(bAnimContext *ac, blender::animrig::Action &action, const eRearrangeAnimChan_Mode mode)
static wmOperatorStatus graphkeys_view_selected_channels_exec(bContext *C, wmOperator *op)
static void ANIM_OT_channels_move(wmOperatorType *ot)
static AnimChanRearrangeFp rearrange_get_mode_func(eRearrangeAnimChan_Mode mode)
static bool channel_view_poll(bContext *C)
void ANIM_anim_channels_select_toggle(bAnimContext *ac)
static void rearrange_nla_control_channels(bAnimContext *ac, AnimData *adt, eRearrangeAnimChan_Mode mode)
static AnimChanRearrangeFp rearrange_gpencil_get_mode_func(eRearrangeAnimChan_Mode mode)
static rctf calculate_selection_fcurve_bounds(bAnimContext *ac, blender::Span< PointerRNA > selection, PropertyRNA *prop, const blender::StringRefNull id_to_prop_path, const int index, const bool whole_array, int *r_filtered_fcurve_count)
static bool rearrange_island_ok(tReorderChannelIsland *island)
static void ANIM_OT_channels_bake(wmOperatorType *ot)
static void ANIM_OT_channels_group(wmOperatorType *ot)
static void rearrange_layered_action_fcurves(bAnimContext *ac, blender::animrig::Action &action, const eRearrangeAnimChan_Mode mode)
static void ANIM_OT_channels_select_filter(wmOperatorType *ot)
static int click_select_channel_dummy(bAnimContext *ac, bAnimListElem *ale, const short selectmode)
static wmOperatorStatus animchannels_expand_exec(bContext *C, wmOperator *op)
static bool get_grease_pencil_layer_bounds(const GreasePencilLayer *gplayer, const float range[2], rctf *r_bounds)
static void anim_channels_select_set(bAnimContext *ac, const ListBase anim_data, eAnimChannels_SetFlag sel)
static int count_fcurves_hidden_by_filter(bAnimContext *ac, const blender::Span< FCurve * > fcurves)
static void templated_selection_state_update(T &selectable_thing, const eAnimChannels_SetFlag selectmode)
static void ANIM_OT_channels_setting_disable(wmOperatorType *ot)
static void ANIM_OT_channels_click(wmOperatorType *ot)
static wmOperatorStatus animchannels_collapse_exec(bContext *C, wmOperator *op)
static eAnimChannels_SetFlag anim_channels_selection_flag_for_toggle(const ListBase anim_data)
static wmOperatorStatus animchannels_enable_exec(bContext *C, wmOperator *)
static int click_select_channel_scene(bAnimListElem *ale, const short selectmode)
static wmOperatorStatus animchannels_rename_invoke(bContext *C, wmOperator *, const wmEvent *event)
static const EnumPropertyItem prop_animchannel_setflag_types[]
void ED_operatortypes_animchannels()
@ REARRANGE_ANIMCHAN_DOWN
@ REARRANGE_ANIMCHAN_BOTTOM
static int click_select_channel_masklayer(bAnimContext *ac, bAnimListElem *ale, const short selectmode)
static int click_select_channel_fcurve(bAnimContext *ac, bAnimListElem *ale, const short selectmode, const int filter)
static void ANIM_OT_channel_view_pick(wmOperatorType *ot)
static void rearrange_grease_pencil_channels(bAnimContext *ac, eRearrangeAnimChan_Mode mode)
static void ANIM_OT_channels_collapse(wmOperatorType *ot)
static void ANIM_OT_channels_select_all(wmOperatorType *ot)
void ANIM_animdata_freelist(ListBase *anim_data)
void ANIM_animdata_update(bAnimContext *ac, ListBase *anim_data)
short ANIM_get_normalization_flags(SpaceLink *space_link)
float ANIM_unit_mapping_get_factor(Scene *scene, ID *id, FCurve *fcu, short flag, float *r_offset)
float ANIM_nla_tweakedit_remap(bAnimListElem *ale, const float cframe, const eNlaTime_ConvertModes mode)
bAction * ANIM_active_action_from_area(Scene *scene, ViewLayer *view_layer, const ScrArea *area, ID **r_action_user)
bool ANIM_animdata_get_context(const bContext *C, bAnimContext *ac)
size_t ANIM_animdata_filter(bAnimContext *ac, ListBase *anim_data, const eAnimFilter_Flags filter_mode, void *data, const eAnimCont_Types datatype)
ListBase * ED_context_get_markers(const bContext *C)
BMesh const char void * data
static btDbvtVolume bounds(btDbvtNode **leaves, int count)
const TreeNode & as_node() const
Span< FramesMapKeyT > sorted_keys() const
bool add(const Key &key, const Value &value)
bool contains(const Key &key) const
constexpr int64_t size() const
constexpr bool is_empty() const
constexpr const char * c_str() const
void append(const T &value)
void slot_active_set(slot_handle_t slot_handle)
const Slot * slot(int64_t index) const
void slot_move_to_index(Slot &slot, int to_slot_index)
bool is_action_legacy() const
bool is_action_layered() const
blender::Span< const Slot * > slots() const
bool slot_remove(Slot &slot_to_remove)
Layer & layer_add(std::optional< StringRefNull > name)
const FCurve * fcurve(int64_t index) const
void fcurve_move_to_index(FCurve &fcurve, int to_fcurve_index)
bool fcurve_assign_to_channel_group(FCurve &fcurve, bActionGroup &to_group)
bActionGroup & channel_group_create(StringRefNull name)
bool fcurve_remove(FCurve &fcurve_to_remove)
const bActionGroup * channel_group(int64_t index) const
blender::Span< const FCurve * > fcurves() const
void channel_group_move_to_index(bActionGroup &group, int to_group_index)
blender::Span< const bActionGroup * > channel_groups() const
void set_selected(bool selected)
void set_expanded(bool expanded)
VecBase< float, D > step(VecOp< float, D >, VecOp< float, D >) RET
float length(VecOp< float, D >) RET
DEG_id_tag_update_ex(cb_data->bmain, cb_data->owner_id, ID_RECALC_TAG_FOR_UNDO|ID_RECALC_SYNC_TO_EVAL)
void * MEM_callocN(size_t len, const char *str)
ccl_device_inline float2 mask(const MaskType mask, const float2 a)
bool action_treat_as_legacy(const bAction &action)
bool action_fcurve_remove(Action &action, FCurve &fcu)
void animdata_fcurve_delete(AnimData *adt, FCurve *fcu)
Action & action_add(Main &bmain, StringRefNull name)
const animrig::Channelbag * channelbag_for_action_slot(const Action &action, slot_handle_t slot_handle)
void bake_fcurve(FCurve *fcu, blender::int2 range, float step, BakeCurveRemove remove_existing)
Span< FCurve * > fcurves_for_action_slot(Action &action, slot_handle_t slot_handle)
Action * get_action(ID &animated_id)
void move_slot(Main &bmain, Slot &slot, Action &from_action, Action &to_action)
void base_select(Base *base, eObjectSelect_Mode mode)
void base_activate_with_mode_exit_if_needed(bContext *C, Base *base)
VecBase< int32_t, 2 > int2
float wrap(float value, float max, float min)
bool ED_pose_deselect_all(Object *ob, int select_mode, const bool ignore_visibility)
void ED_pose_bone_select(Object *ob, bPoseChannel *pchan, bool select, bool change_active)
void RNA_int_set_array(PointerRNA *ptr, const char *name, const int *values)
bool RNA_property_array_check(PropertyRNA *prop)
void RNA_int_get_array(PointerRNA *ptr, const char *name, int *values)
float RNA_float_get(PointerRNA *ptr, const char *name)
std::string RNA_string_get(PointerRNA *ptr, const char *name)
int RNA_property_array_length(PointerRNA *ptr, PropertyRNA *prop)
bool RNA_boolean_get(PointerRNA *ptr, const char *name)
int RNA_enum_get(PointerRNA *ptr, const char *name)
PropertyRNA * RNA_def_string(StructOrFunctionRNA *cont_, const char *identifier, const char *default_value, const int maxlen, const char *ui_name, const char *ui_description)
PropertyRNA * RNA_def_int_array(StructOrFunctionRNA *cont_, const char *identifier, const int len, const int *default_value, const int hardmin, const int hardmax, const char *ui_name, const char *ui_description, const int softmin, const int softmax)
PropertyRNA * RNA_def_float(StructOrFunctionRNA *cont_, const char *identifier, const float default_value, const float hardmin, const float hardmax, const char *ui_name, const char *ui_description, const float softmin, const float softmax)
PropertyRNA * RNA_def_enum(StructOrFunctionRNA *cont_, const char *identifier, const EnumPropertyItem *items, const int default_value, const char *ui_name, const char *ui_description)
PropertyRNA * RNA_def_boolean(StructOrFunctionRNA *cont_, const char *identifier, const bool default_value, const char *ui_name, const char *ui_description)
void RNA_def_property_flag(PropertyRNA *prop, PropertyFlag flag)
std::optional< std::string > RNA_path_from_ID_to_property(const PointerRNA *ptr, PropertyRNA *prop)
bool RNA_path_resolve_property(const PointerRNA *ptr, const char *path, PointerRNA *r_ptr, PropertyRNA **r_prop)
GreasePencilLayerTreeNode base
struct ActionChannelbag * channelbag
short(* get_offset)(bAnimContext *ac, bAnimListElem *ale)
bool(* name_prop)(bAnimListElem *ale, PointerRNA *r_ptr, PropertyRNA **r_prop)
eDopeSheet_FilterFlag flag
struct bAnimContext::@242276144047124000362312251357014355232301013033 filters
tReorderChannelIsland * prev
tReorderChannelIsland * next
struct ReportList * reports
void WM_main_add_notifier(uint type, void *reference)
wmEventHandler_Op * WM_event_add_modal_handler(bContext *C, wmOperator *op)
void WM_event_add_notifier(const bContext *C, uint type, void *reference)
void WM_gesture_box_cancel(bContext *C, wmOperator *op)
wmOperatorStatus WM_gesture_box_modal(bContext *C, wmOperator *op, const wmEvent *event)
wmOperatorStatus WM_gesture_box_invoke(bContext *C, wmOperator *op, const wmEvent *event)
wmKeyMap * WM_keymap_ensure(wmKeyConfig *keyconf, const char *idname, int spaceid, int regionid)
#define WM_msg_publish_rna_prop(mbus, id_, data_, type_, prop_)
void WM_operator_properties_border_to_rcti(wmOperator *op, rcti *r_rect)
void WM_operator_properties_gesture_box_select(wmOperatorType *ot)
void WM_operator_properties_select_all(wmOperatorType *ot)
void WM_operatortype_append(void(*opfunc)(wmOperatorType *))
wmOperatorStatus WM_operator_flag_only_pass_through_on_press(wmOperatorStatus retval, const wmEvent *event)
wmOperatorStatus WM_menu_invoke(bContext *C, wmOperator *op, const wmEvent *)
int WM_operator_smooth_viewtx_get(const wmOperator *op)
wmOperatorStatus WM_operator_props_popup(bContext *C, wmOperator *op, const wmEvent *)
bScreen * WM_window_get_active_screen(const wmWindow *win)