Home > matGeom > meshes3d > removeInvalidBorderFaces.m

removeInvalidBorderFaces

PURPOSE ^

REMOVEINVALIDBORDERFACES Remove faces whose edges are connected to 3, 3, and 1 faces.

SYNOPSIS ^

function [vertices, faces] = removeInvalidBorderFaces(varargin)

DESCRIPTION ^

REMOVEINVALIDBORDERFACES Remove faces whose edges are connected to 3, 3, and 1 faces.

   [V2, F2] = removeInvalidBorderFaces(V, F)

   Example
   removeInvalidBorderFaces

   See also
     isManifoldMesh, collapseEdgesWithManyFaces

CROSS-REFERENCE INFORMATION ^

This function calls: This function is called by:

SOURCE CODE ^

0001 function [vertices, faces] = removeInvalidBorderFaces(varargin)
0002 %REMOVEINVALIDBORDERFACES Remove faces whose edges are connected to 3, 3, and 1 faces.
0003 %
0004 %   [V2, F2] = removeInvalidBorderFaces(V, F)
0005 %
0006 %   Example
0007 %   removeInvalidBorderFaces
0008 %
0009 %   See also
0010 %     isManifoldMesh, collapseEdgesWithManyFaces
0011  
0012 % ------
0013 % Author: David Legland
0014 % e-mail: david.legland@inra.fr
0015 % Created: 2019-01-31,    using Matlab 9.5.0.944444 (R2018b)
0016 % Copyright 2019 INRA - Cepia Software Platform.
0017 
0018 vertices = varargin{1};
0019 faces = varargin{2};
0020 
0021 % compute edge to vertex array
0022 if nargin == 3
0023     edges = faces;
0024     faces = varargin{3};
0025 else
0026     % compute edge to vertex array
0027     edges = meshEdges(faces);
0028 end
0029 
0030 % compute face to edge indices array
0031 % as a nFaces-by-3 array (each face connected to exactly three edges)
0032 faceEdgeInds = meshFaceEdges(vertices, edges, faces);
0033 
0034 % compute number of faces incident each edge
0035 edgeFaces = trimeshEdgeFaces(faces);
0036 edgeFaceDegrees = sum(edgeFaces > 0, 2);
0037 
0038 % for each face, concatenate the face degree of each edge
0039 faceEdgeDegrees = zeros(size(faces, 1), 3);
0040 for iFace = 1:size(faces, 1)
0041     edgeInds = faceEdgeInds{iFace};
0042     faceEdgeDegrees(iFace, :) = edgeFaceDegrees(edgeInds);
0043 end
0044 
0045 % remove faces containing edges connected to 1 face and edges connected to
0046 % 3 faces
0047 inds = sum(faceEdgeDegrees == 1, 2) > 0 & sum(faceEdgeDegrees == 3, 2);
0048 % inds = sum(ismember(faceEdgeDegrees, [1 3 4]), 2) == 3;
0049 faces(inds, :) = [];

Generated on Wed 16-Feb-2022 15:10:47 by m2html © 2003-2019