環境: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())