Houdini 20.0 シェルフツール

シェルフの設定ファイルフォーマット shelf tool

On this page

Note

Houdiniでシェルフを編集する方が簡単ですが、大きなサイトでは、シェルフファイルを同時にバッチで直接、編集/置換する方が便利です。

概要

Houdiniは、HOUDINI_TOOLBAR_PATH環境変数で指定したパス内にある.shelf拡張子のファイルを読み込みます。デフォルトでは、HOUDINI_PATH/toolbarになっているので、例えば、$HOME/houdiniX.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>

これはシェルフ設定ファイルのトップレベルのエレメントです。このエレメント内にshelfSettoolshelftoolのエレメントを含めることができます。

<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。helpURLhelpTextの両方が存在し、空っぽでなかった場合、HoudiniはhelpURLを使います。

<toolSubmenu>

(toolの任意のサブエレメント) /文字で区切ったメニューラベルのリストで、ツールを⇥ Tabメニューのどのサブメニューに表示させるのか指定します。

例えば、<toolSubmenu>My Tools/Shaping</toolSubmenu>と記述して、ツールを⇥ Tabメニューの My Tools ▸ Shaping サブメニューに表示させる場合は、以下のようにします。

<shelfDocument>
    <tool name="sample_tool" label="Sample Tool" icon="PLASMA_App">
        <script scriptType="python">...</script>
        <toolSubmenu>Fee/Fi/Fo/Fum</toolSubmenu>
        <toolMenuContext name="network">
                <contextNetType>OBJ</contextNetType>
        </toolMenuContext>
    </tool>
</shelfDocument>
  • ツールを⇥ Tabメニューに表示させる場合は、ツールにtoolMenuContextがなければならないことに注意してください。

  • ラベルマッチングは、大文字・小文字の区別があります。

  • 存在しないサブメニューは、作成されます。

<toolMenuContext>

(toolのゼロ個以上のサブエレメント) このツールを⇥ Tabメニューのどのコンテキストに表示するのか指定します。

nameアトリビュート

どのペインタイプの⇥ Tabメニューにツールを表示するのか指定します。有効な値は、viewer(ユーザがビューア内で⇥ Tabを押します)、network(ユーザがネットワークエディタで⇥ Tabを押します)、pop_viewer(パーティクルネットワークを見る時のビューア)、cop_viewer(コンポジットネットワークを見る時のビューア)。

ツールを表示させたいペインタイプ(nameアトリビュートで指定)毎にtoolMenuContextエレメントを別々に指定する必要があることに注意してください。例えば、3Dビューアとネットワークエディタの両方の⇥ Tabメニューにツールを表示させたい場合は、<toolMenuContext name="viewer">エレメントと<toolMenuContext name="network">エレメントが必要です。

<contextNetType>

(toolMenuContextのゼロ個以上のサブエレメント)このタイプのネットワークにのみツールを⇥ Tabメニューで表示します。contextNetTypeエレメントを複数指定すれば、複数のネットワークタイプにツールを表示させることができます。

このエレメントのテキストは、ネットワークタイプです。設定可能な値は、OBJ(シーンレベル)、SOP(ジオメトリネットワーク)、POP(パーティクルネットワーク)、DOP(ダイナミクスネットワーク)、CHOPROP(レンダーネットワーク)、SHOP(マテリアルネットワーク)、COP2(コンポジットネットワーク)、VOPVOPNETです。

例えば、オブジェクト、ジオメトリ、パーティクルのネットワークエディタにのみ⇥ Tabメニューにツールを表示させる場合:

<toolMenuContext name="network">
    <contextNetType>OBJ</contextNetType>
    <contextNetType>SOP</contextNetType>
    <contextNetType>POP</contextNetType>
</toolMenuContext>

<contextOpType>

(toolMenuContextのゼロ個以上のサブエレメント) これをtoolMenuContextのサブエレメントとして指定する場合、このタイプのノードを作成可能なネットワークにのみ⇥ Tabメニューにツールを表示します。

このエレメントのテキストは、Object/geoまたはSop/copyのようにノード固有です。

両方とも指定した場合、contextOpTypecontextNetTypeを上書きします。以下のサンプルでは、ツールはジオメトリ(SOP)ネットワークの⇥ Tabメニューに表示されません。なぜなら、contextNetTypeが一致しても、contextOpTypeが一致していないからです。

<toolMenuContext name="network">
    <contextOpType>Object/my_asset</contextOpType>
    <contextNetType>OBJ</contextNetType>
    <contextNetType>SOP</contextNetType>
    <contextNetType>POP</contextNetType>
</toolMenuContext>

<readOnly>

これを空っぽのエレメントとしてshelfSettoolshelftoolエレメントに追加することで、ユーザがタブセットを編集できないようにすることができます。

<?xml version="1.0" encoding="utf-8" ?>
<shelfDocument>
    <tool name="scribble" label="Scribble">
        <readOnly/>
        <script scriptType="python">
        ...
        </script>
    </tool>
</shelfDocument>

デフォルトのシェルフタブを変更する

パス内の後の方のファイルのシェルフセット、シェルフ、ツールが、 エレメントの名前のアトリビュート で初期の定義を置換します。シェルフ設定ファイルのファイル名は同じにします。

デフォルトのシェルフタブだけを(ユーザ設定ファイルで同じ名前のシェルフタブを指定することで) 置換 することができます。特定のツールをデフォルトのシェルフタブに追加したり、削除することはできません。

デフォルトのシェルフタブの1つを修正する:

  1. タブを定義した<toolshelf>エレメントを含むデフォルトのシェルフファイルを$HFS/houdini/toolbar/ShelfDefinitions.shelfまたは$HFS/houdini/toolbar/ShelfDefinitions.master_shelfで探します。テキストエディタでファイルを開きます。

  2. シェルフタブを定義した<toolshelf>エレメントを選択して、クリップボードにコピーします。

  3. 新しいファイルで始めるなら、XML Declarationと<shelfDocument>エレメントを記述して、コピーした<toolshelf>エレメントを貼り付けます。

  4. <memberTool>エレメントを削除または追加して、どのツールをシェルフタブに表示するのか設定します。

  5. Houdiniのtoolbarパスのどこかにファイルを保存します。例えば、$HOME/houdiniX.Y/toolbar/mytools.shelf

役立つ情報

  • Houdiniを再起動することなくシェルフファイルを再読み込みするには、hou.shelves.reloadFilesを使用します。単一ファイルを読み込むには、hou.shelves.loadFileを使用します。

See also

シェルフツール

シェルフの使い方

テクニカル