Cleanup
[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 /** \file DNA_linestyle_types.h
32  *  \ingroup DNA
33  */
34
35 #include "DNA_listBase.h"
36 #include "DNA_ID.h"
37
38 #ifndef MAX_MTEX
39 #define MAX_MTEX        18
40 #endif
41
42 /* texco (also in DNA_material_types.h) */
43 #define TEXCO_STROKE    16 /* actually it's UV */
44
45 struct AnimData;
46 struct ColorBand;
47 struct CurveMapping;
48 struct MTex;
49 struct Object;
50 struct bNodeTree;
51
52 typedef struct LineStyleModifier {
53         struct LineStyleModifier *next, *prev;
54
55         char name[64]; /* MAX_NAME */
56         int type;
57         float influence;
58         int flags;
59         int blend;
60
61 } LineStyleModifier;
62
63 /* LineStyleModifier::type */
64 #define LS_MODIFIER_ALONG_STROKE            1
65 #define LS_MODIFIER_DISTANCE_FROM_CAMERA    2
66 #define LS_MODIFIER_DISTANCE_FROM_OBJECT    3
67 #define LS_MODIFIER_MATERIAL                4
68 #define LS_MODIFIER_SAMPLING                5
69 #define LS_MODIFIER_BEZIER_CURVE            6
70 #define LS_MODIFIER_SINUS_DISPLACEMENT      7
71 #define LS_MODIFIER_SPATIAL_NOISE           8
72 #define LS_MODIFIER_PERLIN_NOISE_1D         9
73 #define LS_MODIFIER_PERLIN_NOISE_2D        10
74 #define LS_MODIFIER_BACKBONE_STRETCHER     11
75 #define LS_MODIFIER_TIP_REMOVER            12
76 #define LS_MODIFIER_CALLIGRAPHY            13
77 #define LS_MODIFIER_POLYGONIZATION         14
78 #define LS_MODIFIER_GUIDING_LINES          15
79 #define LS_MODIFIER_BLUEPRINT              16
80 #define LS_MODIFIER_2D_OFFSET              17
81 #define LS_MODIFIER_2D_TRANSFORM           18
82 #define LS_MODIFIER_NUM                    19
83
84 /* LineStyleModifier::flags */
85 #define LS_MODIFIER_ENABLED     1
86 #define LS_MODIFIER_EXPANDED    2
87
88 /* flags (for color) */
89 #define LS_MODIFIER_USE_RAMP  1
90
91 /* flags (for alpha & thickness) */
92 #define LS_MODIFIER_USE_CURVE    1
93 #define LS_MODIFIER_INVERT       2
94
95 /* blend (for alpha & thickness) */
96 #define LS_VALUE_BLEND  0
97 #define LS_VALUE_ADD    1
98 #define LS_VALUE_MULT   2
99 #define LS_VALUE_SUB    3
100 #define LS_VALUE_DIV    4
101 #define LS_VALUE_DIFF   5
102 #define LS_VALUE_MIN    6
103 #define LS_VALUE_MAX    7
104
105 /* Along Stroke modifiers */
106
107 typedef struct LineStyleColorModifier_AlongStroke {
108         struct LineStyleModifier modifier;
109
110         struct ColorBand *color_ramp;
111 } LineStyleColorModifier_AlongStroke;
112
113 typedef struct LineStyleAlphaModifier_AlongStroke {
114         struct LineStyleModifier modifier;
115
116         struct CurveMapping     *curve;
117         int flags;
118         int pad;
119 } LineStyleAlphaModifier_AlongStroke;
120
121 typedef struct LineStyleThicknessModifier_AlongStroke {
122         struct LineStyleModifier modifier;
123
124         struct CurveMapping     *curve;
125         int flags;
126         float value_min, value_max;
127         int pad;
128 } LineStyleThicknessModifier_AlongStroke;
129
130 /* Distance from Camera modifiers */
131
132 typedef struct LineStyleColorModifier_DistanceFromCamera {
133         struct LineStyleModifier modifier;
134
135         struct ColorBand *color_ramp;
136         float range_min, range_max;
137 } LineStyleColorModifier_DistanceFromCamera;
138
139 typedef struct LineStyleAlphaModifier_DistanceFromCamera {
140         struct LineStyleModifier modifier;
141
142         struct CurveMapping     *curve;
143         int flags;
144         float range_min, range_max;
145         int pad;
146 } LineStyleAlphaModifier_DistanceFromCamera;
147
148 typedef struct LineStyleThicknessModifier_DistanceFromCamera {
149         struct LineStyleModifier modifier;
150
151         struct CurveMapping     *curve;
152         int flags;
153         float range_min, range_max;
154         float value_min, value_max;
155         int pad;
156 } LineStyleThicknessModifier_DistanceFromCamera;
157
158 /* Distance from Object modifiers */
159
160 typedef struct LineStyleColorModifier_DistanceFromObject {
161         struct LineStyleModifier modifier;
162
163         struct Object *target;
164         struct ColorBand *color_ramp;
165         float range_min, range_max;
166 } LineStyleColorModifier_DistanceFromObject;
167
168 typedef struct LineStyleAlphaModifier_DistanceFromObject {
169         struct LineStyleModifier modifier;
170
171         struct Object *target;
172         struct CurveMapping     *curve;
173         int flags;
174         float range_min, range_max;
175         int pad;
176 } LineStyleAlphaModifier_DistanceFromObject;
177
178 typedef struct LineStyleThicknessModifier_DistanceFromObject {
179         struct LineStyleModifier modifier;
180
181         struct Object *target;
182         struct CurveMapping     *curve;
183         int flags;
184         float range_min, range_max;
185         float value_min, value_max;
186         int pad;
187 } LineStyleThicknessModifier_DistanceFromObject;
188
189 /* Material modifiers */
190
191 /* mat_attr */
192 #define LS_MODIFIER_MATERIAL_DIFF        1
193 #define LS_MODIFIER_MATERIAL_DIFF_R      2
194 #define LS_MODIFIER_MATERIAL_DIFF_G      3
195 #define LS_MODIFIER_MATERIAL_DIFF_B      4
196 #define LS_MODIFIER_MATERIAL_SPEC        5
197 #define LS_MODIFIER_MATERIAL_SPEC_R      6
198 #define LS_MODIFIER_MATERIAL_SPEC_G      7
199 #define LS_MODIFIER_MATERIAL_SPEC_B      8
200 #define LS_MODIFIER_MATERIAL_SPEC_HARD   9
201 #define LS_MODIFIER_MATERIAL_ALPHA      10
202 #define LS_MODIFIER_MATERIAL_LINE       11
203 #define LS_MODIFIER_MATERIAL_LINE_R     12
204 #define LS_MODIFIER_MATERIAL_LINE_G     13
205 #define LS_MODIFIER_MATERIAL_LINE_B     14
206
207 typedef struct LineStyleColorModifier_Material {
208         struct LineStyleModifier modifier;
209
210         struct ColorBand *color_ramp;
211         int flags;
212         int mat_attr;
213 } LineStyleColorModifier_Material;
214
215 typedef struct LineStyleAlphaModifier_Material {
216         struct LineStyleModifier modifier;
217
218         struct CurveMapping     *curve;
219         int flags;
220         int mat_attr;
221 } LineStyleAlphaModifier_Material;
222
223 typedef struct LineStyleThicknessModifier_Material {
224         struct LineStyleModifier modifier;
225
226         struct CurveMapping     *curve;
227         int flags;
228         float value_min, value_max;
229         int mat_attr;
230 } LineStyleThicknessModifier_Material;
231
232 /* Geometry modifiers */
233
234 typedef struct LineStyleGeometryModifier_Sampling {
235         struct LineStyleModifier modifier;
236
237         float sampling;
238         int pad;
239 } LineStyleGeometryModifier_Sampling;
240
241 typedef struct LineStyleGeometryModifier_BezierCurve {
242         struct LineStyleModifier modifier;
243
244         float error;
245         int pad;
246 } LineStyleGeometryModifier_BezierCurve;
247
248 typedef struct LineStyleGeometryModifier_SinusDisplacement {
249         struct LineStyleModifier modifier;
250
251         float wavelength, amplitude, phase;
252         int pad;
253 } LineStyleGeometryModifier_SinusDisplacement;
254
255 /* LineStyleGeometryModifier_SpatialNoise::flags */
256 #define LS_MODIFIER_SPATIAL_NOISE_SMOOTH      1
257 #define LS_MODIFIER_SPATIAL_NOISE_PURERANDOM  2
258
259 typedef struct LineStyleGeometryModifier_SpatialNoise {
260         struct LineStyleModifier modifier;
261
262         float amplitude, scale;
263         unsigned int octaves;
264         int flags;
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 } LineStyleGeometryModifier_PerlinNoise1D;
276
277 typedef struct LineStyleGeometryModifier_PerlinNoise2D {
278         struct LineStyleModifier modifier;
279
280         float frequency, amplitude;
281         float angle; /* in radians! */
282         unsigned int octaves;
283         int seed;
284         int pad1;
285 } LineStyleGeometryModifier_PerlinNoise2D;
286
287 typedef struct LineStyleGeometryModifier_BackboneStretcher {
288         struct LineStyleModifier modifier;
289
290         float backbone_length;
291         int pad;
292 } LineStyleGeometryModifier_BackboneStretcher;
293
294 typedef struct LineStyleGeometryModifier_TipRemover {
295         struct LineStyleModifier modifier;
296
297         float tip_length;
298         int pad;
299 } LineStyleGeometryModifier_TipRemover;
300
301 typedef struct LineStyleGeometryModifier_Polygonalization {
302         struct LineStyleModifier modifier;
303
304         float error;
305         int pad;
306 } LineStyleGeometryModifier_Polygonalization;
307
308 typedef struct LineStyleGeometryModifier_GuidingLines {
309         struct LineStyleModifier modifier;
310
311         float offset;
312         int pad;
313 } LineStyleGeometryModifier_GuidingLines;
314
315 /* LineStyleGeometryModifier_BluePrintLines::shape */
316 #define LS_MODIFIER_BLUEPRINT_CIRCLES   1
317 #define LS_MODIFIER_BLUEPRINT_ELLIPSES  2
318 #define LS_MODIFIER_BLUEPRINT_SQUARES   4
319
320 typedef struct LineStyleGeometryModifier_Blueprint {
321         struct LineStyleModifier modifier;
322
323         int flags;
324         unsigned int rounds;
325         float backbone_length;
326         unsigned int random_radius;
327         unsigned int random_center;
328         unsigned int random_backbone;
329 } LineStyleGeometryModifier_Blueprint;
330
331 typedef struct LineStyleGeometryModifier_2DOffset {
332         struct LineStyleModifier modifier;
333
334         float start, end;
335         float x, y;
336 } LineStyleGeometryModifier_2DOffset;
337
338 /* LineStyleGeometryModifier_2DTransform::pivot */
339 #define LS_MODIFIER_2D_TRANSFORM_PIVOT_CENTER    1
340 #define LS_MODIFIER_2D_TRANSFORM_PIVOT_START     2
341 #define LS_MODIFIER_2D_TRANSFORM_PIVOT_END       3
342 #define LS_MODIFIER_2D_TRANSFORM_PIVOT_PARAM     4
343 #define LS_MODIFIER_2D_TRANSFORM_PIVOT_ABSOLUTE  5
344
345 typedef struct LineStyleGeometryModifier_2DTransform {
346         struct LineStyleModifier modifier;
347
348         int pivot;
349         float scale_x, scale_y;
350         float angle; /* in radians! */
351         float pivot_u;
352         float pivot_x, pivot_y;
353         int pad;
354 } LineStyleGeometryModifier_2DTransform;
355
356 /* Calligraphic thickness modifier */
357
358 typedef struct LineStyleThicknessModifier_Calligraphy {
359         struct LineStyleModifier modifier;
360
361         float min_thickness, max_thickness;
362         float orientation; /* in radians! */
363         int pad;
364 } LineStyleThicknessModifier_Calligraphy;
365
366 /* FreestyleLineStyle::panel */
367 #define LS_PANEL_STROKES      1
368 #define LS_PANEL_COLOR        2
369 #define LS_PANEL_ALPHA        3
370 #define LS_PANEL_THICKNESS    4
371 #define LS_PANEL_GEOMETRY     5
372 #define LS_PANEL_TEXTURE      6
373 #define LS_PANEL_MISC         7
374
375 /* FreestyleLineStyle::flag */
376 #define LS_DS_EXPAND          (1 <<  0)  /* for animation editors */
377 #define LS_SAME_OBJECT        (1 <<  1)
378 #define LS_DASHED_LINE        (1 <<  2)
379 #define LS_MATERIAL_BOUNDARY  (1 <<  3)
380 #define LS_MIN_2D_LENGTH      (1 <<  4)
381 #define LS_MAX_2D_LENGTH      (1 <<  5)
382 #define LS_NO_CHAINING        (1 <<  6)
383 #define LS_MIN_2D_ANGLE       (1 <<  7)
384 #define LS_MAX_2D_ANGLE       (1 <<  8)
385 #define LS_SPLIT_LENGTH       (1 <<  9)
386 #define LS_SPLIT_PATTERN      (1 << 10)
387 #define LS_NO_SORTING         (1 << 11)
388 #define LS_REVERSE_ORDER      (1 << 12)  /* for sorting */
389 #define LS_TEXTURE            (1 << 13)
390
391 /* FreestyleLineStyle::chaining */
392 #define LS_CHAINING_PLAIN    1
393 #define LS_CHAINING_SKETCHY  2
394
395 /* FreestyleLineStyle::caps */
396 #define LS_CAPS_BUTT    1
397 #define LS_CAPS_ROUND   2
398 #define LS_CAPS_SQUARE  3
399
400 /* FreestyleLineStyle::thickness_position */
401 #define LS_THICKNESS_CENTER    1
402 #define LS_THICKNESS_INSIDE    2
403 #define LS_THICKNESS_OUTSIDE   3
404 #define LS_THICKNESS_RELATIVE  4 /* thickness_ratio is used */
405
406 /* FreestyleLineStyle::sort_key */
407 #define LS_SORT_KEY_DISTANCE_FROM_CAMERA  1
408 #define LS_SORT_KEY_2D_LENGTH             2
409
410 /* FreestyleLineStyle::integration_type */
411 #define LS_INTEGRATION_MEAN   1
412 #define LS_INTEGRATION_MIN    2
413 #define LS_INTEGRATION_MAX    3
414 #define LS_INTEGRATION_FIRST  4
415 #define LS_INTEGRATION_LAST   5
416
417 typedef struct FreestyleLineStyle {
418         ID id;
419         struct AnimData *adt;
420
421         float r, g, b, alpha;
422         float thickness;
423         int thickness_position;
424         float thickness_ratio;
425         int flag, caps;
426         int chaining;
427         unsigned int rounds;
428         float split_length;
429         float min_angle, max_angle; /* in radians, for splitting */
430         float min_length, max_length;
431         unsigned short split_dash1, split_gap1;
432         unsigned short split_dash2, split_gap2;
433         unsigned short split_dash3, split_gap3;
434         int sort_key, integration_type;
435         float texstep;
436         short texact, pr_texture;
437         short use_nodes, pad;
438         unsigned short dash1, gap1, dash2, gap2, dash3, gap3;
439         int panel; /* for UI */
440
441         struct MTex *mtex[18];          /* MAX_MTEX */
442         /* nodes */
443         struct bNodeTree *nodetree;
444
445         ListBase color_modifiers;
446         ListBase alpha_modifiers;
447         ListBase thickness_modifiers;
448         ListBase geometry_modifiers;
449 } FreestyleLineStyle;
450
451 #endif