標準機能にあると思って探したけどどうやらないみたいなので書きました。
インスタンスモデルを普通のモデルに戻すスクリプトです。
マスターモデルを選択して実行。
とりあえず動くけど直したいところは結構あります。
とりあえずメモってことで。
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も同様なので修正したいです。
ま、時間があるときにまた直すかも。