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)