No More Retake

3DCG屋さん向けTips&Referenceサイト

メニュー

Houdini Custom:OPmenu

OPmenuというファイルを用いると、ノードの右クリックメニューを追加できる。

Hoduini_Cusotom_v003

以前書いたFBresと同様、Houdini起動時に、環境変数HOUDINI_PATHで指定されたパスにあるOPmenuファイルを参照します(たぶん)
HOUDINI_PATHが設定されていなければ、$HOME/houdinixx.xを参照します(たぶん)
(デフォルトだとHOUDINI_PATHは設定されてなかった気がします)
($HOMEはwindowsの場合は、”C:\Users\<username>\Documents\”かな)

参照先のパスに、OPmenuファイルがない場合は、”Opmenu”ファイルを作成して中身書きます(拡張子なし)
$HHにファイルフォーマットの参考があります。
($HHは、Houdiniインストールパス以下にあるhoudiniディレクトリのこと、$HFS/houdiniと同義)

ためしに、$HHにあるOPmenuを開いてみるとこんなかんじ。


# This file allows you to add menu items to the RMB popup menu for various
# operator types. Each line consists of four entries:
# 1. The operator type name. This can include wildcards.
# 2. The hotkey name. This should be a single unique word.
# 3. The menu item text.
# 4. The path to the script to run when the menu item is chosen.
# The script path can be specified relative to the OPmenu file.
# When the script is run, the full path of the node for which the menu item
# was chosen is passed as the first argument.
#
# The first argument can also start with the keyword "Expr:". If so, the rest
# of the first argument is treated as an expression that gets evaluated when
# the menu is brought up. If the expression evaluates to the string "1", then
# the menu item will appear. Two local variables are defined when executing
# this expressions: $opmenu_optype is the operator table and type name (such
# as "Object/geo"). $opmenu_oppath is the full path name to the node that is
# bringing up the menu (such as "/obj/light1").

# The following line adds a script called "killkids.cmd" to all objects:
# "Pop/* Sop/*" killkids "Kill All Child Nodes" ./scripts/killkids.cmd
# The following line adds a script called "reversein.cmd" to the Merge SOP:
# Sop/merge reverseinputs "Reverse Inputs" /tmp/reversein.cmd
# The following line adds a script only to a node named "/obj/model":
# 'Expr: strcmp($opmenu_oppath, "/obj/model") == 0' model "Model" /tmp/foo.cmd
# The following line adds a script to any op defined in an OTL
# (note that an entry can be continued on the next line by placing a backslash
# at the end of the line):
# 'Expr: execute("otgetotl -b $opmenu_optype")' \
# isinotl "In an OTL" /tmp/foo.cmd

なんじゃこりゃ(゚〇゚;)、英語ばっか。

意訳した。
以下はそれ!


 

OPmenuファイルは右クリック時のポップアップメニューを追加するファイルです。
各行4つの事項から構成されます。
1:オペレータのタイプ名(ワイルドカード * もOK)
2:ホットキー名(これはuniqueな一単語)
3:メニューアイテム名(メニューに表示される名前)
4:メニューが選ばれた時に実行するスクリプトのパス

スクリプトのパスはOPmenuファイルからの相対パスでもいい。
スクリプトが実行されたとき、選択していたノードのフルパスが引数として渡されます。
引数は”Expr:”ってキーワーを使うとエクスプレッションを組めて、それが1の時、menuに表示することができる。
エクスプレッション実行時2つのローカル変数が定義される。
$opmenu_optype・・・オペレータのタイプ名(例:”Object/geo”)
$opmenu_oppath・・・右クリックメニューを開いたノードのフルパス(例:”/obj/light1″)

以下例文

“killkids.cmd”ってスクリプトをすべてのジオメトリに追加した例


"Pop/* Sop/*" killkids "Kill All Child Nodes" /home/v-abe/houdini12.5/scripts/yes.cmd

 

“reversein.cmd”スクリプトをMerge SOPに追加した例


Sop/merge reverseinputs "Reverse Inputs" /tmp/reversein.cmd

 

“/obj/model”って名前のノードにだけスクリプトを追加した例


'Expr: strcmp($opmenu_oppath, "/obj/model") == 0' model "Model" /tmp/foo.cmd

 

OTLで定義したオペレーションタイプにスクリプトを追加した例


'Expr: execute("otgetotl -b $opmenu_optype")' /isinotl "In an OTL" /tmp/foo.cmd

スクリプトはHscript(.cmd)

自分でなんか例を載っけようかと思ったけど、こんだけサンプルあったら十分。

以上!

間違い等ありましたらご指摘を!


2017/04/12追記

最近のバージョンではXMLで書くのだとか。

関連記事

コメントをお待ちしております

このサイトについて

3DCG Tipsサイト。Houdiniの記事が多めです。

RSS

follow us in feedly

アンケート

あなたはプロのCG屋さんですか?

View Results

Loading ... Loading ...

言語切り替え

  • English (United States)
  • 日本語

Archives

  • 2017 (10)
  • 2016 (36)
  • 2015 (64)
  • 2014 (54)
  • 2013 (60)
  • 2012 (54)

スポンサードリンク