Maya 中的 deleteNode Api 使 Viewport 2.0 中的 Maya 崩溃

deleteNode in Maya Api crashes Maya in Viewport 2.0

我有一个 Maya api cpp 代码,它创建了同一实例的许多 MPxLocators。

初始化插件函数:

pluginFn.registerNode(
      "unitNode",
       unitNode::id,
       &unitNode::creator,
       &unitNode::initialize,
       MPxNode::kLocatorNode,
       &unitNode::drawDbClassification);

    MHWRender::MDrawRegistry::registerDrawOverrideCreator(
     unitNode::drawDbClassification,
     unitNode::drawRegistrantId,
     unitNodeDrawOverride::Creator);

节点创建函数:

MDagModifier dagMod;
for (int i=0;i<100;i++)
     externalClass->objArray[i]=dagMod.createNode("unitNode", MObject::kNullObj);

删除(例如在属性更改后从节点 #15 启动):

MDGModifier mdg;
mdg.deleteNode(externalClass->objArray[99]);

当这些定位器之一中的特定属性发生更改时,我会删除另一个给定的定位器(因此永远不会删除它本身)。 MDGModifer::deleteNode 功能运行良好,但 maya 随后立即崩溃(仅在 Viewport 2.0 中,不在常规 viewPort 中)。

我的假设是 Maya 仍在其队列中启动 prepareForDraw 和绘制函数所有定位器,但当我删除其中一个时,Maya 崩溃了。如何在属性更改后安全地删除节点?

如果不查看要调试的代码,很难确定可能导致崩溃的原因,但在您的情况下,我会先尝试断开要删除的节点的所有传入和传出连接,然后再尝试删除节点。

我最终使用了不会使 Maya 崩溃的 MGlobal::executeCommand("delete <nodename>");。它似乎在做除 deleteNode api.

以外的事情