Blender V5.0
ED_anim_api.hh
Go to the documentation of this file.
1/* SPDX-FileCopyrightText: 2008 Blender Authors
2 *
3 * SPDX-License-Identifier: GPL-2.0-or-later */
4
8
9#pragma once
10
11#include "BKE_nla.hh"
12
13#include "BLI_sys_types.h"
14#include "BLI_utildefines.h"
15
16#include "DNA_screen_types.h"
17#include "DNA_space_types.h"
18
19#include <optional>
20
21struct AnimData;
22struct Depsgraph;
23struct ID;
24struct ListBase;
25
26struct ARegion;
27struct ARegionType;
28struct FModifier;
29struct Main;
30struct NlaStrip;
31struct NlaTrack;
32struct PanelType;
33struct ReportList;
34struct ScrArea;
35struct SpaceLink;
36struct View2D;
37struct ViewLayer;
38struct rctf;
39struct bContext;
40struct wmKeyConfig;
41
42struct Object;
43struct Scene;
44
45struct bDopeSheet;
46
47struct FCurve;
48struct FModifier;
49struct bAction;
50
51struct uiBlock;
52
53struct PointerRNA;
54struct PropertyRNA;
55
56struct MPathTarget;
57
58namespace blender::animrig {
59class Action;
60class Slot;
61} // namespace blender::animrig
62
63/* ************************************************ */
64/* ANIMATION CHANNEL FILTERING */
65/* `anim_filter.cc` */
66
67/* -------------------------------------------------------------------- */
70
96
161
163
164/* -------------------------------------------------------------------- */
167
237
240 ALE_NONE = 0, /* no keyframe data */
241 ALE_FCURVE, /* F-Curve */
242 ALE_GPFRAME, /* Grease Pencil Frames (Legacy) */
243 ALE_MASKLAY, /* Mask */
244 ALE_NLASTRIP, /* NLA Strips */
245
246 ALE_ALL, /* All channels summary */
247 ALE_SCE, /* Scene summary */
248 ALE_OB, /* Object summary */
249 ALE_ACT, /* Action summary (legacy). */
250 ALE_GROUP, /* Action Group summary (legacy). */
251 ALE_ACTION_LAYERED, /* Action summary (layered). */
252 ALE_ACTION_SLOT, /* Action slot summary. */
253
254 ALE_GREASE_PENCIL_CEL, /* Grease Pencil Cels. */
255 ALE_GREASE_PENCIL_DATA, /* Grease Pencil Cels summary. */
256 ALE_GREASE_PENCIL_GROUP, /* Grease Pencil Layer Groups. */
257};
258
273
274/* used for most tools which change keyframes (flushed by ANIM_animdata_update) */
275#define ANIM_UPDATE_DEFAULT (ANIM_UPDATE_DEPS | ANIM_UPDATE_ORDER | ANIM_UPDATE_HANDLES)
276#define ANIM_UPDATE_DEFAULT_NOHANDLES (ANIM_UPDATE_DEFAULT & ~ANIM_UPDATE_HANDLES)
277
358
360
361/* -------------------------------------------------------------------- */
364
365/* filtering flags - under what circumstances should a channel be returned */
425
427
428/* -------------------------------------------------------------------- */
431
432/* XXX check on all of these flags again. */
433
434/* Dope-sheet only. */
435/* 'Scene' channels */
436#define SEL_SCEC(sce) (CHECK_TYPE_INLINE(sce, Scene *), ((sce->flag & SCE_DS_SELECTED)))
437#define EXPANDED_SCEC(sce) (CHECK_TYPE_INLINE(sce, Scene *), ((sce->flag & SCE_DS_COLLAPSED) == 0))
438/* 'Sub-Scene' channels (flags stored in Data block) */
439#define FILTER_WOR_SCED(wo) (CHECK_TYPE_INLINE(wo, World *), (wo->flag & WO_DS_EXPAND))
440#define FILTER_LS_SCED(linestyle) ((linestyle->flag & LS_DS_EXPAND))
441/* 'Object' channels */
442#define SEL_OBJC(base) (CHECK_TYPE_INLINE(base, Base *), ((base->flag & SELECT)))
443#define EXPANDED_OBJC(ob) \
444 (CHECK_TYPE_INLINE(ob, Object *), (((ob)->nlaflag & OB_ADS_COLLAPSED) == 0))
445/* 'Sub-object' channels (flags stored in Data block) */
446#define FILTER_SKE_OBJD(key) (CHECK_TYPE_INLINE(key, Key *), ((key->flag & KEY_DS_EXPAND)))
447#define FILTER_MAT_OBJD(ma) (CHECK_TYPE_INLINE(ma, Material *), ((ma->flag & MA_DS_EXPAND)))
448#define FILTER_LAM_OBJD(la) (CHECK_TYPE_INLINE(la, Light *), ((la->flag & LA_DS_EXPAND)))
449#define FILTER_CAM_OBJD(ca) (CHECK_TYPE_INLINE(ca, Camera *), ((ca->flag & CAM_DS_EXPAND)))
450#define FILTER_CACHEFILE_OBJD(cf) \
451 (CHECK_TYPE_INLINE(cf, CacheFile *), (((cf)->flag & CACHEFILE_DS_EXPAND)))
452#define FILTER_CUR_OBJD(cu) (CHECK_TYPE_INLINE(cu, Curve *), ((cu->flag & CU_DS_EXPAND)))
453#define FILTER_PART_OBJD(part) \
454 (CHECK_TYPE_INLINE(part, ParticleSettings *), (((part)->flag & PART_DS_EXPAND)))
455#define FILTER_MBALL_OBJD(mb) (CHECK_TYPE_INLINE(mb, MetaBall *), ((mb->flag2 & MB_DS_EXPAND)))
456#define FILTER_ARM_OBJD(arm) (CHECK_TYPE_INLINE(arm, bArmature *), ((arm->flag & ARM_DS_EXPAND)))
457#define FILTER_MESH_OBJD(me) (CHECK_TYPE_INLINE(me, Mesh *), ((me->flag & ME_DS_EXPAND)))
458#define FILTER_LATTICE_OBJD(lt) (CHECK_TYPE_INLINE(lt, Lattice *), ((lt->flag & LT_DS_EXPAND)))
459#define FILTER_SPK_OBJD(spk) (CHECK_TYPE_INLINE(spk, Speaker *), ((spk->flag & SPK_DS_EXPAND)))
460#define FILTER_CURVES_OBJD(ha) (CHECK_TYPE_INLINE(ha, Curves *), ((ha->flag & HA_DS_EXPAND)))
461#define FILTER_POINTS_OBJD(pt) (CHECK_TYPE_INLINE(pt, PointCloud *), ((pt->flag & PT_DS_EXPAND)))
462#define FILTER_VOLUME_OBJD(vo) (CHECK_TYPE_INLINE(vo, Volume *), ((vo->flag & VO_DS_EXPAND)))
463#define FILTER_LIGHTPROBE_OBJD(probe) \
464 (CHECK_TYPE_INLINE(probe, LightProbe *), ((probe->flag & LIGHTPROBE_DS_EXPAND)))
465/* Variable use expanders */
466#define FILTER_NTREE_DATA(ntree) \
467 (CHECK_TYPE_INLINE(ntree, bNodeTree *), (((ntree)->flag & NTREE_DS_EXPAND)))
468#define FILTER_TEX_DATA(tex) (CHECK_TYPE_INLINE(tex, Tex *), ((tex->flag & TEX_DS_EXPAND)))
469
470/* 'Sub-object/Action' channels (flags stored in Action) */
471#define SEL_ACTC(actc) ((actc->flag & ACT_SELECTED))
472#define EXPANDED_ACTC(actc) ((actc->flag & ACT_COLLAPSED) == 0)
473/* 'Sub-AnimData' channels */
474#define EXPANDED_DRVD(adt) ((adt->flag & ADT_DRIVERS_COLLAPSED) == 0)
475#define EXPANDED_ADT(adt) ((adt->flag & ADT_UI_EXPANDED) != 0)
476
477/* Actions (also used for Dope-sheet). */
479#define EDITABLE_AGRP(agrp) (((agrp)->flag & AGRP_PROTECTED) == 0)
480#define EXPANDED_AGRP(ac, agrp) \
481 (((!(ac) || ((ac)->spacetype != SPACE_GRAPH)) && ((agrp)->flag & AGRP_EXPANDED)) || \
482 (((ac) && ((ac)->spacetype == SPACE_GRAPH)) && ((agrp)->flag & AGRP_EXPANDED_G)))
483#define SEL_AGRP(agrp) (((agrp)->flag & AGRP_SELECTED) || ((agrp)->flag & AGRP_ACTIVE))
485#define EDITABLE_FCU(fcu) (((fcu)->flag & FCURVE_PROTECTED) == 0)
486#define SEL_FCU(fcu) ((fcu)->flag & FCURVE_SELECTED)
487
488/* ShapeKey mode only */
489#define EDITABLE_SHAPEKEY(kb) ((kb->flag & KEYBLOCK_LOCKED) == 0)
490#define SEL_SHAPEKEY(kb) (kb->flag & KEYBLOCK_SEL)
491
492/* Grease Pencil only */
494#define EXPANDED_GPD(gpd) (gpd->flag & GP_DATA_EXPAND)
496#define EDITABLE_GPL(gpl) ((gpl->flag & GP_LAYER_LOCKED) == 0)
497#define SEL_GPL(gpl) (gpl->flag & GP_LAYER_SELECT)
498
499/* Mask Only */
501#define EXPANDED_MASK(mask) (mask->flag & MASK_ANIMF_EXPAND)
503#define EDITABLE_MASK(masklay) ((masklay->flag & MASK_LAYERFLAG_LOCKED) == 0)
504#define SEL_MASKLAY(masklay) (masklay->flag & SELECT)
505
506/* NLA only */
507#define SEL_NLT(nlt) (nlt->flag & NLATRACK_SELECTED)
508#define EDITABLE_NLT(nlt) ((nlt->flag & NLATRACK_PROTECTED) == 0)
509
510/* Movie clip only */
511#define EXPANDED_MCLIP(clip) (clip->flag & MCLIP_DATA_EXPAND)
512
513/* Palette only */
514#define EXPANDED_PALETTE(palette) (palette->flag & PALETTE_DATA_EXPAND)
515
516/* AnimData - NLA mostly... */
517#define SEL_ANIMDATA(adt) (adt->flag & ADT_UI_SELECTED)
518
520
521/* -------------------------------------------------------------------- */
524
526#define NLATRACK_FIRST_TOP(ac) \
527 (UI_view2d_scale_get_y(&(ac)->region->v2d) * -UI_TIME_SCRUB_MARGIN_Y - NLATRACK_SKIP)
528#define NLATRACK_HEIGHT(snla) \
529 (((snla) && ((snla)->flag & SNLA_NOSTRIPCURVES)) ? (0.8f * U.widget_unit) : \
530 (1.2f * U.widget_unit))
531#define NLATRACK_SKIP (0.1f * U.widget_unit)
532#define NLATRACK_STEP(snla) (NLATRACK_HEIGHT(snla) + NLATRACK_SKIP)
534#define NLATRACK_TOT_HEIGHT(ac, item_amount) \
535 (-NLATRACK_FIRST_TOP(ac) + NLATRACK_STEP(((SpaceNla *)(ac)->sl)) * (item_amount + 1))
536
538#define NLATRACK_NAMEWIDTH (10 * U.widget_unit)
539
541
542/* -------------------------------------------------------------------- */
545
567 ListBase * /* bAnimListElem */ anim_data,
570 eAnimFilter_Flags filter_mode,
571 ID *animated_id);
572
582 ListBase *anim_data,
583 eAnimFilter_Flags filter_mode,
584 void *data,
585 eAnimCont_Types datatype);
586
595
607
611void ANIM_animdata_update(bAnimContext *ac, ListBase *anim_data);
612
613void ANIM_animdata_freelist(ListBase *anim_data);
614
619
621 ViewLayer *view_layer,
622 const ScrArea *area,
623 ID **r_action_user = nullptr);
624
625/* ************************************************ */
626/* ANIMATION CHANNELS LIST */
627/* anim_channels_*.c */
628
630
631/* -------------------------------------------------------------------- */
634
640 /* ACHANNEL_ROLE_SPECIAL = 0, */ /* UNUSED */
643};
644
645/* flag-setting behavior */
658
659/* types of settings for AnimChannels */
676
679 /* -- Type data -- */
680 /* name of the channel type, for debugging */
681 const char *channel_type_name;
682 /* "level" or role in hierarchy - for finding the active channel */
684
685 /* -- Drawing -- */
687 void (*get_backdrop_color)(bAnimContext *ac, bAnimListElem *ale, float r_color[3]);
688
692 bool (*get_channel_color)(const bAnimListElem *ale, uint8_t r_color[3]);
693
695 void (*draw_backdrop)(bAnimContext *ac, bAnimListElem *ale, float yminc, float ymaxc);
700
702 void (*name)(bAnimListElem *ale, char *name);
704 bool (*name_prop)(bAnimListElem *ale, PointerRNA *r_ptr, PropertyRNA **r_prop);
706 int (*icon)(bAnimListElem *ale);
707
708 /* -- Settings -- */
712 int (*setting_flag)(bAnimContext *ac, eAnimChannel_Settings setting, bool *r_neg);
718 void *(*setting_ptr)(bAnimListElem *ale, eAnimChannel_Settings setting, short *r_type);
719
728 void (*setting_post_update)(Main &bmain,
729 const bAnimListElem &ale,
730 eAnimChannel_Settings setting);
731};
732
734/* -------------------------------------------------------------------- */
737
743float ANIM_UI_get_channels_total_height(View2D *v2d, int item_count);
746
748
749/* -------------------------------------------------------------------- */
752
757
761void ANIM_channel_debug_print_info(bAnimContext &ac, bAnimListElem *ale, short indent_level);
762
767
772 bAnimContext *ac, bAnimListElem *ale, float yminc, float ymaxc, size_t channel_index);
777 bAnimContext *ac,
778 bAnimListElem *ale,
779 uiBlock *block,
780 const rctf *rect,
781 size_t channel_index);
782
784
785/* -------------------------------------------------------------------- */
788
794 bAnimListElem *ale,
795 eAnimChannel_Settings setting);
796
801 bAnimListElem *ale,
802 eAnimChannel_Settings setting,
804
816 ListBase *anim_data,
817 bAnimListElem *ale_setting,
818 eAnimChannel_Settings setting,
820
822
827
832
837 void *data,
838 eAnimCont_Types datatype,
840 void *channel_data,
841 eAnim_ChannelType channel_type);
842
847
853
854/* ************************************************ */
855/* DRAWING API */
856/* `anim_draw.cc` */
857
859
860/* -------------------------------------------------------------------- */
865
866/* flags for Current Frame Drawing */
869 /* DRAWCFRA_PLAIN = 0, */ /* UNUSED */
873 DRAWCFRA_WIDE = (1 << 1),
874};
875
879void ANIM_draw_cfra(const bContext *C, View2D *v2d, short flag);
880
882
883/* -------------------------------------------------------------------- */
888
892void ANIM_draw_previewrange(const Scene *scene, View2D *v2d, int end_frame_width);
893
898
900
901/* -------------------------------------------------------------------- */
906
910void ANIM_draw_framerange(Scene *scene, View2D *v2d);
911
917 AnimData *adt, bAction *action, View2D *v2d, float ymin, float ymax);
918
919/* ************************************************* */
920/* F-MODIFIER TOOLS */
921
923
924/* -------------------------------------------------------------------- */
927
930
934
936using PanelTypePollFn = bool (*)(const bContext *C, PanelType *pt);
938using uiListPanelIDFromDataFunc = void (*)(void *data_link, char *r_idname);
939
944 ID *owner_id,
945 ListBase *fmodifiers,
946 uiListPanelIDFromDataFunc panel_id_fn);
947
949 const char *modifier_panel_prefix,
950 PanelTypePollFn poll_function);
952 const char *modifier_panel_prefix,
953 PanelTypePollFn poll_function);
954
956
957/* -------------------------------------------------------------------- */
960
965
971bool ANIM_fmodifiers_copy_to_buf(ListBase *modifiers, bool active);
972
977bool ANIM_fmodifiers_paste_from_buf(ListBase *modifiers, bool replace, FCurve *curve);
978
979/* ************************************************* */
980/* ASSORTED TOOLS */
981
983
984/* -------------------------------------------------------------------- */
987
988/* `anim_ipo_utils.cc` */
989
1003std::optional<int> getname_anim_fcurve(char *name, ID *id, FCurve *fcu);
1004
1010std::string getname_anim_fcurve_for_slot(Main &bmain,
1011 const blender::animrig::Slot &slot,
1012 FCurve &fcurve);
1013
1017void getcolor_fcurve_rainbow(int cur, int tot, float out[3]);
1018
1020
1021/* -------------------------------------------------------------------- */
1027
1032void nla_action_get_color(AnimData *adt, bAction *act, float color[4]);
1033
1035
1036/* -------------------------------------------------------------------- */
1039
1040/* `anim_draw.cc` */
1041
1049
1056float ANIM_nla_tweakedit_remap(bAnimListElem *ale, float cframe, eNlaTime_ConvertModes mode);
1057
1068void ANIM_nla_mapping_apply_fcurve(AnimData *adt, FCurve *fcu, bool restore, bool only_keys);
1069
1074 FCurve *fcu,
1075 bool restore,
1076 bool only_keys);
1077
1078/* ..... */
1079
1085
1087
1088/* -------------------------------------------------------------------- */
1091
1092/* `anim_draw.cc` */
1093
1105 /* ANIM_UNITCONV_SKIPKNOTS = (1 << 4), */ /* UNUSED */
1113};
1114
1118short ANIM_get_normalization_flags(SpaceLink *space_link);
1122float ANIM_unit_mapping_get_factor(Scene *scene, ID *id, FCurve *fcu, short flag, float *r_offset);
1123
1125
1126/* -------------------------------------------------------------------- */
1129
1136#define ACHANNEL_SET_FLAG(channel, smode, sflag) \
1137 { \
1138 if (smode == ACHANNEL_SETFLAG_INVERT) { \
1139 (channel)->flag ^= (sflag); \
1140 } \
1141 else if (smode == ACHANNEL_SETFLAG_ADD) { \
1142 (channel)->flag |= (sflag); \
1143 } \
1144 else { \
1145 (channel)->flag &= ~(sflag); \
1146 } \
1147 } \
1148 ((void)0)
1149
1156#define ACHANNEL_SET_FLAG_NEG(channel, smode, sflag) \
1157 { \
1158 if (smode == ACHANNEL_SETFLAG_INVERT) { \
1159 (channel)->flag ^= (sflag); \
1160 } \
1161 else if (smode == ACHANNEL_SETFLAG_ADD) { \
1162 (channel)->flag &= ~(sflag); \
1163 } \
1164 else { \
1165 (channel)->flag |= (sflag); \
1166 } \
1167 } \
1168 ((void)0)
1169
1171
1172/* `anim_deps.cc` */
1173
1174/* -------------------------------------------------------------------- */
1177
1181void ANIM_id_update(Main *bmain, ID *id);
1185void ANIM_list_elem_update(Main *bmain, Scene *scene, bAnimListElem *ale);
1186
1187/* data -> channels syncing */
1188
1193
1194void ANIM_center_frame(bContext *C, int smooth_viewtx);
1195
1203rctf ANIM_frame_range_view2d_add_xmargin(const View2D &view_2d, rctf view_rect);
1204
1206
1207/* -------------------------------------------------------------------- */
1210
1211/* generic animation channels */
1213void ED_keymap_animchannels(wmKeyConfig *keyconf);
1214
1215/* generic time editing */
1217void ED_keymap_anim(wmKeyConfig *keyconf);
1218
1219/* space_graph */
1221/* space_action */
1223/* space_nla */
1225
1227
1228/* -------------------------------------------------------------------- */
1231
1232/* XXX: Should we be doing these here, or at all? */
1233
1238AnimData *ED_actedit_animdata_from_context(const bContext *C, ID **r_adt_id_owner);
1240 bContext *C, ID *id, AnimData *adt, bAction *act, ReportList *reports, bool force_delete);
1241
1248
1256
1257/* ************************************************ */
1258
1269
1270Depsgraph *animviz_depsgraph_build(Main *bmain,
1271 Scene *scene,
1272 ViewLayer *view_layer,
1274
1275void animviz_calc_motionpaths(Depsgraph *depsgraph,
1276 Main *bmain,
1277 Scene *scene,
1279 eAnimvizCalcRange range,
1280 bool restore);
1281
1290
1297
1303
eNlaTime_ConvertModes
Definition BKE_nla.hh:544
#define ENUM_OPERATORS(_type, _max)
eDopeSheet_FilterFlag2
eDopeSheet_FilterFlag
eAnimEdit_Context
eRegion_Type
eSpace_Type
eGraphEdit_Mode
Depsgraph * animviz_depsgraph_build(Main *bmain, Scene *scene, ViewLayer *view_layer, blender::Span< MPathTarget * > targets)
eAnimChannels_SetFlag
@ ACHANNEL_SETFLAG_TOGGLE
@ ACHANNEL_SETFLAG_EXTEND_RANGE
@ ACHANNEL_SETFLAG_ADD
@ ACHANNEL_SETFLAG_INVERT
@ ACHANNEL_SETFLAG_CLEAR
std::string getname_anim_fcurve_for_slot(Main &bmain, const blender::animrig::Slot &slot, FCurve &fcurve)
NlaTrack * ANIM_nla_context_track(const bContext *C)
bool ANIM_fmodifiers_paste_from_buf(ListBase *modifiers, bool replace, FCurve *curve)
bool ANIM_animdata_can_have_greasepencil(const eAnimCont_Types type)
void ANIM_flush_setting_anim_channels(bAnimContext *ac, ListBase *anim_data, bAnimListElem *ale_setting, eAnimChannel_Settings setting, eAnimChannels_SetFlag mode)
void ANIM_anim_channels_select_set(bAnimContext *ac, eAnimChannels_SetFlag sel)
void ED_operatortypes_anim()
Definition anim_ops.cc:1397
short ANIM_get_normalization_flags(SpaceLink *space_link)
Definition anim_draw.cc:415
void ED_keymap_animchannels(wmKeyConfig *keyconf)
eAnim_ChannelType
@ ANIMTYPE_DSSPK
@ ANIMTYPE_DSTEX
@ ANIMTYPE_SUMMARY
@ ANIMTYPE_DSNTREE
@ ANIMTYPE_NLACURVE
@ ANIMTYPE_SHAPEKEY
@ ANIMTYPE_DSMBALL
@ ANIMTYPE_DSCAM
@ ANIMTYPE_DSLIGHTPROBE
@ ANIMTYPE_DSPOINTCLOUD
@ ANIMTYPE_FILLDRIVERS
@ ANIMTYPE_NONE
@ ANIMTYPE_DSPART
@ ANIMTYPE_DSLINESTYLE
@ ANIMTYPE_GROUP
@ ANIMTYPE_ACTION_SLOT
@ ANIMTYPE_SPECIALDATA__UNUSED
@ ANIMTYPE_GREASE_PENCIL_DATABLOCK
@ ANIMTYPE_DSCUR
@ ANIMTYPE_SCENE
@ ANIMTYPE_DSARM
@ ANIMTYPE_NLACONTROLS
@ ANIMTYPE_GPLAYER
@ ANIMTYPE_MASKDATABLOCK
@ ANIMTYPE_ANIMDATA
@ ANIMTYPE_MASKLAYER
@ ANIMTYPE_DSGPENCIL
@ ANIMTYPE_DSLAT
@ ANIMTYPE_NLAACTION
@ ANIMTYPE_DSMCLIP
@ ANIMTYPE_DSMAT
@ ANIMTYPE_NUM_TYPES
@ ANIMTYPE_DSCACHEFILE
@ ANIMTYPE_DSVOLUME
@ ANIMTYPE_FCURVE
@ ANIMTYPE_DSLAM
@ ANIMTYPE_PALETTE
@ ANIMTYPE_GREASE_PENCIL_LAYER
@ ANIMTYPE_FILLACT_LAYERED
@ ANIMTYPE_FILLACTD
@ ANIMTYPE_OBJECT
@ ANIMTYPE_DSMESH
@ ANIMTYPE_GREASE_PENCIL_LAYER_GROUP
@ ANIMTYPE_NLATRACK
@ ANIMTYPE_DSWOR
@ ANIMTYPE_DSSKEY
@ ANIMTYPE_DSHAIR
AnimData * ED_actedit_animdata_from_context(const bContext *C, ID **r_adt_id_owner)
void ANIM_channel_setting_set(bAnimContext *ac, bAnimListElem *ale, eAnimChannel_Settings setting, eAnimChannels_SetFlag mode)
float ANIM_UI_get_channel_skip()
void ANIM_channel_draw_widgets(const bContext *C, bAnimContext *ac, bAnimListElem *ale, uiBlock *block, const rctf *rect, size_t channel_index)
float ANIM_UI_get_keyframe_scale_factor()
void ED_operatormacros_graph()
Definition graph_ops.cc:506
float ANIM_UI_get_channel_name_width()
void ANIM_channel_debug_print_info(bAnimContext &ac, bAnimListElem *ale, short indent_level)
void ED_nla_postop_refresh(bAnimContext *ac)
Definition nla_edit.cc:63
void ED_anim_ale_fcurve_delete(bAnimContext &ac, bAnimListElem &ale)
void ANIM_animdata_freelist(ListBase *anim_data)
Definition anim_deps.cc:463
void ANIM_channel_draw(bAnimContext *ac, bAnimListElem *ale, float yminc, float ymaxc, size_t channel_index)
void ANIM_draw_action_framerange(AnimData *adt, bAction *action, View2D *v2d, float ymin, float ymax)
Definition anim_draw.cc:207
void ANIM_frame_channel_y_extents(bContext *C, bAnimContext *ac)
rctf ANIM_frame_range_view2d_add_xmargin(const View2D &view_2d, rctf view_rect)
Definition anim_draw.cc:811
void ED_operatormacros_action()
Definition action_ops.cc:72
float ANIM_nla_tweakedit_remap(bAnimListElem *ale, float cframe, eNlaTime_ConvertModes mode)
Definition anim_draw.cc:324
eAnimChannel_Role
@ ACHANNEL_ROLE_CHANNEL
@ ACHANNEL_ROLE_EXPANDER
bool ANIM_animdata_get_context(const bContext *C, bAnimContext *ac)
float ANIM_UI_get_channel_step()
void(*)(void *data_link, char *r_idname) uiListPanelIDFromDataFunc
void animviz_free_motionpath_targets(blender::Vector< MPathTarget * > &targets)
bool ANIM_is_active_channel(bAnimListElem *ale)
float ANIM_UI_get_channels_total_height(View2D *v2d, int item_count)
eAnim_KeyType
@ ALE_GREASE_PENCIL_GROUP
@ ALE_SCE
@ ALE_GREASE_PENCIL_CEL
@ ALE_GREASE_PENCIL_DATA
@ ALE_NONE
@ ALE_GPFRAME
@ ALE_FCURVE
@ ALE_NLASTRIP
@ ALE_ALL
@ ALE_ACT
@ ALE_ACTION_LAYERED
@ ALE_OB
@ ALE_GROUP
@ ALE_ACTION_SLOT
@ ALE_MASKLAY
void animviz_motionpath_compute_range(Object *ob, Scene *scene)
std::optional< int > getname_anim_fcurve(char *name, ID *id, FCurve *fcu)
float ANIM_UI_get_first_channel_top(View2D *v2d)
eAnim_Update_Flags
@ ANIM_UPDATE_DEPS
@ ANIM_UPDATE_HANDLES
@ ANIM_UPDATE_ORDER
eAnimCont_Types
@ ANIMCONT_DRIVERS
@ ANIMCONT_FCURVES
@ ANIMCONT_NLA
@ ANIMCONT_MASK
@ ANIMCONT_SHAPEKEY
@ ANIMCONT_TIMELINE
@ ANIMCONT_DOPESHEET
@ ANIMCONT_ACTION
@ ANIMCONT_NONE
@ ANIMCONT_GPENCIL
@ ANIMCONT_CHANNEL
void ANIM_draw_cfra(const bContext *C, View2D *v2d, short flag)
Definition anim_draw.cc:54
void ED_animedit_unlink_action(bContext *C, ID *id, AnimData *adt, bAction *act, ReportList *reports, bool force_delete)
bAction * ANIM_active_action_from_area(Scene *scene, ViewLayer *view_layer, const ScrArea *area, ID **r_action_user=nullptr)
void ANIM_set_active_channel(bAnimContext *ac, void *data, eAnimCont_Types datatype, eAnimFilter_Flags filter, void *channel_data, eAnim_ChannelType channel_type)
bool ANIM_animdata_context_getdata(bAnimContext *ac)
void ANIM_deselect_keys_in_animation_editors(bContext *C)
Definition anim_deps.cc:478
void ANIM_modifier_panels_register_graph_only(ARegionType *region_type, const char *modifier_panel_prefix, PanelTypePollFn poll_function)
float ANIM_UI_get_channel_height()
void getcolor_fcurve_rainbow(int cur, int tot, float out[3])
size_t ANIM_animfilter_action_slot(bAnimContext *ac, ListBase *anim_data, blender::animrig::Action &action, blender::animrig::Slot &slot, eAnimFilter_Flags filter_mode, ID *animated_id)
void ANIM_center_frame(bContext *C, int smooth_viewtx)
Definition anim_draw.cc:768
void ANIM_nla_mapping_apply_fcurve(AnimData *adt, FCurve *fcu, bool restore, bool only_keys)
Definition anim_draw.cc:374
NlaStrip * ANIM_nla_context_strip(const bContext *C)
void ANIM_modifier_panels_register_graph_and_NLA(ARegionType *region_type, const char *modifier_panel_prefix, PanelTypePollFn poll_function)
void ANIM_sync_animchannels_to_data(const bContext *C)
Definition anim_deps.cc:261
void ANIM_draw_scene_strip_range(const bContext *C, View2D *v2d)
Definition anim_draw.cc:113
bool ANIM_nla_mapping_allowed(const bAnimListElem *ale)
Definition anim_draw.cc:274
FCurve * ANIM_graph_context_fcurve(const bContext *C)
eAnimChannel_Settings
@ ACHANNEL_SETTING_ALWAYS_VISIBLE
@ ACHANNEL_SETTING_PINNED
@ ACHANNEL_SETTING_MUTE
@ ACHANNEL_SETTING_PROTECT
@ ACHANNEL_SETTING_VISIBLE
@ ACHANNEL_SETTING_EXPAND
@ ACHANNEL_SETTING_SOLO
@ ACHANNEL_SETTING_MOD_OFF
@ ACHANNEL_SETTING_SELECT
bAction * ANIM_channel_action_get(const bAnimListElem *ale)
void ANIM_id_update(Main *bmain, ID *id)
Definition anim_deps.cc:103
void nla_action_get_color(AnimData *adt, bAction *act, float color[4])
Definition nla_draw.cc:53
size_t ANIM_animdata_filter(bAnimContext *ac, ListBase *anim_data, eAnimFilter_Flags filter_mode, void *data, eAnimCont_Types datatype)
void ANIM_anim_channels_select_toggle(bAnimContext *ac)
short ANIM_channel_setting_get(bAnimContext *ac, bAnimListElem *ale, eAnimChannel_Settings setting)
void ANIM_nla_mapping_apply_if_needed_fcurve(bAnimListElem *ale, FCurve *fcu, bool restore, bool only_keys)
Definition anim_draw.cc:401
void ANIM_fmodifiers_copybuf_free()
bool(*)(const bContext *C, PanelType *pt) PanelTypePollFn
void animviz_calc_motionpaths(Depsgraph *depsgraph, Main *bmain, Scene *scene, blender::MutableSpan< MPathTarget * > targets, eAnimvizCalcRange range, bool restore)
void ED_keymap_anim(wmKeyConfig *keyconf)
Definition anim_ops.cc:1452
void ANIM_list_elem_update(Main *bmain, Scene *scene, bAnimListElem *ale)
Definition anim_deps.cc:52
void animviz_build_motionpath_targets(Object *ob, blender::Vector< MPathTarget * > &r_targets)
eAnimEditDraw_CurrentFrame
@ DRAWCFRA_WIDE
@ DRAWCFRA_UNIT_SECONDS
float ANIM_UI_get_channel_button_width()
void ANIM_draw_previewrange(const Scene *scene, View2D *v2d, int end_frame_width)
Definition anim_draw.cc:82
eAnimvizCalcRange
@ ANIMVIZ_CALC_RANGE_FULL
@ ANIMVIZ_CALC_RANGE_CURRENT_FRAME
@ ANIMVIZ_CALC_RANGE_CHANGED
float ANIM_unit_mapping_get_factor(Scene *scene, ID *id, FCurve *fcu, short flag, float *r_offset)
Definition anim_draw.cc:624
bool ANIM_nla_context_strip_ptr(const bContext *C, PointerRNA *r_ptr)
void ED_operatortypes_animchannels()
bool ANIM_nla_context_track_ptr(const bContext *C, PointerRNA *r_ptr)
bool ANIM_fmodifiers_copy_to_buf(ListBase *modifiers, bool active)
eAnimFilter_Flags
@ ANIMFILTER_TMP_PEEK
@ ANIMFILTER_ACTIVE
@ ANIMFILTER_UNSEL
@ ANIMFILTER_FOREDIT
@ ANIMFILTER_ANIMDATA
@ ANIMFILTER_DATA_VISIBLE
@ ANIMFILTER_CURVE_VISIBLE
@ ANIMFILTER_SELEDIT
@ ANIMFILTER_LIST_VISIBLE
@ ANIMFILTER_LIST_CHANNELS
@ ANIMFILTER_NODUPLIS
@ ANIMFILTER_TMP_IGNORE_ONLYSEL
@ ANIMFILTER_FCURVESONLY
@ ANIMFILTER_SEL
@ ANIMFILTER_ACTGROUPED
void ANIM_fmodifier_panels(const bContext *C, ID *owner_id, ListBase *fmodifiers, uiListPanelIDFromDataFunc panel_id_fn)
void ED_operatormacros_nla()
Definition nla_ops.cc:142
void ED_drivers_editor_init(bContext *C, ScrArea *area)
void ANIM_animdata_update(bAnimContext *ac, ListBase *anim_data)
Definition anim_deps.cc:356
eAnimUnitConv_Flags
@ ANIM_UNITCONV_NORMALIZE
@ ANIM_UNITCONV_ONLYSEL
@ ANIM_UNITCONV_ONLYKEYS
@ ANIM_UNITCONV_SELVERTS
@ ANIM_UNITCONV_NONE
@ ANIM_UNITCONV_NORMALIZE_FREEZE
@ ANIM_UNITCONV_RESTORE
const bAnimChannelType * ANIM_channel_get_typeinfo(const bAnimListElem *ale)
void ANIM_draw_framerange(Scene *scene, View2D *v2d)
Definition anim_draw.cc:171
#define C
Definition RandGen.cpp:29
BMesh const char void * data
BPy_StructRNA * depsgraph
#define active
#define out
#define filter
const char * name
Definition DNA_ID.h:414
void(* name)(bAnimListElem *ale, char *name)
void(* get_backdrop_color)(bAnimContext *ac, bAnimListElem *ale, float r_color[3])
short(* get_offset)(bAnimContext *ac, bAnimListElem *ale)
bool(* name_prop)(bAnimListElem *ale, PointerRNA *r_ptr, PropertyRNA **r_prop)
void(* draw_backdrop)(bAnimContext *ac, bAnimListElem *ale, float yminc, float ymaxc)
int(* setting_flag)(bAnimContext *ac, eAnimChannel_Settings setting, bool *r_neg)
const char * channel_type_name
bool(* has_setting)(bAnimContext *ac, bAnimListElem *ale, eAnimChannel_Settings setting)
short(* get_indent_level)(bAnimContext *ac, bAnimListElem *ale)
eAnimChannel_Role channel_role
bool(* get_channel_color)(const bAnimListElem *ale, uint8_t r_color[3])
int(* icon)(bAnimListElem *ale)
void(* setting_post_update)(Main &bmain, const bAnimListElem &ale, eAnimChannel_Settings setting)
eDopeSheet_FilterFlag flag
eAnimEdit_Context dopesheet_mode
eGraphEdit_Mode grapheditor_mode
SpaceLink * sl
ListBase * markers
eAnimCont_Types datatype
bDopeSheet * ads
ID * active_action_user
ReportList * reports
bAction * active_action
eSpace_Type spacetype
ViewLayer * view_layer
ARegion * region
Depsgraph * depsgraph
Object * obact
eRegion_Type regiontype
struct bAnimContext::@242276144047124000362312251357014355232301013033 filters
ScrArea * area
eDopeSheet_FilterFlag2 flag2
int32_t slot_handle
AnimData * adt
bAnimListElem * next
eAnim_ChannelType type
eAnim_Update_Flags update
eAnim_KeyType datatype
bAnimListElem * prev
uint8_t flag
Definition wm_window.cc:145