a19bbdf1bf92a95ce9f2a179f5fb35e9a62b61b7
[blender-staging.git] / source / blender / makesdna / DNA_linestyle_types.h
1 /* DNA_linestyle_types.h
2  *
3  * $Id$
4  *
5  * ***** BEGIN GPL LICENSE BLOCK *****
6  *
7  * This program is free software; you can redistribute it and/or
8  * modify it under the terms of the GNU General Public License
9  * as published by the Free Software Foundation; either version 2
10  * of the License, or (at your option) any later version.
11  *
12  * This program is distributed in the hope that it will be useful,
13  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15  * GNU General Public License for more details.
16  *
17  * You should have received a copy of the GNU General Public License
18  * along with this program; if not, write to the Free Software Foundation,
19  * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
20  *
21  * The Original Code is Copyright (C) 2010 Blender Foundation.
22  * All rights reserved.
23  *
24  * The Original Code is: all of this file.
25  *
26  * Contributor(s): none yet.
27  *
28  * ***** END GPL LICENSE BLOCK *****
29  */
30
31 #ifndef DNA_LINESTYLE_TYPES_H
32 #define DNA_LINESTYLE_TYPES_H
33
34 #include "DNA_listBase.h"
35 #include "DNA_ID.h"
36
37 struct ColorBand;
38 struct CurveMapping;
39
40 typedef struct LineStyleModifier {
41         struct LineStyleModifier *next, *prev;
42
43         char name[32];
44         int type;
45         float influence;
46         int flags;
47         int pad;
48 } LineStyleModifier;
49
50 /* LineStyleColorModifier::type */
51 #define LS_MODIFIER_ALONG_STROKE            1
52 #define LS_MODIFIER_DISTANCE_FROM_CAMERA    2
53 #define LS_MODIFIER_DISTANCE_FROM_OBJECT    3
54 #define LS_MODIFIER_NUM                     4
55
56 /* LineStyleColorModifier::flags */
57 #define LS_MODIFIER_ENABLED     1
58 #define LS_MODIFIER_EXPANDED    2
59
60 /* flags (for alpha & thickness) */
61 #define LS_MODIFIER_USE_CURVE    1
62 #define LS_MODIFIER_INVERT       2
63
64 /* blend (for alpha & thickness) */
65 #define LS_VALUE_BLEND  0
66 #define LS_VALUE_ADD    1
67 #define LS_VALUE_MULT   2
68 #define LS_VALUE_SUB    3
69 #define LS_VALUE_DIV    4
70 #define LS_VALUE_DIFF   5
71 #define LS_VALUE_MIN    6
72 #define LS_VALUE_MAX    7
73
74 /* Along Stroke modifiers */
75
76 typedef struct LineStyleColorModifier_AlongStroke {
77         struct LineStyleModifier modifier;
78
79         struct ColorBand *color_ramp;
80         int blend;
81         int pad;
82
83 } LineStyleColorModifier_AlongStroke;
84
85 typedef struct LineStyleAlphaModifier_AlongStroke {
86         struct LineStyleModifier modifier;
87
88         struct CurveMapping     *curve;
89         int blend;
90         int flags;
91
92 } LineStyleAlphaModifier_AlongStroke;
93
94 typedef struct LineStyleThicknessModifier_AlongStroke {
95         struct LineStyleModifier modifier;
96
97         struct CurveMapping     *curve;
98         int blend;
99         int flags;
100         float value_min, value_max;
101
102 } LineStyleThicknessModifier_AlongStroke;
103
104 /* Distance from Camera modifiers */
105
106 typedef struct LineStyleColorModifier_DistanceFromCamera {
107         struct LineStyleModifier modifier;
108
109         struct ColorBand *color_ramp;
110         int blend;
111         float range_min, range_max;
112         int pad;
113
114 } LineStyleColorModifier_DistanceFromCamera;
115
116 typedef struct LineStyleAlphaModifier_DistanceFromCamera {
117         struct LineStyleModifier modifier;
118
119         struct CurveMapping     *curve;
120         int blend;
121         int flags;
122         float range_min, range_max;
123
124 } LineStyleAlphaModifier_DistanceFromCamera;
125
126 typedef struct LineStyleThicknessModifier_DistanceFromCamera {
127         struct LineStyleModifier modifier;
128
129         struct CurveMapping     *curve;
130         int blend;
131         int flags;
132         float range_min, range_max;
133         float value_min, value_max;
134
135 } LineStyleThicknessModifier_DistanceFromCamera;
136
137 /* Distance from Object modifiers */
138
139 typedef struct LineStyleColorModifier_DistanceFromObject {
140         struct LineStyleModifier modifier;
141
142         struct Object *target;
143         struct ColorBand *color_ramp;
144         int blend;
145         float range_min, range_max;
146         int pad;
147
148 } LineStyleColorModifier_DistanceFromObject;
149
150 typedef struct LineStyleAlphaModifier_DistanceFromObject {
151         struct LineStyleModifier modifier;
152
153         struct Object *target;
154         struct CurveMapping     *curve;
155         int blend;
156         int flags;
157         float range_min, range_max;
158
159 } LineStyleAlphaModifier_DistanceFromObject;
160
161 typedef struct LineStyleThicknessModifier_DistanceFromObject {
162         struct LineStyleModifier modifier;
163
164         struct Object *target;
165         struct CurveMapping     *curve;
166         int blend;
167         int flags;
168         float range_min, range_max;
169         float value_min, value_max;
170
171 } LineStyleThicknessModifier_DistanceFromObject;
172
173 /* FreestyleLineStyle::panel */
174 #define LS_PANEL_COLOR        1
175 #define LS_PANEL_ALPHA        2
176 #define LS_PANEL_THICKNESS    3
177 #define LS_PANEL_STROKES      4
178 #define LS_PANEL_DISTORT      5
179 #define LS_PANEL_MISC         6
180
181 typedef struct FreestyleLineStyle {
182         ID id;
183         struct AnimData *adt;
184
185         float r, g, b, alpha;
186         float thickness;
187         int panel; /* for UI */
188
189         ListBase color_modifiers;
190         ListBase alpha_modifiers;
191         ListBase thickness_modifiers;
192
193 } FreestyleLineStyle;
194
195 #endif