我正在使用GUIDE在Matlab中制作GUI应用程序。我有一些轴,我正在点击按钮上绘制一些点。 现在我想用动画线在同一轴上绘制线条。要添加到动画线的数据点来自事件。所以我需要在事件监听器中添加数据点。 我想知道如何做到这一点,因为该事件监听器无法访问动画线。 以下是到目前为止的代码。
单击按钮时调用此功能 -
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
仅显示使用绘图绘制的点。如何显示动画线? 另外,我没有在命令窗口上收到任何错误。
答案 0 :(得分:0)
有几种方法可以让侦听器访问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
的{{1}}。
appdata