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