0

我正在开发一个 C++ 插件,我想知道一种通过场景处理非 Maya 类对象的方法。我的意思是,我想要一个 Maya API 外部类的实例作为 Node 类的属性。该类相当复杂,由多个类组成。

我所看到的是节点可以为我提供结构化数据存储,但据我所知,它仅适用于 Maya 类型,这不足以满足我的目的。

现在我正在使用 MPxCommand 来执行该对象的计算,但是一旦完成,它就会被销毁。我想让它在场景中保持活力,所以我需要以某种方式使用节点。目前没有必要存储数据。

那么,您知道在 Maya 中执行与典型 OOP 类等效的方法吗?我在 devkit 或文档中没有找到任何示例。

class Foo : public MPxNode
{
    public:
        Foo () {};
    virtual         ~Foo () {};
    virtual MStatus compute(const MPlug& plug, MDataBlock& data);
    static  void*   creator();
    static  MStatus initialize();

    static MObject  inputMesh;
    static MTypeId  id;

    // I want to keep it alive through the scene.
    // static ClassBar  myBarObject; // How can I do this??

    // barFunction(...); // use ClassBar myBarObj
};

MObject Foo::inputMesh;
MTypeId Foo::id( 0x80000 );
//ClassBar  Foo::myBarObj; // ????

非常感谢

4

1 回答 1

0

不,您无法从纯 OOP 的角度创建 Maya 节点并派生自我们库中的任何类。Maya MPxNode 是封装 Maya 内部节点逻辑的代理类。但是,当您实现自定义节点时,您会描述属性应该是什么,以便 Maya 可以处理您的数据并在 DG 中创建连接。设置和处理属性的方式取决于您。当 Maya 请求重新计算属性值时,您需要将自己的逻辑放入 computer() 方法中。

有关自定义节点和库集成的更多详细信息,请参阅那里发布的文章 http://around-the-corner.typepad.com/

于 2016-01-13T16:39:25.877 回答