diff options
author | Campbell Barton <ideasman42@gmail.com> | 2006-10-12 17:13:45 +0400 |
---|---|---|
committer | Campbell Barton <ideasman42@gmail.com> | 2006-10-12 17:13:45 +0400 |
commit | ce0f9a3cac64600c437e6983fdd0d37d22a48fcc (patch) | |
tree | 5f95d861983989985c31034ecf8b2f4b2a37b5ce | |
parent | b2a8417fce8d231188ee75062804be4d471c57be (diff) |
On Matt's suggestion moved "Make Link->Groups" to the add groups menu as "Add to Active Objects Groups"
removed "Make Link -> DupliGroup" because Copy->Duplis does the same thing.
Python's Group.c had an unneeded scene/base lookup.
-rwxr-xr-x | source/blender/python/api2_2x/Group.c | 2 | ||||
-rw-r--r-- | source/blender/src/editgroup.c | 38 | ||||
-rw-r--r-- | source/blender/src/editobject.c | 220 | ||||
-rw-r--r-- | source/blender/src/header_view3d.c | 31 |
4 files changed, 146 insertions, 145 deletions
diff --git a/source/blender/python/api2_2x/Group.c b/source/blender/python/api2_2x/Group.c index 7c5e230f9ce..328b438a6f4 100755 --- a/source/blender/python/api2_2x/Group.c +++ b/source/blender/python/api2_2x/Group.c @@ -741,8 +741,6 @@ static PyObject *GroupObSeq_add( BPy_GroupObSeq * self, PyObject *args ) blen_ob = ( ( BPy_Object * ) pyobj )->object; - base= object_in_scene(blen_ob, G.scene); - add_to_group_wraper(self->bpygroup->group, blen_ob); /* this checks so as not to add the object into the group twice*/ Py_RETURN_NONE; diff --git a/source/blender/src/editgroup.c b/source/blender/src/editgroup.c index f26eaa0f4e3..bc1b26739fd 100644 --- a/source/blender/src/editgroup.c +++ b/source/blender/src/editgroup.c @@ -77,6 +77,39 @@ void add_selected_to_group(Group *group) BIF_undo_push("Add to Group"); } +void add_selected_to_act_ob_groups(void) +{ + Object *ob= OBACT, *obt; + Base *base; + + if (!ob) return; + + /* linking to same group requires its own loop so we can avoid + looking up the active objects groups each time */ + Group *group= G.main->group.first; + while(group) { + if(object_in_group(ob, group)) { + /* Assign groups to selected objects */ + base= FIRSTBASE; + while(base) { + if(TESTBASE(base)) { + obt= base->object; + add_to_group(group, obt); + obt->flag |= OB_FROMGROUP; + base->flag |= OB_FROMGROUP; + } + base= base->next; + } + } + group= group->id.next; + } + allqueue(REDRAWVIEW3D, 0); + allqueue(REDRAWBUTSOBJECT, 0); + DAG_scene_sort(G.scene); + BIF_undo_push("Add to Active Objects Group"); +} + + void rem_selected_from_group(void) { Base *base; @@ -110,7 +143,7 @@ void group_operation_with_menu(void) break; if(group) - mode= pupmenu("Groups %t|Add to Existing Group %x3|Add to New Group %x1|Remove from All Groups %x2"); + mode= pupmenu("Groups %t|Add to Existing Group %x3|Add to Active Objects Groups %x4|Add to New Group %x1|Remove from All Groups %x2"); else mode= pupmenu("Groups %t|Add to New Group %x1|Remove from All Groups %x2"); @@ -144,7 +177,8 @@ void group_operation(int mode) else return; } - if(mode==1 || mode==3) add_selected_to_group(group); + if(mode==4) add_selected_to_act_ob_groups(); + else if(mode==1 || mode==3) add_selected_to_group(group); else if(mode==2) rem_selected_from_group(); } } diff --git a/source/blender/src/editobject.c b/source/blender/src/editobject.c index 5ce68ce0050..21966289d4b 100644 --- a/source/blender/src/editobject.c +++ b/source/blender/src/editobject.c @@ -3162,11 +3162,11 @@ void make_links_menu() { Object *ob; short event=0; - char str[160]; + char str[140]; if(!(ob=OBACT)) return; - strcpy(str, "Make Links %t|To Scene...%x1|%l|Object Ipo%x4|Object Groups%x7"); + strcpy(str, "Make Links %t|To Scene...%x1|%l|Object Ipo%x4"); if(ob->type==OB_MESH) strcat(str, "|Mesh Data%x2|Materials%x3"); @@ -3186,8 +3186,6 @@ void make_links_menu() strcat(str, "|Lattice Data%x2"); else if(ob->type==OB_ARMATURE) strcat(str, "|Armature Data%x2"); - else if(ob->type==OB_EMPTY) - strcat(str, "|DupliGroup%x6"); event= pupmenu(str); @@ -3243,144 +3241,120 @@ void make_links(short event) } } - /* linking to same group requires its own loop so we can avoid - looking up the active objects groups each time */ - if(event==7) { - Group *group= G.main->group.first; - while(group) { - if(object_in_group(ob, group)) { - /* Assign groups to selected objects */ - base= FIRSTBASE; - while(base) { - if(TESTBASE(base)) { - obt= base->object; - add_to_group(group, obt); - obt->flag |= OB_FROMGROUP; - base->flag |= OB_FROMGROUP; + /* All non group linking */ + base= FIRSTBASE; + while(base) { + if(event==1 || base != BASACT) { + + obt= base->object; + + if(TESTBASE(base)) { + + if(event==1) { /* to scene */ + + /* test if already linked */ + sbase= sce->base.first; + while(sbase) { + if(sbase->object==base->object) break; + sbase= sbase->next; } - base= base->next; + if(sbase) { /* remove */ + base= base->next; + continue; + } + + nbase= MEM_mallocN( sizeof(Base), "newbase"); + *nbase= *base; + BLI_addhead( &(sce->base), nbase); + id_us_plus((ID *)base->object); } - } - group= group->id.next; - } - - } else { - /* All non group linking */ - base= FIRSTBASE; - while(base) { - if(event==1 || base != BASACT) { - - obt= base->object; - - if(TESTBASE(base)) { - - if(event==1) { /* to scene */ + if(TESTBASELIB(base)) { + if(event==2 || event==5) { /* obdata */ + if(ob->type==obt->type) { - /* test if already linked */ - sbase= sce->base.first; - while(sbase) { - if(sbase->object==base->object) break; - sbase= sbase->next; - } - if(sbase) { /* remove */ - base= base->next; - continue; + id= obt->data; + id->us--; + + id= ob->data; + id_us_plus(id); + obt->data= id; + + /* if amount of material indices changed: */ + test_object_materials(obt->data); + + obt->recalc |= OB_RECALC_DATA; } - - nbase= MEM_mallocN( sizeof(Base), "newbase"); - *nbase= *base; - BLI_addhead( &(sce->base), nbase); - id_us_plus((ID *)base->object); + } + else if(event==4) { /* ob ipo */ + if(obt->ipo) obt->ipo->id.us--; + obt->ipo= ob->ipo; + if(obt->ipo) { + id_us_plus((ID *)obt->ipo); + do_ob_ipo(obt); } } - if(TESTBASELIB(base)) { - if(event==2 || event==5) { /* obdata */ - if(ob->type==obt->type) { - - id= obt->data; - id->us--; - - id= ob->data; - id_us_plus(id); - obt->data= id; - - /* if amount of material indices changed: */ - test_object_materials(obt->data); + else if(event==6) { + if(ob->dup_group) ob->dup_group->id.us--; + obt->dup_group= ob->dup_group; + if(obt->dup_group) { + id_us_plus((ID *)obt->dup_group); + obt->transflag |= OB_DUPLIGROUP; + } + } + else if(event==3) { /* materials */ + + /* only if obt has no material: make arrays */ + /* from ob to obt! */ + + obmatarar= give_matarar(ob); + matarar= give_matarar(obt); + totcolp= give_totcolp(obt); - obt->recalc |= OB_RECALC_DATA; - } + /* if one of the two is zero: no render-able object */ + if( matarar && obmatarar) { + + /* take care of users! so first a copy of original: */ + + if(ob->totcol) { + matar1= MEM_dupallocN(ob->mat); + matar2= MEM_dupallocN(*obmatarar); } - else if(event==4) { /* ob ipo */ - if(obt->ipo) obt->ipo->id.us--; - obt->ipo= ob->ipo; - if(obt->ipo) { - id_us_plus((ID *)obt->ipo); - do_ob_ipo(obt); + else { + matar1= matar2= NULL; } - } - else if(event==6) { - if(ob->dup_group) ob->dup_group->id.us--; - obt->dup_group= ob->dup_group; - if(obt->dup_group) { - id_us_plus((ID *)obt->dup_group); - obt->transflag |= OB_DUPLIGROUP; + + /* remove links from obt */ + for(a=0; a<obt->totcol; a++) { + if(obt->mat[a]) obt->mat[a]->id.us--; + if( (*matarar)[a]) (*matarar)[a]->id.us--; } - } - else if(event==3) { /* materials */ - /* only if obt has no material: make arrays */ - /* from ob to obt! */ + /* free */ + if(obt->mat) MEM_freeN(obt->mat); + if(*matarar) MEM_freeN(*matarar); - obmatarar= give_matarar(ob); - matarar= give_matarar(obt); - totcolp= give_totcolp(obt); - - /* if one of the two is zero: no render-able object */ - if( matarar && obmatarar) { - - /* take care of users! so first a copy of original: */ + /* connect a copy */ + obt->mat= matar1; + *matarar= matar2; + obt->totcol= ob->totcol; + *totcolp= ob->totcol; + + /* increase users */ + for(a=0; a<obt->totcol; a++) { + if(obt->mat[a]) id_us_plus((ID *)obt->mat[a]); + if( (*matarar)[a]) id_us_plus((ID *)(*matarar)[a]); + } - if(ob->totcol) { - matar1= MEM_dupallocN(ob->mat); - matar2= MEM_dupallocN(*obmatarar); - } - else { - matar1= matar2= NULL; - } - - /* remove links from obt */ - for(a=0; a<obt->totcol; a++) { - if(obt->mat[a]) obt->mat[a]->id.us--; - if( (*matarar)[a]) (*matarar)[a]->id.us--; - } - - /* free */ - if(obt->mat) MEM_freeN(obt->mat); - if(*matarar) MEM_freeN(*matarar); - - /* connect a copy */ - obt->mat= matar1; - *matarar= matar2; - obt->totcol= ob->totcol; - *totcolp= ob->totcol; + obt->colbits= ob->colbits; - /* increase users */ - for(a=0; a<obt->totcol; a++) { - if(obt->mat[a]) id_us_plus((ID *)obt->mat[a]); - if( (*matarar)[a]) id_us_plus((ID *)(*matarar)[a]); - } - - obt->colbits= ob->colbits; - - /* if amount of material indices changed: */ - test_object_materials(obt->data); - } + /* if amount of material indices changed: */ + test_object_materials(obt->data); } } } - base= base->next; } + base= base->next; } allqueue(REDRAWVIEW3D, 0); diff --git a/source/blender/src/header_view3d.c b/source/blender/src/header_view3d.c index ef37625d2c9..0b4b79802d5 100644 --- a/source/blender/src/header_view3d.c +++ b/source/blender/src/header_view3d.c @@ -1758,8 +1758,6 @@ static void do_view3d_edit_object_makelinksmenu(void *arg, int event) case 2: case 3: case 4: - case 6: - case 7: make_links((short)event); break; } @@ -1781,34 +1779,31 @@ static uiBlock *view3d_edit_object_makelinksmenu(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, "Object Ipo|Ctrl L, 2", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 4, ""); - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Object Groups|Ctrl L, 3", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 7, ""); if ((ob=OBACT)) { if(ob->type==OB_MESH) { - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Mesh Data|Ctrl L, 4", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, ""); - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Materials|Ctrl L, 5", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, ""); + uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Mesh Data|Ctrl L, 3", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, ""); + uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Materials|Ctrl L, 4", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, ""); } else if(ob->type==OB_CURVE) { - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Curve Data|Ctrl L, 4", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, ""); - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Materials|Ctrl L, 5", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, ""); + uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Curve Data|Ctrl L, 3", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, ""); + uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Materials|Ctrl L, 4", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, ""); } else if(ob->type==OB_FONT) { - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Text Data|Ctrl L, 4", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, ""); - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Materials|Ctrl L, 5", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, ""); + uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Text Data|Ctrl L, 3", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, ""); + uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Materials|Ctrl L, 4", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, ""); } else if(ob->type==OB_SURF) { - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Surface Data|Ctrl L, 4", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, ""); - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Materials|Ctrl L, 5", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, ""); - } else if(ob->type==OB_MBALL) { + uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Surface Data|Ctrl L, 3", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, ""); uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Materials|Ctrl L, 4", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, ""); + } else if(ob->type==OB_MBALL) { + uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Materials|Ctrl L, 3", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, ""); } else if(ob->type==OB_CAMERA) { - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Camera Data|Ctrl L, 4", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, ""); + uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Camera Data|Ctrl L, 3", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, ""); } else if(ob->type==OB_LAMP) { - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Lamp Data|Ctrl L, 4", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, ""); + uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Lamp Data|Ctrl L, 3", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, ""); } else if(ob->type==OB_LATTICE) { - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Lattice Data|Ctrl L, 4", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, ""); + uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Lattice Data|Ctrl L, 3", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, ""); } else if(ob->type==OB_ARMATURE) { - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Armature Data|Ctrl L, 4", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, ""); - } else if(ob->type==OB_EMPTY) { - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "DupliGroup|Ctrl L, 4", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 6, ""); + uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Armature Data|Ctrl L, 3", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, ""); } } |