一.跳转到材质
#Import Modules
import toolutils
import hou
#Set Variables
selected_node = ""
#Define type arrays
MAT_Detect = ["redshift::Material","redshift_vopnet","principledshader::2.0","materialbuilder","arnold::standard_surface", "arnold_materialbuilder"]
Sel_Detect = ["geo","instance"]
#Get the Selected Nodes
selected = hou.selectedNodes()
#Check if there is something selected
if selected:
#Compare first selected objects type with the valid object types
if selected[0].type().name() in Sel_Detect:
#Set the selected node. Just the fist is valid
selected_node = selected[0]
#Force the user to select an object, if the current doesn't match the selection type
else:
#Clear the selection
hou.clearAllSelected()
#Promt the user to select an new object
prompt = toolutils.selectionPrompt(hou.objNodeTypeCategory())
scene_viewer = toolutils.sceneViewer()
selected_objects = scene_viewer.selectObjects(prompt)
#Check if an object is selected
if selected_objects:
#Set the first selected node to variable
selected_node = selected_objects[0]
else:
#Output an Error
hou.ui.displayMessage("Nothing Selected")
#Force the user to select an object, because nothing is selected
else:
#Promt the user to select an new object
prompt = toolutils.selectionPrompt(hou.objNodeTypeCategory())
scene_viewer = toolutils.sceneViewer()
selected_objects = scene_viewer.selectObjects(prompt)
#Check if an object is selected
if selected_objects:
#Set the first selected node to variable
selected_node = selected_objects[0]
else:
#Output an Error
hou.ui.displayMessage("Nothing Selected")
#Check if the selected_node variable is not empty
if selected_node:
#Compare selected_node's type with the valid object types
if selected_node.type().name() not in MAT_Detect :
#Convert Releative Pathes to Absolute Pathes
matPath = selected_node.parm("shop_materialpath").eval()
#Set the targetpath to the node variable
node = selected_node.node(matPath)
#Check if node is valid
if node:
#Look for child Objects
if node.children():
#If there are children, replace node with the fist child
node = node.children()[0]
else:
#Output an Error
hou.ui.displayMessage("Empty material path")
else:
node = selected_node
#Look for child Objects
if node.children():
node = node.children()[0]
#Check if the material node exists
if node:
#Set some Variables
pane = ""
index = 0
#Loop over the active panes
while pane is not None:
#Search for the first network editor
pane = hou.ui.paneTabOfType(hou.paneTabType.NetworkEditor, index)
#Loop over the panes
if pane is not None:
#Get the current state
ID = pane.linkGroup()
#Looking for Linkgroup1
if str(ID) == "paneLinkType.Group1":
targetPane = pane
switchorselect = 1
#Looking for FollowSelection
if str(ID) == "paneLinkType.FollowSelection":
targetPane = pane
switchorselect = 0
#Looking for Pinned
if str(ID) == "paneLinkType.Pinned":
targetPane = pane
switchorselect = 2
index += 1
#If there is a PaneType Group1
if switchorselect == 1:
#Set the current Node
targetPane.setCurrentNode(node)
#If the PaneTypeState is set to Follow selection
if switchorselect == 0:
#Selet the material
node.setSelected(True, clear_all_selected=True)
#If the PaneTypeState is set to Pinned
if switchorselect == 2:
#Retun an errror
hou.ui.displayMessage("The PaneType is set to Pinned")
二. 选择当前节点跳转到引用此节点参数的节点
sel = hou.selectedNodes()[0]
sel.setSelected(False)
ref = sel.parmsReferencingThis()
if len(ref) == 1:
target = ref[0].node()
elif len(ref) >1:
list = []
for i in ref:
list.append(i.node().path())
path = hou.ui.selectFromList(list, message='to Jamp referencing Node')
print (path)
target = ref[path[0]].node()
else:
target = sel
target.setSelected(True)
p = hou.ui.paneTabOfType(hou.paneTabType.NetworkEditor)
p.setCurrentNode(target)
p.homeToSelection()
版权说明
文章采用: 《署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0)》许可协议授权。版权声明:未标注转载均为本站原创,转载时请以链接形式注明文章出处。如有侵权、不妥之处,请联系站长删除。敬请谅解!
说道:顶呱呱