Blender  V3.3
ED_keyframes_keylist.h
Go to the documentation of this file.
1 /* SPDX-License-Identifier: GPL-2.0-or-later
2  * Copyright 2009 Blender Foundation, Joshua Leung. All rights reserved. */
3 
8 #pragma once
9 
10 #include "BLI_range.h"
11 
12 #ifdef __cplusplus
13 extern "C" {
14 #endif
15 
16 struct AnimData;
17 struct CacheFile;
18 struct DLRBT_Tree;
19 struct FCurve;
20 struct MaskLayer;
21 struct Object;
22 struct Scene;
23 struct bAnimContext;
24 struct bDopeSheet;
25 struct bGPDlayer;
26 
27 /* ****************************** Base Structs ****************************** */
28 
29 struct AnimKeylist;
30 
31 /* Information about the stretch of time from current to the next column */
32 typedef struct ActKeyBlockInfo {
33  /* Combination of flags from all curves. */
34  short flag;
35  /* Mask of flags that differ between curves. */
36  short conflict;
37 
38  /* Selection flag. */
39  char sel;
41 
42 /* Keyframe Column Struct */
43 typedef struct ActKeyColumn {
44  /* ListBase linkage */
45  struct ActKeyColumn *next, *prev;
46 
47  /* sorting-tree linkage */
49  struct ActKeyColumn *left, *right;
53  char tree_col;
54 
55  /* keyframe info */
57  char key_type;
62  short sel;
63  float cfra;
64 
65  /* key-block info */
67 
68  /* number of curves and keys in this column */
71 
72 /* ActKeyBlockInfo - Flag */
73 typedef enum eActKeyBlock_Hold {
74  /* Key block represents a moving hold */
76  /* Key block represents a static hold */
78  /* Key block represents any kind of hold */
80  /* The curve segment uses non-bezier interpolation */
82  /* The block is grease pencil */
85 
86 /* *********************** Keyframe Drawing ****************************** */
87 
88 /* options for keyframe shape drawing */
89 typedef enum eKeyframeShapeDrawOpts {
90  /* only the border */
92  /* only the inside filling */
94  /* the whole thing */
97 
98 /* Handle type. */
100  /* Don't draw */
102  /* Various marks in order of increasing display priority. */
109 
110 /* Extreme type. */
113  /* Minimum/maximum present. */
116  /* Grouped keys have different states. */
118  /* Both neighbors are equal to this key. */
121 
122 /* ******************************* Methods ****************************** */
123 
124 struct AnimKeylist *ED_keylist_create(void);
125 void ED_keylist_free(struct AnimKeylist *keylist);
127 const struct ActKeyColumn *ED_keylist_find_exact(const struct AnimKeylist *keylist, float cfra);
128 const struct ActKeyColumn *ED_keylist_find_next(const struct AnimKeylist *keylist, float cfra);
129 const struct ActKeyColumn *ED_keylist_find_prev(const struct AnimKeylist *keylist, float cfra);
130 const struct ActKeyColumn *ED_keylist_find_any_between(const struct AnimKeylist *keylist,
131  const Range2f frame_range);
132 bool ED_keylist_is_empty(const struct AnimKeylist *keylist);
133 const struct ListBase /* ActKeyColumn */ *ED_keylist_listbase(const struct AnimKeylist *keylist);
134 bool ED_keylist_all_keys_frame_range(const struct AnimKeylist *keylist, Range2f *r_frame_range);
135 /* Return the selected keyframe's range. If none are selected, return False and
136  * do not affect the frame range. */
137 bool ED_keylist_selected_keys_frame_range(const struct AnimKeylist *keylist,
138  Range2f *r_frame_range);
139 const ActKeyColumn *ED_keylist_array(const struct AnimKeylist *keylist);
140 int64_t ED_keylist_array_len(const struct AnimKeylist *keylist);
141 
142 /* Key-data Generation --------------- */
143 
144 /* F-Curve */
145 void fcurve_to_keylist(struct AnimData *adt,
146  struct FCurve *fcu,
147  struct AnimKeylist *keylist,
148  int saction_flag);
149 /* Action Group */
150 void agroup_to_keylist(struct AnimData *adt,
151  struct bActionGroup *agrp,
152  struct AnimKeylist *keylist,
153  int saction_flag);
154 /* Action */
155 void action_to_keylist(struct AnimData *adt,
156  struct bAction *act,
157  struct AnimKeylist *keylist,
158  int saction_flag);
159 /* Object */
160 void ob_to_keylist(struct bDopeSheet *ads,
161  struct Object *ob,
162  struct AnimKeylist *keylist,
163  int saction_flag);
164 /* Cache File */
165 void cachefile_to_keylist(struct bDopeSheet *ads,
166  struct CacheFile *cache_file,
167  struct AnimKeylist *keylist,
168  int saction_flag);
169 /* Scene */
170 void scene_to_keylist(struct bDopeSheet *ads,
171  struct Scene *sce,
172  struct AnimKeylist *keylist,
173  int saction_flag);
174 /* DopeSheet Summary */
175 void summary_to_keylist(struct bAnimContext *ac, struct AnimKeylist *keylist, int saction_flag);
176 /* Grease Pencil datablock summary */
177 void gpencil_to_keylist(struct bDopeSheet *ads,
178  struct bGPdata *gpd,
179  struct AnimKeylist *keylist,
180  bool active);
181 /* Grease Pencil Layer */
182 void gpl_to_keylist(struct bDopeSheet *ads, struct bGPDlayer *gpl, struct AnimKeylist *keylist);
183 /* Mask */
184 void mask_to_keylist(struct bDopeSheet *ads,
185  struct MaskLayer *masklay,
186  struct AnimKeylist *keylist);
187 
188 /* ActKeyColumn API ---------------- */
189 
191 bool actkeyblock_is_valid(const ActKeyColumn *ac);
192 
195 
196 #ifdef __cplusplus
197 }
198 #endif
eActKeyBlock_Hold
@ ACTKEYBLOCK_FLAG_ANY_HOLD
@ ACTKEYBLOCK_FLAG_MOVING_HOLD
@ ACTKEYBLOCK_FLAG_GPENCIL
@ ACTKEYBLOCK_FLAG_NON_BEZIER
@ ACTKEYBLOCK_FLAG_STATIC_HOLD
const struct ActKeyColumn * ED_keylist_find_any_between(const struct AnimKeylist *keylist, const Range2f frame_range)
void gpl_to_keylist(struct bDopeSheet *ads, struct bGPDlayer *gpl, struct AnimKeylist *keylist)
void ED_keylist_free(struct AnimKeylist *keylist)
const struct ActKeyColumn * ED_keylist_find_prev(const struct AnimKeylist *keylist, float cfra)
const struct ActKeyColumn * ED_keylist_find_next(const struct AnimKeylist *keylist, float cfra)
void ED_keylist_prepare_for_direct_access(struct AnimKeylist *keylist)
void scene_to_keylist(struct bDopeSheet *ads, struct Scene *sce, struct AnimKeylist *keylist, int saction_flag)
bool actkeyblock_is_valid(const ActKeyColumn *ac)
enum eActKeyBlock_Hold eActKeyBlock_Flag
void ob_to_keylist(struct bDopeSheet *ads, struct Object *ob, struct AnimKeylist *keylist, int saction_flag)
eKeyframeShapeDrawOpts
@ KEYFRAME_SHAPE_INSIDE
@ KEYFRAME_SHAPE_BOTH
@ KEYFRAME_SHAPE_FRAME
const ActKeyColumn * ED_keylist_array(const struct AnimKeylist *keylist)
bool ED_keylist_is_empty(const struct AnimKeylist *keylist)
bool ED_keylist_selected_keys_frame_range(const struct AnimKeylist *keylist, Range2f *r_frame_range)
void fcurve_to_keylist(struct AnimData *adt, struct FCurve *fcu, struct AnimKeylist *keylist, int saction_flag)
void cachefile_to_keylist(struct bDopeSheet *ads, struct CacheFile *cache_file, struct AnimKeylist *keylist, int saction_flag)
eKeyframeHandleDrawOpts
@ KEYFRAME_HANDLE_VECTOR
@ KEYFRAME_HANDLE_FREE
@ KEYFRAME_HANDLE_AUTO_CLAMP
@ KEYFRAME_HANDLE_NONE
@ KEYFRAME_HANDLE_AUTO
@ KEYFRAME_HANDLE_ALIGNED
struct ActKeyColumn ActKeyColumn
const struct ActKeyColumn * ED_keylist_find_exact(const struct AnimKeylist *keylist, float cfra)
int actkeyblock_get_valid_hold(const ActKeyColumn *ac)
struct AnimKeylist * ED_keylist_create(void)
void mask_to_keylist(struct bDopeSheet *ads, struct MaskLayer *masklay, struct AnimKeylist *keylist)
void summary_to_keylist(struct bAnimContext *ac, struct AnimKeylist *keylist, int saction_flag)
bool ED_keylist_all_keys_frame_range(const struct AnimKeylist *keylist, Range2f *r_frame_range)
void agroup_to_keylist(struct AnimData *adt, struct bActionGroup *agrp, struct AnimKeylist *keylist, int saction_flag)
int64_t ED_keylist_array_len(const struct AnimKeylist *keylist)
void gpencil_to_keylist(struct bDopeSheet *ads, struct bGPdata *gpd, struct AnimKeylist *keylist, bool active)
const struct ListBase * ED_keylist_listbase(const struct AnimKeylist *keylist)
struct ActKeyBlockInfo ActKeyBlockInfo
eKeyframeExtremeDrawOpts
@ KEYFRAME_EXTREME_MAX
@ KEYFRAME_EXTREME_MIXED
@ KEYFRAME_EXTREME_NONE
@ KEYFRAME_EXTREME_FLAT
@ KEYFRAME_EXTREME_MIN
void action_to_keylist(struct AnimData *adt, struct bAction *act, struct AnimKeylist *keylist, int saction_flag)
bool active
all scheduled work for the GPU.
__int64 int64_t
Definition: stdint.h:89
struct ActKeyColumn * parent
struct ActKeyColumn * left
struct ActKeyColumn * right
ActKeyBlockInfo block
struct ActKeyColumn * next
struct ActKeyColumn * prev