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])
效果如下