All angle properties were switched from degrees to radians (using PROP_ANGLE
[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;
271         float angle; /* in radians! */
272         unsigned int octaves;
273         int seed;
274         int pad1;
275
276 } LineStyleGeometryModifier_PerlinNoise1D;
277
278 typedef struct LineStyleGeometryModifier_PerlinNoise2D {
279         struct LineStyleModifier modifier;
280
281         float frequency, amplitude;
282         float angle; /* in radians! */
283         unsigned int octaves;
284         int seed;
285         int pad1;
286
287 } LineStyleGeometryModifier_PerlinNoise2D;
288
289 typedef struct LineStyleGeometryModifier_BackboneStretcher {
290         struct LineStyleModifier modifier;
291
292         float backbone_length;
293         int pad;
294
295 } LineStyleGeometryModifier_BackboneStretcher;
296
297 typedef struct LineStyleGeometryModifier_TipRemover {
298         struct LineStyleModifier modifier;
299
300         float tip_length;
301         int pad;
302
303 } LineStyleGeometryModifier_TipRemover;
304
305 typedef struct LineStyleGeometryModifier_Polygonalization {
306         struct LineStyleModifier modifier;
307
308         float error;
309         int pad;
310
311 } LineStyleGeometryModifier_Polygonalization;
312
313 typedef struct LineStyleGeometryModifier_GuidingLines {
314         struct LineStyleModifier modifier;
315
316         float offset;
317         int pad;
318
319 } LineStyleGeometryModifier_GuidingLines;
320
321 /* LineStyleGeometryModifier_BluePrintLines::shape */
322 #define LS_MODIFIER_BLUEPRINT_CIRCLES   1
323 #define LS_MODIFIER_BLUEPRINT_ELLIPSES  2
324 #define LS_MODIFIER_BLUEPRINT_SQUARES   4
325
326 typedef struct LineStyleGeometryModifier_Blueprint {
327         struct LineStyleModifier modifier;
328
329         int flags;
330         unsigned int rounds;
331         float backbone_length;
332         unsigned int random_radius;
333         unsigned int random_center;
334         unsigned int random_backbone;
335
336 } LineStyleGeometryModifier_Blueprint;
337
338 typedef struct LineStyleGeometryModifier_2DOffset {
339         struct LineStyleModifier modifier;
340
341         float start, end;
342         float x, y;
343
344 } LineStyleGeometryModifier_2DOffset;
345
346 /* LineStyleGeometryModifier_2DTransform::pivot */
347 #define LS_MODIFIER_2D_TRANSFORM_PIVOT_CENTER    1
348 #define LS_MODIFIER_2D_TRANSFORM_PIVOT_START     2
349 #define LS_MODIFIER_2D_TRANSFORM_PIVOT_END       3
350 #define LS_MODIFIER_2D_TRANSFORM_PIVOT_PARAM     4
351 #define LS_MODIFIER_2D_TRANSFORM_PIVOT_ABSOLUTE  5
352
353 typedef struct LineStyleGeometryModifier_2DTransform {
354         struct LineStyleModifier modifier;
355
356         int pivot;
357         float scale_x, scale_y;
358         float angle; /* in radians! */
359         float pivot_u;
360         float pivot_x, pivot_y;
361         int pad;
362
363 } LineStyleGeometryModifier_2DTransform;
364
365 /* Calligraphic thickness modifier */
366
367 typedef struct LineStyleThicknessModifier_Calligraphy {
368         struct LineStyleModifier modifier;
369
370         float min_thickness, max_thickness;
371         float orientation; /* in radians! */
372         int pad;
373
374 } LineStyleThicknessModifier_Calligraphy;
375
376 /* FreestyleLineStyle::panel */
377 #define LS_PANEL_STROKES      1
378 #define LS_PANEL_COLOR        2
379 #define LS_PANEL_ALPHA        3
380 #define LS_PANEL_THICKNESS    4
381 #define LS_PANEL_GEOMETRY     5
382 #define LS_PANEL_MISC         6
383
384 /* FreestyleLineStyle::flag */
385 #define LS_DS_EXPAND          1  /* for animation editors */
386 #define LS_SAME_OBJECT        2
387 #define LS_DASHED_LINE        4
388 #define LS_MATERIAL_BOUNDARY  8
389 #define LS_MIN_2D_LENGTH      16
390 #define LS_MAX_2D_LENGTH      32
391 #define LS_NO_CHAINING        64
392 #define LS_MIN_2D_ANGLE       128
393 #define LS_MAX_2D_ANGLE       256
394 #define LS_SPLIT_LENGTH       512
395 #define LS_SPLIT_PATTERN      1024
396
397 /* FreestyleLineStyle::chaining */
398 #define LS_CHAINING_PLAIN    1
399 #define LS_CHAINING_SKETCHY  2
400
401 /* FreestyleLineStyle::caps */
402 #define LS_CAPS_BUTT    1
403 #define LS_CAPS_ROUND   2
404 #define LS_CAPS_SQUARE  3
405
406 /* FreestyleLineStyle::thickness_position */
407 #define LS_THICKNESS_CENTER    1
408 #define LS_THICKNESS_INSIDE    2
409 #define LS_THICKNESS_OUTSIDE   3
410 #define LS_THICKNESS_RELATIVE  4 /* thickness_ratio is used */
411
412 typedef struct FreestyleLineStyle {
413         ID id;
414         struct AnimData *adt;
415
416         float r, g, b, alpha;
417         float thickness;
418         int thickness_position;
419         float thickness_ratio;
420         int flag, caps;
421         int chaining;
422         unsigned int rounds;
423         float split_length;
424         float min_angle, max_angle; /* in radians, for splitting */
425         float min_length, max_length;
426         unsigned short split_dash1, split_gap1;
427         unsigned short split_dash2, split_gap2;
428         unsigned short split_dash3, split_gap3;
429         int pad;
430         unsigned short dash1, gap1, dash2, gap2, dash3, gap3;
431         int panel; /* for UI */
432
433         ListBase color_modifiers;
434         ListBase alpha_modifiers;
435         ListBase thickness_modifiers;
436         ListBase geometry_modifiers;
437
438 } FreestyleLineStyle;
439
440 #endif