[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [55747] trunk/blender/source/blender/ editors: use floats for transform snapping distance comparisons

Campbell Barton ideasman42 at gmail.com
Wed Apr 3 09:36:38 CEST 2013


Revision: 55747
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=55747
Author:   campbellbarton
Date:     2013-04-03 07:36:37 +0000 (Wed, 03 Apr 2013)
Log Message:
-----------
use floats for transform snapping distance comparisons

Modified Paths:
--------------
    trunk/blender/source/blender/editors/armature/editarmature_sketch.c
    trunk/blender/source/blender/editors/include/ED_transform.h
    trunk/blender/source/blender/editors/mesh/editmesh_tools.c
    trunk/blender/source/blender/editors/space_view3d/view3d_ruler.c
    trunk/blender/source/blender/editors/transform/transform_snap.c

Modified: trunk/blender/source/blender/editors/armature/editarmature_sketch.c
===================================================================
--- trunk/blender/source/blender/editors/armature/editarmature_sketch.c	2013-04-03 05:16:15 UTC (rev 55746)
+++ trunk/blender/source/blender/editors/armature/editarmature_sketch.c	2013-04-03 07:36:37 UTC (rev 55747)
@@ -626,7 +626,7 @@
 	}
 }
 
-static SK_Point *sk_snapPointStroke(bContext *C, SK_Stroke *stk, int mval[2], int *dist, int *index, int all_pts)
+static SK_Point *sk_snapPointStroke(bContext *C, SK_Stroke *stk, int mval[2], float *r_dist_px, int *index, int all_pts)
 {
 	ARegion *ar = CTX_wm_region(C);
 	SK_Point *pt = NULL;
@@ -641,8 +641,8 @@
 
 				pdist = ABS(pval[0] - mval[0]) + ABS(pval[1] - mval[1]);
 
-				if (pdist < *dist) {
-					*dist = pdist;
+				if (pdist < *r_dist_px) {
+					*r_dist_px = pdist;
 					pt = stk->points + i;
 
 					if (index != NULL) {
@@ -729,13 +729,13 @@
 	if (sketch->over.target == NULL) {
 		SK_Stroke *target;
 		int closest_index = -1;
-		int dist = SNAP_MIN_DISTANCE * 2;
+		float dist_px = SNAP_MIN_DISTANCE * 2;
 
 		for (target = sketch->strokes.first; target; target = target->next) {
 			if (target != stk) {
 				int index;
 
-				SK_Point *spt = sk_snapPointStroke(C, target, dd->mval, &dist, &index, 1);
+				SK_Point *spt = sk_snapPointStroke(C, target, dd->mval, &dist_px, &index, 1);
 
 				if (spt != NULL) {
 					sketch->over.target = target;
@@ -764,10 +764,10 @@
 	}
 	else if (sketch->over.target != NULL) {
 		SK_Point *closest_pt = NULL;
-		int dist = SNAP_MIN_DISTANCE * 2;
+		float dist_px = SNAP_MIN_DISTANCE * 2;
 		int index;
 
-		closest_pt = sk_snapPointStroke(C, sketch->over.target, dd->mval, &dist, &index, 1);
+		closest_pt = sk_snapPointStroke(C, sketch->over.target, dd->mval, &dist_px, &index, 1);
 
 		if (closest_pt != NULL) {
 			if (sk_lastStrokePoint(stk)->type == PT_EXACT) {
@@ -1064,17 +1064,17 @@
 		float no[3];
 		float mval[2];
 		int found = 0;
-		int dist = SNAP_MIN_DISTANCE; // Use a user defined value here
+		float dist_px = SNAP_MIN_DISTANCE; // Use a user defined value here
 
 		/* snap to strokes */
 		// if (ts->snap_mode == SCE_SNAP_MODE_VERTEX) /* snap all the time to strokes */
 		for (snap_stk = sketch->strokes.first; snap_stk; snap_stk = snap_stk->next) {
 			SK_Point *spt = NULL;
 			if (snap_stk == stk) {
-				spt = sk_snapPointStroke(C, snap_stk, dd->mval, &dist, NULL, 0);
+				spt = sk_snapPointStroke(C, snap_stk, dd->mval, &dist_px, NULL, 0);
 			}
 			else {
-				spt = sk_snapPointStroke(C, snap_stk, dd->mval, &dist, NULL, 1);
+				spt = sk_snapPointStroke(C, snap_stk, dd->mval, &dist_px, NULL, 1);
 			}
 
 			if (spt != NULL) {
@@ -1087,7 +1087,7 @@
 		mval[1] = dd->mval[1];
 
 		/* try to snap to closer object */
-		found = snapObjectsContext(C, mval, &dist, vec, no, SNAP_NOT_SELECTED);
+		found = snapObjectsContext(C, mval, &dist_px, vec, no, SNAP_NOT_SELECTED);
 		if (found == 1) {
 			pt->type = dd->type;
 			pt->mode = PT_SNAP;

Modified: trunk/blender/source/blender/editors/include/ED_transform.h
===================================================================
--- trunk/blender/source/blender/editors/include/ED_transform.h	2013-04-03 05:16:15 UTC (rev 55746)
+++ trunk/blender/source/blender/editors/include/ED_transform.h	2013-04-03 07:36:37 UTC (rev 55747)
@@ -179,10 +179,10 @@
 
 bool peelObjectsTransForm(struct TransInfo *t, struct ListBase *depth_peels, const float mval[2], SnapMode mode);
 bool peelObjectsContext(struct bContext *C, struct ListBase *depth_peels, const float mval[2], SnapMode mode);
-bool snapObjectsTransform(struct TransInfo *t, const float mval[2], int *r_dist, float r_loc[3], float r_no[3], SnapMode mode);
-bool snapObjectsContext(struct bContext *C, const float mval[2], int *r_dist, float r_loc[3], float r_no[3], SnapMode mode);
-bool snapNodesTransform(struct TransInfo *t, const int mval[2], int *r_dist, float r_loc[2], char *r_node_border, SnapMode mode);
-bool snapNodesContext(struct bContext *C, const int mval[2], int *r_dist, float r_loc[2], char *r_node_border, SnapMode mode);
+bool snapObjectsTransform(struct TransInfo *t, const float mval[2], float *r_dist_px, float r_loc[3], float r_no[3], SnapMode mode);
+bool snapObjectsContext(struct bContext *C, const float mval[2], float *r_dist_px, float r_loc[3], float r_no[3], SnapMode mode);
+bool snapNodesTransform(struct TransInfo *t, const int mval[2], float *r_dist_px, float r_loc[2], char *r_node_border, SnapMode mode);
+bool snapNodesContext(struct bContext *C, const int mval[2], float *r_dist_px, float r_loc[2], char *r_node_border, SnapMode mode);
 
 #endif
 

Modified: trunk/blender/source/blender/editors/mesh/editmesh_tools.c
===================================================================
--- trunk/blender/source/blender/editors/mesh/editmesh_tools.c	2013-04-03 05:16:15 UTC (rev 55746)
+++ trunk/blender/source/blender/editors/mesh/editmesh_tools.c	2013-04-03 07:36:37 UTC (rev 55747)
@@ -198,9 +198,9 @@
 	BM_ITER_MESH (eve, &iter, em->bm, BM_VERTS_OF_MESH) {
 		if (BM_elem_flag_test(eve, BM_ELEM_SELECT)) {
 			float mval[2], co_proj[3], no_dummy[3];
-			int dist_dummy;
+			float dist_px_dummy;
 			if (ED_view3d_project_float_object(ar, eve->co, mval, V3D_PROJ_TEST_NOP) == V3D_PROJ_RET_OK) {
-				if (snapObjectsContext(C, mval, &dist_dummy, co_proj, no_dummy, SNAP_NOT_OBEDIT)) {
+				if (snapObjectsContext(C, mval, &dist_px_dummy, co_proj, no_dummy, SNAP_NOT_OBEDIT)) {
 					mul_v3_m4v3(eve->co, obedit->imat, co_proj);
 				}
 			}

Modified: trunk/blender/source/blender/editors/space_view3d/view3d_ruler.c
===================================================================
--- trunk/blender/source/blender/editors/space_view3d/view3d_ruler.c	2013-04-03 05:16:15 UTC (rev 55746)
+++ trunk/blender/source/blender/editors/space_view3d/view3d_ruler.c	2013-04-03 07:36:37 UTC (rev 55747)
@@ -65,7 +65,7 @@
                               bool use_vert, bool use_edge, bool use_face)
 {
 	TransInfo t = {0};
-	int dist = 12;  /* snap dist */
+	float dist_px = 12;  /* snap dist */
 	float r_no_dummy[3];
 	bool ret = false;
 	char  backup_snap_mode;
@@ -83,15 +83,15 @@
 	/* try snap edge, then face if it fails */
 	if (use_vert) {
 		t.scene->toolsettings->snap_mode = SCE_SNAP_MODE_VERTEX;
-		ret = snapObjectsTransform(&t, co_ss, &dist, r_co, r_no_dummy, SNAP_ALL);
+		ret = snapObjectsTransform(&t, co_ss, &dist_px, r_co, r_no_dummy, SNAP_ALL);
 	}
 	if (use_edge && (ret == false)) {
 		t.scene->toolsettings->snap_mode = SCE_SNAP_MODE_EDGE;
-		ret = snapObjectsTransform(&t, co_ss, &dist, r_co, r_no_dummy, SNAP_ALL);
+		ret = snapObjectsTransform(&t, co_ss, &dist_px, r_co, r_no_dummy, SNAP_ALL);
 	}
 	if (use_face && (ret == false)) {
 		t.scene->toolsettings->snap_mode = SCE_SNAP_MODE_FACE;
-		ret = snapObjectsTransform(&t, co_ss, &dist, r_co, r_no_dummy, SNAP_ALL);
+		ret = snapObjectsTransform(&t, co_ss, &dist_px, r_co, r_no_dummy, SNAP_ALL);
 	}
 
 	t.scene->toolsettings->snap_mode = backup_snap_mode;

Modified: trunk/blender/source/blender/editors/transform/transform_snap.c
===================================================================
--- trunk/blender/source/blender/editors/transform/transform_snap.c	2013-04-03 05:16:15 UTC (rev 55746)
+++ trunk/blender/source/blender/editors/transform/transform_snap.c	2013-04-03 07:36:37 UTC (rev 55747)
@@ -78,7 +78,8 @@
 
 #include "transform.h"
 
-#define TRANSFORM_DIST_MAX_PX 1000
+#define TRANSFORM_DIST_MAX_PX 1000.0f
+#define TRANSFORM_SNAP_MAX_PX 100.0f
 
 /********************* PROTOTYPES ***********************/
 
@@ -295,8 +296,8 @@
 
 		for (i = 0; i < t->total; i++, td++) {
 			float iloc[3], loc[3], no[3];
-			float mval[2];
-			int dist = TRANSFORM_DIST_MAX_PX;
+			float mval_fl[2];
+			float dist_px = TRANSFORM_DIST_MAX_PX;
 			
 			if (td->flag & TD_NOACTION)
 				break;
@@ -318,8 +319,8 @@
 				copy_v3_v3(iloc, td->ob->obmat[3]);
 			}
 			
-			if (ED_view3d_project_float_global(t->ar, iloc, mval, V3D_PROJ_TEST_NOP) == V3D_PROJ_RET_OK) {
-				if (snapObjectsTransform(t, mval, &dist, loc, no, t->tsnap.modeSelect)) {
+			if (ED_view3d_project_float_global(t->ar, iloc, mval_fl, V3D_PROJ_TEST_NOP) == V3D_PROJ_RET_OK) {
+				if (snapObjectsTransform(t, mval_fl, &dist_px, loc, no, t->tsnap.modeSelect)) {
 //					if (t->flag & (T_EDIT|T_POSE)) {
 //						mul_m4_v3(imat, loc);
 //					}
@@ -603,23 +604,20 @@
 	int status = 0;
 	if (t->tsnap.status & MULTI_POINTS) {
 		TransSnapPoint *p, *closest_p = NULL;
-		int closest_dist = 0;
-		int screen_loc[2];
+		float closest_dist = TRANSFORM_SNAP_MAX_PX;
+		const float mval_fl[2] = {t->mval[0], t->mval[1]};
+		float screen_loc[2];
 
 		for (p = t->tsnap.points.first; p; p = p->next) {
-			int dx, dy;
-			int dist;
+			float dist;
 
-			if (ED_view3d_project_int_global(t->ar, p->co, screen_loc, V3D_PROJ_TEST_NOP) != V3D_PROJ_RET_OK) {
+			if (ED_view3d_project_float_global(t->ar, p->co, screen_loc, V3D_PROJ_TEST_NOP) != V3D_PROJ_RET_OK) {
 				continue;
 			}
 
-			dx = t->mval[0] - screen_loc[0];
-			dy = t->mval[1] - screen_loc[1];
+			dist = len_squared_v2v2(mval_fl, screen_loc);
 
-			dist = dx * dx + dy * dy;
-
-			if (dist < 100 && (closest_p == NULL || closest_dist > dist)) {
+			if (dist < closest_dist) {
 				closest_p = p;
 				closest_dist = dist;
 			}
@@ -819,7 +817,7 @@
 		float no[3];
 		float mval[2];
 		bool found = false;
-		int dist = SNAP_MIN_DISTANCE; // Use a user defined value here
+		float dist_px = SNAP_MIN_DISTANCE; // Use a user defined value here
 		
 		mval[0] = t->mval[0];
 		mval[1] = t->mval[1];
@@ -907,7 +905,7 @@
 			BLI_freelistN(&depth_peels);
 		}
 		else {
-			found = snapObjectsTransform(t, mval, &dist, loc, no, t->tsnap.modeSelect);
+			found = snapObjectsTransform(t, mval, &dist_px, loc, no, t->tsnap.modeSelect);
 		}
 		
 		if (found == true) {
@@ -949,10 +947,10 @@
 	}
 	else if (t->spacetype == SPACE_NODE) {
 		float loc[2];
-		int dist = SNAP_MIN_DISTANCE; // Use a user defined value here
+		float dist_px = SNAP_MIN_DISTANCE; // Use a user defined value here
 		char node_border;
 		
-		if (snapNodesTransform(t, t->mval, &dist, loc, &node_border, t->tsnap.modeSelect)) {
+		if (snapNodesTransform(t, t->mval, &dist_px, loc, &node_border, t->tsnap.modeSelect)) {
 			copy_v2_v2(t->tsnap.snapPoint, loc);
 			t->tsnap.snapNodeBorder = node_border;
 			
@@ -1145,8 +1143,8 @@
 }
 

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list