脏插头在 setDependentsDirty() 期间仍然具有旧值

问题描述 投票:0回答:1

当我弄脏输入插头(例如

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()
,它仍然保留旧值。

c++ maya
1个回答
0
投票

如果仔细查看文档,您会明白为什么没有获得更新的值

“重要提示:由于在脏传播期间调用 setDependentsDirty() 方法,因此您必须小心,不要在例程内执行任何依赖图计算。相反,如果您想知道插头的值,请使用 MDataBlock:: outputValue() ,因为它不会导致计算(因此不会导致递归)。一般来说,用户将实现的大多数 {setDependentsDirty()} 方法应该只涉及固定关系,在极少数情况下您需要查看插头值。 ,请注意 {MDataBlock::outputValue()} 的警告,并使用包含您知道在脏传播开始之前是最新的值的插件。 ”

© www.soinside.com 2019 - 2024. All rights reserved.