このコマンド自体はドッキングと関係ないのですが、いろいろ調べている時に目についたので、ついでに紹介してみようと思います。
まず、このscriptedPanelコマンドを使う前に、scriptedPanelTypeコマンドで、コールバックを設定する必要があります。そこもふまえて、サンプルコードにはこんなのが載っています。
// This second example shows how to use the saveState and copyState callbacks. // saveStateCallback enables a panel to restore its state from a saved scene file. // copyStateCallback enables a 'tear off copy' of a panel to copy its state from the original. // print statements have been left in as an instructional aid - you would remove these in a // real use case. global proc meCreateCallback(string $panelName) { // Create callback: create the editor. print( "create " + $panelName + "\n" ); string $me = $panelName + "_me"; $me = `modelEditor -unParent $me`; modelEditor -e -da "smoothShaded" -wos 1 $me; } global proc meInitCallback(string $panelName) { // Init callback: allow re-initialisation (not used here). print( "init " + $panelName + "\n" ); } global proc meAddCallback(string $panelName) { // Add callback: add editor into a panel layout. // In this example we add a formLayout and two buttons, // allowing the user to change the "wireframe on shaded" mode of the viewer. print( "add " + $panelName + "\n" ); string $me = $panelName + "_me"; string $layout = `formLayout`; modelEditor -e -parent $layout $me; string $cmd = "modelEditor -e -wos 1 " + $me; string $wos1 = `button -parent $layout -label "WOS 1" -c $cmd`; $cmd = "modelEditor -e -wos 0 " + $me; string $wos0 = `button -parent $layout -label "WOS 0" -c $cmd`; formLayout -e -af $wos1 "top" 0 -af $wos1 "left" 0 $layout; formLayout -e -af $wos0 "left" 0 -ac $wos0 "top" 0 $wos1 $layout; formLayout -e -af $me "top" 0 -af $me "bottom" 0 -ac $me "left" 5 $wos1 -af $me "right" 0 $layout; } global proc meRemoveCallback(string $panelName) { // Remove callback: unparent the editor from the layout. print( "remove " + $panelName + "\n" ); string $me = $panelName + "_me"; modelEditor -e -unParent $me; } global proc meDeleteCallback(string $panelName) { // Delete callback: delete the editor. print( "delete " + $panelName + "\n" ); string $me = $panelName + "_me"; deleteUI $me; } global proc string meSaveStateCallback(string $panelName) { // Save state callback: return a MEL command string that will restore the state of a recreated panel. print( "save state " + $panelName + "\n" ); string $me = $panelName + "_me"; int $wos = `modelEditor -q -wos $me`; return "modelEditor -e -wos " + $wos + " " + $me; } global proc meCopyStateCallback(string $panelName, string $newPanelName) { // Copy state callback: copy the editor's state to the new instance of the panel type. print( "copy state " + $panelName + ", " + $newPanelName + "\n" ); string $me = $panelName + "_me"; string $newMe = $newPanelName + "_me"; int $wos = `modelEditor -q -wos $me`; modelEditor -e -wos $wos $newMe; } // Create the scripted panel type. string $spType = ` scriptedPanelType -ccb meCreateCallback -icb meInitCallback -acb meAddCallback -rcb meRemoveCallback -dcb meDeleteCallback -scb meSaveStateCallback -ocb meCopyStateCallback meSpType `; print( "type is " + $spType + "\n" ); // As a test, create a window containing an instance of our new panel type. // This panel will then be selectable from the Panels menu of any other panel. // You can also create new instances of the scripted panel type via the Panel Editor, // which again is available from the Panels menu of all panels. window; string $form = `formLayout`; string $p = `scriptedPanel -type $spType -label "test panel"`; formLayout -e -af $p "top" 0 -af $p "bottom" 0 -af $p "left" 0 -af $p "right" 0 $form; showWindow;
スクリプトエディタで実行すると、こんなウィンドウが2つ出てきます。
最初の方の global procは、70行目からの
scriptedPanelTypeで宣言しているコールバック用です。
88行目の scriptedPanelコマンドで、scriptedPanelTypeを配置していますね。
配置と同時に、scriptedPanelTypeの-acbフラグで指定された
meAddCallbackが実行され、スライダーやラジオボタンが作られます。
で、次のコードを実行するとウィンドウの内容が入れ替わります。
scriptedPanel -e -unParent sampleScriptedPanel; scriptedPanel -e -parent "sampleWin2|frm" sampleScriptedPanel;
元に戻すには、こんなコード。
scriptedPanel -e -unParent sampleScriptedPanel; scriptedPanel -e -parent "sampleWin|frm" sampleScriptedPanel;
かなり手軽に入れ替えられ、コールバックを設定すれば、初期化や設定値の保存、レイアウトの保存などいろいろなことが出来ます。まぁ、windowコマンドやdockControlコマンドでも可能ですが、コマンドヘルプを読むと、それらよりも細かく設定できる感じ。
レイアウトを作成するのは、createCallbackではなく addCallback
のプロシージャというのが少しややこしいかも。
サンプルだけでは分かりづらいので、実際使っているmayaのエディタを参考にするのが手っ取り早いのかもしれません。
いろいろソースを見た感じでは、hyperShadePanel.melを解析するのが一番参考になりました。
複雑なので、実際使ってツールを作ることは無いかもしれないです。
0 件のコメント:
コメントを投稿