在设置DependentsDirty()期间,脏插头仍然具有旧值
Dirtied plug still has the old value during setDependentsDirty()
当我弄脏一个输入插件(例如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()
,它仍然保持旧值。
如果你仔细查看文档,你会发现为什么你没有得到更新的值
"重要提示:由于setDependentsDirty()方法是在脏传播期间调用的,因此您必须小心不要在例程中执行任何依赖关系图计算。相反,如果您想知道plug的值,请使用MDataBlock::outputValue(),因为它不会导致计算(从而导致递归)。通常用户将要实现的方法应该只涉及固定的关系。在极少数情况下,您需要查看plug值,请注意{MDataBlock::outputValue()}的警告,并使用包含在脏传播开始之前已知最新值的plug。"