Commit: 2421696f6077d101cb79e0ea8d03e51d2b5e1ab9
Author: Martin Felke
Date:   Sat Jun 6 15:50:36 2015 +0200
Branches: fracture_modifier
https://developer.blender.org/rB2421696f6077d101cb79e0ea8d03e51d2b5e1ab9

fix : fast bisect algorithms caused misbehavior when refracturing, also removed 
the forced settings (Mesh shape, constraints) with fractal boolean

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

M       source/blender/blenkernel/intern/fracture.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 f46ecb4..06fda92 100644
--- a/source/blender/blenkernel/intern/fracture.c
+++ b/source/blender/blenkernel/intern/fracture.c
@@ -631,6 +631,13 @@ static void do_prepare_cells(FracMesh *fm, cell *cells, 
int expected_shards, int
                copy_v3_v3(*centroid, p->centroid);
        }
 
+       if (algorithm == MOD_FRACTURE_BISECT_FAST ||
+           algorithm == MOD_FRACTURE_BISECT_FAST_FILL ||
+           algorithm == MOD_FRACTURE_BOOLEAN_FRACTAL)
+       {
+               fill_vn_i(deletemap, fm->shard_count, 1);
+       }
+
        if (fm->last_shard_tree)
        {
                if (expected_shards <= fm->last_expected_shards)
@@ -746,6 +753,9 @@ static void parse_cells(cell *cells, int expected_shards, 
ShardID parent_id, Fra
        DerivedMesh *dm_p = NULL;
        Shard **tempshards;
        Shard **tempresults;
+       bool do_tree = (algorithm != MOD_FRACTURE_BISECT_FAST &&
+                                       algorithm != 
MOD_FRACTURE_BISECT_FAST_FILL &&
+                                       algorithm != 
MOD_FRACTURE_BOOLEAN_FRACTAL);
 
        if (p == NULL)
        {
@@ -767,28 +777,36 @@ static void parse_cells(cell *cells, int expected_shards, 
ShardID parent_id, Fra
        if (mode == MOD_FRACTURE_PREFRACTURED)
        {
                //rebuild tree
-               if (!fm->last_shard_tree && (fm->shard_count > 0) &&
-                       mode == MOD_FRACTURE_PREFRACTURED &&
-                       algorithm != MOD_FRACTURE_BISECT_FAST &&
-                       algorithm != MOD_FRACTURE_BISECT_FAST_FILL)
+               if (!fm->last_shard_tree && (fm->shard_count > 0) && mode == 
MOD_FRACTURE_PREFRACTURED)
                {
                        Shard *t;
                        int i = 0;
                        count = BLI_listbase_count(&fm->shard_map);
                        fm->shard_count = count;
-                       fm->last_shard_tree = BLI_kdtree_new(fm->shard_count);
+                       if (do_tree)
+                       {
+                               fm->last_shard_tree = 
BLI_kdtree_new(fm->shard_count);
+                       }
+
                        fm->last_shards = MEM_callocN(sizeof(Shard*) * 
fm->shard_count, "last_shards");
 
                        //fill tree from current shardmap
                        for (t = fm->shard_map.first; t; t = t->next)
                        {
                                t->flag &=~ (SHARD_SKIP | SHARD_DELETE);
-                               BLI_kdtree_insert(fm->last_shard_tree, i, 
t->raw_centroid);
+
+                               if (do_tree)
+                               {
+                                       BLI_kdtree_insert(fm->last_shard_tree, 
i, t->raw_centroid);
+                               }
                                fm->last_shards[i] = t;
                                i++;
                        }
 
-                       BLI_kdtree_balance(fm->last_shard_tree);
+                       if (do_tree)
+                       {
+                               BLI_kdtree_balance(fm->last_shard_tree);
+                       }
                }
        }
        else
diff --git a/source/blender/modifiers/intern/MOD_fracture.c 
b/source/blender/modifiers/intern/MOD_fracture.c
index 810753e..e0ff3b8 100644
--- a/source/blender/modifiers/intern/MOD_fracture.c
+++ b/source/blender/modifiers/intern/MOD_fracture.c
@@ -1506,25 +1506,6 @@ static void do_rigidbody(FractureModifierData *fmd, 
MeshIsland* mi, Object* ob,
        mi->rigidbody->type = rb_type;
        mi->rigidbody->meshisland_index = i;
        BKE_rigidbody_calc_shard_mass(ob, mi, orig_dm);
-
-       if (fmd->frac_algorithm == MOD_FRACTURE_BOOLEAN_FRACTAL)
-       {
-               if (fmd->fracture_mode == MOD_FRACTURE_PREFRACTURED)
-               {
-                       /* cant be kept together in other ways */
-                       fmd->use_constraints = true;
-                       fmd->contact_dist = 2.0f;
-                       fmd->breaking_angle = DEG2RADF(1.0f);
-               }
-
-               /* this most likely will only work with "Mesh" shape*/
-               mi->rigidbody->shape = RB_SHAPE_TRIMESH;
-               mi->rigidbody->margin = 0.0f;
-
-               /* set values on "handle object" as well */
-               ob->rigidbody_object->shape = RB_SHAPE_TRIMESH;
-               ob->rigidbody_object->margin = 0.0f;
-       }
 }
 
 static short do_vert_index_map(FractureModifierData *fmd, MeshIsland *mi)

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to