Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMartin Felke <martin.felke@googlemail.com>2018-12-02 23:52:32 +0300
committerMartin Felke <martin.felke@googlemail.com>2018-12-02 23:52:32 +0300
commit7a18c905bf104ab6eb5e7fd483cb305e25e00898 (patch)
treedc12a3a34fb477390741a5c68474f93c4ba82728
parent8b322524c9eb7c7d6f2026d0878bfe056f88aed7 (diff)
transform fix for external centroid-based constraints
-rw-r--r--source/blender/modifiers/intern/MOD_fracture.c37
1 files changed, 25 insertions, 12 deletions
diff --git a/source/blender/modifiers/intern/MOD_fracture.c b/source/blender/modifiers/intern/MOD_fracture.c
index f1e5eda74ae..b741a87e06d 100644
--- a/source/blender/modifiers/intern/MOD_fracture.c
+++ b/source/blender/modifiers/intern/MOD_fracture.c
@@ -2675,17 +2675,12 @@ static void search_tree_based(FractureModifierData *rmd, MeshIsland *mi, MeshIsl
}
#endif
- if (rmd->constraint_target == MOD_FRACTURE_CENTROID) {
- mul_v3_m4v3(obj_centr, ob->obmat, mi->centroid);
+ if (!(rmd->dm_group && rmd->use_constraint_group))
+ {
+ mul_v3_m4v3(obj_centr, ob->obmat, co);
}
- else if (rmd->constraint_target == MOD_FRACTURE_VERTEX){
- if (!(rmd->dm_group && rmd->use_constraint_group))
- {
- mul_v3_m4v3(obj_centr, ob->obmat, co);
- }
- else {
- copy_v3_v3(obj_centr, co);
- }
+ else {
+ copy_v3_v3(obj_centr, co);
}
r = BLI_kdtree_range_search(*combined_tree, obj_centr, &n3, dist);
@@ -2802,7 +2797,15 @@ 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, ob->obmat, (*mesh_islands)[i]->centroid);
+
+ if (rmd->dm_group && rmd->use_constraint_group) {
+ GroupObject *go = BLI_findlink(&rmd->dm_group->gobject, (*mesh_islands)[i]->object_index);
+ mul_v3_m4v3(obj_centr, go->ob->obmat, (*mesh_islands)[i]->centroid);
+ }
+ else {
+ mul_v3_m4v3(obj_centr, ob->obmat, (*mesh_islands)[i]->centroid);
+ }
+
BLI_kdtree_insert(*combined_tree, i, obj_centr);
}
@@ -2909,7 +2912,17 @@ static void create_constraints(FractureModifierData *rmd, Object *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, ob);
+ float co[3];
+
+ if (rmd->dm_group && rmd->use_constraint_group) {
+ GroupObject *go = BLI_findlink(&rmd->dm_group->gobject, mesh_islands[i]->object_index);
+ mul_v3_m4v3(co, go->ob->obmat, mesh_islands[i]->centroid);
+ }
+ else {
+ copy_v3_v3(co, mesh_islands[i]->centroid);
+ }
+
+ search_tree_based(rmd, mesh_islands[i], mesh_islands, &coord_tree, co, ob);
}
else if (rmd->constraint_target == MOD_FRACTURE_VERTEX) {
//MVert mv;