batch remove .'s used with RNA_def_struct_ui_text
[blender.git] / source / blender / makesrna / intern / rna_smoke.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): Daniel Genrich
21  *
22  * ***** END GPL LICENSE BLOCK *****
23  */
24
25 #include <stdlib.h>
26 #include <limits.h>
27
28 #include "RNA_define.h"
29 #include "RNA_types.h"
30
31 #include "rna_internal.h"
32
33 #include "BKE_modifier.h"
34 #include "BKE_smoke.h"
35
36 #include "DNA_modifier_types.h"
37 #include "DNA_object_types.h"
38 #include "DNA_scene_types.h"
39 #include "DNA_smoke_types.h"
40
41 #include "WM_types.h"
42
43
44 #ifdef RNA_RUNTIME
45
46 #include "BKE_context.h"
47 #include "BKE_depsgraph.h"
48 #include "BKE_particle.h"
49
50 #include "ED_object.h"
51
52 static void rna_Smoke_update(Main *bmain, Scene *scene, PointerRNA *ptr)
53 {
54         DAG_id_flush_update(ptr->id.data, OB_RECALC_DATA);
55 }
56
57 static void rna_Smoke_dependency_update(Main *bmain, Scene *scene, PointerRNA *ptr)
58 {
59         rna_Smoke_update(bmain, scene, ptr);
60     DAG_scene_sort(scene);
61 }
62
63 static void rna_Smoke_reset(Main *bmain, Scene *scene, PointerRNA *ptr)
64 {
65         SmokeDomainSettings *settings = (SmokeDomainSettings*)ptr->data;
66
67         smokeModifier_reset(settings->smd);
68
69         rna_Smoke_update(bmain, scene, ptr);
70 }
71
72 static void rna_Smoke_reset_dependancy(Main *bmain, Scene *scene, PointerRNA *ptr)
73 {
74         SmokeDomainSettings *settings = (SmokeDomainSettings*)ptr->data;
75
76         smokeModifier_reset(settings->smd);
77
78         rna_Smoke_dependency_update(bmain, scene, ptr);
79 }
80
81 static char *rna_SmokeDomainSettings_path(PointerRNA *ptr)
82 {
83         SmokeDomainSettings *settings = (SmokeDomainSettings*)ptr->data;
84         ModifierData *md= (ModifierData *)settings->smd;
85
86         return BLI_sprintfN("modifiers[\"%s\"].domain_settings", md->name);
87 }
88
89 static char *rna_SmokeFlowSettings_path(PointerRNA *ptr)
90 {
91         SmokeFlowSettings *settings = (SmokeFlowSettings*)ptr->data;
92         ModifierData *md= (ModifierData *)settings->smd;
93
94         return BLI_sprintfN("modifiers[\"%s\"].flow_settings", md->name);
95 }
96
97 static char *rna_SmokeCollSettings_path(PointerRNA *ptr)
98 {
99         SmokeCollSettings *settings = (SmokeCollSettings*)ptr->data;
100         ModifierData *md= (ModifierData *)settings->smd;
101
102         return BLI_sprintfN("modifiers[\"%s\"].coll_settings", md->name);
103 }
104
105 #else
106
107 static void rna_def_smoke_domain_settings(BlenderRNA *brna)
108 {
109         StructRNA *srna;
110         PropertyRNA *prop;
111
112         static EnumPropertyItem prop_noise_type_items[] = {
113                                 {MOD_SMOKE_NOISEWAVE, "NOISEWAVE", 0, "Wavelet", ""},
114 #if FFTW3 == 1
115                                 {MOD_SMOKE_NOISEFFT, "NOISEFFT", 0, "FFT", ""}, 
116 #endif
117                         /*      {MOD_SMOKE_NOISECURL, "NOISECURL", 0, "Curl", ""}, */
118                                 {0, NULL, 0, NULL, NULL}};
119
120         static EnumPropertyItem smoke_cache_comp_items[] = {
121                 {SM_CACHE_LIGHT, "CACHELIGHT", 0, "Light", "Fast but not so effective compression."},
122                 {SM_CACHE_HEAVY, "CACHEHEAVY", 0, "Heavy", "Effective but slow compression."},
123                 {0, NULL, 0, NULL, NULL}};
124
125         srna = RNA_def_struct(brna, "SmokeDomainSettings", NULL);
126         RNA_def_struct_ui_text(srna, "Domain Settings", "Smoke domain settings");
127         RNA_def_struct_sdna(srna, "SmokeDomainSettings");
128         RNA_def_struct_path_func(srna, "rna_SmokeDomainSettings_path");
129
130         prop= RNA_def_property(srna, "maxres", PROP_INT, PROP_NONE);
131         RNA_def_property_int_sdna(prop, NULL, "maxres");
132         RNA_def_property_range(prop, 24, 512);
133         RNA_def_property_ui_range(prop, 24, 512, 2, 0);
134         RNA_def_property_ui_text(prop, "Max Res", "Maximal resolution used in the fluid domain");
135         RNA_def_property_update(prop, NC_OBJECT|ND_MODIFIER, "rna_Smoke_reset");
136
137         prop= RNA_def_property(srna, "amplify", PROP_INT, PROP_NONE);
138         RNA_def_property_int_sdna(prop, NULL, "amplify");
139         RNA_def_property_range(prop, 1, 10);
140         RNA_def_property_ui_range(prop, 1, 10, 1, 0);
141         RNA_def_property_ui_text(prop, "Amplification", "Enhance the resolution of smoke by this factor using noise");
142         RNA_def_property_update(prop, NC_OBJECT|ND_MODIFIER, "rna_Smoke_reset");
143
144         prop= RNA_def_property(srna, "highres", PROP_BOOLEAN, PROP_NONE);
145         RNA_def_property_boolean_sdna(prop, NULL, "flags", MOD_SMOKE_HIGHRES);
146         RNA_def_property_ui_text(prop, "High res", "Enable high resolution (using amplification)");
147         RNA_def_property_update(prop, NC_OBJECT|ND_MODIFIER, "rna_Smoke_reset");
148
149         prop= RNA_def_property(srna, "viewhighres", PROP_BOOLEAN, PROP_NONE);
150         RNA_def_property_boolean_sdna(prop, NULL, "viewsettings", MOD_SMOKE_VIEW_SHOWBIG);
151         RNA_def_property_ui_text(prop, "Show High Resolution", "Show high resolution (using amplification)");
152         RNA_def_property_update(prop, NC_OBJECT|ND_DRAW, NULL);
153
154         prop= RNA_def_property(srna, "noise_type", PROP_ENUM, PROP_NONE);
155         RNA_def_property_enum_sdna(prop, NULL, "noise");
156         RNA_def_property_enum_items(prop, prop_noise_type_items);
157         RNA_def_property_ui_text(prop, "Noise Method", "Noise method which is used for creating the high resolution");
158         RNA_def_property_update(prop, NC_OBJECT|ND_MODIFIER, "rna_Smoke_reset");
159
160         prop= RNA_def_property(srna, "alpha", PROP_FLOAT, PROP_NONE);
161         RNA_def_property_float_sdna(prop, NULL, "alpha");
162         RNA_def_property_range(prop, -5.0, 5.0);
163         RNA_def_property_ui_range(prop, -5.0, 5.0, 0.02, 5);
164         RNA_def_property_ui_text(prop, "Gravity", "Higher value results in sinking smoke");
165         RNA_def_property_update(prop, NC_OBJECT|ND_MODIFIER, "rna_Smoke_reset");
166
167         prop= RNA_def_property(srna, "beta", PROP_FLOAT, PROP_NONE);
168         RNA_def_property_float_sdna(prop, NULL, "beta");
169         RNA_def_property_range(prop, -5.0, 5.0);
170         RNA_def_property_ui_range(prop, -5.0, 5.0, 0.02, 5);
171         RNA_def_property_ui_text(prop, "Heat", "Higher value results in faster rising smoke");
172         RNA_def_property_update(prop, NC_OBJECT|ND_MODIFIER, "rna_Smoke_reset");
173
174         prop= RNA_def_property(srna, "coll_group", PROP_POINTER, PROP_NONE);
175         RNA_def_property_pointer_sdna(prop, NULL, "coll_group");
176         RNA_def_property_struct_type(prop, "Group");
177         RNA_def_property_flag(prop, PROP_EDITABLE);
178         RNA_def_property_ui_text(prop, "Collision Group", "Limit collisions to this group");
179         RNA_def_property_update(prop, NC_OBJECT|ND_MODIFIER, "rna_Smoke_reset_dependancy");
180
181         prop= RNA_def_property(srna, "fluid_group", PROP_POINTER, PROP_NONE);
182         RNA_def_property_pointer_sdna(prop, NULL, "fluid_group");
183         RNA_def_property_struct_type(prop, "Group");
184         RNA_def_property_flag(prop, PROP_EDITABLE);
185         RNA_def_property_ui_text(prop, "Fluid Group", "Limit fluid objects to this group");
186         RNA_def_property_update(prop, NC_OBJECT|ND_MODIFIER, "rna_Smoke_reset_dependancy");
187
188         prop= RNA_def_property(srna, "eff_group", PROP_POINTER, PROP_NONE);
189         RNA_def_property_pointer_sdna(prop, NULL, "eff_group");
190         RNA_def_property_struct_type(prop, "Group");
191         RNA_def_property_flag(prop, PROP_EDITABLE);
192         RNA_def_property_ui_text(prop, "Effector Group", "Limit effectors to this group");
193         RNA_def_property_update(prop, NC_OBJECT|ND_MODIFIER, "rna_Smoke_reset_dependancy");
194
195         prop= RNA_def_property(srna, "strength", PROP_FLOAT, PROP_NONE);
196         RNA_def_property_float_sdna(prop, NULL, "strength");
197         RNA_def_property_range(prop, 1.0, 10.0);
198         RNA_def_property_ui_range(prop, 1.0, 10.0, 1, 2);
199         RNA_def_property_ui_text(prop, "Strength", "Strength of wavelet noise");
200         RNA_def_property_update(prop, NC_OBJECT|ND_MODIFIER, "rna_Smoke_reset");
201
202         prop= RNA_def_property(srna, "dissolve_speed", PROP_INT, PROP_NONE);
203         RNA_def_property_int_sdna(prop, NULL, "diss_speed");
204         RNA_def_property_range(prop, 1.0, 100.0);
205         RNA_def_property_ui_range(prop, 1.0, 1000.0, 1, 0);
206         RNA_def_property_ui_text(prop, "Dissolve Speed", "Dissolve Speed");
207         RNA_def_property_update(prop, 0, NULL);
208
209         prop= RNA_def_property(srna, "initial_velocity", PROP_BOOLEAN, PROP_NONE);
210         RNA_def_property_boolean_sdna(prop, NULL, "flags", MOD_SMOKE_INITVELOCITY);
211         RNA_def_property_ui_text(prop, "Initial Velocity", "Smoke inherits it's velocity from the emitter particle");
212         RNA_def_property_update(prop, 0, NULL);
213
214         prop= RNA_def_property(srna, "dissolve_smoke", PROP_BOOLEAN, PROP_NONE);
215         RNA_def_property_boolean_sdna(prop, NULL, "flags", MOD_SMOKE_DISSOLVE);
216         RNA_def_property_ui_text(prop, "Dissolve Smoke", "Enable smoke to disappear over time");
217         RNA_def_property_update(prop, 0, NULL);
218
219         prop= RNA_def_property(srna, "dissolve_smoke_log", PROP_BOOLEAN, PROP_NONE);
220         RNA_def_property_boolean_sdna(prop, NULL, "flags", MOD_SMOKE_DISSOLVE_LOG);
221         RNA_def_property_ui_text(prop, "Logarithmic dissolve", "Using 1/x ");
222         RNA_def_property_update(prop, 0, NULL);
223
224         prop= RNA_def_property(srna, "point_cache_low", PROP_POINTER, PROP_NONE);
225         RNA_def_property_flag(prop, PROP_NEVER_NULL);
226         RNA_def_property_pointer_sdna(prop, NULL, "point_cache[0]");
227         RNA_def_property_ui_text(prop, "Point Cache", "");
228
229         prop= RNA_def_property(srna, "point_cache_high", PROP_POINTER, PROP_NONE);
230         RNA_def_property_flag(prop, PROP_NEVER_NULL);
231         RNA_def_property_pointer_sdna(prop, NULL, "point_cache[1]");
232         RNA_def_property_ui_text(prop, "Point Cache", "");
233
234         prop= RNA_def_property(srna, "smoke_cache_comp", PROP_ENUM, PROP_NONE);
235         RNA_def_property_enum_sdna(prop, NULL, "cache_comp");
236         RNA_def_property_enum_items(prop, smoke_cache_comp_items);
237         RNA_def_property_ui_text(prop, "Cache Compression", "Compression method to be used");
238         RNA_def_property_update(prop, 0, NULL);
239
240         prop= RNA_def_property(srna, "smoke_cache_high_comp", PROP_ENUM, PROP_NONE);
241         RNA_def_property_enum_sdna(prop, NULL, "cache_high_comp");
242         RNA_def_property_enum_items(prop, smoke_cache_comp_items);
243         RNA_def_property_ui_text(prop, "Cache Compression", "Compression method to be used");
244         RNA_def_property_update(prop, 0, NULL);
245
246
247         prop= RNA_def_property(srna, "effector_weights", PROP_POINTER, PROP_NONE);
248         RNA_def_property_struct_type(prop, "EffectorWeights");
249         RNA_def_property_clear_flag(prop, PROP_EDITABLE);
250         RNA_def_property_ui_text(prop, "Effector Weights", "");
251
252 }
253
254 static void rna_def_smoke_flow_settings(BlenderRNA *brna)
255 {
256         StructRNA *srna;
257         PropertyRNA *prop;
258
259         srna = RNA_def_struct(brna, "SmokeFlowSettings", NULL);
260         RNA_def_struct_ui_text(srna, "Flow Settings", "Smoke flow settings");
261         RNA_def_struct_sdna(srna, "SmokeFlowSettings");
262         RNA_def_struct_path_func(srna, "rna_SmokeFlowSettings_path");
263
264         prop= RNA_def_property(srna, "density", PROP_FLOAT, PROP_NONE);
265         RNA_def_property_float_sdna(prop, NULL, "density");
266         RNA_def_property_range(prop, 0.001, 1);
267         RNA_def_property_ui_range(prop, 0.001, 1.0, 1.0, 4);
268         RNA_def_property_ui_text(prop, "Density", "");
269         RNA_def_property_update(prop, 0, NULL); // NC_OBJECT|ND_MODIFIER
270
271         prop= RNA_def_property(srna, "temperature", PROP_FLOAT, PROP_NONE);
272         RNA_def_property_float_sdna(prop, NULL, "temp");
273         RNA_def_property_range(prop, -10, 10);
274         RNA_def_property_ui_range(prop, -10, 10, 1, 1);
275         RNA_def_property_ui_text(prop, "Temp. Diff.", "Temperature difference to ambientt temperature");
276         RNA_def_property_update(prop, 0, NULL);
277         
278         prop= RNA_def_property(srna, "psys", PROP_POINTER, PROP_NONE);
279         RNA_def_property_pointer_sdna(prop, NULL, "psys");
280         RNA_def_property_struct_type(prop, "ParticleSystem");
281         RNA_def_property_flag(prop, PROP_EDITABLE);
282         RNA_def_property_ui_text(prop, "Particle Systems", "Particle systems emitted from the object");
283         RNA_def_property_update(prop, 0, "rna_Smoke_reset_dependancy");
284
285         prop= RNA_def_property(srna, "outflow", PROP_BOOLEAN, PROP_NONE);
286         RNA_def_property_boolean_sdna(prop, NULL, "type", MOD_SMOKE_FLOW_TYPE_OUTFLOW);
287         RNA_def_property_ui_text(prop, "Outflow", "Deletes smoke from simulation");
288         RNA_def_property_update(prop, 0, NULL);
289 }
290
291 static void rna_def_smoke_coll_settings(BlenderRNA *brna)
292 {
293         StructRNA *srna;
294
295         srna = RNA_def_struct(brna, "SmokeCollSettings", NULL);
296         RNA_def_struct_ui_text(srna, "Collision Settings", "Smoke collision settings");
297         RNA_def_struct_sdna(srna, "SmokeCollSettings");
298         RNA_def_struct_path_func(srna, "rna_SmokeCollSettings_path");
299 }
300
301 void RNA_def_smoke(BlenderRNA *brna)
302 {
303         rna_def_smoke_domain_settings(brna);
304         rna_def_smoke_flow_settings(brna);
305         rna_def_smoke_coll_settings(brna);
306 }
307
308 #endif
309