MATLAB:2015a 画笔问题
MATLAB: 2015a Brush Issues
我正在 GUIDE 中编写 GUI,需要从 3 个轴中的任何一个读取刷过的数据。我一直收到回调错误。起初,我以为我是因为缺乏经验而失败了。然而,在进一步研究之后,有一些建议表明最新的 MATLAB 更新导致人们根本无法访问刷过的数据。
我的问题与这里的这个线程非常相似:http://www.mathworks.com/matlabcentral/answers/223441-problem-with-brush-matlab-r2015a。有人有任何答案吗?
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坐标输出到命令window。在 R2014b 和 R2015a 中测试。
这与链接博客 post 中的实现完全相同。未记录的 BrushHandles
属性 是 MATLAB 线对象的 属性,它是您绘制它的坐标轴的子项。传递给所有回调的 eventdata
变量提供坐标轴被刷了,所以eventdata.Axes.Children
部分相当于博客的hLine
部分post.
您收到错误是因为您试图一次访问所有行的未记录的 属性。要解决此问题,您需要遍历调用轴对象的子对象,它们是您的所有行。
我正在 GUIDE 中编写 GUI,需要从 3 个轴中的任何一个读取刷过的数据。我一直收到回调错误。起初,我以为我是因为缺乏经验而失败了。然而,在进一步研究之后,有一些建议表明最新的 MATLAB 更新导致人们根本无法访问刷过的数据。
我的问题与这里的这个线程非常相似:http://www.mathworks.com/matlabcentral/answers/223441-problem-with-brush-matlab-r2015a。有人有任何答案吗?
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坐标输出到命令window。在 R2014b 和 R2015a 中测试。
这与链接博客 post 中的实现完全相同。未记录的 BrushHandles
属性 是 MATLAB 线对象的 属性,它是您绘制它的坐标轴的子项。传递给所有回调的 eventdata
变量提供坐标轴被刷了,所以eventdata.Axes.Children
部分相当于博客的hLine
部分post.
您收到错误是因为您试图一次访问所有行的未记录的 属性。要解决此问题,您需要遍历调用轴对象的子对象,它们是您的所有行。