【问题标题】:deleteNode in Maya Api crashes Maya in Viewport 2.0Maya Api 中的 deleteNode 在 Viewport 2.0 中使 Maya 崩溃
【发布时间】:2015-07-20 10:09:37
【问题描述】:

我有一个 Maya api cpp 代码,可以创建同一实例的多个 MPxLocator。

初始化插件函数:

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 崩溃了。如何在属性更改后安全地删除节点?

【问题讨论】:

    标签: c++ events attributes nodes maya


    【解决方案1】:

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

    【讨论】:

    • 谢谢,我检查了这个,但是要删除的节点上绝对没有连接。
    • 正如问题中更新的那样,该问题仅在 ViewPort 2.0 中出现。除此之外,我测试了计时器的创建和节点的删除 5 秒(以确保完成刷新周期),但同样的问题。
    【解决方案2】:

    我最终使用了MGlobal::executeCommand("delete &lt;nodename&gt;");,它不会使 Maya 崩溃。它似乎做的不是 deleteNode api。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-11-06
      • 1970-01-01
      • 2020-02-02
      • 1970-01-01
      • 1970-01-01
      • 2017-04-26
      • 2011-01-11
      • 1970-01-01
      相关资源
      最近更新 更多