Houdini With Python学习记(CHAO)录(XI)01

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 With Python学习记(CHAO)录(XI)01_第1张图片

但是要注意这种方式只能在本次启动的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

Houdini With Python学习记(CHAO)录(XI)01_第2张图片

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])

效果如下

Houdini With Python学习记(CHAO)录(XI)01_第3张图片

 

 

 

 

 

 

 

 

 

 

 

你可能感兴趣的:(Houdini)