0001 function [vertices, faces] = collapseEdgesWithManyFaces(vertices, faces, varargin)
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021 verbose = false;
0022 while length(varargin) > 1 && ischar(varargin{1})
0023 name = varargin{1};
0024 if strcmpi(name, 'verbose')
0025 verbose = varargin{2};
0026 else
0027 error(['Unknown optional argument: ' name]);
0028 end
0029 varargin(1:2) = [];
0030 end
0031
0032 while true
0033
0034 edges = meshEdges(faces);
0035
0036
0037 edgeFaces = trimeshEdgeFaces(faces);
0038 edgeFaceDegrees = sum(edgeFaces > 0, 2);
0039
0040 inds = find(edgeFaceDegrees > 2);
0041
0042 if isempty(inds)
0043 break;
0044 end
0045
0046 edge = edges(inds(1), :);
0047 if verbose
0048 fprintf('remove edge with index %d: (%d, %d)\n', inds(1), edge);
0049 end
0050 [vertices, faces] = mergeMeshVertices(vertices, faces, edge);
0051 end
0052
0053
0054 [vertices, faces] = trimMesh(vertices, faces);