import hou
def create_structured_vector_monitor():
obj = hou.node("/obj")
node_name = "MANTRA_VECTOR_MONITOR"
node = hou.node(f"/obj/{node_name}")
if not node:
node = obj.createNode("null", node_name)
node.setUserData("nodeshape", "rect")
node.setColor(hou.Color((0.15, 0.25, 0.35)))
callback_code = """import hou
node = hou.pwd()
out = hou.node('/out')
m_nodes = [n for n in out.children() if n.type().name() == 'ifd'] if out else []
mode_map = {'off': 'Single', 'normal': 'Range', 'on': 'Range(Strict)'}
group = node.parmTemplateGroup()
folder_name = 'nodes_list'
folder = group.find(folder_name)
if folder:
folder.setParmTemplates([])
else:
folder = hou.FolderParmTemplate(folder_name, 'Mantra Nodes', folder_type=hou.folderType.Simple)
for i, n in enumerate(m_nodes):
v_name = 'm_range' + str(i)
b_name = 'm_mode' + str(i)
j_name = 'm_jump' + str(i)
m_val = n.parm('trange').evalAsString()
m_text = mode_map.get(m_val, m_val)
m_path = n.path()
new_vec = hou.IntParmTemplate(v_name, n.name(), 3)
new_vec.setJoinWithNext(True)
new_vec.setDisableWhen("{ 1 }")
mode_btn = hou.ButtonParmTemplate(b_name, m_text)
mode_btn.setJoinWithNext(True)
mode_btn.setDisableWhen("{ 1 }")
jump_script = "n=hou.node('"+m_path+"'); n.setSelected(True,True); pane=hou.ui.paneTabOfType(hou.paneTabType.NetworkEditor); pane.setCurrentNode(n)"
jump_btn = hou.ButtonParmTemplate(j_name, "Jump to Node", script_callback=jump_script, script_callback_language=hou.scriptLanguage.Python)
folder.addParmTemplate(new_vec)
folder.addParmTemplate(mode_btn)
folder.addParmTemplate(jump_btn)
group.replace(folder_name, folder)
node.setParmTemplateGroup(group)
for i, n in enumerate(m_nodes):
try:
v_tuple = node.parmTuple('m_range' + str(i))
v_tuple.lock((False, False, False))
f_vals = (int(n.parm('f1').eval()), int(n.parm('f2').eval()), int(n.parm('f3').eval()))
v_tuple.set(f_vals)
v_tuple.lock((True, True, True))
except: continue
"""
group = node.parmTemplateGroup()
group.clear()
btn_tpl = hou.ButtonParmTemplate(
"refresh",
"Refresh",
script_callback=callback_code,
script_callback_language=hou.scriptLanguage.Python
)
group.append(btn_tpl)
folder = hou.FolderParmTemplate("nodes_list", "Mantra Nodes", folder_type=hou.folderType.Simple)
group.append(folder)
node.setParmTemplateGroup(group)
try:
node.parm("refresh").pressButton()
except:
pass
create_structured_vector_monitor()
Houdini_mantra_list
Houdini_mantra_list