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

Edet Soft 'Edet Paper World' making-of


Edet Soft 'Edet Paper World' making-of from GLASSWORKS Amsterdam on Vimeo.

なにこれすげーリグ!
おもしろい!
http://www.sublimetext.com/
 

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

2012/06/12

Unreal Engine 4



すげー。。。
UIおしゃれになってるね。

2012/05/11

インドア Google マップ

今のGoogleマップはこんなことできるのか。すげぇ。
動画も好き。

2012/05/04

Softimageの開発陣が移動???

http://goo.gl/L0UIY
なんかAutodeskの人事異動でSoftimageの開発チームがMayaチームに移動、って感じのことが書いてある気がする。。。
コメント見ても「この世の終わりだ」的なものが多いし。

大丈夫なのか???

2012/01/29

os.walk()? os.path.walk()???

先日フォルダの中を再帰的に処理する必要があったときに、先輩にこんな愚痴をこぼしました。
Pythonのwalk()ってわかりにくいですよね。」
walk()というのはあるフォルダの中を再帰的に処理するためのメソッドです。
すると先輩は
「え?そう?わかりやすいと思うけど。」

まじですか。。。
俺がバカなだけですか???
と思っていたら、どうやらお互い違うもののことを言っていたらしいです。 

Pythonにはos.walk()とos.path.walk()があるって知ってました?
自分がわかりにくいと言ったのはos.path.walk()。
先輩がわかりやすいと言ったのはos.walk()

os.path.walk()はこんな感じ
C:\Python27\Lib\xmlの中のすべてのファイルを表示する
import os

## dirpathの中のパスをすべて表示する関数
#  os.path.walkの中で使うことで引数に以下の情報が入る
#
#  arg      = walk()の第3引数で指定できる自由になる引数(ここではNone)
#  dirpath  = 現在処理中のディレクトリパス
#  namelist = 現在処理中のディレクトリ内のすべてのアイテムの名前のリスト
#
def printall(arg, dirname, names):
    # 処理中のディレクトリパスとアイテム名を繋げたものがファイルだったら表示
    for name in names:
        fullpath = os.path.join(dirname, name)
        if os.path.isfile(fullpath):
            print fullpath


# ↑のprintall関数を指定してos.path.walk()を実行
os.path.walk(r'C:\Python27\Lib\xml', printall, None)
結果はこんな感じ(要素数:39)
# INFO : C:\Python27\Lib\xml\dom
# INFO : C:\Python27\Lib\xml\etree
# INFO : C:\Python27\Lib\xml\parsers
# INFO : C:\Python27\Lib\xml\sax
# INFO : C:\Python27\Lib\xml\__init__.py
# INFO : C:\Python27\Lib\xml\__init__.pyc
...
これってわかりにくいですよね。。。
walk()に自作の関数を食わせるって。
walk()に食わせた引数が自作関数の中でどう使われるのかも覚えにくいし。
os.walk()はどうかというとこんな感じ
import os

# os.walk()はディレクトリを受け取って中身を
# (処理中のディレクトリパス, その中のディレクトリリスト, ファイルリスト)というタプルを返す
# それをdirpath, dirnames, filenamesに割り振ってfilesの中身をまわしてdirpathと繋げて表示
#
for dirpath, dirnames, filenames in os.walk(r'C:\Python27\Lib\xml'):
    for f in filenames:
        print os.path.join(dirpath, f)
結果はこんな感じ(要素数:39) 順番は異なりますが要素数を見るとどちらもすべてのファイルを検出できてそう。
# INFO : C:\Python27\Lib\xml\__init__.py
# INFO : C:\Python27\Lib\xml\__init__.pyc
# INFO : C:\Python27\Lib\xml\dom\domreg.py
# INFO : C:\Python27\Lib\xml\dom\domreg.pyc
# INFO : C:\Python27\Lib\xml\dom\expatbuilder.py
# INFO : C:\Python27\Lib\xml\dom\minicompat.py
...
うーん、シンプル。。。 こりゃ確かにわかりやすいわ。 今後はこちら一択ですね。 ところでPython2.7のドキュメントを見るとos.path.walk()は廃止予定で3.0ではすでに削除されてるとか。。。 知らなかった。。。 Pythonクイックリファレンスはすごく詳しく書いてあって良いんですが2.3までのことしか書いてないので新しい情報は別から得ないとなぁ。