MATLAB:2015a画笔问题

时间:2015-08-12 16:24:41

标签: matlab brush

我正在GUIDE中编写GUI,需要从3个轴中的任何一个读取拉丝数据。我一直收到一个回调错误。最初,由于我的经验不足,我以为自己失败了。但是,经过进一步的研究,有一些建议认为最新的MATLAB更新导致人们根本无法访问刷卡数据。

我的问题非常类似于此主题:http://www.mathworks.com/matlabcentral/answers/223441-problem-with-brush-matlab-r2015a。有人有什么答案吗?

1 个答案:

答案 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部分。

您收到错误是因为您试图一次访问所有行的未记录属性。要解决此问题,请遍历调用轴对象的子项,这些子项是您的所有行。