[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