当我弄脏输入插件例如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()
,它仍然保留旧值。
答案 0 :(得分:0)
如果你仔细查看doc,你就会明白为什么你没有得到更新的值
"重要说明:由于在脏传播期间调用了setDependentsDirty()方法,因此必须注意不要在例程中执行任何依赖图计算。相反,如果您想知道插件的值,请使用MDataBlock :: outputValue(),因为它不会导致计算(从而导致递归)。通常,用户将实现的大多数{setDependentsDirty()}方法应仅涉及固定关系。在您需要查看插件值的罕见情况中,请注意{MDataBlock :: outputValue()}的警告并使用包含您知道在脏传播开始之前是最新的值的插件。 "