[Bf-blender-cvs] [4b560f14d7b] fracture_modifier: further fixes for external mode

Martin Felke noreply at git.blender.org
Tue Jun 13 22:37:58 CEST 2017


Commit: 4b560f14d7b3418a54aa964e5d3cd3338cebb2c7
Author: Martin Felke
Date:   Tue Jun 13 22:37:36 2017 +0200
Branches: fracture_modifier
https://developer.blender.org/rB4b560f14d7b3418a54aa964e5d3cd3338cebb2c7

further fixes for external mode

===================================================================

M	source/blender/blenkernel/intern/fracture.c
M	source/blender/blenkernel/intern/rigidbody.c
M	source/blender/modifiers/intern/MOD_fracture.c

===================================================================

diff --git a/source/blender/blenkernel/intern/fracture.c b/source/blender/blenkernel/intern/fracture.c
index 876405c2889..9120554ec5b 100644
--- a/source/blender/blenkernel/intern/fracture.c
+++ b/source/blender/blenkernel/intern/fracture.c
@@ -3357,22 +3357,28 @@ RigidBodyShardCon *BKE_fracture_mesh_islands_connect(FractureModifierData *fmd,
 
 	/* store constraints per meshisland too, to allow breaking percentage */
 	if (mi1->participating_constraints == NULL) {
-		mi1->participating_constraints = MEM_callocN(sizeof(RigidBodyShardCon *), "part_constraints_mi1");
-		mi1->participating_constraint_count = 0;
+		mi1->participating_constraints = MEM_mallocN(sizeof(RigidBodyShardCon *), "part_constraints_mi1");
+		mi1->participating_constraints[0] = rbsc;
+		mi1->participating_constraint_count = 1;
+	}
+	else
+	{
+		mi1->participating_constraints = MEM_reallocN(mi1->participating_constraints, sizeof(RigidBodyShardCon *) * (mi1->participating_constraint_count + 1));
+		mi1->participating_constraints[mi1->participating_constraint_count] = rbsc;
+		mi1->participating_constraint_count++;
 	}
-
-	mi1->participating_constraints = MEM_reallocN(mi1->participating_constraints, sizeof(RigidBodyShardCon *) * (mi1->participating_constraint_count + 1));
-	mi1->participating_constraints[mi1->participating_constraint_count] = rbsc;
-	mi1->participating_constraint_count++;
 
 	if (mi2->participating_constraints == NULL) {
-		mi2->participating_constraints = MEM_callocN(sizeof(RigidBodyShardCon *), "part_constraints_mi2");
-		mi2->participating_constraint_count = 0;
+		mi2->participating_constraints = MEM_mallocN(sizeof(RigidBodyShardCon *), "part_constraints_mi2");
+		mi2->participating_constraints[0] = rbsc;
+		mi2->participating_constraint_count = 1;
+	}
+	else
+	{
+		mi2->participating_constraints = MEM_reallocN(mi2->participating_constraints, sizeof(RigidBodyShardCon *) * (mi2->participating_constraint_count + 1));
+		mi2->participating_constraints[mi2->participating_constraint_count] = rbsc;
+		mi2->participating_constraint_count++;
 	}
-
-	mi2->participating_constraints = MEM_reallocN(mi2->participating_constraints, sizeof(RigidBodyShardCon *) * (mi2->participating_constraint_count + 1));
-	mi2->participating_constraints[mi2->participating_constraint_count] = rbsc;
-	mi2->participating_constraint_count++;
 
 	return rbsc;
 }
diff --git a/source/blender/blenkernel/intern/rigidbody.c b/source/blender/blenkernel/intern/rigidbody.c
index 67fe6021a69..a0949e3c1d7 100644
--- a/source/blender/blenkernel/intern/rigidbody.c
+++ b/source/blender/blenkernel/intern/rigidbody.c
@@ -2986,7 +2986,7 @@ RigidBodyShardCon *BKE_rigidbody_create_shard_constraint(Scene *scene, short typ
 	rbc->flag &= ~RBC_FLAG_DISABLE_COLLISIONS;
 	rbc->flag |= RBC_FLAG_USE_BREAKING;
 
-	rbc->breaking_threshold = 1.0f; /* no good default here, just use 10 for now */
+	rbc->breaking_threshold = 10.0f; /* no good default here, just use 10 for now */
 	rbc->num_solver_iterations = 10; /* 10 is Bullet default */
 
 	rbc->limit_lin_x_lower = -1.0f;
diff --git a/source/blender/modifiers/intern/MOD_fracture.c b/source/blender/modifiers/intern/MOD_fracture.c
index 61b5bf1847b..bd44b3fa737 100644
--- a/source/blender/modifiers/intern/MOD_fracture.c
+++ b/source/blender/modifiers/intern/MOD_fracture.c
@@ -5062,16 +5062,33 @@ static DerivedMesh *applyModifier(ModifierData *md, Object *ob,
 		if (!fmd->visible_mesh_cached)
 		{
 			BKE_fracture_update_visual_mesh(fmd, ob, true);
+			fmd->refresh_autohide = true;
+
+			if (fmd->face_pairs != NULL) {
+				BLI_ghash_free(fmd->face_pairs, NULL, NULL);
+				fmd->face_pairs = NULL;
+			}
 		}
 
 		if (fmd->visible_mesh_cached) {
 
 			if (fmd->refresh_autohide) {
-				do_refresh_autohide(fmd, ob);
 
 				if (fmd->autohide_dist > 0) {
-					do_refresh_automerge(fmd);
+
+					if (!fmd->face_pairs)
+					{
+						fmd->face_pairs = BLI_ghash_int_new("face_pairs");
+					}
+
+					make_face_pairs(fmd, fmd->visible_mesh_cached, ob);
+
+
+					free_shared_verts(&fmd->shared_verts);
+					make_shared_vert_groups(fmd, fmd->visible_mesh_cached, &fmd->shared_verts);
 				}
+
+				fmd->refresh_autohide = false;
 			}
 
 			do_reset_automerge(fmd);




More information about the Bf-blender-cvs mailing list