[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [53770] trunk/blender/source/blender/ editors/transform/transform.c: optimization for calcNonProportionalEdgeSlide(), avoid matrix multiply for each vertex.

Campbell Barton ideasman42 at gmail.com
Sun Jan 13 15:49:08 CET 2013


Revision: 53770
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=53770
Author:   campbellbarton
Date:     2013-01-13 14:49:04 +0000 (Sun, 13 Jan 2013)
Log Message:
-----------
optimization for calcNonProportionalEdgeSlide(), avoid matrix multiply for each vertex.

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	2013-01-13 14:36:50 UTC (rev 53769)
+++ trunk/blender/source/blender/editors/transform/transform.c	2013-01-13 14:49:04 UTC (rev 53770)
@@ -4944,24 +4944,38 @@
 	TransDataEdgeSlideVert *sv = sld->sv;
 
 	if (sld->totsv > 0) {
+		ARegion *ar = t->ar;
+		RegionView3D *rv3d = NULL;
+		float projectMat[4][4];
+
 		int i = 0;
 
-		float v_proj[3];
+		float v_proj[2];
 		float dist = 0;
 		float min_dist = FLT_MAX;
 
+		if (t->spacetype == SPACE_VIEW3D) {
+			/* background mode support */
+			rv3d = t->ar ? t->ar->regiondata : NULL;
+		}
+
+		if (!rv3d) {
+			/* ok, let's try to survive this */
+			unit_m4(projectMat);
+		}
+		else {
+			ED_view3d_ob_project_mat_get(rv3d, t->obedit, projectMat);
+		}
+
 		for (i = 0; i < sld->totsv; i++, sv++) {
 			/* Set length */
 			sv->edge_len = len_v3v3(sv->upvec, sv->downvec);
 
-			mul_v3_m4v3(v_proj, t->obedit->obmat, sv->v->co);
-			/* allow points behind the view [#33643] */
-			if (ED_view3d_project_float_global(t->ar, v_proj, v_proj, V3D_PROJ_TEST_NOP) == V3D_PROJ_RET_OK) {
-				dist = len_squared_v2v2(mval, v_proj);
-				if (dist < min_dist) {
-					min_dist = dist;
-					sld->curr_sv_index = i;
-				}
+			ED_view3d_project_float_v2_m4(ar, sv->v->co, v_proj, projectMat);
+			dist = len_squared_v2v2(mval, v_proj);
+			if (dist < min_dist) {
+				min_dist = dist;
+				sld->curr_sv_index = i;
 			}
 		}
 	}




More information about the Bf-blender-cvs mailing list