2017-02-01 13 views

答えて

2

文書化されていないAxes.Backdropプロパティを使用すると、この動作を並べ替えることができます。 Axes.Backdrop.Face.VertexDataには、背景の頂点のリストが含まれています。軸が回転しているときしかし、これらのクワッドはこのない効果的なソリューション作り、再描画され

ax = gca; 
face = ax.Backdrop.Face; 

% can be replaced with conditions on other axes and limits 
point_on_face = face.VertexData(3,:) == ax.ZLim(1); 
is_target_face = all(reshape(point_on_face, 4, [])); 
target_face_verts = logical(kron(is_target_face, ones(1, 4))); 

% discard all but the first quad (the floor) 
face.VertexData = face.VertexData(:,target_face_verts); 

:我々は見つけるとで床を維持することができます。

私たちは、イベントリスナーを追加することにより、さらに行くことができます:

function h = set_walls(ax, varargin) 
    function update() 
    face = ax.Backdrop.Face; 
    data = face.VertexData; 
    if empty(data); return; end 
    keep_verts = false(1, size(data, 2)); 
    for side = varargin' 
     side = side{:}; 
     switch side 
     case 'xmin'; point_on_face = data(1,:) == ax.XLim(1); 
     case 'xmax'; point_on_face = data(1,:) == ax.XLim(2); 
     case 'ymin'; point_on_face = data(2,:) == ax.YLim(1); 
     case 'ymax'; point_on_face = data(2,:) == ax.YLim(2); 
     case 'zmin'; point_on_face = data(3,:) == ax.ZLim(1); 
     case 'zmax'; point_on_face = data(3,:) == ax.ZLim(2); 
     otherwise; error('Unknown face'); 
     end 
     is_target_face = all(reshape(point_on_face, 4, [])); 
     keep_verts = keep_verts | logical(kron(is_target_face, ones(1, 4))); 
    end 
    face.VertexData = data(:,keep_verts); 
    end 
    h = addlistener(ax, 'MarkedClean', @(x, y) update); 
end 

これが点滅し、それが動作します。この機能は、次のように使用できます。set_walls(gca, 'zmin')

with removed background

関連する問題