[Bf-blender-cvs] [fafb8aa] master: Object Snap: make normal argument optional

Campbell Barton noreply at git.blender.org
Fri Jul 15 11:43:57 CEST 2016


Commit: fafb8aaaf112a0124b9afa7565af54cb23149c2b
Author: Campbell Barton
Date:   Fri Jul 15 19:46:59 2016 +1000
Branches: master
https://developer.blender.org/rBfafb8aaaf112a0124b9afa7565af54cb23149c2b

Object Snap: make normal argument optional

Often its not needed, setting correctly takes some extra calculation - so allow for it to be left unset.

===================================================================

M	source/blender/editors/transform/transform_snap_object.c

===================================================================

diff --git a/source/blender/editors/transform/transform_snap_object.c b/source/blender/editors/transform/transform_snap_object.c
index 1af20cf..1dea95c 100644
--- a/source/blender/editors/transform/transform_snap_object.c
+++ b/source/blender/editors/transform/transform_snap_object.c
@@ -346,12 +346,12 @@ static void get_edge_verts(
 	(a)[2] * (b)[2]
 
 static bool test_vert_dist(
-        const float vco[3], const float vno[3], const float ray_co[3], const float ray_dir[3],
+        const float vco[3], const float ray_co[3], const float ray_dir[3],
         const float ray_depth_range[2], const float scale[3],
         /* read/write args */
         float *ray_depth, float *dist_to_ray_sq,
         /* return args */
-        float r_co[3], float r_no[3])
+        float r_co[3])
 {
 	const float vco_sc[3]   = {V3_MUL_ELEM(vco, scale)};
 	const float origin_sc[3]    = {V3_MUL_ELEM(ray_co, scale)};
@@ -369,10 +369,6 @@ static bool test_vert_dist(
 
 		copy_v3_v3(r_co, vco);
 
-		if (vno) {
-			copy_v3_v3(r_no, vno);
-		}
-
 		*ray_depth = depth;
 		return true;
 	}
@@ -385,7 +381,7 @@ static bool test_edge_dist(
         /* read/write args */
         float *ray_depth, float *dist_to_ray_sq,
         /* return args */
-        float r_co[3], float r_no[3])
+        float r_co[3])
 {
 	const float v1_sc[3]    = {V3_MUL_ELEM(v1, scale)};
 	const float v2_sc[3]    = {V3_MUL_ELEM(v2, scale)};
@@ -408,10 +404,6 @@ static bool test_edge_dist(
 
 		copy_v3_v3(r_co, tmp_co);
 
-		if (r_no) {
-			sub_v3_v3v3(r_no, v1, v2);
-		}
-
 		*ray_depth = depth;
 		return true;
 	}
@@ -1046,9 +1038,9 @@ static void test_vert_depth_cb(
 	const float *co = get_vert_co(data, index);
 
 	if (test_vert_dist(
-	        co, NULL, origin, dir, ndata->depth_range,
+	        co, origin, dir, ndata->depth_range,
 	        scale, ndata->ray_depth, &nearest->dist_sq,
-	        nearest->co, NULL))
+	        nearest->co))
 	{
 		copy_vert_no(data, index, nearest->no);
 		nearest->index = index;
@@ -1068,8 +1060,9 @@ static void test_edge_depth_cb(
 	if (test_edge_dist(
 	        v_pair[0], v_pair[1], origin, dir, ndata->depth_range,
 	        scale, ndata->ray_depth, &nearest->dist_sq,
-	        nearest->co, nearest->no))
+	        nearest->co))
 	{
+		sub_v3_v3v3(nearest->no, v_pair[0], v_pair[1]);
 		nearest->index = index;
 	}
 }
@@ -1290,12 +1283,15 @@ static bool snapDerivedMesh(
 					if (hit.dist <= *ray_depth) {
 						*ray_depth = hit.dist;
 						copy_v3_v3(r_loc, hit.co);
-						copy_v3_v3(r_no, hit.no);
 
 						/* back to worldspace */
 						mul_m4_v3(obmat, r_loc);
-						mul_m3_v3(timat, r_no);
-						normalize_v3(r_no);
+
+						if (r_no) {
+							copy_v3_v3(r_no, hit.no);
+							mul_m3_v3(timat, r_no);
+							normalize_v3(r_no);
+						}
 
 						retval = true;
 
@@ -1612,12 +1608,15 @@ static bool snapEditMesh(
 					if (hit.dist <= *ray_depth) {
 						*ray_depth = hit.dist;
 						copy_v3_v3(r_loc, hit.co);
-						copy_v3_v3(r_no, hit.no);
 
 						/* back to worldspace */
 						mul_m4_v3(obmat, r_loc);
-						mul_m3_v3(timat, r_no);
-						normalize_v3(r_no);
+
+						if (r_no) {
+							copy_v3_v3(r_no, hit.no);
+							mul_m3_v3(timat, r_no);
+							normalize_v3(r_no);
+						}
 
 						retval = true;
 
@@ -2156,11 +2155,6 @@ static bool transform_snap_context_project_view3d_mixed_impl(
 	float ray_depth = BVH_RAYCAST_DIST_MAX;
 	bool is_hit = false;
 
-	float r_no_dummy[3];
-	if (r_no == NULL) {
-		r_no = r_no_dummy;
-	}
-
 	const int  elem_type[3] = {SCE_SNAP_MODE_VERTEX, SCE_SNAP_MODE_EDGE, SCE_SNAP_MODE_FACE};
 
 	BLI_assert(snap_to_flag != 0);




More information about the Bf-blender-cvs mailing list