SharpNav.PolyMesh.CanRemoveVertex C# (CSharp) Method

CanRemoveVertex() private static method

If vertex can't be removed, there is no need to spend time deleting it.
private static CanRemoveVertex ( List polys, int remove ) : bool
polys List The polygon list
remove int The vertex index
return bool
        private static bool CanRemoveVertex(List<Polygon> polys, int remove)
        {
            //count number of polygons to remove
            int numRemovedVerts = 0;
            int numTouchedVerts = 0;
            int numRemainingEdges = 0;

            for (int i = 0; i < polys.Count; i++)
            {
                Polygon p = polys[i];
                int nv = p.VertexCount;
                int numRemoved = 0;
                int numVerts = 0;

                for (int j = 0; j < nv; j++)
                {
                    if (p.Vertices[j] == remove)
                    {
                        numTouchedVerts++;
                        numRemoved++;
                    }

                    numVerts++;
                }

                if (numRemoved > 0)
                {
                    numRemovedVerts += numRemoved;
                    numRemainingEdges += numVerts - (numRemoved + 1);
                }
            }

            //don't remove a vertex from a triangle since you need at least three vertices to make a polygon
            if (numRemainingEdges <= 2)
                return false;

            //find edges which share removed vertex
            int maxEdges = numTouchedVerts * 2;
            int nedges = 0;
            int[] edges = new int[maxEdges * 3];

            for (int i = 0; i < polys.Count; i++)
            {
                Polygon p = polys[i];
                int nv = p.VertexCount;

                //collect edges which touch removed vertex
                for (int j = 0, k = nv - 1; j < nv; k = j++)
                {
                    if (p.Vertices[j] == remove || p.Vertices[k] == remove)
                    {
                        //arrange edge so that a has the removed value
                        int a = p.Vertices[j], b = p.Vertices[k];
                        if (b == remove)
                        {
                            int temp = a;
                            a = b;
                            b = temp;
                        }

                        //check if edge exists
                        bool exists = false;
                        for (int m = 0; m < nedges; m++)
                        {
                            int e = m * 3;
                            if (edges[e + 1] == b)
                            {
                                //increment vertex share count
                                edges[e + 2]++;
                                exists = true;
                            }
                        }

                        //add new edge
                        if (!exists)
                        {
                            int e = nedges * 3;
                            edges[e + 0] = a;
                            edges[e + 1] = b;
                            edges[e + 2] = 1;
                            nedges++;
                        }
                    }
                }
            }

            //make sure there can't be more than two open edges
            //since there could be two non-adjacent polygons which share the same vertex, which shouldn't be removed
            int numOpenEdges = 0;
            for (int i = 0; i < nedges; i++)
            {
                if (edges[i * 3 + 2] < 2)
                    numOpenEdges++;
            }

            if (numOpenEdges > 2)
                return false;

            return true;
        }