Buildbot: Fix scl command prefix
[blender.git] / source / blender / makesdna / DNA_mask_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) 2012 Blender Foundation.
17  * All rights reserved.
18  */
19
20 /** \file
21  * \ingroup DNA
22  *
23  * Mask data-blocks are collections of 2D curves to be used
24  * for image masking in the compositor and sequencer.
25  */
26
27 #ifndef __DNA_MASK_TYPES_H__
28 #define __DNA_MASK_TYPES_H__
29
30 #include "DNA_defs.h"
31 #include "DNA_ID.h"
32 #include "DNA_listBase.h"
33 #include "DNA_curve_types.h"
34
35 typedef struct Mask {
36   ID id;
37   struct AnimData *adt;
38   /** Mask layers. */
39   ListBase masklayers;
40   /** Index of active mask layer (-1 == None). */
41   int masklay_act;
42   /** Total number of mask layers. */
43   int masklay_tot;
44
45   /** Frames, used by the sequencer. */
46   int sfra, efra;
47
48   /** For anim info. */
49   int flag;
50   char _pad[4];
51 } Mask;
52
53 typedef struct MaskParent {
54   //* /* Parenting flags */ /* not used. */
55   // int flag;
56   /** Type of parenting. */
57   int id_type;
58   /** Type of parenting. */
59   int type;
60   /**
61    * ID block of entity to which mask/spline is parented to
62    * in case of parenting to movie tracking data set to MovieClip datablock.
63    */
64   ID *id;
65   /**
66    * Entity of parent to which parenting happened
67    * in case of parenting to movie tracking data contains name of layer.
68    */
69   char parent[64];
70   /**
71    * Sub-entity of parent to which parenting happened
72    * in case of parenting to movie tracking data contains name of track.
73    */
74   char sub_parent[64];
75   /**
76    * Track location at the moment of parenting,
77    * stored in mask space.
78    */
79   float parent_orig[2];
80
81   /** Original corners of plane track at the moment of parenting. */
82   float parent_corners_orig[4][2];
83 } MaskParent;
84
85 typedef struct MaskSplinePointUW {
86   /** U coordinate along spline segment and weight of this point. */
87   float u, w;
88   /** Different flags of this point. */
89   int flag;
90 } MaskSplinePointUW;
91
92 typedef struct MaskSplinePoint {
93   /** Actual point coordinates and it's handles . */
94   BezTriple bezt;
95   char _pad[4];
96   /** Number of uv feather values. */
97   int tot_uw;
98   /** Feather UV values. */
99   MaskSplinePointUW *uw;
100   /** Parenting information of particular spline point. */
101   MaskParent parent;
102 } MaskSplinePoint;
103
104 typedef struct MaskSpline {
105   struct MaskSpline *next, *prev;
106
107   /** Different spline flag (closed, ...). */
108   short flag;
109   /** Feather offset method. */
110   char offset_mode;
111   /** Weight interpolation. */
112   char weight_interp;
113
114   /** Total number of points. */
115   int tot_point;
116   /** Points which defines spline itself. */
117   MaskSplinePoint *points;
118   /** Parenting information of the whole spline. */
119   MaskParent parent;
120
121   /** Deformed copy of 'points' BezTriple data - not saved. */
122   MaskSplinePoint *points_deform;
123 } MaskSpline;
124
125 /* one per frame */
126 typedef struct MaskLayerShape {
127   struct MaskLayerShape *next, *prev;
128
129   /** U coordinate along spline segment and weight of this point. */
130   float *data;
131   /** To ensure no buffer overruns's: alloc size is (tot_vert * MASK_OBJECT_SHAPE_ELEM_SIZE). */
132   int tot_vert;
133   /** Different flags of this point. */
134   int frame;
135   /** Animation flag. */
136   char flag;
137   char _pad[7];
138 } MaskLayerShape;
139
140 /* cast to this for convenience, not saved */
141 #define MASK_OBJECT_SHAPE_ELEM_SIZE 8 /* 3x 2D points + weight + radius == 8 */
142
143 #
144 #
145 typedef struct MaskLayerShapeElem {
146   float value[MASK_OBJECT_SHAPE_ELEM_SIZE];
147 } MaskLayerShapeElem;
148
149 typedef struct MaskLayer {
150   struct MaskLayer *next, *prev;
151
152   /** Name of the mask layer (64 = MAD_ID_NAME - 2). */
153   char name[64];
154
155   /** List of splines which defines this mask layer. */
156   ListBase splines;
157   ListBase splines_shapes;
158
159   /** Active spline. */
160   struct MaskSpline *act_spline;
161   /** Active point. */
162   struct MaskSplinePoint *act_point;
163
164   /* blending options */
165   float alpha;
166   char blend;
167   char blend_flag;
168   char falloff;
169   char _pad[7];
170
171   /** For animation. */
172   char flag;
173   /** Matching 'Object' flag of the same name - eventually use in the outliner . */
174   char restrictflag;
175 } MaskLayer;
176
177 /* MaskParent->flag */
178 /* #define MASK_PARENT_ACTIVE  (1 << 0) */ /* UNUSED */
179
180 /* MaskParent->type */
181 enum {
182   MASK_PARENT_POINT_TRACK = 0, /* parenting happens to point track */
183   MASK_PARENT_PLANE_TRACK = 1, /* parenting happens to plane track */
184 };
185
186 /* MaskSpline->flag */
187 /* reserve (1 << 0) for SELECT */
188 enum {
189   MASK_SPLINE_CYCLIC = (1 << 1),
190   MASK_SPLINE_NOFILL = (1 << 2),
191   MASK_SPLINE_NOINTERSECT = (1 << 3),
192 };
193
194 /* MaskSpline->weight_interp */
195 enum {
196   MASK_SPLINE_INTERP_LINEAR = 1,
197   MASK_SPLINE_INTERP_EASE = 2,
198 };
199
200 /* MaskSpline->offset_mode */
201 enum {
202   MASK_SPLINE_OFFSET_EVEN = 0,
203   MASK_SPLINE_OFFSET_SMOOTH = 1,
204 };
205
206 /* ob->restrictflag */
207 #define MASK_RESTRICT_VIEW (1 << 0)
208 #define MASK_RESTRICT_SELECT (1 << 1)
209 #define MASK_RESTRICT_RENDER (1 << 2)
210
211 /* SpaceClip->mask_draw_flag */
212 #define MASK_DRAWFLAG_SMOOTH (1 << 0)
213 #define MASK_DRAWFLAG_OVERLAY (1 << 1)
214
215 /* copy of eSpaceImage_UVDT */
216 /* SpaceClip->mask_draw_type */
217 enum {
218   MASK_DT_OUTLINE = 0,
219   MASK_DT_DASH = 1,
220   MASK_DT_BLACK = 2,
221   MASK_DT_WHITE = 3,
222 };
223
224 /* MaskSpaceInfo->overlay_mode */
225 enum {
226   MASK_OVERLAY_ALPHACHANNEL = 0,
227   MASK_OVERLAY_COMBINED = 1,
228 };
229
230 /* masklay->blend */
231 enum {
232   MASK_BLEND_ADD = 0,
233   MASK_BLEND_SUBTRACT = 1,
234   MASK_BLEND_LIGHTEN = 2,
235   MASK_BLEND_DARKEN = 3,
236   MASK_BLEND_MUL = 4,
237   MASK_BLEND_REPLACE = 5,
238   MASK_BLEND_DIFFERENCE = 6,
239   MASK_BLEND_MERGE_ADD = 7,
240   MASK_BLEND_MERGE_SUBTRACT = 8,
241 };
242
243 /* masklay->blend_flag */
244 enum {
245   MASK_BLENDFLAG_INVERT = (1 << 0),
246 };
247
248 /* masklay->flag */
249 enum {
250   MASK_LAYERFLAG_LOCKED = (1 << 4),
251   MASK_LAYERFLAG_SELECT = (1 << 5),
252
253   /* no holes */
254   MASK_LAYERFLAG_FILL_DISCRETE = (1 << 6),
255   MASK_LAYERFLAG_FILL_OVERLAP = (1 << 7),
256 };
257
258 /* masklay_shape->flag */
259 enum {
260   MASK_SHAPE_SELECT = (1 << 0),
261 };
262
263 /* mask->flag */
264 enum {
265   MASK_ANIMF_EXPAND = (1 << 4),
266 };
267
268 #endif /* __DNA_MASK_TYPES_H__ */