MotionBuilder: Python: 選択されている Component 取得

前に書いた、職場のモーション担当の人が MotionBuilder用に Python を覚えるという事で
自分がサンプルコードを書いてそれを見ながら、モーション担当の人が、あーでもない、こーでもないといじっております。

しかし、これ日本語の資料殆どないね。

元々Pythonが出来る人じゃないと、難易度が凄い高い。
しかも、日本人でPython出来る人って少ないから、更に難易度高そう。

他にも、MotionBuilder用に Python 覚えたい人いるかもしれないので、サンプルなんぞを。

選択されている Component の名前表示 スクリプト

from pyfbsdk import FBSystem

for lComp in FBSystem().Scene.Components:
    if lComp != None and lComp.Selected:
        # MotionBuilder 2009
        print lComp.LongName
        # MotionBuilder 7.5
        #print lComp.ShortName

バージョンによって、名前の参照方法が違うみたい。
LongName は、 FBModel 以下の階層に存在していて、 Unique name and namespace.
Name は、FBComponent 以下の階層に存在していて、 Unique name.

で、選択されているComponentを取得する方法はもう一通りある。

from pyfbsdk import FBModelList, FBGetSelectedModels

sels = FBModelList()
FBGetSelectedModels(sels, None, True)

for s in sels :
    # MotionBuilder 2009
    print s.Name
    # MotionBuilder 7.5
    #print s.ShortName

# 追記
MotionBuilder 7.5 と 2009 で挙動が違ったので報告。

FBSystem().Scene.Components

で、取得するコンポーネント一覧が 2009 だと FBModel オブジェクトを返していたのに
7.5 だと、 FBComponent オブジェクトを返してくる。
FBModel は FBVector3d などの情報を持っているけれど、 FBComponent は持っていないので
処理に必要な情報が足りなかった。

というわけで、バージョンによって微妙に挙動が違う。

MotionBuilder 使っている職場の人の話だと、2009 は、Pythonスクリプト強化とラグドール機能の追加がメインらしいけれど
Pythonスクリプト組める人が少ない上に、ラグドールは殆ど使っている人が居ないらしいので、操作系が使いやすい 7.5 の方が良いのだそうな。
という訳で、7.5 向きのスクリプト情報が多くなるかも。

Leave a comment

0 Comments.

Leave a Reply


[ Ctrl + Enter ]

Spam Protection by WP-SpamFree