diff options
author | Ken Hughes <khughes@pacific.edu> | 2007-10-15 00:58:57 +0400 |
---|---|---|
committer | Ken Hughes <khughes@pacific.edu> | 2007-10-15 00:58:57 +0400 |
commit | ff5fd2eb38871c23d4bcdc0ea6c646101b89546d (patch) | |
tree | a302944d717dc4a0515387669c12daa04230d640 /source/blender | |
parent | 34200718db9f46ea127c14f29580df60ff95b987 (diff) |
Tools
-----
Bugfix #7493: boolean difference operator was being applied in the wrong
order (difference modifier worked correctly).
Diffstat (limited to 'source/blender')
-rw-r--r-- | source/blender/blenkernel/intern/modifier.c | 2 | ||||
-rw-r--r-- | source/blender/src/booleanops.c | 16 |
2 files changed, 9 insertions, 9 deletions
diff --git a/source/blender/blenkernel/intern/modifier.c b/source/blender/blenkernel/intern/modifier.c index bb5d4039336..98ba46d49d5 100644 --- a/source/blender/blenkernel/intern/modifier.c +++ b/source/blender/blenkernel/intern/modifier.c @@ -4907,7 +4907,7 @@ static DerivedMesh *booleanModifier_applyModifier( /* we do a quick sanity check */ if(((Mesh *)ob->data)->totface > 3 && bmd->object && ((Mesh *)bmd->object->data)->totface > 3) { - DerivedMesh *result = NewBooleanDerivedMesh(ob, bmd->object, + DerivedMesh *result = NewBooleanDerivedMesh(bmd->object, ob, 1 + bmd->operation); /* if new mesh returned, return it; otherwise there was diff --git a/source/blender/src/booleanops.c b/source/blender/src/booleanops.c index 2640a19ebf1..04214beeb90 100644 --- a/source/blender/src/booleanops.c +++ b/source/blender/src/booleanops.c @@ -449,8 +449,8 @@ DerivedMesh *NewBooleanDerivedMesh_intern( float map_mat[4][4]; DerivedMesh *dm = NULL; - Mesh *me1 = get_mesh(ob); - Mesh *me2 = get_mesh(ob_select); + Mesh *me1 = get_mesh(ob_select); + Mesh *me2 = get_mesh(ob); if (me1 == NULL || me2 == NULL) return 0; if (!me1->totface || !me2->totface) return 0; @@ -458,9 +458,9 @@ DerivedMesh *NewBooleanDerivedMesh_intern( // we map the final object back into ob's local coordinate space. For this // we need to compute the inverse transform from global to ob (inv_mat), // and the transform from ob to ob_select for use in interpolation (map_mat) - Mat4Invert(inv_mat, ob_select->obmat); - Mat4MulMat4(map_mat, ob->obmat, inv_mat); Mat4Invert(inv_mat, ob->obmat); + Mat4MulMat4(map_mat, ob_select->obmat, inv_mat); + Mat4Invert(inv_mat, ob_select->obmat); { // interface with the boolean module: @@ -484,8 +484,8 @@ DerivedMesh *NewBooleanDerivedMesh_intern( default : op_type = e_csg_intersection; } - BuildMeshDescriptors(ob, 0, &fd_1, &vd_1); - BuildMeshDescriptors(ob_select, me1->totface, &fd_2, &vd_2); + BuildMeshDescriptors(ob_select, 0, &fd_1, &vd_1); + BuildMeshDescriptors(ob, me1->totface, &fd_2, &vd_2); bool_op = CSG_NewBooleanFunction(); @@ -500,7 +500,7 @@ DerivedMesh *NewBooleanDerivedMesh_intern( // iterate through results of operation and insert // into new object dm = ConvertCSGDescriptorsToDerivedMesh( - &fd_o, &vd_o, inv_mat, map_mat, mat, totmat, ob, ob_select); + &fd_o, &vd_o, inv_mat, map_mat, mat, totmat, ob_select, ob); // free up the memory CSG_FreeVertexDescriptor(&vd_o); @@ -540,7 +540,7 @@ int NewBooleanMesh(Base *base, Base *base_select, int int_op_type) } /* create a new blender mesh object - using 'base' as a template */ - ob_new= AddNewBlenderMesh(base); + ob_new= AddNewBlenderMesh(base_select); me_new= ob_new->data; DM_to_mesh(dm, me_new); |