【问题标题】:Maya Python - How to Call Function Using cmds.expression()Maya Python - 如何使用 cmds.expression() 调用函数
【发布时间】: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


【解决方案1】:

标志s 设置表达式字符串。这种类型的表达式是可撤销、可查询和可编辑的。

你应该这样使用它:

import maya.cmds as mc
mc.expression( s = 'pSphere1.translateX = cos(time/2)*10' )

但是调用 Python 定义的函数,您可以按照 SO 帖子中描述的相同方式:

How do I use Def Function strings in maya

【讨论】:

    猜你喜欢
    • 2020-07-16
    • 2015-12-06
    • 2018-03-08
    • 2013-05-15
    • 2015-04-27
    • 1970-01-01
    • 2020-02-18
    • 1970-01-01
    • 2020-07-31
    相关资源
    最近更新 更多