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