Hi!
If the scenes get more and more complicated, material selection gets time-consuming, too. To speedup the selecting and navigating networks, I’ve build a shelf tool, that lets you jump directly to the corresponding material of an object. Please have look at my video. I’m explaining the installation and functionality. Hopefully that makes your navigation, during the shading process more comfortable.
#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")