これは何?
フリップとスワップについての話です
吹き出しからはみ出しても整える気力がない!
承前
Houdini Advent Calendar 2017 13日目の記事でした。
遅れてすみませんでした。。。
この、UIの仕切り(Split)の真ん中にある
ペイン切り替えUIについてです。
上図の場合、真ん中の点々は「左クリック
で スワップ、alt + 左クリック
でオリエンテーションをフリップ」とあります。オリエンテーションをフリップ というのは、仕切りの向きを入れ替えるもので、左右に分割する仕切りであれば上下分割に、上下に分割する仕切りであれば左右分割に切り替わります。hou的には .splitRotate
ですかね
その点々の上下には三角印があって、向いた方向にペインを広げる(向いた側のペインをミニマイズする)スイッチになっています
特にスワップ(ペインの入れ替え)はワンクリックでドラスティックに見た目がかわってしまうので
ちょっと怖かったのですが、
克服するためにその挙動を確認してみたい というのが今回の趣旨です
「Build」デスクトップを観察
ペイン構成はデスクトップを切り替えるとごっそり入れ替えることができます。デフォルトは 「Build」 です。
(いろいろいじった後は、Reload Current Desktopで元に戻すことができます)
Buildデスクトップは大きく左右に分割されており、左にビューポートとツリービュー、右にパラメータとネットワークエディタがあります。
真ん中のSplitは「ビューポート/ツリービュー」と「パラメータ/ネットワーク」をスワップします。
同じ縦の仕切りでも、ツリービューのところにあるsplit(初期状態では閉じてある)はビューポートとツリービューをスワップします。
ツリービューと「ビューポート/パラメータ/ネットワーク」が入れ替わるということはなく、影響範囲が「ビューポート/ツリービュー」の範囲に収まります
つまりsplitにも階層関係、親子関係があると言えそうです
Pythonから確認してみる
デスクトップを取得してペインを取得して、splitSwapを試みます。
いま適用しているデスクトップはhou.ui.curDesktop()
で取得できます。そのデスクトップで開かれているペインは .panes()
メソッドで取得します。
bd = hou.ui.curDesktop()
for p_obj in bd.panes():
print(p_obj.currentTab())
<hou.TreeView panetab14>
<hou.SceneViewer panetab1>
<hou.Parm panetab5>
<hou.NetworkEditor panetab7>
ペインオブジェクトの.splitSwap()
メソッドでペインをスワップできます。
p1 = bd.panes()[0]
p1.splitSwap()
(▲)treeviewペインでスワップしてみたところ
上位のsplitをスワップしたい
ペインを取得してスワップしても、
同じ階層のペイン同士しかスワップできません。
どうしよう…
あるペインの上のsplitを取得するために、.getSplitParent()
ていうのがあります。
p1 = bd.panes()[0]
p1.getSplitParent()
<hou.Pane 3>
Pane 3
というのが返ってきました。これは単純に.panes()
したのでは取得できないペインです。
これを取得してスワップしてみると、
p3 = p1.getSplitParent()
p3.splitSwap()
「ビューポート/ツリービュー」と「パラメータ/ネットワーク」をスワップできました。
思うところ
こういうとき発生してしまうのが、splitが隣り合ってしまう 現象です。
「ビューポート/ツリービュー」の側は、左隅にツリービューがミニマイズされている状態でした。
これをフリップしたことで、「デスクトップを左右に割っていたsplit」と「ビューポート/ツリービューを割っていたsplit」が隣り合ってしまいました。
どっち押せば元に戻るのか一瞬わからなくて
ヒェーってなります。
左右を入れ替えるスワップはalt + 左クリック
によるローテートがありますが、
ペインを閉じた状態での「閉じてるペイント開いてるペインのスワップ」は、alt + 左クリック
がない、という違いがあります。
見た目も、よくみると上下の三角アイコンの向きが違います。
.desk
ファイルを見てみる
デスクトップを分割していっているのは、root {~~
以下のjsonみたいな構造のところです。
split
の直後に書かれている数字が、分割する割合です。
階層構造があって、一回割ってそのあとさらに一回ずつ割っていることがよくわかります。
例えばBuildデスクトップの中央の仕切りは0.677215
とのことですが、.getSplitFraction()
メソッドで取得できます。
p3 = p1.getSplitParent()
print( p3.getSplitFraction() )
ファイルに記載されているのよりも細かい数値で返ってきました(右下の小窓)
Build以外のデスクトップも見てみる
他のデスクトップで、どのsplitがメインか、そうじゃないかを見ていきたいと思います。
Animate
左のチャンネルリストのところが最上位、次に「ビューポート/アニメーションエディタ」「パラメータ/ネットワークエディタ」の間が仕切られています
Games
パラメータ/ネットワークの組み合わせが二つ用意されているのが特徴です。右側のそれはout
になっています。
最初の分割はど真ん中と分かりやすいですが、二次分割が二本、三次分割が三本あります。
Grooming
ほぼBuildと同じですが、ツリービューがなく、ペインタブも少なくなっています。
Image
こちらも分割はそんなに凝ってません
がGroomingよりさらに思い切った構成になりました。
LookDev
非常に複雑に分割されています。シェルフセットはシンプルですが。
右側の「三段データツリー」と「それ以外」がまず仕切られていて、
次に、左側は「パラメータ/ネットワーク」と「それ以外」、右側は「下段」と「上段・中段」が仕切られています。
左側、ビューポートの枠が上下に割ってあるsplitが実に四次めの分割です
Modeling
分割的にはBuildと全く同じですね。左側のフリップ閉じてあるやつがツリービューというのも同じです。
ペインタブやシェルフセットが違います
Output
Buildの、左側がレンダリング向けになったやつ、
みたいな構成です。シェルフセットも同じだし。
Technical
なんか分割もテクニカルです。
右に「パラメータ/ネットワーク」というのはいつも通りではあるんですが、上下が逆になってます。パラメータが下。なぜ。
そして左側にツリービュー、というのもBuildと一緒なんですが、デフォルトで開いた状態。
一番凝っているのがビューポートのところで、
Python Shellとで上下に仕切ったあと、
ビューポートの下側に「ジオメトリスプレッドシートとか」、上側に「レンダービュー」を仕舞っています。
この上下にしまわれたペインは、フリップすると窮屈になるので
スワップして、ビューポートと排他利用という運用が想定されていると感じます。
splitのスワップ・フリップの性質をもっとも活用したデスクトップな気がします。
Terrain
いまをときめく地形作成用のデスクトップです。
ImageやGroomingと同様 特定用途につきシンプルに という感じを受けますが、
ビューポートの右側に コンポジットビュー が仕舞ってあり、
Technicalの上下のあれらと同様、排他で使うっぽい感じが出てます。
Textport
分割一切なし、シェルフも閉じてあります。
求道者モード。
このデスクトップを選択するような人はマウスでちくちくネットワーク選択しないし、タブを切り替えたりしながらパラメータ入力なんてかったるいぜ、出た絵は外部のビューアーで好きにみるぜ
的なハードボイルドな精神が滲んでやまない。
まとめ
最後に、よく見かけるデスクトップも同じ文脈で触れてみます。
まず左右に分割して、右がおおきくネットワーク。パラメータは必要な時にp
キーから入力するスタイル
左側は、左端にツリービューをたたんでおいて、上段にビューポート、下段にジオメトリスプレッドシート。
……といろいろ眺めてきて、だいぶsplitを押すのも怖くなくなってきました。
リハビリは成功と言えそうです。
心残り
結局タイトルに載せていたのにもかかわらず Flip にはあまり触れずでした。
houモジュール からスワップしたり、分割比率を取ったり、最大化・最小化はできることが分かったのですが、
ただ開く**「Flip」**は、はて、どうやるんでしょうか。
houの抜け穴なんでしょうか。。。
次の記事は@yuya_torii
Houdini Engine For Maya を調べてみる
です!
参考
- Houdini 16.5 > Basics > Houdini user interface
http://www.sidefx.com/docs/houdini/basics/ui.html - Houdini 16.5 > Basics > Desktops and panes
http://www.sidefx.com/docs/houdini/basics/panes.html - hou.Pane class
http://www.sidefx.com/docs/houdini/hom/hou/Pane.html - hou.Desktop class
http://www.sidefx.com/docs/houdini/hom/hou/Desktop.html - hou.ui module
http://www.sidefx.com/docs/houdini/hom/hou/ui.html