Как получить доступ к новому значению PropertyEvent в MATLAB R2014b?

Фон

В предыдущих версиях MATLAB (например, R2013b) у меня был хитрый прием, когда я прикреплял слушателя к дескриптору оси YLim свойство, которое сообщит мне, когда оси Y были изменены:

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

Я использовал это, чтобы обновить вторую цифру, которая показала бы некоторую сводную статистику подмножества данных, видимых в этих осях. И это было потрясающе! Вы увеличиваете масштаб, и вторая фигура обновляется сама. Отлично.

Делая это PreSet (скорее, чем PostSet) Слушатель был полезен, потому что тогда я мог проверить, было ли новое значение таким же, как и старое значение, и, таким образом, избежать повторного вычисления этой статистики, когда в этом нет необходимости.

Эта проблема

Тем не менее, это больше не работает для меня в R2014b. Я могу подключить прослушиватель событий, но когда я запускаю событие, я получаю следующее сообщение об ошибке:

Нет подходящего метода, свойства или поля NewValue для класса event.PropertyEvent.

Я считаю, что это как-то связано с графической системой 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'

Куда это делось?! Конечно, должен быть способ получить к нему доступ. Предустановленный обработчик события свойства бесполезен, если вы не можете получить доступ к новому значению, которое вы пытаетесь установить.

1 ответ

Свойство meta.property object содержит дескрипторы функций для методов set и get свойства. Свойство SetMethod содержит дескриптор функции для метода set свойства, а свойство GetMethod содержит дескриптор функции для метода get свойства. Надеюсь, эта ссылка поможет вам

Другие вопросы по тегам