diff options
author | Campbell Barton <ideasman42@gmail.com> | 2019-08-02 15:53:27 +0300 |
---|---|---|
committer | Campbell Barton <ideasman42@gmail.com> | 2019-08-02 16:01:19 +0300 |
commit | 5cf6d7e2b0af67e29e52a0b8649129f31cb20e53 (patch) | |
tree | 33ebba52ae8a3a2df4886acc369c812827736c27 /source/blender/editors/space_view3d/view3d_select.c | |
parent | d8c610536624da48ade2967253d6ab2c30062073 (diff) |
Fix edge selection ignoring clipping in wire-frame display
Diffstat (limited to 'source/blender/editors/space_view3d/view3d_select.c')
-rw-r--r-- | source/blender/editors/space_view3d/view3d_select.c | 25 |
1 files changed, 16 insertions, 9 deletions
diff --git a/source/blender/editors/space_view3d/view3d_select.c b/source/blender/editors/space_view3d/view3d_select.c index 0fd76b2d6fd..de13bcbc6be 100644 --- a/source/blender/editors/space_view3d/view3d_select.c +++ b/source/blender/editors/space_view3d/view3d_select.c @@ -848,11 +848,14 @@ static bool do_lasso_select_mesh(ViewContext *vc, vc->obedit->runtime.select_id, SCE_SELECT_EDGE) : 0, }; - mesh_foreachScreenEdge( - vc, do_lasso_select_mesh__doSelectEdge_pass0, &data_for_edge, V3D_PROJ_TEST_CLIP_NEAR); + + const eV3DProjTest clip_flag = V3D_PROJ_TEST_CLIP_NEAR | + (use_zbuf ? 0 : V3D_PROJ_TEST_CLIP_BB); + mesh_foreachScreenEdge_clip_bb_segment( + vc, do_lasso_select_mesh__doSelectEdge_pass0, &data_for_edge, clip_flag); if (data.is_done == false) { - mesh_foreachScreenEdge( - vc, do_lasso_select_mesh__doSelectEdge_pass1, &data_for_edge, V3D_PROJ_TEST_CLIP_NEAR); + mesh_foreachScreenEdge_clip_bb_segment( + vc, do_lasso_select_mesh__doSelectEdge_pass1, &data_for_edge, clip_flag); } } @@ -2824,11 +2827,14 @@ static bool do_mesh_box_select(ViewContext *vc, vc->obedit->runtime.select_id, SCE_SELECT_EDGE) : 0, }; - mesh_foreachScreenEdge( - vc, do_mesh_box_select__doSelectEdge_pass0, &cb_data, V3D_PROJ_TEST_CLIP_NEAR); + + const eV3DProjTest clip_flag = V3D_PROJ_TEST_CLIP_NEAR | + (use_zbuf ? 0 : V3D_PROJ_TEST_CLIP_BB); + mesh_foreachScreenEdge_clip_bb_segment( + vc, do_mesh_box_select__doSelectEdge_pass0, &cb_data, clip_flag); if (data.is_done == false) { - mesh_foreachScreenEdge( - vc, do_mesh_box_select__doSelectEdge_pass1, &cb_data, V3D_PROJ_TEST_CLIP_NEAR); + mesh_foreachScreenEdge_clip_bb_segment( + vc, do_mesh_box_select__doSelectEdge_pass1, &cb_data, clip_flag); } } @@ -3410,7 +3416,8 @@ static bool mesh_circle_select(ViewContext *vc, } } else { - mesh_foreachScreenEdge(vc, mesh_circle_doSelectEdge, &data, V3D_PROJ_TEST_CLIP_NEAR); + mesh_foreachScreenEdge_clip_bb_segment( + vc, mesh_circle_doSelectEdge, &data, V3D_PROJ_TEST_CLIP_NEAR | V3D_PROJ_TEST_CLIP_BB); } } |