[Bf-blender-cvs] [10d2c86] fracture_modifier: fix for constraint calculation, transform of meshisland centroid was calculated incorrectly

Martin Felke noreply at git.blender.org
Wed Dec 7 22:54:22 CET 2016


Commit: 10d2c861dd0b51ecd890207e8482f789d24c1125
Author: Martin Felke
Date:   Wed Dec 7 22:53:59 2016 +0100
Branches: fracture_modifier
https://developer.blender.org/rB10d2c861dd0b51ecd890207e8482f789d24c1125

fix for constraint calculation, transform of meshisland centroid was calculated incorrectly

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

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 be09e78..73c3184 100644
--- a/source/blender/modifiers/intern/MOD_fracture.c
+++ b/source/blender/modifiers/intern/MOD_fracture.c
@@ -2560,7 +2560,7 @@ static void connect_meshislands(FractureModifierData *fmd, MeshIsland *mi1, Mesh
 	}
 }
 
-static void search_tree_based(FractureModifierData *rmd, MeshIsland *mi, MeshIsland **meshIslands, KDTree **combined_tree, float co[3], float max_mass)
+static void search_tree_based(FractureModifierData *rmd, MeshIsland *mi, MeshIsland **meshIslands, KDTree **combined_tree, float co[3], Object *ob)
 {
 	int r = 0, limit = 0, i = 0;
 	KDTreeNearest *n3 = NULL;
@@ -2590,10 +2590,10 @@ static void search_tree_based(FractureModifierData *rmd, MeshIsland *mi, MeshIsl
 #endif
 
 	if (rmd->constraint_target == MOD_FRACTURE_CENTROID) {
-		mul_v3_m4v3(obj_centr, rmd->origmat, mi->centroid);
+		mul_v3_m4v3(obj_centr, ob->obmat, mi->centroid);
 	}
 	else if (rmd->constraint_target == MOD_FRACTURE_VERTEX){
-		mul_v3_m4v3(obj_centr, rmd->origmat, co);
+		mul_v3_m4v3(obj_centr, ob->obmat, co);
 	}
 
 	r = BLI_kdtree_range_search(*combined_tree, obj_centr, &n3, dist);
@@ -2645,7 +2645,7 @@ static void search_tree_based(FractureModifierData *rmd, MeshIsland *mi, MeshIsl
 		n3 = NULL;
 	}
 }
-static int prepareConstraintSearch(FractureModifierData *rmd, MeshIsland ***mesh_islands, KDTree **combined_tree)
+static int prepareConstraintSearch(FractureModifierData *rmd, MeshIsland ***mesh_islands, KDTree **combined_tree, Object *ob)
 {
 	MeshIsland *mi;
 	int i = 0, ret = 0;
@@ -2662,7 +2662,7 @@ static int prepareConstraintSearch(FractureModifierData *rmd, MeshIsland ***mesh
 		*combined_tree = BLI_kdtree_new(islands);
 		for (i = 0; i < islands; i++) {
 			float obj_centr[3];
-			mul_v3_m4v3(obj_centr, rmd->origmat, (*mesh_islands)[i]->centroid);
+			mul_v3_m4v3(obj_centr, ob->obmat, (*mesh_islands)[i]->centroid);
 			BLI_kdtree_insert(*combined_tree, i, obj_centr);
 		}
 
@@ -2678,7 +2678,7 @@ static int prepareConstraintSearch(FractureModifierData *rmd, MeshIsland ***mesh
 		*combined_tree = BLI_kdtree_new(totvert);
 		for (i = 0, mv = mvert; i < totvert; i++, mv++) {
 			float co[3];
-			mul_v3_m4v3(co, rmd->origmat, mv->co);
+			mul_v3_m4v3(co, ob->obmat, mv->co);
 			BLI_kdtree_insert(*combined_tree, i, co);
 		}
 
@@ -2689,7 +2689,7 @@ static int prepareConstraintSearch(FractureModifierData *rmd, MeshIsland ***mesh
 	return ret;
 }
 
-static void create_constraints(FractureModifierData *rmd)
+static void create_constraints(FractureModifierData *rmd, Object *ob)
 {
 	KDTree *coord_tree = NULL;
 	MeshIsland **mesh_islands = MEM_mallocN(sizeof(MeshIsland *), "mesh_islands");
@@ -2715,18 +2715,18 @@ static void create_constraints(FractureModifierData *rmd)
 	}
 
 
-	count = prepareConstraintSearch(rmd, &mesh_islands, &coord_tree);
+	count = prepareConstraintSearch(rmd, &mesh_islands, &coord_tree, ob);
 
 	for (i = 0; i < count; i++) {
 		if (rmd->constraint_target == MOD_FRACTURE_CENTROID) {
-			search_tree_based(rmd, mesh_islands[i], mesh_islands, &coord_tree, NULL, max_mass);
+			search_tree_based(rmd, mesh_islands[i], mesh_islands, &coord_tree, NULL, ob);
 		}
 		else if (rmd->constraint_target == MOD_FRACTURE_VERTEX) {
 			MVert mv;
 			MeshIsland *mii = NULL;
 			rmd->visible_mesh_cached->getVert(rmd->visible_mesh_cached, i, &mv);
 			mii = BLI_ghash_lookup(rmd->vertex_island_map, SET_INT_IN_POINTER(i));
-			search_tree_based(rmd, mii, mesh_islands, &coord_tree, mv.co, max_mass);
+			search_tree_based(rmd, mii, mesh_islands, &coord_tree, mv.co, ob);
 		}
 	}
 
@@ -3703,7 +3703,7 @@ static void do_refresh_constraints(FractureModifierData *fmd, Object *ob)
 	start = PIL_check_seconds_timer();
 
 	if (fmd->use_constraints) {
-		create_constraints(fmd); /* check for actually creating the constraints inside*/
+		create_constraints(fmd, ob); /* check for actually creating the constraints inside*/
 	}
 	fmd->refresh_constraints = false;




More information about the Bf-blender-cvs mailing list