10

バックグラウンド

MATLAB の以前のバージョン (R2013b など) では、軸ハンドルのYLimプロパティにリスナーをアタッチして、軸の y 制限が変更されたときに通知する巧妙なトリックがありました。

addlistener(gca, 'YLim', 'PreSet', @(src,ev_data) disp(ev_data.NewValue))

これを使用して、これらの軸に表示されるデータのサブセットの要約統計を示す 2 番目の図を更新しました。そしてそれは最高でした!ズームインすると、2 番目の図が更新されます。偉大な。

新しい値が古い値と同じかどうかを確認できるため、PreSet(ではなく)リスナーにすることで、不要な場合にこれらの統計を再計算することを回避できるため、便利でした。PostSet

問題

ただし、これは R2014b では機能しなくなりました。イベント リスナーをアタッチすることはできますが、イベントをトリガーすると、次のエラー メッセージが表示されます。

クラス event.PropertyEvent に適切なメソッド、プロパティ、またはフィールド NewValue がありません。

これは HG2 グラフィックス システムと関係があると思います。適切なブレークポイントを使用して、イベント データを確認できます。R2013b では:

K>> ev_data
ev_data =
    handle.PropertySetEventData

K>> get(ev_data)
              Type: 'PropertyPreSet'
            Source: [1x1 schema.prop]
    AffectedObject: [1x1 axes]
          NewValue: [0.5000 220.5000]

R2014b では、次のNewValueフィールドが欠落しているようです。

K>> ev_data
ev_data = 
  PropertyEvent with properties:

    AffectedObject: [1x1 Axes]
            Source: [1x1 matlab.graphics.internal.GraphicsMetaProperty]
         EventName: 'PreSet'

どこに行ったの?! 確かにアクセスする方法はあるはずです。設定しようとしている新しい値にアクセスできない場合、プロパティの事前設定イベント ハンドラーは役に立ちません。

4

1 に答える 1