【问题标题】:matlab - how to make 3D axes size go outside of figurematlab - 如何使 3D 轴大小超出图形
【发布时间】:2017-09-20 19:57:48
【问题描述】:

我首先创建了一个背景为 .png 图像的图形。然后我在图形顶部创建了一个 3D 轴,以便将 3D 轴放置在 .png 图像的顶部。请注意,.png 图像不是设置在 3D 轴内,而是设置在图形本身的轴外。

我在 3D 轴内设置了一个苹果的 3D .stl 文件(顺便说一下,你看不到苹果)。当我使用内置 Matlab 图形工具栏中的选项在 3D 轴内移动苹果时,它工作正常。但这里的问题是,当我将苹果移动到 3D 轴的边界之外时,它就会消失。

为了解决这个问题,我想设置 3D 轴的大小,使其限制超出图形,这样我就可以在图形中的任何位置移动我的苹果,而不受 3D 轴的大小的限制.注意:我没有使 3D 轴不可见,以便人们更容易理解我的问题。但是当这个问题解决后,我将使用axis off 使 3D 轴不可见,同时保留并显示苹果。

这里是主要代码

pearImage = 'pears.png';
appleModel = 'apple.stl';
backgroundImage = imread(pearImage);    
[vertices,faces,~] = stlRead(appleModel);

axesHandle = axes('unit','normalized','position',[0 0 1 1]);
imagesc(backgroundImage)
set(axesHandle,'handlevisibility','off','visible','off')
uistack(axesHandle,'bottom')

stlPlot(vertices,faces)

这是stlPlot()的函数

function stlPlot(vertices,faces)

object.vertices = vertices;
object.faces = faces;
patch(object,'FaceColor',[0.1 1.0 1.0],'EdgeColor','none')
camlight('headlight')
material('dull')

axis('image')
view([-135 35])

axis off % used to make the 3D axes invisible

我从这里获得了 stlRead()stlPlot() 函数:https://kr.mathworks.com/matlabcentral/fileexchange/22409-stl-file-reader?focused=5193625&tab=function。请注意,我编辑了 stlPlot() 函数以满足我的目的。

【问题讨论】:

标签: image matlab plot figure axes


【解决方案1】:

我相信您可以通过更改您创建的patch objects'Clipping' property 来解决这个问题:

hPatch = patch(object, 'FaceColor', [0.1 1.0 1.0], 'EdgeColor', 'none', 'Clipping', 'off');

或者,更简单地说,您可能只设置父 axes object 本身的 'Clipping' property(控制其所有子级的剪辑行为):

set(get(hPatch, 'Parent'), 'Clipping', 'off');

【讨论】:

    猜你喜欢
    • 2012-10-22
    • 1970-01-01
    • 2014-04-03
    • 2013-09-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-18
    • 1970-01-01
    相关资源
    最近更新 更多