我正在开发一个c++插件,我想知道一种通过场景与非玛雅类对象一起工作的方法。我的意思是,我想有一个类的实例外部玛雅API作为节点类的属性。该类相当复杂,由多个类组成。
我所看到的是,一个节点可以给我结构化数据存储,但据我所知,它只适用于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; // ????
非常感谢
不,没有办法让你从纯粹的面向对象的角度创建一个玛雅节点,并从我们的库中派生出任何类。Maya MPxNode是一个代理类,封装了Maya内部节点逻辑。但是,当您实现自定义节点时,您将描述属性应该是什么,因此Maya可以处理您的数据并在DG中创建连接。设置和处理属性的方式由您决定。当Maya请求重新计算属性值时,您需要将自己的逻辑放入computer()方法中。
有关定制节点和库集成的更多详细信息,请参阅此处发布的文章http://around-the-corner.typepad.com/