[Bf-blender-cvs] [fdb18c9] fracture_modifier: can activate constrained objects too, new setting: cluster solver iterations override, attempt to show only cracks between clusters during activation
Martin Felke
noreply at git.blender.org
Wed Nov 12 13:14:11 CET 2014
Commit: fdb18c9d6461dddabf16729ce442554c75328e7f
Author: Martin Felke
Date: Wed Nov 12 13:14:00 2014 +0100
Branches: fracture_modifier
https://developer.blender.org/rBfdb18c9d6461dddabf16729ce442554c75328e7f
can activate constrained objects too, new setting: cluster solver iterations override, attempt to show only cracks between clusters during activation
===================================================================
M release/scripts/startup/bl_ui/properties_physics_fracture.py
M source/blender/blenkernel/intern/rigidbody.c
M source/blender/makesdna/DNA_modifier_types.h
M source/blender/makesrna/intern/rna_modifier.c
M source/blender/modifiers/intern/MOD_fracture.c
===================================================================
diff --git a/release/scripts/startup/bl_ui/properties_physics_fracture.py b/release/scripts/startup/bl_ui/properties_physics_fracture.py
index f43e368..e142927 100644
--- a/release/scripts/startup/bl_ui/properties_physics_fracture.py
+++ b/release/scripts/startup/bl_ui/properties_physics_fracture.py
@@ -141,7 +141,9 @@ class PHYSICS_PT_fracture_simulation(PhysicButtonsPanel, Panel):
row.prop(md, "breaking_distance", text="Distance")
row.prop(md, "breaking_distance_weighted")
- box.prop(md, "solver_iterations_override")
+ col = box.column(align=True)
+ col.prop(md, "solver_iterations_override")
+ col.prop(md, "cluster_solver_iterations_override")
box.prop(md, "use_mass_dependent_thresholds")
box.label("Threshold Vertex Group:")
box.prop_search(md, "thresh_vertex_group", ob, "vertex_groups", text = "")
diff --git a/source/blender/blenkernel/intern/rigidbody.c b/source/blender/blenkernel/intern/rigidbody.c
index 64cf013..cbf4273 100644
--- a/source/blender/blenkernel/intern/rigidbody.c
+++ b/source/blender/blenkernel/intern/rigidbody.c
@@ -1695,7 +1695,7 @@ static int filterCallback(void* world, void* island1, void* island2, void *blend
fmd1 = (FractureModifierData*)modifiers_findByType(ob1, eModifierType_Fracture);
valid = valid && (fmd1 != NULL);
valid = valid && (ob1->rigidbody_object->flag & RBO_FLAG_USE_KINEMATIC_DEACTIVATION);
- valid = valid && (ob2->rigidbody_object->flag & RBO_FLAG_USE_KINEMATIC_DEACTIVATION);
+ //valid = valid && (ob2->rigidbody_object->flag & RBO_FLAG_USE_KINEMATIC_DEACTIVATION);
valid2 = valid2 && (fmd1 != NULL);
valid2 = valid2 && (fmd1->use_constraints == false);
@@ -1737,7 +1737,7 @@ static int filterCallback(void* world, void* island1, void* island2, void *blend
fmd2 = (FractureModifierData*)modifiers_findByType(ob2, eModifierType_Fracture);
valid = valid && (fmd2 != NULL);
valid = valid && (ob2->rigidbody_object->flag & RBO_FLAG_USE_KINEMATIC_DEACTIVATION);
- valid = valid && (ob1->rigidbody_object->flag & RBO_FLAG_USE_KINEMATIC_DEACTIVATION);
+ //valid = valid && (ob1->rigidbody_object->flag & RBO_FLAG_USE_KINEMATIC_DEACTIVATION);
valid2 = valid2 && (fmd2 != NULL);
valid2 = valid2 && (fmd2->use_constraints == false);
@@ -2715,7 +2715,12 @@ static void rigidbody_update_simulation(Scene *scene, RigidBodyWorld *rbw, bool
iterations = rbw->num_solver_iterations;
}
else {
- iterations = rmd->solver_iterations_override;
+ if ((rbsc->mi1->particle_index != -1) && (rbsc->mi1->particle_index == rbsc->mi2->particle_index)) {
+ iterations = rmd->cluster_solver_iterations_override;
+ }
+ else {
+ iterations = rmd->solver_iterations_override;
+ }
}
if (iterations > 0) {
diff --git a/source/blender/makesdna/DNA_modifier_types.h b/source/blender/makesdna/DNA_modifier_types.h
index 7bbe12d..bd50271 100644
--- a/source/blender/makesdna/DNA_modifier_types.h
+++ b/source/blender/makesdna/DNA_modifier_types.h
@@ -1451,6 +1451,7 @@ typedef struct FractureModifierData {
int constraint_limit;
int solver_iterations_override;
+ int cluster_solver_iterations_override;
int breaking_percentage;
int splinter_axis;
@@ -1487,7 +1488,7 @@ typedef struct FractureModifierData {
/* internal values */
float max_vol;
- //char pad[4];
+ char pad[4];
} FractureModifierData;
#endif /* __DNA_MODIFIER_TYPES_H__ */
diff --git a/source/blender/makesrna/intern/rna_modifier.c b/source/blender/makesrna/intern/rna_modifier.c
index c196d97..2cb3ad2 100644
--- a/source/blender/makesrna/intern/rna_modifier.c
+++ b/source/blender/makesrna/intern/rna_modifier.c
@@ -713,6 +713,13 @@ static void rna_RigidBodyModifier_solver_iterations_override_set(PointerRNA *ptr
rmd->refresh_constraints = true;
}
+static void rna_RigidBodyModifier_cluster_solver_iterations_override_set(PointerRNA *ptr, float value)
+{
+ FractureModifierData *rmd = (FractureModifierData*)ptr->data;
+ rmd->cluster_solver_iterations_override = value;
+ rmd->refresh_constraints = true;
+}
+
static void rna_RigidBodyModifier_autohide_dist_set(PointerRNA *ptr, float value)
{
FractureModifierData *rmd = (FractureModifierData*)ptr->data;
@@ -4017,6 +4024,13 @@ static void rna_def_modifier_fracture(BlenderRNA *brna)
RNA_def_property_range(prop, 1.0f, 1000.0f);
RNA_def_property_ui_text(prop, "Splinter length", "Length of splinters");
RNA_def_property_update(prop, 0, "rna_Modifier_update");
+
+ prop = RNA_def_property(srna, "cluster_solver_iterations_override", PROP_INT, PROP_NONE);
+ RNA_def_property_int_sdna(prop, NULL, "cluster_solver_iterations_override");
+ RNA_def_property_range(prop, 0, INT_MAX);
+ RNA_def_property_int_funcs(prop, NULL, "rna_RigidBodyModifier_cluster_solver_iterations_override_set", NULL);
+ RNA_def_property_ui_text(prop, "Cluster Solver Iterations Override", "Override the world constraint solver iteration value for INSIDE clusters with this value, 0 means no override");
+ RNA_def_property_update(prop, 0, "rna_Modifier_update");
}
void RNA_def_modifier(BlenderRNA *brna)
diff --git a/source/blender/modifiers/intern/MOD_fracture.c b/source/blender/modifiers/intern/MOD_fracture.c
index c1379f6d..097b3ae 100644
--- a/source/blender/modifiers/intern/MOD_fracture.c
+++ b/source/blender/modifiers/intern/MOD_fracture.c
@@ -109,6 +109,7 @@ static void initData(ModifierData *md)
fmd->cluster_breaking_threshold = 1000.0f;
fmd->solver_iterations_override = 0;
+ fmd->cluster_solver_iterations_override = 0;
fmd->shards_to_islands = false;
fmd->execute_threaded = false;
fmd->nor_tree = NULL;
@@ -1042,9 +1043,11 @@ static void copyData(ModifierData *md, ModifierData *target)
trmd->extra_group = rmd->extra_group;
/* sub object group XXX Do we keep this ?*/
- /* trmd->dm_group = rmd->dm_group;*/
+ trmd->dm_group = rmd->dm_group;
trmd->use_particle_birth_coordinates = rmd->use_particle_birth_coordinates;
+ trmd->splinter_length = rmd->splinter_length;
+ trmd->cluster_solver_iterations_override = rmd->cluster_solver_iterations_override;
}
/* mi->bb, its for volume fraction calculation.... */
More information about the Bf-blender-cvs
mailing list