use bool for rna funcs.
[blender.git] / source / blender / makesrna / intern / rna_dynamicpaint.c
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 /** \file blender/makesrna/intern/rna_dynamicpaint.c
24  *  \ingroup RNA
25  */
26
27 #include <stdlib.h>
28 #include <limits.h>
29
30 #include "BLI_math_base.h"
31
32 #include "BKE_modifier.h"
33 #include "BKE_dynamicpaint.h"
34
35 #include "DNA_dynamicpaint_types.h"
36 #include "DNA_modifier_types.h"
37 #include "DNA_object_force.h"
38 #include "DNA_object_types.h"
39 #include "DNA_scene_types.h"
40
41 #include "RNA_define.h"
42
43 #include "rna_internal.h"
44
45 #include "WM_types.h"
46
47 EnumPropertyItem prop_dynamicpaint_type_items[] = {
48         {MOD_DYNAMICPAINT_TYPE_CANVAS, "CANVAS", 0, "Canvas", ""},
49         {MOD_DYNAMICPAINT_TYPE_BRUSH, "BRUSH", 0, "Brush", ""},
50         {0, NULL, 0, NULL, NULL}
51 };
52
53
54 #ifdef RNA_RUNTIME
55
56 #include "BKE_context.h"
57 #include "BKE_depsgraph.h"
58 #include "BKE_particle.h"
59
60
61 static char *rna_DynamicPaintCanvasSettings_path(PointerRNA *ptr)
62 {
63         DynamicPaintCanvasSettings *settings = (DynamicPaintCanvasSettings *)ptr->data;
64         ModifierData *md = (ModifierData *)settings->pmd;
65
66         return BLI_sprintfN("modifiers[\"%s\"].canvas_settings", md->name);
67 }
68
69 static char *rna_DynamicPaintBrushSettings_path(PointerRNA *ptr)
70 {
71         DynamicPaintBrushSettings *settings = (DynamicPaintBrushSettings *)ptr->data;
72         ModifierData *md = (ModifierData *)settings->pmd;
73
74         return BLI_sprintfN("modifiers[\"%s\"].brush_settings", md->name);
75 }
76
77 static char *rna_DynamicPaintSurface_path(PointerRNA *ptr)
78 {
79         DynamicPaintSurface *surface = (DynamicPaintSurface *)ptr->data;
80         ModifierData *md = (ModifierData *)surface->canvas->pmd;
81
82         return BLI_sprintfN("modifiers[\"%s\"].canvas_settings.canvas_surfaces[\"%s\"]", md->name, surface->name);
83 }
84
85
86 /*
87  *      Surfaces
88  */
89
90 static void rna_DynamicPaint_redoModifier(Main *bmain, Scene *scene, PointerRNA *ptr)
91 {
92         DAG_id_tag_update(ptr->id.data, OB_RECALC_DATA);
93 }
94
95 static void rna_DynamicPaintSurfaces_updateFrames(Main *bmain, Scene *scene, PointerRNA *ptr)
96 {
97         dynamicPaint_cacheUpdateFrames((DynamicPaintSurface *)ptr->data);
98 }
99
100 static void rna_DynamicPaintSurface_reset(Main *bmain, Scene *scene, PointerRNA *ptr)
101 {
102         dynamicPaint_resetSurface((DynamicPaintSurface *)ptr->data);
103         rna_DynamicPaint_redoModifier(bmain, scene, ptr);
104 }
105
106 static void rna_DynamicPaintSurface_initialcolortype(Main *bmain, Scene *scene, PointerRNA *ptr)
107 {
108         DynamicPaintSurface *surface = (DynamicPaintSurface *)ptr->data;
109
110         surface->init_layername[0] = '\0';
111         dynamicPaint_clearSurface(surface);
112         rna_DynamicPaint_redoModifier(bmain, scene, ptr);
113 }
114
115 static void rna_DynamicPaintSurface_changePreview(Main *bmain, Scene *scene, PointerRNA *ptr)
116 {
117         DynamicPaintSurface *act_surface = (DynamicPaintSurface *)ptr->data;
118         DynamicPaintSurface *surface = act_surface->canvas->surfaces.first;
119
120         /* since only one color surface can show preview at time
121          *  disable preview on other surfaces*/
122         for (; surface; surface = surface->next) {
123                 if (surface != act_surface)
124                         surface->flags &= ~MOD_DPAINT_PREVIEW;
125         }
126         rna_DynamicPaint_redoModifier(bmain, scene, ptr);
127 }
128
129 static void rna_DynamicPaintSurface_uniqueName(Main *bmain, Scene *scene, PointerRNA *ptr)
130 {
131         dynamicPaintSurface_setUniqueName((DynamicPaintSurface *)ptr->data, ((DynamicPaintSurface *)ptr->data)->name);
132 }
133
134
135 static void rna_DynamicPaintSurface_changeType(Main *bmain, Scene *scene, PointerRNA *ptr)
136 {
137         dynamicPaintSurface_updateType((DynamicPaintSurface *)ptr->data);
138         dynamicPaint_resetSurface((DynamicPaintSurface *)ptr->data);
139         rna_DynamicPaintSurface_reset(bmain, scene, ptr);
140 }
141
142 static void rna_DynamicPaintSurfaces_changeFormat(Main *bmain, Scene *scene, PointerRNA *ptr)
143 {
144         DynamicPaintSurface *surface = (DynamicPaintSurface *)ptr->data;
145
146         surface->type = MOD_DPAINT_SURFACE_T_PAINT;
147         dynamicPaintSurface_updateType((DynamicPaintSurface *)ptr->data);
148         rna_DynamicPaintSurface_reset(bmain, scene, ptr);
149 }
150
151 static void rna_DynamicPaint_resetDependancy(Main *bmain, Scene *scene, PointerRNA *ptr)
152 {
153         rna_DynamicPaintSurface_reset(bmain, scene, ptr);
154         DAG_relations_tag_update(bmain);
155 }
156
157 static PointerRNA rna_PaintSurface_active_get(PointerRNA *ptr)
158 {
159         DynamicPaintCanvasSettings *canvas = (DynamicPaintCanvasSettings *)ptr->data;
160         DynamicPaintSurface *surface = canvas->surfaces.first;
161         int id = 0;
162
163         for (; surface; surface = surface->next) {
164                 if (id == canvas->active_sur)
165                         return rna_pointer_inherit_refine(ptr, &RNA_DynamicPaintSurface, surface);
166                 id++;
167         }
168         return rna_pointer_inherit_refine(ptr, &RNA_DynamicPaintSurface, NULL);
169 }
170
171 static void rna_DynamicPaint_surfaces_begin(CollectionPropertyIterator *iter, PointerRNA *ptr)
172 {
173         DynamicPaintCanvasSettings *canvas = (DynamicPaintCanvasSettings *)ptr->data;
174         /*rna_iterator_array_begin(iter, (void *)canvas->surfaces, sizeof(PaintSurface), canvas->totsur, 0, 0); */
175         rna_iterator_listbase_begin(iter, &canvas->surfaces, NULL);
176 }
177
178 static int rna_Surface_active_point_index_get(PointerRNA *ptr)
179 {
180         DynamicPaintCanvasSettings *canvas = (DynamicPaintCanvasSettings *)ptr->data;
181         return canvas->active_sur;
182 }
183
184 static void rna_Surface_active_point_index_set(struct PointerRNA *ptr, int value)
185 {
186         DynamicPaintCanvasSettings *canvas = (DynamicPaintCanvasSettings *)ptr->data;
187         canvas->active_sur = value;
188         return;
189 }
190
191 static void rna_Surface_active_point_range(PointerRNA *ptr, int *min, int *max, int *softmin, int *softmax)
192 {
193         DynamicPaintCanvasSettings *canvas = (DynamicPaintCanvasSettings *)ptr->data;
194
195         *min = 0;
196         *max = BLI_countlist(&canvas->surfaces) - 1;
197 }
198
199 /* uvlayer */
200 static void rna_DynamicPaint_uvlayer_set(PointerRNA *ptr, const char *value)
201 {
202         DynamicPaintCanvasSettings *canvas = ((DynamicPaintSurface *)ptr->data)->canvas;
203         DynamicPaintSurface *surface = canvas->surfaces.first;
204         int id = 0;
205
206         for (; surface; surface = surface->next) {
207                 if (id == canvas->active_sur) {
208                         rna_object_uvlayer_name_set(ptr, value, surface->uvlayer_name, sizeof(surface->uvlayer_name));
209                         return;
210                 }
211                 id++;
212         }
213 }
214
215 /* is point cache used */
216 static int rna_DynamicPaint_is_cache_user_get(PointerRNA *ptr)
217 {
218         DynamicPaintSurface *surface = (DynamicPaintSurface *)ptr->data;
219
220         return (surface->format != MOD_DPAINT_SURFACE_F_IMAGESEQ) ?  1 : 0;
221 }
222
223 /* is some 3D view preview available */
224 static int rna_DynamicPaint_use_color_preview_get(PointerRNA *ptr)
225 {
226         DynamicPaintSurface *surface = (DynamicPaintSurface *)ptr->data;
227
228         return dynamicPaint_surfaceHasColorPreview(surface);
229 }
230
231 /* does output layer exist*/
232 static int rna_DynamicPaint_is_output_exists(DynamicPaintSurface *surface, Object *ob, int index)
233 {
234         return dynamicPaint_outputLayerExists(surface, ob, index);
235 }
236
237
238 static EnumPropertyItem *rna_DynamicPaint_surface_type_itemf(bContext *C, PointerRNA *ptr,
239                                                              PropertyRNA *UNUSED(prop), int *free)
240 {
241         DynamicPaintSurface *surface = (DynamicPaintSurface *)ptr->data;
242
243         EnumPropertyItem *item = NULL;
244         EnumPropertyItem tmp = {0, "", 0, "", ""};
245         int totitem = 0;
246
247         /* Paint type - available for all formats */
248         tmp.value = MOD_DPAINT_SURFACE_T_PAINT;
249         tmp.identifier = "PAINT";
250         tmp.name = "Paint";
251         tmp.icon = ICON_TPAINT_HLT;
252         RNA_enum_item_add(&item, &totitem, &tmp);
253
254         /* Displace */
255         if (surface->format == MOD_DPAINT_SURFACE_F_VERTEX ||
256             surface->format == MOD_DPAINT_SURFACE_F_IMAGESEQ)
257         {
258                 tmp.value = MOD_DPAINT_SURFACE_T_DISPLACE;
259                 tmp.identifier = "DISPLACE";
260                 tmp.name = "Displace";
261                 tmp.icon = ICON_MOD_DISPLACE;
262                 RNA_enum_item_add(&item, &totitem, &tmp);
263         }
264
265         /* Weight */
266         if (surface->format == MOD_DPAINT_SURFACE_F_VERTEX) {
267                 tmp.value = MOD_DPAINT_SURFACE_T_WEIGHT;
268                 tmp.identifier = "WEIGHT";
269                 tmp.name = "Weight";
270                 tmp.icon = ICON_MOD_VERTEX_WEIGHT;
271                 RNA_enum_item_add(&item, &totitem, &tmp);
272         }
273
274         /* Height waves */
275         {
276                 tmp.value = MOD_DPAINT_SURFACE_T_WAVE;
277                 tmp.identifier = "WAVE";
278                 tmp.name = "Waves";
279                 tmp.icon = ICON_MOD_WAVE;
280                 RNA_enum_item_add(&item, &totitem, &tmp);
281         }
282
283         RNA_enum_item_end(&item, &totitem);
284         *free = 1;
285
286         return item;
287 }
288
289 #else
290
291 /* canvas.canvas_surfaces */
292 static void rna_def_canvas_surfaces(BlenderRNA *brna, PropertyRNA *cprop)
293 {
294         StructRNA *srna;
295         PropertyRNA *prop;
296
297         RNA_def_property_srna(cprop, "DynamicPaintSurfaces");
298         srna = RNA_def_struct(brna, "DynamicPaintSurfaces", NULL);
299         RNA_def_struct_sdna(srna, "DynamicPaintCanvasSettings");
300         RNA_def_struct_ui_text(srna, "Canvas Surfaces", "Collection of Dynamic Paint Canvas surfaces");
301
302         prop = RNA_def_property(srna, "active_index", PROP_INT, PROP_UNSIGNED);
303         RNA_def_property_clear_flag(prop, PROP_ANIMATABLE);
304         RNA_def_property_int_funcs(prop, "rna_Surface_active_point_index_get", "rna_Surface_active_point_index_set",
305                                    "rna_Surface_active_point_range");
306         RNA_def_property_ui_text(prop, "Active Point Cache Index", "");
307
308         prop = RNA_def_property(srna, "active", PROP_POINTER, PROP_NONE);
309         RNA_def_property_struct_type(prop, "DynamicPaintSurface");
310         RNA_def_property_pointer_funcs(prop, "rna_PaintSurface_active_get", NULL, NULL, NULL);
311         RNA_def_property_ui_text(prop, "Active Surface", "Active Dynamic Paint surface being displayed");
312         RNA_def_property_update(prop, NC_OBJECT | ND_DRAW, NULL);
313 }
314
315
316 static void rna_def_canvas_surface(BlenderRNA *brna)
317 {
318         StructRNA *srna;
319         PropertyRNA *prop;
320         PropertyRNA *parm;
321         FunctionRNA *func;
322
323         /*  Surface format */
324         static EnumPropertyItem prop_dynamicpaint_surface_format[] = {
325                 /*{MOD_DPAINT_SURFACE_F_PTEX, "PTEX", ICON_TEXTURE_SHADED, "Ptex", ""}, */
326                 {MOD_DPAINT_SURFACE_F_VERTEX, "VERTEX", ICON_OUTLINER_DATA_MESH, "Vertex", ""},
327                 {MOD_DPAINT_SURFACE_F_IMAGESEQ, "IMAGE", ICON_FILE_IMAGE, "Image Sequence", ""},
328                 {0, NULL, 0, NULL, NULL}
329         };
330
331         /*  Surface type - generated dynamically based on surface format */
332         static EnumPropertyItem prop_dynamicpaint_surface_type[] = {
333                 {MOD_DPAINT_SURFACE_T_PAINT, "PAINT", 0, "Paint", ""},
334                 {0, NULL, 0, NULL, NULL}
335         };
336
337         /*  Surface output preview. currently only paint has multiple outputs */
338         static EnumPropertyItem prop_dynamicpaint_surface_preview[] = {
339                 {MOD_DPAINT_SURFACE_PREV_PAINT, "PAINT", 0, "Paint", ""},
340                 {MOD_DPAINT_SURFACE_PREV_WETMAP, "WETMAP", 0, "Wetmap", ""},
341                 {0, NULL, 0, NULL, NULL}
342         };
343
344         /*  Initial color setting */
345         static EnumPropertyItem prop_dynamicpaint_init_color_type[] = {
346                 {MOD_DPAINT_INITIAL_NONE, "NONE", 0, "None", ""},
347                 {MOD_DPAINT_INITIAL_COLOR, "COLOR", ICON_COLOR, "Color", ""},
348                 {MOD_DPAINT_INITIAL_TEXTURE, "TEXTURE", ICON_TEXTURE, "UV Texture", ""},
349                 {MOD_DPAINT_INITIAL_VERTEXCOLOR, "VERTEX_COLOR", ICON_GROUP_VCOL, "Vertex Color", ""},
350                 {0, NULL, 0, NULL, NULL}
351         };
352
353         /*  Effect type
354          *   Only used by ui to view per effect settings */
355         static EnumPropertyItem prop_dynamicpaint_effecttype[] = {
356                 {1, "SPREAD", 0, "Spread", ""},
357                 {2, "DRIP", 0, "Drip", ""},
358                 {3, "SHRINK", 0, "Shrink", ""},
359                 {0, NULL, 0, NULL, NULL}
360         };
361
362         /* Displacemap file format */
363         static EnumPropertyItem prop_dynamicpaint_image_fileformat[] = {
364                 {MOD_DPAINT_IMGFORMAT_PNG, "PNG", 0, "PNG", ""},
365 #ifdef WITH_OPENEXR
366                 {MOD_DPAINT_IMGFORMAT_OPENEXR, "OPENEXR", 0, "OpenEXR", ""},
367 #endif
368                 {0, NULL, 0, NULL, NULL}
369         };
370
371         /* Displacemap type */
372         static EnumPropertyItem prop_dynamicpaint_displace_type[] = {
373                 {MOD_DPAINT_DISP_DISPLACE, "DISPLACE", 0, "Displacement", ""},
374                 {MOD_DPAINT_DISP_DEPTH, "DEPTH", 0, "Depth", ""},
375                 {0, NULL, 0, NULL, NULL}
376         };
377
378
379
380         /* Surface */
381         srna = RNA_def_struct(brna, "DynamicPaintSurface", NULL);
382         RNA_def_struct_sdna(srna, "DynamicPaintSurface");
383         RNA_def_struct_ui_text(srna, "Paint Surface", "A canvas surface layer");
384         RNA_def_struct_path_func(srna, "rna_DynamicPaintSurface_path");
385
386         prop = RNA_def_property(srna, "surface_format", PROP_ENUM, PROP_NONE);
387         RNA_def_property_clear_flag(prop, PROP_ANIMATABLE);
388         RNA_def_property_enum_sdna(prop, NULL, "format");
389         RNA_def_property_enum_items(prop, prop_dynamicpaint_surface_format);
390         RNA_def_property_ui_text(prop, "Format", "Surface Format");
391         RNA_def_property_update(prop, NC_OBJECT | ND_MODIFIER, "rna_DynamicPaintSurfaces_changeFormat");
392
393         prop = RNA_def_property(srna, "surface_type", PROP_ENUM, PROP_NONE);
394         RNA_def_property_clear_flag(prop, PROP_ANIMATABLE);
395         RNA_def_property_enum_sdna(prop, NULL, "type");
396         RNA_def_property_enum_items(prop, prop_dynamicpaint_surface_type);
397         RNA_def_property_enum_funcs(prop, NULL, NULL, "rna_DynamicPaint_surface_type_itemf");
398         RNA_def_property_ui_text(prop, "Surface Type", "Surface Type");
399         RNA_def_property_update(prop, NC_OBJECT | ND_MODIFIER, "rna_DynamicPaintSurface_changeType");
400
401         prop = RNA_def_property(srna, "is_active", PROP_BOOLEAN, PROP_NONE);
402         RNA_def_property_boolean_sdna(prop, NULL, "flags", MOD_DPAINT_ACTIVE);
403         RNA_def_property_ui_text(prop, "Is Active", "Toggle whether surface is processed or ignored");
404         RNA_def_property_update(prop, NC_OBJECT | ND_MODIFIER, "rna_DynamicPaint_redoModifier");
405
406         prop = RNA_def_property(srna, "show_preview", PROP_BOOLEAN, PROP_NONE);
407         RNA_def_property_boolean_sdna(prop, NULL, "flags", MOD_DPAINT_PREVIEW);
408         RNA_def_property_ui_text(prop, "Show Preview", "Display surface preview in 3D-views");
409         RNA_def_property_update(prop, NC_OBJECT | ND_MODIFIER, "rna_DynamicPaintSurface_changePreview");
410
411         prop = RNA_def_property(srna, "name", PROP_STRING, PROP_NONE);
412         RNA_def_property_ui_text(prop, "Name", "Surface name");
413         RNA_def_property_update(prop, NC_OBJECT, "rna_DynamicPaintSurface_uniqueName");
414         RNA_def_struct_name_property(srna, prop);
415
416         prop = RNA_def_property(srna, "brush_group", PROP_POINTER, PROP_NONE);
417         RNA_def_property_struct_type(prop, "Group");
418         RNA_def_property_flag(prop, PROP_EDITABLE);
419         RNA_def_property_ui_text(prop, "Brush Group", "Only use brush objects from this group");
420         RNA_def_property_update(prop, NC_OBJECT | ND_MODIFIER, "rna_DynamicPaint_resetDependancy");
421
422
423         /*
424          *   Paint, wet and displace
425          */
426
427         prop = RNA_def_property(srna, "use_dissolve", PROP_BOOLEAN, PROP_NONE);
428         RNA_def_property_boolean_sdna(prop, NULL, "flags", MOD_DPAINT_DISSOLVE);
429         RNA_def_property_ui_text(prop, "Dissolve", "Enable to make surface changes disappear over time");
430         
431         prop = RNA_def_property(srna, "dissolve_speed", PROP_INT, PROP_NONE);
432         RNA_def_property_int_sdna(prop, NULL, "diss_speed");
433         RNA_def_property_range(prop, 1.0, 10000.0);
434         RNA_def_property_ui_range(prop, 1.0, 10000.0, 5, 0);
435         RNA_def_property_ui_text(prop, "Dissolve Speed", "Approximately in how many frames should dissolve happen");
436
437         prop = RNA_def_property(srna, "use_drying", PROP_BOOLEAN, PROP_NONE);
438         RNA_def_property_boolean_sdna(prop, NULL, "flags", MOD_DPAINT_USE_DRYING);
439         RNA_def_property_ui_text(prop, "Dry", "Enable to make surface wetness dry over time");
440         
441         prop = RNA_def_property(srna, "dry_speed", PROP_INT, PROP_NONE);
442         RNA_def_property_range(prop, 1.0, 10000.0);
443         RNA_def_property_ui_range(prop, 1.0, 10000.0, 5, 0);
444         RNA_def_property_ui_text(prop, "Dry Speed", "Approximately in how many frames should drying happen");
445         
446         /*
447          *   Simulation settings
448          */
449         prop = RNA_def_property(srna, "image_resolution", PROP_INT, PROP_NONE);
450         RNA_def_property_clear_flag(prop, PROP_ANIMATABLE);
451         RNA_def_property_range(prop, 16.0, 4096.0);
452         RNA_def_property_ui_range(prop, 16.0, 4096.0, 1, 0);
453         RNA_def_property_ui_text(prop, "Resolution", "Output image resolution");
454         
455         prop = RNA_def_property(srna, "uv_layer", PROP_STRING, PROP_NONE);
456         RNA_def_property_string_sdna(prop, NULL, "uvlayer_name");
457         RNA_def_property_ui_text(prop, "UV Map", "UV map name");
458         RNA_def_property_string_funcs(prop, NULL, NULL, "rna_DynamicPaint_uvlayer_set");
459         
460         prop = RNA_def_property(srna, "frame_start", PROP_INT, PROP_NONE);
461         RNA_def_property_int_sdna(prop, NULL, "start_frame");
462         RNA_def_property_clear_flag(prop, PROP_ANIMATABLE);
463         RNA_def_property_range(prop, 1.0, 9999.0);
464         RNA_def_property_ui_range(prop, 1.0, 9999, 1, 0);
465         RNA_def_property_ui_text(prop, "Start Frame", "Simulation start frame");
466         RNA_def_property_update(prop, NC_OBJECT | ND_MODIFIER, "rna_DynamicPaintSurfaces_updateFrames");
467         
468         prop = RNA_def_property(srna, "frame_end", PROP_INT, PROP_NONE);
469         RNA_def_property_int_sdna(prop, NULL, "end_frame");
470         RNA_def_property_clear_flag(prop, PROP_ANIMATABLE);
471         RNA_def_property_range(prop, 1.0, 9999.0);
472         RNA_def_property_ui_range(prop, 1.0, 9999.0, 1, 0);
473         RNA_def_property_ui_text(prop, "End Frame", "Simulation end frame");
474         RNA_def_property_update(prop, NC_OBJECT | ND_MODIFIER, "rna_DynamicPaintSurfaces_updateFrames");
475         
476         prop = RNA_def_property(srna, "frame_substeps", PROP_INT, PROP_NONE);
477         RNA_def_property_int_sdna(prop, NULL, "substeps");
478         RNA_def_property_range(prop, 0.0, 20.0);
479         RNA_def_property_ui_range(prop, 0.0, 10, 1, 0);
480         RNA_def_property_ui_text(prop, "Sub-Steps", "Do extra frames between scene frames to ensure smooth motion");
481         
482         prop = RNA_def_property(srna, "use_antialiasing", PROP_BOOLEAN, PROP_NONE);
483         RNA_def_property_clear_flag(prop, PROP_ANIMATABLE);
484         RNA_def_property_boolean_sdna(prop, NULL, "flags", MOD_DPAINT_ANTIALIAS);
485         RNA_def_property_ui_text(prop, "Anti-aliasing", "Use 5x multisampling to smooth paint edges");
486         RNA_def_property_update(prop, NC_OBJECT | ND_MODIFIER, "rna_DynamicPaintSurface_reset");
487
488         prop = RNA_def_property(srna, "brush_influence_scale", PROP_FLOAT, PROP_FACTOR);
489         RNA_def_property_float_sdna(prop, NULL, "influence_scale");
490         RNA_def_property_range(prop, 0.0, 1.0);
491         RNA_def_property_ui_range(prop, 0.0, 1.0, 1, 2);
492         RNA_def_property_ui_text(prop, "Influence Scale", "Adjust influence brush objects have on this surface");
493         RNA_def_property_update(prop, NC_OBJECT | ND_MODIFIER, "rna_DynamicPaint_redoModifier");
494
495         prop = RNA_def_property(srna, "brush_radius_scale", PROP_FLOAT, PROP_FACTOR);
496         RNA_def_property_float_sdna(prop, NULL, "radius_scale");
497         RNA_def_property_range(prop, 0.0, 10.0);
498         RNA_def_property_ui_range(prop, 0.0, 1.0, 1, 2);
499         RNA_def_property_ui_text(prop, "Radius Scale", "Adjust radius of proximity brushes or particles for this surface");
500         RNA_def_property_update(prop, NC_OBJECT | ND_MODIFIER, "rna_DynamicPaint_redoModifier");
501
502         /*
503          *      Initial Color
504          */
505
506         prop = RNA_def_property(srna, "init_color_type", PROP_ENUM, PROP_NONE);
507         RNA_def_property_clear_flag(prop, PROP_ANIMATABLE);
508         RNA_def_property_enum_items(prop, prop_dynamicpaint_init_color_type);
509         RNA_def_property_ui_text(prop, "Initial Color", "");
510         RNA_def_property_update(prop, NC_MATERIAL | ND_SHADING_DRAW | ND_MODIFIER, "rna_DynamicPaintSurface_initialcolortype");
511
512         prop = RNA_def_property(srna, "init_color", PROP_FLOAT, PROP_COLOR_GAMMA);
513         RNA_def_property_clear_flag(prop, PROP_ANIMATABLE);
514         RNA_def_property_array(prop, 4);
515         RNA_def_property_ui_text(prop, "Color", "Initial color of the surface");
516         RNA_def_property_update(prop, NC_MATERIAL | ND_SHADING_DRAW | ND_MODIFIER, "rna_DynamicPaintSurface_reset");
517
518         prop = RNA_def_property(srna, "init_texture", PROP_POINTER, PROP_NONE);
519         RNA_def_property_flag(prop, PROP_EDITABLE);
520         RNA_def_property_ui_text(prop, "Texture", "");
521         RNA_def_property_update(prop, NC_MATERIAL | ND_SHADING_DRAW | ND_MODIFIER, "rna_DynamicPaintSurface_reset");
522
523         prop = RNA_def_property(srna, "init_layername", PROP_STRING, PROP_NONE);
524         RNA_def_property_ui_text(prop, "Data Layer", "");
525         RNA_def_property_update(prop, NC_MATERIAL | ND_SHADING_DRAW | ND_MODIFIER, "rna_DynamicPaintSurface_reset");
526
527         /*
528          *   Effect Settings
529          */
530         prop = RNA_def_property(srna, "effect_ui", PROP_ENUM, PROP_NONE);
531         RNA_def_property_clear_flag(prop, PROP_ANIMATABLE);
532         RNA_def_property_enum_items(prop, prop_dynamicpaint_effecttype);
533         RNA_def_property_ui_text(prop, "Effect Type", "");
534         
535         prop = RNA_def_property(srna, "use_dry_log", PROP_BOOLEAN, PROP_NONE);
536         RNA_def_property_boolean_sdna(prop, NULL, "flags", MOD_DPAINT_DRY_LOG);
537         RNA_def_property_ui_text(prop, "Slow", "Use logarithmic drying (makes high values to dry faster than low values)");
538
539         prop = RNA_def_property(srna, "use_dissolve_log", PROP_BOOLEAN, PROP_NONE);
540         RNA_def_property_boolean_sdna(prop, NULL, "flags", MOD_DPAINT_DISSOLVE_LOG);
541         RNA_def_property_ui_text(prop, "Slow",
542                                  "Use logarithmic dissolve (makes high values to fade faster than low values)");
543         
544         prop = RNA_def_property(srna, "use_spread", PROP_BOOLEAN, PROP_NONE);
545         RNA_def_property_clear_flag(prop, PROP_ANIMATABLE);
546         RNA_def_property_boolean_sdna(prop, NULL, "effect", MOD_DPAINT_EFFECT_DO_SPREAD);
547         RNA_def_property_ui_text(prop, "Use Spread", "Process spread effect (spread wet paint around surface)");
548         RNA_def_property_update(prop, NC_OBJECT | ND_MODIFIER, "rna_DynamicPaintSurface_reset");
549         
550         prop = RNA_def_property(srna, "spread_speed", PROP_FLOAT, PROP_NONE);
551         RNA_def_property_float_sdna(prop, NULL, "spread_speed");
552         RNA_def_property_range(prop, 0.001, 10.0);
553         RNA_def_property_ui_range(prop, 0.01, 5.0, 1, 2);
554         RNA_def_property_ui_text(prop, "Spread Speed", "How fast spread effect moves on the canvas surface");
555
556         prop = RNA_def_property(srna, "color_dry_threshold", PROP_FLOAT, PROP_FACTOR);
557         RNA_def_property_float_sdna(prop, NULL, "color_dry_threshold");
558         RNA_def_property_range(prop, 0.0, 1.0);
559         RNA_def_property_ui_range(prop, 0.0, 1.0, 1, 2);
560         RNA_def_property_ui_text(prop, "Color Dry", "The wetness level when colors start to shift to the background");
561
562         prop = RNA_def_property(srna, "color_spread_speed", PROP_FLOAT, PROP_NONE);
563         RNA_def_property_float_sdna(prop, NULL, "color_spread_speed");
564         RNA_def_property_range(prop, 0.0, 2.0);
565         RNA_def_property_ui_range(prop, 0.0, 2.0, 1, 2);
566         RNA_def_property_ui_text(prop, "Color Spread", "How fast colors get mixed within wet paint");
567         
568         prop = RNA_def_property(srna, "use_drip", PROP_BOOLEAN, PROP_NONE);
569         RNA_def_property_clear_flag(prop, PROP_ANIMATABLE);
570         RNA_def_property_boolean_sdna(prop, NULL, "effect", MOD_DPAINT_EFFECT_DO_DRIP);
571         RNA_def_property_ui_text(prop, "Use Drip", "Process drip effect (drip wet paint to gravity direction)");
572         RNA_def_property_update(prop, NC_OBJECT | ND_MODIFIER, "rna_DynamicPaintSurface_reset");
573         
574         prop = RNA_def_property(srna, "use_shrink", PROP_BOOLEAN, PROP_NONE);
575         RNA_def_property_clear_flag(prop, PROP_ANIMATABLE);
576         RNA_def_property_boolean_sdna(prop, NULL, "effect", MOD_DPAINT_EFFECT_DO_SHRINK);
577         RNA_def_property_ui_text(prop, "Use Shrink", "Process shrink effect (shrink paint areas)");
578         RNA_def_property_update(prop, NC_OBJECT | ND_MODIFIER, "rna_DynamicPaintSurface_reset");
579         
580         prop = RNA_def_property(srna, "shrink_speed", PROP_FLOAT, PROP_NONE);
581         RNA_def_property_float_sdna(prop, NULL, "shrink_speed");
582         RNA_def_property_range(prop, 0.001, 10.0);
583         RNA_def_property_ui_range(prop, 0.01, 5.0, 1, 2);
584         RNA_def_property_ui_text(prop, "Shrink Speed", "How fast shrink effect moves on the canvas surface");
585
586         prop = RNA_def_property(srna, "effector_weights", PROP_POINTER, PROP_NONE);
587         RNA_def_property_struct_type(prop, "EffectorWeights");
588         RNA_def_property_clear_flag(prop, PROP_EDITABLE);
589         RNA_def_property_ui_text(prop, "Effector Weights", "");
590
591         prop = RNA_def_property(srna, "drip_velocity", PROP_FLOAT, PROP_NONE);
592         RNA_def_property_float_sdna(prop, NULL, "drip_vel");
593         RNA_def_property_range(prop, -200.0f, 200.0f);
594         RNA_def_property_ui_range(prop, 0.0f, 1.0f, 0.1, 3);
595         RNA_def_property_ui_text(prop, "Velocity", "How much surface velocity affects dripping");
596
597         prop = RNA_def_property(srna, "drip_acceleration", PROP_FLOAT, PROP_NONE);
598         RNA_def_property_float_sdna(prop, NULL, "drip_acc");
599         RNA_def_property_range(prop, -200.0f, 200.0f);
600         RNA_def_property_ui_range(prop, 0.0f, 1.0f, 0.1, 3);
601         RNA_def_property_ui_text(prop, "Acceleration", "How much surface acceleration affects dripping");
602
603         /*
604          *   Output settings
605          */
606         prop = RNA_def_property(srna, "use_premultiply", PROP_BOOLEAN, PROP_NONE);
607         RNA_def_property_clear_flag(prop, PROP_ANIMATABLE);
608         RNA_def_property_boolean_sdna(prop, NULL, "flags", MOD_DPAINT_MULALPHA);
609         RNA_def_property_ui_text(prop, "Premultiply alpha", "Multiply color by alpha (recommended for Blender input)");
610         
611         prop = RNA_def_property(srna, "image_output_path", PROP_STRING, PROP_DIRPATH);
612         RNA_def_property_string_sdna(prop, NULL, "image_output_path");
613         RNA_def_property_ui_text(prop, "Output Path", "Directory to save the textures");
614
615         /* output for primary surface data */
616         prop = RNA_def_property(srna, "output_name_a", PROP_STRING, PROP_NONE);
617         RNA_def_property_string_sdna(prop, NULL, "output_name");
618         RNA_def_property_ui_text(prop, "Output Name", "Name used to save output from this surface");
619
620         prop = RNA_def_property(srna, "use_output_a", PROP_BOOLEAN, PROP_NONE);
621         RNA_def_property_boolean_sdna(prop, NULL, "flags", MOD_DPAINT_OUT1);
622         RNA_def_property_ui_text(prop, "Use Output", "Save this output layer");
623
624         /* output for secondary sufrace data */
625         prop = RNA_def_property(srna, "output_name_b", PROP_STRING, PROP_NONE);
626         RNA_def_property_string_sdna(prop, NULL, "output_name2");
627         RNA_def_property_ui_text(prop, "Output Name", "Name used to save output from this surface");
628
629         prop = RNA_def_property(srna, "use_output_b", PROP_BOOLEAN, PROP_NONE);
630         RNA_def_property_boolean_sdna(prop, NULL, "flags", MOD_DPAINT_OUT2);
631         RNA_def_property_ui_text(prop, "Use Output", "Save this output layer");
632
633         prop = RNA_def_property(srna, "preview_id", PROP_ENUM, PROP_NONE);
634         RNA_def_property_clear_flag(prop, PROP_ANIMATABLE);
635         RNA_def_property_enum_sdna(prop, NULL, "preview_id");
636         RNA_def_property_enum_items(prop, prop_dynamicpaint_surface_preview);
637         RNA_def_property_ui_text(prop, "Preview", "");
638         RNA_def_property_update(prop, NC_OBJECT | ND_MODIFIER, "rna_DynamicPaint_redoModifier");
639
640         /* to check if output name exists */
641         func = RNA_def_function(srna, "output_exists", "rna_DynamicPaint_is_output_exists");
642         RNA_def_function_ui_description(func, "Checks if surface output layer of given name exists");
643         parm = RNA_def_pointer(func, "object", "Object", "", "");
644         RNA_def_property_flag(parm, PROP_REQUIRED | PROP_NEVER_NULL);
645         parm = RNA_def_int(func, "index", 0, 0, 1, "Index", "", 0, 1);
646         RNA_def_property_flag(parm, PROP_REQUIRED);
647         /* return type */
648         parm = RNA_def_boolean(func, "exists", 0, "", "");
649         RNA_def_function_return(func, parm);
650         
651         prop = RNA_def_property(srna, "depth_clamp", PROP_FLOAT, PROP_NONE);
652         RNA_def_property_clear_flag(prop, PROP_ANIMATABLE);
653         RNA_def_property_range(prop, 0.00, 50.0);
654         RNA_def_property_ui_range(prop, 0.00, 5.0, 1, 2);
655         RNA_def_property_ui_text(prop, "Max Displace",
656                                  "Maximum level of depth intersection in object space (use 0.0 to disable)");
657         RNA_def_property_update(prop, NC_OBJECT | ND_MODIFIER, "rna_DynamicPaint_redoModifier");
658
659         prop = RNA_def_property(srna, "displace_factor", PROP_FLOAT, PROP_NONE);
660         RNA_def_property_float_sdna(prop, NULL, "disp_factor");
661         RNA_def_property_clear_flag(prop, PROP_ANIMATABLE);
662         RNA_def_property_range(prop, -50.0, 50.0);
663         RNA_def_property_ui_range(prop, -5.0, 5.0, 1, 2);
664         RNA_def_property_ui_text(prop, "Displace Factor", "Strength of displace when applied to the mesh");
665         RNA_def_property_update(prop, NC_OBJECT | ND_MODIFIER, "rna_DynamicPaint_redoModifier");
666         
667         prop = RNA_def_property(srna, "image_fileformat", PROP_ENUM, PROP_NONE);
668         RNA_def_property_clear_flag(prop, PROP_ANIMATABLE);
669         RNA_def_property_enum_items(prop, prop_dynamicpaint_image_fileformat);
670         RNA_def_property_ui_text(prop, "File Format", "");
671         
672         prop = RNA_def_property(srna, "displace_type", PROP_ENUM, PROP_NONE);
673         RNA_def_property_enum_sdna(prop, NULL, "disp_type");
674         RNA_def_property_clear_flag(prop, PROP_ANIMATABLE);
675         RNA_def_property_enum_items(prop, prop_dynamicpaint_displace_type);
676         RNA_def_property_ui_text(prop, "Data Type", "");
677
678         prop = RNA_def_property(srna, "use_incremental_displace", PROP_BOOLEAN, PROP_NONE);
679         RNA_def_property_clear_flag(prop, PROP_ANIMATABLE);
680         RNA_def_property_boolean_sdna(prop, NULL, "flags", MOD_DPAINT_DISP_INCREMENTAL);
681         RNA_def_property_ui_text(prop, "Incremental", "New displace is added cumulatively on top of existing");
682         RNA_def_property_update(prop, NC_OBJECT | ND_MODIFIER, "rna_DynamicPaintSurface_reset");
683
684         /* wave simulator settings */
685         prop = RNA_def_property(srna, "wave_damping", PROP_FLOAT, PROP_NONE);
686         RNA_def_property_range(prop, 0.0, 1.0);
687         RNA_def_property_ui_range(prop, 0.01, 1.0, 1, 2);
688         RNA_def_property_ui_text(prop, "Damping", "Wave damping factor");
689
690         prop = RNA_def_property(srna, "wave_speed", PROP_FLOAT, PROP_NONE);
691         RNA_def_property_range(prop, 0.01, 5.0);
692         RNA_def_property_ui_range(prop, 0.20, 4.0, 1, 2);
693         RNA_def_property_ui_text(prop, "Speed", "Wave propagation speed");
694
695         prop = RNA_def_property(srna, "wave_timescale", PROP_FLOAT, PROP_NONE);
696         RNA_def_property_range(prop, 0.01, 3.0);
697         RNA_def_property_ui_range(prop, 0.01, 1.5, 1, 2);
698         RNA_def_property_ui_text(prop, "Timescale", "Wave time scaling factor");
699
700         prop = RNA_def_property(srna, "wave_spring", PROP_FLOAT, PROP_NONE);
701         RNA_def_property_range(prop, 0.0, 1.0);
702         RNA_def_property_ui_range(prop, 0.01, 1.0, 1, 2);
703         RNA_def_property_ui_text(prop, "Spring", "Spring force that pulls water level back to zero");
704
705         prop = RNA_def_property(srna, "use_wave_open_border", PROP_BOOLEAN, PROP_NONE);
706         RNA_def_property_boolean_sdna(prop, NULL, "flags", MOD_DPAINT_WAVE_OPEN_BORDERS);
707         RNA_def_property_ui_text(prop, "Open Borders", "Pass waves through mesh edges");
708
709         
710         /* cache */
711         prop = RNA_def_property(srna, "point_cache", PROP_POINTER, PROP_NONE);
712         RNA_def_property_flag(prop, PROP_NEVER_NULL);
713         RNA_def_property_pointer_sdna(prop, NULL, "pointcache");
714         RNA_def_property_ui_text(prop, "Point Cache", "");
715
716         /* is cache used */
717         prop = RNA_def_property(srna, "is_cache_user", PROP_BOOLEAN, PROP_NONE);
718         RNA_def_property_boolean_funcs(prop, "rna_DynamicPaint_is_cache_user_get", NULL);
719         RNA_def_property_ui_text(prop, "Use Cache", "");
720         RNA_def_property_clear_flag(prop, PROP_ANIMATABLE | PROP_EDITABLE);
721
722         /* whether this surface has preview data for 3D view */
723         RNA_define_verify_sdna(FALSE);
724         prop = RNA_def_property(srna, "use_color_preview", PROP_BOOLEAN, PROP_NONE);
725         RNA_def_property_boolean_funcs(prop, "rna_DynamicPaint_use_color_preview_get", NULL);
726         RNA_def_property_ui_text(prop, "Use Color Preview", "Whether this surface has some color preview for 3D view");
727         RNA_def_property_clear_flag(prop, PROP_ANIMATABLE | PROP_EDITABLE);
728         RNA_define_verify_sdna(TRUE);
729 }
730
731 static void rna_def_dynamic_paint_canvas_settings(BlenderRNA *brna)
732 {
733         StructRNA *srna;
734         PropertyRNA *prop;
735
736         srna = RNA_def_struct(brna, "DynamicPaintCanvasSettings", NULL);
737         RNA_def_struct_ui_text(srna, "Canvas Settings", "Dynamic Paint canvas settings");
738         RNA_def_struct_sdna(srna, "DynamicPaintCanvasSettings");
739         RNA_def_struct_path_func(srna, "rna_DynamicPaintCanvasSettings_path");
740
741         /*
742          *      Surface Slots
743          */
744         prop = RNA_def_property(srna, "canvas_surfaces", PROP_COLLECTION, PROP_NONE);
745         RNA_def_property_collection_funcs(prop, "rna_DynamicPaint_surfaces_begin", "rna_iterator_listbase_next",
746                                           "rna_iterator_listbase_end", "rna_iterator_listbase_get",
747                                           NULL, NULL, NULL, NULL);
748         RNA_def_property_struct_type(prop, "DynamicPaintSurface");
749         RNA_def_property_ui_text(prop, "Paint Surface List", "Paint surface list");
750         rna_def_canvas_surfaces(brna, prop);
751 }
752
753 static void rna_def_dynamic_paint_brush_settings(BlenderRNA *brna)
754 {
755         StructRNA *srna;
756         PropertyRNA *prop;
757
758         /* paint collision type */
759         static EnumPropertyItem prop_dynamicpaint_collisiontype[] = {
760                 {MOD_DPAINT_COL_PSYS, "PARTICLE_SYSTEM", ICON_PARTICLES, "Particle System", ""},
761                 {MOD_DPAINT_COL_POINT, "POINT", ICON_META_EMPTY, "Object Center", ""},
762                 {MOD_DPAINT_COL_DIST, "DISTANCE", ICON_META_EMPTY, "Proximity", ""},
763                 {MOD_DPAINT_COL_VOLDIST, "VOLUME_DISTANCE", ICON_META_CUBE, "Mesh Volume + Proximity", ""},
764                 {MOD_DPAINT_COL_VOLUME, "VOLUME", ICON_MESH_CUBE, "Mesh Volume", ""},
765                 {0, NULL, 0, NULL, NULL}
766         };
767
768         static EnumPropertyItem prop_dynamicpaint_prox_falloff[] = {
769                 {MOD_DPAINT_PRFALL_SMOOTH, "SMOOTH", ICON_SPHERECURVE, "Smooth", ""},
770                 {MOD_DPAINT_PRFALL_CONSTANT, "CONSTANT", ICON_NOCURVE, "Constant", ""},
771                 {MOD_DPAINT_PRFALL_RAMP, "RAMP", ICON_COLOR, "Color Ramp", ""},
772                 {0, NULL, 0, NULL, NULL}
773         };
774
775         static EnumPropertyItem prop_dynamicpaint_brush_wave_type[] = {
776                 {MOD_DPAINT_WAVEB_CHANGE, "CHANGE", 0, "Depth Change", ""},
777                 {MOD_DPAINT_WAVEB_DEPTH, "DEPTH", 0, "Obstacle", ""},
778                 {MOD_DPAINT_WAVEB_FORCE, "FORCE", 0, "Force", ""},
779                 {MOD_DPAINT_WAVEB_REFLECT, "REFLECT", 0, "Reflect Only", ""},
780                 {0, NULL, 0, NULL, NULL}
781         };
782
783         static EnumPropertyItem prop_dynamicpaint_brush_ray_dir[] = {
784                 {MOD_DPAINT_RAY_CANVAS, "CANVAS", 0, "Canvas Normal", ""},
785                 {MOD_DPAINT_RAY_BRUSH_AVG, "BRUSH", 0, "Brush Normal", ""},
786                 {MOD_DPAINT_RAY_ZPLUS, "Z_AXIS", 0, "Z-Axis", ""},
787                 {0, NULL, 0, NULL, NULL}
788         };
789
790         srna = RNA_def_struct(brna, "DynamicPaintBrushSettings", NULL);
791         RNA_def_struct_ui_text(srna, "Brush Settings", "Brush settings");
792         RNA_def_struct_sdna(srna, "DynamicPaintBrushSettings");
793         RNA_def_struct_path_func(srna, "rna_DynamicPaintBrushSettings_path");
794
795         /*
796          *   Paint
797          */
798         prop = RNA_def_property(srna, "paint_color", PROP_FLOAT, PROP_COLOR_GAMMA);
799         RNA_def_property_float_sdna(prop, NULL, "r");
800         RNA_def_property_array(prop, 3);
801         RNA_def_property_ui_text(prop, "Paint Color", "Color of the paint");
802         RNA_def_property_update(prop, NC_OBJECT | ND_MODIFIER, "rna_DynamicPaint_redoModifier");
803
804         prop = RNA_def_property(srna, "paint_alpha", PROP_FLOAT, PROP_NONE);
805         RNA_def_property_float_sdna(prop, NULL, "alpha");
806         RNA_def_property_range(prop, 0.0, 1.0);
807         RNA_def_property_ui_range(prop, 0.0, 1.0, 5, 2);
808         RNA_def_property_ui_text(prop, "Paint Alpha", "Paint alpha");
809         RNA_def_property_update(prop, NC_OBJECT | ND_MODIFIER, "rna_DynamicPaint_redoModifier");
810         
811         prop = RNA_def_property(srna, "use_material", PROP_BOOLEAN, PROP_NONE);
812         RNA_def_property_boolean_sdna(prop, NULL, "flags", MOD_DPAINT_USE_MATERIAL);
813         RNA_def_property_ui_text(prop, "Use object material", "Use object material to define color and influence");
814         RNA_def_property_update(prop, NC_OBJECT | ND_MODIFIER, "rna_DynamicPaint_redoModifier");
815
816         prop = RNA_def_property(srna, "material", PROP_POINTER, PROP_NONE);
817         RNA_def_property_pointer_sdna(prop, NULL, "mat");
818         RNA_def_property_ui_text(prop, "Material",
819                                  "Material to use (if not defined, material linked to the mesh is used)");
820         RNA_def_property_flag(prop, PROP_EDITABLE);
821         RNA_def_property_update(prop, NC_OBJECT | ND_MODIFIER, "rna_DynamicPaint_redoModifier");
822         
823         prop = RNA_def_property(srna, "use_absolute_alpha", PROP_BOOLEAN, PROP_NONE);
824         RNA_def_property_boolean_sdna(prop, NULL, "flags", MOD_DPAINT_ABS_ALPHA);
825         RNA_def_property_ui_text(prop, "Absolute Alpha",
826                                  "Only increase alpha value if paint alpha is higher than existing");
827         
828         prop = RNA_def_property(srna, "paint_wetness", PROP_FLOAT, PROP_NONE);
829         RNA_def_property_float_sdna(prop, NULL, "wetness");
830         RNA_def_property_range(prop, 0.0, 1.0);
831         RNA_def_property_ui_range(prop, 0.0, 1.0, 5, 2);
832         RNA_def_property_ui_text(prop, "Paint Wetness",
833                                  "Paint wetness, visible in wetmap (some effects only affect wet paint)");
834         RNA_def_property_update(prop, NC_OBJECT | ND_MODIFIER, "rna_DynamicPaint_redoModifier");
835         
836         prop = RNA_def_property(srna, "use_paint_erase", PROP_BOOLEAN, PROP_NONE);
837         RNA_def_property_boolean_sdna(prop, NULL, "flags", MOD_DPAINT_ERASE);
838         RNA_def_property_ui_text(prop, "Erase Paint", "Erase / remove paint instead of adding it");
839         RNA_def_property_update(prop, NC_OBJECT | ND_MODIFIER, "rna_DynamicPaint_redoModifier");
840
841         prop = RNA_def_property(srna, "wave_type", PROP_ENUM, PROP_NONE);
842         RNA_def_property_clear_flag(prop, PROP_ANIMATABLE);
843         RNA_def_property_enum_items(prop, prop_dynamicpaint_brush_wave_type);
844         RNA_def_property_ui_text(prop, "Wave Type", "");
845
846         prop = RNA_def_property(srna, "wave_factor", PROP_FLOAT, PROP_NONE);
847         RNA_def_property_range(prop, -2.0, 2.0);
848         RNA_def_property_ui_range(prop, -1.0, 1.0, 5, 2);
849         RNA_def_property_ui_text(prop, "Factor", "Multiplier for wave influence of this brush");
850
851         prop = RNA_def_property(srna, "wave_clamp", PROP_FLOAT, PROP_NONE);
852         RNA_def_property_range(prop, 0.00, 50.0);
853         RNA_def_property_ui_range(prop, 0.00, 5.0, 1, 2);
854         RNA_def_property_ui_text(prop, "Clamp Waves",
855                                  "Maximum level of surface intersection used to influence waves (use 0.0 to disable)");
856
857         prop = RNA_def_property(srna, "use_smudge", PROP_BOOLEAN, PROP_NONE);
858         RNA_def_property_boolean_sdna(prop, NULL, "flags", MOD_DPAINT_DO_SMUDGE);
859         RNA_def_property_ui_text(prop, "Do Smudge", "Make this brush to smudge existing paint as it moves");
860
861         prop = RNA_def_property(srna, "smudge_strength", PROP_FLOAT, PROP_NONE);
862         RNA_def_property_range(prop, 0.0, 1.0);
863         RNA_def_property_ui_range(prop, 0.0, 1.0, 5, 2);
864         RNA_def_property_ui_text(prop, "Smudge Strength", "Smudge effect strength");
865
866         prop = RNA_def_property(srna, "velocity_max", PROP_FLOAT, PROP_NONE);
867         RNA_def_property_float_sdna(prop, NULL, "max_velocity");
868         RNA_def_property_range(prop, 0.0001, 10.0);
869         RNA_def_property_ui_range(prop, 0.1, 2.0, 5, 2);
870         RNA_def_property_ui_text(prop, "Max Velocity",
871                                  "Velocity considered as maximum influence (Blender units per frame)");
872
873         prop = RNA_def_property(srna, "use_velocity_alpha", PROP_BOOLEAN, PROP_NONE);
874         RNA_def_property_boolean_sdna(prop, NULL, "flags", MOD_DPAINT_VELOCITY_ALPHA);
875         RNA_def_property_ui_text(prop, "Multiply Alpha", "Multiply brush influence by velocity color ramp alpha");
876         RNA_def_property_update(prop, NC_OBJECT | ND_MODIFIER, "rna_DynamicPaint_redoModifier");
877
878         prop = RNA_def_property(srna, "use_velocity_depth", PROP_BOOLEAN, PROP_NONE);
879         RNA_def_property_boolean_sdna(prop, NULL, "flags", MOD_DPAINT_VELOCITY_DEPTH);
880         RNA_def_property_ui_text(prop, "Multiply Depth",
881                                  "Multiply brush intersection depth (displace, waves) by velocity ramp alpha");
882         RNA_def_property_update(prop, NC_OBJECT | ND_MODIFIER, "rna_DynamicPaint_redoModifier");
883
884         prop = RNA_def_property(srna, "use_velocity_color", PROP_BOOLEAN, PROP_NONE);
885         RNA_def_property_boolean_sdna(prop, NULL, "flags", MOD_DPAINT_VELOCITY_COLOR);
886         RNA_def_property_ui_text(prop, "Replace Color", "Replace brush color by velocity color ramp");
887         RNA_def_property_update(prop, NC_OBJECT | ND_MODIFIER, "rna_DynamicPaint_redoModifier");
888         
889         /*
890          *   Paint Area / Collision
891          */
892         prop = RNA_def_property(srna, "paint_source", PROP_ENUM, PROP_NONE);
893         RNA_def_property_clear_flag(prop, PROP_ANIMATABLE);
894         RNA_def_property_enum_sdna(prop, NULL, "collision");
895         RNA_def_property_enum_items(prop, prop_dynamicpaint_collisiontype);
896         RNA_def_property_ui_text(prop, "Paint Source", "");
897         RNA_def_property_update(prop, NC_OBJECT | ND_MODIFIER, "rna_DynamicPaint_redoModifier");
898         
899         prop = RNA_def_property(srna, "paint_distance", PROP_FLOAT, PROP_NONE);
900         RNA_def_property_float_sdna(prop, NULL, "paint_distance");
901         RNA_def_property_range(prop, 0.0, 500.0);
902         RNA_def_property_ui_range(prop, 0.0, 500.0, 10, 3);
903         RNA_def_property_ui_text(prop, "Proximity Distance",
904                                  "Maximum distance from brush to mesh surface to affect paint");
905         RNA_def_property_update(prop, NC_OBJECT | ND_MODIFIER, "rna_DynamicPaint_redoModifier");
906         
907         prop = RNA_def_property(srna, "use_proximity_ramp_alpha", PROP_BOOLEAN, PROP_NONE);
908         RNA_def_property_boolean_sdna(prop, NULL, "flags", MOD_DPAINT_RAMP_ALPHA);
909         RNA_def_property_ui_text(prop, "Only Use Alpha", "Only read color ramp alpha");
910         RNA_def_property_update(prop, NC_OBJECT | ND_MODIFIER, "rna_DynamicPaint_redoModifier");
911         
912         prop = RNA_def_property(srna, "proximity_falloff", PROP_ENUM, PROP_NONE);
913         RNA_def_property_clear_flag(prop, PROP_ANIMATABLE);
914         RNA_def_property_enum_sdna(prop, NULL, "proximity_falloff");
915         RNA_def_property_enum_items(prop, prop_dynamicpaint_prox_falloff);
916         RNA_def_property_ui_text(prop, "Falloff", "Proximity falloff type");
917         RNA_def_property_update(prop, NC_OBJECT | ND_MODIFIER, "rna_DynamicPaint_redoModifier");
918         
919         prop = RNA_def_property(srna, "use_proximity_project", PROP_BOOLEAN, PROP_NONE);
920         RNA_def_property_boolean_sdna(prop, NULL, "flags", MOD_DPAINT_PROX_PROJECT);
921         RNA_def_property_ui_text(prop, "Project",
922                                  "Brush is projected to canvas from defined direction within brush proximity");
923         RNA_def_property_update(prop, NC_OBJECT | ND_MODIFIER, "rna_DynamicPaint_redoModifier");
924
925         prop = RNA_def_property(srna, "ray_direction", PROP_ENUM, PROP_NONE);
926         RNA_def_property_enum_sdna(prop, NULL, "ray_dir");
927         RNA_def_property_enum_items(prop, prop_dynamicpaint_brush_ray_dir);
928         RNA_def_property_ui_text(prop, "Ray Direction",
929                                  "Ray direction to use for projection (if brush object is located in that direction "
930                                  "it's painted)");
931         RNA_def_property_update(prop, NC_OBJECT | ND_MODIFIER, "rna_DynamicPaint_redoModifier");
932
933         prop = RNA_def_property(srna, "invert_proximity", PROP_BOOLEAN, PROP_NONE);
934         RNA_def_property_boolean_sdna(prop, NULL, "flags", MOD_DPAINT_INVERSE_PROX);
935         RNA_def_property_ui_text(prop, "Inner Proximity", "Proximity falloff is applied inside the volume");
936         RNA_def_property_update(prop, NC_OBJECT | ND_MODIFIER, "rna_DynamicPaint_redoModifier");
937
938         prop = RNA_def_property(srna, "use_negative_volume", PROP_BOOLEAN, PROP_NONE);
939         RNA_def_property_boolean_sdna(prop, NULL, "flags", MOD_DPAINT_NEGATE_VOLUME);
940         RNA_def_property_ui_text(prop, "Negate Volume", "Negate influence inside the volume");
941         RNA_def_property_update(prop, NC_OBJECT | ND_MODIFIER, "rna_DynamicPaint_redoModifier");
942         
943
944         /*
945          *   Particle
946          */
947         prop = RNA_def_property(srna, "particle_system", PROP_POINTER, PROP_NONE);
948         RNA_def_property_pointer_sdna(prop, NULL, "psys");
949         RNA_def_property_struct_type(prop, "ParticleSystem");
950         RNA_def_property_flag(prop, PROP_EDITABLE);
951         RNA_def_property_ui_text(prop, "Particle Systems", "The particle system to paint with");
952         RNA_def_property_update(prop, NC_OBJECT | ND_MODIFIER, "rna_DynamicPaint_resetDependancy");
953
954         
955         prop = RNA_def_property(srna, "use_particle_radius", PROP_BOOLEAN, PROP_NONE);
956         RNA_def_property_boolean_sdna(prop, NULL, "flags", MOD_DPAINT_PART_RAD);
957         RNA_def_property_ui_text(prop, "Use Particle Radius", "Use radius from particle settings");
958         RNA_def_property_update(prop, NC_OBJECT | ND_MODIFIER, "rna_DynamicPaint_redoModifier");
959         
960         prop = RNA_def_property(srna, "solid_radius", PROP_FLOAT, PROP_NONE);
961         RNA_def_property_float_sdna(prop, NULL, "particle_radius");
962         RNA_def_property_range(prop, 0.01, 10.0);
963         RNA_def_property_ui_range(prop, 0.01, 2.0, 5, 3);
964         RNA_def_property_ui_text(prop, "Solid Radius", "Radius that will be painted solid");
965         RNA_def_property_update(prop, NC_OBJECT | ND_MODIFIER, "rna_DynamicPaint_redoModifier");
966
967         prop = RNA_def_property(srna, "smooth_radius", PROP_FLOAT, PROP_NONE);
968         RNA_def_property_float_sdna(prop, NULL, "particle_smooth");
969         RNA_def_property_range(prop, 0.0, 10.0);
970         RNA_def_property_ui_range(prop, 0.0, 1.0, 5, 0);
971         RNA_def_property_ui_text(prop, "Smooth Radius", "Smooth falloff added after solid radius");
972         RNA_def_property_update(prop, NC_OBJECT | ND_MODIFIER, "rna_DynamicPaint_redoModifier");
973         
974
975         /*
976          * Color ramps
977          */
978         prop = RNA_def_property(srna, "paint_ramp", PROP_POINTER, PROP_NONE);
979         RNA_def_property_pointer_sdna(prop, NULL, "paint_ramp");
980         RNA_def_property_struct_type(prop, "ColorRamp");
981         RNA_def_property_ui_text(prop, "Paint Color Ramp", "Color ramp used to define proximity falloff");
982         RNA_def_property_update(prop, NC_OBJECT | ND_MODIFIER, "rna_DynamicPaint_redoModifier");
983
984         prop = RNA_def_property(srna, "velocity_ramp", PROP_POINTER, PROP_NONE);
985         RNA_def_property_pointer_sdna(prop, NULL, "vel_ramp");
986         RNA_def_property_struct_type(prop, "ColorRamp");
987         RNA_def_property_ui_text(prop, "Velocity Color Ramp", "Color ramp used to define brush velocity effect");
988         RNA_def_property_update(prop, NC_OBJECT | ND_MODIFIER, "rna_DynamicPaint_redoModifier");
989 }
990
991 void RNA_def_dynamic_paint(BlenderRNA *brna)
992 {
993         rna_def_dynamic_paint_canvas_settings(brna);
994         rna_def_dynamic_paint_brush_settings(brna);
995         rna_def_canvas_surface(brna);
996 }
997
998 #endif