132 switch (saction->
mode) {
140 saction->
action =
nullptr;
157 if (key && key->
adt) {
161 saction->
action =
nullptr;
188 struct Mask *mask = seq ? seq->
mask :
nullptr;
243 if (sipo->
ads ==
nullptr) {
259 switch (sipo->
mode) {
291 if (snla->
ads ==
nullptr) {
354 return (ok && ac->
data);
419#define BEGIN_ANIMFILTER_SUBCHANNELS(expanded_check) \
421 const eAnimFilter_Flags _filter = filter_mode; \
422 short _doSubChannels = 0; \
423 if (!(filter_mode & ANIMFILTER_LIST_VISIBLE) || (expanded_check)) { \
424 _doSubChannels = 1; \
426 else if (!(filter_mode & ANIMFILTER_LIST_CHANNELS)) { \
427 _doSubChannels = 2; \
430 filter_mode |= ANIMFILTER_TMP_PEEK; \
434 (void)_doSubChannels; \
437#define END_ANIMFILTER_SUBCHANNELS \
438 filter_mode = _filter; \
445#define ANIMDATA_HAS_ACTION_LEGACY(id) \
446 ((id)->adt && (id)->adt->action && (id)->adt->action->wrap().is_action_legacy())
448#ifdef WITH_ANIM_BAKLAVA
449# define ANIMDATA_HAS_ACTION_LAYERED(id) \
450 ((id)->adt && (id)->adt->action && (id)->adt->action->wrap().is_action_layered())
452# define ANIMDATA_HAS_ACTION_LAYERED(id) false
456#define ANIMDATA_HAS_DRIVERS(id) ((id)->adt && (id)->adt->drivers.first)
459#define ANIMDATA_HAS_NLA(id) \
460 ((id)->adt && (id)->adt->nla_tracks.first && \
461 (!(id)->adt->action || (id)->adt->action->wrap().is_action_legacy()))
500#define ANIMDATA_FILTER_CASES( \
501 id, adtOk, nlaOk, driversOk, nlaKeysOk, legacyActionOk, layeredActionOk) \
504 if (!(filter_mode & ANIMFILTER_CURVE_VISIBLE) || \
505 !((id)->adt->flag & ADT_CURVES_NOT_VISIBLE)) { \
506 if (filter_mode & ANIMFILTER_ANIMDATA) { \
509 else if (ac->ads->filterflag & ADS_FILTER_ONLYNLA) { \
510 if (ANIMDATA_HAS_NLA(id)) { \
513 else if (!(ac->ads->filterflag & ADS_FILTER_NLA_NOACT) || \
514 ANIMDATA_HAS_ACTION_LEGACY(id)) { \
518 else if (ac->ads->filterflag & ADS_FILTER_ONLYDRIVERS) { \
519 if (ANIMDATA_HAS_DRIVERS(id)) { \
523 else if (ANIMDATA_HAS_ACTION_LAYERED(id)) { \
527 if (ANIMDATA_HAS_NLA(id)) { \
530 if (ANIMDATA_HAS_ACTION_LEGACY(id)) { \
547#define ANIMCHANNEL_NEW_CHANNEL_FULL( \
548 bmain, channel_data, channel_type, owner_id, fcurve_owner_id, ale_statement) \
549 if (filter_mode & ANIMFILTER_TMP_PEEK) { \
553 bAnimListElem *ale = make_new_animlistelem( \
554 bmain, channel_data, channel_type, (ID *)owner_id, fcurve_owner_id); \
556 BLI_addtail(anim_data, ale); \
563#define ANIMCHANNEL_NEW_CHANNEL(bmain, channel_data, channel_type, owner_id, fcurve_owner_id) \
564 ANIMCHANNEL_NEW_CHANNEL_FULL(bmain, channel_data, channel_type, owner_id, fcurve_owner_id, {})
569#define ANIMCHANNEL_ACTIVEOK(ale) \
570 (!(filter_mode & ANIMFILTER_ACTIVE) || !(ale->adt) || (ale->adt->flag & ADT_UI_ACTIVE))
574#define ANIMCHANNEL_SELOK(test_func) \
575 (!(filter_mode & (ANIMFILTER_SEL | ANIMFILTER_UNSEL)) || \
576 ((filter_mode & ANIMFILTER_SEL) && test_func) || \
577 ((filter_mode & ANIMFILTER_UNSEL) && test_func == 0))
588#define ANIMCHANNEL_SELEDITOK(test_func) \
589 (!(filter_mode & ANIMFILTER_SELEDIT) || !(filter_mode & ANIMFILTER_FOREDIT) || (test_func))
628 ale->
type = datatype;
895 ale->
flag = layer->base.flag;
979 char bone_name[
sizeof(pchan->
name)];
989 if (pchan && pchan->
bone) {
1017 char seq_name[
sizeof(seq->
name)];
1047 if (seq ==
nullptr) {
1059 bNode *node =
nullptr;
1060 char node_name[
sizeof(node->name)];
1088 const size_t str_len = strlen(ads->
searchstr);
1093 ads->
searchstr, str_len,
' ', words, words_max);
1097 for (
int index = 0; index < words_len; index++) {
1122 ale_dummy.
type = channel_type;
1123 ale_dummy.
owner = owner;
1124 ale_dummy.
id = owner_id;
1125 ale_dummy.
data = fcu;
1129 if (acf && acf->
name) {
1133 acf->
name(&ale_dummy, name);
1155 acf->
name(&ale, name);
1222 for (fcu = first; ((fcu) && (fcu->
grp == grp)); fcu = fcu->
next) {
1232 if (ac->
ads && owner_id) {
1287 ID *fcurve_owner_id)
1365 ID *fcurve_owner_id)
1367 size_t num_items = 0;
1376 const bool filter_by_name = ac->
ads && (ac->
ads->
searchstr[0] !=
'\0');
1378 for (
FCurve *fcu : fcurves) {
1387 if (selection_matters &&
bool(fcu->flag &
FCURVE_SELECTED) != must_be_selected) {
1456 ListBase tmp_data = {
nullptr,
nullptr};
1457 size_t tmp_items = 0;
1516 ac, &tmp_data, first_fcu,
ANIMTYPE_FCURVE, filter_mode, agrp, owner_id, &act->
id);
1522 ac, &tmp_data, fcurves, slot_handle, filter_mode, owner_id, &act->
id);
1542 ale->slot_handle = slot_handle;
1578 const bool selection_ok_for_slot = !selection_matters || slot.
is_selected() == must_be_selected;
1589 const bool show_slot_channel = (is_action_mode && selection_ok_for_slot &&
1590 include_summary_channels);
1591 if (show_slot_channel) {
1599 const bool expansion_is_ok = !visible_only || !show_slot_channel || slot.
is_expanded();
1602 if (channel_bag ==
nullptr) {
1606 if (!expansion_is_ok) {
1613 ac, anim_data, &action, slot.
handle, group, filter_mode, animated_id);
1617 if (!show_active_group_only) {
1618 int first_ungrouped_fcurve_index = 0;
1627 ac, anim_data, fcurves, slot.
handle, filter_mode, animated_id, &action.
id);
1658 ID *animated_id =
nullptr;
1664 animated_id = owner_id;
1679 FCurve *lastchan =
nullptr;
1698 if (agrp->channels.last) {
1699 lastchan =
static_cast<FCurve *
>(agrp->channels.last);
1709 FCurve *firstfcu = (lastchan) ? (lastchan->
next) :
1712 ac, anim_data, firstfcu,
ANIMTYPE_FCURVE, filter_mode,
nullptr, owner_id, &action.
id);
1725 if (is_action_mode && show_all_slots) {
1771 ale->data = adt->action ? adt->action : nullptr;
1786 for (nlt = first; nlt; nlt =
next) {
1803 bool track_ok =
false, strip_ok =
false;
1808 if (track_ok ==
false) {
1818 if (!track_ok && !strip_ok) {
1843 ListBase tmp_data = {
nullptr,
nullptr};
1844 size_t tmp_items = 0;
1859 static_cast<FCurve *
>(strip->fcurves.first),
1977 if (ads !=
nullptr && ads->
searchstr[0] !=
'\0' &&
2003 for (
FCurve *fcu = first_fcu;
2062 if ((filter_mode &
ANIMFILTER_ACTIVE) && grease_pencil->is_layer_active(&layer)) {
2067 if (layer.is_empty()) {
2073 static_cast<void *
>(&layer),
2092 const bool name_search = (ac->
ads->
searchstr[0] !=
'\0');
2093 const bool skip_node = name_search &&
2096 if (node.is_layer() && !skip_node) {
2098 ac, anim_data, grease_pencil, node.as_layer(), filter_mode);
2100 else if (node.is_group()) {
2101 const LayerGroup &layer_group = node.as_group();
2103 ListBase tmp_data = {
nullptr,
nullptr};
2104 size_t tmp_items = 0;
2110 ac, &tmp_data, grease_pencil, node_->wrap(), filter_mode);
2115 if ((tmp_items == 0) && !name_search) {
2125 static_cast<void *
>(&node),
2150 ac, anim_data, grease_pencil, node->wrap(), filter_mode);
2219 if (show_animdata) {
2226 ListBase tmp_data = {
nullptr,
nullptr};
2227 size_t tmp_items = 0;
2231 if (show_animdata) {
2237 ac, &tmp_data, grease_pencil, filter_mode);
2242 if (tmp_items == 0) {
2276 Object *ob = base->object;
2320 ListBase tmp_data = {
nullptr,
nullptr};
2321 size_t tmp_items = 0;
2366 ListBase tmp_data = {
nullptr,
nullptr};
2367 size_t tmp_items = 0;
2437 ListBase tmp_data = {
nullptr,
nullptr};
2438 size_t tmp_items = 0;
2482 ListBase tmp_data = {
nullptr,
nullptr};
2483 size_t tmp_items = 0;
2551 if (lineset->linestyle) {
2566 ListBase tmp_data = {
nullptr,
nullptr};
2567 size_t tmp_items = 0;
2606 ListBase tmp_data = {
nullptr,
nullptr};
2607 size_t tmp_items = 0;
2657 MTex **mtex =
nullptr;
2662 if (owner_id ==
nullptr) {
2666 switch (
GS(owner_id->
name)) {
2669 mtex = (
MTex **)(&part->mtex);
2675 printf(
"ERROR: Unsupported owner_id (i.e. texture stack) for filter textures - %s\n",
2685 Tex *
tex = (mtex[a]) ? mtex[a]->
tex :
nullptr;
2688 if (
tex ==
nullptr) {
2705 ListBase tmp_data = {
nullptr,
nullptr};
2706 size_t tmp_items = 0;
2749 for (a = 1; a <= ob->
totcol; a++) {
2780 ID *owner_id = &ob->
id;
2786 if (
id ==
nullptr) {
2791 switch (
GS(id->name)) {
2866 ListBase tmp_data = {
nullptr,
nullptr};
2867 size_t tmp_items = 0;
2871 if (psys->part ==
nullptr) {
2913 ListBase tmp_data = {
nullptr,
nullptr};
2914 size_t tmp_items = 0;
3103 ListBase tmp_data = {
nullptr,
nullptr};
3104 size_t tmp_items = 0;
3139 ListBase tmp_data = {
nullptr,
nullptr};
3140 size_t tmp_items = 0;
3146 void *cdata =
nullptr;
3204 ListBase tmp_data = {
nullptr,
nullptr};
3206 size_t tmp_items = 0;
3289 ListBase tmp_data = {
nullptr,
nullptr};
3290 size_t tmp_items = 0;
3330 ListBase tmp_data = {
nullptr,
nullptr};
3331 size_t tmp_items = 0;
3337 void *cdata =
nullptr;
3394 ListBase tmp_data = {
nullptr,
nullptr};
3395 size_t tmp_items = 0;
3460 ListBase tmp_data = {
nullptr,
nullptr};
3461 size_t tmp_items = 0;
3511 if (base->
object ==
nullptr) {
3558 if (ob->
adt ==
nullptr && ob->
data !=
nullptr) {
3600 const Base *b1 = *((
const Base **)base1_ptr);
3601 const Base *b2 = *((
const Base **)base2_ptr);
3611 size_t *r_usable_bases)
3617 size_t num_bases = 0;
3619 Base **sorted_bases = MEM_cnew_array<Base *>(tot_bases,
"Dopesheet Usable Sorted Bases");
3622 sorted_bases[num_bases++] = base;
3630 *r_usable_bases = num_bases;
3631 return sorted_bases;
3648 printf(
"Dope Sheet Error: No scene!\n");
3650 printf(
"\tPointer = %p, Name = '%s'\n",
3696 (object_bases->
first != object_bases->
last))
3700 Base **sorted_bases;
3706 for (
size_t i = 0; i < num_bases; i++) {
3751 ads = &saction->
ads;
3793 switch (channel->type) {
3800 ac, anim_data,
static_cast<Scene *
>(channel->data), filter_mode);
3805 ac, anim_data,
static_cast<Base *
>(channel->data), filter_mode);
3810 ac, anim_data,
static_cast<CacheFile *
>(channel->data), filter_mode);
3818 printf(
"ERROR: Unsupported channel type (%d) in animdata_filter_animchan()\n",
3888 if (!data || !anim_data) {
3917 "This code assumes the Action editor shows the Action of the active object");
4015 ac, anim_data,
static_cast<bAnimListElem *
>(data), filter_mode);
4020 printf(
"ANIM_animdata_filter() - Invalid datatype argument ANIMCONT_NONE\n");
Functions and classes to work with Actions.
C++ functions to deal with Armature collections (i.e. the successor of bone layers).
bool ANIM_bonecoll_is_visible_pchan(const bArmature *armature, const bPoseChannel *pchan)
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)
struct MaskLayer * BKE_mask_layer_active(struct Mask *mask)
General operations, lookup, etc. for materials.
struct Material * BKE_object_material_get(struct 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)
BLI_INLINE bool BLI_listbase_is_empty(const struct ListBase *lb)
#define LISTBASE_FOREACH(type, var, list)
void BLI_freelinkN(struct ListBase *listbase, void *vlink) ATTR_NONNULL(1)
#define LISTBASE_FOREACH_MUTABLE(type, var, list)
#define LISTBASE_FOREACH_BACKWARD(type, var, list)
void void void BLI_movelisttolist(struct ListBase *dst, struct ListBase *src) ATTR_NONNULL(1
void BLI_addtail(struct ListBase *listbase, void *vlink) ATTR_NONNULL(1)
int BLI_findindex(const struct ListBase *listbase, const void *vlink) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(1)
int BLI_listbase_count(const struct 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 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_DRIVER_FALLBACK_AS_ERROR
@ ADS_FILTER_NOMOVIECLIPS
@ ADS_FILTER_NOCACHEFILES
@ ADS_FILTER_NOPOINTCLOUD
@ ADS_FLAG_SUMMARY_COLLAPSED
@ ADT_CURVES_ALWAYS_VISIBLE
@ ADT_NLA_SKEYS_COLLAPSED
@ DTAR_FLAG_FALLBACK_USED
@ GP_LAYER_TREE_NODE_EXPANDED
@ 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)
@ 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(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)
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)
static size_t animfilter_action_slot(bAnimContext *ac, ListBase *anim_data, animrig::Action &action, animrig::Slot &slot, const eAnimFilter_Flags filter_mode, ID *animated_id)
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 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 void animfilter_modifier_idpoin_cb(void *afm_ptr, Object *ob, ID **idpoin, int)
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)
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
ListBase * ED_context_get_markers(const bContext *C)
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 bActionGroup * > channel_groups() const
blender::Span< const FCurve * > fcurves() const
static constexpr slot_handle_t unassigned
FreestyleLineStyle linestyle
draw_view push_constant(Type::INT, "radiance_src") .push_constant(Type capture_info_buf storage_buf(1, Qualifier::READ, "ObjectBounds", "bounds_buf[]") .push_constant(Type draw_view int
void MEM_freeN(void *vmemh)
void *(* MEM_callocN)(size_t len, const char *str)
FCurve * fcurve_find_in_assigned_slot(AnimData &adt, FCurveDescriptor fcurve_descriptor)
ID * action_slot_get_id_best_guess(Main &bmain, Slot &slot, ID *primary_id)
decltype(::ActionSlot::handle) slot_handle_t
const animrig::ChannelBag * channelbag_for_action_slot(const Action &action, slot_handle_t slot_handle)
bNode * node_find_node_by_name(bNodeTree *ntree, const char *name)
float wrap(float value, float max, float min)
Sequence * SEQ_get_sequence_by_name(ListBase *seqbase, const char *name, bool recursive)
Editing * SEQ_editing_get(const Scene *scene)
Sequence * SEQ_select_active_get(const Scene *scene)
GreasePencilLayerTreeNode base
GreasePencilLayerTreeGroup * root_group_ptr
struct bNodeTree * nodetree
struct bNodeTree * nodetree
struct bNodeTree * nodetree
struct ActionChannelBag * channel_bag
void(* name)(bAnimListElem *ale, char *name)
eAnimEdit_Context dopesheet_mode
eGraphEdit_Mode grapheditor_mode
struct Collection * filter_grp
eAnimFilter_Flags filter_mode