MotionBuilder Scripts - Viewer切替
目標
Camera Switcherを使わずに、ViewerのCameraを変更する。
使用例
リストからCameraの名前を選択して、Viewerの表示を切り替え
解説
FBApplication.SwitchViewerCamera()
は現在廃止されている[1]ため、FBRendererクラスを用いる。
このクラスはPythonからインスタンス化できない[2]ので、FBSceneクラスのRenderer
属性から得る。
from pyfbsdk import FBSystem
renderer = FBSystem().Scene.Renderer
このクラスでは、Paneという語が登場する。ペインは「画面上のウィンドウを複数に分割した個々の領域」の意[3]らしい。FBRendererにおいては、Viewer内でモデルが映っている場所を指していると思われる。
GetPaneCount() で現在の画面分割数を得る。
PaneCount = renderer.GetPaneCount()
2分割されているので「2」が返される
SetPaneCount() で画面の分割数を設定する。「Get」と付くメンバ関数には、「Set」から始まる対応したメンバ関数が大抵存在する。
Paneには、Indexという概念がある。Pane毎に情報を分けるためであろうインデックスで、GetSelectedPaneIndex() で現在アクティブ(例えばViewer上でクリックされた状態)なPaneのインデックスを得る。
ActivePaneIndex = renderer.GetSelectedPaneIndex()
このインデックスは他のメンバ関数でも登場する。
-
GetCameraInPane(index)
指定したインデックスのPaneにおいて情報を表示しているCameraの名前を得る -
SetSchematicViewInPane(index, bool)
指定したインデックスのPaneにてSchematic Viewの表示・非表示を切り替える。True
で表示、False
で非表示 -
GetSchematicViewPaneIndex()
Schematic Viewが表示されているPaneのインデックスを得る。表示されていない場合は-1
が返される。
Activeだった右側のビューをSchematic Viewerに切り替え
FBSceneクラスのCameras
属性でデフォルトのProducer Cameraを得れば、SetCameraInPane(camera, index) で指定したインデックスのPaneに指定したCameraからのビューを表示できる。
# Producer Top Cameraに切り替え
ActivePaneIndex = renderer.GetSelectedPaneIndex()
renderer.SetSchematicViewInPane(ActivePaneIndex, False)
renderer.SetCameraInPane(FBSystem().Scene.Cameras[5], ActivePaneIndex)
Activeだった右側のPaneを上からのビューに切り替え
ソースコード
-
SwitchViewerCamera() is missing in Python API in Motionbuilder ↩︎
-
"Client code cannot instantiate objects of this class. The FBSystem and FBScene classes provide access to the current renderer." - FBRenderer Class Reference ↩︎
Discussion