Keymap: pressing leader key (Alt) again closes tool prompt
[blender.git] / source / blender / makesdna / DNA_linestyle_types.h
1 /*
2  * This program is free software; you can redistribute it and/or
3  * modify it under the terms of the GNU General Public License
4  * as published by the Free Software Foundation; either version 2
5  * of the License, or (at your option) any later version.
6  *
7  * This program is distributed in the hope that it will be useful,
8  * but WITHOUT ANY WARRANTY; without even the implied warranty of
9  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
10  * GNU General Public License for more details.
11  *
12  * You should have received a copy of the GNU General Public License
13  * along with this program; if not, write to the Free Software Foundation,
14  * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
15  *
16  * The Original Code is Copyright (C) 2010 Blender Foundation.
17  * All rights reserved.
18  */
19
20 #ifndef __DNA_LINESTYLE_TYPES_H__
21 #define __DNA_LINESTYLE_TYPES_H__
22
23 /** \file
24  * \ingroup DNA
25  */
26
27 #include "DNA_listBase.h"
28 #include "DNA_ID.h"
29
30 #ifndef MAX_MTEX
31 #  define MAX_MTEX 18
32 #endif
33
34 /* texco (also in DNA_material_types.h) */
35 #define TEXCO_STROKE 16 /* actually it's UV */
36
37 struct AnimData;
38 struct ColorBand;
39 struct CurveMapping;
40 struct MTex;
41 struct Object;
42 struct bNodeTree;
43
44 typedef struct LineStyleModifier {
45   struct LineStyleModifier *next, *prev;
46
47   /** MAX_NAME. */
48   char name[64];
49   int type;
50   float influence;
51   int flags;
52   int blend;
53 } LineStyleModifier;
54
55 /* LineStyleModifier::type */
56 #define LS_MODIFIER_ALONG_STROKE 1
57 #define LS_MODIFIER_DISTANCE_FROM_CAMERA 2
58 #define LS_MODIFIER_DISTANCE_FROM_OBJECT 3
59 #define LS_MODIFIER_MATERIAL 4
60 #define LS_MODIFIER_SAMPLING 5
61 #define LS_MODIFIER_BEZIER_CURVE 6
62 #define LS_MODIFIER_SINUS_DISPLACEMENT 7
63 #define LS_MODIFIER_SPATIAL_NOISE 8
64 #define LS_MODIFIER_PERLIN_NOISE_1D 9
65 #define LS_MODIFIER_PERLIN_NOISE_2D 10
66 #define LS_MODIFIER_BACKBONE_STRETCHER 11
67 #define LS_MODIFIER_TIP_REMOVER 12
68 #define LS_MODIFIER_CALLIGRAPHY 13
69 #define LS_MODIFIER_POLYGONIZATION 14
70 #define LS_MODIFIER_GUIDING_LINES 15
71 #define LS_MODIFIER_BLUEPRINT 16
72 #define LS_MODIFIER_2D_OFFSET 17
73 #define LS_MODIFIER_2D_TRANSFORM 18
74 #define LS_MODIFIER_TANGENT 19
75 #define LS_MODIFIER_NOISE 20
76 #define LS_MODIFIER_CREASE_ANGLE 21
77 #define LS_MODIFIER_SIMPLIFICATION 22
78 #define LS_MODIFIER_CURVATURE_3D 23
79 #define LS_MODIFIER_NUM 24
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 /* flags (for asymmetric thickness application) */
93 #define LS_THICKNESS_ASYMMETRIC 1
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   char _pad[4];
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   char _pad[4];
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   char _pad[4];
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   char _pad[4];
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   char _pad[4];
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   char _pad[4];
187 } LineStyleThicknessModifier_DistanceFromObject;
188
189 /* 3D curvature modifiers */
190
191 typedef struct LineStyleColorModifier_Curvature_3D {
192   struct LineStyleModifier modifier;
193
194   float min_curvature, max_curvature;
195   struct ColorBand *color_ramp;
196   float range_min, range_max;
197 } LineStyleColorModifier_Curvature_3D;
198
199 typedef struct LineStyleAlphaModifier_Curvature_3D {
200   struct LineStyleModifier modifier;
201
202   struct CurveMapping *curve;
203   int flags;
204   float min_curvature, max_curvature;
205   char _pad[4];
206 } LineStyleAlphaModifier_Curvature_3D;
207
208 typedef struct LineStyleThicknessModifier_Curvature_3D {
209   struct LineStyleModifier modifier;
210
211   struct CurveMapping *curve;
212   int flags;
213   char _pad[4];
214   float min_curvature, max_curvature;
215   float min_thickness, max_thickness;
216 } LineStyleThicknessModifier_Curvature_3D;
217
218 /* Noise modifiers (for color, alpha and thickness) */
219
220 typedef struct LineStyleColorModifier_Noise {
221   struct LineStyleModifier modifier;
222
223   struct ColorBand *color_ramp;
224   float period, amplitude;
225   int seed;
226   char _pad[4];
227 } LineStyleColorModifier_Noise;
228
229 typedef struct LineStyleAlphaModifier_Noise {
230   struct LineStyleModifier modifier;
231
232   struct CurveMapping *curve;
233   int flags;
234   float period, amplitude;
235   int seed;
236 } LineStyleAlphaModifier_Noise;
237
238 typedef struct LineStyleThicknessModifier_Noise {
239   struct LineStyleModifier modifier;
240
241   float period, amplitude;
242   int flags;
243   int seed;
244 } LineStyleThicknessModifier_Noise;
245
246 /* Crease Angle modifiers */
247
248 typedef struct LineStyleColorModifier_CreaseAngle {
249   struct LineStyleModifier modifier;
250
251   struct ColorBand *color_ramp;
252   float min_angle, max_angle;
253 } LineStyleColorModifier_CreaseAngle;
254
255 typedef struct LineStyleAlphaModifier_CreaseAngle {
256   struct LineStyleModifier modifier;
257
258   struct CurveMapping *curve;
259   int flags;
260   float min_angle, max_angle;
261   char _pad[4];
262 } LineStyleAlphaModifier_CreaseAngle;
263
264 typedef struct LineStyleThicknessModifier_CreaseAngle {
265   struct LineStyleModifier modifier;
266
267   struct CurveMapping *curve;
268   int flags;
269   char _pad[4];
270   float min_angle, max_angle;
271   float min_thickness, max_thickness;
272 } LineStyleThicknessModifier_CreaseAngle;
273
274 /* Tangent modifiers */
275
276 typedef struct LineStyleColorModifier_Tangent {
277   struct LineStyleModifier modifier;
278
279   struct ColorBand *color_ramp;
280 } LineStyleColorModifier_Tangent;
281
282 typedef struct LineStyleAlphaModifier_Tangent {
283   struct LineStyleModifier modifier;
284
285   struct CurveMapping *curve;
286   int flags;
287   char _pad[4];
288 } LineStyleAlphaModifier_Tangent;
289
290 typedef struct LineStyleThicknessModifier_Tangent {
291   struct LineStyleModifier modifier;
292
293   struct CurveMapping *curve;
294   int flags;
295   float min_thickness, max_thickness;
296   char _pad[4];
297 } LineStyleThicknessModifier_Tangent;
298
299 /* Material modifiers */
300
301 /* mat_attr */
302 #define LS_MODIFIER_MATERIAL_DIFF 1
303 #define LS_MODIFIER_MATERIAL_DIFF_R 2
304 #define LS_MODIFIER_MATERIAL_DIFF_G 3
305 #define LS_MODIFIER_MATERIAL_DIFF_B 4
306 #define LS_MODIFIER_MATERIAL_SPEC 5
307 #define LS_MODIFIER_MATERIAL_SPEC_R 6
308 #define LS_MODIFIER_MATERIAL_SPEC_G 7
309 #define LS_MODIFIER_MATERIAL_SPEC_B 8
310 #define LS_MODIFIER_MATERIAL_SPEC_HARD 9
311 #define LS_MODIFIER_MATERIAL_ALPHA 10
312 #define LS_MODIFIER_MATERIAL_LINE 11
313 #define LS_MODIFIER_MATERIAL_LINE_R 12
314 #define LS_MODIFIER_MATERIAL_LINE_G 13
315 #define LS_MODIFIER_MATERIAL_LINE_B 14
316 #define LS_MODIFIER_MATERIAL_LINE_A 15
317
318 typedef struct LineStyleColorModifier_Material {
319   struct LineStyleModifier modifier;
320
321   struct ColorBand *color_ramp;
322   int flags;
323   int mat_attr;
324 } LineStyleColorModifier_Material;
325
326 typedef struct LineStyleAlphaModifier_Material {
327   struct LineStyleModifier modifier;
328
329   struct CurveMapping *curve;
330   int flags;
331   int mat_attr;
332 } LineStyleAlphaModifier_Material;
333
334 typedef struct LineStyleThicknessModifier_Material {
335   struct LineStyleModifier modifier;
336
337   struct CurveMapping *curve;
338   int flags;
339   float value_min, value_max;
340   int mat_attr;
341 } LineStyleThicknessModifier_Material;
342
343 /* Geometry modifiers */
344
345 typedef struct LineStyleGeometryModifier_Sampling {
346   struct LineStyleModifier modifier;
347
348   float sampling;
349   char _pad[4];
350 } LineStyleGeometryModifier_Sampling;
351
352 typedef struct LineStyleGeometryModifier_BezierCurve {
353   struct LineStyleModifier modifier;
354
355   float error;
356   char _pad[4];
357 } LineStyleGeometryModifier_BezierCurve;
358
359 typedef struct LineStyleGeometryModifier_SinusDisplacement {
360   struct LineStyleModifier modifier;
361
362   float wavelength, amplitude, phase;
363   char _pad[4];
364 } LineStyleGeometryModifier_SinusDisplacement;
365
366 /* LineStyleGeometryModifier_SpatialNoise::flags */
367 #define LS_MODIFIER_SPATIAL_NOISE_SMOOTH 1
368 #define LS_MODIFIER_SPATIAL_NOISE_PURERANDOM 2
369
370 typedef struct LineStyleGeometryModifier_SpatialNoise {
371   struct LineStyleModifier modifier;
372
373   float amplitude, scale;
374   unsigned int octaves;
375   int flags;
376 } LineStyleGeometryModifier_SpatialNoise;
377
378 typedef struct LineStyleGeometryModifier_PerlinNoise1D {
379   struct LineStyleModifier modifier;
380
381   float frequency, amplitude;
382   /** In radians!. */
383   float angle;
384   unsigned int octaves;
385   int seed;
386   char _pad1[4];
387 } LineStyleGeometryModifier_PerlinNoise1D;
388
389 typedef struct LineStyleGeometryModifier_PerlinNoise2D {
390   struct LineStyleModifier modifier;
391
392   float frequency, amplitude;
393   /** In radians!. */
394   float angle;
395   unsigned int octaves;
396   int seed;
397   char _pad1[4];
398 } LineStyleGeometryModifier_PerlinNoise2D;
399
400 typedef struct LineStyleGeometryModifier_BackboneStretcher {
401   struct LineStyleModifier modifier;
402
403   float backbone_length;
404   char _pad[4];
405 } LineStyleGeometryModifier_BackboneStretcher;
406
407 typedef struct LineStyleGeometryModifier_TipRemover {
408   struct LineStyleModifier modifier;
409
410   float tip_length;
411   char _pad[4];
412 } LineStyleGeometryModifier_TipRemover;
413
414 typedef struct LineStyleGeometryModifier_Polygonalization {
415   struct LineStyleModifier modifier;
416
417   float error;
418   char _pad[4];
419 } LineStyleGeometryModifier_Polygonalization;
420
421 typedef struct LineStyleGeometryModifier_GuidingLines {
422   struct LineStyleModifier modifier;
423
424   float offset;
425   char _pad[4];
426 } LineStyleGeometryModifier_GuidingLines;
427
428 /* LineStyleGeometryModifier_BluePrintLines::shape */
429 #define LS_MODIFIER_BLUEPRINT_CIRCLES 1
430 #define LS_MODIFIER_BLUEPRINT_ELLIPSES 2
431 #define LS_MODIFIER_BLUEPRINT_SQUARES 4
432
433 typedef struct LineStyleGeometryModifier_Blueprint {
434   struct LineStyleModifier modifier;
435
436   int flags;
437   unsigned int rounds;
438   float backbone_length;
439   unsigned int random_radius;
440   unsigned int random_center;
441   unsigned int random_backbone;
442 } LineStyleGeometryModifier_Blueprint;
443
444 typedef struct LineStyleGeometryModifier_2DOffset {
445   struct LineStyleModifier modifier;
446
447   float start, end;
448   float x, y;
449 } LineStyleGeometryModifier_2DOffset;
450
451 /* LineStyleGeometryModifier_2DTransform::pivot */
452 #define LS_MODIFIER_2D_TRANSFORM_PIVOT_CENTER 1
453 #define LS_MODIFIER_2D_TRANSFORM_PIVOT_START 2
454 #define LS_MODIFIER_2D_TRANSFORM_PIVOT_END 3
455 #define LS_MODIFIER_2D_TRANSFORM_PIVOT_PARAM 4
456 #define LS_MODIFIER_2D_TRANSFORM_PIVOT_ABSOLUTE 5
457
458 typedef struct LineStyleGeometryModifier_2DTransform {
459   struct LineStyleModifier modifier;
460
461   int pivot;
462   float scale_x, scale_y;
463   /** In radians!. */
464   float angle;
465   float pivot_u;
466   float pivot_x, pivot_y;
467   char _pad[4];
468 } LineStyleGeometryModifier_2DTransform;
469
470 typedef struct LineStyleGeometryModifier_Simplification {
471   struct LineStyleModifier modifier;
472
473   float tolerance;
474   char _pad[4];
475 } LineStyleGeometryModifier_Simplification;
476
477 /* Calligraphic thickness modifier */
478
479 typedef struct LineStyleThicknessModifier_Calligraphy {
480   struct LineStyleModifier modifier;
481
482   float min_thickness, max_thickness;
483   /** In radians!. */
484   float orientation;
485   char _pad[4];
486 } LineStyleThicknessModifier_Calligraphy;
487
488 /* FreestyleLineStyle::panel */
489 #define LS_PANEL_STROKES 1
490 #define LS_PANEL_COLOR 2
491 #define LS_PANEL_ALPHA 3
492 #define LS_PANEL_THICKNESS 4
493 #define LS_PANEL_GEOMETRY 5
494 #define LS_PANEL_TEXTURE 6
495 #define LS_PANEL_MISC 7
496
497 /* FreestyleLineStyle::flag */
498 #define LS_DS_EXPAND (1 << 0) /* for animation editors */
499 #define LS_SAME_OBJECT (1 << 1)
500 #define LS_DASHED_LINE (1 << 2)
501 #define LS_MATERIAL_BOUNDARY (1 << 3)
502 #define LS_MIN_2D_LENGTH (1 << 4)
503 #define LS_MAX_2D_LENGTH (1 << 5)
504 #define LS_NO_CHAINING (1 << 6)
505 #define LS_MIN_2D_ANGLE (1 << 7)
506 #define LS_MAX_2D_ANGLE (1 << 8)
507 #define LS_SPLIT_LENGTH (1 << 9)
508 #define LS_SPLIT_PATTERN (1 << 10)
509 #define LS_NO_SORTING (1 << 11)
510 #define LS_REVERSE_ORDER (1 << 12) /* for sorting */
511 #define LS_TEXTURE (1 << 13)
512 #define LS_CHAIN_COUNT (1 << 14)
513
514 /* FreestyleLineStyle::chaining */
515 #define LS_CHAINING_PLAIN 1
516 #define LS_CHAINING_SKETCHY 2
517
518 /* FreestyleLineStyle::caps */
519 #define LS_CAPS_BUTT 1
520 #define LS_CAPS_ROUND 2
521 #define LS_CAPS_SQUARE 3
522
523 /* FreestyleLineStyle::thickness_position */
524 #define LS_THICKNESS_CENTER 1
525 #define LS_THICKNESS_INSIDE 2
526 #define LS_THICKNESS_OUTSIDE 3
527 #define LS_THICKNESS_RELATIVE 4 /* thickness_ratio is used */
528
529 /* FreestyleLineStyle::sort_key */
530 #define LS_SORT_KEY_DISTANCE_FROM_CAMERA 1
531 #define LS_SORT_KEY_2D_LENGTH 2
532 #define LS_SORT_KEY_PROJECTED_X 3
533 #define LS_SORT_KEY_PROJECTED_Y 4
534
535 /* FreestyleLineStyle::integration_type */
536 #define LS_INTEGRATION_MEAN 1
537 #define LS_INTEGRATION_MIN 2
538 #define LS_INTEGRATION_MAX 3
539 #define LS_INTEGRATION_FIRST 4
540 #define LS_INTEGRATION_LAST 5
541
542 typedef struct FreestyleLineStyle {
543   ID id;
544   struct AnimData *adt;
545
546   float r, g, b, alpha;
547   float thickness;
548   int thickness_position;
549   float thickness_ratio;
550   int flag, caps;
551   int chaining;
552   unsigned int rounds;
553   float split_length;
554   /** In radians, for splitting. */
555   float min_angle, max_angle;
556   float min_length, max_length;
557   unsigned int chain_count;
558   unsigned short split_dash1, split_gap1;
559   unsigned short split_dash2, split_gap2;
560   unsigned short split_dash3, split_gap3;
561   int sort_key, integration_type;
562   float texstep;
563   short texact, pr_texture;
564   short use_nodes;
565   char _pad[6];
566   unsigned short dash1, gap1, dash2, gap2, dash3, gap3;
567   /** For UI. */
568   int panel;
569   /** MAX_MTEX. */
570   struct MTex *mtex[18];
571   /* nodes */
572   struct bNodeTree *nodetree;
573
574   ListBase color_modifiers;
575   ListBase alpha_modifiers;
576   ListBase thickness_modifiers;
577   ListBase geometry_modifiers;
578 } FreestyleLineStyle;
579
580 #endif