忍者ブログ
個人的覚書き/つぶやきetc.
[1] [2]
×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

FBLayoutってそもそも何をしているのか、っていうのを見るためにリファレンスをゴソゴソしてみたところ冒頭に

User interface layout class.

という簡潔なお言葉が書かれていました。
まぁ、これで大体イメージは出来てしまうのですが、少し説明を読んでいくと

Layouts are responsible for managing areas of the screen called regions.

とあるので、どうやらリージョンってのを管理してるらしいと分かる。

UI components such as buttons, viewers, and edit boxes are bound to regions.

そして、このリージョンっていうものに、UIコンポーネント(ボタンとか)がバインドされると書いてあります。

In other words, when a UI component is bound to a region, the region defines how big it is and how it behaves when the layout is resized.

そして、リージョンの大きさやリサイズされたときのふるまいも設定するみたいです。
まぁ、ここまでは理解したのですがその後削っておけっていう。

Types of Layouts With the different types of plugins available, there are different kinds of layouts, depending on where the plugin fits into the MOTIONBUILDER architecture. The following types of layouts exist: Device layouts. Constraint layouts. Manipulator layouts. Shader layouts.

これはプラグイン関連じゃないのか。 ORSDKを丸コピしてるだけなので、稀に良くこういうPythonに関係ないと思われる記述があるが、たまに本当は関係あったりとか、完全に表記ミスじゃないときがあって、結局全部理解しておこうとORSDKのリファレンスも見ないといけなかったり。

横道にそれましたが、FBLayoutの実体はリージョンの管理である、というのが分かれば良いのじゃないかなぁ、と思います。
PR
リファレンスでFBToolを見てみると、FBLayoutを継承している。
そういえば、サンプルスクリプトを覗いていると、CreateToolからPopulateLayoutに投げられると
toolがmainLytだかlytだかの引数になってたのもうなずけます。

さて、またpyfbsdk_additions.pyを覗いてみます。
57行目から始まるのがLayoutに関する記述です。
ここにはButtonGroup、TabLayout、BoxLayout、HBoxLayout、VBoxLayout、GridLayoutに関する記述があります。
TabLayoutを見てみると、

class TabLayout(pyfbsdk.FBLayout):

となっており、FBLayoutを継承しているのがわかります。
他のLayoutを見ても同様です。HBoxとVBoxは直接継承してませんが、Boxを継承しているので同じです。
このように、FBLayoutっていうクラスがUI構築時、そこかしこに顔を覗かせているわけですが、これっていったい何でしょう。ってのが次回ちゃんと分かるといいなぁ。

ところで、pyfbsdk_additions.pyをながめていたら

_NotityToolListner()

って記述があるのだけど、このNotityってNotifyの間違いじゃないのだろうか。
MoBuのpythonリファレンスを見ると、CreateToolとCreateUniqueToolがあるのが分かります。
前回、コピペ用スケルトンを書いたが、そこではCreateUniqueToolを使っていました。
この2つの違いって何だろうかと思い、pyfbsdk_additions.pyを覗いてみます。
CreateUniqueToolの記述を見ると

def CreateUniqueTool ( name ):
    DestroyToolByName( name )
    return CreateTool( name )

これから作るツールの名前に競合するものを壊して、CreateToolを実行して戻り値を返すということをしています。

これは、MayaでUI作るとき、window名がバッティングしないように

if (maya.cmds.window( name , ex=1 )) :  maya.cmds.deleteUI( name )

とかやるのと一緒ですね。

というわけで、基本的にCreateUniqueToolを使用する方が、何かと不具合なくていいと思われますね。

ところでこのCreateTool。
まぁCreateToolっていうくらいだからToolをCreateしてくれてるんだよね、って思いますが実行しただけでウィンドウが表示されます。Tool = Windowってのがちょっと違和感ありますが、そこらへんのことについてはまた次回。

MoBu7.5までは、MoBuPython(pyfbsdk)上で提供されたUIというのはなかったが 2009からはUIが構築できます。と聞いてユーザーはMayaみたいに出来るようになるんだと、非常に喜んでいたわけですが、蓋を開けてみると、やっぱりMoBuはMoBuなんですね。 ということで、MoBu2009で実装されたUIですが、以下コピペ
###
from pyfbsdk import *
from pyfbsdk_additions import *
def PopulateLayout(tool):
### UI ①

def CreateTool():
tool = CreateUniqueTool("Name")
tool.StartSizeX = int     #②
tool.StartSizeY = int     #
PopulateLayout(tool)
ShowTool(tool)

CreateTool()
###

①のところにコントロールの設定とか色々書いていけばよい
他はそのままコピペでも。
②の部分はintを好きな数字にどうぞ。
最初にウィンドウ表示したときの幅(StartSizeX)と高さ(StartSizeY)です。
ちなみに、ウィンドウ最大値設定(MaxSizeX/MaxSizeY) と 最小値設定(MinSizeX/Y) というアトリビュートがありますが、最大値の方はバグなのか値を入れても反映されません。
こういうのは、MoBuのpythonではよくあるのでグっとこらえましょう。


忍者ブログ [PR]
カレンダー
06 2025/07 08
S M T W T F S
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
最新コメント
最新記事
最新トラックバック
プロフィール
HN:
No Name Ninja
性別:
非公開
ブログ内検索