Fix T42198: Linked lines only work with linked objects.
[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 #define LS_MODIFIER_MATERIAL_LINE_A     15
207
208 typedef struct LineStyleColorModifier_Material {
209         struct LineStyleModifier modifier;
210
211         struct ColorBand *color_ramp;
212         int flags;
213         int mat_attr;
214 } LineStyleColorModifier_Material;
215
216 typedef struct LineStyleAlphaModifier_Material {
217         struct LineStyleModifier modifier;
218
219         struct CurveMapping     *curve;
220         int flags;
221         int mat_attr;
222 } LineStyleAlphaModifier_Material;
223
224 typedef struct LineStyleThicknessModifier_Material {
225         struct LineStyleModifier modifier;
226
227         struct CurveMapping     *curve;
228         int flags;
229         float value_min, value_max;
230         int mat_attr;
231 } LineStyleThicknessModifier_Material;
232
233 /* Geometry modifiers */
234
235 typedef struct LineStyleGeometryModifier_Sampling {
236         struct LineStyleModifier modifier;
237
238         float sampling;
239         int pad;
240 } LineStyleGeometryModifier_Sampling;
241
242 typedef struct LineStyleGeometryModifier_BezierCurve {
243         struct LineStyleModifier modifier;
244
245         float error;
246         int pad;
247 } LineStyleGeometryModifier_BezierCurve;
248
249 typedef struct LineStyleGeometryModifier_SinusDisplacement {
250         struct LineStyleModifier modifier;
251
252         float wavelength, amplitude, phase;
253         int pad;
254 } LineStyleGeometryModifier_SinusDisplacement;
255
256 /* LineStyleGeometryModifier_SpatialNoise::flags */
257 #define LS_MODIFIER_SPATIAL_NOISE_SMOOTH      1
258 #define LS_MODIFIER_SPATIAL_NOISE_PURERANDOM  2
259
260 typedef struct LineStyleGeometryModifier_SpatialNoise {
261         struct LineStyleModifier modifier;
262
263         float amplitude, scale;
264         unsigned int octaves;
265         int flags;
266 } LineStyleGeometryModifier_SpatialNoise;
267
268 typedef struct LineStyleGeometryModifier_PerlinNoise1D {
269         struct LineStyleModifier modifier;
270
271         float frequency, amplitude;
272         float angle; /* in radians! */
273         unsigned int octaves;
274         int seed;
275         int pad1;
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 } LineStyleGeometryModifier_PerlinNoise2D;
287
288 typedef struct LineStyleGeometryModifier_BackboneStretcher {
289         struct LineStyleModifier modifier;
290
291         float backbone_length;
292         int pad;
293 } LineStyleGeometryModifier_BackboneStretcher;
294
295 typedef struct LineStyleGeometryModifier_TipRemover {
296         struct LineStyleModifier modifier;
297
298         float tip_length;
299         int pad;
300 } LineStyleGeometryModifier_TipRemover;
301
302 typedef struct LineStyleGeometryModifier_Polygonalization {
303         struct LineStyleModifier modifier;
304
305         float error;
306         int pad;
307 } LineStyleGeometryModifier_Polygonalization;
308
309 typedef struct LineStyleGeometryModifier_GuidingLines {
310         struct LineStyleModifier modifier;
311
312         float offset;
313         int pad;
314 } LineStyleGeometryModifier_GuidingLines;
315
316 /* LineStyleGeometryModifier_BluePrintLines::shape */
317 #define LS_MODIFIER_BLUEPRINT_CIRCLES   1
318 #define LS_MODIFIER_BLUEPRINT_ELLIPSES  2
319 #define LS_MODIFIER_BLUEPRINT_SQUARES   4
320
321 typedef struct LineStyleGeometryModifier_Blueprint {
322         struct LineStyleModifier modifier;
323
324         int flags;
325         unsigned int rounds;
326         float backbone_length;
327         unsigned int random_radius;
328         unsigned int random_center;
329         unsigned int random_backbone;
330 } LineStyleGeometryModifier_Blueprint;
331
332 typedef struct LineStyleGeometryModifier_2DOffset {
333         struct LineStyleModifier modifier;
334
335         float start, end;
336         float x, y;
337 } LineStyleGeometryModifier_2DOffset;
338
339 /* LineStyleGeometryModifier_2DTransform::pivot */
340 #define LS_MODIFIER_2D_TRANSFORM_PIVOT_CENTER    1
341 #define LS_MODIFIER_2D_TRANSFORM_PIVOT_START     2
342 #define LS_MODIFIER_2D_TRANSFORM_PIVOT_END       3
343 #define LS_MODIFIER_2D_TRANSFORM_PIVOT_PARAM     4
344 #define LS_MODIFIER_2D_TRANSFORM_PIVOT_ABSOLUTE  5
345
346 typedef struct LineStyleGeometryModifier_2DTransform {
347         struct LineStyleModifier modifier;
348
349         int pivot;
350         float scale_x, scale_y;
351         float angle; /* in radians! */
352         float pivot_u;
353         float pivot_x, pivot_y;
354         int pad;
355 } LineStyleGeometryModifier_2DTransform;
356
357 /* Calligraphic thickness modifier */
358
359 typedef struct LineStyleThicknessModifier_Calligraphy {
360         struct LineStyleModifier modifier;
361
362         float min_thickness, max_thickness;
363         float orientation; /* in radians! */
364         int pad;
365 } LineStyleThicknessModifier_Calligraphy;
366
367 /* FreestyleLineStyle::panel */
368 #define LS_PANEL_STROKES      1
369 #define LS_PANEL_COLOR        2
370 #define LS_PANEL_ALPHA        3
371 #define LS_PANEL_THICKNESS    4
372 #define LS_PANEL_GEOMETRY     5
373 #define LS_PANEL_TEXTURE      6
374 #define LS_PANEL_MISC         7
375
376 /* FreestyleLineStyle::flag */
377 #define LS_DS_EXPAND          (1 <<  0)  /* for animation editors */
378 #define LS_SAME_OBJECT        (1 <<  1)
379 #define LS_DASHED_LINE        (1 <<  2)
380 #define LS_MATERIAL_BOUNDARY  (1 <<  3)
381 #define LS_MIN_2D_LENGTH      (1 <<  4)
382 #define LS_MAX_2D_LENGTH      (1 <<  5)
383 #define LS_NO_CHAINING        (1 <<  6)
384 #define LS_MIN_2D_ANGLE       (1 <<  7)
385 #define LS_MAX_2D_ANGLE       (1 <<  8)
386 #define LS_SPLIT_LENGTH       (1 <<  9)
387 #define LS_SPLIT_PATTERN      (1 << 10)
388 #define LS_NO_SORTING         (1 << 11)
389 #define LS_REVERSE_ORDER      (1 << 12)  /* for sorting */
390 #define LS_TEXTURE            (1 << 13)
391 #define LS_CHAIN_COUNT        (1 << 14)
392
393 /* FreestyleLineStyle::chaining */
394 #define LS_CHAINING_PLAIN    1
395 #define LS_CHAINING_SKETCHY  2
396
397 /* FreestyleLineStyle::caps */
398 #define LS_CAPS_BUTT    1
399 #define LS_CAPS_ROUND   2
400 #define LS_CAPS_SQUARE  3
401
402 /* FreestyleLineStyle::thickness_position */
403 #define LS_THICKNESS_CENTER    1
404 #define LS_THICKNESS_INSIDE    2
405 #define LS_THICKNESS_OUTSIDE   3
406 #define LS_THICKNESS_RELATIVE  4 /* thickness_ratio is used */
407
408 /* FreestyleLineStyle::sort_key */
409 #define LS_SORT_KEY_DISTANCE_FROM_CAMERA  1
410 #define LS_SORT_KEY_2D_LENGTH             2
411 #define LS_SORT_KEY_PROJECTED_X           3
412 #define LS_SORT_KEY_PROJECTED_Y           4
413
414 /* FreestyleLineStyle::integration_type */
415 #define LS_INTEGRATION_MEAN   1
416 #define LS_INTEGRATION_MIN    2
417 #define LS_INTEGRATION_MAX    3
418 #define LS_INTEGRATION_FIRST  4
419 #define LS_INTEGRATION_LAST   5
420
421 typedef struct FreestyleLineStyle {
422         ID id;
423         struct AnimData *adt;
424
425         float r, g, b, alpha;
426         float thickness;
427         int thickness_position;
428         float thickness_ratio;
429         int flag, caps;
430         int chaining;
431         unsigned int rounds;
432         float split_length;
433         float min_angle, max_angle; /* in radians, for splitting */
434         float min_length, max_length;
435         unsigned int chain_count;
436         unsigned short split_dash1, split_gap1;
437         unsigned short split_dash2, split_gap2;
438         unsigned short split_dash3, split_gap3;
439         int sort_key, integration_type;
440         float texstep;
441         short texact, pr_texture;
442         short use_nodes, pad[3];
443         unsigned short dash1, gap1, dash2, gap2, dash3, gap3;
444         int panel; /* for UI */
445
446         struct MTex *mtex[18];          /* MAX_MTEX */
447         /* nodes */
448         struct bNodeTree *nodetree;
449
450         ListBase color_modifiers;
451         ListBase alpha_modifiers;
452         ListBase thickness_modifiers;
453         ListBase geometry_modifiers;
454 } FreestyleLineStyle;
455
456 #endif