【发布时间】:2017-02-26 07:39:08
【问题描述】:
我当前的项目要求我在时间线被擦洗或选择时调用特定的类函数(基本上是每帧)。我测试了cmds.expression(s = 'print "hello "') 的使用,发现每次我在擦洗时间线时将鼠标悬停在不同的帧上时,它都会像我预期的那样打印"hello "。但是,每当我尝试调用类函数(或任何其他已定义的函数)时,都会收到错误消息。这是我的代码的一般概要:
class DummyClass:
def __init__(self):
self.name = 'Dummy'
def displayName():
print self.name
d = DummyClass()
cmds.expression(s = 'd.displayName()')
我收到错误:# Error: line 0: Cannot find procedure "d.displayName". #
这是我试图查看是否可以调用任何函数定义的一般概要,更不用说类了:
def foo():
print 'Success!'
cmds.expression(s = 'foo()')
我收到错误:# NameError: name 'foo' is not defined #
也许我只是不明白cmds.expression() 的真正作用。它只适用于外部python文件或其他东西吗?我可以让cmds.expression(s = 'print "hello "') 工作,但显然在同一个脚本中找不到任何其他内容。我采取了错误的方法吗?我缺少语法吗?我花了很多时间研究这件事,但一无所获。
如何使用cmds.expression 从类中或其他地方调用定义的函数?如果这不可能,是否有类似的命令可以解决问题?
【问题讨论】:
-
cmds.expression创建一个表达式节点。该节点中的文本是常规 MEL 命令的子集——不是 python!。您可以在此处阅读表达式节点的作用:knowledge.autodesk.com/support/maya/learn-explore/caas/… 通常您只想使用表达式来控制动画属性。否则他们往往会减慢你的玛雅场景。
标签: python expression maya