2012/12/21

インスタンスモデルを普通のモデルに戻す

すげー久しぶりの更新。。。

標準機能にあると思って探したけどどうやらないみたいなので書きました。
インスタンスモデルを普通のモデルに戻すスクリプトです。

マスターモデルを選択して実行。

とりあえず動くけど直したいところは結構あります。
とりあえずメモってことで。
from siutils import si, disp

def GetInstances(oMdl):
    gInsts = oMdl.Groups('InstanceGroup')
    return gInsts.Members
    
def ResotreInstance(oInst, oMstr=None, bDel=True):
    if not oMstr:
        oMstr = oInst.InstanceMaster
    sInstName = oInst.Name
    oParent   = oInst.Parent
    oTmp = si.Duplicate("B:"+oMstr.Name, "", 2, 1, 1, 0, 2, 1, 0, 1, "", "", "", "", "", "", "", "", "", "", 0)(0)
    oTmp.Kinematics.Global.Transform = oInst.Kinematics.Global.Transform
    oTmp = disp(oTmp)
    if bDel:
        si.DeleteObj(oInst)
    oTmp.Name = sInstName
    oParent.AddChild(oTmp)
    return oTmp
 

oMdl = si.Selection(0)
if not oMdl.Type == '#model':
    oMdl = oMdl.Model

oInsts = GetInstances(oMdl)
for oInst in oInsts:
    ResotreInstance(oInst, oMdl, False)
si.DeleteObj(oInsts)

マスターモデルをデュプリケイトして位置と名前と親を合わせただけですね。
毎回DeleteObjすると効率が悪いので外に出していっぺんにやりましたが、Duplicateも同様なので修正したいです。

ま、時間があるときにまた直すかも。