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 = 0while 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 = tmpLisMismatch Parameter Ditector
misCount = 0sel = 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 toolutilsviewer = 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() + " "            breakcurPath = 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 toolutilsviewer = 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=" + namevalcurPath = 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)