]> Creatis software - CreaPhase.git/blob - octave_packages/geometry-1.5.0/geom2d/drawShape.m
Add a useful package (from Source forge) for octave
[CreaPhase.git] / octave_packages / geometry-1.5.0 / geom2d / drawShape.m
1 %% Copyright (c) 2011, INRA
2 %% 2005-2011, David Legland <david.legland@grignon.inra.fr>
3 %% 2011 Adapted to Octave by Juan Pablo Carbajal <carbajal@ifi.uzh.ch>
4 %%
5 %% All rights reserved.
6 %% (simplified BSD License)
7 %%
8 %% Redistribution and use in source and binary forms, with or without
9 %% modification, are permitted provided that the following conditions are met:
10 %%
11 %% 1. Redistributions of source code must retain the above copyright notice, this
12 %%    list of conditions and the following disclaimer.
13 %%     
14 %% 2. Redistributions in binary form must reproduce the above copyright notice, 
15 %%    this list of conditions and the following disclaimer in the documentation
16 %%    and/or other materials provided with the distribution.
17 %%
18 %% THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
19 %% AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
20 %% IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
21 %% ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
22 %% LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 
23 %% CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
24 %% SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 
25 %% INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
26 %% CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
27 %% ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
28 %% POSSIBILITY OF SUCH DAMAGE.
29 %%
30 %% The views and conclusions contained in the software and documentation are
31 %% those of the authors and should not be interpreted as representing official
32 %% policies, either expressed or implied, of copyright holder.
33
34 %% -*- texinfo -*-
35 %% @deftypefn {Function File} drawShape (@var{type}, @var{param})
36 %% @deftypefnx {Function File} drawShape (@dots{}, @var{option})
37 %%  Draw various types of shapes (circles, polygons...).
38 %%
39 %%   drawShape(TYPE, PARAM)
40 %%   Draw the shape of type TYPE, specified by given parameter PARAM. TYPE
41 %%   can be one of 'circle', 'ellipse', 'rect', 'polygon', 'curve'
42 %%   PARAM depend on the type. For example, if TYPE is 'circle', PARAM will
43 %%   contain [x0 y0 R].
44 %%
45 %%   Examples :
46 %%   @example
47 %%   drawShape('circle', [20 10 30]);
48 %%   Draw circle centered on [20 10] with radius 10.
49 %%   drawShape('rect', [20 20 40 10 pi/3]);
50 %%   Draw rectangle centered on [20 20] with length 40 and width 10, and
51 %%   oriented pi/3 wrt axis Ox.
52 %% @end example
53 %%
54 %%   drawShape(..., OPTION)
55 %%   also specifies drawing options. OPTION can be 'draw' (default) or
56 %%   'fill'.
57 %% @end deftypefn
58 function varargout = drawShape(type, param, varargin)
59
60   if ~iscell(type)
61       type = {type};
62   end
63   if ~iscell(param)
64       tmp = cell(1, size(param, 1));
65       for i=1:size(param, 1)
66           tmp{i} = param(i,:);
67       end
68       param = tmp;
69   end
70
71   option = 'draw';
72   if ~isempty(varargin)
73       var = varargin{1};
74       if strcmpi(var, 'fill')
75           option = 'fill';
76       end
77   end
78
79       
80   % transform each shape into a polygon
81   shape = cell(1,length(type));
82   for i=1:length(type)    
83       if strcmpi(type{i}, 'circle')
84           shape{i} = circleAsPolygon(param{i}, 128);
85       elseif strcmpi(type{i}, 'rect')
86           shape{i} = rectAsPolygon(param{i});
87       elseif strcmpi(type{i}, 'polygon')
88           shape{i} = param{i};        
89       end
90   end
91
92
93   hold on;
94   h = zeros(length(shape), 1);
95   if strcmp(option, 'draw')
96       for i=1:length(shape)
97           h(i) = drawPolygon(shape{i});
98       end
99   else
100       for i=1:length(shape)
101           h(i) = fillPolygon(shape{i});
102       end
103   end
104
105   if nargout>0
106       varargout{1}=h;
107   end
108
109 endfunction
110