DRAWEDGE3D Draw 3D edge in the current axes. drawEdge3d(EDGE) draws the edge EDGE on the current axis. EDGE has the form: [x1 y1 z1 x2 y2 z2]. No clipping is performed. drawEdge3d(AX,...) plots into AX instead of GCA. H = drawEdge3d(...) returns a handle H to the line object. Example figure; axis equal; view(3) p1 = [10 20 80]; p2 = [80 10 20]; p3 = [20 50 10]; drawEdge3d(gca, [p1;p2],[p2;p3],'b'); drawEdge3d([p1;p3],'k'); pause(1) drawEdge3d(gca, [p1 p2; p2 p3],'g'); drawEdge3d(p1(1), p1(2), p1(3),p3(1), p3(2), p3(3),'Color','r','Marker','x'); See also drawLine3d, clipLine3d, drawEdge
0001 function varargout = drawEdge3d(varargin) 0002 %DRAWEDGE3D Draw 3D edge in the current axes. 0003 % 0004 % drawEdge3d(EDGE) draws the edge EDGE on the current axis. 0005 % EDGE has the form: [x1 y1 z1 x2 y2 z2]. No clipping is performed. 0006 % 0007 % drawEdge3d(AX,...) plots into AX instead of GCA. 0008 % 0009 % H = drawEdge3d(...) returns a handle H to the line object. 0010 % 0011 % Example 0012 % figure; axis equal; view(3) 0013 % p1 = [10 20 80]; 0014 % p2 = [80 10 20]; 0015 % p3 = [20 50 10]; 0016 % drawEdge3d(gca, [p1;p2],[p2;p3],'b'); 0017 % drawEdge3d([p1;p3],'k'); 0018 % pause(1) 0019 % drawEdge3d(gca, [p1 p2; p2 p3],'g'); 0020 % drawEdge3d(p1(1), p1(2), p1(3),p3(1), p3(2), p3(3),'Color','r','Marker','x'); 0021 % 0022 % See also 0023 % drawLine3d, clipLine3d, drawEdge 0024 % 0025 0026 % ------ 0027 % Author: David Legland 0028 % E-mail: david.legland@inrae.fr 0029 % Created: 2005-02-18 0030 % Copyright 2005-2024 INRA - TPV URPOI - BIA IMASTE 0031 0032 % extract handle of axis to draw on 0033 [hAx, varargin] = parseAxisHandle(varargin{:}); 0034 0035 % extract edges from input arguments 0036 nCol = size(varargin{1}, 2); 0037 if nCol == 6 0038 % all parameters in a single array 0039 edges = varargin{1}; 0040 varargin(1) = []; 0041 elseif nCol == 3 0042 if isequal(size(varargin{1}), [2 3]) && isscalar(varargin) 0043 % parameters are two points given as 2x3 0044 edges = [varargin{1}(1,:) varargin{1}(2,:)]; 0045 elseif isequal(size(varargin{1}), [2 3]) && ~isnumeric(varargin{2}) 0046 % parameters are two points given as 2x3 0047 edges = [varargin{1}(1,:) varargin{1}(2,:)]; 0048 varargin(1) = []; 0049 else 0050 % parameters are two points, or two arrays of points, of size N*3. 0051 edges = [varargin{1} varargin{2}]; 0052 varargin(1:2) = []; 0053 end 0054 elseif nargin >= 6 0055 % parameters are 6 parameters of the edge : x1 y1 z1 x2 y2 and z2 0056 edges = [varargin{1} varargin{2} varargin{3} varargin{4} varargin{5} varargin{6}]; 0057 varargin(1:6) = []; 0058 end 0059 0060 % Parse and check inputs 0061 isEdge3d = @(x) validateattributes(x,{'numeric'},... 0062 {'nonempty','size',[nan,6]}); 0063 defOpts.Color = 'b'; 0064 [~, edges, varargin] = ... 0065 parseDrawInput(hAx, isEdge3d, 'line', defOpts, edges, varargin{:}); 0066 0067 % identify indices of valid edge (not containing any NaN's). 0068 inds = sum(isnan(edges), 2) == 0; 0069 0070 % draw edges 0071 h = line(... 0072 [edges(inds, 1) edges(inds, 4)]', ... 0073 [edges(inds, 2) edges(inds, 5)]', ... 0074 [edges(inds, 3) edges(inds, 6)]', varargin{:}, ... 0075 'Parent', hAx); 0076 0077 % return handle to created Edges 0078 if nargout > 0 0079 varargout = {h}; 0080 end