1.获取一个node
n = hou.node('/obj/sphere_py01/sphere1')
print n.name()
print n.path()
2.获取一个参数(parm)
p = hou.parm('/obj/sphere_py01/sphere1/tx')
print p.eval()
3.在network view中移动一个node
n = hou.node('/obj/sphere_py01/sphere1')
n.move((2,3))
4.获取一个节点的code形式
n = hou.node('/obj/sphere_py01/sphere1')
p = hou.parm('/obj/sphere_py01/sphere1/tx')
n.asCode()
p.asCode()
5.获得选择的节点
hou.selectedNodes()
6.显示一个信息提示框
hou.ui.displayMessage("偷偷的藏一个苹果")
7.获取houdini的path
hou.houdiniPath()
返回值是
('E:/Houdini_Projects', 'D:/Documents/houdini16.5', 'D:/PROGRA~2/SIDEEF~1/HOUDIN~1.404/houdini', 'D:/PROGRA~2/SIDEEF~1/HOUDIN~1.404/bin')
接下来我在D:/Documents/houdini16.5/下创建了一个python2.7libs文件夹,这个文件夹里的py在新启动的houdini里可以在shell里import。如果文件夹里有个名为pythonrc.py的文件,这个pythonrc.py文件可以随着houdini的启动自动执行。
接下来我在python2.7libs文件夹写入一个combo.py文件,内容是:
def combine(textA, textB):
return textA + textB
重启启动Houdnini!!!
在pythonshell中输入
import combo
print combo.combine(1.4,58.8)
60.2
这里说明了houdini在shell里可以自动找到路径D:/Documents/houdini16.5/python2.7libs里的py库
使用如下可以执行任意路径下的py文件
execfile('D:\Documents\houdini16.5\python\myMult.py')
8.在parameter中使用python
先举个栗子:在parameter中使用之前combo.py里的方法。
在Python Shell中执行如下两句
>>> import combo
>>> hou.expressionGlobals()['combo'] = combo
然后在parameter中写入
但是要注意这种方式只能在本次启动的houdini中使用,如果下次启动houdini开启这个文件,会报错,需要重新在Python Shell中执行上面那两行
如果要解决每次启动houdini都要执行的麻烦的话,就在D:/Documents/houdini16.5/python2.7libs/pythonrc.py文件里写入如下:
import combo
hou.exepressionGlobals()['combo'] = combo
重启Houdini,这样就可以了
这个python2.7libs文件夹是houdini默认的,当然也可以自己配置houdini的环境配置文件。这里略略略略........
9.Python VS Hscripts
10.在Python Shell中如果不愿意写某个node的路径或者parm可以直接把他们拽到PythonShell中去
11.修改Node的name
>>> n = hou.node('/obj/sphere_py01')
>>> n.setName("SPHERE")
12.使用相对路径的话:
print n.node('..')
得到的是n的父级路径
13.获得所有的子级
n.children()
14.获得父级
n.parent()
15.创建节点
>>> n = hou.node('/obj/SPHERE')
>>> n.createNode('box','myBox')
16.删除节点
hou.node('/obj/SPHERE/myBox').destroy()
17.选中某个节点
n = hou.node('/obj/SPHERE')
n.setSelected(True)
18.某个节点是否被选中
n.isSelected()
19.获得节点的类型的名字
n.type().name()
20.获得节点参数的值
n = hou.node('/obj/sphere_py01')
一种是
n.parm('tx').eval()
另一种是
n.evalParm('tx')
如果要获取一个参数的元组
n.evalParmTuple('t')
21.节点的所有参数
n.parms()
22.修改节点的参数
n.setParms({'tx':6, 'ty':1, 'tz':-4})
注意如果tx ty tz中有已经是表达式控制的,则此对相应参数的修改无效,其他的生效。
23.获得节点的输入端
>>> m = hou.node('/obj/sphere_py01/merge1')
>>> m.inputs()
24.获得节点的输出端
m.outputs()
25.节点链接
>>> a = hou.node('/obj/sphere_py01/copytopoints1')
>>> a.setInput(0,hou.node('obj/sphere_py01/sphere3'))
这里做一个按左右排序链接input端的一个功能吧。(Houdini里自带的是Shift+R,有时对像merge这种n个input端的并不能完全的按左右排序去链接)
selectedN = hou.selectedNodes()
if len(selectedN) == 1:
n = selectedN[0]
ins = n.inputs()
if len(ins) > 1:
ins = sorted(ins, key=lambda x : (x.position())[0])
for i in range(len(ins)):
n.setInput(i, ins[i])
效果如下