c986fed93f12b6ae8e7f4fa00d0ce33acfdc98d4
[blender.git] / source / blender / makesrna / intern / rna_fluidsim.c
1 /**
2  * $Id$
3  *
4  * ***** BEGIN GPL LICENSE BLOCK *****
5  *
6  * This program is free software; you can redistribute it and/or
7  * modify it under the terms of the GNU General Public License
8  * as published by the Free Software Foundation; either version 2
9  * of the License, or (at your option) any later version.
10  *
11  * This program is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14  * GNU General Public License for more details.
15  *
16  * You should have received a copy of the GNU General Public License
17  * along with this program; if not, write to the Free Software Foundation,
18  * Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
19  *
20  * Contributor(s): Blender Foundation (2008).
21  *
22  * ***** END GPL LICENSE BLOCK *****
23  */
24
25 #include <stdlib.h>
26
27 #include "RNA_define.h"
28 #include "RNA_types.h"
29
30 #include "rna_internal.h"
31
32 #include "DNA_object_fluidsim.h"
33
34 #ifdef RNA_RUNTIME
35
36 static StructRNA* rna_FluidSettings_refine(struct PointerRNA *ptr)
37 {
38         FluidsimSettings *fss= (FluidsimSettings*)ptr->data;
39
40         switch(fss->type) {
41                 case OB_FLUIDSIM_DOMAIN:
42                         return &RNA_DomainFluidSettings;
43                 case OB_FLUIDSIM_FLUID:
44                         return &RNA_FluidFluidSettings;
45                 case OB_FLUIDSIM_OBSTACLE:
46                         return &RNA_ObstacleFluidSettings;
47                 case OB_FLUIDSIM_INFLOW:
48                         return &RNA_InflowFluidSettings;
49                 case OB_FLUIDSIM_OUTFLOW:
50                         return &RNA_OutflowFluidSettings;
51                 case OB_FLUIDSIM_PARTICLE:
52                         return &RNA_ParticleFluidSettings;
53                 case OB_FLUIDSIM_CONTROL:
54                         return &RNA_ControlFluidSettings;
55                 default:
56                         return &RNA_FluidSettings;
57         }
58 }
59
60 #else
61
62 static void rna_def_fluidsim_slip(StructRNA *srna)
63 {
64         PropertyRNA *prop;
65
66         static EnumPropertyItem slip_items[] = {
67                 {OB_FSBND_NOSLIP, "NOSLIP", "No Slip", "Obstacle causes zero normal and tangential velocity (=sticky). Default for all. Only option for moving objects."},
68                 {OB_FSBND_PARTSLIP, "PARTIALSLIP", "Partial Slip", "Mix between no-slip and free-slip. Non moving objects only!"},
69                 {OB_FSBND_FREESLIP, "FREESLIP", "Free Slip", "Obstacle only causes zero normal velocity (=not sticky). Non moving objects only!"},
70                 {0, NULL, NULL, NULL}};
71
72         prop= RNA_def_property(srna, "slip_type", PROP_ENUM, PROP_NONE);
73         RNA_def_property_enum_bitflag_sdna(prop, NULL, "typeFlags");
74         RNA_def_property_enum_items(prop, slip_items);
75         RNA_def_property_ui_text(prop, "Slip Type", "");
76
77         prop= RNA_def_property(srna, "partial_slip_amount", PROP_FLOAT, PROP_NONE);
78         RNA_def_property_float_sdna(prop, NULL, "partSlipValue");
79         RNA_def_property_range(prop, 0.0f, 1.0f);
80         RNA_def_property_ui_text(prop, "Partial Slip Amount", "Amount of mixing between no- and free-slip, 0 is no slip and 1 is free slip.");
81 }
82
83 static void rna_def_fluidsim_domain(BlenderRNA *brna, StructRNA *parent)
84 {
85         StructRNA *srna;
86         PropertyRNA *prop;
87
88         static EnumPropertyItem quality_items[] = {
89                 {OB_FSDOM_GEOM, "GEOMETRY", "Geometry", "Display geometry."},
90                 {OB_FSDOM_PREVIEW, "PREVIEW", "Preview", "Display preview quality results."},
91                 {OB_FSDOM_FINAL, "FINAL", "Final", "Display final quality results."},
92                 {0, NULL, NULL, NULL}};
93
94         static EnumPropertyItem viscosity_items[] = {
95                 {1, "MANUAL", "Manual", "Manual viscosity settings."},
96                 {2, "WATER", "Water", "Viscosity of 1.0 * 10^-6."},
97                 {3, "OIL", "Oil", "Viscosity of 5.0 * 10^-5."},
98                 {4, "HONEY", "Honey", "Viscosity of 2.0 * 10^-3."},
99                 {0, NULL, NULL, NULL}};
100
101         srna= RNA_def_struct(brna, "DomainFluidSettings", NULL);
102         RNA_def_struct_sdna(srna, "FluidsimSettings");
103         RNA_def_struct_parent(srna, parent);
104         RNA_def_struct_ui_text(srna, "Domain Fluid Simulation Settings", "");
105
106         /* standard settings */
107
108         prop= RNA_def_property(srna, "resolution", PROP_INT, PROP_NONE);
109         RNA_def_property_int_sdna(prop, NULL, "resolutionxyz");
110         RNA_def_property_range(prop, 1, 1024);
111         RNA_def_property_ui_text(prop, "Resolution", "Domain resolution in X,Y and Z direction.");
112
113         prop= RNA_def_property(srna, "preview_resolution", PROP_INT, PROP_NONE);
114         RNA_def_property_int_sdna(prop, NULL, "previewresxyz");
115         RNA_def_property_range(prop, 1, 100);
116         RNA_def_property_ui_text(prop, "Preview Resolution", "Preview resolution in X,Y and Z direction.");
117
118         prop= RNA_def_property(srna, "start_time", PROP_FLOAT, PROP_NONE);
119         RNA_def_property_float_sdna(prop, NULL, "animStart");
120         RNA_def_property_range(prop, 0, 100);
121         RNA_def_property_ui_text(prop, "Start Time", "Simulation time of the first blender frame.");
122
123         prop= RNA_def_property(srna, "end_time", PROP_FLOAT, PROP_NONE);
124         RNA_def_property_float_sdna(prop, NULL, "animEnd");
125         RNA_def_property_range(prop, 0, 100);
126         RNA_def_property_ui_text(prop, "End Time", "Simulation time of the last blender frame.");
127
128         prop= RNA_def_property(srna, "viewport_display_mode", PROP_ENUM, PROP_NONE);
129         RNA_def_property_enum_sdna(prop, NULL, "guiDisplayMode");
130         RNA_def_property_enum_items(prop, quality_items);
131         RNA_def_property_ui_text(prop, "Viewport Display Mode", "How to display the mesh in the viewport.");
132
133         prop= RNA_def_property(srna, "render_display_mode", PROP_ENUM, PROP_NONE);
134         RNA_def_property_enum_sdna(prop, NULL, "renderDisplayMode");
135         RNA_def_property_enum_items(prop, quality_items);
136         RNA_def_property_ui_text(prop, "Render Display Mode", "How to display the mesh for rendering.");
137
138         prop= RNA_def_property(srna, "reverse_frames", PROP_BOOLEAN, PROP_NONE);
139         RNA_def_property_boolean_sdna(prop, NULL, "flag", OB_FLUIDSIM_REVERSE);
140         RNA_def_property_ui_text(prop, "Reverse Frames", "Reverse fluid frames.");
141
142         prop= RNA_def_property(srna, "path", PROP_STRING, PROP_DIRPATH);
143         RNA_def_property_string_maxlength(prop, 240);
144         RNA_def_property_string_sdna(prop, NULL, "surfdataPath");
145         RNA_def_property_ui_text(prop, "Path", "Directory (and/or filename prefix) to store baked fluid simulation files in.");
146
147         /* advanced settings */
148
149         prop= RNA_def_property(srna, "gravity", PROP_FLOAT, PROP_VECTOR);
150         RNA_def_property_float_sdna(prop, NULL, "gravx");
151         RNA_def_property_array(prop, 3);
152         RNA_def_property_range(prop, -1000.0, 1000.0);
153         RNA_def_property_ui_text(prop, "Gravity", "Gravity in X, Y and Z direction.");
154
155         prop= RNA_def_property(srna, "viscosity_preset", PROP_ENUM, PROP_NONE);
156         RNA_def_property_enum_sdna(prop, NULL, "viscosityMode");
157         RNA_def_property_enum_items(prop, viscosity_items);
158         RNA_def_property_ui_text(prop, "Viscosity Preset", "Set viscosity of the fluid to a preset value, or use manual input.");
159
160         prop= RNA_def_property(srna, "viscosity_base", PROP_FLOAT, PROP_NONE);
161         RNA_def_property_float_sdna(prop, NULL, "viscosityValue");
162         RNA_def_property_range(prop, 0, 10);
163         RNA_def_property_ui_text(prop, "Viscosity Base", "Viscosity setting: value that is multiplied by 10 to the power of (exponent*-1).");
164
165         prop= RNA_def_property(srna, "viscosity_exponent", PROP_INT, PROP_NONE);
166         RNA_def_property_int_sdna(prop, NULL, "viscosityExponent");
167         RNA_def_property_range(prop, 0, 10);
168         RNA_def_property_ui_text(prop, "Viscosity Exponent", "Negative exponent for the viscosity value (to simplify entering small values e.g. 5*10^-6.).");
169
170         prop= RNA_def_property(srna, "real_world_size", PROP_FLOAT, PROP_NONE);
171         RNA_def_property_float_sdna(prop, NULL, "realsize");
172         RNA_def_property_range(prop, 0.001, 10);
173         RNA_def_property_ui_text(prop, "Real World Size", "Size of the simulation domain in metres.");
174
175         prop= RNA_def_property(srna, "grid_levels", PROP_INT, PROP_NONE);
176         RNA_def_property_int_sdna(prop, NULL, "maxRefine");
177         RNA_def_property_range(prop, -1, 4);
178         RNA_def_property_ui_text(prop, "Grid Levels", "Number of coursened grids to use (-1 for automatic).");
179
180         prop= RNA_def_property(srna, "compressibility", PROP_FLOAT, PROP_NONE);
181         RNA_def_property_float_sdna(prop, NULL, "gstar");
182         RNA_def_property_range(prop, 0.001, 0.1);
183         RNA_def_property_ui_text(prop, "Compressibility", "Allowed compressibility due to gravitational force for standing fluid (directly affects simulation step size).");
184
185         /* domain boundary settings */
186
187         rna_def_fluidsim_slip(srna);
188
189         prop= RNA_def_property(srna, "surface_smoothing", PROP_FLOAT, PROP_NONE);
190         RNA_def_property_float_sdna(prop, NULL, "surfaceSmoothing");
191         RNA_def_property_range(prop, 0.0, 5.0);
192         RNA_def_property_ui_text(prop, "Surface Smoothing", "Amount of surface smoothing. A value of 0 is off, 1 is normal smoothing and more than 1 is extra smoothing.");
193
194         prop= RNA_def_property(srna, "surface_subdivisions", PROP_INT, PROP_NONE);
195         RNA_def_property_int_sdna(prop, NULL, "surfaceSubdivs");
196         RNA_def_property_range(prop, 0, 5);
197         RNA_def_property_ui_text(prop, "Surface Subdivisions", "Number of isosurface subdivisions. This is necessary for the inclusion of particles into the surface generation. Warning - can lead to longer computation times!");
198
199         prop= RNA_def_property(srna, "generate_speed_vectors", PROP_BOOLEAN, PROP_NONE);
200         RNA_def_property_boolean_negative_sdna(prop, NULL, "domainNovecgen", 0);
201         RNA_def_property_ui_text(prop, "Generate Speed Vectors", "Generate speed vectors for vector blur.");
202
203         /* particles */
204
205         prop= RNA_def_property(srna, "tracer_particles", PROP_INT, PROP_NONE);
206         RNA_def_property_int_sdna(prop, NULL, "generateTracers");
207         RNA_def_property_range(prop, 0, 10000);
208         RNA_def_property_ui_text(prop, "Tracer Particles", "Number of tracer particles to generate");
209
210         prop= RNA_def_property(srna, "generate_particles", PROP_FLOAT, PROP_NONE);
211         RNA_def_property_float_sdna(prop, NULL, "generateParticles");
212         RNA_def_property_range(prop, 0.0, 10.0);
213         RNA_def_property_ui_text(prop, "Generate Particles", "Amount of particles to generate (0=off, 1=normal, >1=more).");
214 }
215
216 static void rna_def_fluidsim_volume(StructRNA *srna)
217 {
218         PropertyRNA *prop;
219
220         static EnumPropertyItem volume_type_items[] = {
221                 {1, "VOLUME", "Volume", "Use only the inner volume of the mesh."},
222                 {2, "SHELL", "Shell", "Use only the outer shell of the mesh."},
223                 {3, "BOTH", "Both", "Use both the inner volume and the outer shell of the mesh."},
224                 {0, NULL, NULL, NULL}};
225
226         prop= RNA_def_property(srna, "volume_initialization", PROP_ENUM, PROP_NONE);
227         RNA_def_property_enum_bitflag_sdna(prop, NULL, "volumeInitType");
228         RNA_def_property_enum_items(prop, volume_type_items);
229         RNA_def_property_ui_text(prop, "Volume Initialization", "Volume initialization type.");
230
231         prop= RNA_def_property(srna, "export_animated_mesh", PROP_BOOLEAN, PROP_NONE);
232         RNA_def_property_boolean_sdna(prop, NULL, "domainNovecgen", 0);
233         RNA_def_property_ui_text(prop, "Export Animated Mesh", "Export this mesh as an animated one. Slower, only use if really necessary (e.g. armatures or parented objects), animated pos/rot/scale IPOs do not require it.");
234 }
235
236 static void rna_def_fluidsim_fluid(BlenderRNA *brna, StructRNA *parent)
237 {
238         StructRNA *srna;
239         PropertyRNA *prop;
240
241         srna= RNA_def_struct(brna, "FluidFluidSettings", NULL);
242         RNA_def_struct_sdna(srna, "FluidsimSettings");
243         RNA_def_struct_parent(srna, parent);
244         RNA_def_struct_ui_text(srna, "Fluid Fluid Simulation Settings", "");
245
246         rna_def_fluidsim_volume(srna);
247
248         prop= RNA_def_property(srna, "initial_velocity", PROP_FLOAT, PROP_VECTOR);
249         RNA_def_property_float_sdna(prop, NULL, "iniVelx");
250         RNA_def_property_array(prop, 3);
251         RNA_def_property_range(prop, -1000.0, 1000.0);
252         RNA_def_property_ui_text(prop, "Initial Velocity", "Initial velocity of fluid.");
253 }
254
255 static void rna_def_fluidsim_obstacle(BlenderRNA *brna, StructRNA *parent)
256 {
257         StructRNA *srna;
258         PropertyRNA *prop;
259
260         srna= RNA_def_struct(brna, "ObstacleFluidSettings", NULL);
261         RNA_def_struct_sdna(srna, "FluidsimSettings");
262         RNA_def_struct_parent(srna, parent);
263         RNA_def_struct_ui_text(srna, "Obstacle Fluid Simulation Settings", "");
264
265         rna_def_fluidsim_volume(srna);
266         rna_def_fluidsim_slip(srna);
267
268         prop= RNA_def_property(srna, "impact_factor", PROP_FLOAT, PROP_NONE);
269         RNA_def_property_float_sdna(prop, NULL, "surfaceSmoothing");
270         RNA_def_property_range(prop, -2.0, 10.0);
271         RNA_def_property_ui_text(prop, "Impact Factor", "This is an unphysical value for moving objects - it controls the impact an obstacle has on the fluid, =0 behaves a bit like outflow (deleting fluid), =1 is default, while >1 results in high forces. Can be used to tweak total mass.");
272 }
273
274 static void rna_def_fluidsim_inflow(BlenderRNA *brna, StructRNA *parent)
275 {
276         StructRNA *srna;
277         PropertyRNA *prop;
278
279         srna= RNA_def_struct(brna, "InflowFluidSettings", NULL);
280         RNA_def_struct_sdna(srna, "FluidsimSettings");
281         RNA_def_struct_parent(srna, parent);
282         RNA_def_struct_ui_text(srna, "Inflow Fluid Simulation Settings", "");
283
284         rna_def_fluidsim_volume(srna);
285
286         prop= RNA_def_property(srna, "inflow_velocity", PROP_FLOAT, PROP_VECTOR);
287         RNA_def_property_float_sdna(prop, NULL, "iniVelx");
288         RNA_def_property_array(prop, 3);
289         RNA_def_property_range(prop, -1000.0, 1000.0);
290         RNA_def_property_ui_text(prop, "Inflow Velocity", "Initial velocity of fluid.");
291
292         prop= RNA_def_property(srna, "local_coordinates", PROP_BOOLEAN, PROP_NONE);
293         RNA_def_property_boolean_sdna(prop, NULL, "typeFlags", OB_FSINFLOW_LOCALCOORD);
294         RNA_def_property_ui_text(prop, "Local Coordinates", "Use local coordinates for inflow (e.g. for rotating objects).");
295 }
296
297 static void rna_def_fluidsim_outflow(BlenderRNA *brna, StructRNA *parent)
298 {
299         StructRNA *srna;
300
301         srna= RNA_def_struct(brna, "OutflowFluidSettings", NULL);
302         RNA_def_struct_sdna(srna, "FluidsimSettings");
303         RNA_def_struct_parent(srna, parent);
304         RNA_def_struct_ui_text(srna, "Outflow Fluid Simulation Settings", "");
305
306         rna_def_fluidsim_volume(srna);
307 }
308
309 static void rna_def_fluidsim_particle(BlenderRNA *brna, StructRNA *parent)
310 {
311         StructRNA *srna;
312         PropertyRNA *prop;
313
314         srna= RNA_def_struct(brna, "ParticleFluidSettings", NULL);
315         RNA_def_struct_sdna(srna, "FluidsimSettings");
316         RNA_def_struct_parent(srna, parent);
317         RNA_def_struct_ui_text(srna, "Particle Fluid Simulation Settings", "");
318
319         prop= RNA_def_property(srna, "drops", PROP_BOOLEAN, PROP_NONE);
320         RNA_def_property_boolean_sdna(prop, NULL, "typeFlags", OB_FSPART_DROP);
321         RNA_def_property_ui_text(prop, "Drops", "Show drop particles.");
322
323         prop= RNA_def_property(srna, "floats", PROP_BOOLEAN, PROP_NONE);
324         RNA_def_property_boolean_sdna(prop, NULL, "typeFlags", OB_FSPART_FLOAT);
325         RNA_def_property_ui_text(prop, "Floats", "Show floating foam particles.");
326
327         prop= RNA_def_property(srna, "tracer", PROP_BOOLEAN, PROP_NONE);
328         RNA_def_property_boolean_sdna(prop, NULL, "typeFlags", OB_FSPART_TRACER);
329         RNA_def_property_ui_text(prop, "Tracer", "Show tracer particles.");
330
331         prop= RNA_def_property(srna, "particle_influence", PROP_FLOAT, PROP_NONE);
332         RNA_def_property_float_sdna(prop, NULL, "particleInfSize");
333         RNA_def_property_range(prop, 0.0, 2.0);
334         RNA_def_property_ui_text(prop, "Particle Influence", "Amount of particle size scaling: 0=off (all same size), 1=full (range 0.2-2.0), >1=stronger.");
335
336         prop= RNA_def_property(srna, "alpha_influence", PROP_FLOAT, PROP_NONE);
337         RNA_def_property_float_sdna(prop, NULL, "particleInfAlpha");
338         RNA_def_property_range(prop, 0.0, 2.0);
339         RNA_def_property_ui_text(prop, "Alpha Influence", "Amount of particle alpha change, inverse of size influence: 0=off (all same alpha), 1=full (large particles get lower alphas, smaller ones higher values).");
340
341         prop= RNA_def_property(srna, "path", PROP_STRING, PROP_DIRPATH);
342         RNA_def_property_string_maxlength(prop, 240);
343         RNA_def_property_string_sdna(prop, NULL, "surfdataPath");
344         RNA_def_property_ui_text(prop, "Path", "Directory (and/or filename prefix) to store and load particles from.");
345 }
346
347 static void rna_def_fluidsim_control(BlenderRNA *brna, StructRNA *parent)
348 {
349         StructRNA *srna;
350         PropertyRNA *prop;
351
352         srna= RNA_def_struct(brna, "ControlFluidSettings", NULL);
353         RNA_def_struct_sdna(srna, "FluidsimSettings");
354         RNA_def_struct_parent(srna, parent);
355         RNA_def_struct_ui_text(srna, "Control Fluid Simulation Settings", "");
356
357         prop= RNA_def_property(srna, "start_time", PROP_FLOAT, PROP_NONE);
358         RNA_def_property_float_sdna(prop, NULL, "cpsTimeStart");
359         RNA_def_property_range(prop, 0.0, 100.0);
360         RNA_def_property_ui_text(prop, "Start Time", "Specifies time when the control particles are activated.");
361         
362         prop= RNA_def_property(srna, "end_time", PROP_FLOAT, PROP_NONE);
363         RNA_def_property_float_sdna(prop, NULL, "cpsTimeEnd");
364         RNA_def_property_range(prop, 0.0, 100.0);
365         RNA_def_property_ui_text(prop, "End Time", "Specifies time when the control particles are deactivated.");
366
367         prop= RNA_def_property(srna, "attraction_strength", PROP_FLOAT, PROP_NONE);
368         RNA_def_property_float_sdna(prop, NULL, "attractforceStrength");
369         RNA_def_property_range(prop, 0.0, 2.0);
370         RNA_def_property_ui_text(prop, "Attraction Strength", "Force strength for directional attraction towards the control object.");
371
372         prop= RNA_def_property(srna, "attraction_radius", PROP_FLOAT, PROP_NONE);
373         RNA_def_property_float_sdna(prop, NULL, "attractforceRadius");
374         RNA_def_property_range(prop, 0.0, 5.0);
375         RNA_def_property_ui_text(prop, "Attraction Radius", "Specifies the force field radius around the control object.");
376         
377         prop= RNA_def_property(srna, "velocity_strength", PROP_FLOAT, PROP_NONE);
378         RNA_def_property_float_sdna(prop, NULL, "velocityforceStrength");
379         RNA_def_property_range(prop, 0.0, 2.0);
380         RNA_def_property_ui_text(prop, "Velocity Strength", "Force strength of how much of the control object's velocity is influencing the fluid velocity.");
381
382         prop= RNA_def_property(srna, "velocity_radius", PROP_FLOAT, PROP_NONE);
383         RNA_def_property_float_sdna(prop, NULL, "velocityforceRadius");
384         RNA_def_property_range(prop, 0.0, 2.0);
385         RNA_def_property_ui_text(prop, "Velocity Radius", "Specifies the force field radius around the control object.");
386
387         prop= RNA_def_property(srna, "quality", PROP_FLOAT, PROP_NONE);
388         RNA_def_property_float_sdna(prop, NULL, "cpsQuality");
389         RNA_def_property_range(prop, 5.0, 100.0);
390         RNA_def_property_ui_text(prop, "Quality", "Specifies the quality which is used for object sampling (higher = better but slower).");
391
392         prop= RNA_def_property(srna, "reverse_frames", PROP_BOOLEAN, PROP_NONE);
393         RNA_def_property_boolean_sdna(prop, NULL, "flag", OB_FLUIDSIM_REVERSE);
394         RNA_def_property_ui_text(prop, "Reverse Frames", "Reverse control object movement.");
395 }
396
397 void RNA_def_fluidsim(BlenderRNA *brna)
398 {
399         StructRNA *srna;
400         PropertyRNA *prop;
401
402         static EnumPropertyItem prop_fluid_type_items[] = {
403                 {0, "NONE", "None", ""},
404                 {OB_FLUIDSIM_DOMAIN, "DOMAIN", "Domain", "Bounding box of this object represents the computational domain of the fluid simulation."},
405                 {OB_FLUIDSIM_FLUID, "FLUID", "Fluid", "Object represents a volume of fluid in the simulation."},
406                 {OB_FLUIDSIM_OBSTACLE, "OBSTACLE", "Obstacle", "Object is a fixed obstacle."},
407                 {OB_FLUIDSIM_INFLOW, "INFLOW", "Inflow", "Object adds fluid to the simulation."},
408                 {OB_FLUIDSIM_OUTFLOW, "OUTFLOW", "Outflow", "Object removes fluid from the simulation."},
409                 {OB_FLUIDSIM_PARTICLE, "PARTICLE", "Particle", "Object is made a particle system to display particles generated by a fluidsim domain object."},
410                 {OB_FLUIDSIM_CONTROL, "CONTROL", "Control", "Object is made a fluid control mesh, which influences the fluid."},
411                 {0, NULL, NULL, NULL}};
412
413
414         srna= RNA_def_struct(brna, "FluidSettings", NULL);
415         RNA_def_struct_sdna(srna, "FluidsimSettings");
416         RNA_def_struct_refine_func(srna, "rna_FluidSettings_refine");
417         RNA_def_struct_ui_text(srna, "Fluid Simulation Settings", "");
418
419         /* enable and type */
420
421         prop= RNA_def_property(srna, "enable", PROP_BOOLEAN, PROP_NONE);
422         RNA_def_property_boolean_sdna(prop, NULL, "type", OB_FLUIDSIM_ENABLE);
423         RNA_def_property_flag(prop, PROP_NOT_EDITABLE); // needs to create modifier
424         RNA_def_property_ui_text(prop, "Enable", "Sets object to participate in fluid simulation.");
425
426         prop= RNA_def_property(srna, "type", PROP_ENUM, PROP_NONE);
427         RNA_def_property_enum_bitflag_sdna(prop, NULL, "type");
428         RNA_def_property_enum_items(prop, prop_fluid_type_items);
429         RNA_def_property_flag(prop, PROP_NOT_EDITABLE); // needs to update variables
430         RNA_def_property_ui_text(prop, "Type", "Type of participation in the fluid simulation.");
431
432         prop= RNA_def_property(srna, "ipo", PROP_POINTER, PROP_NONE);
433         RNA_def_property_ui_text(prop, "Ipo Curves", "Ipo curves used by fluid simulation settings.");
434
435         /* types */
436
437         rna_def_fluidsim_domain(brna, srna);
438         rna_def_fluidsim_fluid(brna, srna);
439         rna_def_fluidsim_obstacle(brna, srna);
440         rna_def_fluidsim_inflow(brna, srna);
441         rna_def_fluidsim_outflow(brna, srna);
442         rna_def_fluidsim_particle(brna, srna);
443         rna_def_fluidsim_control(brna, srna);
444 }
445
446
447 #endif