Как получить доступ к новому значению 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 свойства. Надеюсь, эта ссылка поможет вам