我有一个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中)。
我的假设是Maya仍然在其队列中启动prepareForDraw和绘制函数对于所有定位器,但是当我删除其中一个时,Maya正在崩溃。如何在属性更改后安全删除节点?
答案 0 :(得分:0)
如果不查看要调试的代码,很难确定可能导致崩溃的原因,但在您的情况下,我会先尝试先删除要删除的节点的所有传入和传出连接,然后再尝试删除节点
答案 1 :(得分:0)
我最终使用MGlobal::executeCommand("delete <nodename>");
并没有崩溃maya。它似乎除了deleteNode api之外还有其他功能。