[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