1
は、バウンディングボックスの裏の顔が白に充填されている3D MathWorks社のMATLABプロットの裏の顔を削除することができますwithは、どのように私はMathWorks社のMATLABでの3Dグラフをプロットすると
ax = gca;
ax.Color = [0, 0, 0, 0];
リア側だけを削除するにはどうしたらいいですか? (フロアを除くすべて)
は、バウンディングボックスの裏の顔が白に充填されている3D MathWorks社のMATLABプロットの裏の顔を削除することができますwithは、どのように私はMathWorks社のMATLABでの3Dグラフをプロットすると
ax = gca;
ax.Color = [0, 0, 0, 0];
リア側だけを削除するにはどうしたらいいですか? (フロアを除くすべて)
文書化されていない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')