ラベル memo の投稿を表示しています。 すべての投稿を表示
ラベル memo の投稿を表示しています。 すべての投稿を表示

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も同様なので修正したいです。

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

2012/06/13

http://www.sublimetext.com/
 

こんなテキストエディタあったんだなぁ。
シンプルで使いやすそう。
WebページにはBuyって書いてあるから無料ではないのかな?
ちゃんと読んでみよう。

2011/12/26

シーン中のすべての~を取得

ずっと昔にどっかで見て使ったけどすっかり忘れちゃってた方法を、必要にかられて思い出しました。
次はもうちょっとすばやく思い出せるようにメモ。
シーン中のすべてのエクスプレッション、とかすべてのコンストレイン、とか探したくならないですか?
そんなときには「Application.FindObjects」らしいです。

シーン中のすべてのエクスプレッションを取得するには以下のようにするそうです。過去の自分によれば。
from siutils import *
oExps = si.FindObjects('', '{12723EB2-7DDB-11D0-A57F-00A0C91412DE}')
for i in oExps:
    print i.Definition.Value
すべてのPoseコンストレインはこう。
from siutils import *
oPoseCnss = si.FindObjects('', '{D42BBF71-3C47-11D2-8B42-00A024EE586F}')
for i in oPoseCnss:
    print i
この意味不明な文字はsiObjectCLSIDというものらしいです。
以下で選択オブジェクトのsiObjectCLSIDが取得できます。
from siutils import *
repo = siut.DataRepository
print repo.GetIdentifier(si.Selection(0), 3)

と、ここまで書いておそらくjunkiさんのページで見たのだと思い出しました。
ほんとにいつもお世話になりっぱなしです。

2011/09/16

メソッドからクラス名を取得2

またまた自分用メモ。
こういうやり方もあるらしい。
これだとsys._getframe()の引数を変えることでクラスに限らずどんどんframeオブジェクトとやらを上がっていけるみたい。
import sys

def test():
	print sys._getframe(1).f_code.co_name

class TestClass:
    test()
 
T = TestClass()

2011/09/14

メソッドからクラス名を取得

自分メモ。
自分を呼び出したインスタンスのクラス名を表示。
class TestClass:
	def test(self):
		print locals()['self'].__class__.__name__

class TestClass2(TestClass):
	pass
		
T = TestClass()
T.test()

T = TestClass2()
T.test()

9/25 追記:
べつにこれでいいじゃん。。。
class TestClass:
	def test(self):
		print self.__class__.__name__

class TestClass2(TestClass):
	pass
		
T = TestClass()
T.test()

T = TestClass2()
T.test()
ま、なんかに使えるかな。きっと。