Как добавить точки данных в анимированную строку в Matlab GUI через прослушиватель событий?
Я делаю приложение с графическим интерфейсом в Matlab, используя руководство. У меня есть оси, на которых я строю некоторые точки нажатием кнопки. Теперь я хочу использовать анимированные линии для построения линий на одинаковых осях. Точки данных, добавляемые в анимированную строку, поступают из события. Поэтому мне нужно добавить точки данных в прослушивателе событий. Я хочу знать, как я могу это сделать, потому что у слушателя событий нет доступа к анимированной строке. Ниже приведен код.
Эта функция вызывается при нажатии кнопки
function startButton_Callback(~, ~, handles)
x = randi(100, 20);
y = randi(100, 20);
plot(x, y, 'o');
la = newClass;
addlistener(la,'statusAnnouncement',@StatusListener);
Это функция, вызываемая по событию
function StatusListener(obj, eventData)
h = animatedline;
addpoints(h,eventData.coordinate(1),eventData.coordinate(2));
drawnow
Точки, построенные с использованием графика, отображаются только. Как показать анимированную линию? Кроме того, я не получаю никакой ошибки в командном окне.
1 ответ
Есть несколько способов, которыми вы можете дать слушателю доступ к animtedline
объект.
Вы можете определить
StatusListener
как подфункцияstartButton_Callback
function startButton_Callback(~, ~, handles) h = animatedline; la = newClass; addlistener(la,'statusAnnouncement',@StatusListener); %// This as a subfunction so it can "see" h function StatusListener(src, evnt) h.addpoints(evnt.coordinate(1), evnt.coordinate(2)); end end
Пройти
animtedline
объект для функции обратного вызова через анонимную функциюfunction startButton_Callback(~, ~, handles) h = animatedline; la = newClass; %// Use the callback but add h as an additional input argument addlistener(la, 'statusAnnouncement', @(s,e)StatusListener(s,e,h)) end %// Note the additional input argument here function StatusListener(obj, evnt, h) h.addpoints(evnt.coordinate(1), evnt.coordinate(2)) end
Обновите
animatedline
внутри анонимной функцииfunction startButton_Callback(~, ~, handles) h = animatedline; la = newClass; %// Don't define a separate function and just do the update here addlistener(la, 'statusAnnouncement', @(s,e)h.addpoints(e.coordinate(1), e.coordinate(2))) end
Хранить
animatedline
объект вguidata
изappdata
вашей фигуры.function startButton_Callback(~, ~, handles) h = animatedline; %// Store the handle within the appdata of the figure setappdata(gcbf, 'MyAnimatedLine', h) la = newClass; addlistener(la,'statusAnnouncement',@StatusListener); end function StatusListener(obj, evnt) %// Get the handle from the appdata of the figure h = getappdata(gcbf, 'MyAnimatedLine'); h.addpoints(evnt.coordinate(1), evnt.coordinate(2)) end