Blender  V2.93
ED_anim_api.h
Go to the documentation of this file.
1 /*
2  * This program is free software; you can redistribute it and/or
3  * modify it under the terms of the GNU General Public License
4  * as published by the Free Software Foundation; either version 2
5  * of the License, or (at your option) any later version.
6  *
7  * This program is distributed in the hope that it will be useful,
8  * but WITHOUT ANY WARRANTY; without even the implied warranty of
9  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
10  * GNU General Public License for more details.
11  *
12  * You should have received a copy of the GNU General Public License
13  * along with this program; if not, write to the Free Software Foundation,
14  * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
15  *
16  * The Original Code is Copyright (C) 2008 Blender Foundation.
17  * All rights reserved.
18  */
19 
24 #pragma once
25 
26 #ifdef __cplusplus
27 extern "C" {
28 #endif
29 
30 struct AnimData;
31 struct Depsgraph;
32 struct ID;
33 struct ListBase;
34 
35 struct ARegion;
36 struct ARegionType;
37 struct Main;
38 struct NlaStrip;
39 struct FModifier;
40 struct PanelType;
41 struct ReportList;
42 struct ScrArea;
43 struct SpaceLink;
44 struct View2D;
45 struct bContext;
46 struct wmKeyConfig;
47 
48 struct Object;
49 struct Scene;
50 
51 struct bDopeSheet;
52 
53 struct FCurve;
54 struct FModifier;
55 struct bAction;
56 
57 struct uiBlock;
58 
59 struct PointerRNA;
60 struct PropertyRNA;
61 
62 /* ************************************************ */
63 /* ANIMATION CHANNEL FILTERING */
64 /* anim_filter.c */
65 
66 /* --------------- Context --------------------- */
67 
68 /* This struct defines a structure used for animation-specific
69  * 'context' information
70  */
71 typedef struct bAnimContext {
73  void *data;
75  short datatype;
76 
78  short mode;
80  short spacetype;
82  short regiontype;
83 
85  struct ScrArea *area;
87  struct SpaceLink *sl;
89  struct ARegion *region;
90 
92  struct bDopeSheet *ads;
93 
95  struct Main *bmain;
97  struct Scene *scene;
103  struct Object *obact;
106 
109 
111  float yscale_fac;
113 
114 /* Main Data container types */
115 typedef enum eAnimCont_Types {
116  ANIMCONT_NONE = 0, /* invalid or no data */
117  ANIMCONT_ACTION = 1, /* action (bAction) */
118  ANIMCONT_SHAPEKEY = 2, /* shapekey (Key) */
119  ANIMCONT_GPENCIL = 3, /* grease pencil (screen) */
120  ANIMCONT_DOPESHEET = 4, /* dopesheet (bDopesheet) */
121  ANIMCONT_FCURVES = 5, /* animation F-Curves (bDopesheet) */
122  ANIMCONT_DRIVERS = 6, /* drivers (bDopesheet) */
123  ANIMCONT_NLA = 7, /* nla (bDopesheet) */
124  ANIMCONT_CHANNEL = 8, /* animation channel (bAnimListElem) */
125  ANIMCONT_MASK = 9, /* mask dopesheet */
126  ANIMCONT_TIMELINE = 10, /* "timeline" editor (bDopeSheet) */
128 
129 /* --------------- Channels -------------------- */
130 
131 /* This struct defines a structure used for quick and uniform access for
132  * channels of animation data
133  */
134 typedef struct bAnimListElem {
136 
138  void *data;
140  int type;
142  int flag;
144  int index;
145 
147  char update;
149  char tag;
150 
152  short datatype;
154  void *key_data;
155 
168  struct ID *id;
170  struct AnimData *adt;
171 
184 
188  void *owner;
190 
197 typedef enum eAnim_ChannelType {
201 
203 
208 
211 
214 
237 
239 
242 
245 
248 
250 
251  /* always as last item, the total number of channel types... */
254 
255 /* types of keyframe data in bAnimListElem */
256 typedef enum eAnim_KeyType {
257  ALE_NONE = 0, /* no keyframe data */
258  ALE_FCURVE, /* F-Curve */
259  ALE_GPFRAME, /* Grease Pencil Frames */
260  ALE_MASKLAY, /* Mask */
261  ALE_NLASTRIP, /* NLA Strips */
262 
263  ALE_ALL, /* All channels summary */
264  ALE_SCE, /* Scene summary */
265  ALE_OB, /* Object summary */
266  ALE_ACT, /* Action summary */
267  ALE_GROUP, /* Action Group summary */
269 
270 /* Flags for specifying the types of updates (i.e. recalculation/refreshing) that
271  * needs to be performed to the data contained in a channel following editing.
272  * For use with ANIM_animdata_update()
273  */
274 typedef enum eAnim_Update_Flags {
275  ANIM_UPDATE_DEPS = (1 << 0), /* referenced data and dependencies get refreshed */
276  ANIM_UPDATE_ORDER = (1 << 1), /* keyframes need to be sorted */
277  ANIM_UPDATE_HANDLES = (1 << 2), /* recalculate handles */
279 
280 /* used for most tools which change keyframes (flushed by ANIM_animdata_update) */
281 #define ANIM_UPDATE_DEFAULT (ANIM_UPDATE_DEPS | ANIM_UPDATE_ORDER | ANIM_UPDATE_HANDLES)
282 #define ANIM_UPDATE_DEFAULT_NOHANDLES (ANIM_UPDATE_DEFAULT & ~ANIM_UPDATE_HANDLES)
283 
284 /* ----------------- Filtering -------------------- */
285 
286 /* filtering flags - under what circumstances should a channel be returned */
287 typedef enum eAnimFilter_Flags {
301 
304 
306  ANIMFILTER_ACTIVE = (1 << 4),
309 
311  ANIMFILTER_SEL = (1 << 6),
312  ANIMFILTER_UNSEL = (1 << 7),
313 
315  ANIMFILTER_FOREDIT = (1 << 8),
318  ANIMFILTER_SELEDIT = (1 << 9),
319 
325  ANIMFILTER_ANIMDATA = (1 << 10),
326 
328  ANIMFILTER_NODUPLIS = (1 << 11),
329 
331  ANIMFILTER_TMP_PEEK = (1 << 30),
332 
336 
337 /* ---------- Flag Checking Macros ------------ */
338 /* XXX check on all of these flags again. */
339 
340 /* Dopesheet only */
341 /* 'Scene' channels */
342 #define SEL_SCEC(sce) (CHECK_TYPE_INLINE(sce, Scene *), ((sce->flag & SCE_DS_SELECTED)))
343 #define EXPANDED_SCEC(sce) (CHECK_TYPE_INLINE(sce, Scene *), ((sce->flag & SCE_DS_COLLAPSED) == 0))
344 /* 'Sub-Scene' channels (flags stored in Data block) */
345 #define FILTER_WOR_SCED(wo) (CHECK_TYPE_INLINE(wo, World *), (wo->flag & WO_DS_EXPAND))
346 #define FILTER_LS_SCED(linestyle) ((linestyle->flag & LS_DS_EXPAND))
347 /* 'Object' channels */
348 #define SEL_OBJC(base) (CHECK_TYPE_INLINE(base, Base *), ((base->flag & SELECT)))
349 #define EXPANDED_OBJC(ob) \
350  (CHECK_TYPE_INLINE(ob, Object *), (((ob)->nlaflag & OB_ADS_COLLAPSED) == 0))
351 /* 'Sub-object' channels (flags stored in Data block) */
352 #define FILTER_SKE_OBJD(key) (CHECK_TYPE_INLINE(key, Key *), ((key->flag & KEY_DS_EXPAND)))
353 #define FILTER_MAT_OBJD(ma) (CHECK_TYPE_INLINE(ma, Material *), ((ma->flag & MA_DS_EXPAND)))
354 #define FILTER_LAM_OBJD(la) (CHECK_TYPE_INLINE(la, Light *), ((la->flag & LA_DS_EXPAND)))
355 #define FILTER_CAM_OBJD(ca) (CHECK_TYPE_INLINE(ca, Camera *), ((ca->flag & CAM_DS_EXPAND)))
356 #define FILTER_CACHEFILE_OBJD(cf) \
357  (CHECK_TYPE_INLINE(cf, CacheFile *), (((cf)->flag & CACHEFILE_DS_EXPAND)))
358 #define FILTER_CUR_OBJD(cu) (CHECK_TYPE_INLINE(cu, Curve *), ((cu->flag & CU_DS_EXPAND)))
359 #define FILTER_PART_OBJD(part) \
360  (CHECK_TYPE_INLINE(part, ParticleSettings *), (((part)->flag & PART_DS_EXPAND)))
361 #define FILTER_MBALL_OBJD(mb) (CHECK_TYPE_INLINE(mb, MetaBall *), ((mb->flag2 & MB_DS_EXPAND)))
362 #define FILTER_ARM_OBJD(arm) (CHECK_TYPE_INLINE(arm, bArmature *), ((arm->flag & ARM_DS_EXPAND)))
363 #define FILTER_MESH_OBJD(me) (CHECK_TYPE_INLINE(me, Mesh *), ((me->flag & ME_DS_EXPAND)))
364 #define FILTER_LATTICE_OBJD(lt) (CHECK_TYPE_INLINE(lt, Lattice *), ((lt->flag & LT_DS_EXPAND)))
365 #define FILTER_SPK_OBJD(spk) (CHECK_TYPE_INLINE(spk, Speaker *), ((spk->flag & SPK_DS_EXPAND)))
366 #define FILTER_HAIR_OBJD(ha) (CHECK_TYPE_INLINE(ha, Hair *), ((ha->flag & HA_DS_EXPAND)))
367 #define FILTER_POINTS_OBJD(pt) (CHECK_TYPE_INLINE(pt, PointCloud *), ((pt->flag & PT_DS_EXPAND)))
368 #define FILTER_VOLUME_OBJD(vo) (CHECK_TYPE_INLINE(vo, Volume *), ((vo->flag & VO_DS_EXPAND)))
369 #define FILTER_SIMULATION_OBJD(sim) \
370  (CHECK_TYPE_INLINE(sim, Simulation *), ((sim->flag & SIM_DS_EXPAND)))
371 /* Variable use expanders */
372 #define FILTER_NTREE_DATA(ntree) \
373  (CHECK_TYPE_INLINE(ntree, bNodeTree *), (((ntree)->flag & NTREE_DS_EXPAND)))
374 #define FILTER_TEX_DATA(tex) (CHECK_TYPE_INLINE(tex, Tex *), ((tex->flag & TEX_DS_EXPAND)))
375 
376 /* 'Sub-object/Action' channels (flags stored in Action) */
377 #define SEL_ACTC(actc) ((actc->flag & ACT_SELECTED))
378 #define EXPANDED_ACTC(actc) ((actc->flag & ACT_COLLAPSED) == 0)
379 /* 'Sub-AnimData' channels */
380 #define EXPANDED_DRVD(adt) ((adt->flag & ADT_DRIVERS_COLLAPSED) == 0)
381 
382 /* Actions (also used for Dopesheet) */
383 /* Action Channel Group */
384 #define EDITABLE_AGRP(agrp) (((agrp)->flag & AGRP_PROTECTED) == 0)
385 #define EXPANDED_AGRP(ac, agrp) \
386  (((!(ac) || ((ac)->spacetype != SPACE_GRAPH)) && ((agrp)->flag & AGRP_EXPANDED)) || \
387  (((ac) && ((ac)->spacetype == SPACE_GRAPH)) && ((agrp)->flag & AGRP_EXPANDED_G)))
388 #define SEL_AGRP(agrp) (((agrp)->flag & AGRP_SELECTED) || ((agrp)->flag & AGRP_ACTIVE))
389 /* F-Curve Channels */
390 #define EDITABLE_FCU(fcu) ((fcu->flag & FCURVE_PROTECTED) == 0)
391 #define SEL_FCU(fcu) (fcu->flag & FCURVE_SELECTED)
392 
393 /* ShapeKey mode only */
394 #define EDITABLE_SHAPEKEY(kb) ((kb->flag & KEYBLOCK_LOCKED) == 0)
395 #define SEL_SHAPEKEY(kb) (kb->flag & KEYBLOCK_SEL)
396 
397 /* Grease Pencil only */
398 /* Grease Pencil datablock settings */
399 #define EXPANDED_GPD(gpd) (gpd->flag & GP_DATA_EXPAND)
400 /* Grease Pencil Layer settings */
401 #define EDITABLE_GPL(gpl) ((gpl->flag & GP_LAYER_LOCKED) == 0)
402 #define SEL_GPL(gpl) (gpl->flag & GP_LAYER_SELECT)
403 
404 /* Mask Only */
405 /* Grease Pencil datablock settings */
406 #define EXPANDED_MASK(mask) (mask->flag & MASK_ANIMF_EXPAND)
407 /* Grease Pencil Layer settings */
408 #define EDITABLE_MASK(masklay) ((masklay->flag & MASK_LAYERFLAG_LOCKED) == 0)
409 #define SEL_MASKLAY(masklay) (masklay->flag & SELECT)
410 
411 /* NLA only */
412 #define SEL_NLT(nlt) (nlt->flag & NLATRACK_SELECTED)
413 #define EDITABLE_NLT(nlt) ((nlt->flag & NLATRACK_PROTECTED) == 0)
414 
415 /* Movie clip only */
416 #define EXPANDED_MCLIP(clip) (clip->flag & MCLIP_DATA_EXPAND)
417 
418 /* Palette only */
419 #define EXPANDED_PALETTE(palette) (palette->flag & PALETTE_DATA_EXPAND)
420 
421 /* AnimData - NLA mostly... */
422 #define SEL_ANIMDATA(adt) (adt->flag & ADT_UI_SELECTED)
423 
424 /* -------------- Channel Defines -------------- */
425 
426 /* channel heights */
427 #define ACHANNEL_FIRST_TOP(ac) \
428  (UI_view2d_scale_get_y(&(ac)->region->v2d) * -UI_TIME_SCRUB_MARGIN_Y - ACHANNEL_SKIP)
429 #define ACHANNEL_HEIGHT(ac) (0.8f * (ac)->yscale_fac * U.widget_unit)
430 #define ACHANNEL_SKIP (0.1f * U.widget_unit)
431 #define ACHANNEL_STEP(ac) (ACHANNEL_HEIGHT(ac) + ACHANNEL_SKIP)
432 /* Additional offset to give some room at the end. */
433 #define ACHANNEL_TOT_HEIGHT(ac, item_amount) \
434  (-ACHANNEL_FIRST_TOP(ac) + ACHANNEL_STEP(ac) * (item_amount + 1))
435 
436 /* channel widths */
437 #define ACHANNEL_NAMEWIDTH (10 * U.widget_unit)
438 
439 /* channel toggle-buttons */
440 #define ACHANNEL_BUTTON_WIDTH (0.8f * U.widget_unit)
441 
442 /* -------------- NLA Channel Defines -------------- */
443 
444 /* NLA channel heights */
445 #define NLACHANNEL_FIRST_TOP(ac) \
446  (UI_view2d_scale_get_y(&(ac)->region->v2d) * -UI_TIME_SCRUB_MARGIN_Y - NLACHANNEL_SKIP)
447 #define NLACHANNEL_HEIGHT(snla) \
448  (((snla) && ((snla)->flag & SNLA_NOSTRIPCURVES)) ? (0.8f * U.widget_unit) : \
449  (1.2f * U.widget_unit))
450 #define NLACHANNEL_SKIP (0.1f * U.widget_unit)
451 #define NLACHANNEL_STEP(snla) (NLACHANNEL_HEIGHT(snla) + NLACHANNEL_SKIP)
452 /* Additional offset to give some room at the end. */
453 #define NLACHANNEL_TOT_HEIGHT(ac, item_amount) \
454  (-NLACHANNEL_FIRST_TOP(ac) + NLACHANNEL_STEP(((SpaceNla *)(ac)->sl)) * (item_amount + 1))
455 
456 /* channel widths */
457 #define NLACHANNEL_NAMEWIDTH (10 * U.widget_unit)
458 
459 /* channel toggle-buttons */
460 #define NLACHANNEL_BUTTON_WIDTH (0.8f * U.widget_unit)
461 
462 /* ---------------- API -------------------- */
463 
464 /* Obtain list of filtered Animation channels to operate on.
465  * Returns the number of channels in the list
466  */
468  ListBase *anim_data,
469  eAnimFilter_Flags filter_mode,
470  void *data,
471  eAnimCont_Types datatype);
472 
473 /* Obtain current anim-data context from Blender Context info.
474  * Returns whether the operation was successful.
475  */
477 
478 /* Obtain current anim-data context (from Animation Editor) given
479  * that Blender Context info has already been set.
480  * Returns whether the operation was successful.
481  */
483 
484 /* Acts on bAnimListElem eAnim_Update_Flags */
485 void ANIM_animdata_update(bAnimContext *ac, ListBase *anim_data);
486 
487 void ANIM_animdata_freelist(ListBase *anim_data);
488 
489 /* ************************************************ */
490 /* ANIMATION CHANNELS LIST */
491 /* anim_channels_*.c */
492 
493 /* ------------------------ Drawing TypeInfo -------------------------- */
494 
495 /* role or level of animchannel in the hierarchy */
496 typedef enum eAnimChannel_Role {
500  /* ACHANNEL_ROLE_SPECIAL = 0, */ /* UNUSED */
504 
505 /* flag-setting behavior */
506 typedef enum eAnimChannels_SetFlag {
516 
517 /* types of settings for AnimChannels */
518 typedef enum eAnimChannel_Settings {
534 
535 /* Drawing, mouse handling, and flag setting behavior... */
536 typedef struct bAnimChannelType {
537  /* -- Type data -- */
538  /* name of the channel type, for debugging */
539  const char *channel_type_name;
540  /* "level" or role in hierarchy - for finding the active channel */
542 
543  /* -- Drawing -- */
544  /* get RGB color that is used to draw the majority of the backdrop */
545  void (*get_backdrop_color)(bAnimContext *ac, bAnimListElem *ale, float r_color[3]);
546  /* draw backdrop strip for channel */
547  void (*draw_backdrop)(bAnimContext *ac, bAnimListElem *ale, float yminc, float ymaxc);
548  /* get depth of indention (relative to the depth channel is nested at) */
550  /* get offset in pixels for the start of the channel (in addition to the indent depth) */
551  short (*get_offset)(bAnimContext *ac, bAnimListElem *ale);
552 
553  /* get name (for channel lists) */
554  void (*name)(bAnimListElem *ale, char *name);
555  /* get RNA property+pointer for editing the name */
556  bool (*name_prop)(bAnimListElem *ale, struct PointerRNA *ptr, struct PropertyRNA **prop);
557  /* get icon (for channel lists) */
558  int (*icon)(bAnimListElem *ale);
559 
560  /* -- Settings -- */
561  /* check if the given setting is valid in the current context */
563  /* get the flag used for this setting */
564  int (*setting_flag)(bAnimContext *ac, eAnimChannel_Settings setting, bool *neg);
565  /* get the pointer to int/short where data is stored,
566  * with type being sizeof(ptr_data) which should be fine for runtime use...
567  * - assume that setting has been checked to be valid for current context
568  */
569  void *(*setting_ptr)(bAnimListElem *ale, eAnimChannel_Settings setting, short *type);
571 
572 /* ------------------------ Drawing API -------------------------- */
573 
574 /* Get typeinfo for the given channel */
576 
577 /* Print debugging info about a given channel */
578 void ANIM_channel_debug_print_info(bAnimListElem *ale, short indent_level);
579 
580 /* Draw the given channel */
581 void ANIM_channel_draw(
582  bAnimContext *ac, bAnimListElem *ale, float yminc, float ymaxc, size_t channel_index);
583 /* Draw the widgets for the given channel */
585  bAnimContext *ac,
586  bAnimListElem *ale,
587  struct uiBlock *block,
588  rctf *rect,
589  size_t channel_index);
590 
591 /* ------------------------ Editing API -------------------------- */
592 
593 /* Check if some setting for a channel is enabled
594  * Returns: 1 = On, 0 = Off, -1 = Invalid
595  *
596  * - setting: eAnimChannel_Settings
597  */
599  bAnimListElem *ale,
600  eAnimChannel_Settings setting);
601 
602 /* Change value of some setting for a channel
603  * - setting: eAnimChannel_Settings
604  * - mode: eAnimChannels_SetFlag
605  */
607  bAnimListElem *ale,
608  eAnimChannel_Settings setting,
609  eAnimChannels_SetFlag mode);
610 
611 /* Flush visibility (for Graph Editor) changes up/down hierarchy for changes in the given setting
612  * - anim_data: list of the all the anim channels that can be chosen
613  * -> filtered using ANIMFILTER_CHANNELS only, since if we took VISIBLE too,
614  * then the channels under closed expanders get ignored...
615  * - ale_setting: the anim channel (not in the anim_data list directly, though occurring there)
616  * with the new state of the setting that we want flushed up/down the hierarchy
617  * - setting: type of setting to set
618  * - on: whether the visibility setting has been enabled or disabled
619  */
621  ListBase *anim_data,
622  bAnimListElem *ale_setting,
623  eAnimChannel_Settings setting,
624  eAnimChannels_SetFlag mode);
625 
626 /* Select or deselect animation channels */
628 
629 /* Toggle selection of animation channels */
631 
632 /* Set the 'active' channel of type channel_type, in the given action */
634  void *data,
635  eAnimCont_Types datatype,
637  void *channel_data,
638  eAnim_ChannelType channel_type);
639 
640 /* Delete the F-Curve from the given AnimData block (if possible),
641  * as appropriate according to animation context */
642 void ANIM_fcurve_delete_from_animdata(bAnimContext *ac, struct AnimData *adt, struct FCurve *fcu);
643 
644 /* Unlink the action from animdata if it's empty. */
646 
647 /* ************************************************ */
648 /* DRAWING API */
649 /* anim_draw.c */
650 
651 /* ---------- Current Frame Drawing ---------------- */
652 
653 /* flags for Current Frame Drawing */
655  /* plain time indicator with no special indicators */
656  /* DRAWCFRA_PLAIN = 0, */ /* UNUSED */
657  /* time indication in seconds or frames */
659  /* draw indicator extra wide (for timeline) */
660  DRAWCFRA_WIDE = (1 << 1),
662 
663 /* main call to draw current-frame indicator in an Animation Editor */
664 void ANIM_draw_cfra(const struct bContext *C, struct View2D *v2d, short flag);
665 
666 /* ------------- Preview Range Drawing -------------- */
667 
668 /* main call to draw preview range curtains */
669 void ANIM_draw_previewrange(const struct bContext *C, struct View2D *v2d, int end_frame_width);
670 
671 /* -------------- Frame Range Drawing --------------- */
672 
673 /* main call to draw normal frame range indicators */
674 void ANIM_draw_framerange(struct Scene *scene, struct View2D *v2d);
675 
676 /* ************************************************* */
677 /* F-MODIFIER TOOLS */
678 
679 /* ------------- UI Panel Drawing -------------- */
680 
681 struct NlaStrip *ANIM_nla_context_strip(const struct bContext *C);
683 
684 /* Needed for abstraction between the graph editor and the NLA editor. */
685 typedef bool (*PanelTypePollFn)(const struct bContext *C, struct PanelType *pt);
686 /* Avoid including "UI_interface.h" here. */
687 typedef void (*uiListPanelIDFromDataFunc)(void *data_link, char *r_idname);
688 
689 void ANIM_fmodifier_panels(const struct bContext *C,
690  struct ID *owner_id,
691  struct ListBase *fmodifiers,
692  uiListPanelIDFromDataFunc panel_id_fn);
693 
695  const char *modifier_panel_prefix,
696  PanelTypePollFn poll_function);
698  const char *modifier_panel_prefix,
699  PanelTypePollFn poll_function);
700 
701 /* ------------- Copy/Paste Buffer -------------- */
702 
703 /* free the copy/paste buffer */
705 
706 /* copy the given F-Modifiers to the buffer, returning whether anything was copied or not
707  * assuming that the buffer has been cleared already with ANIM_fmodifiers_copybuf_free()
708  * - active: only copy the active modifier
709  */
710 bool ANIM_fmodifiers_copy_to_buf(ListBase *modifiers, bool active);
711 
712 /* 'Paste' the F-Modifier(s) from the buffer to the specified list
713  * - replace: free all the existing modifiers to leave only the pasted ones
714  */
715 bool ANIM_fmodifiers_paste_from_buf(ListBase *modifiers, bool replace, struct FCurve *curve);
716 
717 /* ************************************************* */
718 /* ASSORTED TOOLS */
719 
720 /* ------------ Animation F-Curves <-> Icons/Names Mapping ------------ */
721 /* anim_ipo_utils.c */
722 
723 /* Get icon + name for channel-list displays for F-Curve */
724 int getname_anim_fcurve(char *name, struct ID *id, struct FCurve *fcu);
725 
726 /* Automatically determine a color for the nth F-Curve */
727 void getcolor_fcurve_rainbow(int cur, int tot, float out[3]);
728 
729 /* ----------------- NLA Drawing ----------------------- */
730 /* NOTE: Technically, this is not in the animation module (it's in space_nla)
731  * but these are sometimes needed by various animation API's.
732  */
733 
734 /* Get color to use for NLA Action channel's background */
735 void nla_action_get_color(struct AnimData *adt, struct bAction *act, float color[4]);
736 
737 /* ----------------- NLA-Mapping ----------------------- */
738 /* anim_draw.c */
739 
740 /* Obtain the AnimData block providing NLA-scaling for the given channel if applicable */
742 
743 /* Apply/Unapply NLA mapping to all keyframes in the nominated F-Curve */
744 void ANIM_nla_mapping_apply_fcurve(struct AnimData *adt,
745  struct FCurve *fcu,
746  bool restore,
747  bool only_keys);
748 
749 /* ..... */
750 
751 /* Perform auto-blending/extend refreshes after some operations */
752 /* NOTE: defined in space_nla/nla_edit.c, not in animation/ */
754 
755 /* ------------- Unit Conversion Mappings ------------- */
756 /* anim_draw.c */
757 
758 /* flags for conversion mapping */
759 typedef enum eAnimUnitConv_Flags {
760  /* restore to original internal values */
762  /* ignore handles (i.e. only touch main keyframes) */
764  /* only touch selected BezTriples */
766  /* only touch selected vertices */
768  /* ANIM_UNITCONV_SKIPKNOTS = (1 << 4), */ /* UNUSED */
769  /* Scale FCurve i a way it fits to -1..1 space */
771  /* Only when normalization is used: use scale factor from previous run,
772  * prevents curves from jumping all over the place when tweaking them.
773  */
776 
777 /* Normalization flags from Space Graph passing to ANIM_unit_mapping_get_factor */
779 
780 /* Get unit conversion factor for given ID + F-Curve */
782  struct Scene *scene, struct ID *id, struct FCurve *fcu, short flag, float *r_offset);
783 
784 /* ------------- Utility macros ----------------------- */
785 
786 /* provide access to Keyframe Type info in BezTriple
787  * NOTE: this is so that we can change it from being stored in 'hide'
788  */
789 #define BEZKEYTYPE(bezt) ((bezt)->hide)
790 
791 /* set/clear/toggle macro
792  * - channel - channel with a 'flag' member that we're setting
793  * - smode - 0=clear, 1=set, 2=invert
794  * - sflag - bitflag to set
795  */
796 #define ACHANNEL_SET_FLAG(channel, smode, sflag) \
797  { \
798  if (smode == ACHANNEL_SETFLAG_INVERT) { \
799  (channel)->flag ^= (sflag); \
800  } \
801  else if (smode == ACHANNEL_SETFLAG_ADD) { \
802  (channel)->flag |= (sflag); \
803  } \
804  else { \
805  (channel)->flag &= ~(sflag); \
806  } \
807  } \
808  ((void)0)
809 
810 /* set/clear/toggle macro, where the flag is negative
811  * - channel - channel with a 'flag' member that we're setting
812  * - smode - 0=clear, 1=set, 2=invert
813  * - sflag - bitflag to set
814  */
815 #define ACHANNEL_SET_FLAG_NEG(channel, smode, sflag) \
816  { \
817  if (smode == ACHANNEL_SETFLAG_INVERT) { \
818  (channel)->flag ^= (sflag); \
819  } \
820  else if (smode == ACHANNEL_SETFLAG_ADD) { \
821  (channel)->flag &= ~(sflag); \
822  } \
823  else { \
824  (channel)->flag |= (sflag); \
825  } \
826  } \
827  ((void)0)
828 
829 /* --------- anim_deps.c, animation updates -------- */
830 
831 void ANIM_id_update(struct Main *bmain, struct ID *id);
832 void ANIM_list_elem_update(struct Main *bmain, struct Scene *scene, bAnimListElem *ale);
833 
834 /* data -> channels syncing */
836 
837 void ANIM_center_frame(struct bContext *C, int smooth_viewtx);
838 
839 /* ************************************************* */
840 /* OPERATORS */
841 
842 /* generic animation channels */
844 void ED_keymap_animchannels(struct wmKeyConfig *keyconf);
845 
846 /* generic time editing */
847 void ED_operatortypes_anim(void);
848 void ED_keymap_anim(struct wmKeyConfig *keyconf);
849 
850 /* space_graph */
851 void ED_operatormacros_graph(void);
852 /* space_action */
853 void ED_operatormacros_action(void);
854 
855 /* ************************************************ */
856 /* Animation Editor Exports */
857 /* XXX: Should we be doing these here, or at all? */
858 
859 /* Action Editor - Action Management */
862  struct ID *id,
863  struct AnimData *adt,
864  struct bAction *act,
865  struct ReportList *reports,
866  bool force_delete);
867 
868 /* Drivers Editor - Utility to set up UI correctly */
869 void ED_drivers_editor_init(struct bContext *C, struct ScrArea *area);
870 
871 /* ************************************************ */
872 
873 typedef enum eAnimvizCalcRange {
874  /* Update motion paths at the current frame only. */
876 
877  /* Try to limit updates to a close neighborhood of the current frame. */
879 
880  /* Update an entire range of the motion paths. */
883 
884 struct Depsgraph *animviz_depsgraph_build(struct Main *bmain,
885  struct Scene *scene,
886  struct ViewLayer *view_layer,
887  struct ListBase *targets);
888 
890  struct Main *bmain,
891  struct Scene *scene,
892  ListBase *targets,
893  eAnimvizCalcRange range,
894  bool restore);
895 
896 void animviz_get_object_motionpaths(struct Object *ob, ListBase *targets);
897 
898 #ifdef __cplusplus
899 }
900 #endif
struct Depsgraph Depsgraph
Definition: DEG_depsgraph.h:51
void ED_animedit_unlink_action(struct bContext *C, struct ID *id, struct AnimData *adt, struct bAction *act, struct ReportList *reports, bool force_delete)
Definition: action_data.c:548
eAnimChannels_SetFlag
Definition: ED_anim_api.h:506
@ ACHANNEL_SETFLAG_TOGGLE
Definition: ED_anim_api.h:514
@ ACHANNEL_SETFLAG_ADD
Definition: ED_anim_api.h:510
@ ACHANNEL_SETFLAG_INVERT
Definition: ED_anim_api.h:512
@ ACHANNEL_SETFLAG_CLEAR
Definition: ED_anim_api.h:508
int getname_anim_fcurve(char *name, struct ID *id, struct FCurve *fcu)
void ED_operatortypes_animchannels(void)
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_drivers_editor_init(struct bContext *C, struct ScrArea *area)
Definition: graph_utils.c:55
void ANIM_fmodifier_panels(const struct bContext *C, struct ID *owner_id, struct ListBase *fmodifiers, uiListPanelIDFromDataFunc panel_id_fn)
eAnim_ChannelType
Definition: ED_anim_api.h:197
@ ANIMTYPE_DSSPK
Definition: ED_anim_api.h:230
@ ANIMTYPE_DSTEX
Definition: ED_anim_api.h:227
@ ANIMTYPE_SUMMARY
Definition: ED_anim_api.h:202
@ ANIMTYPE_DSNTREE
Definition: ED_anim_api.h:222
@ ANIMTYPE_NLACURVE
Definition: ED_anim_api.h:210
@ ANIMTYPE_SHAPEKEY
Definition: ED_anim_api.h:238
@ ANIMTYPE_DSMBALL
Definition: ED_anim_api.h:224
@ ANIMTYPE_DSCAM
Definition: ED_anim_api.h:217
@ ANIMTYPE_DSPOINTCLOUD
Definition: ED_anim_api.h:234
@ ANIMTYPE_FILLDRIVERS
Definition: ED_anim_api.h:213
@ ANIMTYPE_NONE
Definition: ED_anim_api.h:198
@ ANIMTYPE_DSPART
Definition: ED_anim_api.h:223
@ ANIMTYPE_DSLINESTYLE
Definition: ED_anim_api.h:229
@ ANIMTYPE_GROUP
Definition: ED_anim_api.h:206
@ ANIMTYPE_SPECIALDATA__UNUSED
Definition: ED_anim_api.h:200
@ ANIMTYPE_DSCUR
Definition: ED_anim_api.h:219
@ ANIMTYPE_SCENE
Definition: ED_anim_api.h:204
@ ANIMTYPE_DSARM
Definition: ED_anim_api.h:225
@ ANIMTYPE_NLACONTROLS
Definition: ED_anim_api.h:209
@ ANIMTYPE_GPLAYER
Definition: ED_anim_api.h:241
@ ANIMTYPE_MASKDATABLOCK
Definition: ED_anim_api.h:243
@ ANIMTYPE_ANIMDATA
Definition: ED_anim_api.h:199
@ ANIMTYPE_MASKLAYER
Definition: ED_anim_api.h:244
@ ANIMTYPE_DSSIMULATION
Definition: ED_anim_api.h:236
@ ANIMTYPE_DSGPENCIL
Definition: ED_anim_api.h:231
@ ANIMTYPE_DSLAT
Definition: ED_anim_api.h:228
@ ANIMTYPE_NLAACTION
Definition: ED_anim_api.h:247
@ ANIMTYPE_DSMCLIP
Definition: ED_anim_api.h:232
@ ANIMTYPE_DSMAT
Definition: ED_anim_api.h:215
@ ANIMTYPE_NUM_TYPES
Definition: ED_anim_api.h:252
@ ANIMTYPE_DSCACHEFILE
Definition: ED_anim_api.h:218
@ ANIMTYPE_DSVOLUME
Definition: ED_anim_api.h:235
@ ANIMTYPE_FCURVE
Definition: ED_anim_api.h:207
@ ANIMTYPE_DSLAM
Definition: ED_anim_api.h:216
@ ANIMTYPE_PALETTE
Definition: ED_anim_api.h:249
@ ANIMTYPE_GPDATABLOCK
Definition: ED_anim_api.h:240
@ ANIMTYPE_FILLACTD
Definition: ED_anim_api.h:212
@ ANIMTYPE_OBJECT
Definition: ED_anim_api.h:205
@ ANIMTYPE_DSMESH
Definition: ED_anim_api.h:226
@ ANIMTYPE_NLATRACK
Definition: ED_anim_api.h:246
@ ANIMTYPE_DSWOR
Definition: ED_anim_api.h:221
@ ANIMTYPE_DSSKEY
Definition: ED_anim_api.h:220
@ ANIMTYPE_DSHAIR
Definition: ED_anim_api.h:233
void ANIM_channel_setting_set(bAnimContext *ac, bAnimListElem *ale, eAnimChannel_Settings setting, eAnimChannels_SetFlag mode)
void ED_operatormacros_graph(void)
Definition: graph_ops.c:484
void ANIM_list_elem_update(struct Main *bmain, struct Scene *scene, bAnimListElem *ale)
Definition: anim_deps.c:62
void ANIM_channel_draw_widgets(const struct bContext *C, bAnimContext *ac, bAnimListElem *ale, struct uiBlock *block, rctf *rect, size_t channel_index)
void ANIM_fmodifiers_copybuf_free(void)
Definition: fmodifier_ui.c:976
void ANIM_fcurve_delete_from_animdata(bAnimContext *ac, struct AnimData *adt, struct FCurve *fcu)
void ANIM_draw_previewrange(const struct bContext *C, struct View2D *v2d, int end_frame_width)
bool(* PanelTypePollFn)(const struct bContext *C, struct PanelType *pt)
Definition: ED_anim_api.h:685
struct bAnimContext bAnimContext
void nla_action_get_color(struct AnimData *adt, struct bAction *act, float color[4])
Definition: nla_draw.c:69
void ED_nla_postop_refresh(bAnimContext *ac)
Definition: nla_edit.c:75
void ANIM_sync_animchannels_to_data(const struct bContext *C)
struct NlaStrip * ANIM_nla_context_strip(const struct bContext *C)
void ANIM_animdata_freelist(ListBase *anim_data)
Definition: anim_deps.c:425
void ANIM_channel_draw(bAnimContext *ac, bAnimListElem *ale, float yminc, float ymaxc, size_t channel_index)
void animviz_calc_motionpaths(struct Depsgraph *depsgraph, struct Main *bmain, struct Scene *scene, ListBase *targets, eAnimvizCalcRange range, bool restore)
void ANIM_draw_framerange(struct Scene *scene, struct View2D *v2d)
Definition: anim_draw.c:134
void animviz_get_object_motionpaths(struct Object *ob, ListBase *targets)
eAnimChannel_Role
Definition: ED_anim_api.h:496
@ ACHANNEL_ROLE_CHANNEL
Definition: ED_anim_api.h:502
@ ACHANNEL_ROLE_EXPANDER
Definition: ED_anim_api.h:498
bool ANIM_remove_empty_action_from_animdata(struct AnimData *adt)
void ANIM_nla_mapping_apply_fcurve(struct AnimData *adt, struct FCurve *fcu, bool restore, bool only_keys)
Definition: anim_draw.c:257
eAnim_KeyType
Definition: ED_anim_api.h:256
@ ALE_SCE
Definition: ED_anim_api.h:264
@ ALE_NONE
Definition: ED_anim_api.h:257
@ ALE_GPFRAME
Definition: ED_anim_api.h:259
@ ALE_FCURVE
Definition: ED_anim_api.h:258
@ ALE_NLASTRIP
Definition: ED_anim_api.h:261
@ ALE_ALL
Definition: ED_anim_api.h:263
@ ALE_ACT
Definition: ED_anim_api.h:266
@ ALE_OB
Definition: ED_anim_api.h:265
@ ALE_GROUP
Definition: ED_anim_api.h:267
@ ALE_MASKLAY
Definition: ED_anim_api.h:260
void ED_keymap_animchannels(struct wmKeyConfig *keyconf)
struct Depsgraph * animviz_depsgraph_build(struct Main *bmain, struct Scene *scene, struct ViewLayer *view_layer, struct ListBase *targets)
void ED_keymap_anim(struct wmKeyConfig *keyconf)
Definition: anim_ops.c:556
float ANIM_unit_mapping_get_factor(struct Scene *scene, struct ID *id, struct FCurve *fcu, short flag, float *r_offset)
Definition: anim_draw.c:453
eAnim_Update_Flags
Definition: ED_anim_api.h:274
@ ANIM_UPDATE_DEPS
Definition: ED_anim_api.h:275
@ ANIM_UPDATE_HANDLES
Definition: ED_anim_api.h:277
@ ANIM_UPDATE_ORDER
Definition: ED_anim_api.h:276
eAnimCont_Types
Definition: ED_anim_api.h:115
@ ANIMCONT_DRIVERS
Definition: ED_anim_api.h:122
@ ANIMCONT_FCURVES
Definition: ED_anim_api.h:121
@ ANIMCONT_NLA
Definition: ED_anim_api.h:123
@ ANIMCONT_MASK
Definition: ED_anim_api.h:125
@ ANIMCONT_SHAPEKEY
Definition: ED_anim_api.h:118
@ ANIMCONT_TIMELINE
Definition: ED_anim_api.h:126
@ ANIMCONT_DOPESHEET
Definition: ED_anim_api.h:120
@ ANIMCONT_ACTION
Definition: ED_anim_api.h:117
@ ANIMCONT_NONE
Definition: ED_anim_api.h:116
@ ANIMCONT_GPENCIL
Definition: ED_anim_api.h:119
@ ANIMCONT_CHANNEL
Definition: ED_anim_api.h:124
void ANIM_set_active_channel(bAnimContext *ac, void *data, eAnimCont_Types datatype, eAnimFilter_Flags filter, void *channel_data, eAnim_ChannelType channel_type)
void ANIM_channel_debug_print_info(bAnimListElem *ale, short indent_level)
bool ANIM_animdata_context_getdata(bAnimContext *ac)
Definition: anim_filter.c:370
void getcolor_fcurve_rainbow(int cur, int tot, float out[3])
void ANIM_center_frame(struct bContext *C, int smooth_viewtx)
Definition: anim_draw.c:588
void ANIM_modifier_panels_register_graph_and_NLA(struct ARegionType *region_type, const char *modifier_panel_prefix, PanelTypePollFn poll_function)
Definition: fmodifier_ui.c:942
void(* uiListPanelIDFromDataFunc)(void *data_link, char *r_idname)
Definition: ED_anim_api.h:687
void ANIM_draw_cfra(const struct bContext *C, struct View2D *v2d, short flag)
eAnimChannel_Settings
Definition: ED_anim_api.h:518
@ ACHANNEL_SETTING_ALWAYS_VISIBLE
Definition: ED_anim_api.h:532
@ ACHANNEL_SETTING_PINNED
Definition: ED_anim_api.h:529
@ ACHANNEL_SETTING_MUTE
Definition: ED_anim_api.h:522
@ ACHANNEL_SETTING_PROTECT
Definition: ED_anim_api.h:521
@ ACHANNEL_SETTING_VISIBLE
Definition: ED_anim_api.h:525
@ ACHANNEL_SETTING_EXPAND
Definition: ED_anim_api.h:523
@ ACHANNEL_SETTING_SOLO
Definition: ED_anim_api.h:527
@ ACHANNEL_SETTING_MOD_OFF
Definition: ED_anim_api.h:530
@ ACHANNEL_SETTING_SELECT
Definition: ED_anim_api.h:519
struct bAnimChannelType bAnimChannelType
bool ANIM_fmodifiers_paste_from_buf(ListBase *modifiers, bool replace, struct FCurve *curve)
size_t ANIM_animdata_filter(bAnimContext *ac, ListBase *anim_data, eAnimFilter_Flags filter_mode, void *data, eAnimCont_Types datatype)
Definition: anim_filter.c:3442
void ANIM_anim_channels_select_toggle(bAnimContext *ac)
short ANIM_channel_setting_get(bAnimContext *ac, bAnimListElem *ale, eAnimChannel_Settings setting)
struct AnimData * ANIM_nla_mapping_get(bAnimContext *ac, bAnimListElem *ale)
Definition: anim_draw.c:178
void ED_operatortypes_anim(void)
Definition: anim_ops.c:516
struct AnimData * ED_actedit_animdata_from_context(struct bContext *C)
Definition: action_data.c:74
const bAnimChannelType * ANIM_channel_get_typeinfo(bAnimListElem *ale)
struct FCurve * ANIM_graph_context_fcurve(const struct bContext *C)
eAnimEditDraw_CurrentFrame
Definition: ED_anim_api.h:654
@ DRAWCFRA_WIDE
Definition: ED_anim_api.h:660
@ DRAWCFRA_UNIT_SECONDS
Definition: ED_anim_api.h:658
bool ANIM_animdata_get_context(const struct bContext *C, bAnimContext *ac)
void ED_operatormacros_action(void)
Definition: action_ops.c:91
eAnimvizCalcRange
Definition: ED_anim_api.h:873
@ ANIMVIZ_CALC_RANGE_FULL
Definition: ED_anim_api.h:881
@ ANIMVIZ_CALC_RANGE_CURRENT_FRAME
Definition: ED_anim_api.h:875
@ ANIMVIZ_CALC_RANGE_CHANGED
Definition: ED_anim_api.h:878
void ANIM_id_update(struct Main *bmain, struct ID *id)
Definition: anim_deps.c:119
bool ANIM_fmodifiers_copy_to_buf(ListBase *modifiers, bool active)
Definition: fmodifier_ui.c:986
eAnimFilter_Flags
Definition: ED_anim_api.h:287
@ ANIMFILTER_TMP_PEEK
Definition: ED_anim_api.h:331
@ ANIMFILTER_ACTIVE
Definition: ED_anim_api.h:306
@ ANIMFILTER_UNSEL
Definition: ED_anim_api.h:312
@ ANIMFILTER_FOREDIT
Definition: ED_anim_api.h:315
@ ANIMFILTER_ANIMDATA
Definition: ED_anim_api.h:325
@ ANIMFILTER_DATA_VISIBLE
Definition: ED_anim_api.h:295
@ ANIMFILTER_CURVE_VISIBLE
Definition: ED_anim_api.h:300
@ ANIMFILTER_SELEDIT
Definition: ED_anim_api.h:318
@ ANIMFILTER_LIST_VISIBLE
Definition: ED_anim_api.h:298
@ ANIMFILTER_LIST_CHANNELS
Definition: ED_anim_api.h:303
@ ANIMFILTER_NODUPLIS
Definition: ED_anim_api.h:328
@ ANIMFILTER_TMP_IGNORE_ONLYSEL
Definition: ED_anim_api.h:334
@ ANIMFILTER_SEL
Definition: ED_anim_api.h:311
@ ANIMFILTER_ACTGROUPED
Definition: ED_anim_api.h:308
short ANIM_get_normalization_flags(bAnimContext *ac)
Definition: anim_draw.c:285
void ANIM_animdata_update(bAnimContext *ac, ListBase *anim_data)
Definition: anim_deps.c:330
eAnimUnitConv_Flags
Definition: ED_anim_api.h:759
@ ANIM_UNITCONV_NORMALIZE
Definition: ED_anim_api.h:770
@ ANIM_UNITCONV_ONLYSEL
Definition: ED_anim_api.h:765
@ ANIM_UNITCONV_ONLYKEYS
Definition: ED_anim_api.h:763
@ ANIM_UNITCONV_SELVERTS
Definition: ED_anim_api.h:767
@ ANIM_UNITCONV_NORMALIZE_FREEZE
Definition: ED_anim_api.h:774
@ ANIM_UNITCONV_RESTORE
Definition: ED_anim_api.h:761
void ANIM_modifier_panels_register_graph_only(struct ARegionType *region_type, const char *modifier_panel_prefix, PanelTypePollFn poll_function)
Definition: fmodifier_ui.c:954
struct bAnimListElem bAnimListElem
_GL_VOID GLfloat value _GL_VOID_RET _GL_VOID const GLuint GLboolean *residences _GL_BOOL_RET _GL_VOID GLsizei GLfloat GLfloat GLfloat GLfloat const GLubyte *bitmap _GL_VOID_RET _GL_VOID GLenum type
#define C
Definition: RandGen.cpp:39
Scene scene
Curve curve
const Depsgraph * depsgraph
DO_INLINE void filter(lfVector *V, fmatrix3x3 *S)
static void area(int d1, int d2, int e1, int e2, float weights[2])
bool active
all scheduled work for the GPU.
Definition: DNA_ID.h:273
Definition: BKE_main.h:116
char owner_id[BKE_ST_MAXNAME]
Definition: BKE_screen.h:247
short region_type
Definition: BKE_screen.h:252
void(* name)(bAnimListElem *ale, char *name)
Definition: ED_anim_api.h:554
void(* get_backdrop_color)(bAnimContext *ac, bAnimListElem *ale, float r_color[3])
Definition: ED_anim_api.h:545
short(* get_offset)(bAnimContext *ac, bAnimListElem *ale)
Definition: ED_anim_api.h:551
bool(* name_prop)(bAnimListElem *ale, struct PointerRNA *ptr, struct PropertyRNA **prop)
Definition: ED_anim_api.h:556
void(* draw_backdrop)(bAnimContext *ac, bAnimListElem *ale, float yminc, float ymaxc)
Definition: ED_anim_api.h:547
const char * channel_type_name
Definition: ED_anim_api.h:539
bool(* has_setting)(bAnimContext *ac, bAnimListElem *ale, eAnimChannel_Settings setting)
Definition: ED_anim_api.h:562
short(* get_indent_level)(bAnimContext *ac, bAnimListElem *ale)
Definition: ED_anim_api.h:549
eAnimChannel_Role channel_role
Definition: ED_anim_api.h:541
int(* setting_flag)(bAnimContext *ac, eAnimChannel_Settings setting, bool *neg)
Definition: ED_anim_api.h:564
int(* icon)(bAnimListElem *ale)
Definition: ED_anim_api.h:558
ListBase * markers
Definition: ED_anim_api.h:105
struct ARegion * region
Definition: ED_anim_api.h:89
struct Scene * scene
Definition: ED_anim_api.h:97
short spacetype
Definition: ED_anim_api.h:80
struct bDopeSheet * ads
Definition: ED_anim_api.h:92
short datatype
Definition: ED_anim_api.h:75
void * data
Definition: ED_anim_api.h:73
struct ScrArea * area
Definition: ED_anim_api.h:85
struct Object * obact
Definition: ED_anim_api.h:103
float yscale_fac
Definition: ED_anim_api.h:111
short regiontype
Definition: ED_anim_api.h:82
struct ReportList * reports
Definition: ED_anim_api.h:108
struct ViewLayer * view_layer
Definition: ED_anim_api.h:99
struct Main * bmain
Definition: ED_anim_api.h:95
struct SpaceLink * sl
Definition: ED_anim_api.h:87
struct Depsgraph * depsgraph
Definition: ED_anim_api.h:101
struct ID * fcurve_owner_id
Definition: ED_anim_api.h:183
struct bAnimListElem * next
Definition: ED_anim_api.h:135
void * key_data
Definition: ED_anim_api.h:154
struct AnimData * adt
Definition: ED_anim_api.h:170
struct bAnimListElem * prev
Definition: ED_anim_api.h:135
struct ID * id
Definition: ED_anim_api.h:168
PointerRNA * ptr
Definition: wm_files.c:3157