在节点的参数框中,可以将表达式语言模式从默认的Hscript切换为Python,从而编写Python格式的表达式内容。
return语句
在参数的表达式编辑窗口的Python模式下,需要使用return语句进行返回。
(未知原因,return语句必须在非首行才能有效识别,否则报错)。
包名前缀
参数中的Python表达式在运行时,会默认进行一系列的导入声明,如下:
from hou import *from hou.session import *from math import (acos, asin, atan, atan2, ceil, cos, cosh, degrees, exp, fabs, floor, log, log10, pow, radians, sin, sinh, sqrt, tan, tanh)所以在参数表达式中使用hou以及math等包时,可以不加包名前缀,如:
return hou.lvar("TX")return lvar("TX") # 与上句结果等同。
Houdini本地&全局变量
在参数框中,要通过Python访问Hscript本地变量(如$TX),需要使用hou.lvar("name")函数,函数引入不带$前缀的变量名称即可。
如下:
return lvar("TX") # 与Hscript模式下的$TX结果等同对于Houdini的全局变量,如$F,则需要使用hou.text.expandString()函数,该函数返回值为字符串,所以对于其它数据类型,需要将返回值进行相应转换:
return float(expandString("$F")) #返回浮点10此外还有hou.text.expandStringAtFrame()函数,可以获取指定帧上的全局变量值。
几何元素变量
很多SOP节点都支持在参数表达式中访问元素信息,即几何属性(如@pscale),则可以使用节点对象的curPoint().attribValue("name")方法。
须注意,这需要先使用hou.pwd()方法获取到参数项所在的节点对象,如:
return pwd().curPoint().attribValue("pscale")
字符串参数值的识别机制
对于字符串参数项,如果直接输入纯粹的字符内容,则参数向一般都会识别内容中的扩展字符,如:
image_$F.pic #
最终会被识别为image_1.pic而如果将内容声明为字符串,也就是加上引号时,则引号内的内容会被识别为Python格式的字符串内容,而不再识别上述扩展字符,这样就只能根据Python的扩展规则进行编写:
"image_%d.pic" % frame() # 最终会被识别为image_1.pic
单行与多行
对于单行输入,参数项识别Python语法的单行表达式;对于多行输入,则必须具有return语句。(未知原因,return语句必须在非首行才能有效识别,否则报错)
编译上下文
Houdini中,Python Shell窗口和 参数项 都可以运行Python脚本内容,但是两者是相互独立的,也就是Python Shell中创建的全局变量并不会影响到表达式中的Python编译。
如果要在表达式中访问Python Shell的全局变量,则可以使用__import__("__main__")语句导入指定的全局变量,如:
__import__("__main__").var_name
自定义默认函数——
如果要创建在表达式参数项中默认存在的函数,需要在初始启动(startup)的脚本文件( $HOUDINI_USER_PREF_DIR / pythonX.Ylibs / pythonrc.py)中提前定义和声明。
如下(代码来自官网):
# This would go in a startup script like $HOUDINI_USER_PREF_DIR/pythonX.Ylibs/pythonrc.py# Add a clamp function to the parameter contextdef clamp(value, min, max): return (min if value < min else (max if value > max else value))hou.expressionGlobals()["clamp"] = clamp# Make a pi variable available in the parameter contextfrom math import pihou.expressionGlobals()["pi"] = math.pi获取当前节点对象——
使用hou.pwd()函数可以获取到参数项所在的节点对象,从而获取节点对象本身的其他信息。
更多相关技术内容咨询欢迎前往并持续关注好学星城论坛了解详情。
想高效系统的学习Python编程语言,推荐大家关注一个微信公众号:Python编程学习圈。每天分享行业资讯、技术干货供大家阅读,关注即可免费领取整套Python入门到进阶的学习资料以及教程,感兴趣的小伙伴赶紧行动起来吧。
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!