Blender V5.0
rna_meta.cc
Go to the documentation of this file.
1/* SPDX-FileCopyrightText: 2023 Blender Authors
2 *
3 * SPDX-License-Identifier: GPL-2.0-or-later */
4
8
9#include <cstdlib>
10
11#include "DNA_meta_types.h"
12
13#include "RNA_define.hh"
14#include "RNA_enum_types.hh"
15
16#include "rna_internal.hh"
17
18#ifdef RNA_RUNTIME
19
20# include <fmt/format.h>
21
22# include "MEM_guardedalloc.h"
23
24# include "BLI_math_rotation.h"
25# include "BLI_math_vector.h"
26
27# include "DNA_object_types.h"
28# include "DNA_scene_types.h"
29
30# include "BKE_main.hh"
31# include "BKE_mball.hh"
32# include "BKE_scene.hh"
33
34# include "DEG_depsgraph.hh"
35
36# include "WM_api.hh"
37# include "WM_types.hh"
38
39static int rna_Meta_texspace_editable(const PointerRNA *ptr, const char ** /*r_info*/)
40{
41 MetaBall *mb = (MetaBall *)ptr->data;
42 return (mb->texspace_flag & MB_TEXSPACE_FLAG_AUTO) ? 0 : int(PROP_EDITABLE);
43}
44
45static void rna_Meta_texspace_location_get(PointerRNA *ptr, float *values)
46{
47 MetaBall *mb = (MetaBall *)ptr->data;
48
49 /* tex_space_mball() needs object.. ugh */
50
51 copy_v3_v3(values, mb->texspace_location);
52}
53
54static void rna_Meta_texspace_location_set(PointerRNA *ptr, const float *values)
55{
56 MetaBall *mb = (MetaBall *)ptr->data;
57
58 copy_v3_v3(mb->texspace_location, values);
59}
60
61static void rna_Meta_texspace_size_get(PointerRNA *ptr, float *values)
62{
63 MetaBall *mb = (MetaBall *)ptr->data;
64
65 /* tex_space_mball() needs object.. ugh */
66
67 copy_v3_v3(values, mb->texspace_size);
68}
69
70static void rna_Meta_texspace_size_set(PointerRNA *ptr, const float *values)
71{
72 MetaBall *mb = (MetaBall *)ptr->data;
73
74 copy_v3_v3(mb->texspace_size, values);
75}
76
77static void rna_MetaBall_redraw_data(Main * /*bmain*/, Scene * /*scene*/, PointerRNA *ptr)
78{
79 ID *id = ptr->owner_id;
80
83}
84
85static void rna_MetaBall_update_data(Main *bmain, Scene * /*scene*/, PointerRNA *ptr)
86{
87 MetaBall *mb = (MetaBall *)ptr->owner_id;
88
89 /* NOTE: The check on the number of users allows to avoid many repetitive (slow) updates in some
90 * cases, like e.g. importers. Calling `BKE_mball_properties_copy` on an obdata with no users
91 * would be meaningless anyway, as by definition it would not be used by any object, so not part
92 * of any meta-ball group. */
93 if (mb->id.us > 0) {
95
96 DEG_id_tag_update(&mb->id, 0);
98 }
99}
100
101static void rna_MetaBall_update_rotation(Main *bmain, Scene *scene, PointerRNA *ptr)
102{
103 MetaElem *ml = static_cast<MetaElem *>(ptr->data);
104 normalize_qt(ml->quat);
105 rna_MetaBall_update_data(bmain, scene, ptr);
106}
107
108static MetaElem *rna_MetaBall_elements_new(MetaBall *mb, int type)
109{
110 MetaElem *ml = BKE_mball_element_add(mb, type);
111
112 /* cheating way for importers to avoid slow updates */
113 if (mb->id.us > 0) {
114 DEG_id_tag_update(&mb->id, 0);
116 }
117
118 return ml;
119}
120
121static void rna_MetaBall_elements_remove(MetaBall *mb, ReportList *reports, PointerRNA *ml_ptr)
122{
123 MetaElem *ml = static_cast<MetaElem *>(ml_ptr->data);
124
125 if (BLI_remlink_safe(&mb->elems, ml) == false) {
127 reports, RPT_ERROR, "Metaball '%s' does not contain spline given", mb->id.name + 2);
128 return;
129 }
130
131 MEM_freeN(ml);
132 ml_ptr->invalidate();
133
134 /* cheating way for importers to avoid slow updates */
135 if (mb->id.us > 0) {
136 DEG_id_tag_update(&mb->id, 0);
138 }
139}
140
141static void rna_MetaBall_elements_clear(MetaBall *mb)
142{
143 BLI_freelistN(&mb->elems);
144
145 /* cheating way for importers to avoid slow updates */
146 if (mb->id.us > 0) {
147 DEG_id_tag_update(&mb->id, 0);
149 }
150}
151
152static bool rna_Meta_is_editmode_get(PointerRNA *ptr)
153{
154 MetaBall *mb = (MetaBall *)ptr->owner_id;
155 return (mb->editelems != nullptr);
156}
157
158static std::optional<std::string> rna_MetaElement_path(const PointerRNA *ptr)
159{
160 const MetaBall *mb = (MetaBall *)ptr->owner_id;
161 const MetaElem *ml = static_cast<MetaElem *>(ptr->data);
162 int index = -1;
163
164 if (mb->editelems) {
165 index = BLI_findindex(mb->editelems, ml);
166 }
167 if (index == -1) {
168 index = BLI_findindex(&mb->elems, ml);
169 }
170 if (index == -1) {
171 return std::nullopt;
172 }
173
174 return fmt::format("elements[{}]", index);
175}
176
177#else
178
180{
181 StructRNA *srna;
182 PropertyRNA *prop;
183
184 srna = RNA_def_struct(brna, "MetaElement", nullptr);
185 RNA_def_struct_sdna(srna, "MetaElem");
186 RNA_def_struct_ui_text(srna, "Metaball Element", "Blobby element in a metaball data-block");
187 RNA_def_struct_path_func(srna, "rna_MetaElement_path");
188 RNA_def_struct_ui_icon(srna, ICON_OUTLINER_DATA_META);
189
190 /* enums */
191 prop = RNA_def_property(srna, "type", PROP_ENUM, PROP_NONE);
193 RNA_def_property_ui_text(prop, "Type", "Metaball type");
194 RNA_def_property_update(prop, 0, "rna_MetaBall_update_data");
195
196 /* number values */
197 prop = RNA_def_property(srna, "co", PROP_FLOAT, PROP_TRANSLATION);
198 RNA_def_property_float_sdna(prop, nullptr, "x");
199 RNA_def_property_array(prop, 3);
200 RNA_def_property_ui_text(prop, "Location", "");
201 RNA_def_property_update(prop, 0, "rna_MetaBall_update_data");
202
203 prop = RNA_def_property(srna, "rotation", PROP_FLOAT, PROP_QUATERNION);
204 RNA_def_property_float_sdna(prop, nullptr, "quat");
205 RNA_def_property_ui_text(prop, "Rotation", "Normalized quaternion rotation");
206 RNA_def_property_update(prop, 0, "rna_MetaBall_update_rotation");
207
209 RNA_def_property_float_sdna(prop, nullptr, "rad");
210 RNA_def_property_ui_text(prop, "Radius", "");
211 RNA_def_property_range(prop, 0.0f, FLT_MAX);
212 RNA_def_property_update(prop, 0, "rna_MetaBall_update_data");
213
214 prop = RNA_def_property(srna, "size_x", PROP_FLOAT, PROP_DISTANCE);
215 RNA_def_property_float_sdna(prop, nullptr, "expx");
217 RNA_def_property_range(prop, 0.0f, 20.0f);
219 prop, "Size X", "Size of element, use of components depends on element type");
220 RNA_def_property_update(prop, 0, "rna_MetaBall_update_data");
221
222 prop = RNA_def_property(srna, "size_y", PROP_FLOAT, PROP_DISTANCE);
223 RNA_def_property_float_sdna(prop, nullptr, "expy");
225 RNA_def_property_range(prop, 0.0f, 20.0f);
227 prop, "Size Y", "Size of element, use of components depends on element type");
228 RNA_def_property_update(prop, 0, "rna_MetaBall_update_data");
229
230 prop = RNA_def_property(srna, "size_z", PROP_FLOAT, PROP_DISTANCE);
231 RNA_def_property_float_sdna(prop, nullptr, "expz");
233 RNA_def_property_range(prop, 0.0f, 20.0f);
235 prop, "Size Z", "Size of element, use of components depends on element type");
236 RNA_def_property_update(prop, 0, "rna_MetaBall_update_data");
237
238 prop = RNA_def_property(srna, "stiffness", PROP_FLOAT, PROP_NONE);
239 RNA_def_property_float_sdna(prop, nullptr, "s");
240 RNA_def_property_range(prop, 0.0f, 10.0f);
241 RNA_def_property_ui_text(prop, "Stiffness", "Stiffness defines how much of the element to fill");
242 RNA_def_property_update(prop, 0, "rna_MetaBall_update_data");
243
244 /* flags */
245 prop = RNA_def_property(srna, "use_negative", PROP_BOOLEAN, PROP_NONE);
246 RNA_def_property_boolean_sdna(prop, nullptr, "flag", MB_NEGATIVE);
247 RNA_def_property_ui_text(prop, "Negative", "Set metaball as negative one");
248 RNA_def_property_update(prop, 0, "rna_MetaBall_update_data");
249
250 prop = RNA_def_property(srna, "use_scale_stiffness", PROP_BOOLEAN, PROP_NONE);
252 RNA_def_property_ui_text(prop, "Scale Stiffness", "Scale stiffness instead of radius");
253 RNA_def_property_update(prop, 0, "rna_MetaBall_redraw_data");
254
255 prop = RNA_def_property(srna, "select", PROP_BOOLEAN, PROP_NONE);
256 RNA_def_property_boolean_sdna(prop, nullptr, "flag", 1); /* SELECT */
257 RNA_def_property_ui_text(prop, "Select", "Select element");
258 RNA_def_property_update(prop, 0, "rna_MetaBall_redraw_data");
259
260 prop = RNA_def_property(srna, "hide", PROP_BOOLEAN, PROP_NONE);
261 RNA_def_property_boolean_sdna(prop, nullptr, "flag", MB_HIDE);
262 RNA_def_property_ui_text(prop, "Hide", "Hide element");
263 RNA_def_property_update(prop, 0, "rna_MetaBall_update_data");
264}
265
266/* mball.elements */
268{
269 StructRNA *srna;
270 PropertyRNA *prop;
271
272 FunctionRNA *func;
273 PropertyRNA *parm;
274
275 RNA_def_property_srna(cprop, "MetaBallElements");
276 srna = RNA_def_struct(brna, "MetaBallElements", nullptr);
277 RNA_def_struct_sdna(srna, "MetaBall");
278 RNA_def_struct_ui_text(srna, "Metaball Elements", "Collection of metaball elements");
279
280 func = RNA_def_function(srna, "new", "rna_MetaBall_elements_new");
281 RNA_def_function_ui_description(func, "Add a new element to the metaball");
282 RNA_def_enum(func,
283 "type",
285 MB_BALL,
286 "",
287 "Type for the new metaball element");
288 parm = RNA_def_pointer(func, "element", "MetaElement", "", "The newly created metaball element");
289 RNA_def_function_return(func, parm);
290
291 func = RNA_def_function(srna, "remove", "rna_MetaBall_elements_remove");
292 RNA_def_function_ui_description(func, "Remove an element from the metaball");
294 parm = RNA_def_pointer(func, "element", "MetaElement", "", "The element to remove");
297
298 func = RNA_def_function(srna, "clear", "rna_MetaBall_elements_clear");
299 RNA_def_function_ui_description(func, "Remove all elements from the metaball");
300
301 prop = RNA_def_property(srna, "active", PROP_POINTER, PROP_NONE);
302 RNA_def_property_pointer_sdna(prop, nullptr, "lastelem");
303 RNA_def_property_ui_text(prop, "Active Element", "Last selected element");
304}
305
306static void rna_def_metaball(BlenderRNA *brna)
307{
308 StructRNA *srna;
309 PropertyRNA *prop;
310 static const EnumPropertyItem prop_update_items[] = {
311 {MB_UPDATE_ALWAYS, "UPDATE_ALWAYS", 0, "Always", "While editing, update metaball always"},
313 "HALFRES",
314 0,
315 "Half",
316 "While editing, update metaball in half resolution"},
317 {MB_UPDATE_FAST, "FAST", 0, "Fast", "While editing, update metaball without polygonization"},
318 {MB_UPDATE_NEVER, "NEVER", 0, "Never", "While editing, don't update metaball at all"},
319 {0, nullptr, 0, nullptr, nullptr},
320 };
321
322 srna = RNA_def_struct(brna, "MetaBall", "ID");
323 RNA_def_struct_ui_text(srna, "MetaBall", "Metaball data-block to define blobby surfaces");
324 RNA_def_struct_ui_icon(srna, ICON_META_DATA);
325
326 prop = RNA_def_property(srna, "elements", PROP_COLLECTION, PROP_NONE);
327 RNA_def_property_collection_sdna(prop, nullptr, "elems", nullptr);
328 RNA_def_property_struct_type(prop, "MetaElement");
329 RNA_def_property_ui_text(prop, "Elements", "Metaball elements");
330 rna_def_metaball_elements(brna, prop);
331
332 /* enums */
333 prop = RNA_def_property(srna, "update_method", PROP_ENUM, PROP_NONE);
334 RNA_def_property_enum_sdna(prop, nullptr, "flag");
335 RNA_def_property_enum_items(prop, prop_update_items);
336 RNA_def_property_ui_text(prop, "Update", "Metaball edit update behavior");
337 RNA_def_property_update(prop, 0, "rna_MetaBall_update_data");
338
339 /* number values */
340 prop = RNA_def_property(srna, "resolution", PROP_FLOAT, PROP_DISTANCE);
341 RNA_def_property_float_sdna(prop, nullptr, "wiresize");
342 RNA_def_property_range(prop, 0.005f, 10000.0f);
343 RNA_def_property_ui_range(prop, 0.05f, 1000.0f, 2.5f, 3);
344 RNA_def_property_ui_text(prop, "Viewport Size", "Polygonization resolution in the 3D viewport");
345 RNA_def_property_update(prop, 0, "rna_MetaBall_update_data");
346
347 prop = RNA_def_property(srna, "render_resolution", PROP_FLOAT, PROP_DISTANCE);
348 RNA_def_property_float_sdna(prop, nullptr, "rendersize");
349 RNA_def_property_range(prop, 0.005f, 10000.0f);
350 RNA_def_property_ui_range(prop, 0.025f, 1000.0f, 2.5f, 3);
351 RNA_def_property_ui_text(prop, "Render Size", "Polygonization resolution in rendering");
352 RNA_def_property_update(prop, 0, "rna_MetaBall_update_data");
353
354 prop = RNA_def_property(srna, "threshold", PROP_FLOAT, PROP_NONE);
355 RNA_def_property_float_sdna(prop, nullptr, "thresh");
356 RNA_def_property_range(prop, 0.0f, 5.0f);
357 RNA_def_property_ui_text(prop, "Threshold", "Influence of metaball elements");
358 RNA_def_property_update(prop, 0, "rna_MetaBall_update_data");
359
360 /* texture space */
361 prop = RNA_def_property(srna, "use_auto_texspace", PROP_BOOLEAN, PROP_NONE);
362 RNA_def_property_boolean_sdna(prop, nullptr, "texspace_flag", MB_TEXSPACE_FLAG_AUTO);
364 prop,
365 "Auto Texture Space",
366 "Adjust active object's texture space automatically when transforming object");
367
368 prop = RNA_def_property(srna, "texspace_location", PROP_FLOAT, PROP_TRANSLATION);
369 RNA_def_property_array(prop, 3);
370 RNA_def_property_ui_text(prop, "Texture Space Location", "Texture space location");
371 RNA_def_property_editable_func(prop, "rna_Meta_texspace_editable");
373 prop, "rna_Meta_texspace_location_get", "rna_Meta_texspace_location_set", nullptr);
374 RNA_def_property_update(prop, 0, "rna_MetaBall_update_data");
375
376 prop = RNA_def_property(srna, "texspace_size", PROP_FLOAT, PROP_XYZ);
377 RNA_def_property_array(prop, 3);
379 RNA_def_property_ui_text(prop, "Texture Space Size", "Texture space size");
380 RNA_def_property_editable_func(prop, "rna_Meta_texspace_editable");
382 prop, "rna_Meta_texspace_size_get", "rna_Meta_texspace_size_set", nullptr);
383 RNA_def_property_update(prop, 0, "rna_MetaBall_update_data");
384
385 /* not supported yet */
386# if 0
387 prop = RNA_def_property(srna, "texspace_rot", PROP_FLOAT, PROP_EULER);
388 RNA_def_property_float(prop, nullptr, "rot");
389 RNA_def_property_ui_text(prop, "Texture Space Rotation", "Texture space rotation");
390 RNA_def_property_editable_func(prop, "rna_Meta_texspace_editable");
392 RNA_def_property_update(prop, 0, "rna_MetaBall_update_data");
393# endif
394
395 /* materials */
396 prop = RNA_def_property(srna, "materials", PROP_COLLECTION, PROP_NONE);
397 RNA_def_property_collection_sdna(prop, nullptr, "mat", "totcol");
398 RNA_def_property_struct_type(prop, "Material");
399 RNA_def_property_ui_text(prop, "Materials", "");
400 RNA_def_property_srna(prop, "IDMaterials"); /* see rna_ID.cc */
402 nullptr,
403 nullptr,
404 nullptr,
405 nullptr,
406 nullptr,
407 nullptr,
408 nullptr,
409 "rna_IDMaterials_assign_int");
410
411 prop = RNA_def_property(srna, "is_editmode", PROP_BOOLEAN, PROP_NONE);
412 RNA_def_property_boolean_funcs(prop, "rna_Meta_is_editmode_get", nullptr);
414 RNA_def_property_ui_text(prop, "Is Editmode", "True when used in editmode");
415
416 /* anim */
418
419 RNA_api_meta(srna);
420}
421
423{
425 rna_def_metaball(brna);
426}
427
428#endif
void BKE_mball_properties_copy(Main *bmain, MetaBall *metaball_src)
Definition mball.cc:340
MetaElem * BKE_mball_element_add(MetaBall *mb, int type)
Definition mball.cc:179
void BKE_reportf(ReportList *reports, eReportType type, const char *format,...) ATTR_PRINTF_FORMAT(3
@ RPT_ERROR
Definition BKE_report.hh:39
int BLI_findindex(const ListBase *listbase, const void *vlink) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(1)
Definition listbase.cc:586
void void BLI_freelistN(ListBase *listbase) ATTR_NONNULL(1)
Definition listbase.cc:497
bool BLI_remlink_safe(ListBase *listbase, void *vlink) ATTR_NONNULL(1)
Definition listbase.cc:154
float normalize_qt(float q[4])
MINLINE void copy_v3_v3(float r[3], const float a[3])
void DEG_id_tag_update(ID *id, unsigned int flags)
@ ID_RECALC_SYNC_TO_EVAL
Definition DNA_ID.h:1118
@ MB_TEXSPACE_FLAG_AUTO
@ MB_SCALE_RAD
@ MB_NEGATIVE
@ MB_HIDE
@ MB_BALL
@ MB_UPDATE_ALWAYS
@ MB_UPDATE_FAST
@ MB_UPDATE_NEVER
@ MB_UPDATE_HALFRES
Object is a sort of wrapper for general info.
Read Guarded memory(de)allocation.
ParameterFlag
Definition RNA_types.hh:544
@ PARM_RNAPTR
Definition RNA_types.hh:547
@ PARM_REQUIRED
Definition RNA_types.hh:545
@ FUNC_USE_REPORTS
Definition RNA_types.hh:914
@ PROP_FLOAT
Definition RNA_types.hh:164
@ PROP_BOOLEAN
Definition RNA_types.hh:162
@ PROP_ENUM
Definition RNA_types.hh:166
@ PROP_POINTER
Definition RNA_types.hh:167
@ PROP_COLLECTION
Definition RNA_types.hh:168
@ PROP_UNIT_LENGTH
Definition RNA_types.hh:174
#define RNA_TRANSLATION_PREC_DEFAULT
Definition RNA_types.hh:224
@ PROP_THICK_WRAP
Definition RNA_types.hh:423
@ PROP_PROPORTIONAL
Definition RNA_types.hh:349
@ PROP_EDITABLE
Definition RNA_types.hh:306
@ PROP_NEVER_NULL
Definition RNA_types.hh:377
@ PROP_XYZ
Definition RNA_types.hh:269
@ PROP_DISTANCE
Definition RNA_types.hh:256
@ PROP_EULER
Definition RNA_types.hh:266
@ PROP_NONE
Definition RNA_types.hh:233
@ PROP_TRANSLATION
Definition RNA_types.hh:261
@ PROP_UNSIGNED
Definition RNA_types.hh:249
@ PROP_QUATERNION
Definition RNA_types.hh:267
#define NC_GEOM
Definition WM_types.hh:393
#define ND_DATA
Definition WM_types.hh:509
void MEM_freeN(void *vmemh)
Definition mallocn.cc:113
void rna_def_animdata_common(StructRNA *srna)
void RNA_def_property_boolean_sdna(PropertyRNA *prop, const char *structname, const char *propname, int64_t booleanbit)
void RNA_def_property_pointer_sdna(PropertyRNA *prop, const char *structname, const char *propname)
void RNA_def_struct_path_func(StructRNA *srna, const char *path)
void RNA_def_parameter_clear_flags(PropertyRNA *prop, PropertyFlag flag_property, ParameterFlag flag_parameter)
void RNA_def_function_return(FunctionRNA *func, PropertyRNA *ret)
void RNA_def_property_float_funcs(PropertyRNA *prop, const char *get, const char *set, const char *range)
void RNA_def_property_ui_text(PropertyRNA *prop, const char *name, const char *description)
void RNA_def_property_srna(PropertyRNA *prop, const char *type)
void RNA_def_property_collection_funcs(PropertyRNA *prop, const char *begin, const char *next, const char *end, const char *get, const char *length, const char *lookupint, const char *lookupstring, const char *assignint)
void RNA_def_struct_ui_text(StructRNA *srna, const char *name, const char *description)
void RNA_def_property_boolean_funcs(PropertyRNA *prop, const char *get, const char *set)
PropertyRNA * RNA_def_enum(StructOrFunctionRNA *cont_, const char *identifier, const EnumPropertyItem *items, const int default_value, const char *ui_name, const char *ui_description)
void RNA_def_property_enum_items(PropertyRNA *prop, const EnumPropertyItem *item)
void RNA_def_struct_sdna(StructRNA *srna, const char *structname)
FunctionRNA * RNA_def_function(StructRNA *srna, const char *identifier, const char *call)
void RNA_def_property_array(PropertyRNA *prop, int length)
void RNA_def_property_range(PropertyRNA *prop, double min, double max)
PropertyRNA * RNA_def_pointer(StructOrFunctionRNA *cont_, const char *identifier, const char *type, const char *ui_name, const char *ui_description)
void RNA_def_property_struct_type(PropertyRNA *prop, const char *type)
void RNA_def_property_collection_sdna(PropertyRNA *prop, const char *structname, const char *propname, const char *lengthpropname)
void RNA_def_function_ui_description(FunctionRNA *func, const char *description)
void RNA_def_property_update(PropertyRNA *prop, int noteflag, const char *func)
PropertyRNA * RNA_def_property(StructOrFunctionRNA *cont_, const char *identifier, int type, int subtype)
void RNA_def_property_editable_func(PropertyRNA *prop, const char *editable)
StructRNA * RNA_def_struct(BlenderRNA *brna, const char *identifier, const char *from)
void RNA_def_function_flag(FunctionRNA *func, int flag)
void RNA_def_property_clear_flag(PropertyRNA *prop, PropertyFlag flag)
void RNA_def_property_enum_sdna(PropertyRNA *prop, const char *structname, const char *propname)
void RNA_def_struct_ui_icon(StructRNA *srna, int icon)
void RNA_def_property_flag(PropertyRNA *prop, PropertyFlag flag)
void RNA_def_property_float_sdna(PropertyRNA *prop, const char *structname, const char *propname)
void RNA_def_property_ui_range(PropertyRNA *prop, double min, double max, double step, int precision)
void RNA_def_property_boolean_negative_sdna(PropertyRNA *prop, const char *structname, const char *propname, int64_t booleanbit)
void RNA_def_parameter_flags(PropertyRNA *prop, PropertyFlag flag_property, ParameterFlag flag_parameter)
void RNA_api_meta(StructRNA *srna)
static void rna_def_metaball_elements(BlenderRNA *brna, PropertyRNA *cprop)
Definition rna_meta.cc:267
void RNA_def_meta(BlenderRNA *brna)
Definition rna_meta.cc:422
static void rna_def_metaball(BlenderRNA *brna)
Definition rna_meta.cc:306
static void rna_def_metaelement(BlenderRNA *brna)
Definition rna_meta.cc:179
const EnumPropertyItem rna_enum_metaelem_type_items[]
#define FLT_MAX
Definition stdcycles.h:14
Definition DNA_ID.h:414
char name[258]
Definition DNA_ID.h:432
int us
Definition DNA_ID.h:443
ListBase elems
ListBase * editelems
float quat[4]
void invalidate()
Definition RNA_types.hh:110
void * data
Definition RNA_types.hh:53
void WM_main_add_notifier(uint type, void *reference)
PointerRNA * ptr
Definition wm_files.cc:4238