127 *r_action_user = &ob->
id;
129 return active_action;
134 bAction *active_action = (active_key && active_key->
adt) ? active_key->
adt->
action :
nullptr;
136 *r_action_user = &active_key->
id;
138 return active_action;
147 *r_action_user =
nullptr;
194 switch (saction->
mode) {
235 Strip *strip = SEQ_select_active_get(ac->
scene);
269 ac->
filters.
flag = flag_only_selected | flag_only_errors;
286 if (sipo->
ads ==
nullptr) {
304 switch (sipo->
mode) {
344 if (snla->
ads ==
nullptr) {
408 return (ok && ac->
data);
476#define BEGIN_ANIMFILTER_SUBCHANNELS(expanded_check) \
478 const eAnimFilter_Flags _filter = filter_mode; \
479 short _doSubChannels = 0; \
480 if (!(filter_mode & ANIMFILTER_LIST_VISIBLE) || (expanded_check)) { \
481 _doSubChannels = 1; \
483 else if (!(filter_mode & ANIMFILTER_LIST_CHANNELS)) { \
484 _doSubChannels = 2; \
487 filter_mode |= ANIMFILTER_TMP_PEEK; \
491 (void)_doSubChannels; \
494#define END_ANIMFILTER_SUBCHANNELS \
495 filter_mode = _filter; \
502#define ANIMDATA_HAS_ACTION_LEGACY(id) \
503 ((id)->adt && (id)->adt->action && (id)->adt->action->wrap().is_action_legacy())
505#define ANIMDATA_HAS_ACTION_LAYERED(id) \
506 ((id)->adt && (id)->adt->action && (id)->adt->action->wrap().is_action_layered())
509#define ANIMDATA_HAS_DRIVERS(id) ((id)->adt && (id)->adt->drivers.first)
512#define ANIMDATA_HAS_NLA(id) ((id)->adt && (id)->adt->nla_tracks.first)
551#define ANIMDATA_FILTER_CASES( \
552 id, adtOk, nlaOk, driversOk, nlaKeysOk, legacyActionOk, layeredActionOk) \
555 if (!(filter_mode & ANIMFILTER_CURVE_VISIBLE) || \
556 !((id)->adt->flag & ADT_CURVES_NOT_VISIBLE)) { \
557 if (filter_mode & ANIMFILTER_ANIMDATA) { \
560 else if (ac->filters.flag & ADS_FILTER_ONLYNLA) { \
561 if (ANIMDATA_HAS_NLA(id)) { \
564 else if (!(ac->filters.flag & ADS_FILTER_NLA_NOACT) || ANIMDATA_HAS_ACTION_LAYERED(id)) \
569 else if (ac->filters.flag & ADS_FILTER_ONLYDRIVERS) { \
570 if (ANIMDATA_HAS_DRIVERS(id)) { \
575 if (ANIMDATA_HAS_NLA(id)) { \
578 if (ANIMDATA_HAS_ACTION_LAYERED(id)) { \
581 else if (ANIMDATA_HAS_ACTION_LEGACY(id)) { \
598#define ANIMCHANNEL_NEW_CHANNEL_FULL( \
599 bmain, channel_data, channel_type, owner_id, fcurve_owner_id, ale_statement) \
600 if (filter_mode & ANIMFILTER_TMP_PEEK) { \
604 bAnimListElem *ale = make_new_animlistelem( \
605 bmain, channel_data, channel_type, (ID *)owner_id, fcurve_owner_id); \
607 BLI_addtail(anim_data, ale); \
614#define ANIMCHANNEL_NEW_CHANNEL(bmain, channel_data, channel_type, owner_id, fcurve_owner_id) \
615 ANIMCHANNEL_NEW_CHANNEL_FULL(bmain, channel_data, channel_type, owner_id, fcurve_owner_id, {})
620#define ANIMCHANNEL_ACTIVEOK(ale) \
621 (!(filter_mode & ANIMFILTER_ACTIVE) || !(ale->adt) || (ale->adt->flag & ADT_UI_ACTIVE))
625#define ANIMCHANNEL_SELOK(test_func) \
626 (!(filter_mode & (ANIMFILTER_SEL | ANIMFILTER_UNSEL)) || \
627 ((filter_mode & ANIMFILTER_SEL) && test_func) || \
628 ((filter_mode & ANIMFILTER_UNSEL) && test_func == 0))
639#define ANIMCHANNEL_SELEDITOK(test_func) \
640 (!(filter_mode & ANIMFILTER_SELEDIT) || !(filter_mode & ANIMFILTER_FOREDIT) || (test_func))
678 ale->
type = datatype;
918 Key *key =
reinterpret_cast<Key *
>(ale->
id);
1034 char bone_name[
sizeof(pchan->
name)];
1044 if (pchan && pchan->
bone) {
1066 Scene *scene =
reinterpret_cast<Scene *
>(owner_id);
1067 Strip *strip =
nullptr;
1068 char strip_name[
sizeof(strip->
name)];
1098 if (strip ==
nullptr) {
1110 bNode *node =
nullptr;
1111 char node_name[
sizeof(node->
name)];
1139 const size_t str_len = strlen(ads->
searchstr);
1142 int (*words)[2] =
static_cast<int (*)[2]
>(
BLI_array_alloca(words, words_max));
1144 ads->
searchstr, str_len,
' ', words, words_max);
1148 for (
int index = 0; index < words_len; index++) {
1173 ale_dummy.
type = channel_type;
1174 ale_dummy.
owner = owner;
1175 ale_dummy.
id = owner_id;
1176 ale_dummy.
data = fcu;
1180 if (acf && acf->
name) {
1273 for (fcu = first; ((fcu) && (fcu->
grp == grp)); fcu = fcu->
next) {
1283 if (ac->
ads && owner_id) {
1338 ID *fcurve_owner_id)
1421 ID *fcurve_owner_id)
1423 size_t num_items = 0;
1432 const bool filter_by_name = ac->
ads && (ac->
ads->
searchstr[0] !=
'\0');
1434 for (
FCurve *fcu : fcurves) {
1443 if (selection_matters &&
bool(fcu->flag &
FCURVE_SELECTED) != must_be_selected) {
1513 ListBase tmp_data = {
nullptr,
nullptr};
1514 size_t tmp_items = 0;
1573 ac, &tmp_data, first_fcu,
ANIMTYPE_FCURVE, filter_mode, agrp, owner_id, &act->
id);
1579 ac, &tmp_data, fcurves, slot_handle, filter_mode, owner_id, &act->
id);
1599 ale->slot_handle = slot_handle;
1631 ID *slot_user_id =
nullptr;
1635 if (!slot_user_id) {
1643 slot_user_id = animated_id;
1656 const bool selection_ok_for_slot = !selection_matters || slot.
is_selected() == must_be_selected;
1667 const bool show_slot_channel = (is_action_mode && selection_ok_for_slot &&
1668 include_summary_channels);
1669 if (show_slot_channel) {
1677 const bool expansion_is_ok = !visible_only || !show_slot_channel || slot.
is_expanded();
1680 if (channelbag ==
nullptr) {
1684 if (!expansion_is_ok) {
1691 ac, anim_data, &action, slot.
handle, group, filter_mode, slot_user_id);
1695 if (!show_active_group_only) {
1696 int first_ungrouped_fcurve_index = 0;
1705 ac, anim_data, fcurves, slot.
handle, filter_mode, slot_user_id, &action.
id);
1742 FCurve *lastchan =
nullptr;
1761 if (agrp->channels.last) {
1762 lastchan =
static_cast<FCurve *
>(agrp->channels.last);
1772 FCurve *firstfcu = (lastchan) ? (lastchan->
next) :
1775 ac, anim_data, firstfcu,
ANIMTYPE_FCURVE, filter_mode,
nullptr, owner_id, &action.
id);
1788 if (is_action_mode && !show_active_only) {
1834 ale->data = adt->action ? adt->action : nullptr;
1849 for (nlt = first; nlt; nlt =
next) {
1866 bool track_ok =
false, strip_ok =
false;
1871 if (track_ok ==
false) {
1881 if (!track_ok && !strip_ok) {
1906 ListBase tmp_data = {
nullptr,
nullptr};
1907 size_t tmp_items = 0;
1922 static_cast<FCurve *
>(strip->fcurves.first),
2042 if (ads !=
nullptr && ads->
searchstr[0] !=
'\0' &&
2070 if (
STREQ(fcurve->rna_path,
"eval_time") ||
2073 key_fcurves.
append(fcurve);
2078 ac, anim_data, key_fcurves, key->
adt->
slot_handle, filter_mode, &key->
id, &action.
id);
2096 reinterpret_cast<ID *
>(key));
2127 if ((filter_mode &
ANIMFILTER_ACTIVE) && grease_pencil->is_layer_active(&layer)) {
2138 static_cast<void *
>(&layer),
2157 const bool name_search = (ac->
ads->
searchstr[0] !=
'\0');
2158 const bool skip_node = name_search &&
2161 if (node.
is_layer() && !skip_node) {
2163 ac, anim_data, grease_pencil, node.
as_layer(), filter_mode);
2168 ListBase tmp_data = {
nullptr,
nullptr};
2169 size_t tmp_items = 0;
2175 ac, &tmp_data, grease_pencil, node_->wrap(), filter_mode);
2180 if ((tmp_items == 0) && !name_search) {
2190 static_cast<void *
>(&node),
2215 ac, anim_data, grease_pencil, node->wrap(), filter_mode);
2284 if (show_animdata) {
2286 ac, anim_data,
reinterpret_cast<ID *
>(grease_pencil), filter_mode);
2290 ListBase tmp_data = {
nullptr,
nullptr};
2291 size_t tmp_items = 0;
2295 if (show_animdata) {
2297 ac, &tmp_data,
reinterpret_cast<ID *
>(grease_pencil), filter_mode);
2302 ac, &tmp_data, grease_pencil, filter_mode);
2307 if (tmp_items == 0) {
2341 Object *ob = base->object;
2384 ListBase tmp_data = {
nullptr,
nullptr};
2385 size_t tmp_items = 0;
2430 ListBase tmp_data = {
nullptr,
nullptr};
2431 size_t tmp_items = 0;
2501 ListBase tmp_data = {
nullptr,
nullptr};
2502 size_t tmp_items = 0;
2546 ListBase tmp_data = {
nullptr,
nullptr};
2547 size_t tmp_items = 0;
2587 for (
bNode *node : ntree->all_nodes()) {
2588 if (node->is_group()) {
2597 reinterpret_cast<bNodeTree *
>(node->id),
2615 if (lineset->linestyle) {
2630 ListBase tmp_data = {
nullptr,
nullptr};
2631 size_t tmp_items = 0;
2642 ac, &tmp_data,
reinterpret_cast<ID *
>(linestyle), filter_mode);
2671 ListBase tmp_data = {
nullptr,
nullptr};
2672 size_t tmp_items = 0;
2689 ac, &tmp_data,
reinterpret_cast<ID *
>(tex), tex->
nodetree, filter_mode);
2722 MTex **mtex =
nullptr;
2727 if (owner_id ==
nullptr) {
2731 switch (
GS(owner_id->
name)) {
2734 mtex =
reinterpret_cast<MTex **
>(&part->
mtex);
2740 printf(
"ERROR: Unsupported owner_id (i.e. texture stack) for filter textures - %s\n",
2750 Tex *tex = (mtex[a]) ? mtex[a]->tex :
nullptr;
2753 if (tex ==
nullptr) {
2770 ListBase tmp_data = {
nullptr,
nullptr};
2771 size_t tmp_items = 0;
2782 ac, &tmp_data,
reinterpret_cast<ID *
>(ma), ma->
nodetree, filter_mode);
2815 for (a = 1; a <= ob->
totcol; a++) {
2849 ID *owner_id = &ob->
id;
2855 if (
id ==
nullptr) {
2860 switch (
GS(
id->name)) {
2863 Tex *tex =
reinterpret_cast<Tex *
>(
id);
2935 ListBase tmp_data = {
nullptr,
nullptr};
2936 size_t tmp_items = 0;
2940 if (psys->part ==
nullptr) {
2948 ac, &tmp_data,
reinterpret_cast<ID *
>(psys->part), filter_mode);
2953 ac, &tmp_data,
reinterpret_cast<ID *
>(psys->part), filter_mode);
2984 ListBase tmp_data = {
nullptr,
nullptr};
2985 size_t tmp_items = 0;
3186 ListBase tmp_data = {
nullptr,
nullptr};
3187 size_t tmp_items = 0;
3222 ListBase tmp_data = {
nullptr,
nullptr};
3223 size_t tmp_items = 0;
3229 void *cdata =
nullptr;
3287 ListBase tmp_data = {
nullptr,
nullptr};
3289 size_t tmp_items = 0;
3368 ListBase tmp_data = {
nullptr,
nullptr};
3369 size_t tmp_items = 0;
3380 ac, &tmp_data,
reinterpret_cast<ID *
>(wo), wo->
nodetree, filter_mode);
3410 ListBase tmp_data = {
nullptr,
nullptr};
3411 size_t tmp_items = 0;
3417 void *cdata =
nullptr;
3474 ListBase tmp_data = {
nullptr,
nullptr};
3475 size_t tmp_items = 0;
3497 ac, &tmp_data,
reinterpret_cast<ID *
>(sce), ntree, filter_mode);
3504 seq::foreach_strip_modifier_id(strip, [&](ID *id) {
3505 if (GS(id->name) == ID_NT) {
3511 for (
ID *node_tree : node_trees) {
3513 ac, &tmp_data, &sce->
id,
reinterpret_cast<bNodeTree *
>(node_tree), filter_mode);
3553 ListBase tmp_data = {
nullptr,
nullptr};
3554 size_t tmp_items = 0;
3604 if (base->
object ==
nullptr) {
3651 if (ob->
data !=
nullptr) {
3693 const Base *b1 = *((
const Base **)base1_ptr);
3694 const Base *b2 = *((
const Base **)base2_ptr);
3704 size_t *r_usable_bases)
3710 size_t num_bases = 0;
3716 sorted_bases[num_bases++] = base;
3724 *r_usable_bases = num_bases;
3725 return sorted_bases;
3742 printf(
"Dope Sheet Error: No scene!\n");
3744 printf(
"\tPointer = %p, Name = '%s'\n",
3794 (object_bases->
first != object_bases->
last))
3798 Base **sorted_bases;
3804 for (
size_t i = 0;
i < num_bases;
i++) {
3849 ads = &saction->
ads;
3898 switch (channel->
type) {
3905 ac, anim_data,
static_cast<Scene *
>(channel->
data), filter_mode);
3910 ac, anim_data,
static_cast<Base *
>(channel->
data), filter_mode);
3915 ac, anim_data,
static_cast<CacheFile *
>(channel->
data), filter_mode);
3923 printf(
"ERROR: Unsupported channel type (%d) in animdata_filter_animchan()\n",
3993 if (!
data || !anim_data) {
4023 "This code assumes the Action editor shows the Action of the active object");
4028 ac, anim_data, action, slot_handle, filter_mode,
reinterpret_cast<ID *
>(obact));
4126 printf(
"ANIM_animdata_filter() - Invalid datatype argument ANIMCONT_NONE\n");
Functions and classes to work with Actions.
Functions to deal with Armatures.
C++ functions to deal with Armature collections (i.e. the successor of bone layers).
Blender kernel action and pose functionality.
bPoseChannel * BKE_pose_channel_find_name(const bPose *pose, const char *name)
AnimData * BKE_animdata_from_id(const ID *id)
bool BKE_collection_has_object_recursive(Collection *collection, Object *ob)
ScrArea * CTX_wm_area(const bContext *C)
Depsgraph * CTX_data_depsgraph_pointer(const bContext *C)
SpaceLink * CTX_wm_space_data(const bContext *C)
Scene * CTX_data_scene(const bContext *C)
Main * CTX_data_main(const bContext *C)
ARegion * CTX_wm_region(const bContext *C)
ViewLayer * CTX_data_view_layer(const bContext *C)
#define DRIVER_TARGETS_USED_LOOPER_BEGIN(dvar)
#define DRIVER_TARGETS_LOOPER_END
Low-level operations for grease pencil.
std::optional< std::string > BKE_keyblock_curval_rnapath_get(const Key *key, const KeyBlock *kb)
Key * BKE_key_from_object(Object *ob)
void BKE_view_layer_synced_ensure(const Scene *scene, ViewLayer *view_layer)
Object * BKE_view_layer_active_object_get(const ViewLayer *view_layer)
ListBase * BKE_view_layer_object_bases_get(ViewLayer *view_layer)
LibraryForeachIDCallbackFlag
struct MaskLayer * BKE_mask_layer_active(struct Mask *mask)
General operations, lookup, etc. for materials.
Material * BKE_object_material_get(Object *ob, short act)
void void void BKE_modifiers_foreach_ID_link(Object *ob, IDWalkFunc walk, void *user_data)
#define BLI_array_alloca(arr, realsize)
#define BLI_assert_unreachable()
#define BLI_assert_msg(a, msg)
GSet * BLI_gset_ptr_new(const char *info)
void BLI_gset_free(GSet *gs, GSetKeyFreeFP keyfreefp)
bool BLI_gset_add(GSet *gs, void *key)
int BLI_findindex(const ListBase *listbase, const void *vlink) 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 BLI_addtail(ListBase *listbase, void *vlink) ATTR_NONNULL(1)
int BLI_listbase_count(const ListBase *listbase) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(1)
int bool bool bool size_t size_t size_t int BLI_string_max_possible_word_count(int str_len) ATTR_WARN_UNUSED_RESULT
int char char * BLI_strncasestr(const char *s, const char *find, size_t len) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(1
int char char int int int BLI_strcasecmp_natural(const char *s1, const char *s2) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(1
int bool bool BLI_str_endswith(const char *__restrict str, const char *__restrict end) ATTR_NONNULL(1
bool bool int BLI_string_find_split_words(const char *str, size_t str_maxlen, char delim, int r_words[][2], int words_max) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(1
int char * BLI_strcasestr(const char *s, const char *find) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(1
bool bool BLI_str_quoted_substr(const char *__restrict str, const char *__restrict prefix, char *result, size_t result_maxncpy)
#define UNUSED_VARS_NDEBUG(...)
#define ID_IS_LINKED(_id)
#define ID_IS_EDITABLE(_id)
#define ID_REAL_USERS(id)
#define ID_IS_OVERRIDE_LIBRARY(_id)
@ ADS_FILTER_NOLIGHTPROBE
@ ADS_FILTER_DRIVER_FALLBACK_AS_ERROR
@ ADS_FILTER_NOMOVIECLIPS
@ ADS_FILTER_NOCACHEFILES
@ ADS_FILTER_NOPOINTCLOUD
@ ADS_FILTER_ONLY_SLOTS_OF_ACTIVE
@ ADS_FLAG_SUMMARY_COLLAPSED
@ SACTION_POSEMARKERS_SHOW
@ ADT_CURVES_ALWAYS_VISIBLE
@ ADT_NLA_SKEYS_COLLAPSED
@ DTAR_FLAG_FALLBACK_USED
@ GREASE_PENCIL_ANIM_CHANNEL_EXPANDED
@ BASE_ENABLED_AND_VISIBLE_IN_DEFAULT_VIEWPORT
@ BASE_ENABLED_AND_MAYBE_VISIBLE_IN_VIEWPORT
Object is a sort of wrapper for general info.
#define BASE_SELECTED(v3d, base)
@ USER_ANIM_ONLY_SHOW_SELECTED_CURVE_KEYS
#define EXPANDED_ADT(adt)
#define FILTER_SPK_OBJD(spk)
#define FILTER_CACHEFILE_OBJD(cf)
#define FILTER_LIGHTPROBE_OBJD(probe)
@ ANIMTYPE_SPECIALDATA__UNUSED
@ ANIMTYPE_GREASE_PENCIL_DATABLOCK
@ ANIMTYPE_GREASE_PENCIL_LAYER
@ ANIMTYPE_FILLACT_LAYERED
@ ANIMTYPE_GREASE_PENCIL_LAYER_GROUP
#define EXPANDED_MCLIP(clip)
#define FILTER_NTREE_DATA(ntree)
#define FILTER_SKE_OBJD(key)
#define FILTER_MESH_OBJD(me)
#define EDITABLE_GPL(gpl)
#define EXPANDED_SCEC(sce)
#define SEL_MASKLAY(masklay)
#define FILTER_ARM_OBJD(arm)
#define EDITABLE_AGRP(agrp)
#define EXPANDED_AGRP(ac, agrp)
#define FILTER_CAM_OBJD(ca)
@ ALE_GREASE_PENCIL_GROUP
#define FILTER_LATTICE_OBJD(lt)
#define FILTER_CURVES_OBJD(ha)
#define EXPANDED_ACTC(actc)
#define FILTER_LAM_OBJD(la)
#define EXPANDED_OBJC(ob)
#define EDITABLE_SHAPEKEY(kb)
#define EDITABLE_FCU(fcu)
#define EDITABLE_MASK(masklay)
#define FILTER_CUR_OBJD(cu)
#define FILTER_MAT_OBJD(ma)
#define EDITABLE_NLT(nlt)
#define FILTER_WOR_SCED(wo)
#define FILTER_MBALL_OBJD(mb)
#define FILTER_LS_SCED(linestyle)
#define EXPANDED_DRVD(adt)
#define EXPANDED_MASK(mask)
#define SEL_ANIMDATA(adt)
#define FILTER_POINTS_OBJD(pt)
#define EXPANDED_GPD(gpd)
#define FILTER_TEX_DATA(tex)
#define FILTER_VOLUME_OBJD(vo)
@ ANIMFILTER_DATA_VISIBLE
@ ANIMFILTER_CURVE_VISIBLE
@ ANIMFILTER_LIST_VISIBLE
@ ANIMFILTER_LIST_CHANNELS
@ ANIMFILTER_TMP_IGNORE_ONLYSEL
#define FILTER_PART_OBJD(part)
Read Guarded memory(de)allocation.
const bAnimChannelType * ANIM_channel_get_typeinfo(const bAnimListElem *ale)
static size_t animdata_filter_ds_scene(bAnimContext *ac, ListBase *anim_data, Scene *sce, eAnimFilter_Flags filter_mode)
#define ANIMCHANNEL_NEW_CHANNEL(bmain, channel_data, channel_type, owner_id, fcurve_owner_id)
static size_t animdata_filter_dopesheet_ob(bAnimContext *ac, ListBase *anim_data, Base *base, eAnimFilter_Flags filter_mode)
static Key * actedit_get_shapekeys(bAnimContext *ac)
static size_t animfilter_block_data(bAnimContext *ac, ListBase *anim_data, ID *id, const eAnimFilter_Flags filter_mode)
bool ANIM_animdata_can_have_greasepencil(const eAnimCont_Types type)
static bool nlaedit_get_context(bAnimContext *ac, SpaceNla *snla)
static size_t animdata_filter_dopesheet_movieclips(bAnimContext *ac, ListBase *anim_data, const eAnimFilter_Flags filter_mode)
static size_t animdata_filter_grease_pencil_layers_data(bAnimContext *ac, ListBase *anim_data, GreasePencil *grease_pencil, const eAnimFilter_Flags filter_mode)
static bool animdata_filter_base_is_ok(bAnimContext *ac, Base *base, const eObjectMode object_mode, const eAnimFilter_Flags filter_mode)
bAction * ANIM_active_action_from_area(Scene *scene, ViewLayer *view_layer, const ScrArea *area, ID **r_action_user)
static size_t animdata_filter_ds_obanim(bAnimContext *ac, ListBase *anim_data, Object *ob, eAnimFilter_Flags filter_mode)
static size_t animdata_filter_ds_movieclip(bAnimContext *ac, ListBase *anim_data, MovieClip *clip, eAnimFilter_Flags filter_mode)
static size_t animdata_filter_ds_nodetree_group(bAnimContext *ac, ListBase *anim_data, ID *owner_id, bNodeTree *ntree, eAnimFilter_Flags filter_mode)
static bool name_matches_dopesheet_filter(const bDopeSheet *ads, const char *name)
static size_t animdata_filter_ds_particles(bAnimContext *ac, ListBase *anim_data, Object *ob, eAnimFilter_Flags filter_mode)
static size_t animfilter_fcurves_span(bAnimContext *ac, ListBase *anim_data, Span< FCurve * > fcurves, const animrig::slot_handle_t slot_handle, const eAnimFilter_Flags filter_mode, ID *animated_id, ID *fcurve_owner_id)
#define ANIMCHANNEL_SELOK(test_func)
static size_t animdata_filter_mask(bAnimContext *ac, ListBase *anim_data, void *, eAnimFilter_Flags filter_mode)
static bool fcurve_span_selection_matters(const eAnimFilter_Flags filter_mode)
static size_t animdata_filter_ds_gpencil(bAnimContext *ac, ListBase *anim_data, bGPdata *gpd, eAnimFilter_Flags filter_mode)
static size_t animdata_filter_ds_materials(bAnimContext *ac, ListBase *anim_data, Object *ob, const eAnimFilter_Flags filter_mode)
static size_t animfilter_nla_controls(bAnimContext *ac, ListBase *anim_data, AnimData *adt, eAnimFilter_Flags filter_mode, ID *owner_id)
static size_t animdata_filter_grease_pencil(bAnimContext *ac, ListBase *anim_data, const eAnimFilter_Flags filter_mode)
static size_t animdata_filter_grease_pencil_layer(bAnimContext *ac, ListBase *anim_data, GreasePencil *grease_pencil, blender::bke::greasepencil::Layer &layer, const eAnimFilter_Flags filter_mode)
static size_t animdata_filter_gpencil_layers_data_legacy(bAnimContext *ac, ListBase *anim_data, bGPdata *gpd, const eAnimFilter_Flags filter_mode)
static size_t animdata_filter_ds_textures(bAnimContext *ac, ListBase *anim_data, ID *owner_id, const eAnimFilter_Flags filter_mode)
static size_t animdata_filter_ds_modifiers(bAnimContext *ac, ListBase *anim_data, Object *ob, const eAnimFilter_Flags filter_mode)
static size_t animdata_filter_grease_pencil_layer_node_recursive(bAnimContext *ac, ListBase *anim_data, GreasePencil *grease_pencil, blender::bke::greasepencil::TreeNode &node, eAnimFilter_Flags filter_mode)
bool ANIM_animdata_get_context(const bContext *C, bAnimContext *ac)
static void key_data_from_adt(bAnimListElem &ale, AnimData *adt)
#define ANIMCHANNEL_ACTIVEOK(ale)
static size_t animdata_filter_ds_material(bAnimContext *ac, ListBase *anim_data, Material *ma, eAnimFilter_Flags filter_mode)
static size_t animdata_filter_remove_invalid(ListBase *anim_data)
static size_t animdata_filter_ds_texture(bAnimContext *ac, ListBase *anim_data, Tex *tex, ID *owner_id, eAnimFilter_Flags filter_mode)
static short animdata_filter_dopesheet_summary(bAnimContext *ac, ListBase *anim_data, const eAnimFilter_Flags filter_mode, size_t *items)
bool ANIM_animdata_context_getdata(bAnimContext *ac)
static void animfilter_modifier_idpoin_cb(void *afm_ptr, Object *ob, ID **idpoin, LibraryForeachIDCallbackFlag)
static size_t animdata_filter_grease_pencil_data(bAnimContext *ac, ListBase *anim_data, GreasePencil *grease_pencil, eAnimFilter_Flags filter_mode)
static size_t animdata_filter_shapekey(bAnimContext *ac, ListBase *anim_data, Key *key, const eAnimFilter_Flags filter_mode)
static size_t animfilter_fcurves(bAnimContext *ac, ListBase *anim_data, FCurve *first, eAnim_ChannelType fcurve_type, const eAnimFilter_Flags filter_mode, void *owner, ID *owner_id, ID *fcurve_owner_id)
static int ds_base_sorting_cmp(const void *base1_ptr, const void *base2_ptr)
static bool skip_fcurve_with_name(bAnimContext *ac, FCurve *fcu, eAnim_ChannelType channel_type, void *owner, ID *owner_id)
static size_t animdata_filter_ds_obdata(bAnimContext *ac, ListBase *anim_data, Object *ob, eAnimFilter_Flags filter_mode)
static bool fcurve_has_errors(bAnimContext *ac, const FCurve *fcu)
static size_t animdata_filter_ds_nodetree(bAnimContext *ac, ListBase *anim_data, ID *owner_id, bNodeTree *ntree, const eAnimFilter_Flags filter_mode)
#define END_ANIMFILTER_SUBCHANNELS
static bAnimListElem * make_new_animlistelem(Main *bmain, void *data, const eAnim_ChannelType datatype, ID *owner_id, ID *fcurve_owner_id)
static size_t animfilter_act_group(bAnimContext *ac, ListBase *anim_data, bAction *act, animrig::slot_handle_t slot_handle, bActionGroup *agrp, eAnimFilter_Flags filter_mode, ID *owner_id)
static bool fcurve_span_must_be_selected(const eAnimFilter_Flags filter_mode)
static size_t animdata_filter_ds_world(bAnimContext *ac, ListBase *anim_data, Scene *sce, World *wo, eAnimFilter_Flags filter_mode)
static bool skip_fcurve_selected_data(bAnimContext *ac, FCurve *fcu, ID *owner_id, const eAnimFilter_Flags filter_mode)
static size_t animdata_filter_remove_duplis(ListBase *anim_data)
static size_t animfilter_action_slots(bAnimContext *ac, ListBase *anim_data, animrig::Action &action, const eAnimFilter_Flags filter_mode, ID *owner_id)
static size_t animdata_filter_animchan(bAnimContext *ac, ListBase *anim_data, bAnimListElem *channel, const eAnimFilter_Flags filter_mode)
size_t ANIM_animfilter_action_slot(bAnimContext *ac, ListBase *anim_data, animrig::Action &action, animrig::Slot &slot, const eAnimFilter_Flags filter_mode, ID *animated_id)
static FCurve * animfilter_fcurve_next(bAnimContext *ac, FCurve *first, eAnim_ChannelType channel_type, const eAnimFilter_Flags filter_mode, void *owner, ID *owner_id)
static size_t animdata_filter_ds_cachefile(bAnimContext *ac, ListBase *anim_data, CacheFile *cache_file, eAnimFilter_Flags filter_mode)
static size_t animdata_filter_dopesheet(bAnimContext *ac, ListBase *anim_data, eAnimFilter_Flags filter_mode)
static size_t animdata_filter_ds_keyanim(bAnimContext *ac, ListBase *anim_data, Object *ob, Key *key, eAnimFilter_Flags filter_mode)
#define BEGIN_ANIMFILTER_SUBCHANNELS(expanded_check)
static size_t animfilter_nla(bAnimContext *ac, ListBase *anim_data, AnimData *adt, const eAnimFilter_Flags filter_mode, ID *owner_id)
static size_t animdata_filter_ds_linestyle(bAnimContext *ac, ListBase *anim_data, Scene *sce, eAnimFilter_Flags filter_mode)
static bool graphedit_get_context(bAnimContext *ac, SpaceGraph *sipo)
size_t ANIM_animdata_filter(bAnimContext *ac, ListBase *anim_data, const eAnimFilter_Flags filter_mode, void *data, const eAnimCont_Types datatype)
#define ANIMDATA_FILTER_CASES(id, adtOk, nlaOk, driversOk, nlaKeysOk, legacyActionOk, layeredActionOk)
#define ANIMCHANNEL_NEW_CHANNEL_FULL(bmain, channel_data, channel_type, owner_id, fcurve_owner_id, ale_statement)
static bool actedit_get_context(bAnimContext *ac, SpaceAction *saction)
static bool ale_name_matches_dopesheet_filter(const bDopeSheet &ads, bAnimListElem &ale)
static Base ** animdata_filter_ds_sorted_bases(bAnimContext *ac, const Scene *scene, ViewLayer *view_layer, const eAnimFilter_Flags filter_mode, size_t *r_usable_bases)
static size_t animfilter_action(bAnimContext *ac, ListBase *anim_data, animrig::Action &action, const animrig::slot_handle_t slot_handle, const eAnimFilter_Flags filter_mode, ID *owner_id)
static size_t animdata_filter_dopesheet_scene(bAnimContext *ac, ListBase *anim_data, Scene *sce, eAnimFilter_Flags filter_mode)
static size_t animdata_filter_mask_data(bAnimContext *ac, ListBase *anim_data, Mask *mask, const eAnimFilter_Flags filter_mode)
#define ANIMCHANNEL_SELEDITOK(test_func)
#define ANIM_CHAN_NAME_SIZE
BMesh const char void * data
void append(const T &value)
bool is_action_legacy() const
bool is_action_layered() const
blender::Span< const Slot * > slots() const
Slot * slot_for_handle(slot_handle_t handle)
blender::Span< const FCurve * > fcurves() const
blender::Span< const bActionGroup * > channel_groups() const
static constexpr slot_handle_t unassigned
const LayerGroup & as_group() const
const Layer & as_layer() const
void * MEM_calloc_arrayN(size_t len, size_t size, const char *str)
void * MEM_callocN(size_t len, const char *str)
void MEM_freeN(void *vmemh)
ccl_device_inline float2 mask(const MaskType mask, const float2 a)
const animrig::Channelbag * channelbag_for_action_slot(const Action &action, slot_handle_t slot_handle)
bool bone_is_visible(const bArmature *armature, const Bone *bone)
ID * action_slot_get_id_best_guess(Main &bmain, Slot &slot, ID *primary_id)
decltype(::ActionSlot::handle) slot_handle_t
Span< FCurve * > fcurves_for_action_slot(Action &action, slot_handle_t slot_handle)
FCurve * fcurve_find_in_assigned_slot(AnimData &adt, const FCurveDescriptor &fcurve_descriptor)
bNode * node_find_node_by_name(bNodeTree &ntree, StringRefNull name)
void foreach_strip(ListBase *seqbase, ForEachFunc callback, void *user_data)
Editing * editing_get(const Scene *scene)
Strip * get_strip_by_name(ListBase *seqbase, const char *name, bool recursive)
float wrap(float value, float max, float min)
GreasePencilLayerTreeNode base
GreasePencilLayerTreeNode base
GreasePencilLayerTreeGroup * root_group_ptr
struct bNodeTree * nodetree
struct bNodeTree * nodetree
struct bNodeTree * compositing_node_group
struct bNodeTree * nodetree
struct bNodeTree * nodetree
struct ActionChannelbag * channelbag
void(* name)(bAnimListElem *ale, char *name)
eDopeSheet_FilterFlag flag
eAnimEdit_Context dopesheet_mode
eGraphEdit_Mode grapheditor_mode
struct bAnimContext::@242276144047124000362312251357014355232301013033 filters
eDopeSheet_FilterFlag2 flag2
struct Collection * filter_grp
eAnimFilter_Flags filter_mode