houdini基础
2018-03-22 18:10:28    760    0    0
janhui

message对话框

该命名返回点击buttons列表中的序号

buttons = ['ok','close']
spam = hou.ui.displayMessage('text',buttons)
print buttons[spam]

readInput对话框

该命名返回点击的buttons中的序号,输入框中输入的文字内容

buttons = ['ok','cancel']
spam = hou.ui.readInput('Give me a number:',buttons)
print buttons[spam[0]], spam[1]

Python Source Editor中的函数

在python source editor中定义的函数,在python shell中的调用方法如下:

hou.session.demo()

 获取houdini的python环境

import hou
hou.houdiniPath()

添加houdini全局表达式

import hou
hou.expressionGlobals()["expression name"] = moudle name

houdini Hscript/Python表达式的对比

表达式切换方式在如图位置:

获取houdini用户配置文件夹方法

hou.homeHoudiniDirectory()
# 获取版本号
hou.applicationVersion()
hou.applicationVersionString()

 houdini帮助文档汉化技巧

按F1打开的web窗口中的 127.0.0.1* 地址可直接复制到goole浏览器中打开,并直接进行翻译,其他类似的web页面同理。

 

 获取场景所有节点的方法

import hou
# 指定为全局节点位置
obj = hou.pwd()
# 获取该路径下所有的节点
# 该方法包含当前obj节点
allNodes = obj.allNodes()
# 该方法不包含当前obj节点
allNodes = obj.allSubChildren()
for node in allNodes:
    # 节点的名称
    print node.name()
    # 节点的全局路径
    print node.path()
    # 节点类型
    print node.type().name()
    
# 获取指定节点子层级下所有的指定类型的节点, 最后的True表示递归查询
import toolutils
nodes = toolutils.findAllChildNodesOfType(hou.pwd(), 'nodeType', True)
# 获取指定节点子层级下指定类型的属性为指定数字的节点
nodes = toolutils.findAllChildNodesOfTypeWithParms(hou.pwd(), 'alembic', {'fileName': 'geo/default.abc'}, True)

获取和修改节点的属性

import hou
node = hou.node('/obj/Cloud/rop_geometry1')
# 查询节点的所有属性
for parm in node.parms():
    print parm.name()
# 查询节点指定的属性
attr = node.evalParm('sopoutput')
# 修改节点属性
node.setParms({'sopoutput': '/home'})
# 获取节点的所有输入
for input in node.inputs():
    print input
# 获取节点的所有输出
for ouput in node.outputs():
    print ouput
##
# 直接把节点的属性拖进python shell中,可得到该属性的对象代码
sop =  hou.parm('/obj/Cloud/rop_geometry1/sopoutput')
# 获取属性的值
print sop.eval()
# 设置属性的值
sop.set('/home')
# 设置属性的表达式
sop.setExpression('expression')
# 获取时间帧20时的值
print sop.evalAtFrame(20)
# 获取属性的同类相关属性集合
end = hou.parmTuple('/obj/Cloud/rop_geometry1/f')[1]
or f in end.tuple():
    # 获取对应属性的名称和值
    print f.name(), f.eval()
# 判断一个parm节点读取的是否是序列
parm = hou.parm('/obj/file1/file2/file')
parm.isTimeDependent()
# 查询一个parm在frame中的值是多少
parm.evalAsStringAtFrame(12.0)
# 查询求值之前的字符串内容
parm.unexpandedString()

 获取file节点的parm指定的序列

判断是否是序列

判断$F是否在parm的值中,并获取路径名称

用$F分割parm值,并对最后一项进行数字前缀删除

查询目录下符合命名规则的所有文件

import hou, os, re
node = hou.node('/obj/file1/file2')
parm = node.parm('file')
if parm.isTimeDependent():
    print 'This parm is load squences.'
    unexpand = parm.unexpandedString()
    dirname, squencename = os.path.split(unexpand)
    if '$F' in unexpand:
        print '$F in parm value.'
        startname, endname = squencename.split('$F')
        match = re.match(r"^[0-9]*", endname)
        if match:
            nums = match.group()
            endname = endname[len(nums):]
        else:
            nums = ''
        ######### 用正则表达式判断文件名称是否符合序列要求
        file_list = list()
        if nums:
            test_compile = re.compile(r"^%s\d{%s}%s$"%(start, nums, end))
        else:
            test_compile = re.compile(r"^%s\d+%s$"%(start, end))
        for file in os.listdir(dirname):
            if test_compile.match(file) and os.path.isfile(os.path.join(dirname, file)):
                file_list.append(file)
        
else:
    print 'This parm is load a file.'

 给读取的文件添加版本号的方法

import hou, os, re
# 判断文件名称是否为v001样式开头的正则表达式
re_compile = re.compile(r"^v\d{3}_")
# 将文件版本好添加到文件名称的最前方,方便识别
re_compile.match(filename)


 

上一篇: 自控力-解读

下一篇: 无

760 人读过
立即登录, 发表评论.
没有帐号? 立即注册
0 条评论
文档导航