1## Copyright (C) 2021 David Legland 2## All rights reserved. 3## 4## Redistribution and use in source and binary forms, with or without 5## modification, are permitted provided that the following conditions are met: 6## 7## 1 Redistributions of source code must retain the above copyright notice, 8## this list of conditions and the following disclaimer. 9## 2 Redistributions in binary form must reproduce the above copyright 10## notice, this list of conditions and the following disclaimer in the 11## documentation and/or other materials provided with the distribution. 12## 13## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ''AS IS'' 14## AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 15## IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 16## ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR 17## ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 18## DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR 19## SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER 20## CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, 21## OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 22## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 23## 24## The views and conclusions contained in the software and documentation are 25## those of the authors and should not be interpreted as representing official 26## policies, either expressed or implied, of the copyright holders. 27 28function pts2 = grFaceToPolygon(varargin) 29%GRFACETOPOLYGON Compute the polygon corresponding to a graph face. 30% 31% PTS2 = grFaceToPolygon(NODES, EDGES, FACES, INDF) 32% PTS2 = grFaceToPolygon(NODES, FACES, INDF) 33% Where NODES, EDGES, and FACES are internal data of graph, and INDF is 34% the index of the face to extract. The result is the (ordered) set of 35% points composing the face. 36% 37% 38% PTS2 = grFaceToPolygon(GRAPH, INDF) 39% use structure representation for graph. The structure GRAPH must 40% contain data for fields 'nodes' and 'faces'. 41% 42% If several indices face indices are specified, result is a cell array 43% of polygons. 44% 45% The number of columns of PTS2 is the same as for NODES. 46% 47% 48% ------ 49% Author: David Legland 50% e-mail: david.legland@grignon.inra.fr 51% Created: 2005-11-30 52% Copyright 2005 INRA - CEPIA Nantes - MIAJ (Jouy-en-Josas). 53 54% HISTORY 55% 27/07/2007: cleanup code 56 57if length(varargin)==2 58 % argument is a graph structure 59 graph = varargin{1}; 60 nodes = graph.nodes; 61 faces = graph.faces; 62 indf = varargin{2}; 63 64elseif length(varargin)==3 65 % arguments are nodes, faces and indices 66 nodes = varargin{1}; 67 faces = varargin{2}; 68 indf = varargin{3}; 69 70elseif length(varargin)==4 71 % arguments are nodes, edges, faces and indices, we forget edges 72 nodes = varargin{1}; 73 faces = varargin{3}; 74 indf = varargin{4}; 75end 76 77 78if iscell(faces) 79 % faces is a cell array 80 if length(indf)==1 81 face = faces{indf}; 82 pts2 = nodes(face, :); 83 else 84 pts2 = cell(length(indf), 1); 85 for i=1:length(indf) 86 face = faces{indf(i)}; 87 pts2{i} = nodes(face, :); 88 end 89 end 90else 91 % faces is an indices array: all faces have same number of vertices 92 if length(indf)==1 93 face = faces(indf, :); 94 pts2 = nodes(face, :); 95 else 96 pts2 = cell(length(indf), 1); 97 for i=1:length(indf) 98 face = faces(indf(i), :); 99 pts2{i} = nodes(face, :); 100 end 101 end 102end 103 104