list all nodetypes
nt_categories = hou.nodeTypeCategories().items()
for nt_category in nt_categories :
nodetypes = nt_category[1].nodeTypes()
for nodetype in nodetypes :
print nodetype
node list pattern glob
pattern = "font_bar_*"
node_glob = hou.node("..").glob(pattern)
str_out = ""
for node in node_glob:
str_out += pwd().relativePathTo( node ) + " "
return str_out
ctrl shift pressed when selectGeometry
import hou
import toolutils
from PySide2 import QtGui, QtCore, QtWidgets
def sel():
selection = toolutils.sceneViewer().selectGeometry(prompt='Select POINTS', sel_index=0, \
allow_drag=False, # drag and transform, we don't want that \
quick_select=True, # select on mouse_up, immediately, don't expect to be accepted \
use_existing_selection=True, initial_selection = None, \
initial_selection_type = None, ordered=False, \
geometry_types=(hou.geometryType.Points,), \
primitive_types=(), allow_obj_sel=True, \
icon=None, label=None, prior_selection_paths=[], \
prior_selection_ids=[], prior_selections=[], \
allow_other_sops=True, consume_selections=True)
node = selection.nodes()[0]
sel_geo = node.geometry()
sel_pattern = str(selection)
key_pressed = QtWidgets.QApplication.keyboardModifiers()
if key_pressed == QtCore.Qt.ShiftModifier:
print "shift"
if key_pressed == (QtCore.Qt.ControlModifier | QtCore.Qt.ShiftModifier) :
print "shift-ctrl"
for sel_point in sel_geo.globPoints(sel_pattern):
try:
path_hda = sel_point.stringAttribValue("path_hda")
frame = sel_point.intAttribValue("frame")
print path_hda + "/" + str(frame)
except:
attributes_missing = 1
# repeat
sel()
sel()
enlarge bounding boxes
thanks F1!
node = hou.node('/obj/geo1/file1')
geo = node.geometry()
bba = geo.boundingBox()
node = hou.node('/obj/geo1/transform1')
geo = node.geometry()
bbb = geo.boundingBox()
bba.enlargeToContain(bbb)
add event callback
has to be a tuple of events, thanks Graham!
def name_changed(node, event_type, **kwargs):
print("The geometry object is now named", node.name())
hou.node("/obj/geo1").addEventCallback( (hou.nodeEventType.NameChanged,) , name_changed)
reference copy
Thanks to Henry, Toadstorm!
parent = hou.node('/path/to/parent')
nodeToCopy = parent.node('./nodeToCopy')
parent.copyItems( (nodeToCopy, ), channel_reference_originals = True)
load from file
Thanks to Alex!
geo = hou.pwd().geometry() for f in random_file_list: geo.loadFromFile(f)
create attribute
Thanks to F1!
geo = hou.pwd().geometry()
new_p = geo.addAttrib(hou.attribType.Point, 'new_p', 0.0)
old_p = geo.findPointAttrib('old_p')
for point in geo.points():
val = point.attribValue(old_p)
point.setAttribValue(new_p, val)
### Or do it this way:
geo = hou.pwd().geometry()
new_p = geo.addAttrib(hou.attribType.Point, 'new_p', 0.0)
values = geo.pointFloatAttribValues('old_p')
geo.setPointFloatAttribValues('new_p', values)
first keyframe's time
thanks to Toadstorm!
keyframes = hou.node('/path/to/node').parm('someParameter').keyframes()
min = 999999
for k in keyframes:
if k.frame() < min:
min = k.frame()
return min
event callback on parm change
thanks to MrScienceOfficer!
node.addEventCallback(hou.nodeEventType.ParmTupleChanged, call_func)
all the tabs
thanks to Bonsak!
tabs = hou.ui.paneTabs() # Get all the tabs
for tab in tabs: # Loop over them
if tab.type() == hou.paneTabType.NetworkEditor: # Test the type
tab.setPref('showdep','2') # Set
#get
#networkeditor.getPrefs()
pane under cursor
thanks to Varomix!
def getNetworkType():
# get desktop
curdesk = hou.ui.curDesktop()
activepane = curdesk.paneTabUnderCursor()
return activepane.type()
Bind light's "Enable" checkbox to the display flag
obj = hou.node(".")
return obj.isDisplayFlagSet()
Reference SOP input from chopnet Geometry
chopnode = hou.node("..")
chopname = chopnode.name() # chopnet_smooth
chopnet,task = chopname.split('_') # chopnet smooth
channelnodepath = "../../channel_" + task # ../../channel_smooth
channelnode = hou.node(channelnodepath)
inputpath = channelnode.inputs()[0].path()
return inputpath
instances() nodes of type in the scene
thanks to julian johnson!
node_type = hou.objNodeTypeCategory().nodeTypes()['bone']
for x in node_type.instances():
print x
hou.playbar.setPlaybackRange(self, start, end)
print node.type().name() # file, filecache, delete, solver, dopimport, ...
node = hou.pwd()
path = node.path()
objContextNodeName = path.split('/)[-2]