我正在开发一个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; // ????
非常感谢
答案 0 :(得分:0)
不,您无法从纯OOP的角度创建Maya节点,并从源自我们库的类派生。 Maya MPxNode是一个封装Maya内部节点逻辑的代理类。但是,在实现自定义节点时,您将描述属性应该是什么,因此Maya可以处理您的数据并在DG中创建连接。设置和处理属性的方式取决于您。当Maya请求重新计算属性值时,您需要将自己的逻辑放在computer()方法中。
有关自定义节点和库集成的更多详细信息,请参阅其中发布的文章 http://around-the-corner.typepad.com/