Cleanup: Remove unused depsgraph function
[blender.git] / source / blender / makesdna / DNA_action_types.h
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) 2001-2002 by NaN Holding BV.
17  * All rights reserved.
18  */
19
20 /** \file
21  * \ingroup DNA
22  *
23  * Define actions data-block for the animation system.
24  * A collection of animation curves and drivers to be assigned to data-blocks
25  * or sequenced in the non-linear-editor (NLA).
26  */
27
28 #ifndef __DNA_ACTION_TYPES_H__
29 #define __DNA_ACTION_TYPES_H__
30
31 #include "DNA_listBase.h"
32 #include "DNA_ID.h"
33 #include "DNA_view2d_types.h"
34 #include "DNA_vec_types.h"
35 #include "DNA_userdef_types.h" /* ThemeWireColor */
36
37 struct Collection;
38 struct GHash;
39 struct Object;
40 struct SpaceLink;
41
42 /* ************************************************ */
43 /* Visualization */
44
45 /* Motion Paths ------------------------------------ */
46 /* (used for Pose Channels and Objects) */
47
48 /* Data point for motion path (mpv) */
49 typedef struct bMotionPathVert {
50   /** Coordinates of point in 3D-space. */
51   float co[3];
52   /** Quick settings. */
53   int flag;
54 } bMotionPathVert;
55
56 /* bMotionPathVert->flag */
57 typedef enum eMotionPathVert_Flag {
58   /* vert is selected */
59   MOTIONPATH_VERT_SEL = (1 << 0),
60   MOTIONPATH_VERT_KEY = (1 << 1),
61 } eMotionPathVert_Flag;
62
63 /* ........ */
64
65 /* Motion Path data cache (mpath)
66  * - for elements providing transforms (i.e. Objects or PoseChannels)
67  */
68 typedef struct bMotionPath {
69   /** Path samples. */
70   bMotionPathVert *points;
71   /** The number of cached verts. */
72   int length;
73
74   /** For drawing paths, the start frame number. */
75   int start_frame;
76   /** For drawing paths, the end frame number. */
77   int end_frame;
78
79   /** Optional custom color. */
80   float color[3];
81   /** Line thickness. */
82   int line_thickness;
83   /** Baking settings - eMotionPath_Flag. */
84   int flag;
85
86   /* Used for drawing. */
87   struct GPUVertBuf *points_vbo;
88   struct GPUBatch *batch_line;
89   struct GPUBatch *batch_points;
90   void *_pad;
91 } bMotionPath;
92
93 /* bMotionPath->flag */
94 typedef enum eMotionPath_Flag {
95   /* (for bones) path represents the head of the bone */
96   MOTIONPATH_FLAG_BHEAD = (1 << 0),
97   /* motion path is being edited */
98   MOTIONPATH_FLAG_EDIT = (1 << 1),
99   /* Custom colors */
100   MOTIONPATH_FLAG_CUSTOM = (1 << 2),
101   /* Draw lines or only points */
102   MOTIONPATH_FLAG_LINES = (1 << 3),
103 } eMotionPath_Flag;
104
105 /* Visualization General --------------------------- */
106 /* for Objects or Poses (but NOT PoseChannels) */
107
108 /* Animation Visualization Settings (avs) */
109 typedef struct bAnimVizSettings {
110   /* General Settings ------------------------ */
111   /** #eAnimViz_RecalcFlags. */
112   short recalc;
113
114   /* Motion Path Settings ------------------- */
115   /** #eMotionPath_Types. */
116   short path_type;
117   /** Number of frames between points indicated on the paths. */
118   short path_step;
119
120   /** #eMotionPaths_ViewFlag. */
121   short path_viewflag;
122   /** #eMotionPaths_BakeFlag. */
123   short path_bakeflag;
124   char _pad[6];
125
126   /** Start and end frames of path-calculation range. */
127   int path_sf, path_ef;
128   /** Number of frames before/after current frame to show. */
129   int path_bc, path_ac;
130 } bAnimVizSettings;
131
132 /* bAnimVizSettings->recalc */
133 typedef enum eAnimViz_RecalcFlags {
134   /* motionpaths need recalculating */
135   ANIMVIZ_RECALC_PATHS = (1 << 0),
136 } eAnimViz_RecalcFlags;
137
138 /* bAnimVizSettings->path_type */
139 typedef enum eMotionPaths_Types {
140   /* show the paths along their entire ranges */
141   MOTIONPATH_TYPE_RANGE = 0,
142   /* only show the parts of the paths around the current frame */
143   MOTIONPATH_TYPE_ACFRA = 1,
144 } eMotionPath_Types;
145
146 /* bAnimVizSettings->path_viewflag */
147 typedef enum eMotionPaths_ViewFlag {
148   /* show frames on path */
149   MOTIONPATH_VIEW_FNUMS = (1 << 0),
150   /* show keyframes on path */
151   MOTIONPATH_VIEW_KFRAS = (1 << 1),
152   /* show keyframe/frame numbers */
153   MOTIONPATH_VIEW_KFNOS = (1 << 2),
154   /* find keyframes in whole action (instead of just in matching group name) */
155   MOTIONPATH_VIEW_KFACT = (1 << 3),
156   /* draw lines on path */
157   MOTIONPATH_VIEW_LINES = (1 << 4),
158 } eMotionPath_ViewFlag;
159
160 /* bAnimVizSettings->path_bakeflag */
161 typedef enum eMotionPaths_BakeFlag {
162   /** motion paths directly associated with this block of settings needs updating */
163   MOTIONPATH_BAKE_NEEDS_RECALC = (1 << 0),
164   /** for bones - calculate head-points for curves instead of tips */
165   MOTIONPATH_BAKE_HEADS = (1 << 1),
166   /** motion paths exist for AnimVizSettings instance - set when calc for first time,
167    * and unset when clearing */
168   MOTIONPATH_BAKE_HAS_PATHS = (1 << 2),
169 } eMotionPath_BakeFlag;
170
171 /* runtime */
172 #
173 #
174 typedef struct bPoseChannelDrawData {
175   float solid_color[4];
176   float wire_color[4];
177
178   int bbone_matrix_len;
179   /* keep last */
180   float bbone_matrix[0][4][4];
181 } bPoseChannelDrawData;
182
183 struct DualQuat;
184 struct Mat4;
185
186 typedef struct bPoseChannel_Runtime {
187   /* Cached dual quaternion for deformation. */
188   struct DualQuat deform_dual_quat;
189
190   /* B-Bone shape data: copy of the segment count for validation. */
191   int bbone_segments;
192
193   /* Rest and posed matrices for segments. */
194   struct Mat4 *bbone_rest_mats;
195   struct Mat4 *bbone_pose_mats;
196
197   /* Delta from rest to pose in matrix and DualQuat form. */
198   struct Mat4 *bbone_deform_mats;
199   struct DualQuat *bbone_dual_quats;
200 } bPoseChannel_Runtime;
201
202 /* ************************************************ */
203 /* Poses */
204
205 /* PoseChannel ------------------------------------ */
206
207 /* PoseChannel
208  *
209  * A PoseChannel stores the results of Actions and transform information
210  * with respect to the restposition of Armature bones
211  */
212 typedef struct bPoseChannel {
213   struct bPoseChannel *next, *prev;
214
215   /** User-Defined Properties on this PoseChannel. */
216   IDProperty *prop;
217
218   /** Constraints that act on this PoseChannel. */
219   ListBase constraints;
220   /** Need to match bone name length: MAXBONENAME. */
221   char name[64];
222
223   /** Dynamic, for detecting transform changes. */
224   short flag;
225   /** Settings for IK bones. */
226   short ikflag;
227   /** Protect channels from being transformed. */
228   short protectflag;
229   /** Index of action-group this bone belongs to (0 = default/no group). */
230   short agrp_index;
231   /** For quick detecting which constraints affect this channel. */
232   char constflag;
233   /** Copy of bone flag, so you can work with library armatures, not for runtime use. */
234   char selectflag;
235   char drawflag;
236   char bboneflag DNA_DEPRECATED;
237   char _pad0[4];
238
239   /** Set on read file or rebuild pose. */
240   struct Bone *bone;
241   /** Set on read file or rebuild pose. */
242   struct bPoseChannel *parent;
243   /** Set on read file or rebuild pose, the 'ik' child, for b-bones. */
244   struct bPoseChannel *child;
245
246   /** "IK trees" - only while evaluating pose. */
247   struct ListBase iktree;
248   /** Spline-IK "trees" - only while evaluating pose. */
249   struct ListBase siktree;
250
251   /** Motion path cache for this bone. */
252   bMotionPath *mpath;
253   /** Draws custom object instead of default bone shape. */
254   struct Object *custom;
255   /**
256    * Odd feature, display with another bones transform.
257    * needed in rare cases for advanced rigs,
258    * since the alternative is highly complicated - campbell
259    */
260   struct bPoseChannel *custom_tx;
261   float custom_scale;
262
263   char _pad1[4];
264
265   /** Transforms - written in by actions or transform. */
266   float loc[3];
267   float size[3];
268
269   /**
270    * Rotations - written in by actions or transform
271    * (but only one representation gets used at any time)
272    */
273   /** Euler rotation. */
274   float eul[3];
275   /** Quaternion rotation. */
276   float quat[4];
277   /** Axis-angle rotation. */
278   float rotAxis[3], rotAngle;
279   /** #eRotationModes - rotation representation to use. */
280   short rotmode;
281   char _pad[2];
282
283   /** Matrix result of loc/quat/size, and where we put deform in, see next line */
284   float chan_mat[4][4];
285   /**
286    * Constraints accumulate here. in the end, pose_mat = bone->arm_mat * chan_mat
287    * this matrix is object space.
288    */
289   float pose_mat[4][4];
290   /** For display, pose_mat with bone length applied. */
291   float disp_mat[4][4];
292   /** For display, pose_mat with bone length applied and translated to tai.l*/
293   float disp_tail_mat[4][4];
294   /**
295    * Inverse result of constraints.
296    * doesn't include effect of restposition, parent, and local transform.
297    */
298   float constinv[4][4];
299
300   /** Actually pose_mat[3]. */
301   float pose_head[3];
302   /** Also used for drawing help lines. */
303   float pose_tail[3];
304
305   /** DOF constraint, note! - these are stored in degrees, not radians. */
306   float limitmin[3], limitmax[3];
307   /** DOF stiffness. */
308   float stiffness[3];
309   float ikstretch;
310   /** Weight of joint rotation constraint. */
311   float ikrotweight;
312   /** Weight of joint stretch constraint. */
313   float iklinweight;
314
315   /**
316    * Curved bones settings - these are for animating,
317    * and are applied on top of the copies in pchan->bone
318    */
319   float roll1, roll2;
320   float curve_in_x, curve_in_y;
321   float curve_out_x, curve_out_y;
322   float ease1, ease2;
323   float scale_in_x, scale_in_y;
324   float scale_out_x, scale_out_y;
325
326   /** B-Bone custom handles; set on read file or rebuild pose based on pchan->bone data. */
327   struct bPoseChannel *bbone_prev;
328   struct bPoseChannel *bbone_next;
329
330   /** Use for outliner. */
331   void *temp;
332   /** Runtime data for color and bbone segment matrix. */
333   bPoseChannelDrawData *draw_data;
334
335   /** Points to an original pose channel. */
336   struct bPoseChannel *orig_pchan;
337
338   /** Runtime data (keep last). */
339   struct bPoseChannel_Runtime runtime;
340 } bPoseChannel;
341
342 /* PoseChannel (transform) flags */
343 typedef enum ePchan_Flag {
344   /* has transforms */
345   POSE_LOC = (1 << 0),
346   POSE_ROT = (1 << 1),
347   POSE_SIZE = (1 << 2),
348
349   /* old IK/cache stuff
350    * - used to be here from (1 << 3) to (1 << 8)
351    *   but has been repurposed since 2.77.2
352    *   as they haven't been used in over 10 years
353    */
354
355   /* has BBone deforms */
356   POSE_BBONE_SHAPE = (1 << 3),
357
358   /* IK/Pose solving */
359   POSE_CHAIN = (1 << 9),
360   POSE_DONE = (1 << 10),
361   /* visualization */
362   POSE_KEY = (1 << 11),
363   POSE_STRIDE = (1 << 12),
364   /* standard IK solving */
365   POSE_IKTREE = (1 << 13),
366 #if 0
367   /* has Spline IK */
368   POSE_HAS_IKS = (1 << 14),
369 #endif
370   /* spline IK solving */
371   POSE_IKSPLINE = (1 << 15),
372 } ePchan_Flag;
373
374 /* PoseChannel constflag (constraint detection) */
375 typedef enum ePchan_ConstFlag {
376   PCHAN_HAS_IK = (1 << 0),
377   PCHAN_HAS_CONST = (1 << 1),
378   /* only used for drawing Posemode, not stored in channel */
379   PCHAN_HAS_ACTION = (1 << 2),
380   PCHAN_HAS_TARGET = (1 << 3),
381   /* only for drawing Posemode too */
382   PCHAN_HAS_STRIDE = (1 << 4),
383   /* spline IK */
384   PCHAN_HAS_SPLINEIK = (1 << 5),
385 } ePchan_ConstFlag;
386
387 /* PoseChannel->ikflag */
388 typedef enum ePchan_IkFlag {
389   BONE_IK_NO_XDOF = (1 << 0),
390   BONE_IK_NO_YDOF = (1 << 1),
391   BONE_IK_NO_ZDOF = (1 << 2),
392
393   BONE_IK_XLIMIT = (1 << 3),
394   BONE_IK_YLIMIT = (1 << 4),
395   BONE_IK_ZLIMIT = (1 << 5),
396
397   BONE_IK_ROTCTL = (1 << 6),
398   BONE_IK_LINCTL = (1 << 7),
399
400   BONE_IK_NO_XDOF_TEMP = (1 << 10),
401   BONE_IK_NO_YDOF_TEMP = (1 << 11),
402   BONE_IK_NO_ZDOF_TEMP = (1 << 12),
403 } ePchan_IkFlag;
404
405 /* PoseChannel->drawflag */
406 typedef enum ePchan_DrawFlag {
407   PCHAN_DRAW_NO_CUSTOM_BONE_SIZE = (1 << 0),
408 } ePchan_DrawFlag;
409
410 #define PCHAN_CUSTOM_DRAW_SIZE(pchan) \
411   (pchan)->custom_scale *( \
412       ((pchan)->drawflag & PCHAN_DRAW_NO_CUSTOM_BONE_SIZE) ? 1.0f : (pchan)->bone->length)
413
414 #ifdef DNA_DEPRECATED_ALLOW
415 /* PoseChannel->bboneflag */
416 typedef enum ePchan_BBoneFlag {
417   /* Use custom reference bones (for roll and handle alignment), instead of immediate neighbors */
418   PCHAN_BBONE_CUSTOM_HANDLES = (1 << 1),
419   /* Evaluate start handle as being "relative" */
420   PCHAN_BBONE_CUSTOM_START_REL = (1 << 2),
421   /* Evaluate end handle as being "relative" */
422   PCHAN_BBONE_CUSTOM_END_REL = (1 << 3),
423 } ePchan_BBoneFlag;
424 #endif
425
426 /* PoseChannel->rotmode and Object->rotmode */
427 typedef enum eRotationModes {
428   /* quaternion rotations (default, and for older Blender versions) */
429   ROT_MODE_QUAT = 0,
430   /* euler rotations - keep in sync with enum in BLI_math.h */
431   /** Blender 'default' (classic) - must be as 1 to sync with BLI_math_rotation.h defines */
432   ROT_MODE_EUL = 1,
433   ROT_MODE_XYZ = 1,
434   ROT_MODE_XZY = 2,
435   ROT_MODE_YXZ = 3,
436   ROT_MODE_YZX = 4,
437   ROT_MODE_ZXY = 5,
438   ROT_MODE_ZYX = 6,
439   /* NOTE: space is reserved here for 18 other possible
440    * euler rotation orders not implemented
441    */
442   /* axis angle rotations */
443   ROT_MODE_AXISANGLE = -1,
444
445   ROT_MODE_MIN = ROT_MODE_AXISANGLE, /* sentinel for Py API */
446   ROT_MODE_MAX = ROT_MODE_ZYX,
447 } eRotationModes;
448
449 /* Pose ------------------------------------ */
450
451 /* Pose-Object.
452  *
453  * It is only found under ob->pose. It is not library data, even
454  * though there is a define for it (hack for the outliner).
455  */
456 typedef struct bPose {
457   /** List of pose channels, PoseBones in RNA. */
458   ListBase chanbase;
459   /** Ghash for quicker string lookups. */
460   struct GHash *chanhash;
461
462   /* Flat array of pose channels. It references pointers from
463    * chanbase. Used for quick pose channel lookup from an index.
464    */
465   bPoseChannel **chan_array;
466
467   short flag;
468   char _pad[2];
469   /** Proxy layer: copy from armature, gets synced. */
470   unsigned int proxy_layer;
471   char _pad1[4];
472
473   /** Local action time of this pose. */
474   float ctime;
475   /** Applied to object. */
476   float stride_offset[3];
477   /** Result of match and cycles, applied in BKE_pose_where_is(). */
478   float cyclic_offset[3];
479
480   /** List of bActionGroups. */
481   ListBase agroups;
482
483   /** Index of active group (starts from 1). */
484   int active_group;
485   /** Ik solver to use, see ePose_IKSolverType. */
486   int iksolver;
487   /** Temporary IK data, depends on the IK solver. Not saved in file. */
488   void *ikdata;
489   /** IK solver parameters, structure depends on iksolver. */
490   void *ikparam;
491
492   /** Settings for visualization of bone animation. */
493   bAnimVizSettings avs;
494   /** Proxy active bone name, MAXBONENAME. */
495   char proxy_act_bone[64];
496 } bPose;
497
498 /* Pose->flag */
499 typedef enum ePose_Flags {
500   /* results in BKE_pose_rebuild being called */
501   POSE_RECALC = (1 << 0),
502   /* prevents any channel from getting overridden by anim from IPO */
503   POSE_LOCKED = (1 << 1),
504   /* clears the POSE_LOCKED flag for the next time the pose is evaluated */
505   POSE_DO_UNLOCK = (1 << 2),
506   /* pose has constraints which depend on time (used when depsgraph updates for a new frame) */
507   POSE_CONSTRAINTS_TIMEDEPEND = (1 << 3),
508   /* recalculate bone paths */
509   POSE_RECALCPATHS = (1 << 4),
510   /* set by BKE_pose_rebuild to give a chance to the IK solver to rebuild IK tree */
511   POSE_WAS_REBUILT = (1 << 5),
512   POSE_FLAG_DEPRECATED = (1 << 6), /* deprecated. */
513   /* pose constraint flags needs to be updated */
514   POSE_CONSTRAINTS_NEED_UPDATE_FLAGS = (1 << 7),
515   /* Use auto IK in pose mode */
516   POSE_AUTO_IK = (1 << 8),
517   /* Use x-axis mirror in pose mode */
518   POSE_MIRROR_EDIT = (1 << 9),
519   /* Use relative mirroring in mirror mode */
520   POSE_MIRROR_RELATIVE = (1 << 10),
521 } ePose_Flags;
522
523 /* IK Solvers ------------------------------------ */
524
525 /* bPose->iksolver and bPose->ikparam->iksolver */
526 typedef enum ePose_IKSolverType {
527   IKSOLVER_STANDARD = 0,
528   IKSOLVER_ITASC = 1,
529 } ePose_IKSolverType;
530
531 /* header for all bPose->ikparam structures */
532 typedef struct bIKParam {
533   int iksolver;
534 } bIKParam;
535
536 /* bPose->ikparam when bPose->iksolver=1 */
537 typedef struct bItasc {
538   int iksolver;
539   float precision;
540   short numiter;
541   short numstep;
542   float minstep;
543   float maxstep;
544   short solver;
545   short flag;
546   float feedback;
547   /** Max velocity to SDLS solver. */
548   float maxvel;
549   /** Maximum damping for DLS solver. */
550   float dampmax;
551   /** Threshold of singular value from which the damping start progressively. */
552   float dampeps;
553 } bItasc;
554
555 /* bItasc->flag */
556 typedef enum eItasc_Flags {
557   ITASC_AUTO_STEP = (1 << 0),
558   ITASC_INITIAL_REITERATION = (1 << 1),
559   ITASC_REITERATION = (1 << 2),
560   ITASC_SIMULATION = (1 << 3),
561 } eItasc_Flags;
562
563 /* bItasc->solver */
564 typedef enum eItasc_Solver {
565   ITASC_SOLVER_SDLS = 0, /* selective damped least square, suitable for CopyPose constraint */
566   ITASC_SOLVER_DLS = 1,  /* damped least square with numerical filtering of damping */
567 } eItasc_Solver;
568
569 /* ************************************************ */
570 /* Action */
571
572 /* Groups -------------------------------------- */
573
574 /* Action-Channel Group (agrp)
575  *
576  * These are stored as a list per-Action, and are only used to
577  * group that Action's channels in an Animation Editor.
578  *
579  * Even though all FCurves live in a big list per Action, each group they are in also
580  * holds references to the achans within that list which belong to it. Care must be taken to
581  * ensure that action-groups never end up being the sole 'owner' of a channel.
582  *
583  * This is also exploited for bone-groups. Bone-Groups are stored per bPose, and are used
584  * primarily to color bones in the 3d-view. There are other benefits too, but those are mostly
585  * related to Action-Groups.
586  *
587  * Note that these two uses each have their own RNA 'ActionGroup' and 'BoneGroup'.
588  */
589 typedef struct bActionGroup {
590   struct bActionGroup *next, *prev;
591
592   /**
593    * Note: this must not be touched by standard listbase functions
594    * which would clear links to other channels.
595    */
596   ListBase channels;
597
598   /** Settings for this action-group. */
599   int flag;
600   /**
601    * Index of custom color set to use when used for bones
602    * (0=default - used for all old files, -1=custom set).
603    */
604   int customCol;
605   /** Name of the group. */
606   char name[64];
607
608   /** Color set to use when customCol == -1. */
609   ThemeWireColor cs;
610 } bActionGroup;
611
612 /* Action Group flags */
613 typedef enum eActionGroup_Flag {
614   /* group is selected */
615   AGRP_SELECTED = (1 << 0),
616   /* group is 'active' / last selected one */
617   AGRP_ACTIVE = (1 << 1),
618   /* keyframes/channels belonging to it cannot be edited */
619   AGRP_PROTECTED = (1 << 2),
620   /* for UI (DopeSheet), sub-channels are shown */
621   AGRP_EXPANDED = (1 << 3),
622   /* sub-channels are not evaluated */
623   AGRP_MUTED = (1 << 4),
624   /* sub-channels are not visible in Graph Editor */
625   AGRP_NOTVISIBLE = (1 << 5),
626   /* for UI (Graph Editor), sub-channels are shown */
627   AGRP_EXPANDED_G = (1 << 6),
628
629   /* sub channel modifiers off */
630   AGRP_MODIFIERS_OFF = (1 << 7),
631
632   AGRP_TEMP = (1 << 30),
633   AGRP_MOVED = (1u << 31),
634 } eActionGroup_Flag;
635
636 /* Actions -------------------------------------- */
637
638 /* Action - reusable F-Curve 'bag'  (act)
639  *
640  * This contains F-Curves that may affect settings from more than one ID blocktype and/or datablock
641  * (i.e. sub-data linked/used directly to the ID block that the animation data is linked to),
642  * but with the restriction that the other unrelated data (i.e. data that is not directly used or
643  * linked to by the source ID block).
644  *
645  * It serves as a 'unit' of reusable animation information (i.e. keyframes/motion data),
646  * that affects a group of related settings (as defined by the user).
647  */
648 typedef struct bAction {
649   /** ID-serialisation for relinking. */
650   ID id;
651
652   /** Function-curves (FCurve). */
653   ListBase curves;
654   /** Legacy data - Action Channels (bActionChannel) in pre-2.5 animation system. */
655   ListBase chanbase DNA_DEPRECATED;
656   /** Groups of function-curves (bActionGroup). */
657   ListBase groups;
658   /** Markers local to the Action (used to provide Pose-Libraries). */
659   ListBase markers;
660
661   /** Settings for this action. */
662   int flag;
663   /** Index of the active marker. */
664   int active_marker;
665
666   /**
667    * Type of ID-blocks that action can be assigned to
668    * (if 0, will be set to whatever ID first evaluates it).
669    */
670   int idroot;
671   char _pad[4];
672 } bAction;
673
674 /* Flags for the action */
675 typedef enum eAction_Flags {
676   /* flags for displaying in UI */
677   ACT_COLLAPSED = (1 << 0),
678   ACT_SELECTED = (1 << 1),
679
680   /* flags for evaluation/editing */
681   ACT_MUTED = (1 << 9),
682   ACT_PROTECTED = (1 << 10),
683   ACT_DISABLED = (1 << 11),
684 } eAction_Flags;
685
686 /* ************************************************ */
687 /* Action/Dopesheet Editor */
688
689 /* Storage for Dopesheet/Grease-Pencil Editor data */
690 typedef struct bDopeSheet {
691   /** Currently ID_SCE (for Dopesheet), and ID_SC (for Grease Pencil). */
692   ID *source;
693   /** Cache for channels (only initialized when pinned). */  // XXX not used!
694   ListBase chanbase;
695
696   /** Object group for option to only include objects that belong to this Collection. */
697   struct Collection *filter_grp;
698   /** String to search for in displayed names of F-Curves, or NlaTracks/GP Layers/etc. */
699   char searchstr[64];
700
701   /** Flags to use for filtering data. */
702   int filterflag;
703   int filterflag2;
704   /** Standard flags. */
705   int flag;
706
707   /** `index + 1` of channel to rename - only gets set by renaming operator. */
708   int renameIndex;
709 } bDopeSheet;
710
711 /* DopeSheet filter-flag */
712 typedef enum eDopeSheet_FilterFlag {
713   /* general filtering */
714   /** only include channels relating to selected data */
715   ADS_FILTER_ONLYSEL = (1 << 0),
716
717   /* temporary filters */
718   /** for 'Drivers' editor - only include Driver data from AnimData */
719   ADS_FILTER_ONLYDRIVERS = (1 << 1),
720   /** for 'NLA' editor - only include NLA data from AnimData */
721   ADS_FILTER_ONLYNLA = (1 << 2),
722   /** for Graph Editor - used to indicate whether to include a filtering flag or not */
723   ADS_FILTER_SELEDIT = (1 << 3),
724
725   /* general filtering */
726   /** for 'DopeSheet' Editors - include 'summary' line */
727   ADS_FILTER_SUMMARY = (1 << 4),
728
729   /* datatype-based filtering */
730   ADS_FILTER_NOSHAPEKEYS = (1 << 6),
731   ADS_FILTER_NOMESH = (1 << 7),
732   /** for animdata on object level, if we only want to concentrate on materials/etc. */
733   ADS_FILTER_NOOBJ = (1 << 8),
734   ADS_FILTER_NOLAT = (1 << 9),
735   ADS_FILTER_NOCAM = (1 << 10),
736   ADS_FILTER_NOMAT = (1 << 11),
737   ADS_FILTER_NOLAM = (1 << 12),
738   ADS_FILTER_NOCUR = (1 << 13),
739   ADS_FILTER_NOWOR = (1 << 14),
740   ADS_FILTER_NOSCE = (1 << 15),
741   ADS_FILTER_NOPART = (1 << 16),
742   ADS_FILTER_NOMBA = (1 << 17),
743   ADS_FILTER_NOARM = (1 << 18),
744   ADS_FILTER_NONTREE = (1 << 19),
745   ADS_FILTER_NOTEX = (1 << 20),
746   ADS_FILTER_NOSPK = (1 << 21),
747   ADS_FILTER_NOLINESTYLE = (1 << 22),
748   ADS_FILTER_NOMODIFIERS = (1 << 23),
749   ADS_FILTER_NOGPENCIL = (1 << 24),
750   /* NOTE: all new datablock filters will have to go in filterflag2 (see below) */
751
752   /* NLA-specific filters */
753   /** if the AnimData block has no NLA data, don't include to just show Action-line */
754   ADS_FILTER_NLA_NOACT = (1 << 25),
755
756   /* general filtering 3 */
757   /** include 'hidden' channels too (i.e. those from hidden Objects/Bones) */
758   ADS_FILTER_INCL_HIDDEN = (1 << 26),
759   /** show only F-Curves which are disabled/have errors - for debugging drivers */
760   ADS_FILTER_ONLY_ERRORS = (1 << 28),
761
762   /* GPencil Mode */
763   /** GP Mode - Only show datablocks used in the scene */
764   ADS_FILTER_GP_3DONLY = (1 << 29),
765
766   /** combination filters (some only used at runtime) */
767   ADS_FILTER_NOOBDATA = (ADS_FILTER_NOCAM | ADS_FILTER_NOMAT | ADS_FILTER_NOLAM |
768                          ADS_FILTER_NOCUR | ADS_FILTER_NOPART | ADS_FILTER_NOARM |
769                          ADS_FILTER_NOSPK | ADS_FILTER_NOMODIFIERS),
770 } eDopeSheet_FilterFlag;
771
772 /* DopeSheet filter-flags - Overflow (filterflag2) */
773 typedef enum eDopeSheet_FilterFlag2 {
774   ADS_FILTER_NOCACHEFILES = (1 << 1),
775 } eDopeSheet_FilterFlag2;
776
777 /* DopeSheet general flags */
778 typedef enum eDopeSheet_Flag {
779   /** when summary is shown, it is collapsed, so all other channels get hidden */
780   ADS_FLAG_SUMMARY_COLLAPSED = (1 << 0),
781   /** show filters for datablocks */
782   ADS_FLAG_SHOW_DBFILTERS = (1 << 1),
783
784   /** use fuzzy/partial string matches when ADS_FILTER_BY_FCU_NAME is enabled
785    * (WARNING: expensive operation) */
786   ADS_FLAG_FUZZY_NAMES = (1 << 2),
787   /** do not sort datablocks (mostly objects) by name (NOTE: potentially expensive operation) */
788   ADS_FLAG_NO_DB_SORT = (1 << 3),
789 } eDopeSheet_Flag;
790
791 typedef struct SpaceAction_Runtime {
792   char flag;
793   char _pad0[7];
794 } SpaceAction_Runtime;
795
796 /* Action Editor Space. This is defined here instead of in DNA_space_types.h */
797 typedef struct SpaceAction {
798   struct SpaceLink *next, *prev;
799   /** Storage of regions for inactive spaces. */
800   ListBase regionbase;
801   char spacetype;
802   char link_flag;
803   char _pad0[6];
804   /* End 'SpaceLink' header. */
805
806   /** Copied to region. */
807   View2D v2d DNA_DEPRECATED;
808
809   /** The currently active action. */
810   bAction *action;
811   /** The currently active context (when not showing action). */
812   bDopeSheet ads;
813
814   /** For Time-Slide transform mode drawing - current frame?. */
815   float timeslide;
816
817   short flag;
818   /* Editing context */
819   char mode;
820   /* Storage for sub-space types. */
821   char mode_prev;
822   /** Automatic keyframe snapping mode  . */
823   char autosnap;
824   /** (eTimeline_Cache_Flag). */
825   char cache_display;
826   char _pad1[6];
827
828   SpaceAction_Runtime runtime;
829 } SpaceAction;
830
831 /* SpaceAction flag */
832 typedef enum eSAction_Flag {
833   /* during transform (only set for TimeSlide) */
834   SACTION_MOVING = (1 << 0),
835   /* show sliders */
836   SACTION_SLIDERS = (1 << 1),
837   /* draw time in seconds instead of time in frames */
838   SACTION_DRAWTIME = (1 << 2),
839   /* don't filter action channels according to visibility */
840   // SACTION_NOHIDE = (1 << 3), // XXX deprecated... old animation system
841   /* don't kill overlapping keyframes after transform */
842   SACTION_NOTRANSKEYCULL = (1 << 4),
843   /* don't include keyframes that are out of view */
844   // SACTION_HORIZOPTIMISEON = (1 << 5), // XXX deprecated... old irrelevant trick
845   /* show pose-markers (local to action) in Action Editor mode  */
846   SACTION_POSEMARKERS_SHOW = (1 << 6),
847   /* don't draw action channels using group colors (where applicable) */
848   SACTION_NODRAWGCOLORS = (1 << 7),
849   /* don't draw current frame number beside frame indicator */
850   SACTION_NODRAWCFRANUM = (1 << 8),
851   /* don't perform realtime updates */
852   SACTION_NOREALTIMEUPDATES = (1 << 10),
853   /* move markers as well as keyframes */
854   SACTION_MARKERS_MOVE = (1 << 11),
855   /* show interpolation type */
856   SACTION_SHOW_INTERPOLATION = (1 << 12),
857   /* show extremes */
858   SACTION_SHOW_EXTREMES = (1 << 13),
859   /* show vertical line markers */
860   SACTION_SHOW_MARKER_LINES = (1 << 14),
861 } eSAction_Flag;
862
863 /* SpaceAction_Runtime.flag */
864 typedef enum eSAction_Runtime_Flag {
865   /** Temporary flag to force channel selections to be synced with main */
866   SACTION_RUNTIME_FLAG_NEED_CHAN_SYNC = (1 << 0),
867 } eSAction_Runtime_Flag;
868
869 /* SpaceAction Mode Settings */
870 typedef enum eAnimEdit_Context {
871   /* action on the active object */
872   SACTCONT_ACTION = 0,
873   /* list of all shapekeys on the active object, linked with their F-Curves */
874   SACTCONT_SHAPEKEY = 1,
875   /* editing of gpencil data */
876   SACTCONT_GPENCIL = 2,
877   /* dopesheet (default) */
878   SACTCONT_DOPESHEET = 3,
879   /* mask */
880   SACTCONT_MASK = 4,
881   /* cache file */
882   SACTCONT_CACHEFILE = 5,
883   /* timeline - replacement for the standalone "timeline editor" */
884   SACTCONT_TIMELINE = 6,
885 } eAnimEdit_Context;
886
887 /* SpaceAction AutoSnap Settings (also used by other Animation Editors) */
888 typedef enum eAnimEdit_AutoSnap {
889   /* no auto-snap */
890   SACTSNAP_OFF = 0,
891   /* snap to 1.0 frame/second intervals */
892   SACTSNAP_STEP = 1,
893   /* snap to actual frames/seconds (nla-action time) */
894   SACTSNAP_FRAME = 2,
895   /* snap to nearest marker */
896   SACTSNAP_MARKER = 3,
897   /* snap to actual seconds (nla-action time) */
898   SACTSNAP_SECOND = 4,
899   /* snap to 1.0 second increments */
900   SACTSNAP_TSTEP = 5,
901 } eAnimEdit_AutoSnap;
902
903 /* SAction->cache_display */
904 typedef enum eTimeline_Cache_Flag {
905   TIME_CACHE_DISPLAY = (1 << 0),
906   TIME_CACHE_SOFTBODY = (1 << 1),
907   TIME_CACHE_PARTICLES = (1 << 2),
908   TIME_CACHE_CLOTH = (1 << 3),
909   TIME_CACHE_SMOKE = (1 << 4),
910   TIME_CACHE_DYNAMICPAINT = (1 << 5),
911   TIME_CACHE_RIGIDBODY = (1 << 6),
912 } eTimeline_Cache_Flag;
913
914 /* ************************************************ */
915 /* Legacy Data */
916
917 /* WARNING: Action Channels are now deprecated... they were part of the old animation system!
918  *        (ONLY USED FOR DO_VERSIONS...)
919  *
920  * Action Channels belong to Actions. They are linked with an IPO block, and can also own
921  * Constraint Channels in certain situations.
922  *
923  * Action-Channels can only belong to one group at a time, but they still live the Action's
924  * list of achans (to preserve backwards compatibility, and also minimize the code
925  * that would need to be recoded). Grouped achans are stored at the start of the list, according
926  * to the position of the group in the list, and their position within the group.
927  */
928 typedef struct bActionChannel {
929   struct bActionChannel *next, *prev;
930   /** Action Group this Action Channel belongs to. */
931   bActionGroup *grp;
932
933   /** IPO block this action channel references. */
934   struct Ipo *ipo;
935   /** Constraint Channels (when Action Channel represents an Object or Bone). */
936   ListBase constraintChannels;
937
938   /** Settings accessed via bitmapping. */
939   int flag;
940   /** Channel name, MAX_NAME. */
941   char name[64];
942   /** Temporary setting - may be used to indicate group that channel belongs to during syncing. */
943   int temp;
944 } bActionChannel;
945
946 /* Action Channel flags (ONLY USED FOR DO_VERSIONS...) */
947 typedef enum eActionChannelFlag {
948   ACHAN_SELECTED = (1 << 0),
949   ACHAN_HIGHLIGHTED = (1 << 1),
950   ACHAN_HIDDEN = (1 << 2),
951   ACHAN_PROTECTED = (1 << 3),
952   ACHAN_EXPANDED = (1 << 4),
953   ACHAN_SHOWIPO = (1 << 5),
954   ACHAN_SHOWCONS = (1 << 6),
955   ACHAN_MOVED = (1u << 31),
956 } eActionChannelFlag;
957
958 #endif /* __DNA_ACTION_TYPES_H__ */