MPxNode中的非Maya c ++对象属性

时间:2015-08-10 08:03:49

标签: c++ plugins maya maya-api

我正在开发一个C ++插件,我想知道一种在场景中使用非Maya类对象的方法。我的意思是,我希望将Maya API外部的类实例作为Node类的属性。该类非常复杂,由多个类组成。

我所看到的是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; // ????

非常感谢

1 个答案:

答案 0 :(得分:0)

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

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