MBall cleanup: remove unused F_ERROR references, als fix/enhance BKE_mball_basis_find()
[blender.git] / source / blender / makesdna / DNA_dynamicpaint_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  * Contributor(s): Miika Hämäläinen
19  *
20  * ***** END GPL LICENSE BLOCK *****
21  *
22  */
23
24 /** \file DNA_dynamicpaint_types.h
25  *  \ingroup DNA
26  */
27
28 #ifndef __DNA_DYNAMICPAINT_TYPES_H__
29 #define __DNA_DYNAMICPAINT_TYPES_H__
30
31 #include "DNA_listBase.h"
32 struct CurveMapping;
33 struct PaintSurfaceData;
34
35 /* surface format */
36 #define MOD_DPAINT_SURFACE_F_PTEX 0
37 #define MOD_DPAINT_SURFACE_F_VERTEX 1
38 #define MOD_DPAINT_SURFACE_F_IMAGESEQ 2
39
40 /* surface type */
41 #define MOD_DPAINT_SURFACE_T_PAINT 0
42 #define MOD_DPAINT_SURFACE_T_DISPLACE 1
43 #define MOD_DPAINT_SURFACE_T_WEIGHT 2
44 #define MOD_DPAINT_SURFACE_T_WAVE 3
45
46 /* surface flags */
47 #define MOD_DPAINT_ACTIVE (1<<0) /* Is surface enabled */
48
49 #define MOD_DPAINT_ANTIALIAS (1<<1) /* do antialiasing */
50 #define MOD_DPAINT_DISSOLVE (1<<2) /* do dissolve */
51 #define MOD_DPAINT_MULALPHA (1<<3) /* Multiply color by alpha when saving image */
52 #define MOD_DPAINT_DISSOLVE_LOG (1<<4) /* Use 1/x for surface dissolve */
53 #define MOD_DPAINT_DRY_LOG (1<<5) /* Use 1/x for drying paint */
54 #define MOD_DPAINT_PREVIEW (1<<6) /* preview this surface on viewport*/
55
56 #define MOD_DPAINT_WAVE_OPEN_BORDERS (1<<7) /* passes waves through mesh edges */
57 #define MOD_DPAINT_DISP_INCREMENTAL (1<<8) /* builds displace on top of earlier values */
58 #define MOD_DPAINT_USE_DRYING (1<<9) /* use drying */
59
60 #define MOD_DPAINT_OUT1 (1<<10) /* output primary surface */
61 #define MOD_DPAINT_OUT2 (1<<11) /* output secondary surface */
62
63 /* image_fileformat */
64 #define MOD_DPAINT_IMGFORMAT_PNG 0
65 #define MOD_DPAINT_IMGFORMAT_OPENEXR 1
66
67 /* disp_format */
68 #define MOD_DPAINT_DISP_DISPLACE 0 /* displacement output displace map */
69 #define MOD_DPAINT_DISP_DEPTH 1 /* displacement output depth data */
70
71 /* effect */
72 #define MOD_DPAINT_EFFECT_DO_SPREAD (1<<0) /* do spread effect */
73 #define MOD_DPAINT_EFFECT_DO_DRIP (1<<1) /* do drip effect */
74 #define MOD_DPAINT_EFFECT_DO_SHRINK (1<<2) /* do shrink effect */
75
76 /* preview_id */
77 #define MOD_DPAINT_SURFACE_PREV_PAINT 0
78 #define MOD_DPAINT_SURFACE_PREV_WETMAP 1
79
80 /* init_color_type */
81 #define MOD_DPAINT_INITIAL_NONE 0
82 #define MOD_DPAINT_INITIAL_COLOR 1
83 #define MOD_DPAINT_INITIAL_TEXTURE 2
84 #define MOD_DPAINT_INITIAL_VERTEXCOLOR 3
85
86 typedef struct DynamicPaintSurface {
87         
88         struct DynamicPaintSurface *next, *prev;
89         struct DynamicPaintCanvasSettings *canvas; /* for fast RNA access */
90         struct PaintSurfaceData *data;
91
92         struct Group *brush_group;
93         struct EffectorWeights *effector_weights;
94
95         /* cache */
96         struct PointCache *pointcache;
97         struct ListBase ptcaches;
98         int current_frame;
99
100         /* surface */
101         char name[64];
102         short format, type;
103         short disp_type, image_fileformat;
104         short effect_ui;        /* ui selection box */
105         short preview_id;       /* surface output id to preview */
106         short init_color_type, pad_s;
107         int flags, effect;
108
109         int image_resolution, substeps;
110         int start_frame, end_frame, pad;
111
112         /* initial color */
113         float init_color[4];
114         struct Tex *init_texture;
115         char init_layername[64];  /* MAX_CUSTOMDATA_LAYER_NAME */
116
117         int dry_speed, diss_speed;
118         float color_dry_threshold;
119         float depth_clamp, disp_factor;
120
121         float spread_speed, color_spread_speed, shrink_speed;
122         float drip_vel, drip_acc;
123
124         /* per surface brush settings */
125         float influence_scale, radius_scale;
126
127         /* wave settings */
128         float wave_damping, wave_speed, wave_timescale, wave_spring, wave_smoothness;
129         int pad2;
130
131         char uvlayer_name[64];  /* MAX_CUSTOMDATA_LAYER_NAME */
132         char image_output_path[1024];  /* 1024 = FILE_MAX */
133         char output_name[64];  /* MAX_CUSTOMDATA_LAYER_NAME */
134         char output_name2[64]; /* MAX_CUSTOMDATA_LAYER_NAME */ /* some surfaces have 2 outputs */
135
136 } DynamicPaintSurface;
137
138 /* canvas flags */
139 #if 0 /* This should not be needed, having a valid WEIGHT_MCOL layer should be enough.
140        * And if not, should be a general flag. But seems unnecessary for now... */
141 #define MOD_DPAINT_PREVIEW_READY (1<<0) /* if viewport preview is ready */
142 #endif
143 #define MOD_DPAINT_BAKING (1<<1) /* surface is already baking, so it wont get updated (loop) */
144
145 /* Canvas settings */
146 typedef struct DynamicPaintCanvasSettings {
147         struct DynamicPaintModifierData *pmd; /* for fast RNA access */
148         struct DerivedMesh *dm;
149
150         struct ListBase surfaces;
151         short active_sur, flags;
152         int pad;
153
154         char error[64];         /* Bake error description */
155
156 } DynamicPaintCanvasSettings;
157
158
159 /* flags */
160 #define MOD_DPAINT_PART_RAD (1<<0) /* use particle radius */
161 #define MOD_DPAINT_USE_MATERIAL (1<<1) /* use object material */
162 #define MOD_DPAINT_ABS_ALPHA (1<<2) /* don't increase alpha unless
163                                      * paint alpha is higher than existing */
164 #define MOD_DPAINT_ERASE (1<<3) /* removes paint */
165
166 #define MOD_DPAINT_RAMP_ALPHA (1<<4) /* only read falloff ramp alpha */
167 #define MOD_DPAINT_PROX_PROJECT (1<<5) /* do proximity check only in defined dir */
168 #define MOD_DPAINT_INVERSE_PROX (1<<6) /* inverse proximity painting */
169 #define MOD_DPAINT_NEGATE_VOLUME (1<<7) /* negates volume influence on "volume + prox" mode */
170
171 #define MOD_DPAINT_DO_SMUDGE (1<<8) /* brush smudges existing paint */
172 #define MOD_DPAINT_VELOCITY_ALPHA (1<<9) /* multiply brush influence by velocity */
173 #define MOD_DPAINT_VELOCITY_COLOR (1<<10) /* replace brush color by velocity color ramp */
174 #define MOD_DPAINT_VELOCITY_DEPTH (1<<11) /* multiply brush intersection depth by velocity */
175
176 #define MOD_DPAINT_USES_VELOCITY ((1<<8)|(1<<9)|(1<<10)|(1<<11))
177
178 /* collision type */
179 #define MOD_DPAINT_COL_VOLUME 0 /* paint with mesh volume */
180 #define MOD_DPAINT_COL_DIST 1 /* paint using distance to mesh surface */
181 #define MOD_DPAINT_COL_VOLDIST 2 /* use both volume and distance */
182 #define MOD_DPAINT_COL_PSYS 3 /* use particle system */
183 #define MOD_DPAINT_COL_POINT 4 /* use distance to object center point */
184
185 /* proximity_falloff */
186 #define MOD_DPAINT_PRFALL_CONSTANT 0 /* no-falloff */
187 #define MOD_DPAINT_PRFALL_SMOOTH 1 /* smooth, linear falloff */
188 #define MOD_DPAINT_PRFALL_RAMP 2 /* use color ramp */
189
190 /* wave_brush_type */
191 #define MOD_DPAINT_WAVEB_DEPTH 0 /* use intersection depth */
192 #define MOD_DPAINT_WAVEB_FORCE 1 /* act as a force on intersection area */
193 #define MOD_DPAINT_WAVEB_REFLECT 2 /* obstacle that reflects waves */
194 #define MOD_DPAINT_WAVEB_CHANGE 3  /* use change of intersection depth from previous frame */
195
196 /* brush ray_dir */
197 #define MOD_DPAINT_RAY_CANVAS 0
198 #define MOD_DPAINT_RAY_BRUSH_AVG 1
199 #define MOD_DPAINT_RAY_ZPLUS 2
200
201
202 /* Brush settings */
203 typedef struct DynamicPaintBrushSettings {
204         struct DynamicPaintModifierData *pmd; /* for fast RNA access */
205         struct DerivedMesh *dm;
206         struct ParticleSystem *psys;
207         struct Material *mat;
208
209         int flags;
210         int collision;
211
212         float r, g, b, alpha;
213         float wetness;
214
215         float particle_radius, particle_smooth;
216         float paint_distance;
217
218         /* color ramps */
219         struct ColorBand *paint_ramp;   /* Proximity paint falloff */
220         struct ColorBand *vel_ramp;             /* Velocity paint ramp */
221
222         short proximity_falloff;
223         short wave_type;
224         short ray_dir;
225         short pad;
226
227         float wave_factor, wave_clamp;
228         float max_velocity, smudge_strength;
229 } DynamicPaintBrushSettings;
230
231 #endif