From 810c6d1880b9cb2944ab2bcb5eb60d8dedd97a64 Mon Sep 17 00:00:00 2001 From: Bastien Montagne Date: Thu, 30 Jan 2014 11:51:34 +0100 Subject: [PATCH] Fix T38358: typo in own rB77089a3bf203. Also allowed me to fine another potential issue, hit.dist was no more initialized correctly - and I had forgotten to take into account Brecht's remark about normalize_v3() also returning the vector's previous length. --- source/blender/editors/transform/transform_snap.c | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/source/blender/editors/transform/transform_snap.c b/source/blender/editors/transform/transform_snap.c index 694b2931e19..91f8da1d2ae 100644 --- a/source/blender/editors/transform/transform_snap.c +++ b/source/blender/editors/transform/transform_snap.c @@ -1542,21 +1542,24 @@ static bool snapDerivedMesh(short snap_mode, ARegion *ar, Object *ob, DerivedMes mul_m4_v3(imat, ray_org_local); /* local scale in normal direction */ - local_scale = len_v3(ray_normal_local); - normalize_v3(ray_normal_local); + local_scale = normalize_v3(ray_normal_local); /* We pass a temp ray_start, set from object's boundbox, to avoid precision issues with very far * away ray_start values (as returned in case of ortho view3d), see T38358. */ len_diff -= local_scale; /* make temp start point a bit away from bbox hit point. */ madd_v3_v3v3fl(ray_start_local, ray_org_local, ray_normal_local, - len_diff - len_v3v3(ray_start_local, ray_org_local)); + len_v3v3(ray_start_local, ray_org_local) - len_diff); treeData.em_evil = em; bvhtree_from_mesh_faces(&treeData, dm, 0.0f, 4, 6); hit.index = -1; - hit.dist = *r_depth * (*r_depth == TRANSFORM_DIST_MAX_RAY ? 1.0f : local_scale); + hit.dist = *r_depth; + if (hit.dist != TRANSFORM_DIST_MAX_RAY) { + hit.dist *= local_scale; + hit.dist -= len_diff; + } if (treeData.tree && BLI_bvhtree_ray_cast(treeData.tree, ray_start_local, ray_normal_local, 0.0f,