ジオメトリ
input1に差したジオメトリを参照する場合
inputs = node.inputs()
geo1 = inputs[1].geometry()
# Cdを取得
list_color = geo1.pointFloatAttribValues('Cd')
for point in geo1.iterPoints():
pos = point.position()
color = point.attribValue('Cd')
Point
アトリビュートを取得する
# Pointのアトリビュート"ratio"を配列で取得
list_ratio = geo.pointFloatAttribValues('ratio')
print list_ratio
# (0.11170145124197006, 0.1238456666469574, 0.13478811085224152, 0.07900062948465347)
# Cdを取得:そのままVector3の値が配列に格納される
list_color = geo.pointFloatAttribValues('Cd')
print list_color
# (0.05352380499243736, 0.14770568907260895, 0.1253947913646698, 0.07233432680368423, 0.21750175952911377, 0.1926003396511078)
アトリビュートを編集する
# @numpt
numpt = len(geo.points())
print numpt
for point in geo.iterPoints():
# @ptnum
index = point.number()
# 座標を変更
pos = point.position()
point.setPosition(pos + hou.Vector3([0, 1, 0]))
# Cd値を取得する
color = point.attribValue('Cd')
print color
# Cd値を修正する
point.setAttribValue('Cd', hou.Vector3([1, 0, 0]))
Primitive
プリミティブの値の取得
epsilon = geo.prim(0).attribValue('reductionLength')
プリミティブでアトリビュートの作成、読み込み、値の設定をする
geo.addAttrib(hou.attribType.Prim, "newName", "test")
for prim in geo.prims():
str = prim.attribValue('name')
prim.setAttribValue('newName', str + "_test")
各プリミティブからポイント座標を取得する
node = hou.pwd()
geo = node.geometry()
for prim in geo.iterPrims():
for point in prim.points():
print(point.position())
'''
[-167.111, 318.391, -130.838]
[-144.301, 413.039, 92.9219]
[40.3859, 440.139, 290.962]
[156.143, 384.721, 473.141]
'''
Detail
型別で読み込む例
# int
car_size = geo.intAttribValue('car_size')
# int配列
car_size_list = geo.intListAttribValue('car_size_list')
# float
car_speed = geo.floatAttribValue('car_speed')
# float配列
car_speed_list = geo.floatListAttribValue('car_speed_list')
# string
car_name = geo.stringAttribValue('car_name')
# string配列
car_list = geo.stringListAttribValue('car_name_list')
# 他のノードから参照する場合
ref_node = hou.node("../object_merge_grid")
ref_geo = ref_node.geometry()
rows = ref_geo.intAttribValue('rows')
columns = ref_geo.intAttribValue('cols')
PythonノードではDetailはGlobalになる。
# Detailに文字列の変数を追加する場合
geo.addAttrib(hou.attribType.Global, 'path', '')
# 値を書き込む
geo.setGlobalAttribValue('path', 'abcdefg')
直下につないだPythonノードで変数を取得する場合
newPath = geo.stringAttribValue('path')
配列の場合
# 配列でアトリビュートを追加して値を設定する
geo.addArrayAttrib(hou.attribType.Global, 'cat_list', hou.attribData.String, 1)
# 値を書き込む
geo.setGlobalAttribValue('cat_list', self.cat_list)