Skip to content

Instantly share code, notes, and snippets.

@kickbase
Created December 3, 2022 07:15
Show Gist options
  • Save kickbase/64ef93db9ff2a6a5b356b39e50e1c20c to your computer and use it in GitHub Desktop.
Save kickbase/64ef93db9ff2a6a5b356b39e50e1c20c to your computer and use it in GitHub Desktop.
[ Houdini ][ Python] Create unencapsulated HDA
import soptoolutils
# この行で自分自身を生成しているため、ここをコメントアウトして自身のノード生成をキャンセルする
# soptoolutils.genericTool(kwargs, '$HDA_NAME')
# Create Null
origin = soptoolutils.genericTool(kwargs, 'null', nodename='SET_DIR')
# Create scatter
scatter = soptoolutils.genericTool(kwargs, 'scatter')
scatter.setPosition(origin.position() + hou.Vector2(3, -1))
scatter.setInput(0, origin)
scatter.parm('npts').set(1)
# Create Sphere
sphere = soptoolutils.genericTool(kwargs, 'sphere')
sphere.setPosition(origin.position() + hou.Vector2(1, -1))
sphere.setInput(0, None)
# Create Swich
switch = soptoolutils.genericTool(kwargs, 'switch')
nodes = [sphere, scatter]
pos = []
for i, n in enumerate(nodes):
switch.setInput(i, n)
pos.append(n.position())
posX = sum([x[0] for x in pos]) / len(pos)
posY = min([x[1] for x in pos])
switch.setPosition(hou.Vector2(posX, posY - 1))
# Create Transform
transform = soptoolutils.genericTool(kwargs, 'xform')
transform.setPosition(switch.position() + hou.Vector2(0, -1))
transform.setInput(0, switch)
for k, v in zip('px py pz'.split(), 'D_X D_Y D_Z'.split()):
transform.parm(f'{k}').setExpression(f'centroid(0, {v})', language=hou.exprLanguage.Hscript)
# Create wrangle
wrangle = soptoolutils.genericTool(kwargs, 'attribwrangle', nodename='attribwrangle__dir')
for i, n in enumerate([origin, transform]): wrangle.setInput(i, n)
wrangle.setPosition(hou.Vector2(origin.position()[0], transform.position()[1] - 1))
wrangle.parm('snippet').set('v@__dir = point(1, "P", 0) - @P;\nif(chi("do_normalize")) v@__dir = normalize(v@__dir);')
parmGroup = wrangle.parmTemplateGroup()
parm = hou.ToggleParmTemplate('do_normalize', 'Do Normalize', 1)
parmGroup.append(parm)
wrangle.setParmTemplateGroup(parmGroup)
# Create Null
end = soptoolutils.genericTool(kwargs, 'null', nodename='GET_DIR')
end.setPosition(wrangle.position() + hou.Vector2(0, -1))
end.setInput(0, wrangle)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment