Blender  V3.3
rna_cloth.c
Go to the documentation of this file.
1 /* SPDX-License-Identifier: GPL-2.0-or-later */
2 
7 #include <limits.h>
8 #include <stdlib.h>
9 
10 #include "DNA_cloth_types.h"
11 #include "DNA_object_types.h"
12 #include "DNA_scene_types.h"
13 
14 #include "RNA_define.h"
15 
16 #include "rna_internal.h"
17 
18 #include "BLI_math.h"
19 
20 #include "BKE_cloth.h"
21 #include "BKE_modifier.h"
22 
23 #include "SIM_mass_spring.h"
24 
25 #include "WM_api.h"
26 #include "WM_types.h"
27 
28 #ifdef RNA_RUNTIME
29 
30 # include "BKE_context.h"
31 # include "DEG_depsgraph.h"
32 # include "DEG_depsgraph_build.h"
33 
34 static void rna_cloth_update(Main *UNUSED(bmain), Scene *UNUSED(scene), PointerRNA *ptr)
35 {
36  Object *ob = (Object *)ptr->owner_id;
37 
40 }
41 
42 static void rna_cloth_dependency_update(Main *bmain, Scene *scene, PointerRNA *ptr)
43 {
45  rna_cloth_update(bmain, scene, ptr);
46 }
47 
48 static void rna_cloth_pinning_changed(Main *UNUSED(bmain), Scene *UNUSED(scene), PointerRNA *ptr)
49 {
50  Object *ob = (Object *)ptr->owner_id;
51  /* ClothSimSettings *settings = (ClothSimSettings *)ptr->data; */
54 
55  cloth_free_modifier(clmd);
56 
59 }
60 
61 static void rna_ClothSettings_bending_set(struct PointerRNA *ptr, float value)
62 {
63  ClothSimSettings *settings = (ClothSimSettings *)ptr->data;
64 
65  settings->bending = value;
66 
67  /* check for max clipping */
68  if (value > settings->max_bend) {
69  settings->max_bend = value;
70  }
71 }
72 
73 static void rna_ClothSettings_max_bend_set(struct PointerRNA *ptr, float value)
74 {
75  ClothSimSettings *settings = (ClothSimSettings *)ptr->data;
76 
77  /* check for clipping */
78  if (value < settings->bending) {
79  value = settings->bending;
80  }
81 
82  settings->max_bend = value;
83 }
84 
85 static void rna_ClothSettings_tension_set(struct PointerRNA *ptr, float value)
86 {
87  ClothSimSettings *settings = (ClothSimSettings *)ptr->data;
88 
89  settings->tension = value;
90 
91  /* check for max clipping */
92  if (value > settings->max_tension) {
93  settings->max_tension = value;
94  }
95 }
96 
97 static void rna_ClothSettings_max_tension_set(struct PointerRNA *ptr, float value)
98 {
99  ClothSimSettings *settings = (ClothSimSettings *)ptr->data;
100 
101  /* check for clipping */
102  if (value < settings->tension) {
103  value = settings->tension;
104  }
105 
106  settings->max_tension = value;
107 }
108 
109 static void rna_ClothSettings_compression_set(struct PointerRNA *ptr, float value)
110 {
111  ClothSimSettings *settings = (ClothSimSettings *)ptr->data;
112 
113  settings->compression = value;
114 
115  /* check for max clipping */
116  if (value > settings->max_compression) {
117  settings->max_compression = value;
118  }
119 }
120 
121 static void rna_ClothSettings_max_compression_set(struct PointerRNA *ptr, float value)
122 {
123  ClothSimSettings *settings = (ClothSimSettings *)ptr->data;
124 
125  /* check for clipping */
126  if (value < settings->compression) {
127  value = settings->compression;
128  }
129 
130  settings->max_compression = value;
131 }
132 
133 static void rna_ClothSettings_shear_set(struct PointerRNA *ptr, float value)
134 {
135  ClothSimSettings *settings = (ClothSimSettings *)ptr->data;
136 
137  settings->shear = value;
138 
139  /* check for max clipping */
140  if (value > settings->max_shear) {
141  settings->max_shear = value;
142  }
143 }
144 
145 static void rna_ClothSettings_max_shear_set(struct PointerRNA *ptr, float value)
146 {
147  ClothSimSettings *settings = (ClothSimSettings *)ptr->data;
148 
149  /* check for clipping */
150  if (value < settings->shear) {
151  value = settings->shear;
152  }
153 
154  settings->max_shear = value;
155 }
156 
157 static void rna_ClothSettings_max_sewing_set(struct PointerRNA *ptr, float value)
158 {
159  ClothSimSettings *settings = (ClothSimSettings *)ptr->data;
160 
161  /* check for clipping */
162  if (value < 0.0f) {
163  value = 0.0f;
164  }
165 
166  settings->max_sewing = value;
167 }
168 
169 static void rna_ClothSettings_shrink_min_set(struct PointerRNA *ptr, float value)
170 {
171  ClothSimSettings *settings = (ClothSimSettings *)ptr->data;
172 
173  settings->shrink_min = value;
174 
175  /* check for max clipping */
176  if (value > settings->shrink_max) {
177  settings->shrink_max = value;
178  }
179 }
180 
181 static void rna_ClothSettings_shrink_max_set(struct PointerRNA *ptr, float value)
182 {
183  ClothSimSettings *settings = (ClothSimSettings *)ptr->data;
184 
185  /* check for clipping */
186  if (value < settings->shrink_min) {
187  value = settings->shrink_min;
188  }
189 
190  settings->shrink_max = value;
191 }
192 
193 static void rna_ClothSettings_internal_tension_set(struct PointerRNA *ptr, float value)
194 {
195  ClothSimSettings *settings = (ClothSimSettings *)ptr->data;
196 
197  settings->internal_tension = value;
198 
199  /* check for max clipping */
200  if (value > settings->max_internal_tension) {
201  settings->max_internal_tension = value;
202  }
203 }
204 
205 static void rna_ClothSettings_max_internal_tension_set(struct PointerRNA *ptr, float value)
206 {
207  ClothSimSettings *settings = (ClothSimSettings *)ptr->data;
208 
209  /* check for clipping */
210  if (value < settings->internal_tension) {
211  value = settings->internal_tension;
212  }
213 
214  settings->max_internal_tension = value;
215 }
216 
217 static void rna_ClothSettings_internal_compression_set(struct PointerRNA *ptr, float value)
218 {
219  ClothSimSettings *settings = (ClothSimSettings *)ptr->data;
220 
221  settings->internal_compression = value;
222 
223  /* check for max clipping */
224  if (value > settings->max_internal_compression) {
225  settings->max_internal_compression = value;
226  }
227 }
228 
229 static void rna_ClothSettings_max_internal_compression_set(struct PointerRNA *ptr, float value)
230 {
231  ClothSimSettings *settings = (ClothSimSettings *)ptr->data;
232 
233  /* check for clipping */
234  if (value < settings->internal_compression) {
235  value = settings->internal_compression;
236  }
237 
238  settings->max_internal_compression = value;
239 }
240 
241 static void rna_ClothSettings_mass_vgroup_get(PointerRNA *ptr, char *value)
242 {
245 }
246 
247 static int rna_ClothSettings_mass_vgroup_length(PointerRNA *ptr)
248 {
251 }
252 
253 static void rna_ClothSettings_mass_vgroup_set(PointerRNA *ptr, const char *value)
254 {
257 }
258 
259 static void rna_ClothSettings_shrink_vgroup_get(PointerRNA *ptr, char *value)
260 {
263 }
264 
265 static int rna_ClothSettings_shrink_vgroup_length(PointerRNA *ptr)
266 {
269 }
270 
271 static void rna_ClothSettings_shrink_vgroup_set(PointerRNA *ptr, const char *value)
272 {
275 }
276 
277 static void rna_ClothSettings_struct_vgroup_get(PointerRNA *ptr, char *value)
278 {
281 }
282 
283 static int rna_ClothSettings_struct_vgroup_length(PointerRNA *ptr)
284 {
287 }
288 
289 static void rna_ClothSettings_struct_vgroup_set(PointerRNA *ptr, const char *value)
290 {
293 }
294 
295 static void rna_ClothSettings_shear_vgroup_get(PointerRNA *ptr, char *value)
296 {
299 }
300 
301 static int rna_ClothSettings_shear_vgroup_length(PointerRNA *ptr)
302 {
305 }
306 
307 static void rna_ClothSettings_shear_vgroup_set(PointerRNA *ptr, const char *value)
308 {
311 }
312 
313 static void rna_ClothSettings_bend_vgroup_get(PointerRNA *ptr, char *value)
314 {
317 }
318 
319 static int rna_ClothSettings_bend_vgroup_length(PointerRNA *ptr)
320 {
323 }
324 
325 static void rna_ClothSettings_bend_vgroup_set(PointerRNA *ptr, const char *value)
326 {
329 }
330 
331 static void rna_ClothSettings_internal_vgroup_get(PointerRNA *ptr, char *value)
332 {
335 }
336 
337 static int rna_ClothSettings_internal_vgroup_length(PointerRNA *ptr)
338 {
341 }
342 
343 static void rna_ClothSettings_internal_vgroup_set(PointerRNA *ptr, const char *value)
344 {
347 }
348 
349 static void rna_ClothSettings_pressure_vgroup_get(PointerRNA *ptr, char *value)
350 {
353 }
354 
355 static int rna_ClothSettings_pressure_vgroup_length(PointerRNA *ptr)
356 {
359 }
360 
361 static void rna_ClothSettings_pressure_vgroup_set(PointerRNA *ptr, const char *value)
362 {
365 }
366 
367 static void rna_CollSettings_selfcol_vgroup_get(PointerRNA *ptr, char *value)
368 {
371 }
372 
373 static int rna_CollSettings_selfcol_vgroup_length(PointerRNA *ptr)
374 {
377 }
378 
379 static void rna_CollSettings_selfcol_vgroup_set(PointerRNA *ptr, const char *value)
380 {
383 }
384 
385 static void rna_CollSettings_objcol_vgroup_get(PointerRNA *ptr, char *value)
386 {
389 }
390 
391 static int rna_CollSettings_objcol_vgroup_length(PointerRNA *ptr)
392 {
395 }
396 
397 static void rna_CollSettings_objcol_vgroup_set(PointerRNA *ptr, const char *value)
398 {
401 }
402 
403 static PointerRNA rna_ClothSettings_rest_shape_key_get(PointerRNA *ptr)
404 {
405  Object *ob = (Object *)ptr->owner_id;
407 
409 }
410 
411 static void rna_ClothSettings_rest_shape_key_set(PointerRNA *ptr,
412  PointerRNA value,
413  struct ReportList *UNUSED(reports))
414 {
415  Object *ob = (Object *)ptr->owner_id;
417 
419 }
420 
421 static void rna_ClothSettings_gravity_get(PointerRNA *ptr, float *values)
422 {
424 
425  values[0] = sim->gravity[0];
426  values[1] = sim->gravity[1];
427  values[2] = sim->gravity[2];
428 }
429 
430 static void rna_ClothSettings_gravity_set(PointerRNA *ptr, const float *values)
431 {
433 
434  sim->gravity[0] = values[0];
435  sim->gravity[1] = values[1];
436  sim->gravity[2] = values[2];
437 }
438 
439 static char *rna_ClothSettings_path(const PointerRNA *ptr)
440 {
441  const Object *ob = (Object *)ptr->owner_id;
443 
444  if (md) {
445  char name_esc[sizeof(md->name) * 2];
446  BLI_str_escape(name_esc, md->name, sizeof(name_esc));
447  return BLI_sprintfN("modifiers[\"%s\"].settings", name_esc);
448  }
449  else {
450  return NULL;
451  }
452 }
453 
454 static char *rna_ClothCollisionSettings_path(const PointerRNA *ptr)
455 {
456  const Object *ob = (Object *)ptr->owner_id;
458 
459  if (md) {
460  char name_esc[sizeof(md->name) * 2];
461  BLI_str_escape(name_esc, md->name, sizeof(name_esc));
462  return BLI_sprintfN("modifiers[\"%s\"].collision_settings", name_esc);
463  }
464  else {
465  return NULL;
466  }
467 }
468 
469 static int rna_ClothSettings_internal_editable(struct PointerRNA *ptr, const char **r_info)
470 {
472 
473  if (sim && (sim->bending_model == CLOTH_BENDING_LINEAR)) {
474  *r_info = "Only available with angular bending springs.";
475  return 0;
476  }
477 
478  return sim ? PROP_EDITABLE : 0;
479 }
480 
481 #else
482 
484 {
485  StructRNA *srna;
486  PropertyRNA *prop;
487 
488  static const EnumPropertyItem status_items[] = {
489  {SIM_SOLVER_SUCCESS, "SUCCESS", 0, "Success", "Computation was successful"},
491  "NUMERICAL_ISSUE",
492  0,
493  "Numerical Issue",
494  "The provided data did not satisfy the prerequisites"},
496  "NO_CONVERGENCE",
497  0,
498  "No Convergence",
499  "Iterative procedure did not converge"},
501  "INVALID_INPUT",
502  0,
503  "Invalid Input",
504  "The inputs are invalid, or the algorithm has been improperly called"},
505  {0, NULL, 0, NULL, NULL},
506  };
507 
508  srna = RNA_def_struct(brna, "ClothSolverResult", NULL);
509  RNA_def_struct_ui_text(srna, "Solver Result", "Result of cloth solver iteration");
510 
512 
513  prop = RNA_def_property(srna, "status", PROP_ENUM, PROP_NONE);
514  RNA_def_property_enum_items(prop, status_items);
515  RNA_def_property_enum_sdna(prop, NULL, "status");
518  RNA_def_property_ui_text(prop, "Status", "Status of the solver iteration");
519 
520  prop = RNA_def_property(srna, "max_error", PROP_FLOAT, PROP_NONE);
521  RNA_def_property_float_sdna(prop, NULL, "max_error");
523  RNA_def_property_ui_text(prop, "Maximum Error", "Maximum error during substeps");
524 
525  prop = RNA_def_property(srna, "min_error", PROP_FLOAT, PROP_NONE);
526  RNA_def_property_float_sdna(prop, NULL, "min_error");
528  RNA_def_property_ui_text(prop, "Minimum Error", "Minimum error during substeps");
529 
530  prop = RNA_def_property(srna, "avg_error", PROP_FLOAT, PROP_NONE);
531  RNA_def_property_float_sdna(prop, NULL, "avg_error");
533  RNA_def_property_ui_text(prop, "Average Error", "Average error during substeps");
534 
535  prop = RNA_def_property(srna, "max_iterations", PROP_INT, PROP_NONE);
536  RNA_def_property_int_sdna(prop, NULL, "max_iterations");
538  RNA_def_property_ui_text(prop, "Maximum Iterations", "Maximum iterations during substeps");
539 
540  prop = RNA_def_property(srna, "min_iterations", PROP_INT, PROP_NONE);
541  RNA_def_property_int_sdna(prop, NULL, "min_iterations");
543  RNA_def_property_ui_text(prop, "Minimum Iterations", "Minimum iterations during substeps");
544 
545  prop = RNA_def_property(srna, "avg_iterations", PROP_FLOAT, PROP_NONE);
546  RNA_def_property_float_sdna(prop, NULL, "avg_iterations");
548  RNA_def_property_ui_text(prop, "Average Iterations", "Average iterations during substeps");
549 
551 }
552 
554 {
555  StructRNA *srna;
556  PropertyRNA *prop;
557 
558  static const EnumPropertyItem prop_bending_model_items[] = {
559  {CLOTH_BENDING_ANGULAR, "ANGULAR", 0, "Angular", "Cloth model with angular bending springs"},
561  "LINEAR",
562  0,
563  "Linear",
564  "Cloth model with linear bending springs (legacy)"},
565  {0, NULL, 0, NULL, NULL},
566  };
567 
568  srna = RNA_def_struct(brna, "ClothSettings", NULL);
569  RNA_def_struct_ui_text(srna, "Cloth Settings", "Cloth simulation settings for an object");
570  RNA_def_struct_sdna(srna, "ClothSimSettings");
571  RNA_def_struct_path_func(srna, "rna_ClothSettings_path");
572 
574 
575  /* goal */
576 
577  prop = RNA_def_property(srna, "goal_min", PROP_FLOAT, PROP_FACTOR);
578  RNA_def_property_float_sdna(prop, NULL, "mingoal");
579  RNA_def_property_range(prop, 0.0f, 1.0f);
581  prop, "Goal Minimum", "Goal minimum, vertex group weights are scaled to match this range");
582  RNA_def_property_update(prop, 0, "rna_cloth_update");
583 
584  prop = RNA_def_property(srna, "goal_max", PROP_FLOAT, PROP_FACTOR);
585  RNA_def_property_float_sdna(prop, NULL, "maxgoal");
586  RNA_def_property_range(prop, 0.0f, 1.0f);
588  prop, "Goal Maximum", "Goal maximum, vertex group weights are scaled to match this range");
589  RNA_def_property_update(prop, 0, "rna_cloth_update");
590 
591  prop = RNA_def_property(srna, "goal_default", PROP_FLOAT, PROP_FACTOR);
592  RNA_def_property_float_sdna(prop, NULL, "defgoal");
593  RNA_def_property_range(prop, 0.0f, 1.0f);
595  prop,
596  "Goal Default",
597  "Default Goal (vertex target position) value, when no Vertex Group used");
598  RNA_def_property_update(prop, 0, "rna_cloth_update");
599 
600  prop = RNA_def_property(srna, "goal_spring", PROP_FLOAT, PROP_NONE);
601  RNA_def_property_float_sdna(prop, NULL, "goalspring");
602  RNA_def_property_range(prop, 0.0f, 0.999f);
604  prop, "Goal Stiffness", "Goal (vertex target position) spring stiffness");
605  RNA_def_property_update(prop, 0, "rna_cloth_update");
606 
607  prop = RNA_def_property(srna, "goal_friction", PROP_FLOAT, PROP_NONE);
608  RNA_def_property_float_sdna(prop, NULL, "goalfrict");
609  RNA_def_property_range(prop, 0.0f, 50.0f);
610  RNA_def_property_ui_text(prop, "Goal Damping", "Goal (vertex target position) friction");
611  RNA_def_property_update(prop, 0, "rna_cloth_update");
612 
613  prop = RNA_def_property(srna, "internal_friction", PROP_FLOAT, PROP_FACTOR);
614  RNA_def_property_float_sdna(prop, NULL, "velocity_smooth");
615  RNA_def_property_range(prop, 0.0f, 1.0f);
616  RNA_def_property_ui_text(prop, "Internal Friction", "");
617  RNA_def_property_update(prop, 0, "rna_cloth_update");
618 
619  prop = RNA_def_property(srna, "collider_friction", PROP_FLOAT, PROP_FACTOR);
620  RNA_def_property_float_sdna(prop, NULL, "collider_friction");
621  RNA_def_property_range(prop, 0.0f, 1.0f);
622  RNA_def_property_ui_text(prop, "Collider Friction", "");
623  RNA_def_property_update(prop, 0, "rna_cloth_update");
624 
625  prop = RNA_def_property(srna, "density_target", PROP_FLOAT, PROP_NONE);
626  RNA_def_property_float_sdna(prop, NULL, "density_target");
627  RNA_def_property_range(prop, 0.0f, 10000.0f);
628  RNA_def_property_ui_text(prop, "Target Density", "Maximum density of hair");
629  RNA_def_property_update(prop, 0, "rna_cloth_update");
630 
631  prop = RNA_def_property(srna, "density_strength", PROP_FLOAT, PROP_FACTOR);
632  RNA_def_property_float_sdna(prop, NULL, "density_strength");
633  RNA_def_property_range(prop, 0.0f, 1.0f);
635  prop, "Target Density Strength", "Influence of target density on the simulation");
636  RNA_def_property_update(prop, 0, "rna_cloth_update");
637 
638  /* mass */
639 
640  prop = RNA_def_property(srna, "mass", PROP_FLOAT, PROP_UNIT_MASS);
641  RNA_def_property_range(prop, 0.0f, FLT_MAX);
642  RNA_def_property_ui_text(prop, "Vertex Mass", "The mass of each vertex on the cloth material");
643  RNA_def_property_update(prop, 0, "rna_cloth_update");
644 
645  prop = RNA_def_property(srna, "vertex_group_mass", PROP_STRING, PROP_NONE);
647  "rna_ClothSettings_mass_vgroup_get",
648  "rna_ClothSettings_mass_vgroup_length",
649  "rna_ClothSettings_mass_vgroup_set");
651  RNA_def_property_ui_text(prop, "Mass Vertex Group", "Vertex Group for pinning of vertices");
652  RNA_def_property_update(prop, 0, "rna_cloth_pinning_changed");
653 
654  prop = RNA_def_property(srna, "gravity", PROP_FLOAT, PROP_ACCELERATION);
655  RNA_def_property_array(prop, 3);
656  RNA_def_property_range(prop, -100.0, 100.0);
658  prop, "rna_ClothSettings_gravity_get", "rna_ClothSettings_gravity_set", NULL);
659  RNA_def_property_ui_text(prop, "Gravity", "Gravity or external force vector");
660  RNA_def_property_update(prop, 0, "rna_cloth_update");
661 
662  /* various */
663 
664  prop = RNA_def_property(srna, "air_damping", PROP_FLOAT, PROP_NONE);
665  RNA_def_property_float_sdna(prop, NULL, "Cvi");
666  RNA_def_property_range(prop, 0.0f, 10.0f);
668  prop, "Air Damping", "Air has normally some thickness which slows falling things down");
669  RNA_def_property_update(prop, 0, "rna_cloth_update");
670 
671  prop = RNA_def_property(srna, "pin_stiffness", PROP_FLOAT, PROP_NONE);
672  RNA_def_property_float_sdna(prop, NULL, "goalspring");
673  RNA_def_property_range(prop, 0.0f, 50.0);
674  RNA_def_property_ui_text(prop, "Pin Stiffness", "Pin (vertex target position) spring stiffness");
675  RNA_def_property_update(prop, 0, "rna_cloth_update");
676 
677  prop = RNA_def_property(srna, "quality", PROP_INT, PROP_NONE);
678  RNA_def_property_int_sdna(prop, NULL, "stepsPerFrame");
679  RNA_def_property_range(prop, 1, INT_MAX);
680  RNA_def_property_ui_range(prop, 1, 80, 1, -1);
682  prop,
683  "Quality",
684  "Quality of the simulation in steps per frame (higher is better quality but slower)");
685  RNA_def_property_update(prop, 0, "rna_cloth_update");
686 
687  prop = RNA_def_property(srna, "time_scale", PROP_FLOAT, PROP_NONE);
688  RNA_def_property_float_sdna(prop, NULL, "time_scale");
689  RNA_def_property_range(prop, 0.0f, FLT_MAX);
690  RNA_def_property_ui_range(prop, 0.0f, 10.0f, 10, 3);
691  RNA_def_property_ui_text(prop, "Speed", "Cloth speed is multiplied by this value");
692  RNA_def_property_update(prop, 0, "rna_cloth_update");
693 
694  prop = RNA_def_property(srna, "vertex_group_shrink", PROP_STRING, PROP_NONE);
696  "rna_ClothSettings_shrink_vgroup_get",
697  "rna_ClothSettings_shrink_vgroup_length",
698  "rna_ClothSettings_shrink_vgroup_set");
700  RNA_def_property_ui_text(prop, "Shrink Vertex Group", "Vertex Group for shrinking cloth");
701  RNA_def_property_update(prop, 0, "rna_cloth_update");
702 
703  prop = RNA_def_property(srna, "shrink_min", PROP_FLOAT, PROP_FACTOR);
704  RNA_def_property_float_sdna(prop, NULL, "shrink_min");
705  RNA_def_property_range(prop, -FLT_MAX, 1.0f);
706  RNA_def_property_ui_range(prop, -1.0f, 1.0f, 0.05f, 3);
707  RNA_def_property_float_funcs(prop, NULL, "rna_ClothSettings_shrink_min_set", NULL);
708  RNA_def_property_ui_text(prop, "Shrink Factor", "Factor by which to shrink cloth");
709  RNA_def_property_update(prop, 0, "rna_cloth_update");
710 
711  prop = RNA_def_property(srna, "shrink_max", PROP_FLOAT, PROP_FACTOR);
712  RNA_def_property_float_sdna(prop, NULL, "shrink_max");
713  RNA_def_property_range(prop, -FLT_MAX, 1.0f);
714  RNA_def_property_ui_range(prop, -1.0f, 1.0f, 0.05f, 3);
715  RNA_def_property_float_funcs(prop, NULL, "rna_ClothSettings_shrink_max_set", NULL);
716  RNA_def_property_ui_text(prop, "Shrink Factor Max", "Max amount to shrink cloth by");
717  RNA_def_property_update(prop, 0, "rna_cloth_update");
718 
719  prop = RNA_def_property(srna, "voxel_cell_size", PROP_FLOAT, PROP_UNSIGNED);
720  RNA_def_property_float_sdna(prop, NULL, "voxel_cell_size");
721  RNA_def_property_range(prop, 0.0001f, 10000.0f);
723  prop, "Voxel Grid Cell Size", "Size of the voxel grid cells for interaction effects");
724  RNA_def_property_update(prop, 0, "rna_cloth_update");
725 
726  /* springs */
727  prop = RNA_def_property(srna, "tension_damping", PROP_FLOAT, PROP_NONE);
728  RNA_def_property_float_sdna(prop, NULL, "tension_damp");
729  RNA_def_property_range(prop, 0.0f, 50.0f);
731  prop, "Tension Spring Damping", "Amount of damping in stretching behavior");
732  RNA_def_property_update(prop, 0, "rna_cloth_update");
733 
734  prop = RNA_def_property(srna, "compression_damping", PROP_FLOAT, PROP_NONE);
735  RNA_def_property_float_sdna(prop, NULL, "compression_damp");
736  RNA_def_property_range(prop, 0.0f, 50.0f);
738  prop, "Compression Spring Damping", "Amount of damping in compression behavior");
739  RNA_def_property_update(prop, 0, "rna_cloth_update");
740 
741  prop = RNA_def_property(srna, "shear_damping", PROP_FLOAT, PROP_NONE);
742  RNA_def_property_float_sdna(prop, NULL, "shear_damp");
743  RNA_def_property_range(prop, 0.0f, 50.0f);
744  RNA_def_property_ui_text(prop, "Shear Spring Damping", "Amount of damping in shearing behavior");
745  RNA_def_property_update(prop, 0, "rna_cloth_update");
746 
747  prop = RNA_def_property(srna, "tension_stiffness", PROP_FLOAT, PROP_NONE);
748  RNA_def_property_float_sdna(prop, NULL, "tension");
749  RNA_def_property_range(prop, 0.0f, 10000.0f);
750  RNA_def_property_float_funcs(prop, NULL, "rna_ClothSettings_tension_set", NULL);
751  RNA_def_property_ui_text(prop, "Tension Stiffness", "How much the material resists stretching");
752  RNA_def_property_update(prop, 0, "rna_cloth_update");
753 
754  prop = RNA_def_property(srna, "tension_stiffness_max", PROP_FLOAT, PROP_NONE);
755  RNA_def_property_float_sdna(prop, NULL, "max_tension");
756  RNA_def_property_range(prop, 0.0f, 10000.0f);
757  RNA_def_property_float_funcs(prop, NULL, "rna_ClothSettings_max_tension_set", NULL);
758  RNA_def_property_ui_text(prop, "Tension Stiffness Maximum", "Maximum tension stiffness value");
759  RNA_def_property_update(prop, 0, "rna_cloth_update");
760 
761  prop = RNA_def_property(srna, "compression_stiffness", PROP_FLOAT, PROP_NONE);
762  RNA_def_property_float_sdna(prop, NULL, "compression");
763  RNA_def_property_range(prop, 0.0f, 10000.0f);
764  RNA_def_property_float_funcs(prop, NULL, "rna_ClothSettings_compression_set", NULL);
766  prop, "Compression Stiffness", "How much the material resists compression");
767  RNA_def_property_update(prop, 0, "rna_cloth_update");
768 
769  prop = RNA_def_property(srna, "compression_stiffness_max", PROP_FLOAT, PROP_NONE);
770  RNA_def_property_float_sdna(prop, NULL, "max_compression");
771  RNA_def_property_range(prop, 0.0f, 10000.0f);
772  RNA_def_property_float_funcs(prop, NULL, "rna_ClothSettings_max_compression_set", NULL);
774  prop, "Compression Stiffness Maximum", "Maximum compression stiffness value");
775  RNA_def_property_update(prop, 0, "rna_cloth_update");
776 
777  prop = RNA_def_property(srna, "shear_stiffness", PROP_FLOAT, PROP_NONE);
778  RNA_def_property_float_sdna(prop, NULL, "shear");
779  RNA_def_property_range(prop, 0.0f, 10000.0f);
780  RNA_def_property_float_funcs(prop, NULL, "rna_ClothSettings_shear_set", NULL);
781  RNA_def_property_ui_text(prop, "Shear Stiffness", "How much the material resists shearing");
782  RNA_def_property_update(prop, 0, "rna_cloth_update");
783 
784  prop = RNA_def_property(srna, "shear_stiffness_max", PROP_FLOAT, PROP_NONE);
785  RNA_def_property_float_sdna(prop, NULL, "max_shear");
786  RNA_def_property_range(prop, 0.0f, 10000.0f);
787  RNA_def_property_float_funcs(prop, NULL, "rna_ClothSettings_max_shear_set", NULL);
788  RNA_def_property_ui_text(prop, "Shear Stiffness Maximum", "Maximum shear scaling value");
789  RNA_def_property_update(prop, 0, "rna_cloth_update");
790 
791  prop = RNA_def_property(srna, "sewing_force_max", PROP_FLOAT, PROP_NONE);
792  RNA_def_property_float_sdna(prop, NULL, "max_sewing");
793  RNA_def_property_range(prop, 0.0f, 10000.0f);
794  RNA_def_property_float_funcs(prop, NULL, "rna_ClothSettings_max_sewing_set", NULL);
795  RNA_def_property_ui_text(prop, "Sewing Force Max", "Maximum sewing force");
796  RNA_def_property_update(prop, 0, "rna_cloth_update");
797 
798  prop = RNA_def_property(srna, "vertex_group_structural_stiffness", PROP_STRING, PROP_NONE);
800  "rna_ClothSettings_struct_vgroup_get",
801  "rna_ClothSettings_struct_vgroup_length",
802  "rna_ClothSettings_struct_vgroup_set");
805  "Structural Stiffness Vertex Group",
806  "Vertex group for fine control over structural stiffness");
807  RNA_def_property_update(prop, 0, "rna_cloth_update");
808 
809  prop = RNA_def_property(srna, "vertex_group_shear_stiffness", PROP_STRING, PROP_NONE);
811  "rna_ClothSettings_shear_vgroup_get",
812  "rna_ClothSettings_shear_vgroup_length",
813  "rna_ClothSettings_shear_vgroup_set");
816  prop, "Shear Stiffness Vertex Group", "Vertex group for fine control over shear stiffness");
817  RNA_def_property_update(prop, 0, "rna_cloth_update");
818 
819  prop = RNA_def_property(srna, "bending_stiffness", PROP_FLOAT, PROP_NONE);
820  RNA_def_property_float_sdna(prop, NULL, "bending");
821  RNA_def_property_range(prop, 0.0f, 10000.0f);
822  RNA_def_property_float_funcs(prop, NULL, "rna_ClothSettings_bending_set", NULL);
823  RNA_def_property_ui_text(prop, "Bending Stiffness", "How much the material resists bending");
824  RNA_def_property_update(prop, 0, "rna_cloth_update");
825 
826  prop = RNA_def_property(srna, "bending_stiffness_max", PROP_FLOAT, PROP_NONE);
827  RNA_def_property_float_sdna(prop, NULL, "max_bend");
828  RNA_def_property_range(prop, 0.0f, 10000.0f);
829  RNA_def_property_float_funcs(prop, NULL, "rna_ClothSettings_max_bend_set", NULL);
830  RNA_def_property_ui_text(prop, "Bending Stiffness Maximum", "Maximum bending stiffness value");
831  RNA_def_property_update(prop, 0, "rna_cloth_update");
832 
833  prop = RNA_def_property(srna, "bending_damping", PROP_FLOAT, PROP_NONE);
834  RNA_def_property_float_sdna(prop, NULL, "bending_damping");
835  RNA_def_property_range(prop, 0.0f, 1000.0f);
837  prop, "Bending Spring Damping", "Amount of damping in bending behavior");
838  RNA_def_property_update(prop, 0, "rna_cloth_update");
839 
840  prop = RNA_def_property(srna, "use_sewing_springs", PROP_BOOLEAN, PROP_NONE);
842  RNA_def_property_ui_text(prop, "Sew Cloth", "Pulls loose edges together");
844  RNA_def_property_update(prop, 0, "rna_cloth_update");
845 
846  prop = RNA_def_property(srna, "vertex_group_bending", PROP_STRING, PROP_NONE);
848  "rna_ClothSettings_bend_vgroup_get",
849  "rna_ClothSettings_bend_vgroup_length",
850  "rna_ClothSettings_bend_vgroup_set");
853  "Bending Stiffness Vertex Group",
854  "Vertex group for fine control over bending stiffness");
855  RNA_def_property_update(prop, 0, "rna_cloth_update");
856 
857  prop = RNA_def_property(srna, "effector_weights", PROP_POINTER, PROP_NONE);
858  RNA_def_property_struct_type(prop, "EffectorWeights");
860  RNA_def_property_ui_text(prop, "Effector Weights", "");
861 
862  prop = RNA_def_property(srna, "rest_shape_key", PROP_POINTER, PROP_NONE);
864  RNA_def_property_struct_type(prop, "ShapeKey");
866  "rna_ClothSettings_rest_shape_key_get",
867  "rna_ClothSettings_rest_shape_key_set",
868  NULL,
869  NULL);
872  prop, "Rest Shape Key", "Shape key to use the rest spring lengths from");
873  RNA_def_property_update(prop, 0, "rna_cloth_update");
874 
875  prop = RNA_def_property(srna, "use_dynamic_mesh", PROP_BOOLEAN, PROP_NONE);
878  prop, "Dynamic Base Mesh", "Make simulation respect deformations in the base mesh");
879  RNA_def_property_update(prop, 0, "rna_cloth_update");
881 
882  prop = RNA_def_property(srna, "bending_model", PROP_ENUM, PROP_NONE);
883  RNA_def_property_enum_sdna(prop, NULL, "bending_model");
884  RNA_def_property_enum_items(prop, prop_bending_model_items);
885  RNA_def_property_ui_text(prop, "Bending Model", "Physical model for simulating bending forces");
886  RNA_def_property_update(prop, 0, "rna_cloth_update");
888 
889  prop = RNA_def_property(srna, "use_internal_springs", PROP_BOOLEAN, PROP_NONE);
892  "Create Internal Springs",
893  "Simulate an internal volume structure by creating springs connecting "
894  "the opposite sides of the mesh");
895  RNA_def_property_update(prop, 0, "rna_cloth_update");
897 
898  prop = RNA_def_property(srna, "internal_spring_normal_check", PROP_BOOLEAN, PROP_NONE);
902  "Check Internal Spring Normals",
903  "Require the points the internal springs connect to have opposite "
904  "normal directions");
905  RNA_def_property_editable_func(prop, "rna_ClothSettings_internal_editable");
906  RNA_def_property_update(prop, 0, "rna_cloth_update");
908 
909  prop = RNA_def_property(srna, "internal_spring_max_length", PROP_FLOAT, PROP_NONE);
910  RNA_def_property_float_sdna(prop, NULL, "internal_spring_max_length");
911  RNA_def_property_range(prop, 0.0f, 1000.0f);
913  prop,
914  "Internal Spring Max Length",
915  "The maximum length an internal spring can have during creation. If the distance between "
916  "internal points is greater than this, no internal spring will be created between these "
917  "points. "
918  "A length of zero means that there is no length limit");
919  RNA_def_property_editable_func(prop, "rna_ClothSettings_internal_editable");
920  RNA_def_property_update(prop, 0, "rna_cloth_update");
922 
923  prop = RNA_def_property(srna, "internal_spring_max_diversion", PROP_FLOAT, PROP_ANGLE);
924  RNA_def_property_float_sdna(prop, NULL, "internal_spring_max_diversion");
925  RNA_def_property_range(prop, 0.0f, M_PI_4);
927  "Internal Spring Max Diversion",
928  "How much the rays used to connect the internal points can diverge "
929  "from the vertex normal");
930  RNA_def_property_editable_func(prop, "rna_ClothSettings_internal_editable");
931  RNA_def_property_update(prop, 0, "rna_cloth_update");
933 
934  prop = RNA_def_property(srna, "internal_tension_stiffness", PROP_FLOAT, PROP_NONE);
935  RNA_def_property_float_sdna(prop, NULL, "internal_tension");
936  RNA_def_property_range(prop, 0.0f, 10000.0f);
937  RNA_def_property_float_funcs(prop, NULL, "rna_ClothSettings_internal_tension_set", NULL);
938  RNA_def_property_ui_text(prop, "Tension Stiffness", "How much the material resists stretching");
939  RNA_def_property_editable_func(prop, "rna_ClothSettings_internal_editable");
940  RNA_def_property_update(prop, 0, "rna_cloth_update");
941 
942  prop = RNA_def_property(srna, "internal_tension_stiffness_max", PROP_FLOAT, PROP_NONE);
943  RNA_def_property_float_sdna(prop, NULL, "max_internal_tension");
944  RNA_def_property_range(prop, 0.0f, 10000.0f);
945  RNA_def_property_float_funcs(prop, NULL, "rna_ClothSettings_max_internal_tension_set", NULL);
946  RNA_def_property_ui_text(prop, "Tension Stiffness Maximum", "Maximum tension stiffness value");
947  RNA_def_property_editable_func(prop, "rna_ClothSettings_internal_editable");
948  RNA_def_property_update(prop, 0, "rna_cloth_update");
949 
950  prop = RNA_def_property(srna, "internal_compression_stiffness", PROP_FLOAT, PROP_NONE);
951  RNA_def_property_float_sdna(prop, NULL, "internal_compression");
952  RNA_def_property_range(prop, 0.0f, 10000.0f);
953  RNA_def_property_float_funcs(prop, NULL, "rna_ClothSettings_internal_compression_set", NULL);
955  prop, "Compression Stiffness", "How much the material resists compression");
956  RNA_def_property_editable_func(prop, "rna_ClothSettings_internal_editable");
957  RNA_def_property_update(prop, 0, "rna_cloth_update");
958 
959  prop = RNA_def_property(srna, "internal_compression_stiffness_max", PROP_FLOAT, PROP_NONE);
960  RNA_def_property_float_sdna(prop, NULL, "max_internal_compression");
961  RNA_def_property_range(prop, 0.0f, 10000.0f);
962  RNA_def_property_float_funcs(prop, NULL, "rna_ClothSettings_max_internal_compression_set", NULL);
964  prop, "Compression Stiffness Maximum", "Maximum compression stiffness value");
965  RNA_def_property_editable_func(prop, "rna_ClothSettings_internal_editable");
966  RNA_def_property_update(prop, 0, "rna_cloth_update");
967 
968  prop = RNA_def_property(srna, "vertex_group_intern", PROP_STRING, PROP_NONE);
970  "rna_ClothSettings_internal_vgroup_get",
971  "rna_ClothSettings_internal_vgroup_length",
972  "rna_ClothSettings_internal_vgroup_set");
975  "Internal Springs Vertex Group",
976  "Vertex group for fine control over the internal spring stiffness");
977  RNA_def_property_editable_func(prop, "rna_ClothSettings_internal_editable");
978  RNA_def_property_update(prop, 0, "rna_cloth_update");
979 
980  /* Pressure */
981 
982  prop = RNA_def_property(srna, "use_pressure", PROP_BOOLEAN, PROP_NONE);
984  RNA_def_property_ui_text(prop, "Use Pressure", "Simulate pressure inside a closed cloth mesh");
986  RNA_def_property_update(prop, 0, "rna_cloth_update");
987 
988  prop = RNA_def_property(srna, "use_pressure_volume", PROP_BOOLEAN, PROP_NONE);
991  "Use Custom Volume",
992  "Use the Target Volume parameter as the initial volume, instead "
993  "of calculating it from the mesh itself");
995  RNA_def_property_update(prop, 0, "rna_cloth_update");
996 
997  prop = RNA_def_property(srna, "uniform_pressure_force", PROP_FLOAT, PROP_NONE);
998  RNA_def_property_float_sdna(prop, NULL, "uniform_pressure_force");
999  RNA_def_property_range(prop, -10000.0f, 10000.0f);
1000  RNA_def_property_float_default(prop, 0.0f);
1002  "Pressure",
1003  "The uniform pressure that is constantly applied to the mesh, in units "
1004  "of Pressure Scale. Can be negative");
1005  RNA_def_property_update(prop, 0, "rna_cloth_update");
1006 
1007  prop = RNA_def_property(srna, "target_volume", PROP_FLOAT, PROP_NONE);
1008  RNA_def_property_float_sdna(prop, NULL, "target_volume");
1009  RNA_def_property_range(prop, 0.0f, 10000.0f);
1010  RNA_def_property_float_default(prop, 0.0f);
1012  "Target Volume",
1013  "The mesh volume where the inner/outer pressure will be the same. If "
1014  "set to zero the change in volume will not affect pressure");
1015  RNA_def_property_update(prop, 0, "rna_cloth_update");
1016 
1017  prop = RNA_def_property(srna, "pressure_factor", PROP_FLOAT, PROP_NONE);
1018  RNA_def_property_float_sdna(prop, NULL, "pressure_factor");
1019  RNA_def_property_range(prop, 0.0f, 10000.0f);
1021  "Pressure Scale",
1022  "Ambient pressure (kPa) that balances out between the inside and "
1023  "outside of the object when it has the target volume");
1024  RNA_def_property_update(prop, 0, "rna_cloth_update");
1025 
1026  prop = RNA_def_property(srna, "fluid_density", PROP_FLOAT, PROP_NONE);
1027  RNA_def_property_float_sdna(prop, NULL, "fluid_density");
1028  RNA_def_property_ui_range(prop, -2.0f, 2.0f, 0.05f, 4);
1030  prop,
1031  "Fluid Density",
1032  "Density (kg/l) of the fluid contained inside the object, used to create "
1033  "a hydrostatic pressure gradient simulating the weight of the internal fluid, "
1034  "or buoyancy from the surrounding fluid if negative");
1035  RNA_def_property_update(prop, 0, "rna_cloth_update");
1036 
1037  prop = RNA_def_property(srna, "vertex_group_pressure", PROP_STRING, PROP_NONE);
1039  "rna_ClothSettings_pressure_vgroup_get",
1040  "rna_ClothSettings_pressure_vgroup_length",
1041  "rna_ClothSettings_pressure_vgroup_set");
1044  prop,
1045  "Pressure Vertex Group",
1046  "Vertex Group for where to apply pressure. Zero weight means no "
1047  "pressure while a weight of one means full pressure. Faces with a vertex "
1048  "that has zero weight will be excluded from the volume calculation");
1049  RNA_def_property_update(prop, 0, "rna_cloth_update");
1050 
1051  /* unused */
1052 
1053  /* unused still */
1054 # if 0
1055  prop = RNA_def_property(srna, "effector_force_scale", PROP_FLOAT, PROP_NONE);
1056  RNA_def_property_float_sdna(prop, NULL, "eff_force_scale");
1057  RNA_def_property_range(prop, 0.0f, 100.0f);
1058  RNA_def_property_ui_text(prop, "Effector Force Scale", "");
1059 # endif
1060  /* unused still */
1061 # if 0
1062  prop = RNA_def_property(srna, "effector_wind_scale", PROP_FLOAT, PROP_NONE);
1063  RNA_def_property_float_sdna(prop, NULL, "eff_wind_scale");
1064  RNA_def_property_range(prop, 0.0f, 100.0f);
1065  RNA_def_property_ui_text(prop, "Effector Wind Scale", "");
1066 # endif
1067  /* unused still */
1068 # if 0
1069  prop = RNA_def_property(srna, "tearing", PROP_BOOLEAN, PROP_NONE);
1071  RNA_def_property_ui_text(prop, "Tearing", "");
1072 # endif
1073  /* unused still */
1074 # if 0
1075  prop = RNA_def_property(srna, "max_spring_extensions", PROP_INT, PROP_NONE);
1076  RNA_def_property_int_sdna(prop, NULL, "maxspringlen");
1077  RNA_def_property_range(prop, 1.0, 1000.0);
1079  prop, "Maximum Spring Extension", "Maximum extension before spring gets cut");
1080 # endif
1081 
1083 }
1084 
1086 {
1087  StructRNA *srna;
1088  PropertyRNA *prop;
1089 
1090  srna = RNA_def_struct(brna, "ClothCollisionSettings", NULL);
1092  srna,
1093  "Cloth Collision Settings",
1094  "Cloth simulation settings for self collision and collision with other objects");
1095  RNA_def_struct_sdna(srna, "ClothCollSettings");
1096  RNA_def_struct_path_func(srna, "rna_ClothCollisionSettings_path");
1097 
1099 
1100  /* general collision */
1101 
1102  prop = RNA_def_property(srna, "use_collision", PROP_BOOLEAN, PROP_NONE);
1104  RNA_def_property_ui_text(prop, "Enable Collision", "Enable collisions with other objects");
1105  RNA_def_property_update(prop, 0, "rna_cloth_dependency_update");
1106 
1107  prop = RNA_def_property(srna, "distance_min", PROP_FLOAT, PROP_DISTANCE);
1108  RNA_def_property_float_sdna(prop, NULL, "epsilon");
1109  RNA_def_property_range(prop, 0.001f, 1.0f);
1111  prop,
1112  "Minimum Distance",
1113  "Minimum distance between collision objects before collision response takes effect");
1114  RNA_def_property_update(prop, 0, "rna_cloth_update");
1115 
1116  prop = RNA_def_property(srna, "friction", PROP_FLOAT, PROP_NONE);
1117  RNA_def_property_range(prop, 0.0f, 80.0f);
1119  prop, "Friction", "Friction force if a collision happened (higher = less movement)");
1120  RNA_def_property_update(prop, 0, "rna_cloth_update");
1121 
1122  prop = RNA_def_property(srna, "damping", PROP_FLOAT, PROP_FACTOR);
1123  RNA_def_property_float_sdna(prop, NULL, "damping");
1124  RNA_def_property_range(prop, 0.0f, 1.0f);
1125  RNA_def_property_float_default(prop, 1.0f);
1126  RNA_def_property_ui_text(prop, "Restitution", "Amount of velocity lost on collision");
1127  RNA_def_property_update(prop, 0, "rna_cloth_update");
1128 
1129  prop = RNA_def_property(srna, "collision_quality", PROP_INT, PROP_NONE);
1130  RNA_def_property_int_sdna(prop, NULL, "loop_count");
1131  RNA_def_property_range(prop, 1, SHRT_MAX);
1132  RNA_def_property_ui_range(prop, 1, 20, 1, -1);
1134  prop,
1135  "Collision Quality",
1136  "How many collision iterations should be done. (higher is better quality but slower)");
1137  RNA_def_property_update(prop, 0, "rna_cloth_update");
1138 
1139  prop = RNA_def_property(srna, "impulse_clamp", PROP_FLOAT, PROP_NONE);
1140  RNA_def_property_float_sdna(prop, NULL, "clamp");
1141  RNA_def_property_range(prop, 0.0f, 100.0f);
1143  prop,
1144  "Impulse Clamping",
1145  "Clamp collision impulses to avoid instability (0.0 to disable clamping)");
1146  RNA_def_property_update(prop, 0, "rna_cloth_update");
1147 
1148  /* self collision */
1149 
1150  prop = RNA_def_property(srna, "use_self_collision", PROP_BOOLEAN, PROP_NONE);
1152  RNA_def_property_ui_text(prop, "Enable Self Collision", "Enable self collisions");
1153  RNA_def_property_update(prop, 0, "rna_cloth_update");
1154 
1155  prop = RNA_def_property(srna, "self_distance_min", PROP_FLOAT, PROP_DISTANCE);
1156  RNA_def_property_float_sdna(prop, NULL, "selfepsilon");
1157  RNA_def_property_range(prop, 0.001f, 0.1f);
1159  prop,
1160  "Self Minimum Distance",
1161  "Minimum distance between cloth faces before collision response takes effect");
1162  RNA_def_property_update(prop, 0, "rna_cloth_update");
1163 
1164  prop = RNA_def_property(srna, "self_friction", PROP_FLOAT, PROP_NONE);
1165  RNA_def_property_range(prop, 0.0f, 80.0f);
1166  RNA_def_property_ui_text(prop, "Self Friction", "Friction with self contact");
1167  RNA_def_property_update(prop, 0, "rna_cloth_update");
1168 
1169  prop = RNA_def_property(srna, "collection", PROP_POINTER, PROP_NONE);
1170  RNA_def_property_pointer_sdna(prop, NULL, "group");
1172  RNA_def_property_ui_text(prop, "Collision Collection", "Limit colliders to this Collection");
1173  RNA_def_property_update(prop, 0, "rna_cloth_dependency_update");
1174 
1175  prop = RNA_def_property(srna, "vertex_group_self_collisions", PROP_STRING, PROP_NONE);
1177  "rna_CollSettings_selfcol_vgroup_get",
1178  "rna_CollSettings_selfcol_vgroup_length",
1179  "rna_CollSettings_selfcol_vgroup_set");
1182  prop,
1183  "Selfcollision Vertex Group",
1184  "Triangles with all vertices in this group are not used during self collisions");
1185  RNA_def_property_update(prop, 0, "rna_cloth_update");
1186 
1187  prop = RNA_def_property(srna, "vertex_group_object_collisions", PROP_STRING, PROP_NONE);
1189  "rna_CollSettings_objcol_vgroup_get",
1190  "rna_CollSettings_objcol_vgroup_length",
1191  "rna_CollSettings_objcol_vgroup_set");
1194  prop,
1195  "Collision Vertex Group",
1196  "Triangles with all vertices in this group are not used during object collisions");
1197  RNA_def_property_update(prop, 0, "rna_cloth_update");
1198 
1199  prop = RNA_def_property(srna, "self_impulse_clamp", PROP_FLOAT, PROP_NONE);
1200  RNA_def_property_float_sdna(prop, NULL, "self_clamp");
1201  RNA_def_property_range(prop, 0.0f, 100.0f);
1203  prop,
1204  "Impulse Clamping",
1205  "Clamp collision impulses to avoid instability (0.0 to disable clamping)");
1206  RNA_def_property_update(prop, 0, "rna_cloth_update");
1207 
1209 }
1210 
1212 {
1216 }
1217 
1218 #endif
void cloth_free_modifier(struct ClothModifierData *clmd)
Definition: cloth.c:421
struct ModifierData * BKE_modifiers_findby_type(const struct Object *ob, ModifierType type)
#define M_PI_4
Definition: BLI_math_base.h:26
size_t size_t char * BLI_sprintfN(const char *__restrict format,...) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(1) ATTR_MALLOC ATTR_PRINTF_FORMAT(1
size_t size_t char size_t BLI_str_escape(char *__restrict dst, const char *__restrict src, size_t dst_maxncpy) ATTR_NONNULL()
Definition: string.c:250
#define UNUSED(x)
void DEG_id_tag_update(struct ID *id, int flag)
void DEG_relations_tag_update(struct Main *bmain)
@ ID_RECALC_GEOMETRY
Definition: DNA_ID.h:791
@ CLOTH_BENDING_LINEAR
@ CLOTH_BENDING_ANGULAR
@ CLOTH_COLLSETTINGS_FLAG_ENABLED
@ CLOTH_COLLSETTINGS_FLAG_SELF
@ CLOTH_SIMSETTINGS_FLAG_DYNAMIC_BASEMESH
@ CLOTH_SIMSETTINGS_FLAG_INTERNAL_SPRINGS_NORMAL
@ CLOTH_SIMSETTINGS_FLAG_PRESSURE_VOL
@ CLOTH_SIMSETTINGS_FLAG_SEW
@ CLOTH_SIMSETTINGS_FLAG_PRESSURE
@ CLOTH_SIMSETTINGS_FLAG_TEARING
@ CLOTH_SIMSETTINGS_FLAG_INTERNAL_SPRINGS
@ eModifierType_Cloth
Object is a sort of wrapper for general info.
@ PROP_FLOAT
Definition: RNA_types.h:61
@ PROP_BOOLEAN
Definition: RNA_types.h:59
@ PROP_ENUM
Definition: RNA_types.h:63
@ PROP_INT
Definition: RNA_types.h:60
@ PROP_STRING
Definition: RNA_types.h:62
@ PROP_POINTER
Definition: RNA_types.h:64
@ PROP_UNIT_MASS
Definition: RNA_types.h:74
@ PROPOVERRIDE_OVERRIDABLE_LIBRARY
Definition: RNA_types.h:312
@ PROP_ANIMATABLE
Definition: RNA_types.h:202
@ PROP_EDITABLE
Definition: RNA_types.h:189
@ PROP_ENUM_FLAG
Definition: RNA_types.h:266
@ PROP_DISTANCE
Definition: RNA_types.h:149
@ PROP_ACCELERATION
Definition: RNA_types.h:157
@ PROP_ANGLE
Definition: RNA_types.h:145
@ PROP_NONE
Definition: RNA_types.h:126
@ PROP_FACTOR
Definition: RNA_types.h:144
@ PROP_UNSIGNED
Definition: RNA_types.h:142
@ SIM_SOLVER_SUCCESS
@ SIM_SOLVER_INVALID_INPUT
@ SIM_SOLVER_NUMERICAL_ISSUE
@ SIM_SOLVER_NO_CONVERGENCE
#define ND_MODIFIER
Definition: WM_types.h:411
#define NC_OBJECT
Definition: WM_types.h:329
Scene scene
static void rna_def_cloth_collision_settings(BlenderRNA *brna)
Definition: rna_cloth.c:1085
void RNA_def_cloth(BlenderRNA *brna)
Definition: rna_cloth.c:1211
static void rna_def_cloth_sim_settings(BlenderRNA *brna)
Definition: rna_cloth.c:553
static void rna_def_cloth_solver_result(BlenderRNA *brna)
Definition: rna_cloth.c:483
void RNA_def_property_pointer_sdna(PropertyRNA *prop, const char *structname, const char *propname)
Definition: rna_define.c:2740
void RNA_define_lib_overridable(const bool make_overridable)
Definition: rna_define.c:742
void RNA_def_struct_path_func(StructRNA *srna, const char *path)
Definition: rna_define.c:1193
void RNA_def_property_boolean_sdna(PropertyRNA *prop, const char *structname, const char *propname, int64_t bit)
Definition: rna_define.c:2236
void RNA_def_property_string_funcs(PropertyRNA *prop, const char *get, const char *length, const char *set)
Definition: rna_define.c:3285
void RNA_def_property_float_default(PropertyRNA *prop, float value)
Definition: rna_define.c:2022
void RNA_def_property_float_funcs(PropertyRNA *prop, const char *get, const char *set, const char *range)
Definition: rna_define.c:3126
void RNA_define_verify_sdna(bool verify)
Definition: rna_define.c:737
void RNA_def_property_ui_text(PropertyRNA *prop, const char *name, const char *description)
Definition: rna_define.c:1645
void RNA_def_struct_ui_text(StructRNA *srna, const char *name, const char *description)
Definition: rna_define.c:1237
void RNA_def_property_enum_items(PropertyRNA *prop, const EnumPropertyItem *item)
Definition: rna_define.c:1872
void RNA_def_struct_sdna(StructRNA *srna, const char *structname)
Definition: rna_define.c:1048
void RNA_def_property_array(PropertyRNA *prop, int length)
Definition: rna_define.c:1539
void RNA_def_property_range(PropertyRNA *prop, double min, double max)
Definition: rna_define.c:1737
void RNA_def_property_struct_type(PropertyRNA *prop, const char *type)
Definition: rna_define.c:1772
void RNA_def_property_update(PropertyRNA *prop, int noteflag, const char *func)
Definition: rna_define.c:2900
void RNA_def_property_editable_func(PropertyRNA *prop, const char *editable)
Definition: rna_define.c:2855
PropertyRNA * RNA_def_property(StructOrFunctionRNA *cont_, const char *identifier, int type, int subtype)
Definition: rna_define.c:1257
void RNA_def_property_clear_flag(PropertyRNA *prop, PropertyFlag flag)
Definition: rna_define.c:1495
void RNA_def_property_pointer_funcs(PropertyRNA *prop, const char *get, const char *set, const char *type_fn, const char *poll)
Definition: rna_define.c:3385
StructRNA * RNA_def_struct(BlenderRNA *brna, const char *identifier, const char *from)
Definition: rna_define.c:1028
void RNA_def_property_enum_sdna(PropertyRNA *prop, const char *structname, const char *propname)
Definition: rna_define.c:2601
void RNA_def_property_flag(PropertyRNA *prop, PropertyFlag flag)
Definition: rna_define.c:1490
void RNA_def_property_override_clear_flag(PropertyRNA *prop, PropertyOverrideFlag flag)
Definition: rna_define.c:1508
void RNA_def_property_float_sdna(PropertyRNA *prop, const char *structname, const char *propname)
Definition: rna_define.c:2493
void RNA_def_property_ui_range(PropertyRNA *prop, double min, double max, double step, int precision)
Definition: rna_define.c:1664
void RNA_def_property_int_sdna(PropertyRNA *prop, const char *structname, const char *propname)
Definition: rna_define.c:2343
int rna_object_shapekey_index_set(struct ID *id, PointerRNA value, int current)
void rna_object_vgroup_name_index_set(struct PointerRNA *ptr, const char *value, short *index)
void rna_object_vgroup_name_index_get(struct PointerRNA *ptr, char *value, int index)
PointerRNA rna_object_shapekey_index_get(struct ID *id, int value)
int rna_object_vgroup_name_index_length(struct PointerRNA *ptr, int index)
float max_internal_compression
Definition: BKE_main.h:121
void * data
void * data
Definition: RNA_types.h:38
struct ID * owner_id
Definition: RNA_types.h:36
void WM_main_add_notifier(unsigned int type, void *reference)
PointerRNA * ptr
Definition: wm_files.c:3480