[MAYA腳本]簡單無聊的合并與分離
沒什么大用的腳本,就是最近整理模型的時候合并分離來回刪歷史,處理過的物體還在層級里亂跑比較煩人,為了少點幾次鼠標(biāo)寫的

合并的物體會自動放到最后選擇的物體的那個層級里,如果層級里只有它一個物體的話會自動清除組

分離物體只要選擇想要分離出來的殼的其中一個面片就可以直接把模型按照鏈面的連接掰開,并且永遠(yuǎn)只會把物體分離成兩個,省著默認(rèn)的那個分離會把選擇的部分全部碎開變成單獨的物體

執(zhí)行過后都是自動刪除歷史的

//Simple merge selected objects
string $objs[] = `ls -sl`;
string $parentGrp[] = `listRelatives -p $objs[(size($objs)-1)]`;
polyUnite -ch 0 -n ($objs[(size($objs)-1)]+"_merged") $objs;
if($parentGrp[0] != ""){
????if(`objExists $parentGrp[0]` == 1){
????????parent ($objs[(size($objs)-1)]+"_merged") $parentGrp[0];
????}else{
????????print "The Parent contains no objects has been removed, object moved below the word";
????????};
};
上面是合并,下面是分離
//Simple Separate shell from selected object
SeparatePolygon;
DeleteHistory;
string $_objs[] = `ls -sl`;
select -d $_objs[size($_objs)-1];
string $extractObj[] = `ls -sl`;
string $parent_Grp[] = `listRelatives -p $_objs[0]`;
if (size($extractObj) > 1){
????polyUnite -ch 0 -mergeUVSets 1 -centerPivot -name ($parent_Grp[0]+"_Separeted") $extractObj;
????parent ($parent_Grp[0]+"_Separeted") $parent_Grp[0];
}else{
????rename $extractObj[0] ($parent_Grp[0]+"_Separeted");
};
rename $_objs[size($_objs)-1] ($parent_Grp[0]+"_Origin");
都是mel,不是python
另外那個自動根據(jù)材質(zhì)分離的腳本完善了一下,這兩天用的時候發(fā)現(xiàn)竟然有物體可以被賦予一個不在任何面上的材質(zhì),會導(dǎo)致腳本失效,驚了
#The selected item must be OBJ by imported
import maya.cmds as cmds
def seperateObj(merger):
????mergerShape = cmds.listRelatives(merger, s=1)[0]
????allSG = cmds.listSets(o=mergerShape, type=1)
????
????for sg in allSG:
????????locals()[sg]=[]
????
????components = cmds.polySeparate(merger, ch=0)
????grp = cmds.listRelatives(components[0], p=1)
????
????for element in components:
????????sgname = cmds.listSets(o=cmds.listRelatives(element, s=1)[0])[0]
????????locals()[sgname].append(element)
????
????for sg in allSG:
????????if len(locals()[sg])==1:
????????????cmds.sets(locals()[sg][0], e=1, forceElement = sg)
????????????cmds.rename(locals()[sg][0], (merger+"_"+sg))
????????elif len(locals()[sg])==0:
???????????pass
????????else:
????????????part = cmds.polyUnite(locals()[sg], ch=0, n=(merger+"_"+sg))
????????????cmds.sets(part, e=1, forceElement = sg)
????????????cmds.parent(part, grp)
for obj in cmds.ls(sl=1):
????seperateObj(obj)
這回是python(粘貼代碼沒有縮進(jìn)好沙雕,有啥辦法把縮進(jìn)粘進(jìn)去嗎)

再想想還有啥大佬們不屑于寫的垃圾功能我可以寫點