Add SOPを座標を設定して生成する

環境:Houdini 20.0.751

Add SOPで何かしらの変更を加えた後に、その状態のAdd SOPを作成したい場合があると思います。

例えば平面上に作成したAdd SOPのポリラインを交差判定で座標に変更を加えた後に、編集のしやすさからそれを初期状態にしたAdd SOPをつくりたいことがよくあります。

新しくAdd SOPを生成する

Pythonを実行できるNull SOPを作成し、ジオメトリを接続する。
Pythonコードを実行するノードの作成

コードは以下のようにする。

node = hou.pwd()
geo = node.geometry()

# Add SOPを生成する
add_node = hou.node('..').createNode("add")

# PolygonsのBy Groupを選択してポリラインの状態にする
add_node.parm("switcher1").set(1)

# ポイント数
numpt = len(geo.points())
add_node.setParms({"points" : numpt})

for point in geo.iterPoints():
    # @ptnum
    index = point.number()

    # 座標
    pos = point.position()

    # 座標を設定する
    ptx_parm = add_node.parm("pt"+ str(index) + "x")
    ptx_parm.set(pos.x())

    pty_parm = add_node.parm("pt"+ str(index) + "y")
    pty_parm.set(pos.y())

    ptz_parm = add_node.parm("pt"+ str(index) + "z")
    ptz_parm.set(pos.z())

Null SOPと同じ階層にAdd SOPが生成される。

メモ:相対パスはカレントディレクトリを[.]、一つ上の階層を「..」で表記する。この場合はNull SOPと同じ階層にするためにhou.node(‘..’)としている。

ポイントと座標は設定済みの状態となっている。

すでに存在するAdd SOPにポイントをコピーする

他のAdd SOPを指定し、一度すべてのポイントをクリアした後、同じ要領でポイントを設定していく。

node = hou.pwd()
geo = node.geometry()

# Add SOPを指定する
add_node = hou.node('../add_target')

# ポイント数をクリアする
add_node.parm("points").set(0)

# PolygonsのBy Groupを選択する
add_node.parm("switcher1").set(1)

# ポイント数
numpt = len(geo.points())
add_node.setParms({"points" : numpt})

for point in geo.iterPoints():
    # @ptnum
    index = point.number()

    # 座標
    pos = point.position()

    # 座標を設定する
    ptx_parm = add_node.parm("pt"+ str(index) + "x")
    ptx_parm.set(pos.x())

    pty_parm = add_node.parm("pt"+ str(index) + "y")
    pty_parm.set(pos.y())

    ptz_parm = add_node.parm("pt"+ str(index) + "z")
    ptz_parm.set(pos.z())
タイトルとURLをコピーしました