[Bf-blender-cvs] [76dfe5f0b43] fracture_modifier: crash fix for FM objects being copied after connect

Martin Felke noreply at git.blender.org
Sun Feb 18 02:32:04 CET 2018


Commit: 76dfe5f0b43d36f70855e097645256c040e15cbb
Author: Martin Felke
Date:   Sun Feb 18 02:31:37 2018 +0100
Branches: fracture_modifier
https://developer.blender.org/rB76dfe5f0b43d36f70855e097645256c040e15cbb

crash fix for FM objects being copied after connect

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

M	source/blender/modifiers/intern/MOD_fracture.c

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

diff --git a/source/blender/modifiers/intern/MOD_fracture.c b/source/blender/modifiers/intern/MOD_fracture.c
index 5ccd254a9ea..47de23851e5 100644
--- a/source/blender/modifiers/intern/MOD_fracture.c
+++ b/source/blender/modifiers/intern/MOD_fracture.c
@@ -2820,7 +2820,7 @@ static int prepareConstraintSearch(FractureModifierData *rmd, MeshIsland ***mesh
 				{
 					float imat[4][4];
 					FractureModifierData *fmdi = (FractureModifierData *)modifiers_findByType(go->ob, eModifierType_Fracture);
-					if (fmdi) {
+					if (fmdi && fmdi->visible_mesh_cached) {
 						int v = fmdi->visible_mesh_cached->getNumVerts(fmdi->visible_mesh_cached);
 						int x = 0;
 
@@ -2840,28 +2840,32 @@ static int prepareConstraintSearch(FractureModifierData *rmd, MeshIsland ***mesh
 				}
 			}
 		}
-		else {
+		else if (rmd && rmd->visible_mesh_cached) {
 			totvert = rmd->visible_mesh_cached->getNumVerts(rmd->visible_mesh_cached);
 			mvert = rmd->visible_mesh_cached->getVertArray(rmd->visible_mesh_cached);
 		}
 
-		*combined_tree = BLI_kdtree_new(totvert);
-		for (i = 0, mv = mvert; i < totvert; i++, mv++) {
-			float co[3];
-			if (rmd->dm_group && rmd->use_constraint_group)
-			{
-				copy_v3_v3(co, mv->co);
-			}
-			else {
-				mul_v3_m4v3(co, ob->obmat, mv->co);
+		if (totvert > 0)
+		{
+
+			*combined_tree = BLI_kdtree_new(totvert);
+			for (i = 0, mv = mvert; i < totvert; i++, mv++) {
+				float co[3];
+				if (rmd->dm_group && rmd->use_constraint_group)
+				{
+					copy_v3_v3(co, mv->co);
+				}
+				else {
+					mul_v3_m4v3(co, ob->obmat, mv->co);
+				}
+
+				BLI_kdtree_insert(*combined_tree, i, co);
 			}
 
-			BLI_kdtree_insert(*combined_tree, i, co);
+			BLI_kdtree_balance(*combined_tree);
+			ret = totvert;
+			*mverts = mvert;
 		}
-
-		BLI_kdtree_balance(*combined_tree);
-		ret = totvert;
-		*mverts = mvert;
 	}
 
 	return ret;
@@ -2917,7 +2921,7 @@ static void create_constraints(FractureModifierData *rmd, Object *ob)
 
 	MEM_freeN(mesh_islands);
 
-	if (rmd->dm_group && rmd->use_constraint_group)
+	if (rmd->dm_group && rmd->use_constraint_group && mvert)
 	{	//was copied from modifiers... so remove now
 		MEM_freeN(mvert);
 	}



More information about the Bf-blender-cvs mailing list