Merged changes in the trunk up to revision 43040.
[blender.git] / source / blender / makesdna / DNA_linestyle_types.h
1 /* DNA_linestyle_types.h
2  *
3  * $Id$
4  *
5  * ***** BEGIN GPL LICENSE BLOCK *****
6  *
7  * This program is free software; you can redistribute it and/or
8  * modify it under the terms of the GNU General Public License
9  * as published by the Free Software Foundation; either version 2
10  * of the License, or (at your option) any later version.
11  *
12  * This program is distributed in the hope that it will be useful,
13  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15  * GNU General Public License for more details.
16  *
17  * You should have received a copy of the GNU General Public License
18  * along with this program; if not, write to the Free Software Foundation,
19  * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
20  *
21  * The Original Code is Copyright (C) 2010 Blender Foundation.
22  * All rights reserved.
23  *
24  * The Original Code is: all of this file.
25  *
26  * Contributor(s): none yet.
27  *
28  * ***** END GPL LICENSE BLOCK *****
29  */
30
31 #ifndef DNA_LINESTYLE_TYPES_H
32 #define DNA_LINESTYLE_TYPES_H
33
34 #include "DNA_listBase.h"
35 #include "DNA_ID.h"
36
37 struct ColorBand;
38 struct CurveMapping;
39
40 typedef struct LineStyleModifier {
41         struct LineStyleModifier *next, *prev;
42
43         char name[32];
44         int type;
45         float influence;
46         int flags;
47         int blend;
48
49 } LineStyleModifier;
50
51 /* LineStyleModifier::type */
52 #define LS_MODIFIER_ALONG_STROKE            1
53 #define LS_MODIFIER_DISTANCE_FROM_CAMERA    2
54 #define LS_MODIFIER_DISTANCE_FROM_OBJECT    3
55 #define LS_MODIFIER_MATERIAL                4
56 #define LS_MODIFIER_SAMPLING                5
57 #define LS_MODIFIER_BEZIER_CURVE            6
58 #define LS_MODIFIER_SINUS_DISPLACEMENT      7
59 #define LS_MODIFIER_SPATIAL_NOISE           8
60 #define LS_MODIFIER_PERLIN_NOISE_1D         9
61 #define LS_MODIFIER_PERLIN_NOISE_2D        10
62 #define LS_MODIFIER_BACKBONE_STRETCHER     11
63 #define LS_MODIFIER_TIP_REMOVER            12
64 #define LS_MODIFIER_CALLIGRAPHY            13
65 #define LS_MODIFIER_POLYGONIZATION         14
66 #define LS_MODIFIER_GUIDING_LINES          15
67 #define LS_MODIFIER_BLUEPRINT              16
68 #define LS_MODIFIER_NUM                    17
69
70 /* LineStyleModifier::flags */
71 #define LS_MODIFIER_ENABLED     1
72 #define LS_MODIFIER_EXPANDED    2
73
74 /* flags (for color) */
75 #define LS_MODIFIER_USE_RAMP  1
76
77 /* flags (for alpha & thickness) */
78 #define LS_MODIFIER_USE_CURVE    1
79 #define LS_MODIFIER_INVERT       2
80
81 /* blend (for alpha & thickness) */
82 #define LS_VALUE_BLEND  0
83 #define LS_VALUE_ADD    1
84 #define LS_VALUE_MULT   2
85 #define LS_VALUE_SUB    3
86 #define LS_VALUE_DIV    4
87 #define LS_VALUE_DIFF   5
88 #define LS_VALUE_MIN    6
89 #define LS_VALUE_MAX    7
90
91 /* Along Stroke modifiers */
92
93 typedef struct LineStyleColorModifier_AlongStroke {
94         struct LineStyleModifier modifier;
95
96         struct ColorBand *color_ramp;
97
98 } LineStyleColorModifier_AlongStroke;
99
100 typedef struct LineStyleAlphaModifier_AlongStroke {
101         struct LineStyleModifier modifier;
102
103         struct CurveMapping     *curve;
104         int flags;
105         int pad;
106
107 } LineStyleAlphaModifier_AlongStroke;
108
109 typedef struct LineStyleThicknessModifier_AlongStroke {
110         struct LineStyleModifier modifier;
111
112         struct CurveMapping     *curve;
113         int flags;
114         float value_min, value_max;
115         int pad;
116
117 } LineStyleThicknessModifier_AlongStroke;
118
119 /* Distance from Camera modifiers */
120
121 typedef struct LineStyleColorModifier_DistanceFromCamera {
122         struct LineStyleModifier modifier;
123
124         struct ColorBand *color_ramp;
125         float range_min, range_max;
126
127 } LineStyleColorModifier_DistanceFromCamera;
128
129 typedef struct LineStyleAlphaModifier_DistanceFromCamera {
130         struct LineStyleModifier modifier;
131
132         struct CurveMapping     *curve;
133         int flags;
134         float range_min, range_max;
135         int pad;
136
137 } LineStyleAlphaModifier_DistanceFromCamera;
138
139 typedef struct LineStyleThicknessModifier_DistanceFromCamera {
140         struct LineStyleModifier modifier;
141
142         struct CurveMapping     *curve;
143         int flags;
144         float range_min, range_max;
145         float value_min, value_max;
146         int pad;
147
148 } LineStyleThicknessModifier_DistanceFromCamera;
149
150 /* Distance from Object modifiers */
151
152 typedef struct LineStyleColorModifier_DistanceFromObject {
153         struct LineStyleModifier modifier;
154
155         struct Object *target;
156         struct ColorBand *color_ramp;
157         float range_min, range_max;
158
159 } LineStyleColorModifier_DistanceFromObject;
160
161 typedef struct LineStyleAlphaModifier_DistanceFromObject {
162         struct LineStyleModifier modifier;
163
164         struct Object *target;
165         struct CurveMapping     *curve;
166         int flags;
167         float range_min, range_max;
168         int pad;
169
170 } LineStyleAlphaModifier_DistanceFromObject;
171
172 typedef struct LineStyleThicknessModifier_DistanceFromObject {
173         struct LineStyleModifier modifier;
174
175         struct Object *target;
176         struct CurveMapping     *curve;
177         int flags;
178         float range_min, range_max;
179         float value_min, value_max;
180         int pad;
181
182 } LineStyleThicknessModifier_DistanceFromObject;
183
184 /* Material modifiers */
185
186 /* mat_attr */
187 #define LS_MODIFIER_MATERIAL_DIFF       1
188 #define LS_MODIFIER_MATERIAL_DIFF_R     2
189 #define LS_MODIFIER_MATERIAL_DIFF_G     3
190 #define LS_MODIFIER_MATERIAL_DIFF_B     4
191 #define LS_MODIFIER_MATERIAL_SPEC       5
192 #define LS_MODIFIER_MATERIAL_SPEC_R     6
193 #define LS_MODIFIER_MATERIAL_SPEC_G     7
194 #define LS_MODIFIER_MATERIAL_SPEC_B     8
195 #define LS_MODIFIER_MATERIAL_SPEC_HARD  9
196 #define LS_MODIFIER_MATERIAL_ALPHA      10
197
198 typedef struct LineStyleColorModifier_Material {
199         struct LineStyleModifier modifier;
200
201         struct ColorBand *color_ramp;
202         int flags;
203         int mat_attr;
204
205 } LineStyleColorModifier_Material;
206
207 typedef struct LineStyleAlphaModifier_Material {
208         struct LineStyleModifier modifier;
209
210         struct CurveMapping     *curve;
211         int flags;
212         int mat_attr;
213
214 } LineStyleAlphaModifier_Material;
215
216 typedef struct LineStyleThicknessModifier_Material {
217         struct LineStyleModifier modifier;
218
219         struct CurveMapping     *curve;
220         int flags;
221         float value_min, value_max;
222         int mat_attr;
223
224 } LineStyleThicknessModifier_Material;
225
226 /* Geometry modifiers */
227
228 typedef struct LineStyleGeometryModifier_Sampling {
229         struct LineStyleModifier modifier;
230
231         float sampling;
232         int pad;
233
234 } LineStyleGeometryModifier_Sampling;
235
236 typedef struct LineStyleGeometryModifier_BezierCurve {
237         struct LineStyleModifier modifier;
238
239         float error;
240         int pad;
241
242 } LineStyleGeometryModifier_BezierCurve;
243
244 typedef struct LineStyleGeometryModifier_SinusDisplacement {
245         struct LineStyleModifier modifier;
246
247         float wavelength, amplitude, phase;
248         int pad;
249
250 } LineStyleGeometryModifier_SinusDisplacement;
251
252 /* LineStyleGeometryModifier_SpatialNoise::flags */
253 #define LS_MODIFIER_SPATIAL_NOISE_SMOOTH      1
254 #define LS_MODIFIER_SPATIAL_NOISE_PURERANDOM  2
255
256 typedef struct LineStyleGeometryModifier_SpatialNoise {
257         struct LineStyleModifier modifier;
258
259         float amplitude, scale;
260         unsigned int octaves;
261         int flags;
262
263 } LineStyleGeometryModifier_SpatialNoise;
264
265 typedef struct LineStyleGeometryModifier_PerlinNoise1D {
266         struct LineStyleModifier modifier;
267
268         float frequency, amplitude, angle;
269         unsigned int octaves;
270         int seed;
271         int pad1;
272
273 } LineStyleGeometryModifier_PerlinNoise1D;
274
275 typedef struct LineStyleGeometryModifier_PerlinNoise2D {
276         struct LineStyleModifier modifier;
277
278         float frequency, amplitude, angle;
279         unsigned int octaves;
280         int seed;
281         int pad1;
282
283 } LineStyleGeometryModifier_PerlinNoise2D;
284
285 typedef struct LineStyleGeometryModifier_BackboneStretcher {
286         struct LineStyleModifier modifier;
287
288         float backbone_length;
289         int pad;
290
291 } LineStyleGeometryModifier_BackboneStretcher;
292
293 typedef struct LineStyleGeometryModifier_TipRemover {
294         struct LineStyleModifier modifier;
295
296         float tip_length;
297         int pad;
298
299 } LineStyleGeometryModifier_TipRemover;
300
301 typedef struct LineStyleGeometryModifier_Polygonalization {
302         struct LineStyleModifier modifier;
303
304         float error;
305         int pad;
306
307 } LineStyleGeometryModifier_Polygonalization;
308
309 typedef struct LineStyleGeometryModifier_GuidingLines {
310         struct LineStyleModifier modifier;
311
312         float offset;
313         int pad;
314
315 } LineStyleGeometryModifier_GuidingLines;
316
317 /* LineStyleGeometryModifier_BluePrintLines::shape */
318 #define LS_MODIFIER_BLUEPRINT_CIRCLES   1
319 #define LS_MODIFIER_BLUEPRINT_ELLIPSES  2
320 #define LS_MODIFIER_BLUEPRINT_SQUARES   4
321
322 typedef struct LineStyleGeometryModifier_Blueprint {
323         struct LineStyleModifier modifier;
324
325         int flags;
326         unsigned int rounds;
327         float backbone_length;
328         unsigned int random_radius;
329         unsigned int random_center;
330         unsigned int random_backbone;
331
332 } LineStyleGeometryModifier_Blueprint;
333
334 /* Calligraphic thickness modifier */
335
336 typedef struct LineStyleThicknessModifier_Calligraphy {
337         struct LineStyleModifier modifier;
338
339         float min_thickness, max_thickness;
340         float orientation;
341         int pad;
342
343 } LineStyleThicknessModifier_Calligraphy;
344
345 /* FreestyleLineStyle::panel */
346 #define LS_PANEL_STROKES      1
347 #define LS_PANEL_COLOR        2
348 #define LS_PANEL_ALPHA        3
349 #define LS_PANEL_THICKNESS    4
350 #define LS_PANEL_GEOMETRY     5
351 #define LS_PANEL_MISC         6
352
353 /* FreestyleLineStyle::flag */
354 #define LS_DS_EXPAND          1  /* for animation editors */
355 #define LS_SAME_OBJECT        2
356 #define LS_DASHED_LINE        4
357 #define LS_MATERIAL_BOUNDARY  8
358 #define LS_MIN_2D_LENGTH      16
359 #define LS_MAX_2D_LENGTH      32
360 #define LS_NO_CHAINING        64
361 #define LS_MIN_2D_ANGLE       128
362 #define LS_MAX_2D_ANGLE       256
363 #define LS_SPLIT_LENGTH       512
364
365 /* FreestyleLineStyle::chaining */
366 #define LS_CHAINING_PLAIN    1
367 #define LS_CHAINING_SKETCHY  2
368
369 /* FreestyleLineStyle::caps */
370 #define LS_CAPS_BUTT    1
371 #define LS_CAPS_ROUND   2
372 #define LS_CAPS_SQUARE  3
373
374 typedef struct FreestyleLineStyle {
375         ID id;
376         struct AnimData *adt;
377
378         float r, g, b, alpha;
379         float thickness;
380         int flag, caps;
381         int chaining;
382         unsigned int rounds;
383         float split_length;
384         float min_angle, max_angle; /* for splitting */
385         float min_length, max_length;
386         unsigned short dash1, gap1, dash2, gap2, dash3, gap3;
387         int panel; /* for UI */
388
389         ListBase color_modifiers;
390         ListBase alpha_modifiers;
391         ListBase thickness_modifiers;
392         ListBase geometry_modifiers;
393
394 } FreestyleLineStyle;
395
396 #endif