[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [33233] trunk/blender/source/blender: bugfix [#20768] Project Snap Broken

Campbell Barton ideasman42 at gmail.com
Mon Nov 22 15:16:11 CET 2010


Revision: 33233
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=33233
Author:   campbellbarton
Date:     2010-11-22 15:16:11 +0100 (Mon, 22 Nov 2010)

Log Message:
-----------
bugfix [#20768] Project Snap Broken

Modified Paths:
--------------
    trunk/blender/source/blender/blenkernel/BKE_bvhutils.h
    trunk/blender/source/blender/blenkernel/intern/bvhutils.c
    trunk/blender/source/blender/editors/physics/particle_object.c
    trunk/blender/source/blender/editors/transform/transform_snap.c
    trunk/blender/source/blender/makesrna/intern/rna_object_api.c

Modified: trunk/blender/source/blender/blenkernel/BKE_bvhutils.h
===================================================================
--- trunk/blender/source/blender/blenkernel/BKE_bvhutils.h	2010-11-22 13:43:51 UTC (rev 33232)
+++ trunk/blender/source/blender/blenkernel/BKE_bvhutils.h	2010-11-22 14:16:11 UTC (rev 33233)
@@ -65,6 +65,7 @@
 
 	/* Private data */
 	int cached;
+	void *em_evil;	/* var only for snapping */
 
 } BVHTreeFromMesh;
 

Modified: trunk/blender/source/blender/blenkernel/intern/bvhutils.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/bvhutils.c	2010-11-22 13:43:51 UTC (rev 33232)
+++ trunk/blender/source/blender/blenkernel/intern/bvhutils.c	2010-11-22 14:16:11 UTC (rev 33233)
@@ -36,6 +36,7 @@
 
 #include "BKE_DerivedMesh.h"
 #include "BKE_utildefines.h"
+#include "BLI_editVert.h"
 
 #include "BLI_math.h"
 #include "MEM_guardedalloc.h"
@@ -577,17 +578,35 @@
 			tree = BLI_bvhtree_new(numFaces, epsilon, tree_type, axis);
 			if(tree != NULL)
 			{
-				for(i = 0; i < numFaces; i++)
-				{
-					float co[4][3];
-					VECCOPY(co[0], vert[ face[i].v1 ].co);
-					VECCOPY(co[1], vert[ face[i].v2 ].co);
-					VECCOPY(co[2], vert[ face[i].v3 ].co);
-					if(face[i].v4)
-						VECCOPY(co[3], vert[ face[i].v4 ].co);
-			
-					BLI_bvhtree_insert(tree, i, co[0], face[i].v4 ? 4 : 3);
+				/* XXX, for snap only, em & dm are assumed to be aligned, since dm is the em's cage */
+				EditMesh *em= data->em_evil;
+				if(em) {
+					EditFace *efa= em->faces.first;
+					for(i = 0; i < numFaces; i++, efa= efa->next) {
+						if(!(efa->f & 1) && efa->h==0 && !((efa->v1->f&1)+(efa->v2->f&1)+(efa->v3->f&1)+(efa->v4?efa->v4->f&1:0))) {
+							float co[4][3];
+							VECCOPY(co[0], vert[ face[i].v1 ].co);
+							VECCOPY(co[1], vert[ face[i].v2 ].co);
+							VECCOPY(co[2], vert[ face[i].v3 ].co);
+							if(face[i].v4)
+								VECCOPY(co[3], vert[ face[i].v4 ].co);
+					
+							BLI_bvhtree_insert(tree, i, co[0], face[i].v4 ? 4 : 3);
+						}
+					}
 				}
+				else {
+					for(i = 0; i < numFaces; i++) {
+						float co[4][3];
+						VECCOPY(co[0], vert[ face[i].v1 ].co);
+						VECCOPY(co[1], vert[ face[i].v2 ].co);
+						VECCOPY(co[2], vert[ face[i].v3 ].co);
+						if(face[i].v4)
+							VECCOPY(co[3], vert[ face[i].v4 ].co);
+				
+						BLI_bvhtree_insert(tree, i, co[0], face[i].v4 ? 4 : 3);
+					}
+				}
 				BLI_bvhtree_balance(tree);
 
 				//Save on cache for later use

Modified: trunk/blender/source/blender/editors/physics/particle_object.c
===================================================================
--- trunk/blender/source/blender/editors/physics/particle_object.c	2010-11-22 13:43:51 UTC (rev 33232)
+++ trunk/blender/source/blender/editors/physics/particle_object.c	2010-11-22 14:16:11 UTC (rev 33233)
@@ -623,7 +623,7 @@
 	PTCacheEditPoint *point;
 	PTCacheEditKey *ekey = NULL;
 	HairKey *key;
-	BVHTreeFromMesh bvhtree;
+	BVHTreeFromMesh bvhtree= {0};
 	BVHTreeNearest nearest;
 	MFace *mface;
 	DerivedMesh *dm = NULL;
@@ -646,8 +646,6 @@
 
 	numverts = dm->getNumVerts (dm);
 
-	memset( &bvhtree, 0, sizeof(bvhtree) );
-
 	/* convert to global coordinates */
 	for (i=0; i<numverts; i++)
 		mul_m4_v3(ob->obmat, CDDM_get_vert(dm, i)->co);

Modified: trunk/blender/source/blender/editors/transform/transform_snap.c
===================================================================
--- trunk/blender/source/blender/editors/transform/transform_snap.c	2010-11-22 13:43:51 UTC (rev 33232)
+++ trunk/blender/source/blender/editors/transform/transform_snap.c	2010-11-22 14:16:11 UTC (rev 33233)
@@ -374,7 +374,8 @@
 		if (t->tsnap.applySnap != NULL && // A snapping function actually exist
 			(obedit != NULL && ELEM3(obedit->type, OB_MESH, OB_ARMATURE, OB_CURVE)) ) // Temporary limited to edit mode meshes, armature, curves
 		{
-			if ((t->flag & T_PROP_EDIT) || t->tsnap.project) /* also exclude edit for project, for now */
+			/* editmode meshes now supported */
+			if ((obedit->type != OB_MESH) && ((t->flag & T_PROP_EDIT) || t->tsnap.project)) /* also exclude edit for project, for now */
 			{
 				t->tsnap.modeSelect = SNAP_NOT_OBEDIT;
 			}
@@ -1266,7 +1267,7 @@
 	int retval = 0;
 	int totvert = dm->getNumVerts(dm);
 	int totface = dm->getNumFaces(dm);
-	
+
 	if (totvert > 0) {
 		float imat[4][4];
 		float timat[3][3]; /* transpose inverse matrix for normals */
@@ -1306,6 +1307,7 @@
 					/* local scale in normal direction */
 					float local_scale = len_v3(ray_normal_local);
 
+					treeData.em_evil= em;
 					bvhtree_from_mesh_faces(&treeData, dm, 0.0f, 4, 6);
 
 					hit.index = -1;

Modified: trunk/blender/source/blender/makesrna/intern/rna_object_api.c
===================================================================
--- trunk/blender/source/blender/makesrna/intern/rna_object_api.c	2010-11-22 13:43:51 UTC (rev 33232)
+++ trunk/blender/source/blender/makesrna/intern/rna_object_api.c	2010-11-22 14:16:11 UTC (rev 33233)
@@ -343,7 +343,7 @@
 
 void rna_Object_ray_cast(Object *ob, ReportList *reports, float ray_start[3], float ray_end[3], float r_location[3], float r_normal[3], int *index)
 {
-	BVHTreeFromMesh treeData;
+	BVHTreeFromMesh treeData= {0};
 	
 	if(ob->derivedFinal==NULL) {
 		BKE_reportf(reports, RPT_ERROR, "object \"%s\" has no mesh data to be used for ray casting.", ob->id.name+2);





More information about the Bf-blender-cvs mailing list