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.
以外的事情
我有一个 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.