Home > matGeom > geom3d > drawEdge3d.m

drawEdge3d

PURPOSE ^

DRAWEDGE3D Draw 3D edge in the current axes.

SYNOPSIS ^

function varargout = drawEdge3d(varargin)

DESCRIPTION ^

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

CROSS-REFERENCE INFORMATION ^

This function calls: This function is called by:

SOURCE CODE ^

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

Generated on Thu 21-Nov-2024 11:30:22 by m2html © 2003-2022