diff options
author | Germano <germano.costa@ig.com.br> | 2018-05-16 16:31:27 +0300 |
---|---|---|
committer | Germano <germano.costa@ig.com.br> | 2018-05-16 16:32:54 +0300 |
commit | 2ba0951e5219aa82f3e5c00890512c8ba8889c9d (patch) | |
tree | acd176a0ba6517a56cdf70941925fa1ee43985d4 /source/blender/blenlib/intern/BLI_kdopbvh.c | |
parent | 6a4ba9133ce7937fb90902372302cad0f424e6d7 (diff) |
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
Diffstat (limited to 'source/blender/blenlib/intern/BLI_kdopbvh.c')
-rw-r--r-- | source/blender/blenlib/intern/BLI_kdopbvh.c | 10 |
1 files changed, 8 insertions, 2 deletions
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; |