From 7f3e8b6da8e03e9cb3c47ce8eef92e532a86eed5 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Mon, 8 Feb 2010 10:12:02 +0000 Subject: [#21018] Lasso select fails [26694] fix for #20936 broke lasso and border select whe not in wire view. --- source/blender/editors/space_view3d/view3d_select.c | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) (limited to 'source/blender/editors/space_view3d/view3d_select.c') diff --git a/source/blender/editors/space_view3d/view3d_select.c b/source/blender/editors/space_view3d/view3d_select.c index b5de24b9ae7..c44b7ec6b59 100644 --- a/source/blender/editors/space_view3d/view3d_select.c +++ b/source/blender/editors/space_view3d/view3d_select.c @@ -469,18 +469,24 @@ static void do_lasso_select_mesh(ViewContext *vc, short mcords[][2], short moves /* workaround: init mats first, EM_mask_init_backbuf_border can change view matrix to pixel space, breaking edge select with backbuf. fixes bug #20936 */ - ED_view3d_init_mats_rv3d(vc->obedit, vc->rv3d); /* for foreach's screen/vert projection */ + + /* [#21018] breaks zbuf select. run below. only if bbsel fails */ + /* ED_view3d_init_mats_rv3d(vc->obedit, vc->rv3d) */ + + glLoadMatrixf(vc->rv3d->viewmat); bbsel= EM_mask_init_backbuf_border(vc, mcords, moves, rect.xmin, rect.ymin, rect.xmax, rect.ymax); if(ts->selectmode & SCE_SELECT_VERTEX) { if (bbsel) { EM_backbuf_checkAndSelectVerts(vc->em, select); } else { + ED_view3d_init_mats_rv3d(vc->obedit, vc->rv3d); /* for foreach's screen/vert projection */ mesh_foreachScreenVert(vc, do_lasso_select_mesh__doSelectVert, &data, 1); } } if(ts->selectmode & SCE_SELECT_EDGE) { /* Does both bbsel and non-bbsel versions (need screen cos for both) */ + ED_view3d_init_mats_rv3d(vc->obedit, vc->rv3d); /* for foreach's screen/vert projection */ data.pass = 0; mesh_foreachScreenEdge(vc, do_lasso_select_mesh__doSelectEdge, &data, 0); @@ -495,6 +501,7 @@ static void do_lasso_select_mesh(ViewContext *vc, short mcords[][2], short moves if (bbsel) { EM_backbuf_checkAndSelectFaces(vc->em, select); } else { + ED_view3d_init_mats_rv3d(vc->obedit, vc->rv3d); /* for foreach's screen/vert projection */ mesh_foreachScreenFace(vc, do_lasso_select_mesh__doSelectFace, &data); } } @@ -1397,13 +1404,19 @@ static void do_mesh_box_select(ViewContext *vc, rcti *rect, int select, int exte /* workaround: init mats first, EM_mask_init_backbuf_border can change view matrix to pixel space, breaking edge select with backbuf. fixes bug #20936 */ - ED_view3d_init_mats_rv3d(vc->obedit, vc->rv3d); /* for foreach's screen/vert projection */ + /*ED_view3d_init_mats_rv3d(vc->obedit, vc->rv3d);*/ /* for foreach's screen/vert projection */ + + /* [#21018] breaks zbuf select. run below. only if bbsel fails */ + /* ED_view3d_init_mats_rv3d(vc->obedit, vc->rv3d) */ + + glLoadMatrixf(vc->rv3d->viewmat); bbsel= EM_init_backbuf_border(vc, rect->xmin, rect->ymin, rect->xmax, rect->ymax); if(ts->selectmode & SCE_SELECT_VERTEX) { if (bbsel) { EM_backbuf_checkAndSelectVerts(vc->em, select); } else { + ED_view3d_init_mats_rv3d(vc->obedit, vc->rv3d); mesh_foreachScreenVert(vc, do_mesh_box_select__doSelectVert, &data, 1); } } @@ -1423,6 +1436,7 @@ static void do_mesh_box_select(ViewContext *vc, rcti *rect, int select, int exte if(bbsel) { EM_backbuf_checkAndSelectFaces(vc->em, select); } else { + ED_view3d_init_mats_rv3d(vc->obedit, vc->rv3d); mesh_foreachScreenFace(vc, do_mesh_box_select__doSelectFace, &data); } } -- cgit v1.2.3