MATLAB - как использовать event.eventData и эффективно - PullRequest
0 голосов
/ 30 ноября 2011

Для справочной информации и контекста для моего вопроса, пожалуйста, прочитайте этот вопрос .

Обратите внимание, что в методе updatePlot() моего кода DynamicPlotter я как бы "достигаю"DynamicDataset свойство, как указано ниже:

function updatePlot(obj, propNum)
    X = get(obj.LH(propNum), 'XData');
    Y = get(obj.LH(propNum), 'YData');

    X(end+1) = obj.(dynProps{propNum}).newestData(1);
    Y(end+1) = obj.(dynProps{propNum}).newestData(2);

    set(obj.LH(propNum), 'XData', X, 'YData', Y);
end

updatePlot - это обратный вызов слушателя.Вместо того, чтобы «добраться до», чтобы получить newestData, я задаюсь вопросом, было бы более эффективно, если бы данные были «представлены» для обратного вызова с event.eventData.Но я не уверен (а), как вообще использовать event.eventData (пример, приведенный в документации, мне не очень понятен), и (б), если это дает лучшую или худшую производительность.

ИтакЯ предполагаю, что мой главный вопрос заключается в том, как лучше всего updatePlot() получить доступ к newestData, как показано в методе выше: «получить и извлечь его» или использовать event.eventData, чтобы «отправить» точку данных в функциюзаговор?

Надеюсь, это было не очень двусмысленно.

1 Ответ

2 голосов
/ 02 декабря 2011

Сначала необходимо иметь класс, определяющий событие (в MyClass.m):

classdef MyClass < handle
  events
    % Event
    MyEvent
  end

  methods
    function obj = MyClass
      % Constructor
    end
  end
end

Затем необходимо создать собственный подкласс EventData (в MyEventData.m):

classdef MyEventData < event.EventData
  properties (Access = public)
    % Event data
    Data
  end

  methods
    function this = MyEventData(data)
      % Constructor
      this.Data = data;
    end
  end
end

Присоедините ваши данные к экземпляру класса данных события (в файле сценария):

X = 1:10;
Y = 1:10;
data = struct('XData', X, 'YData', Y);
eventData = MyEventData(data);

И запустите событие из вашего obj и попросите слушателя его прослушать:

obj = MyClass;
l = addlistener(obj, 'MyEvent', @(evtSrc,evtData)disp(evtData.Data));
notify(obj, 'MyEvent', eventData)

Каждый раз, когда вы вызываете notify(...), аргумент evtData в вашем обратном вызове слушателя будет содержать ваши данные в свойстве Data:

>> notify(obj, 'MyEvent', eventData)
    XData: [1 2 3 4 5 6 7 8 9 10]
    YData: [1 2 3 4 5 6 7 8 9 10]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...