Home > matGeom > geom3d > drawBox3d.m

drawBox3d

PURPOSE ^

DRAWBOX3D Draw a 3D box defined by coordinate extents.

SYNOPSIS ^

function varargout = drawBox3d(box, varargin)

DESCRIPTION ^

DRAWBOX3D Draw a 3D box defined by coordinate extents.
   
   drawBox3d(BOX);
   Draw a box defined by its coordinate extents: 
   BOX = [XMIN XMAX YMIN YMAX ZMIN ZMAX].
   The function draws only the outline edges of the box.

   Example
     % Draw bounding box of a cubeoctehedron
     [v e f] = createCubeOctahedron;
     box3d = boundingBox3d(v);
     figure; hold on;
     drawMesh(v, f);
     drawBox3d(box3d);
     set(gcf, 'renderer', 'opengl')
     axis([-2 2 -2 2 -2 2]);
     view(3)

   See also
     boxes3d, boundingBox3d

CROSS-REFERENCE INFORMATION ^

This function calls: This function is called by:

SOURCE CODE ^

0001 function varargout = drawBox3d(box, varargin)
0002 %DRAWBOX3D Draw a 3D box defined by coordinate extents.
0003 %
0004 %   drawBox3d(BOX);
0005 %   Draw a box defined by its coordinate extents:
0006 %   BOX = [XMIN XMAX YMIN YMAX ZMIN ZMAX].
0007 %   The function draws only the outline edges of the box.
0008 %
0009 %   Example
0010 %     % Draw bounding box of a cubeoctehedron
0011 %     [v e f] = createCubeOctahedron;
0012 %     box3d = boundingBox3d(v);
0013 %     figure; hold on;
0014 %     drawMesh(v, f);
0015 %     drawBox3d(box3d);
0016 %     set(gcf, 'renderer', 'opengl')
0017 %     axis([-2 2 -2 2 -2 2]);
0018 %     view(3)
0019 %
0020 %   See also
0021 %     boxes3d, boundingBox3d
0022 %
0023 
0024 % ------
0025 % Author: David Legland
0026 % E-mail: david.legland@inrae.fr
0027 % Created: 2010-02-22
0028 % Copyright 2010-2024 INRA - TPV URPOI - BIA IMASTE
0029 
0030 % Parse and check inputs
0031 isBox3d = @(x) validateattributes(x,{'numeric'},...
0032     {'nonempty','nonnan','real','finite','size',[nan,6]});
0033 defOpts.Color = 'b';
0034 [hAx, box, varargin] = ...
0035     parseDrawInput(box, isBox3d, 'line', defOpts, varargin{:});
0036 
0037 
0038 % box limits
0039 xmin = box(:,1);
0040 xmax = box(:,2);
0041 ymin = box(:,3);
0042 ymax = box(:,4);
0043 zmin = box(:,5);
0044 zmax = box(:,6);
0045 
0046 % save hold state
0047 holdState = ishold(hAx);
0048 hold(hAx, 'on');
0049 
0050 nBoxes = size(box, 1);
0051 
0052 gh = zeros(nBoxes,1);
0053 for i = 1:nBoxes
0054     % lower face (z=zmin)
0055     sh(1) = drawEdge3d(hAx, [xmin(i) ymin(i) zmin(i)   xmax(i) ymin(i) zmin(i)], varargin{:});
0056     sh(2) = drawEdge3d(hAx, [xmin(i) ymin(i) zmin(i)   xmin(i) ymax(i) zmin(i)], varargin{:});
0057     sh(3) = drawEdge3d(hAx, [xmax(i) ymin(i) zmin(i)   xmax(i) ymax(i) zmin(i)], varargin{:});
0058     sh(4) = drawEdge3d(hAx, [xmin(i) ymax(i) zmin(i)   xmax(i) ymax(i) zmin(i)], varargin{:});
0059  
0060     % front face (y=ymin)
0061     sh(5) = drawEdge3d(hAx, [xmin(i) ymin(i) zmin(i)   xmin(i) ymin(i) zmax(i)], varargin{:});
0062     sh(6) = drawEdge3d(hAx, [xmax(i) ymin(i) zmin(i)   xmax(i) ymin(i) zmax(i)], varargin{:});
0063     sh(7) = drawEdge3d(hAx, [xmin(i) ymin(i) zmax(i)   xmax(i) ymin(i) zmax(i)], varargin{:});
0064 
0065     % left face (x=xmin)
0066     sh(8) = drawEdge3d(hAx, [xmin(i) ymax(i) zmin(i)   xmin(i) ymax(i) zmax(i)], varargin{:});
0067     sh(9) = drawEdge3d(hAx, [xmin(i) ymin(i) zmax(i)   xmin(i) ymax(i) zmax(i)], varargin{:});
0068 
0069     % the last 3 remaining edges
0070     sh(10) = drawEdge3d(hAx, [xmin(i) ymax(i) zmax(i)   xmax(i) ymax(i) zmax(i)], varargin{:});
0071     sh(11) = drawEdge3d(hAx, [xmax(i) ymax(i) zmin(i)   xmax(i) ymax(i) zmax(i)], varargin{:});
0072     sh(12) = drawEdge3d(hAx, [xmax(i) ymin(i) zmax(i)   xmax(i) ymax(i) zmax(i)], varargin{:});
0073     
0074     gh(i) = hggroup(hAx);
0075     set(sh, 'Parent', gh(i))
0076 end
0077 
0078 % restore hold state
0079 if ~holdState
0080     hold(hAx, 'off');
0081 end
0082 
0083 if nargout > 0
0084     varargout = {gh};
0085 end

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