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