はじめに
概要
この記事はHoudini Apprenticeアドベントカレンダー2023 18日目の記事です。
Houdiniの作業をする中でMultparmBlockなどで複数行の入力が億劫になることが多々あります。そんな時に便利な機能の搭載の仕方を紹介します。
自作のHDAに便利機能を搭載するとなんかテンションが上がるよねっという内容になってます。
実装
今回の目標は自作HDAのパラメータウィンドのMultparmBlock(list)の数字の部分にtxtファイルをD&Dするとその中の文字列が1行づつ反映される機能を作成していきます。
まずは実装するHDAを作成します。画像ではテスト用なので、Embedded(このHIPファイル内でのみ使用可能な形式)で作成しています。
次にOperatorTypePropertiesでMultparmBlockとその中にStringパラメータを追加します。
Scriptsタブに移動してEventHandlerからPythonModuleを追加して以下のスクリプトを入力します。
def dragged(**kwargs):
tool = kwargs['node']
parm = kwargs['parm']
try :
#txtファイルの読み込み
#D&Dするとエクスプレッションとしてファイルパスが入力されるので
#そのパスを利用してファイルを読み込む
dropfile = parm.expression()
with open(dropfile) as f:
lines = f.read()
ls = lines.split("\n")
#ファイルパスがそのままだと邪魔なので削除する
parm.deleteAllKeyframes()
#改行毎に区切った配列を元にMultparmの数を設定する
parm.set(len(ls))
#1行づつ読み込む
for i, l in enumerate(ls,1):
parm = tool.parm(f'text_{i}')#任意のパラメータ
parm.set(l)
except:
return
最後にMultparmBlockのCallbackScriptに以下を入力設定をpythonにする。
hou.phm().dragged(**kwargs)
Acceptで設定を確定して、適当なtxtファイルをMultparmの数字の部分にドロップすると複数行の文字列が1行づつ読み込まれていることが分かる。
CallbackScriptはパラメータが変化した時すべてで反応してしまうため、Clearや手動での増減にも反応してエラーを出してしまう。
エラー回避のためにtry~exceptでエラーを回避すると良い。
その他の方法
CallbackScriptは様々なところに仕込めるので、例えばFileパラメータで設定ファイルを指定して、ButtonのCallbackScriptで設定を読み込むなんてことも可能です。
おわりに
実際の作業ではテキストファイルだと情報が足りなかったりするので、CSV等に必要な情報を全てまとめておいて複数の項目をまとめてセッティングして使うなどが多い。
発想次第でいくらでも拡張が可能なので、何かの参考になればありがたいです。
それでは、しゃーした~。