Blender V5.0
ED_keyframes_keylist.hh
Go to the documentation of this file.
1/* SPDX-FileCopyrightText: 2009 Blender Authors, Joshua Leung. All rights reserved.
2 *
3 * SPDX-License-Identifier: GPL-2.0-or-later */
4
8
9#pragma once
10
11#include "BLI_bounds_types.hh"
13
14#include "DNA_curve_types.h"
15
16#include "ANIM_action.hh"
17
18struct AnimData;
19struct CacheFile;
20struct FCurve;
21struct GreasePencil;
24struct ListBase;
25struct MaskLayer;
26struct Object;
27struct Scene;
28struct Strip;
29struct bAction;
30struct bActionGroup;
31struct bAnimContext;
32struct bDopeSheet;
33struct bGPDlayer;
34struct bGPdata;
35
36namespace blender::animrig {
37class Action;
38class Slot;
39} // namespace blender::animrig
40
41/* ****************************** Base Structs ****************************** */
42
43struct AnimKeylist;
44
48 short flag;
50 short conflict;
51
53 char sel;
54};
55
58 /* ListBase linkage */
60
61 /* sorting-tree linkage */
66
67 /* keyframe info */
73 short sel;
74 float cfra;
75
76 /* key-block info */
78
79 /* number of curves and keys in this column */
81};
82
96
97/* *********************** Keyframe Drawing ****************************** */
98
101 /* only the border */
103 /* only the inside filling */
105 /* the whole thing */
107};
108
120
133
134/* ******************************* Methods ****************************** */
135
137void ED_keylist_free(AnimKeylist *keylist);
139const ActKeyColumn *ED_keylist_find_exact(const AnimKeylist *keylist, float cfra);
140const ActKeyColumn *ED_keylist_find_next(const AnimKeylist *keylist, float cfra);
141const ActKeyColumn *ED_keylist_find_prev(const AnimKeylist *keylist, float cfra);
142const ActKeyColumn *ED_keylist_find_closest(const AnimKeylist *keylist, float cfra);
144 const blender::Bounds<float> frame_range);
145bool ED_keylist_is_empty(const AnimKeylist *keylist);
146const ListBase /*ActKeyColumn*/ *ED_keylist_listbase(const AnimKeylist *keylist);
148 blender::Bounds<float> *r_frame_range);
154 blender::Bounds<float> *r_frame_range);
155const ActKeyColumn *ED_keylist_array(const AnimKeylist *keylist);
157
158/* Key-data Generation --------------- */
159
173 FCurve *fcu,
174 AnimKeylist *keylist,
175 int saction_flag,
176 blender::float2 range,
177 bool use_nla_remapping);
178/* Action Group */
180 bActionGroup *agrp,
181 AnimKeylist *keylist,
182 int saction_flag,
183 blender::float2 range);
184/* Action */
185
201 bAction *dna_action,
202 AnimKeylist *keylist,
203 int saction_flag,
204 blender::float2 range);
205
206/* Object */
207void ob_to_keylist(
208 bDopeSheet *ads, Object *ob, AnimKeylist *keylist, int saction_flag, blender::float2 range);
209/* Cache File */
211 CacheFile *cache_file,
212 AnimKeylist *keylist,
213 int saction_flag);
214/* Scene */
216 bDopeSheet *ads, Scene *sce, AnimKeylist *keylist, int saction_flag, blender::float2 range);
217/* DopeSheet Summary */
219 AnimKeylist *keylist,
220 int saction_flag,
221 blender::float2 range);
222
252 ID *animated_id,
255 AnimKeylist *keylist,
256 int /* eSAction_Flag */ saction_flag,
257 blender::float2 range);
258
259/* Grease Pencil datablock summary (Legacy) */
260void gpencil_to_keylist(bDopeSheet *ads, bGPdata *gpd, AnimKeylist *keylist, bool active);
261
262/* Grease Pencil Cels. */
264 const GreasePencilLayer *gpl,
265 AnimKeylist *keylist,
266 int saction_flag);
267
268/* Grease Pencil Layer Group. */
270 const GreasePencilLayerTreeGroup *layer_group,
271 AnimKeylist *keylist,
272 const int saction_flag);
273/* Grease Pencil Data-Block. */
275 const GreasePencil *grease_pencil,
276 AnimKeylist *keylist,
277 const int saction_flag,
278 bool active_layer_only);
279/* Grease Pencil Layer (Legacy) */
280void gpl_to_keylist(bDopeSheet *ads, bGPDlayer *gpl, AnimKeylist *keylist);
281
282/* Mask */
283void mask_to_keylist(bDopeSheet *ads, MaskLayer *masklay, AnimKeylist *keylist);
284
285/* Sequencer strip data. */
286void sequencer_strip_to_keylist(const Strip &strip, AnimKeylist &keylist, Scene &scene);
287
288/* ActKeyColumn API ---------------- */
289
291bool actkeyblock_is_valid(const ActKeyColumn *ac);
292
Functions and classes to work with Actions.
eBezTriple_KeyframeType
@ ACTKEYBLOCK_FLAG_ANY_HOLD
@ ACTKEYBLOCK_FLAG_MOVING_HOLD
@ ACTKEYBLOCK_FLAG_GPENCIL
@ ACTKEYBLOCK_FLAG_NON_BEZIER
@ ACTKEYBLOCK_FLAG_STATIC_HOLD
void cachefile_to_keylist(bDopeSheet *ads, CacheFile *cache_file, AnimKeylist *keylist, int saction_flag)
void fcurve_to_keylist(AnimData *adt, FCurve *fcu, AnimKeylist *keylist, int saction_flag, blender::float2 range, bool use_nla_remapping)
void gpl_to_keylist(bDopeSheet *ads, bGPDlayer *gpl, AnimKeylist *keylist)
void ob_to_keylist(bDopeSheet *ads, Object *ob, AnimKeylist *keylist, int saction_flag, blender::float2 range)
bool actkeyblock_is_valid(const ActKeyColumn *ac)
bool ED_keylist_all_keys_frame_range(const AnimKeylist *keylist, blender::Bounds< float > *r_frame_range)
eKeyframeShapeDrawOpts
@ KEYFRAME_SHAPE_INSIDE
@ KEYFRAME_SHAPE_BOTH
@ KEYFRAME_SHAPE_FRAME
void summary_to_keylist(bAnimContext *ac, AnimKeylist *keylist, int saction_flag, blender::float2 range)
const ActKeyColumn * ED_keylist_find_any_between(const AnimKeylist *keylist, const blender::Bounds< float > frame_range)
const ActKeyColumn * ED_keylist_find_closest(const AnimKeylist *keylist, float cfra)
const ActKeyColumn * ED_keylist_find_exact(const AnimKeylist *keylist, float cfra)
void grease_pencil_cels_to_keylist(AnimData *adt, const GreasePencilLayer *gpl, AnimKeylist *keylist, int saction_flag)
void grease_pencil_data_block_to_keylist(AnimData *adt, const GreasePencil *grease_pencil, AnimKeylist *keylist, const int saction_flag, bool active_layer_only)
eKeyframeHandleDrawOpts
@ KEYFRAME_HANDLE_VECTOR
@ KEYFRAME_HANDLE_FREE
@ KEYFRAME_HANDLE_AUTO_CLAMP
@ KEYFRAME_HANDLE_NONE
@ KEYFRAME_HANDLE_AUTO
@ KEYFRAME_HANDLE_ALIGNED
void ED_keylist_prepare_for_direct_access(AnimKeylist *keylist)
void mask_to_keylist(bDopeSheet *ads, MaskLayer *masklay, AnimKeylist *keylist)
AnimKeylist * ED_keylist_create()
int actkeyblock_get_valid_hold(const ActKeyColumn *ac)
void action_group_to_keylist(AnimData *adt, bActionGroup *agrp, AnimKeylist *keylist, int saction_flag, blender::float2 range)
void ED_keylist_free(AnimKeylist *keylist)
void sequencer_strip_to_keylist(const Strip &strip, AnimKeylist &keylist, Scene &scene)
void gpencil_to_keylist(bDopeSheet *ads, bGPdata *gpd, AnimKeylist *keylist, bool active)
void action_to_keylist(AnimData *adt, bAction *dna_action, AnimKeylist *keylist, int saction_flag, blender::float2 range)
const ActKeyColumn * ED_keylist_find_next(const AnimKeylist *keylist, float cfra)
const ActKeyColumn * ED_keylist_find_prev(const AnimKeylist *keylist, float cfra)
bool ED_keylist_selected_keys_frame_range(const AnimKeylist *keylist, blender::Bounds< float > *r_frame_range)
int64_t ED_keylist_array_len(const AnimKeylist *keylist)
const ListBase * ED_keylist_listbase(const AnimKeylist *keylist)
bool ED_keylist_is_empty(const AnimKeylist *keylist)
void grease_pencil_layer_group_to_keylist(AnimData *adt, const GreasePencilLayerTreeGroup *layer_group, AnimKeylist *keylist, const int saction_flag)
eKeyframeExtremeDrawOpts
@ KEYFRAME_EXTREME_MAX
@ KEYFRAME_EXTREME_MIXED
@ KEYFRAME_EXTREME_NONE
@ KEYFRAME_EXTREME_FLAT
@ KEYFRAME_EXTREME_MIN
void action_slot_summary_to_keylist(bAnimContext *ac, ID *animated_id, blender::animrig::Action &action, blender::animrig::slot_handle_t slot_handle, AnimKeylist *keylist, int saction_flag, blender::float2 range)
void scene_to_keylist(bDopeSheet *ads, Scene *sce, AnimKeylist *keylist, int saction_flag, blender::float2 range)
const ActKeyColumn * ED_keylist_array(const AnimKeylist *keylist)
long long int int64_t
#define active
decltype(::ActionSlot::handle) slot_handle_t
VecBase< float, 2 > float2
ActKeyColumn * parent
eBezTriple_KeyframeType key_type
ActKeyColumn * prev
ActKeyColumn * right
ActKeyColumn * next
ActKeyColumn * left
ActKeyBlockInfo block
Definition DNA_ID.h:414