page contents

Houdini表达式基础:Python模式应用!

在节点的参数框中,可以将表达式语言模式从默认的Hscript切换为Python,从而编写Python格式的表达式内容。

attachments-2025-05-9XbSuYfG6816c0fc1d4e1.jpg在节点的参数框中,可以将表达式语言模式从默认的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入门到进阶的学习资料以及教程,感兴趣的小伙伴赶紧行动起来吧。

attachments-2022-05-rLS4AIF8628ee5f3b7e12.jpg

  • 发表于 2025-05-04 09:21
  • 阅读 ( 70 )
  • 分类:Python开发

你可能感兴趣的文章

相关问题

0 条评论

请先 登录 后评论
小柒
小柒

2144 篇文章

作家榜 »

  1. 轩辕小不懂 2403 文章
  2. 小柒 2144 文章
  3. Pack 1307 文章
  4. Nen 576 文章
  5. 王昭君 209 文章
  6. 文双 71 文章
  7. 小威 64 文章
  8. Cara 36 文章