Ejemplo n.º 1
0
        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;
            }
        }