Merged changes in the trunk up to revision 44436.
[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_2D_OFFSET              17
69 #define LS_MODIFIER_2D_TRANSFORM           18
70 #define LS_MODIFIER_NUM                    19
71
72 /* LineStyleModifier::flags */
73 #define LS_MODIFIER_ENABLED     1
74 #define LS_MODIFIER_EXPANDED    2
75
76 /* flags (for color) */
77 #define LS_MODIFIER_USE_RAMP  1
78
79 /* flags (for alpha & thickness) */
80 #define LS_MODIFIER_USE_CURVE    1
81 #define LS_MODIFIER_INVERT       2
82
83 /* blend (for alpha & thickness) */
84 #define LS_VALUE_BLEND  0
85 #define LS_VALUE_ADD    1
86 #define LS_VALUE_MULT   2
87 #define LS_VALUE_SUB    3
88 #define LS_VALUE_DIV    4
89 #define LS_VALUE_DIFF   5
90 #define LS_VALUE_MIN    6
91 #define LS_VALUE_MAX    7
92
93 /* Along Stroke modifiers */
94
95 typedef struct LineStyleColorModifier_AlongStroke {
96         struct LineStyleModifier modifier;
97
98         struct ColorBand *color_ramp;
99
100 } LineStyleColorModifier_AlongStroke;
101
102 typedef struct LineStyleAlphaModifier_AlongStroke {
103         struct LineStyleModifier modifier;
104
105         struct CurveMapping     *curve;
106         int flags;
107         int pad;
108
109 } LineStyleAlphaModifier_AlongStroke;
110
111 typedef struct LineStyleThicknessModifier_AlongStroke {
112         struct LineStyleModifier modifier;
113
114         struct CurveMapping     *curve;
115         int flags;
116         float value_min, value_max;
117         int pad;
118
119 } LineStyleThicknessModifier_AlongStroke;
120
121 /* Distance from Camera modifiers */
122
123 typedef struct LineStyleColorModifier_DistanceFromCamera {
124         struct LineStyleModifier modifier;
125
126         struct ColorBand *color_ramp;
127         float range_min, range_max;
128
129 } LineStyleColorModifier_DistanceFromCamera;
130
131 typedef struct LineStyleAlphaModifier_DistanceFromCamera {
132         struct LineStyleModifier modifier;
133
134         struct CurveMapping     *curve;
135         int flags;
136         float range_min, range_max;
137         int pad;
138
139 } LineStyleAlphaModifier_DistanceFromCamera;
140
141 typedef struct LineStyleThicknessModifier_DistanceFromCamera {
142         struct LineStyleModifier modifier;
143
144         struct CurveMapping     *curve;
145         int flags;
146         float range_min, range_max;
147         float value_min, value_max;
148         int pad;
149
150 } LineStyleThicknessModifier_DistanceFromCamera;
151
152 /* Distance from Object modifiers */
153
154 typedef struct LineStyleColorModifier_DistanceFromObject {
155         struct LineStyleModifier modifier;
156
157         struct Object *target;
158         struct ColorBand *color_ramp;
159         float range_min, range_max;
160
161 } LineStyleColorModifier_DistanceFromObject;
162
163 typedef struct LineStyleAlphaModifier_DistanceFromObject {
164         struct LineStyleModifier modifier;
165
166         struct Object *target;
167         struct CurveMapping     *curve;
168         int flags;
169         float range_min, range_max;
170         int pad;
171
172 } LineStyleAlphaModifier_DistanceFromObject;
173
174 typedef struct LineStyleThicknessModifier_DistanceFromObject {
175         struct LineStyleModifier modifier;
176
177         struct Object *target;
178         struct CurveMapping     *curve;
179         int flags;
180         float range_min, range_max;
181         float value_min, value_max;
182         int pad;
183
184 } LineStyleThicknessModifier_DistanceFromObject;
185
186 /* Material modifiers */
187
188 /* mat_attr */
189 #define LS_MODIFIER_MATERIAL_DIFF       1
190 #define LS_MODIFIER_MATERIAL_DIFF_R     2
191 #define LS_MODIFIER_MATERIAL_DIFF_G     3
192 #define LS_MODIFIER_MATERIAL_DIFF_B     4
193 #define LS_MODIFIER_MATERIAL_SPEC       5
194 #define LS_MODIFIER_MATERIAL_SPEC_R     6
195 #define LS_MODIFIER_MATERIAL_SPEC_G     7
196 #define LS_MODIFIER_MATERIAL_SPEC_B     8
197 #define LS_MODIFIER_MATERIAL_SPEC_HARD  9
198 #define LS_MODIFIER_MATERIAL_ALPHA      10
199
200 typedef struct LineStyleColorModifier_Material {
201         struct LineStyleModifier modifier;
202
203         struct ColorBand *color_ramp;
204         int flags;
205         int mat_attr;
206
207 } LineStyleColorModifier_Material;
208
209 typedef struct LineStyleAlphaModifier_Material {
210         struct LineStyleModifier modifier;
211
212         struct CurveMapping     *curve;
213         int flags;
214         int mat_attr;
215
216 } LineStyleAlphaModifier_Material;
217
218 typedef struct LineStyleThicknessModifier_Material {
219         struct LineStyleModifier modifier;
220
221         struct CurveMapping     *curve;
222         int flags;
223         float value_min, value_max;
224         int mat_attr;
225
226 } LineStyleThicknessModifier_Material;
227
228 /* Geometry modifiers */
229
230 typedef struct LineStyleGeometryModifier_Sampling {
231         struct LineStyleModifier modifier;
232
233         float sampling;
234         int pad;
235
236 } LineStyleGeometryModifier_Sampling;
237
238 typedef struct LineStyleGeometryModifier_BezierCurve {
239         struct LineStyleModifier modifier;
240
241         float error;
242         int pad;
243
244 } LineStyleGeometryModifier_BezierCurve;
245
246 typedef struct LineStyleGeometryModifier_SinusDisplacement {
247         struct LineStyleModifier modifier;
248
249         float wavelength, amplitude, phase;
250         int pad;
251
252 } LineStyleGeometryModifier_SinusDisplacement;
253
254 /* LineStyleGeometryModifier_SpatialNoise::flags */
255 #define LS_MODIFIER_SPATIAL_NOISE_SMOOTH      1
256 #define LS_MODIFIER_SPATIAL_NOISE_PURERANDOM  2
257
258 typedef struct LineStyleGeometryModifier_SpatialNoise {
259         struct LineStyleModifier modifier;
260
261         float amplitude, scale;
262         unsigned int octaves;
263         int flags;
264
265 } LineStyleGeometryModifier_SpatialNoise;
266
267 typedef struct LineStyleGeometryModifier_PerlinNoise1D {
268         struct LineStyleModifier modifier;
269
270         float frequency, amplitude, angle;
271         unsigned int octaves;
272         int seed;
273         int pad1;
274
275 } LineStyleGeometryModifier_PerlinNoise1D;
276
277 typedef struct LineStyleGeometryModifier_PerlinNoise2D {
278         struct LineStyleModifier modifier;
279
280         float frequency, amplitude, angle;
281         unsigned int octaves;
282         int seed;
283         int pad1;
284
285 } LineStyleGeometryModifier_PerlinNoise2D;
286
287 typedef struct LineStyleGeometryModifier_BackboneStretcher {
288         struct LineStyleModifier modifier;
289
290         float backbone_length;
291         int pad;
292
293 } LineStyleGeometryModifier_BackboneStretcher;
294
295 typedef struct LineStyleGeometryModifier_TipRemover {
296         struct LineStyleModifier modifier;
297
298         float tip_length;
299         int pad;
300
301 } LineStyleGeometryModifier_TipRemover;
302
303 typedef struct LineStyleGeometryModifier_Polygonalization {
304         struct LineStyleModifier modifier;
305
306         float error;
307         int pad;
308
309 } LineStyleGeometryModifier_Polygonalization;
310
311 typedef struct LineStyleGeometryModifier_GuidingLines {
312         struct LineStyleModifier modifier;
313
314         float offset;
315         int pad;
316
317 } LineStyleGeometryModifier_GuidingLines;
318
319 /* LineStyleGeometryModifier_BluePrintLines::shape */
320 #define LS_MODIFIER_BLUEPRINT_CIRCLES   1
321 #define LS_MODIFIER_BLUEPRINT_ELLIPSES  2
322 #define LS_MODIFIER_BLUEPRINT_SQUARES   4
323
324 typedef struct LineStyleGeometryModifier_Blueprint {
325         struct LineStyleModifier modifier;
326
327         int flags;
328         unsigned int rounds;
329         float backbone_length;
330         unsigned int random_radius;
331         unsigned int random_center;
332         unsigned int random_backbone;
333
334 } LineStyleGeometryModifier_Blueprint;
335
336 typedef struct LineStyleGeometryModifier_2DOffset {
337         struct LineStyleModifier modifier;
338
339         float start, end;
340         float x, y;
341
342 } LineStyleGeometryModifier_2DOffset;
343
344 /* LineStyleGeometryModifier_2DTransform::pivot */
345 #define LS_MODIFIER_2D_TRANSFORM_PIVOT_CENTER    1
346 #define LS_MODIFIER_2D_TRANSFORM_PIVOT_START     2
347 #define LS_MODIFIER_2D_TRANSFORM_PIVOT_END       3
348 #define LS_MODIFIER_2D_TRANSFORM_PIVOT_PARAM     4
349 #define LS_MODIFIER_2D_TRANSFORM_PIVOT_ABSOLUTE  5
350
351 typedef struct LineStyleGeometryModifier_2DTransform {
352         struct LineStyleModifier modifier;
353
354         int pivot;
355         float scale_x, scale_y;
356         float angle;
357         float pivot_u;
358         float pivot_x, pivot_y;
359         int pad;
360
361 } LineStyleGeometryModifier_2DTransform;
362
363 /* Calligraphic thickness modifier */
364
365 typedef struct LineStyleThicknessModifier_Calligraphy {
366         struct LineStyleModifier modifier;
367
368         float min_thickness, max_thickness;
369         float orientation;
370         int pad;
371
372 } LineStyleThicknessModifier_Calligraphy;
373
374 /* FreestyleLineStyle::panel */
375 #define LS_PANEL_STROKES      1
376 #define LS_PANEL_COLOR        2
377 #define LS_PANEL_ALPHA        3
378 #define LS_PANEL_THICKNESS    4
379 #define LS_PANEL_GEOMETRY     5
380 #define LS_PANEL_MISC         6
381
382 /* FreestyleLineStyle::flag */
383 #define LS_DS_EXPAND          1  /* for animation editors */
384 #define LS_SAME_OBJECT        2
385 #define LS_DASHED_LINE        4
386 #define LS_MATERIAL_BOUNDARY  8
387 #define LS_MIN_2D_LENGTH      16
388 #define LS_MAX_2D_LENGTH      32
389 #define LS_NO_CHAINING        64
390 #define LS_MIN_2D_ANGLE       128
391 #define LS_MAX_2D_ANGLE       256
392 #define LS_SPLIT_LENGTH       512
393
394 /* FreestyleLineStyle::chaining */
395 #define LS_CHAINING_PLAIN    1
396 #define LS_CHAINING_SKETCHY  2
397
398 /* FreestyleLineStyle::caps */
399 #define LS_CAPS_BUTT    1
400 #define LS_CAPS_ROUND   2
401 #define LS_CAPS_SQUARE  3
402
403 typedef struct FreestyleLineStyle {
404         ID id;
405         struct AnimData *adt;
406
407         float r, g, b, alpha;
408         float thickness;
409         int flag, caps;
410         int chaining;
411         unsigned int rounds;
412         float split_length;
413         float min_angle, max_angle; /* for splitting */
414         float min_length, max_length;
415         unsigned short dash1, gap1, dash2, gap2, dash3, gap3;
416         int panel; /* for UI */
417
418         ListBase color_modifiers;
419         ListBase alpha_modifiers;
420         ListBase thickness_modifiers;
421         ListBase geometry_modifiers;
422
423 } FreestyleLineStyle;
424
425 #endif