Created
December 3, 2022 07:15
-
-
Save kickbase/64ef93db9ff2a6a5b356b39e50e1c20c to your computer and use it in GitHub Desktop.
[ Houdini ][ Python] Create unencapsulated HDA
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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