[Bf-blender-cvs] [66ffb88] fracture_modifier: fix for loading inner vertex groups and set min weight for passive vertexgroups to 0.01, just keeping it > 0 did not yield correct results when passive vertexgroups were used

Martin Felke noreply at git.blender.org
Sun Feb 28 10:25:04 CET 2016


Commit: 66ffb880bc4af32ae600e882ed4d01472987bdf3
Author: Martin Felke
Date:   Sun Feb 28 10:24:37 2016 +0100
Branches: fracture_modifier
https://developer.blender.org/rB66ffb880bc4af32ae600e882ed4d01472987bdf3

fix for loading inner vertex groups and set min weight for passive vertexgroups to 0.01, just keeping it > 0 did not yield correct results when passive vertexgroups were used

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

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

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

diff --git a/source/blender/blenkernel/intern/fracture_util.c b/source/blender/blenkernel/intern/fracture_util.c
index 12561e9..8867644 100644
--- a/source/blender/blenkernel/intern/fracture_util.c
+++ b/source/blender/blenkernel/intern/fracture_util.c
@@ -153,9 +153,9 @@ static void do_unwrap(MPoly *mp, MVert *mvert, MLoop* mloop, int i, MLoopUV **ml
 	angle = BLI_convexhull_aabb_fit_points_2d((const float (*)[2])uv, mp->totloop);
 
 	if (angle != 0.0f) {
-		float mat[2][2];
-		angle_to_mat2(mat, angle);
-		uv_transform((float (*)[2])uv, mp->totloop, mat);
+		float matt[2][2];
+		angle_to_mat2(matt, angle);
+		uv_transform((float (*)[2])uv, mp->totloop, matt);
 	}
 
 	/* prepare box packing... one poly is a box */
@@ -528,7 +528,7 @@ static bool do_check_watertight(DerivedMesh **output_dm, BMesh** bm, DerivedMesh
 	return do_return;
 }
 
-static void do_set_inner_material(Shard **other, float mat[4][4], DerivedMesh* left_dm, short inner_material_index)
+static void do_set_inner_material(Shard **other, float mat[4][4], DerivedMesh* left_dm, short inner_material_index, Shard* s)
 {
 	MPoly *mpoly, *mp;
 	int totpoly, i = 0;
@@ -543,6 +543,8 @@ static void do_set_inner_material(Shard **other, float mat[4][4], DerivedMesh* l
 				mp->mat_nr = inner_material_index;
 			}
 			mp->flag |= ME_FACE_SEL;
+			//set flag on shard too to have it available on load
+			s->mpoly[i].flag |= ME_FACE_SEL;
 		}
 	}
 }
@@ -566,7 +568,7 @@ Shard *BKE_fracture_shard_boolean(Object *obj, DerivedMesh *dm_parent, Shard *ch
 
 	unwrap_shard_dm(left_dm, uv_layer);
 
-	do_set_inner_material(other, mat, left_dm, inner_material_index);
+	do_set_inner_material(other, mat, left_dm, inner_material_index, child);
 
 	right_dm = dm_parent;
 	output_dm = NewBooleanDerivedMesh(right_dm, obj, left_dm, obj, 1); /*1 == intersection, 3 == difference*/
diff --git a/source/blender/blenkernel/intern/rigidbody.c b/source/blender/blenkernel/intern/rigidbody.c
index 935688b..eb0c2df 100644
--- a/source/blender/blenkernel/intern/rigidbody.c
+++ b/source/blender/blenkernel/intern/rigidbody.c
@@ -2296,7 +2296,7 @@ RigidBodyOb *BKE_rigidbody_create_shard(Scene *scene, Object *ob, Object *target
 	{
 		/* regular FM case */
 		rbo = BKE_rigidbody_copy_object(ob);
-		rbo->type = mi->ground_weight > 0.0f ? RBO_TYPE_PASSIVE : RBO_TYPE_ACTIVE;
+		rbo->type = mi->ground_weight > 0.01f ? RBO_TYPE_PASSIVE : RBO_TYPE_ACTIVE;
 	}
 
 	/* set initial transform */
diff --git a/source/blender/modifiers/intern/MOD_fracture.c b/source/blender/modifiers/intern/MOD_fracture.c
index 006085c..89812d1 100644
--- a/source/blender/modifiers/intern/MOD_fracture.c
+++ b/source/blender/modifiers/intern/MOD_fracture.c
@@ -1693,7 +1693,7 @@ static void do_rigidbody(FractureModifierData *fmd, MeshIsland* mi, Object* ob,
 
 static short do_vert_index_map(FractureModifierData *fmd, MeshIsland *mi)
 {
-	short rb_type = mi->ground_weight > 0.0f ? RBO_TYPE_PASSIVE : RBO_TYPE_ACTIVE;
+	short rb_type = mi->ground_weight > 0.01f ? RBO_TYPE_PASSIVE : RBO_TYPE_ACTIVE;
 
 	if (fmd->vert_index_map && fmd->dm_group && fmd->cluster_count == 0 && mi->vertex_indices)
 	{
@@ -2639,7 +2639,7 @@ static DerivedMesh *createCache(FractureModifierData *fmd, Object *ob, DerivedMe
 
 		/*disable for dm_group, cannot paint onto this mesh at all */
 		if (mi->rigidbody != NULL && fmd->dm_group == NULL) {
-			mi->rigidbody->type = mi->ground_weight > 0.0f ? RBO_TYPE_PASSIVE : RBO_TYPE_ACTIVE;
+			mi->rigidbody->type = mi->ground_weight > 0.01f ? RBO_TYPE_PASSIVE : RBO_TYPE_ACTIVE;
 		}
 
 		/* use fallback over inner material*/
@@ -3342,10 +3342,10 @@ static void do_post_island_creation(FractureModifierData *fmd, Object *ob, Deriv
 		 * although this might not be directly visible due to complex logic */
 
 		MDeformVert* dvert = NULL;
-		if (fmd->visible_mesh_cached)
+		if (fmd->visible_mesh_cached) {
 			dvert = fmd->visible_mesh_cached->getVertDataArray(fmd->visible_mesh_cached, CD_MDEFORMVERT);
-		if ((dvert != NULL) && (dvert->dw == NULL))
 			fill_vgroup(fmd, fmd->visible_mesh_cached, dvert, ob);
+		}
 	}
 
 	if (fmd->refresh_images && fmd->visible_mesh_cached) {




More information about the Bf-blender-cvs mailing list