我正在GUIDE中编写GUI,需要从3个轴中的任何一个读取拉丝数据。我一直收到一个回调错误。最初,由于我的经验不足,我以为自己失败了。但是,经过进一步的研究,有一些建议认为最新的MATLAB更新导致人们根本无法访问刷卡数据。
我的问题非常类似于此主题:http://www.mathworks.com/matlabcentral/answers/223441-problem-with-brush-matlab-r2015a。有人有什么答案吗?
答案 0 :(得分:1)
Undocumented MATLAB blog post 中显示的实现仍然可以在R2014b之后的版本中使用。
此代码,例如:
function testcode()
h.myfig = figure;
h.myax(1) = axes('Parent', h.myfig, 'Units', 'Normalized', 'Position', [0.1 0.1 0.35 0.35]);
h.myax(2) = axes('Parent', h.myfig, 'Units', 'Normalized', 'Position', [0.55 0.1 0.35 0.35]);
h.myax(3) = axes('Parent', h.myfig, 'Units', 'Normalized', 'Position', [0.55 0.55 0.35 0.35]);
plot(h.myax(1), 0:10);
plot(h.myax(2), 10:20);
hold(h.myax(3), 'on');
plot(h.myax(3), 20:30);
plot(h.myax(3), 30:-1:20);
hold(h.myax(3), 'off');
h.mybrush = brush;
set(h.mybrush, 'Enable', 'on', 'ActionPostCallback', @displayBrushData);
function displayBrushData(~, eventdata)
nlines = length(eventdata.Axes.Children);
brushdata = cell(nlines, 1);
for ii = 1:nlines
brushdata{ii} = eventdata.Axes.Children(ii).BrushHandles.Children(1).VertexData;
fprintf('Line %i\n', ii)
fprintf('X: %f Y: %f Z: %f\n', brushdata{ii})
end
将拉丝数据点的XYZ坐标输出到命令窗口。在R2014b和R2015a中测试过。
这与链接博客文章中的实现完全相同。未记录的BrushHandles
属性是MATLAB的行对象的属性,它是您绘制它的轴的子项。传递给所有回调的eventdata
变量提供了刷轴,因此{{1部分相当于博客文章的eventdata.Axes.Children
部分。
您收到错误是因为您试图一次访问所有行的未记录属性。要解决此问题,请遍历调用轴对象的子项,这些子项是您的所有行。