[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