Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MATLAB:当faceAlpha不是1时,面片会在各种情况下消失_Matlab_Graphics_Rendering_Patch - Fatal编程技术网

MATLAB:当faceAlpha不是1时,面片会在各种情况下消失

MATLAB:当faceAlpha不是1时,面片会在各种情况下消失,matlab,graphics,rendering,patch,Matlab,Graphics,Rendering,Patch,我在Windows7上使用64位MatlabR2010A(如果这是一个模糊的渲染错误,则可能与此相关) 这显然是一个奇怪的错误,当文本解释器被激活时,它会表现出来 set(0, 'DefaultTextInterpreter', 'Latex'); 此代码将生成一个带有黑色边框的蓝色框和轴外的图例 cla reset; patch ([0.5 0.5 0.75 0.75 0.5], [0.5 0.75 0.75 0.5 0.5], 'b', 'FaceAlpha',1); xlim([0 1

我在Windows7上使用64位MatlabR2010A(如果这是一个模糊的渲染错误,则可能与此相关)

这显然是一个奇怪的错误,当文本解释器被激活时,它会表现出来

set(0, 'DefaultTextInterpreter', 'Latex');
此代码将生成一个带有黑色边框的蓝色框和轴外的图例

cla reset;
patch ([0.5 0.5 0.75 0.75 0.5], [0.5 0.75 0.75 0.5 0.5], 'b', 'FaceAlpha',1); 
xlim([0 1]); 
ylim([0 1])
legend ('blah', 'Location', 'bestOutside')
如果我更改代码,使修补程序具有非不透明的alpha值

cla reset;
patch ([0.5 0.5 0.75 0.75 0.5], [0.5 0.75 0.75 0.5 0.5], 'b', 'FaceAlpha',0.5); 
xlim([0 1]); 
ylim([0 1]);
legend ('blah', 'Location', 'bestOutside')
我得到了一个空的黑框而不是一个满的黑框,并且一个轴被正确地调整大小以在外面放置一个图例,但没有图例

如果我运行图例之前的所有代码,然后单击“figure”菜单上的“edit plot”,补丁也会消失。取消选中“编辑绘图”后,修补程序不会重新出现。图形和轴属性(分别使用get(gcf)和get(gca))在单击和取消选中“编辑绘图”前后相同

调整“地物”窗口的大小不会导致面片消失。从命令行调整轴的大小:

p = get(gca, 'Position');p(3) = p(3)/2;set (gca, 'Position', p)
不会导致修补程序消失


我曾尝试将opengl设置为硬件和软件模式(使用opengl硬件和opengl软件),但没有发现任何差异。

感谢rasman尝试重现错误并失败。这帮助我发现问题在于latex intepreter和openGL之间的交互。这显然与MATLAB bug有关

解决方案是单独设置对象的文本属性,而不是使用默认的渲染选项(这是一个难题)

总结

使用OpenGL将DefaultTextTransparer figure属性设置为“latex”,会导致MATLAB在打印到PostScript时执行SEGV或assert 描述

使用OpenGL渲染器时,将图形的DefaultTextTransparer属性设置为“latex”,然后打印到PostScript或封装的PostScript,可能会导致MATLAB中的崩溃或断言。比如这个代码,

figure;
axes;
set(gcf,'defaultTextInterpreter','latex');
set(gcf,'renderer','openGL');
print figure.eps;
可能会生成崩溃或断言。在其他情况下,MATLAB命令窗口中可能会出现以下错误:

???使用==>strcat时出错不够 输入参数

==>tex>localCheckValidString中出错 在138 strchk=strcat(str{:})

111处的错误==>tex[错误]= localCheckValidString(str)

解决方法


使用OpenGL时,不要将DefaultTextTransparer属性设置为“latex”。相反,将文本对象的解释器属性分别设置为“latex”。

看起来问题可能是opengl渲染器;使用opengl neverselect可以保存补丁和图例,但即使facealpha小于1,补丁也会呈现为不透明。它在linux上运行良好,因此Marc可能是正确的。opengl和windows并不总是手挽着手如果将渲染器更改为painters或zbuffer,是否解决了问题?将渲染器设置为painters或zbuffer可以解决面片和图例消失的问题,但会破坏透明度。因此,这可能只是在matlab所能做的极限上运行。这太糟糕了,因为像pdf这样的矢量格式支持透明,所以我不确定为什么画师不能在windows中运行你的代码,它对我来说很好(Matlab11a)。你能告诉我你画了什么吗?好的,但如果你想知道如何让latex在OpenGL图形中工作,可能会有帮助,这反过来又指向