[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [12259] trunk/blender/source/blender:

Ken Hughes khughes at pacific.edu
Sun Oct 14 22:58:57 CEST 2007


Revision: 12259
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=12259
Author:   khughes
Date:     2007-10-14 22:58:57 +0200 (Sun, 14 Oct 2007)

Log Message:
-----------

Tools
-----
Bugfix #7493:  boolean difference operator was being applied in the wrong
order (difference modifier worked correctly).

Modified Paths:
--------------
    trunk/blender/source/blender/blenkernel/intern/modifier.c
    trunk/blender/source/blender/src/booleanops.c

Modified: trunk/blender/source/blender/blenkernel/intern/modifier.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/modifier.c	2007-10-14 10:23:09 UTC (rev 12258)
+++ trunk/blender/source/blender/blenkernel/intern/modifier.c	2007-10-14 20:58:57 UTC (rev 12259)
@@ -4907,7 +4907,7 @@
 	/* 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

Modified: trunk/blender/source/blender/src/booleanops.c
===================================================================
--- trunk/blender/source/blender/src/booleanops.c	2007-10-14 10:23:09 UTC (rev 12258)
+++ trunk/blender/source/blender/src/booleanops.c	2007-10-14 20:58:57 UTC (rev 12259)
@@ -449,8 +449,8 @@
 	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 @@
 	// 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->obmat);
+	Mat4MulMat4(map_mat, ob_select->obmat, inv_mat);
 	Mat4Invert(inv_mat, ob_select->obmat);
-	Mat4MulMat4(map_mat, ob->obmat, inv_mat);
-	Mat4Invert(inv_mat, ob->obmat);
 
 	{
 		// interface with the boolean module:
@@ -484,8 +484,8 @@
 			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 @@
 			// 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 @@
 	}
 
 	/* 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);





More information about the Bf-blender-cvs mailing list