在setDependentsDirty()

时间:2016-08-01 06:31:52

标签: c++ api updates maya

当我弄脏输入插件例如mFileAttr时,setDependentsDirty()被正确调用,但fileName插件的值仍然是旧值!我只看到它在通过compute()后才会更新。如何在setDependentsDirty()函数中访问新值,因为它确实是由插值更新触发的?

MStatus FNode::setDependentsDirty(const MPlug& plug, MPlugArray& plugArray) {
    if (plug == mFileAttr)
    { 
        MPlug fileNamePlug(thisMObject(), plug);
        MString fileName = fileNamePlug.asString();
    }
    return MPxNode::setDependentsDirty(plug, plugArray); }

编辑: 只是为了澄清,读取插件值本身plug.asString(),它仍然保留旧值。

1 个答案:

答案 0 :(得分:0)

如果你仔细查看doc,你就会明白为什么你没有得到更新的值

"重要说明:由于在脏传播期间调用了setDependentsDirty()方法,因此必须注意不要在例程中执行任何依赖图计算。相反,如果您想知道插件的值,请使用MDataBlock :: outputValue(),因为它不会导致计算(从而导致递归)。通常,用户将实现的大多数{setDependentsDirty()}方法应仅涉及固定关系。在您需要查看插件值的罕见情况中,请注意{MDataBlock :: outputValue()}的警告并使用包含您知道在脏传播开始之前是最新的值的插件。 "