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)
没有帐号? 立即注册