LoginSignup
0
0

Multparmを外部ファイルから設定する

Last updated at Posted at 2023-12-19

はじめに

概要

この記事はHoudini Apprenticeアドベントカレンダー2023 18日目の記事です。

Houdiniの作業をする中でMultparmBlockなどで複数行の入力が億劫になることが多々あります。そんな時に便利な機能の搭載の仕方を紹介します。
自作のHDAに便利機能を搭載するとなんかテンションが上がるよねっという内容になってます。
image.png

実装

今回の目標は自作HDAのパラメータウィンドのMultparmBlock(list)の数字の部分にtxtファイルをD&Dするとその中の文字列が1行づつ反映される機能を作成していきます。

まずは実装するHDAを作成します。画像ではテスト用なので、Embedded(このHIPファイル内でのみ使用可能な形式)で作成しています。
image.png

次にOperatorTypePropertiesでMultparmBlockとその中にStringパラメータを追加します。
image.png

Scriptsタブに移動してEventHandlerからPythonModuleを追加して以下のスクリプトを入力します。
image.png

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で設定を読み込むなんてことも可能です。
image.png

おわりに

実際の作業ではテキストファイルだと情報が足りなかったりするので、CSV等に必要な情報を全てまとめておいて複数の項目をまとめてセッティングして使うなどが多い。
発想次第でいくらでも拡張が可能なので、何かの参考になればありがたいです。
それでは、しゃーした~。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0