上下文
使用GUI Layout toolbox我创建了一个基本上分为两部分的界面:
对于预览区域,我使用uietxras.CardPanel对象在视图模式之间切换。
问题
经过一些调查,我发现如果我使用surf
(或pcolor
)在其中一张预览卡中以3D(或2D)显示内容,则会改变第二张卡片中的显示。如果我仅使用plot
命令在1D中显示数据,我没有发出!
在其中一张预览卡中使用pcolor / surf时出现的问题:
Preview 1
preview 2
如果我在两种预览模式下都只使用plot
命令,那么我完全没有问题,并且卡片切换效果很好。
测试用例
我的真实代码很长,因此我将其减少到最低限度,以便您可以重现该问题:
https://gist.github.com/CitizenInsane/54f3c1eba2293d0e5264#file-guilayoutbug-m
只需运行代码并选中复选框"在预览1和#34中执行3D绘图;查看在两种预览模式之间切换时发生的问题:
备注
答案 0 :(得分:1)
我也遇到过这个问题。我担心我从来没有弄清楚原因究竟是什么,并且它没有以非常一致的方式出现。问题似乎是未选择的卡片上的图形没有被正确隐藏,并且在选定卡片上的图形边缘后面和周围覆盖。
我建议您通过MATLAB Central工具箱页面上的评论向GUI Layout Toolbox的作者提出问题,因为我认为这是一个错误。
尽管如此,我之前从未跟进的原因是我找到了一个相当简单的解决方法,这也可能对你有用。每次更改所选卡时,我都会运行一个简单的功能,删除所有卡中的所有子卡,然后在所选卡上重新绘制我想要的任何内容。这样做似乎有点烦人,但它有效,并且删除了你遇到的任何显示问题。
答案 1 :(得分:1)
好了,问题与CardPanel本身无关,它与图的渲染器有关。
尝试下面的简单代码:
figure(42);
subplot(1,2,1);
plot(rand(1,12));
subplot(1,2,2);
peaks;
shading flat;
如果将数字渲染器设置为' OpenGL' (默认)==>有一些小故障:
如果数字渲染器设置为' zbuffer' ==>没有故障:
将渲染器设置为' zbuffer'解决了这个问题。
注意:也许可以通过微调图形卡加速设置来修复OpenGL渲染,但我不知道......我在Matlab和{{1发出了opengl software
和opengl hardware
命令渲染比我机器上的software
渲染效果差。
编辑:附注
透明度效果仅在渲染器设置为“openGL”时才可用。因此,无法在没有毛刺的情况下同时显示1D和透明3D数据(至少在R2013b中使用hg版本1)。
hardware
没有问题: