SimpleDrawableでモデルを表示する

環境: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()でフェース、またはワイヤーフレーム表示に設定できる。

タイトルとURLをコピーしました