From 2ba0951e5219aa82f3e5c00890512c8ba8889c9d Mon Sep 17 00:00:00 2001 From: Germano Date: Wed, 16 May 2018 10:31:27 -0300 Subject: Snap system: Adds support to Clip Planes and uses a clip plane to simulate occlusion This patch adds support for clip_planes (ie ignore what is behind a face)... The idea is to first execute a raycast to get the polygon to which the mouse cursor points. Then a snap test is done on the vertices or edges of the polygon. Then with the normal and location obtained in raycast a new clip_plane is created and the snap over the whole scene is processed ignoring the elements behind the clip_plane. Here 2 gif of how the previous patch would work on blender2.79: {F497176} {F497177} Reviewers: mont29, campbellbarton Reviewed By: campbellbarton Subscribers: bliblubli Tags: #bf_blender_2.8 Differential Revision: https://developer.blender.org/D2527 --- source/blender/blenlib/BLI_kdopbvh.h | 1 + source/blender/blenlib/intern/BLI_kdopbvh.c | 10 ++++++++-- 2 files changed, 9 insertions(+), 2 deletions(-) (limited to 'source/blender/blenlib') diff --git a/source/blender/blenlib/BLI_kdopbvh.h b/source/blender/blenlib/BLI_kdopbvh.h index 76c3b6ef3fd..e7cbe05d713 100644 --- a/source/blender/blenlib/BLI_kdopbvh.h +++ b/source/blender/blenlib/BLI_kdopbvh.h @@ -107,6 +107,7 @@ typedef void (*BVHTree_RangeQuery)(void *userdata, int index, const float co[3], typedef void (*BVHTree_NearestProjectedCallback)( void *userdata, int index, const struct DistProjectedAABBPrecalc *precalc, + const float (*clip_plane)[4], const int clip_plane_len, BVHTreeNearest *nearest); diff --git a/source/blender/blenlib/intern/BLI_kdopbvh.c b/source/blender/blenlib/intern/BLI_kdopbvh.c index 5571636be63..b3adf3106c1 100644 --- a/source/blender/blenlib/intern/BLI_kdopbvh.c +++ b/source/blender/blenlib/intern/BLI_kdopbvh.c @@ -2040,7 +2040,10 @@ static void bvhtree_nearest_projected_dfs_recursive( { if (node->totnode == 0) { if (data->callback) { - data->callback(data->userdata, node->index, &data->precalc, &data->nearest); + data->callback( + data->userdata, node->index, &data->precalc, + NULL, 0, + &data->nearest); } else { data->nearest.index = node->index; @@ -2089,7 +2092,10 @@ static void bvhtree_nearest_projected_with_clipplane_test_dfs_recursive( { if (node->totnode == 0) { if (data->callback) { - data->callback(data->userdata, node->index, &data->precalc, &data->nearest); + data->callback( + data->userdata, node->index, &data->precalc, + data->clip_plane, data->clip_plane_len, + &data->nearest); } else { data->nearest.index = node->index; -- cgit v1.2.3