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中使用,如果下次啓動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])

效果如下

 

 

 

 

 

 

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章