2016-08-01 1 views
0

のような入力プラグを汚すと、setDependentsDirty()が正しく呼び出されますが、fileNameプラグの値はまだ古い値です!私はそれがcompute()を通過すると更新されるのを見るだけです。 setDependentsDirty()関数の新しい値にプラグイン値の更新によって実際にアクセスされたので、どうすればこの値にアクセスできますか?汚れたプラグはまだ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

あなたがドキュメントに近い見てみる場合は、更新された値

に「重要な注意取得されていませんなぜあなたは表示されます。setDependentsDirty()メソッドが汚れて伝播中に呼び出されているので、あなたがいずれかを実行しないように注意しなければならないが(つまり、再帰)の結果とならないため、MDataBlock :: outputValue()を使用してください。一般に、{setDependentsDirty()の大部分は、プラグイン値を調べる必要があるまれなケースでは、{MDataBlock :: outputValue()}の警告に注意して、あなたが知っている値を含むプラグを使用してくださいダーティプロパの開始前の最新情報gation。 "

+0

これは実際には読んでいましたが、さまざまなプラグ接続を切断または接続しようとしているので、これはcompute()中にこれを行う方法がありません。私が気づいていない方法がないかぎり、compute()を実行します。詳しい説明はこれを見てください。http://stackoverflow.com/questions/38721084/disconnecting-connecting-plugs-gives-internal-failure-in-compute – Yasin

関連する問題