| On this page |
Warning
この機能は 実験段階 であり、変更される可能性があります。
概要 ¶
Infoウィンドウは、ノードに関する情報を表示します。
例えば、ジオメトリ(SOP)ノードのInfoウィンドウは、そのノードによって生成されたジオメトリ上のアトリビュート、グループ、その他の情報を表示します。
ノードのInfoウィンドウを表示するには、ノード上にマウスカーソルを置いた時に表示されるノードリング内の“i”ボタンをクリックするか、または、ノードをクリックしたままにします。
特定のノードタイプやすべてのノードのInfoウィンドウにカスタム情報を追加すると便利になる場合があります。例:
-
デジタルアセットの作成者は、ユーザがそのデジタルアセットのインスタンスのInfoウィンドウを表示した時に、そのデジタルアセット固有の情報を表示したい場合があります。
-
複雑なアセット管理パイプラインを持つスタジオでは、ワークフロー固有の各アセットに関する情報を表示できるようにしたいです。
Infoウィンドウ内でカスタム情報を表示できる場所がいくつかあります:
-
Infoウィンドウの上部で、ノードの見出しのすぐ下に“タグ”を追加することができます。 これは、角丸四角形状のテキストボックスです。 例えば、アセットが“古い”かどうかといったちょっとした情報を表示するのに役立ちます。
-
ウィンドウ上部(ノードの見出しの下)、中央(一般Infoグリッドの上)、下部(ノードコメントエディタの上)付近にも情報を追加することができます。
クイックスタート ¶
-
$HOUDINI_USER_PREFS/config/CustomNodeInfoディレクトリを作成します。 -
CustomNodeInfoディレクトリ内に、以下の内容のindex.jsonファイルを作成します:index.json
{ "node_scripts": { "Sop/sphere": "test.py" } }
-
次に、同じディレクトリ内に以下の内容の
test.pyファイルを作成します:test.py
addLabeledText("Custom Message", "This is some custom text for the info window.")
-
Houdiniを起動します。
Geoオブジェクトを作成して中に入ります。次に、Sphereノードを作成します。 -
ノード上にマウスカーソルを置いて表示されるノードリング内の“i”ボタンをクリックするか、または、ノードを
クリックしたままにします。
Infoウィンドウにカスタムメッセージが表示されるはずです。
詳細は、下記のカスタマイズスクリプトの書き方を参照してください。
カスタマイズスクリプトをアセット内部に保存する方法 ¶
カスタマイズスクリプトは、アセット内部のセクション(“Extra File”)に保存することができます。
アセットにcustom_node_info.pyセクションがあれば、ユーザがそのアセットインスタンスのInfoウィンドウを表示した時にHoudiniが自動的にそのスクリプトを実行してカスタム情報を追加します。
-
ネットワークエディタ内でアセットを
クリックして、 Edit Type Properties を選択します。
-
Type Propertiesダイアログで Extra Files タブをクリックします。
-
Section Name フィールドに
custom_node_info.pyと入力して、 Add Empty Section をクリックします。 -
右側にあるエディタを使用して、スクリプトを入力(またはペースト)します。詳細は、下記のカスタマイズスクリプトの書き方を参照してください。
カスタマイズスクリプトをHoudiniパス上のファイルに保存する方法 ¶
Houdiniは、Houdiniパスからconfig/CustomNodeInfo/index.jsonファイルを検索します。
このファイル内で、特定のノードタイプまたはすべてのノードに対して実行するカスタマイズスクリプトを指定することができます。
Tip
Houdiniパス上に複数のconfig/CustomNodeInfo/index.jsonファイルが存在した場合(例えば、ユーザプリファレンスディレクトリと$JOBディレクトリにファイルが存在した場合)、Houdiniは、それらのファイルを結合します。
以下は、index.jsonファイルの例です:
{ "node_scripts": { "Sop/lsystem": "lsystem.py" }, "general_scripts": [ "every_node.py" ] }
このJSONには、以下の2つのオプションキーを含めることができます:
node_scripts (オブジェクト)
内部ノードタイプ名( カテゴリ付き )とスクリプトパスをマッピングするオブジェクト。 指定されたノードタイプのインスタンスのInfoウィンドウをユーザが表示すると、それに呼応したカスタマイズスクリプトが実行されます。
ノードタイプに対してカテゴリ付き内部ノードタイプ名を取得するには、Pythonシェルを開いて、そのノードをPythonシェルウィンドウにドラッグして、そのノードの参照を取得するPythonコードを生成します。
そして、そのPythonコードの後に.type().nameWithCategory()を加えてEnterを押します。例:
>>> hou.node('/obj/copnet1/custom_test1').type().nameWithCategory() 'matt::Cop/custom_test::1.0'
general_scripts (配列)
スクリプトパス文字列の配列。 Houdiniは、 あらゆる ノードタイプのInfoウィンドウを表示する際に、このリスト内の各スクリプトを(順番通りに)実行します。
-
node_scriptsは、パターンに対応していません。 代わりに、general_scriptを作成して、特定のノードのみに情報を追加するようにしてください。 例えば、acmeネームスペース内のノードにカスタム情報を追加するには、general_scriptを作成して、namespace == "acme"の場合にのみ情報を追加するスクリプトを記述します。 -
通常、
node_scriptsオブジェクトの値はパス文字列です。 しかし、特定のノードタイプに対して複数のスクリプトを実行したい場合など何かしらの理由がある場合には、パス文字列の 配列 を使用することもできます。{ "node_scripts": { "Sop/lsystem": "lsystem.py", "Sop/sphere": ["sphere.py", "shape.py"] } }
-
相対パスは、
index.jsonファイルが含まれているディレクトリを基準に解決されます。
カスタマイズスクリプトの書き方 ¶
概要 ¶
Tip
middleに情報を追加したい場合が多いので、middleのメソッドはトップレベル関数としても利用可能です。
例えば、addText("Hello)をmiddle.addText("Hello")のショートカットとして記述することができます。
変数 ¶
hou: module
houモジュールはスクリプト内で自動的にインポートされます。
node: hou.Node
ユーザがInfoウィンドウを表示しているノード。
node_name: str
ノードの名前。これはnode.name()のショートカットです。
type_name: str
ノードのタイプの名前。これはnode.type().name()のショートカットです。
category: str
ノードタイプのカテゴリの名前。例えば、"Sop"、"Dop"。
namespace: str
タイプ名のネームスペース部分のみ。 これは、スタジオのネームスペース内のノードのみに情報を表示したい場合に役立ちます。
basename: str
タイプ名のベース名部分のみ。
version: str
タイプ名のバージョン部分のみ。
output_index: int
特定のネットワークタイプ(SOPなど)では、ユーザは、ノード出力上でを押したり、または、Infoウィンドウに表示される出力を切り替えることができます。
これは、Infoウィンドウに現在表示されている出力コネクタのインデックスです。
hou.SopNode.geometryを使用してノードのジオメトリから情報を取得する場合には、これを使用します。
if namespace == "acme" and category == "Sop": # Detailアトリビュートに保存されている追加情報を検索して、 # それが存在すればInfoウィンドウに表示します。 geometry = node.geometry(output_index) try: value = geometry.attribValue("my_extra_info_string") except hou.OperationFailed: pass else: addLabeledText("Extra Information", value)
タグ ¶
addTag(text: str)
Infoウィンドウの上部に、色の付いた角丸四角形状のテキストボックスを表示します。 これは、“Up to Date”や“Deprecated”などの重要な二進情報を簡潔に表示するのに役立ちます。
オプションのキーワード引数:
color: color
タグ本文のカラー。
背景を描画しない場合は"transparent"を使用します。
詳細は、カラー指定を参照してください。
textColor: color
通常、Houdiniはベースカラーに対して視認性の高いテキスト/シンボルカラーを自動選択します。 ただし、この引数で色を明示的に設定することも可能です。 詳細は、カラー指定を参照してください。
textSize: int
テキストフォントのサイズ(ピクセル単位)。
symbol: str
テキストの左側に表示するPhosphorIconの名前。
symbolSize: float
symbolが指定された場合、これは、そのアイコンのサイズです
デフォルトは16です。
symbolVariant: str
symbolが指定された場合、これは、PhosphorIconのバリエーションです。
設定可能な値は、"regular"(デフォルト)、"bold"(太線)、"light"(細線)、"thin"(超細線)、"filll"(アウトラインスタイルではなく実線スタイル)です。
addTag("Synced", color=theme.amber) addTag("Puppy", symbol="dog") addTag("Kitteh", symbol="cat")
コンテナオブジェクト ¶
top, middle, bottom: CustomContainer
top、middle、bottomのオブジェクトは、Infoウィンドウレイアウト内で情報を追加できる“挿入ポイント”を示します。
CustomContainerオブジェクトには以下のメソッドがあります:
コンテナ作成メソッド ¶
addColumn() -> CustomContainer
垂直スタックレイアウトを追加します。
返されるオブジェクトはコンテナを表現しているので、そのメソッドをコールして新しい列に情報を追加することができます。
デフォルトのtop、middle、bottomのオブジェクトが列となっているため、
通常では、これは不要です。
ただし、列内のアイテム間の間隔をカスタマイズしたい場合に役立ちます。
オプションのキーワード引数:
spacing: float
列内のアイテム間の間隔。
topPadding: float / leftPadding: float / rightPadding: float / bottomPadding: float
列の内容の周囲にスペースを追加します。
column = middle.addColumn(spacing=10) column.addText("Love looks not with the eyes, but with the mind") column.addText("And therefore is winged Cupid painted blind.")
addGrid() -> CustomContainer
アイテムを固定サイズのセルで構成されたグリッドに配置するレイアウトを追加します。 返されるオブジェクトはコンテナを表現しているので、そのメソッドをコールして新しいグリッドに情報を追加することができます。
通常は、グリッドに対してaddSimpleTextTile("label", "text")メソッドをコールして情報を追加します。
オプションのキーワード引数:
cellWidth: float
グリッド内のセルの幅。デフォルトは100です。
cellheight: float
グリッド内のセルの高さ。デフォルトは48で、通常は1行のテキストを表示する“シンプルな”タイルを可能にします。
columnSpacing: float
セル間の水平方向の間隔。
rowSpacing: float
セル間の垂直方向の間隔。
grid = middle.addGrid() grid.addSimpleTextTile("State", "Opened") grid.addSimpleTextTile("Version", "2.5") grid.addSimpleTextTile("Project", "Bob's Big Day") grid.addSimpleTextTile("Shot", "28.5B") grid.addSimpleTextTile("Supe", "Agnes") grid.addSimpleTextTile("Signed Off", "No")
addTile(label: str) -> CustomContainer
背景とラベルを持つタイルを追加します。 返されるオブジェクトはタイルの内容を表現しているので、そのメソッドをコールして新しいタイル内の列に情報を追加することができます。
オプションのキーワード引数:
backgroundColor: str
タイル背景のカラー。
labelColor: str
ラベルテキストのカラー。
labelBackgroundColor: str
ラベル背景のカラー。
labelVisible: bool
タイルラベル(およびラベル背景)を表示するかどうか。
copyText: str
通常、ユーザがタイルを選択してクリップボードにコピーする場合、Houdiniはタイル内のテキストをコピーします。
この引数を渡すと、代わりにこの文字列がクリップボードにコピーされます。
これは、表示されている内容ではなく“フォーマットされていない”テキストをクリップボードにコピーしたい場合に役立ちます。
例えば、12,345ではなく12345をコピーする場合などです。
詳細は、カラー指定を参照してください。
tile1 = addTile("First Tile") tile1.addText("Some information") tile2 = addTile("Second Tile", labelColor="#ffcc00", labelBackgroundColor="black", backgroundColor="#574D25") tile2.addText("More information")
addSimpleTile(label: str) -> CustomContainer
addTile()と同じですが、タイルとラベルの背景を自動的に非表示にし、余白を減らすことで、よりシンプルでコンパクトな見た目になります。
これは、addTile()と同じオプションのキーワード引数を受け取ります。
tile1 = addSimpleTile("First Tile") tile1.addText("Some information")
addExpandingTile(label: str, expanded=True) -> CustomContainer
展開可能なタイルを追加します。
ユーザがタイル内の項目を展開または折り畳むことができます。
expandedキーワードでタイルの初期状態を制御します。
これは、addTile()と同じオプションのキーワード引数を受け取ります。
tile1 = addExpandingTile("Expanding Tile", expanded=False) tile1.addText("Some information the user can see when the tile is expanded.")
addLabeledColumn(label: str) -> CustomContainer
addSimpleTile()と同様ですが、ラベルが内容の上ではなく横に配置されます。
同じ親コンテナ内のラベル付き列は、自動的にラベルの幅に合わせられます。
item1 = addLabeledColumn("State") item1.addText("Opened") item2 = addLabeledColumn("Rendering") item2.addProgress(0.5)
Tip
以下のaddLabeledX()メソッドは、列に1つの項目のみを配置する場合に便利なショートカットです。
addLabeledText(“State”, “Opened”) addLabeledProgress(“Rendering”, 0.5)
項目作成メソッド ¶
情報の項目を追加する各addX()メソッドには、それに呼応したaddLabeledX()メソッドがあり、それによってラベル付き値のテーブルを作成することができます。
addLabeledX(label, ...)のバリエーションは、addLabeledColumn(label).addX(...)のショートカットとなります。
addText(text: str) /addLabeledText(label: str, text: str)
テキストを追加します。
オプションのキーワード引数:
size: int
フォントサイズ(ピクセル単位)。
monospaced: bool
テキストに等幅フォントを使用するかどうか。デフォルトはFalseです。
color: str
テキストのカラー。 詳細は、カラー指定を参照してください。
format: str
テキスト文字列の解釈方法を制御します。
auto(デフォルト)は、タグの有無などの経験則に基づいて、テキストがHTMLかプレーンテキストかを推測します。
plainは、プレーンテキストを表示します。
richは、文字列をHTMLとして解釈します。
markdownは、テキストをマークダウンとして解釈します。
symbol: str
テキストの左側に表示するPhosphorIconの名前。
symbolSize: float
symbolが指定された場合、これは、そのアイコンのサイズです。デフォルトは16です。
symbolVariant: str
symbolが指定された場合、これは、PhosphorIconのバリエーションです。
設定可能な値は、"regular"(デフォルト)、"bold"(太線)、"light"(細線)、"thin"(超細線)、"filll"(アウトラインスタイルではなくソリッドスタイル)です。
symbolColor: color
symbolが指定された場合、これは、そのアイコンのカラーです。
詳細は、カラー指定を参照してください。
spacing: float
シンボル(存在する場合)とテキストの間の間隔。デフォルトは2です。
addLabeledText( "Review Feedback", "Increase the light on the main character when the first leave the doorway", symbol="chat-text" )
addLink(text: str, link: str = None) / addLabeledLink(label: str, text: str, link: str = None)
引数を2つ渡した場合、それぞれリンクのテキストとリンク先となります。 引数を1つだけ渡した場合、その引数がリンクのテキストとリンク先の両方として使用されます。例:
addLink("Open the SideFX website", "http://sidefx.com")
addLink("http://sidefx.com")
-
リンクが
http:またはhttps:で始まる場合、クリックすると外部ブラウザでそのURLが開きます。 -
リンクが
node:で始まる場合、URLの残りの部分はシーン内のノードへのパスである必要があります。リンクをクリックすると、そのノードが選択され、ネットワークエディタの中央に表示されます。
オプションのキーワード引数:
iconName: str
リンクの横に表示するHoudiniアイコンの名前。
通常はノードオブジェクトに対してnode.type().icon()をコールすることで取得することができます。
詳細は、後述のaddNodeLink()を参照してください。
iconSource: str
リンクの横にアイコンとして表示する通常の画像を指定したfile:またはhttp:のURL。
iconSize: float
リンクの横にアイコンを表示する場合のそのアイコンのサイズ。デフォルトは16です。
addNodeLink(node: hou.Node) / addLabeledNodeLink(label: str, node: hou.Node)
hou.Nodeオブジェクトに基づいてノードへのリンクを作成します。
これは、addLink(node.path(), f"node:{node.path()}, iconName=node.type().icon()")のショートカットです。
parent = node.parent()
addLabeledNodeLink("Parent node", parent)
addDonut(value: float) / addLabeledDonut(label: str, value: float)
“ドーナツ”プログレスグラフを作成します。
valueは、0.0から1.0までの範囲の数値です。
オプションのキーワード引数:
size: real
ドーナツグラフの幅と高さ。デフォルトは32です。
text: str
ドーナツの中心に表示されるテキスト。
通常は25%のような短いテキストになります。
description: str
グラフの右側に表示されるテキスト。
startAngle: real / endAgnle: real
グラフの範囲を定義する開始角度と終了角度を制御します。
デフォルトは-160と160で、左下0.0から右下1.0まで回る“スピードメーター”のような外観になります。
代わりに、上部の0.0から始まり、1.0まで回り込んで再び上部に戻るグラフを表示するには、startAngle=0, endAngle=360を使用してください。
clockwise: bool
Trueの場合、弧は時計回りに進行します。 Falseの場合、反時計回りに進行します。 デフォルトはTrueです。
arcColor: str
“塗りつぶされる”弧のカラー。
trackColor: str
グラフの“空っぽ”の部分のカラー。
トラックを表示しない場合は、"transparent"に設定してください。
詳細は、カラー指定を参照してください。
addLabeledDonut("Completion", 0.8, text="80%", description="Final Stage")
addLabeledDonut("Rating", 0.4, text="2/5", startAngle=0, endAngle=360,
arcColor="#ffcc00")
addProgress(value: float) / addLabeledProgress(label: str, value: float)
水平棒グラフを作成します。
valueは、0.0から1.0までの数値です。
オプションのキーワード引数:
description: str
棒の下部に小さなテキストとして表示されます。
barHeight: real
棒グラフの高さ。
barColor: str
棒グラフの“塗りつぶされる”部分のカラー。
trackColor: str
棒グラフの“塗りつぶされない”部分のカラー。
トラックを表示しない場合は、"transparent"に設定してください。
詳細は、カラー指定を参照してください。
addLabeledProgress("Completion", 0.8, description="Final Stage")
addLabeledProgress("Rating", 0.4, barColor="#ffcc00")
addImage(source: str, animated=False) / addLabeledImage(label: str, source: str, animated=False)
画像を表示します。
source文字列は、URLである必要があります。例えば、file:またはhttp:といったURLです。
(画像がアニメーションGIFの場合は、animated=Trueを使用してください。そうしないと、アニメーションの最初のフレームのみが表示されます。)
Note
画像はHoudiniではなくQtユーザインターフェースライブラリによって読み込まれて表示されるので、
残念ながらJPEGやPNGなどの一般的な形式にしか対応していないです(.exrファイルは表示できません)。
また、OCIOカラースペースは正しく表示されません。
レンダリング済み画像を表示したい場合は、hoiiotoolを使用して、そのレンダリング結果の(必要に応じて縮小された)sRGB PNGまたはJPG“サムネイル”を作成し、それを表示することができます。
top.addLabeledImage("Preview Image", "file:///Users/matt/Downloads/Cenote.png")
addCustomItem(url: str | pathlib.Path | QtCore.QUrl, **kwargs)
これは、QMLソースファイルで定義されたカスタム項目をInfoウィンドウに追加することができます。 これは推奨されていません。 QMLの記述は、このドキュメントおよびHoudiniサポートの範囲外となります。 カスタムQMLの使用を検討される前に、上記の他の情報表示用オプションを試しください。
url引数は、カスタム項目を作成するためにインスタンス化するQMLファイルを指した文字列、Path、QUrlオブジェクトです。
相対ファイルパスまたはfile:URLは、現在実行中のスクリプトファイルを基準に解決されます。
Houdiniは、渡されたキーワード引数を使用して、新規アイテムのプロパティを設定します。
カラー指定 ¶
カラーを受け取る引数には、以下のいずれかの値を使用することができます:
-
16進数カラー文字列(例えば、
"#ffcc00")またはCSSカラー名(例えば、"rebeccapurple")。 -
何も描画しない
"transparent"文字列。
*QtCore.QColorオブジェクト。
-
以下のUIカラー値のいずれか(例えば、
addTag("Oops!", color=theme.error)):-
theme.success(緑系の色) -
theme.warning(黄色系の色) -
theme.error(赤系の色) -
theme.primary(UIアクセントカラー) -
theme.secondary(アクセントカラーの彩度を落とした色) -
theme.red,theme.orange,theme.amber,theme.yellow,theme.lime,theme.green,theme.emerald,theme.teal,theme.cyan,theme.sky,theme.blue,theme.indigo,theme.violet,theme.purple,theme.fuchsia,theme.pink,theme.rose,theme.stone,theme.gray,theme.zinc,theme.steel,theme.slate,theme.heather
-
パフォーマンス対策 ¶
Houdiniは、Infoウィンドウが利用可能になる前に、すべてのカスタマイズスクリプトを順次実行します。 ユーザがInfoウィンドウを待つ必要がないよう、スクリプトを可能な限り高速に実行されるよう心がけてください。 表示する情報の収集に時間がかかる可能性がある場合(例えば、ネットワーク経由での情報取得)、処理を高速化するための対策がいくつかあります。
非同期更新 ¶
処理が遅延する可能性のあるコードは、async関数またはThread内で実行して、情報が利用可能になった時点でアイテムのプロパティを更新する方法を試してください。
項目を非同期で更新するには、作成メソッドが返すオブジェクトへの参照を保持してください。
その後、情報が利用可能になった時点で、そのオブジェクトに対してupdate()メソッドをコールして、キーワード引数を使用して変更したいプロパティを設定します。
(以下は簡単な例です。Pythonのasyncやスレッド機能の詳細な使用方法は、このドキュメントの範囲外であり、Houdiniサポートの対象外となります。)
import requests import threading # テキスト項目を作成し、初期テキストをプレースホルダに設定します。 status_item = addLabeledText("Status", "--") # スレッド内でHTTPリクエストを介して情報を取得します。 def threaded_fn(): response = requests.get("api.example.com/status") # Once the information is available, update the item with the new text status_item.update(text=response.text) threading.Thread(target=fn).start()
Note
項目の追加削除を行なう関数/メソッドは、 Infoウィンドウ表示後は機能しません 。
カスタム項目を非同期で“削除”するには、item.update(visible=False)を使用してそれを非表示にしてください。
要求に応じた更新 ¶
取得に時間がかかる情報については、Infoウィンドウにボタンを追加し、ユーザがボタンをクリックした場合にのみスクリプトが情報を取得してウィンドウを更新する方式も検討すると良いでしょう。 これは、ユーザが情報の取得コストを負担するタイミングを自ら決められるため、時折のみ必要な情報に役立ちます。
実装方法としては、ボタンと非表示の表示項目を追加します。 ボタンのコールバック関数内で情報を取得し、新しい情報で表示項目を更新して表示します。 情報を一度だけ取得する意味がある場合はボタンを非表示にすることも可能ですし、情報を複数回更新したい可能性がある場合は表示したままにしておくこともできます。
def get_status_callback(button): response = requests.get("api.example.com/status") # ボタンとテキストの参照をIDで取得します。 button = findByID("status_button") text_item = findByID("status_text") # ボタンを非表示にします。 button.update(visible=False) # 新しいテキストを設定して表示します。 text_item.update(text=response)("status_button") text_item = findByID("status_text") # ボタンを非表示にします。 button.update(visible=False) # 新しいテキストを設定し、表示します。 text_item.update(text=response.text, visible=True) # ボタンとステータス表示を保持するラベル付きカラムを作成します。 column = addLabeledColumn("Status") # ボタンと表示をカラムに追加します。 column.addButton("取得", get_status_callback, id="status_button") # テキスト表示は、ユーザがボタンをクリックしコールバック関数が情報を読み込むまで非表示にします。 column.addText("", id="status_text", visible=False)
バックグラウンドでの情報のキャッシュ化 ¶
更新速度の遅い情報をバックグラウンドプロセスで更新してキャッシュ化し、Infoウィンドウにそのキャッシュされた情報を表示する方法を検討してみてください。
別スクリプトからの情報の結合 ¶
複数のカスタマイズスクリプト(例えば、スタジオ全体用スクリプト、ノードタイプ固有スクリプト、ユーザプリファレンス内の汎用スクリプト)が情報を追加する場合、異なるスクリプトが同じコンテナに項目を追加できるようにしたい場合があります。
スクリプト間でコンテナを共有するには、新しいコンテナを作成するメソッド(例えば、addGrid()やaddLabeledColumn())にid引数を追加します。
異なるスクリプトで同じIDを使用することで、同一のコンテナを取得することができます。
例えば、2つのスクリプトに以下のコードがある場合:
script1.py
c1 = addLabeledColumn("Comments", id="comments") c1.addText("Comment from script1")
script2.py
c2 = addLabeledColumn("Comments", id="comments") c2.addText("Comment from script2")
…この結果は、2つの項目(Comment from script1とComment from script2)を含んだ単一のCommentsカラムになります。
id引数がない場合、この2つのスクリプトはそれぞれ個別のカラムを作成し、両方にCommentsというラベルが付けられ、各カラムに1つの項目が含まれます。
コンテナを操作する必要がある場合、カスタマイズスクリプトでは以下のユーティリティ関数も使用することができます。
findByID(id: str) -> CustomContainer | None
指定したIDのコンテナが存在した場合、それを返します。
findByLabel(label: str) -> CustomContainer | None
指定したラベルを持つ最初のコンテナが存在した場合、それを返します。
removeByID(id: str)
指定したIDのコンテナが存在した場合、それを削除します。
removeByLabel(label: str)
指定したラベルを持つ項目が存在した場合、それらを削除します。
Tipsとメモ ¶
-
スクリプト内で
nodeオブジェクトを使用することで、ノードに保存されているパラメータ値やユーザデータにアクセスすることができます。詳細は、hou.Nodeオブジェクトリファレンスを参照してください。 -
Infoウィンドウは、インデックスファイルとスクリプトの変更時刻をチェックして、変更があればリロードを行ないます。 ファイルの変更を反映させるためにHoudiniを再起動する必要はありません。
-
Infoウィンドウを開いてもスクリプトの結果が表示されない場合は、以下の手順を試してください:
-
コンソールにエラーメッセージが表示されていないかチェックしてください。
-
スクリプトがディスク上のファイルにある場合、Houdiniパス上の
config/CustomNodeInfo/index.jsonファイルにそのファイルが登録されているか再度ご確認ください。 -
ノード固有のスクリプトの場合は、
index.jsonファイル内のキーがノードタイプの“カテゴリ付き内部名”と完全に一致していることを確認してください。
-
-
カスタマイズスクリプトは、Infoウィンドウが開くのが遅くならないよう、迅速に実行されるべきです。 ネットワークから情報を取得してInfoウィンドウに表示したい場合は、非同期処理やスレッド処理といった対策を施したり、または、バックグラウンドで情報を取得して、ユーザがInfoウィンドウを表示するまでキャッシュしておくことを検討してください。
-
HTMLを表示するだけの場合、
addText()を使用することで、HTML文字列を“テキスト”として渡すことができます。 Qtの“リッチテキスト”ウィジェットが使用されており、HTML4やCSS2のサブセットをサポートしていますが、実際のブラウザほどの機能はありません。 -
カラー のみ による情報表示(例えば、常に“Status”と表示されるタグが、正常時は緑、エラー時は赤になる)は避けてください。 カラーは、テキストやシンボルで表示される情報を 補強 するために使用してください。
-
Infoウィンドウに多くの操作機能を組み込むことは控えてください。 Infoウィンドウは、ノードに関する情報を素早く確認するためのものであって、“コマンドインターフェース”として機能するものではありません。 ユーザが
を押したままInfoウィンドウを表示した状態では、そのInfoウィンドウ自体に一切操作ができない点を忘れないでください。