Python Scripts

Shelf Tools

Set Centroid Expression on Pivot in Transformation

sel = hou.selectedNodes()

if len(sel) == 1:

sel[0].parm("px").setExpression("$CEX")

sel[0].parm("py").setExpression("$CEY")

sel[0].parm("pz").setExpression("$CEZ")

Set BBox

sel = hou.selectedNodes()[0]
geo = sel.geometry()
size = geo.boundingBox().sizevec()
center = geo.boundingBox().center()
sel.parmTuple("size").set(size)
sel.parmTuple("t").set(center)

Make full Path Object Merge

sel = hou.selectedNodes()
if len(sel) == 1:
    curPath = sel[0].parent()
    objPath = sel[0].path()
    pos = sel[0].position() + hou.Vector2(0,-1)
    
    mkMerge = curPath.createNode("object_merge")
    mkMerge.setPosition(pos)
    mkMerge.setName(sel[0].name() + "_merge")
    mkMerge.parm("xformtype").set(1)
    mkMerge.parm("objpath1").set(objPath)

Make bunch of Transform Nodes form all Parents

sel = hou.selectedNodes()
if len(sel) == 1:
    curPath = sel[0].parent()
    preNode = sel[0]
    pos = sel[0].position()
    path = curPath
   
    parms = ["tx","ty","tz","rx","ry","rz","sx","sy","sz"]
   
    while path.path() != '/obj':
        mkXf = curPath.createNode("xform")
        newPos = (pos + hou.Vector2(0,-1))
        mkXf.setPosition(newPos)
        for i in parms:
            mkXf.parm(i).setExpression('ch("' + path.path() + "/" + i + '")')
       
        if preNode != sel[0]:
            mkXf.setInput(0,preNode,0)
       
        preNode = mkXf
        pos = newPos  
        path = path.parent()

Hierarchy Convert and Merge

sel = hou.selectedNodes()
theList = [sel[0]]
rootObj = hou.node('/obj').createNode('geo')
rootObj.children()[0].destroy()
rootObj.setPosition( sel[0].position() + hou.Vector2(0,-1))
iniMarge = rootObj.createNode('merge')
iniMarge.setName(sel[0].name())
def copyParm(a,b):
    parms = ["tx","ty","tz","rx","ry","rz","sx","sy","sz"]
    parmO = ["outTx","outTy","outTz","outRx","outRy","outRz","outSx","outSy","outSz"]
    for pp in range(0,len(parms)):
        a.parm(parms[pp]).setExpression('ch("' + b.path() + "/" + parmO[pp] + '")')
parentM = [iniMarge]
level = 0
while len(theList) != 0:
    level += 1
    tmpParent = []
    tmpLis = []
    for i in range(0,len(theList)):
        for cc in range(0,len(theList[i].children())):
            if len(theList[i].children()[cc].children()) != 0:
                if theList[i].children()[cc].childTypeCategory().name() == 'Object':
                    transC = rootObj.createNode('xform')
                    copyParm(transC,theList[i].children()[cc])
                    mergeC = rootObj.createNode('merge')
                    transC.setPosition(hou.Vector2(cc*3 + i*10,level*2-1))
                    mergeC.setPosition(hou.Vector2(cc*3 + i*10,level*2))
                    mergeC.setName("level" + str(level) + "__"+theList[i].children()[cc].name(),,unique_name = True)
                    transC.setInput(0,mergeC)
                    parentM[i].setInput(cc,transC)
                    tmpLis.append(theList[i].children()[cc])
                    tmpParent.append(mergeC)
                else:
                    transC = rootObj.createNode('xform')
                    copyParm(transC,theList[i].children()[cc])
                    mergeO = rootObj.createNode('object_merge')
                    mergeO.setColor(hou.Color([0.3,0.4,1.0]))
                    transC.setPosition(hou.Vector2(cc*3 + i*10,level*2-1))
                    mergeO.setPosition(hou.Vector2(cc*3 + i*10,level*2))
                    mergeO.setName("objMerge_"+theList[i].name(),,unique_name = True)
                    mergeO.parm("objpath1").set(theList[i].children()[cc].path())
                    transC.setInput(0,mergeO)
                    parentM[i].setInput(cc,transC)
    parentM = tmpParent
    theList = tmpLis

Mismatch Parameter Ditector

misCount = 0
sel = hou.selectedNodes()
if len(sel)==2:
    if sel[0].type() == sel[1].type():
        list0 = sel[0].parms()
        list1 = sel[1].parms()
       
        for i in range(0,len(list0)):
            if list0[i].eval() != list1[i].eval():
                misCount += 1
                print list0[i].name() + " = " + str(list0[i].eval()) + " != " + list1[i].name() + " = " + str(list1[i].eval())
        if misCount == 0:
            print "every parms are much!"
        else:
            print "Total Mismuch " + str(misCount)
    else:
        hou.ui.displayMessage('Choose Same Types of Node')
else:
    hou.ui.displayMessage('Choose Just Two Nodes')

Delete PrimGroup that selected polygon possess

import toolutils
viewer = toolutils.sceneViewer()
geo = viewer.selectGeometry()
node = geo.nodes()[0]
path = node.path()
groups = node.geometry().primGroups()
prims = geo.mergedSelectionString()
listPrim = hou.selectedNodes()[0].geometry().globPrims(prims)
has = 'hasprim("group1", "' + path + '" ,1)'
n = hou.hscriptExpression(has)
primGs = ""
for g in groups:
    for i in listPrim:
        hasPrim = 'hasprim("' + g.name() + '","' + path + '",' + str(i.number()) + ')'
        n = hou.hscriptExpression(hasPrim)
        if n == 1:
            primGs += g.name() + " "
            break
curPath = node.parent()
pos = node.position() + hou.Vector2(0,-1)
   
mkDel = curPath.createNode("delete")
mkDel.setPosition(pos)
mkDel.setInput(0,node,0)
mkDel.parm("group").set(primGs)
mkDel.parm("negate").set(1)
mkDel.setDisplayFlag(1)
mkDel.setRenderFlag(1)

Delete Prim"Name" that selected polygon possess

import toolutils
viewer = toolutils.sceneViewer()
geo = viewer.selectGeometry()
node = geo.nodes()[0]
prims = geo.mergedSelectionString()
listPrim = hou.selectedNodes()[0].geometry().globPrims(prims)
nameList = ""
for i in listPrim:
    nameval = i.attribValue("name")
    if (nameval in nameList) == False:
        if nameList=="":
            nameList += "@name=" + nameval
        else:
            nameList += " @name=" + nameval
curPath = node.parent()
pos = node.position() + hou.Vector2(0,-1)
  
mkDel = curPath.createNode("blast")
mkDel.setPosition(pos)
mkDel.setInput(0,node,0)
mkDel.parm("group").set(nameList)
mkDel.parm("negate").set(1)
mkDel.setDisplayFlag(1)
mkDel.setRenderFlag(1)