| On this page | 
Note
Houdiniでシェルフを編集する方が簡単ですが、大きなサイトでは、シェルフファイルを同時にバッチで直接、編集/置換する方が便利です。
概要 ¶
Houdiniは、HOUDINI_TOOLBAR_PATH環境変数で指定したパス内にある.shelf拡張子のファイルを読み込みます。デフォルトでは、HOUDINI_PATH/toolbarになっているので、例えば、$HOME/houdini‹X›.‹Y›/toolbarの中にあるファイルを$HFS/houdini/toolbarにある“出荷時の”ファイルに上書きすることができます。
シェルフ設定ファイルは、XMLフォーマットです。各タグに関する情報は以下を参照してください。また、そこには$HFS/houdini/toolbar/shelf.xsdというXSDスキーマファイルがあり、これを使って独自のXMLシェルフ定義ファイルを有効化することができます。
<?xml version="1.0" encoding="UTF-8"?> <shelfDocument> <shelfSet name="some_shelf_set" label="Some Shelf Set"> <memberToolshelf name="some_shelf"/> </shelfSet> <toolshelf name="some_shelf" label="Some Shelf"> <memberTool name="some_tool"/> </toolshelf> <tool name="sample_tool" label="Sample Tool" icon="PLASMA_App"> <helpText><![CDATA[the main help]]></helpText> <helpURL>help URL</helpURL> <toolMenuContext name="viewer"> <contextNetType>OBJ</contextNetType> <contextNetType>SOP</contextNetType> <contextNetType>POP</contextNetType> <contextNetType>DOP</contextNetType> </toolMenuContext> <toolMenuContext name="pop_viewer"> <contextNetType>POP</contextNetType> </toolMenuContext> <toolMenuContext name="cop_viewer"> <contextNetType>COP2</contextNetType> </toolMenuContext> <toolMenuContext name="network"> <contextOpType>table/operator</contextOpType> <contextNetType>OBJ</contextNetType> <contextNetType>SOP</contextNetType> <contextNetType>POP</contextNetType> <contextNetType>CHOP</contextNetType> <contextNetType>ROP</contextNetType> <contextNetType>SHOP</contextNetType> <contextNetType>COP2</contextNetType> <contextNetType>VOP</contextNetType> <contextNetType>VOPNET</contextNetType> <contextNetType>DOP</contextNetType> </toolMenuContext> <toolSubmenu>first Submenu</toolSubmenu> <toolSubmenu>second submenu</toolSubmenu> <script scriptType="python"><![CDATA[script for the tool]]></script> </tool> </shelfDocument>
タグ ¶
<shelfDocument>
        
これはシェルフ設定ファイルのトップレベルのエレメントです。このエレメント内にshelfSet、toolshelf、toolのエレメントを含めることができます。
<shelfSet>
        
ユーザがグループとして読み込むことができるシェルフセットを定義します。このエレメント内にはmemberToolshelfを含めます。
nameアトリビュート
        
シェルフセットの内部名。パス内の後の方のファイルが同じ名前のシェルフセットを持っていれば、このファイルを置換します。
labelアトリビュート
        
ユーザインターフェースで表示するシェルフセットの人が解読可能なラベル名。
任意で<readOnly/>サブエレメントを追加すれば、ユーザがHoudiniでタブセットを編集できないようにすることができます。
<memberToolshelf>
        
(shelfSetのゼロ個以上のサブエレメント)シェルフセットの一部としてシェルフタブを指定します。
nameアトリビュート
        
toolshelfで定義したシェルフタブの名前。名前を付けたタブは、このファイル、または他のパス上のシェルフ設定ファイルで定義することができます。
<toolshelf>
        
シェルフタブ上にツールを定義します。このエレメント内にはmemberToolエレメントを含めます。
nameアトリビュート
        
シェルフタブの内部名。パス内の後の方のファイルが同じ名前のタブを持っていれば、このファイルを置換します。
labelアトリビュート
        
ユーザインターフェースで表示するタブの人が解読可能なラベル名。
任意で<readOnly/>サブエレメントを追加すれば、ユーザがHoudiniでシェルフタブを編集できないようにすることができます。
<memberTool>
        
(toolshelfのゼロ個以上のサブエレメント)シェルフタブの一部としてツールを指定します。
nameアトリビュート
        
toolエレメントで定義したツールの名前。名前を付けたツールは、このファイル、または他のパス上のシェルフ設定ファイルで定義することができます。
<tool>
        
シェルフツールを定義します。
nameアトリビュート
        
ツールの内部名。パス内の後の方のファイルが同じ名前のツールを持っていれば、このファイルを置換します。
labelアトリビュート
        
ユーザインターフェースで表示するツールの人が解読可能なラベル名。
iconアトリビュート
        
(任意)画像ファイルへのパス(またはSOP_copyなどの内部のHoudiniアイコン参照)。
このエレメントには、ユーザがツールをクリックした時に実行するスクリプトを指定するscriptサブエレメントがなければ なりません 。
任意で<readOnly/>サブエレメントを追加すれば、ユーザがHoudiniでツールを編集できないようにすることができます。
toolエレメントのtoolMenuContextエレメント内にcontextNetTypeまたはcontextOpTypeエレメントを指定していない場合、ツールが⇥ Tabメニューに表示されません。
<script>
        
