[Bf-blender-cvs] [d038f4651e9] blender2.8: Transform: Fix bugs for the latest changes to the snap system.

Germano noreply at git.blender.org
Thu May 17 03:05:45 CEST 2018


Commit: d038f4651e962edddaef057dc5356ac55f87c213
Author: Germano
Date:   Wed May 16 21:32:52 2018 -0300
Branches: blender2.8
https://developer.blender.org/rBd038f4651e962edddaef057dc5356ac55f87c213

Transform: Fix bugs for the latest changes to the snap system.

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

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 287f3957895..5f6fafaeff3 100644
--- a/source/blender/editors/transform/transform_snap_object.c
+++ b/source/blender/editors/transform/transform_snap_object.c
@@ -1184,7 +1184,7 @@ static void cb_walk_leaf_snap_tri(
 
 static bool snapArmature(
         SnapData *snapdata,
-        Object *ob, bArmature *arm, float obmat[4][4],
+        Object *ob, float obmat[4][4], bool use_obedit,
         /* read/write args */
         float *dist_px,
         /* return args */
@@ -1203,16 +1203,18 @@ static bool snapArmature(
 	dist_squared_to_projected_aabb_precalc(
 	        &neasrest_precalc, lpmat, snapdata->win_size, snapdata->mval);
 
-	/* Test BoundBox */
-	BoundBox *bb = BKE_armature_boundbox_get(ob);
-	if (bb) {
-		bool dummy[3];
-		/* In vertex and edges you need to get the pixel distance from ray to BoundBox, see: T46099, T46816 */
-		float bb_dist_px_sq = dist_squared_to_projected_aabb(
-			&neasrest_precalc, bb->vec[0], bb->vec[6], dummy);
-
-		if (bb_dist_px_sq > dist_px_sq) {
-			return retval;
+	if (use_obedit == false) {
+		/* Test BoundBox */
+		BoundBox *bb = BKE_armature_boundbox_get(ob);
+		if (bb) {
+			bool dummy[3];
+			/* In vertex and edges you need to get the pixel distance from ray to BoundBox, see: T46099, T46816 */
+			float bb_dist_px_sq = dist_squared_to_projected_aabb(
+			        &neasrest_precalc, bb->vec[0], bb->vec[6], dummy);
+
+			if (bb_dist_px_sq > dist_px_sq) {
+				return retval;
+			}
 		}
 	}
 
@@ -1224,6 +1226,7 @@ static bool snapArmature(
 
 	bool is_persp = snapdata->view_proj == VIEW_PROJ_PERSP;
 
+	bArmature *arm = ob->data;
 	if (arm->edbo) {
 		for (EditBone *eBone = arm->edbo->first; eBone; eBone = eBone->next) {
 			if (eBone->layer & arm->layer) {
@@ -1319,20 +1322,21 @@ static bool snapCurve(
 	dist_squared_to_projected_aabb_precalc(
 	        &neasrest_precalc, lpmat, snapdata->win_size, snapdata->mval);
 
-	/* Test BoundBox */
-	BoundBox *bb = BKE_curve_boundbox_get(ob);
-	if (bb) {
-		bool dummy[3];
-		/* In vertex and edges you need to get the pixel distance from ray to BoundBox, see: T46099, T46816 */
-		float bb_dist_px_sq = dist_squared_to_projected_aabb(
-		        &neasrest_precalc, bb->vec[0], bb->vec[6], dummy);
-
-		if (bb_dist_px_sq > dist_px_sq) {
-			return retval;
+	if (use_obedit == false) {
+		/* Test BoundBox */
+		BoundBox *bb = BKE_curve_boundbox_get(ob);
+		if (bb) {
+			bool dummy[3];
+			/* In vertex and edges you need to get the pixel distance from ray to BoundBox, see: T46099, T46816 */
+			float bb_dist_px_sq = dist_squared_to_projected_aabb(
+			        &neasrest_precalc, bb->vec[0], bb->vec[6], dummy);
+
+			if (bb_dist_px_sq > dist_px_sq) {
+				return retval;
+			}
 		}
 	}
 
-
 	float tobmat[4][4], clip_planes_local[MAX_CLIPPLANE_LEN][4];
 	transpose_m4_m4(tobmat, obmat);
 	for (int i = snapdata->clip_plane_len; i--;) {
@@ -1343,45 +1347,61 @@ static bool snapCurve(
 
 	for (Nurb *nu = (use_obedit ? cu->editnurb->nurbs.first : cu->nurb.first); nu; nu = nu->next) {
 		for (int u = 0; u < nu->pntsu; u++) {
-			switch (snapdata->snap_to) {
-				case SCE_SNAP_MODE_VERTEX:
-				{
-					if (use_obedit) {
+			if (snapdata->snap_to == SCE_SNAP_MODE_VERTEX) {
+				if (use_obedit) {
+					if (nu->bezt) {
+						/* don't snap to selected (moving) or hidden */
+						if (nu->bezt[u].f2 & SELECT || nu->bezt[u].hide != 0) {
+							break;
+						}
+						retval |= test_projected_vert_dist(
+						        &neasrest_precalc,
+						        clip_planes_local, snapdata->clip_plane_len,
+						        is_persp, nu->bezt[u].vec[1], &dist_px_sq,
+						        r_loc);
+						/* don't snap if handle is selected (moving), or if it is aligning to a moving handle */
+						if (!(nu->bezt[u].f1 & SELECT) &&
+						    !(nu->bezt[u].h1 & HD_ALIGN && nu->bezt[u].f3 & SELECT))
+						{
+						retval |= test_projected_vert_dist(
+						        &neasrest_precalc,
+						        clip_planes_local, snapdata->clip_plane_len,
+						        is_persp, nu->bezt[u].vec[0], &dist_px_sq,
+						        r_loc);
+						}
+						if (!(nu->bezt[u].f3 & SELECT) &&
+						    !(nu->bezt[u].h2 & HD_ALIGN && nu->bezt[u].f1 & SELECT))
+						{
+							retval |= test_projected_vert_dist(
+							        &neasrest_precalc,
+							        clip_planes_local, snapdata->clip_plane_len,
+							        is_persp, nu->bezt[u].vec[2], &dist_px_sq,
+							        r_loc);
+						}
+					}
+					else {
+						/* don't snap to selected (moving) or hidden */
+						if (nu->bp[u].f1 & SELECT || nu->bp[u].hide != 0) {
+							break;
+						}
+						retval |= test_projected_vert_dist(
+						        &neasrest_precalc,
+						        clip_planes_local, snapdata->clip_plane_len,
+						        is_persp, nu->bp[u].vec, &dist_px_sq,
+						        r_loc);
+					}
+				}
+				else {
+					/* curve is not visible outside editmode if nurb length less than two */
+					if (nu->pntsu > 1) {
 						if (nu->bezt) {
-							/* don't snap to selected (moving) or hidden */
-							if (nu->bezt[u].f2 & SELECT || nu->bezt[u].hide != 0) {
-								break;
-							}
 							retval |= test_projected_vert_dist(
 							        &neasrest_precalc,
 							        clip_planes_local, snapdata->clip_plane_len,
 							        is_persp, nu->bezt[u].vec[1], &dist_px_sq,
 							        r_loc);
-							/* don't snap if handle is selected (moving), or if it is aligning to a moving handle */
-							if (!(nu->bezt[u].f1 & SELECT) &&
-							    !(nu->bezt[u].h1 & HD_ALIGN && nu->bezt[u].f3 & SELECT))
-							{
-								retval |= test_projected_vert_dist(
-								        &neasrest_precalc,
-								        clip_planes_local, snapdata->clip_plane_len,
-								        is_persp, nu->bezt[u].vec[0], &dist_px_sq,
-								        r_loc);
-							}
-							if (!(nu->bezt[u].f3 & SELECT) &&
-							    !(nu->bezt[u].h2 & HD_ALIGN && nu->bezt[u].f1 & SELECT))
-							{
-								retval |= test_projected_vert_dist(
-								        &neasrest_precalc,
-								        clip_planes_local, snapdata->clip_plane_len,
-								        is_persp, nu->bezt[u].vec[2], &dist_px_sq,
-								        r_loc);
-							}
 						}
 						else {
-							/* don't snap to selected (moving) or hidden */
-							if (nu->bp[u].f1 & SELECT || nu->bp[u].hide != 0) {
-								break;
-							}
 							retval |= test_projected_vert_dist(
 							        &neasrest_precalc,
 							        clip_planes_local, snapdata->clip_plane_len,
@@ -1389,26 +1409,6 @@ static bool snapCurve(
 							        r_loc);
 						}
 					}
-					else {
-						/* curve is not visible outside editmode if nurb length less than two */
-						if (nu->pntsu > 1) {
-							if (nu->bezt) {
-								retval |= test_projected_vert_dist(
-								        &neasrest_precalc,
-								        clip_planes_local, snapdata->clip_plane_len,
-								        is_persp, nu->bezt[u].vec[1], &dist_px_sq,
-								        r_loc);
-							}
-							else {
-								retval |= test_projected_vert_dist(
-								        &neasrest_precalc,
-								        clip_planes_local, snapdata->clip_plane_len,
-								        is_persp, nu->bp[u].vec, &dist_px_sq,
-								        r_loc);
-							}
-						}
-					}
-					break;
 				}
 			}
 		}
@@ -1470,9 +1470,11 @@ static bool snapEmpty(
 		}
 	}
 
-	if (retval && r_index) {
-		/* Does not support index. */
-		*r_index = -1;
+	if (retval) {
+		if (r_index) {
+			/* Does not support index. */
+			*r_index = -1;
+		}
 		return true;
 	}
 
@@ -1973,7 +1975,7 @@ static bool snapObject(
 		case OB_ARMATURE:
 			retval = snapArmature(
 			        snapdata,
-			        ob, ob->data, obmat,
+			        ob, obmat, use_obedit,
 			        dist_px,
 			        r_loc, r_no, r_index);
 			break;
@@ -2379,7 +2381,7 @@ bool ED_transform_snap_object_project_view3d_ex(
 		has_hit = raycastObjects(
 		        sctx, params,
 		        ray_start, ray_normal,
-		        &ray_depth_fallback, loc, no,
+		        ray_depth, loc, no,
 		        r_index, &ob, obmat, NULL);
 
 		retval = has_hit && (snap_to == SCE_SNAP_MODE_FACE);



More information about the Bf-blender-cvs mailing list