diff options
author | Matt Ebb <matt@mke3.net> | 2003-10-20 06:19:17 +0400 |
---|---|---|
committer | Matt Ebb <matt@mke3.net> | 2003-10-20 06:19:17 +0400 |
commit | 2aec1fee77e5a916cc9221ade1531670b49288e9 (patch) | |
tree | d9245592c0910faabe75fbcf5bae55ac77e0c184 /source | |
parent | 052b909ee658796924a1ca246dead8d689b2972d (diff) |
Object selection from tuhopuu2:
Select All by Type / Select All by Layer
User info:
Found in (object mode) 3D View header menu > Select >
Select All by Type selects all objects on visible layers of a certain type
Select All by Layer selects all objects on a certain layer (visible / invisible)
These used together are useful for managing a complex scene, for example
quickly selecting all the lamps and moving them to a separate layer, or
selecting the contents of a layer without having to disrupt the view
configuration of visible/invisible layers.
Coder Info:
Added two functions in editview.c
void selectall_type(short obtype);
void selectall_layer(int layernum);
I committed both of these together since the code/changes are both
very similar.
Diffstat (limited to 'source')
-rw-r--r-- | source/blender/src/editview.c | 42 | ||||
-rw-r--r-- | source/blender/src/header_view3d.c | 147 |
2 files changed, 188 insertions, 1 deletions
diff --git a/source/blender/src/editview.c b/source/blender/src/editview.c index 81813f7f837..0ebbe46e616 100644 --- a/source/blender/src/editview.c +++ b/source/blender/src/editview.c @@ -379,6 +379,48 @@ void deselectall(void) /* is toggle */ } +/* selects all objects of a particular type, on currently visible layers */ +void selectall_type(short obtype) +{ + Base *base; + + base= FIRSTBASE; + while(base) { + if((base->lay & G.vd->lay) && (base->object->type == obtype)) { + base->flag |= SELECT; + base->object->flag= base->flag; + } + base= base->next; + } + + allqueue(REDRAWVIEW3D, 0); + allqueue(REDRAWDATASELECT, 0); + allqueue(REDRAWNLA, 0); + + countall(); + +} +/* selects all objects on a particular layer */ +void selectall_layer(int layernum) +{ + Base *base; + + base= FIRSTBASE; + while(base) { + if (base->lay == (1<< (layernum -1))) { + base->flag |= SELECT; + base->object->flag= base->flag; + } + base= base->next; + } + + allqueue(REDRAWVIEW3D, 0); + allqueue(REDRAWDATASELECT, 0); + allqueue(REDRAWNLA, 0); + + countall(); + +} static void deselectall_except(Base *b) /* deselect all except b */ { Base *base; diff --git a/source/blender/src/header_view3d.c b/source/blender/src/header_view3d.c index 7d4c134bb50..fb7d40e3de7 100644 --- a/source/blender/src/header_view3d.c +++ b/source/blender/src/header_view3d.c @@ -360,6 +360,149 @@ static uiBlock *view3d_viewmenu(void *arg_unused) return block; } +static void do_view3d_select_object_typemenu(void *arg, int event) +{ + + extern void selectall_type(short obtype); + + switch(event) { + case 0: /* Mesh */ + selectall_type(OB_MESH); + break; + case 1: /* Curve */ + selectall_type(OB_CURVE); + break; + case 2: /* Surface */ + selectall_type(OB_SURF); + break; + case 3: /* Meta */ + selectall_type(OB_MBALL); + break; + case 4: /* Armature */ + selectall_type(OB_ARMATURE); + break; + case 5: /* Lattice */ + selectall_type(OB_LATTICE); + break; + case 6: /* Text */ + selectall_type(OB_FONT); + break; + case 7: /* Empty */ + selectall_type(OB_EMPTY); + break; + case 8: /* Camera */ + selectall_type(OB_CAMERA); + break; + case 9: /* Lamp */ + selectall_type(OB_LAMP); + break; + } + allqueue(REDRAWVIEW3D, 0); +} + +static uiBlock *view3d_select_object_typemenu(void *arg_unused) +{ + uiBlock *block; + short xco= 0, yco = 20, menuwidth = 120; + + block= uiNewBlock(&curarea->uiblocks, "view3d_select_object_typemenu", UI_EMBOSSP, UI_HELV, G.curscreen->mainwin); + uiBlockSetButmFunc(block, do_view3d_select_object_typemenu, NULL); + uiBlockSetCol(block, MENUCOL); + + uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Mesh", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 0, ""); + uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Curve", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, ""); + uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Surface", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, ""); + uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Meta", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, ""); + + uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, ""); + + uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Armature", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 4, ""); + uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Lattice", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 5, ""); + uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Text", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 6, ""); + uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Empty", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 7, ""); + + uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, ""); + + uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Camera", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 8, ""); + uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Lamp", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 9, ""); + + uiBlockSetDirection(block, UI_RIGHT); + uiTextBoundsBlock(block, 60); + return block; +} + +static void do_view3d_select_object_layermenu(void *arg, int event) +{ + + extern void selectall_layer(int layernum); + + switch(event) { + case 0: + case 1: + case 2: + case 3: + case 4: + case 5: + case 6: + case 7: + case 8: + case 9: + case 10: + case 11: + case 12: + case 13: + case 14: + case 15: + case 16: + case 17: + case 18: + case 19: + case 20: + selectall_layer(event); + break; + } + allqueue(REDRAWVIEW3D, 0); +} + +static uiBlock *view3d_select_object_layermenu(void *arg_unused) +{ + uiBlock *block; + short xco= 0, yco = 20, menuwidth = 22; + + block= uiNewBlock(&curarea->uiblocks, "view3d_select_object_layermenu", UI_EMBOSSP, UI_HELV, G.curscreen->mainwin); + uiBlockSetButmFunc(block, do_view3d_select_object_layermenu, NULL); + uiBlockSetCol(block, MENUCOL); + + uiDefBut(block, BUTM, 1, "1", xco, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, ""); + uiDefBut(block, BUTM, 1, "2", xco+=(menuwidth+1), yco, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, ""); + uiDefBut(block, BUTM, 1, "3", xco+=(menuwidth+1), yco, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, ""); + uiDefBut(block, BUTM, 1, "4", xco+=(menuwidth+1), yco, menuwidth, 19, NULL, 0.0, 0.0, 1, 4, ""); + uiDefBut(block, BUTM, 1, "5", xco+=(menuwidth+1), yco, menuwidth, 19, NULL, 0.0, 0.0, 1, 5, ""); + xco += 6; + uiDefBut(block, BUTM, 1, "6", xco+=(menuwidth+1), yco, menuwidth, 19, NULL, 0.0, 0.0, 1, 6, ""); + uiDefBut(block, BUTM, 1, "7", xco+=(menuwidth+1), yco, menuwidth, 19, NULL, 0.0, 0.0, 1, 7, ""); + uiDefBut(block, BUTM, 1, "8", xco+=(menuwidth+1), yco, menuwidth, 19, NULL, 0.0, 0.0, 1, 8, ""); + uiDefBut(block, BUTM, 1, "9", xco+=(menuwidth+1), yco, menuwidth, 19, NULL, 0.0, 0.0, 1, 9, ""); + uiDefBut(block, BUTM, 1, "10", xco+=(menuwidth+1), yco, menuwidth, 19, NULL, 0.0, 0.0, 1, 10, ""); + xco = 0; + uiDefBut(block, BUTM, 1, "11", xco, yco-=24, menuwidth, 19, NULL, 0.0, 0.0, 1, 11, ""); + uiDefBut(block, BUTM, 1, "12", xco+=(menuwidth+1), yco, menuwidth, 19, NULL, 0.0, 0.0, 1, 12, ""); + uiDefBut(block, BUTM, 1, "13", xco+=(menuwidth+1), yco, menuwidth, 19, NULL, 0.0, 0.0, 1, 13, ""); + uiDefBut(block, BUTM, 1, "14", xco+=(menuwidth+1), yco, menuwidth, 19, NULL, 0.0, 0.0, 1, 14, ""); + uiDefBut(block, BUTM, 1, "15", xco+=(menuwidth+1), yco, menuwidth, 19, NULL, 0.0, 0.0, 1, 15, ""); + xco += 6; + uiDefBut(block, BUTM, 1, "16", xco+=(menuwidth+1), yco, menuwidth, 19, NULL, 0.0, 0.0, 1, 16, ""); + uiDefBut(block, BUTM, 1, "17", xco+=(menuwidth+1), yco, menuwidth, 19, NULL, 0.0, 0.0, 1, 17, ""); + uiDefBut(block, BUTM, 1, "18", xco+=(menuwidth+1), yco, menuwidth, 19, NULL, 0.0, 0.0, 1, 18, ""); + uiDefBut(block, BUTM, 1, "19", xco+=(menuwidth+1), yco, menuwidth, 19, NULL, 0.0, 0.0, 1, 19, ""); + uiDefBut(block, BUTM, 1, "20", xco+=(menuwidth+1), yco, menuwidth, 19, NULL, 0.0, 0.0, 1, 20, ""); + + uiBlockSetDirection(block, UI_RIGHT); + //uiTextBoundsBlock(block, 100); + return block; +} + + static void do_view3d_select_objectmenu(void *arg, int event) { // extern void borderselect(void); @@ -397,7 +540,9 @@ static uiBlock *view3d_select_objectmenu(void *arg_unused) uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, ""); uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Select/Deselect All|A", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, ""); - + uiDefIconTextBlockBut(block, view3d_select_object_layermenu, NULL, ICON_RIGHTARROW_THIN, "Select All by Layer", 0, yco-=20, 120, 19, ""); + uiDefIconTextBlockBut(block, view3d_select_object_typemenu, NULL, ICON_RIGHTARROW_THIN, "Select All by Type", 0, yco-=20, 120, 19, ""); + uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, ""); uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Linked...|Shift L", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, ""); |