(toolで必須のサブエレメント) ツールをクリックした時に実行するPythonスクリプトまたはHScript。
通常では、CDATAタグをスクリプトにラップすることで、スクリプト内の<、>、&の文字が原因でXMLエラーが起きることを防止します。
scriptTypeアトリビュート
        
pythonまたはhscript。
<shelfDocument> <tool name="sample_tool" label="Sample Tool" icon="PLASMA_App"> <script scriptType="python"><![CDATA[ hou.ui.displayMessage("Hello world!") ]]></script> </tool> </shelfDocument>
<helpText>
        
(toolの任意のサブエレメント) ユーザがツールのヘルプを見る時にブラウザが表示するwikiフォーマットまたはHTMLのヘルプ。これは、helpURLタグで上書きされます。
通常では、CDATAタグをヘルプテキストにラップすることで、ヘルプ内の<、>、&の文字が原因でXMLエラーが起きることを防止します。
<helpURL>
        
(toolの任意のサブエレメント) ユーザがツールのヘルプを見る時にブラウザが読み込むURL。helpURLとhelpTextの両方が存在し、空っぽでなかった場合、HoudiniはhelpURLを使います。
<contextNetType>
        
(toolMenuContextのゼロ個以上のサブエレメント)このタイプのネットワークにのみツールを⇥ Tabメニューで表示します。contextNetTypeエレメントを複数指定すれば、複数のネットワークタイプにツールを表示させることができます。
このエレメントのテキストは、ネットワークタイプです。設定可能な値は、OBJ(シーンレベル)、SOP(ジオメトリネットワーク)、POP(パーティクルネットワーク)、DOP(ダイナミクスネットワーク)、CHOP、ROP(レンダーネットワーク)、SHOP(マテリアルネットワーク)、COP2(コンポジットネットワーク)、VOP、VOPNETです。
例えば、オブジェクト、ジオメトリ、パーティクルのネットワークエディタにのみ⇥ Tabメニューにツールを表示させる場合:
<toolMenuContext name="network"> <contextNetType>OBJ</contextNetType> <contextNetType>SOP</contextNetType> <contextNetType>POP</contextNetType> </toolMenuContext>
<contextOpType>
        
(toolMenuContextのゼロ個以上のサブエレメント) これをtoolMenuContextのサブエレメントとして指定する場合、このタイプのノードを作成可能なネットワークにのみ⇥ Tabメニューにツールを表示します。
このエレメントのテキストは、Object/geoまたはSop/copyのようにノード固有です。
両方とも指定した場合、contextOpTypeはcontextNetTypeを上書きします。以下のサンプルでは、ツールはジオメトリ(SOP)ネットワークの⇥ Tabメニューに表示されません。なぜなら、contextNetTypeが一致しても、contextOpTypeが一致していないからです。
<toolMenuContext name="network"> <contextOpType>Object/my_asset</contextOpType> <contextNetType>OBJ</contextNetType> <contextNetType>SOP</contextNetType> <contextNetType>POP</contextNetType> </toolMenuContext>
<readOnly>
        
これを空っぽのエレメントとしてshelfSet、toolshelf、toolエレメントに追加することで、ユーザがタブセットを編集できないようにすることができます。
<?xml version="1.0" encoding="utf-8" ?> <shelfDocument> <tool name="scribble" label="Scribble"> <readOnly/> <script scriptType="python"> ... </script> </tool> </shelfDocument>
デフォルトのシェルフタブを変更する ¶
パス内の後の方のファイルのシェルフセット、シェルフ、ツールが、 エレメントの名前のアトリビュート で初期の定義を置換します。シェルフ設定ファイルのファイル名は同じにします。
デフォルトのシェルフタブだけを(ユーザ設定ファイルで同じ名前のシェルフタブを指定することで) 置換 することができます。特定のツールをデフォルトのシェルフタブに追加したり、削除することはできません。
デフォルトのシェルフタブの1つを修正する:
- 
        タブを定義した <toolshelf>エレメントを含むデフォルトのシェルフファイルを$HFS/houdini/toolbar/ShelfDefinitions.shelfまたは$HFS/houdini/toolbar/ShelfDefinitions.master_shelfで探します。テキストエディタでファイルを開きます。
- 
        シェルフタブを定義した <toolshelf>エレメントを選択して、クリップボードにコピーします。
- 
        新しいファイルで始めるなら、XML Declarationと <shelfDocument>エレメントを記述して、コピーした<toolshelf>エレメントを貼り付けます。
- 
        <memberTool>エレメントを削除または追加して、どのツールをシェルフタブに表示するのか設定します。
- 
        Houdiniの toolbarパスのどこかにファイルを保存します。例えば、$HOME/houdini‹X›.‹Y›/toolbar/mytools.shelf。
役立つ情報 ¶
- 
        
        Houdiniを再起動することなくシェルフファイルを再読み込みするには、hou.shelves.reloadFilesを使用します。単一ファイルを読み込むには、hou.shelves.loadFileを使用します。 
| See also |