🔗
【Houdini】URLを開くノードを用意する
はじめに
制作中に参考にしたサイト等のURLを Sticky Note に書いていましたが、
そこからURLを開くのが面倒だと感じたので
"ボタンを押すと入力欄のURLをブラウザで開く"
機能を持ったNullノードを用意できたので紹介します。
スクリプトだけで大丈夫な方は目次のスクリプトからどうぞ🙇

今回の成果 : ボタンを押すだけでURLが開ける

今まで : URLを開くときにコピペが面倒
作成手順
1.入力欄のURLを開くボタンの作成
まずは入力欄のURLを開くボタンを持つNullノードを作成してみます。
-
Nullノードを作成 > Edit Parameter Interface...

-
Invisible をチェックして初期パラメータを非表示

-
String と Button を追加
Label Name String URL1 url1 Button Open URL btn1 
Button の Callback Script に以下のスクリプトを入力して Apply/Acceptcallback_scriptimport webbrowser; webbrowser.open(kwargs["node"].evalParm("url1")) -
Open URL ボタンを押せば入力したURLをブラウザで開けます。

2.複数URLへの対応 (Multiparms)
次に、複数のURL欄を用意できるようにします。
Multiparms を使えば複数のリストを用意できそうだったので使ってみました。
-
フォルダ―を追加し、作成手順1で用意した String と Button を配置
- Folder Type = Multiparm Block (list)
-
String と Button の1の部分を
#に変更Label Name String URL# url# Button Open URL btn# 
Button の Callback Script に以下のスクリプトを入力して Apply/Acceptcallback_scriptimport webbrowser; i=kwargs["script_multiparm_index"]; webbrowser.open(kwargs["node"].evalParm(f"url{i}")) -
Open URL ボタンを押せば入力したURLをブラウザで開けます。

スクリプト
最後にここまでで作成したノードを使いまわせるようにスクリプト化したものを置いておきます。
geometry 内だけでなく /obj, /out などでも使えるようにしています。
URLの説明欄として Title Label を用意しました
url_launcher
"""
url_launcher
入力欄のURLをブラウザで開くボタンを持つNullを生成するスクリプト
Title : URLの説明
URL : URLを入力
"""
import hou
pane = hou.ui.paneTabOfType(hou.paneTabType.NetworkEditor)
if not pane:
raise hou.Error("No Network Editor pane found.")
parent = pane.pwd()
node = parent.createNode("null", "URLs")
node.moveToGoodPosition()
group = node.parmTemplateGroup()
# 既存パラメータ・フォルダを非表示
for parm in group.parmTemplates():
parm.hide(True)
group.replace(parm.name(), parm)
for entry in group.entriesWithoutFolders():
if isinstance(entry, hou.FolderParmTemplate):
entry.hide(True)
group.replace(entry.name(), entry)
# Multiparm folder
multi = hou.FolderParmTemplate(
"urls", "URLs", folder_type=hou.folderType.MultiparmBlock
)
# Title# (説明欄)
multi.addParmTemplate(hou.StringParmTemplate("title#", "Title#", 1))
# URL#
multi.addParmTemplate(hou.StringParmTemplate("url#", "URL#", 1))
# Open URL ボタン
btn = hou.ButtonParmTemplate("open#", "Open URL")
btn.setScriptCallback(
'import webbrowser; i=kwargs["script_multiparm_index"]; '
'webbrowser.open(kwargs["node"].evalParm(f"url{i}"))'
)
btn.setScriptCallbackLanguage(hou.scriptLanguage.Python)
multi.addParmTemplate(btn)
group.append(multi)
node.setParmTemplateGroup(group)
# Nodeの形を指定
node.setUserData("nodeshape", "chevron_up")
# Display フラグをオフ
if hasattr(node, "setDisplayFlag"):
node.setDisplayFlag(False)
node.setSelected(True, clear_all_selected=True)
# フォーカス
pane.homeToSelection()
参考
Discussion