Python Maya插件中的回调

2024-05-14 22:32:24 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试在我的Maya插件中创建一个回调,每次创建新对象时都会运行该回调。回调正常,但传递的数据对象不是类型。我想在回调函数中访问新创建的对象,我该怎么做?在

g_Callbacks = list()

def initializePlugin( obj ):
    g_Callbacks.append( OpenMaya.MEventMessage.addEventCallback( "DagObjectCreated", callback ) )

    ...

def callback( data ):
    print data.apiTypeStr()

Tags: 数据对象函数插件obj类型datadef
1条回答
网友
1楼 · 发布于 2024-05-14 22:32:24

从评论来看,这听起来有两个不同的问题。在

关于对象创建的通知是“免费”的,从某种意义上说,您可以通过使用scriptJob而不用API来完成这项工作。这里有一个小例子

def new_object_callback():
    print "created", cmds.ls(sl=True)

cmds.scriptJob(e=('DagObjectCreated', new_object_callback))

这里的回调只是一个普通的python脚本,但它可能是一个由MPXCommand创建的函数(该链接是一个非常简单的命令插件btw的良好介绍)。在

这里有一个限制:创建回调将在每个撤消块中触发一次。一个菜单项、按钮或脚本会创建一个撤消操作,这意味着创建多个对象的操作只会收到一次通知(上面的示例代码将只打印出最后创建的对象的消息)。在

另一种解读这个问题的方法是,当你自己在插件中创建对象时,如何触发回调。这是一个更简单的问题,尽管用于创建对象的插件编写起来有点冗长。(一个体面的插入{a2},Python的东西与C++交织,因为所有这些文档都是为C++编写的),每个插件节点类必须有一个名为^ {CD1}}的函数,每当插件创建一个新节点时,它将被调用,这样你就可以用它来调用启动时需要运行的任何代码。在

OpenMaya是一个真正的麻烦,因为你基本上通过Python编写C++。以下是一些不错的参考资料:

http://www.amazon.com/Maya-Python-Games-Film-Reference/dp/0123785782http://www.amazon.com/Practical-Programming-Python-Robert-Galanakis/dp/1849694729

相关问题 更多 >

    热门问题