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

deleteNode in Maya Api crashes Maya in Viewport 2.0

本文关键字:Maya 中的 崩溃 Api deleteNode Viewport      更新时间:2023-10-16

我有一个Maya api cpp代码,创建许多相同实例的mpxlocator。

initializePlugin功能:

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中)。

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

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

我最终使用MGlobal::executeCommand("delete <nodename>");不会崩溃maya。它似乎比deleteNode api做了别的事情。