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