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