[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [52934] trunk/blender/source/blender/ editors/transform/transform.c: edge slide: skip creating BMBVHTree when its not used.

Campbell Barton ideasman42 at gmail.com
Wed Dec 12 17:32:06 CET 2012


Revision: 52934
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=52934
Author:   campbellbarton
Date:     2012-12-12 16:32:05 +0000 (Wed, 12 Dec 2012)
Log Message:
-----------
edge slide: skip creating BMBVHTree when its not used.

Modified Paths:
--------------
    trunk/blender/source/blender/editors/transform/transform.c

Modified: trunk/blender/source/blender/editors/transform/transform.c
===================================================================
--- trunk/blender/source/blender/editors/transform/transform.c	2012-12-12 15:41:15 UTC (rev 52933)
+++ trunk/blender/source/blender/editors/transform/transform.c	2012-12-12 16:32:05 UTC (rev 52934)
@@ -4903,7 +4903,7 @@
 	BMEdge *e, *e1;
 	BMVert *v, *v2, *first;
 	TransDataSlideVert *sv_array;
-	BMBVHTree *btree = BMBVH_NewBVH(em, BMBVH_RESPECT_HIDDEN, NULL, NULL);
+	BMBVHTree *btree;
 	SmallHash table;
 	SlideData *sld = MEM_callocN(sizeof(*sld), "sld");
 	View3D *v3d = NULL;
@@ -4915,6 +4915,7 @@
 	float vec[3], vec2[3] /*, lastvec[3], size, dis=0.0, z */ /* UNUSED */;
 	float dir[3], maxdist, (*loop_dir)[3], *loop_maxdist;
 	int numsel, i, j, loop_nr, l_nr;
+	int use_btree_disp;
 
 	if (t->spacetype == SPACE_VIEW3D) {
 		/* background mode support */
@@ -4922,6 +4923,15 @@
 		rv3d = t->ar ? t->ar->regiondata : NULL;
 	}
 
+	use_btree_disp = (v3d && t->obedit->dt > OB_WIRE && v3d->drawtype > OB_WIRE);
+
+	if (use_btree_disp) {
+		btree = BMBVH_NewBVH(em, BMBVH_RESPECT_HIDDEN, NULL, NULL);
+	}
+	else {
+		btree = NULL;
+	}
+
 	sld->is_proportional = TRUE;
 	sld->curr_sv_index = 0;
 	sld->flipped_vtx = FALSE;
@@ -4955,7 +4965,8 @@
 
 			if (numsel == 0 || numsel > 2) {
 				MEM_freeN(sld);
-				BMBVH_FreeBVH(btree);
+				if (btree)
+					BMBVH_FreeBVH(btree);
 				return 0; /* invalid edge selection */
 			}
 		}
@@ -4965,7 +4976,8 @@
 		if (BM_elem_flag_test(e, BM_ELEM_SELECT)) {
 			if (!BM_edge_is_manifold(e)) {
 				MEM_freeN(sld);
-				BMBVH_FreeBVH(btree);
+				if (btree)
+					BMBVH_FreeBVH(btree);
 				return 0; /* can only handle exactly 2 faces around each edge */
 			}
 		}
@@ -4985,7 +4997,8 @@
 
 	if (!j) {
 		MEM_freeN(sld);
-		BMBVH_FreeBVH(btree);
+		if (btree)
+			BMBVH_FreeBVH(btree);
 		return 0;
 	}
 
@@ -5140,9 +5153,7 @@
 						continue;
 
 					/* This test is only relevant if object is not wire-drawn! See [#32068]. */
-					if (v3d && t->obedit->dt > OB_WIRE && v3d->drawtype > OB_WIRE &&
-					    !BMBVH_EdgeVisible(btree, e2, ar, v3d, t->obedit))
-					{
+					if (use_btree_disp && !BMBVH_EdgeVisible(btree, e2, ar, v3d, t->obedit)) {
 						continue;
 					}
 
@@ -5244,10 +5255,12 @@
 	t->customData = sld;
 	
 	BLI_smallhash_release(&table);
-	BMBVH_FreeBVH(btree);
+	if (btree) {
+		BMBVH_FreeBVH(btree);
+	}
 	MEM_freeN(loop_dir);
 	MEM_freeN(loop_maxdist);
-	
+
 	return 1;
 }
 




More information about the Bf-blender-cvs mailing list