private static void TestVertexType(Vertex vert, Face face, out VertexType vertType) { var heStartingAtFace = _geometry.GetVertexStartingHalfEdges(vert.Handle).ToList(); var incidentHalfEdge = new HalfEdge(); foreach (var he in heStartingAtFace) { var incidentFace = he.IncidentFace; if (!incidentFace.Equals(face.Handle)) { continue; } incidentHalfEdge = he; break; } HalfEdge nextHalfEdge; Vertex nextVert; HalfEdge prevHalfEdge; Vertex prevVert; nextHalfEdge = _geometry.GetHalfEdgeByHandle(incidentHalfEdge.NextHalfEdge); nextVert = _geometry.GetVertexByHandle(nextHalfEdge.OriginVertex); prevHalfEdge = _geometry.GetHalfEdgeByHandle(incidentHalfEdge.PrevHalfEdge); prevVert = _geometry.GetVertexByHandle(prevHalfEdge.OriginVertex); if (IsUnderVert(face, vert, nextVert) && IsUnderVert(face, vert, prevVert)) { if (_geometry.IsAngleGreaterPi(face, nextVert, vert, prevVert)) { vertType = VertexType.SplitVertex; } else { vertType = VertexType.StartVertex; } } else if (IsOverVert(face, vert, nextVert) && IsOverVert(face, vert, prevVert)) { if (_geometry.IsAngleGreaterPi(face, nextVert, vert, prevVert)) { vertType = VertexType.MergeVertex; } else { vertType = VertexType.EndVertex; } } else { vertType = VertexType.RegularVertex; } }