Houdini Python Snippets

This is a bunch of my python snippets for Houdini. Beware that this is still being created so it’s messy and some of the scripts probably won’t work because they are taken out of content.

Call the function Test from button click
Define the function Test in a Python Module
#
#
#
#Change the clipping planes in the viewport. Useful if you often change between extremely large objects and very small ones.
import toolutils

nearFar = (0.1, 2000000)

viewport = hou.ui.paneTabOfType(hou.paneTabType.SceneViewer).curViewport()
viewport.defaultCamera().setClipPlanes(nearFar)
#
#
#
#Set Display Flag on a node (the blue button)
hou.node('/obj/RoadA_SectionB').setDisplayFlag(True)
#
#
#
#Traverses a network of linked nodes top-down
def getBoneNamesFromRoot(in_srcRoot):
    #input root and traverse linked structure and extract all bone names
    bones = []
    bones = traverseOutputs(in_srcRoot, 0, bones)

    return bones

def traverseOutputs(in_node, in_level, in_rtn):
    outputs = in_node.outputs()
    
    if len(outputs) > 0:
        in_level += 1
        
        for child in outputs:
        
            #only check bone objects
            if "bone" in child.type().name():
            
                #and skip 'root' bones. The root is the pelvis.
                if "root" not in child.name():
                    in_rtn.append(child.name())
                    print(child.name())
                    
            traverseOutputs(child, in_level, in_rtn)
            
    return in_rtn
#
#
#
#Create Parameter

def setIterations(kwargs):
    node = kwargs['node']
    
    idx = hou.parm(node.path()+'/noiseType').eval()
    iterations = hou.parm(node.path()+'/Parms/numTypeVariations').eval()[str(idx)]
    
    iteParm = hou.parm(node.path()+'/iterations')
    iteParm.set(iterations)
    
    #create items and labels for the drop down menu
    labels = ["Perlin", "Original Perlin", "Sparse Convolution", "Alligator", "Simplex", "Analytic Perlin", "Analytic Simplex"]   
    items = []
    itm = 0
    for l in labels: #create array of numbers
        items.append(str(itm))
        itm += 1
    
    #create/update variations parameter
    varParm = hou.parm(node.path()+'/noiseVaiations')
    varParmTmp = None
    if varParm == None:
        varParmTmp = hou.IntParmTemplate('noiseVaiations', 'Variations', 1)
        varParmTmp.setMenuType(hou.menuType.Normal)
        varParmTmp.setScriptCallback('hou.phm().printSelection(kwargs)')
        varParmTmp.setScriptCallbackLanguage(hou.scriptLanguage.Python)
    else:
        varParmTmp = varParm.parmTemplate()
        
    varParmTmp.setMenuItems(items)
    varParmTmp.setMenuLabels(labels)

    parmGrp = node.parmTemplateGroup()
    if parmGrp.find('noiseVaiations') == None:   
        parmGrp.insertAfter('noiseType', varParmTmp)
    else:
        parmGrp.replace('noiseVaiations', varParmTmp)
    
    node.setParmTemplateGroup(parmGrp)