diff options
author | Martin Poirier <theeth@yahoo.com> | 2009-11-30 01:16:29 +0300 |
---|---|---|
committer | Martin Poirier <theeth@yahoo.com> | 2009-11-30 01:16:29 +0300 |
commit | cd154da9732962870339952898499ed1b1c32d93 (patch) | |
tree | f59446523990d985a92542ab781d7707c8753009 /source/blender/editors/mesh/editface.c | |
parent | 92b4316708bad0448f4c433ef9c6c2d3cc1f4fb5 (diff) |
1. Extend option for 3d view border select now does something (default True to keep same behavior)
2. Add action parameter to Select_All_Toggle operators, rename to Select_All.
Options are Toggle (default), Select, Deselect, Invert (same as select swap). This makes it possible to map separate hotkeys for select all and deselect all.
NOTE for Aligorith: I didn't change animation operators for select_all which already had an Invert operator. These should be fixed eventually.
Diffstat (limited to 'source/blender/editors/mesh/editface.c')
-rw-r--r-- | source/blender/editors/mesh/editface.c | 50 |
1 files changed, 34 insertions, 16 deletions
diff --git a/source/blender/editors/mesh/editface.c b/source/blender/editors/mesh/editface.c index 5d94fb32438..d034fe4a783 100644 --- a/source/blender/editors/mesh/editface.c +++ b/source/blender/editors/mesh/editface.c @@ -378,34 +378,44 @@ void select_linked_tfaces(bContext *C, Object *ob, short mval[2], int mode) object_facesel_flush_dm(ob); } -void deselectall_tface(Object *ob) +void selectall_tface(Object *ob, int action) { Mesh *me; MFace *mface; - int a, sel; + int a; me= get_mesh(ob); if(me==0) return; - mface= me->mface; - a= me->totface; - sel= 0; - while(a--) { - if(mface->flag & ME_HIDE); - else if(mface->flag & ME_FACE_SEL) { - sel= 1; - break; + if (action == SEL_TOGGLE) { + action = SEL_SELECT; + + mface= me->mface; + a= me->totface; + while(a--) { + if((mface->flag & ME_HIDE) == 0 && mface->flag & ME_FACE_SEL) { + action = SEL_DESELECT; + break; + } + mface++; } - mface++; } mface= me->mface; a= me->totface; while(a--) { - if(mface->flag & ME_HIDE); - else { - if(sel) mface->flag &= ~ME_FACE_SEL; - else mface->flag |= ME_FACE_SEL; + if((mface->flag & ME_HIDE) == 0) { + switch (action) { + case SEL_SELECT: + mface->flag |= ME_FACE_SEL; + break; + case SEL_DESELECT: + mface->flag &= ~ME_FACE_SEL; + break; + case SEL_INVERT: + mface->flag ^= ME_FACE_SEL; + break; + } } mface++; } @@ -815,7 +825,7 @@ int face_select(struct bContext *C, Object *ob, short mval[2], int extend) return 1; } -void face_borderselect(struct bContext *C, Object *ob, rcti *rect, int select) +void face_borderselect(struct bContext *C, Object *ob, rcti *rect, int select, int extend) { Mesh *me; MFace *mface; @@ -837,6 +847,14 @@ void face_borderselect(struct bContext *C, Object *ob, rcti *rect, int select) sy= (rect->ymax-rect->ymin+1); if(sx*sy<=0) return; + if (extend == 0 && select) { + mface= me->mface; + for(a=1; a<=me->totface; a++, mface++) { + if((mface->flag & ME_HIDE) == 0) + mface->flag &= ~ME_FACE_SEL; + } + } + view3d_validate_backbuf(&vc); ibuf = IMB_allocImBuf(sx,sy,32,IB_rect,0); |