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)