環境:Houdini 20.0.751
SimpleDrawable()を使ってHDA内の特定ノードのジオメトリを表示させてみる。
HDA内のノードは以下の通り。Input0へつなげたNull SOPを配置し、これをViewer Stateで表示されるようにします。
Viewer Stateのコード
import hou
import viewerstate.utils as su
class State(object):
def __init__(self, state_name, scene_viewer):
self.state_name = state_name
self.scene_viewer = scene_viewer
self.node = None
self.drawableGeo = None # ジオメトリ
# ユーザーがStateに入ると呼び出される
def onEnter(self, kwargs):
self.node = kwargs["node"]
# ジオメトリ
hda_node = self.scene_viewer.currentNode()
colli = hda_node.node('null1').geometry()
self.drawableGeo = hou.SimpleDrawable(self.scene_viewer, colli, "drawable_geometry")
self.drawableGeo.setDisplayMode(hou.drawableDisplayMode.WireframeMode)
#self.drawableGeo.setDisplayMode(hou.drawableDisplayMode.CurrentViewportMode)
self.drawableGeo.enable(True)
self.showGeometry(True)
# Stateが中断された時に呼び出される
def onInterrupt(self,kwargs):
self.showGeometry(False)
# Stateの中断が再開された時に呼び出される
def onResume(self, kwargs):
self.showGeometry(True)
def showGeometry(self, visible):
self.drawableGeo.show(visible)
def createViewerStateTemplate():
""" Mandatory entry point to create and return the viewer state
template to register. """
state_typename = kwargs["type"].definition().sections()["DefaultState"].contents()
state_label = "ViewerStateSimpleDrawable::1.0"
state_cat = hou.sopNodeTypeCategory()
template = hou.ViewerStateTemplate(state_typename, state_label, state_cat)
template.bindFactory(State)
template.bindIcon(kwargs["type"].icon())
return template
setDisplayMode()でフェース、またはワイヤーフレーム表示に設定できる。