我正在使用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
仅显示使用绘图绘制的点。如何显示动画线?另外,我在命令窗口上没有任何错误。
您可以通过两种方法使侦听器访问该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
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句