~siretart/ubuntu/utopic/blender/libav10

« back to all changes in this revision

Viewing changes to source/blender/makesrna/intern/rna_dynamicpaint.c

  • Committer: Package Import Robot
  • Author(s): Matteo F. Vescovi
  • Date: 2012-07-23 08:54:18 UTC
  • mfrom: (14.2.16 sid)
  • mto: (14.2.19 sid)
  • mto: This revision was merged to the branch mainline in revision 42.
  • Revision ID: package-import@ubuntu.com-20120723085418-9foz30v6afaf5ffs
Tags: 2.63a-2
* debian/: Cycles support added (Closes: #658075)
  For now, this top feature has been enabled only
  on [any-amd64 any-i386] architectures because
  of OpenImageIO failing on all others
* debian/: scripts installation path changed
  from /usr/lib to /usr/share:
  + debian/patches/: patchset re-worked for path changing
  + debian/control: "Breaks" field added on yafaray-exporter

Show diffs side-by-side

added added

removed removed

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