2012年4月27日 星期五
MAXscript : constraints appendTarget
近日用MAXscript來做批次處理,其中有個步驟是先切biped的FigureMode為true,然後Merge物件並appendTarget $Bip01,但是發現取消FigureMode之後物件的座標點仍是merge時的座標,並未依據$Bip01的位移改變。後來發現在appendTarget後必需要取用物件的position(或者直接取用transform)資訊才會正常。不過若是一步一步手動執行,就沒有這個問題,也不是因為使用disableSceneRedraw、undo off、用fn進行addConstraint所導致。
2012年4月18日 星期三
MAXscript : Skin Copy/Paste
-- --選擇已Skin物件執行Copy, 自動記錄bones和存出env, 再選擇要套用Skin的物件執行Paste套回 --需要設定tempDir供存出env檔案用 --by JanusHaung skinBonesArray = #() tempDir = "D:/MaxProject/export/" envFilename = "" rollout skinCopyPaste "Skin Copy Paste" width:185 height:50 ( button btn_copy "Copy" across:2 button btn_paste "Paste" label lbl1 "" on btn_copy pressed do ( -- 選擇已skin好的物件並執行 if $.modifiers[#Skin] != undefined do ( skinBonesArray = for i in 1 to skinops.getnumberbones $.skin collect skinops.getbonename $.skin i 0 envFilename = tempDir + $.name + ".env" skinOps.saveEnvelope $.skin envFilename lbl1.caption = "Skin copied." ) ) on btn_paste pressed do ( max modify mode if skinBonesArray.count > 0 do ( -- 選擇尚未skin好的模型執行 if $.modifiers[#Skin] == undefined do addmodifier $ (Skin()) for i in 1 to skinBonesArray.count do skinOps.addbone $.skin ( getNodeByName skinBonesArray[i] ) 0 --先執行completeRedraw()才可成功LoadEnvlope completeRedraw() skinOps.LoadEnvelope $.skin envFilename lbl1.caption = "Skin pasted." ) ) ) createDialog skinCopyPaste
[MAXscript] 將所選擇物件轉為物件陣列形式
可將選擇中的物件名稱以#( $node1, $node2, ... )物件陣列的方式印出來
-- 將所選擇的物件名稱輸出成物件陣列形式 by Janus Huang -- 紀錄下所有物件的名稱 tmp = for o in selection collect o.name out = "#( " --把物件名稱去除掉空白格 for i in 1 to tmp.count where matchpattern tmp[i] pattern:"* *" do ( strNew = "" --留下space外的字串成array strTmp = filterString tmp[i] " " --將array結合成string後重新丟回 for s in strTmp do strNew += s tmp[i] = strNew ) for i in 1 to tmp.count do ( --把物件名稱去除掉() if matchpattern tmp[i] pattern:"*(*)*" then ( strNew = "getNodeByName \""+tmp[i]+"\"" tmp[i] = strNew ) else ( tmp[i]="$"+tmp[i] ) if i != tmp.count then out += tmp[i]+", " else out += tmp[i]+" )" ) print out
訂閱:
文章 (Atom)