Ejemplo n.º 1
0
 internal HEdge(int id, HEVertex v1, HEVertex v2, HEEdge relative)
 {
     _id       = id;
     _v1       = v1;
     _v2       = v2;
     _relative = relative;
 }
Ejemplo n.º 2
0
 public void Dispose()
 {
     _id       = HEMesh.InvaildID;
     _v1       = null;
     _v2       = null;
     _relative = null;
 }
Ejemplo n.º 3
0
 public HEdge GetEdgeBetween(HEVertex v1, HEVertex v2)
 {
     if (IsConnected(v1, v2))
     {
         return(v1.OuterGoing.RelativeEdge);
     }
     return(null);
 }
Ejemplo n.º 4
0
        private HEVertex _NewVertex()
        {
            var ret = new HEVertex();

            ret.ID = VertexCount;
            _vertices.Add(ret);
            return(ret);
        }
Ejemplo n.º 5
0
 public void Dispose()
 {
     _id           = HEMesh.InvaildID;
     _vertexTo     = null;
     _relativeFace = null;
     _relativeEdge = null;
     _nextEdge     = null;
     _preEdge      = null;
     _oppEdge      = null;
 }
Ejemplo n.º 6
0
 internal HEEdge(int id, HEVertex goingTo, HEFace relativeFace, HEdge relativeEdge, HEEdge nextEdge, HEEdge preEdge, HEEdge oppEdge)
 {
     _id           = id;
     _vertexTo     = goingTo;
     _relativeFace = relativeFace;
     _relativeEdge = relativeEdge;
     _nextEdge     = nextEdge;
     _preEdge      = preEdge;
     _oppEdge      = oppEdge;
 }
Ejemplo n.º 7
0
        /// <summary>
        /// ret is point to v2
        /// </summary>
        internal HEEdge HEdgeBetween(HEVertex v1, HEVertex v2)
        {
            var edge = EdgeBetween(v1, v2);

            if (edge != null)
            {
                return(edge.Relative.VertexTo == v2 ? edge.Relative : edge.Relative.OppEdge);
            }
            return(null);
        }
Ejemplo n.º 8
0
        public HEEdge HalfEdgeFromVertex(HEVertex vertex)
        {
            var edge = _relative;

            while (true)
            {
                if (edge.VertexFrom == vertex)
                {
                    return(edge);
                }
                edge = edge.NextEdge;
                if (edge == _relative)
                {
                    break;
                }
            }
            return(null);
        }
Ejemplo n.º 9
0
        public bool Contains(HEVertex vertex)
        {
            var edge = _relative;

            while (true)
            {
                if (edge.VertexTo == vertex)
                {
                    return(true);
                }
                edge = edge.NextEdge;
                if (edge == _relative)
                {
                    break;
                }
            }
            return(false);
        }
Ejemplo n.º 10
0
        public void DeleteVertex(HEVertex vertex)
        {
            if (vertex == null || vertex.IsDeleted)
            {
                return;
            }

            if (!vertex.IsIsolated)
            {
                var edges = vertex.GetAdjacentEdges();
                foreach (var edge in edges)
                {
                    DeleteEdge(edge);
                }
            }

            _DeleteVertex(vertex);
        }
Ejemplo n.º 11
0
 public HEdge EdgeBetween(HEVertex v1, HEVertex v2)
 {
     if (v1 == null || v2 == null)
     {
         return(null);
     }
     if (!v1.IsIsolated)
     {
         var edge = v1.OuterGoing;
         do
         {
             if (edge.VertexTo == v2)
             {
                 return(edge.RelativeEdge);
             }
             edge = edge.RotateNext;
         }while (edge != v1.OuterGoing);
     }
     return(null);
 }
Ejemplo n.º 12
0
        internal HEdge AddEdge(HEVertex v1, HEVertex v2)
        {
            if (v1 == null || v2 == null)
            {
                return(null);
            }

            var edge = EdgeBetween(v1, v2);

            if (edge != null)
            {
                return(edge);
            }

            edge = _NewEdge();
            var hedge1 = _NewHEdge();
            var hedge2 = _NewHEdge();

            edge.V1       = v1;
            edge.V2       = v2;
            edge.Relative = hedge1;

            hedge1.VertexTo     = v2;
            hedge1.OppEdge      = hedge2;
            hedge1.RelativeEdge = edge;
            hedge1.PreEdge      = hedge2;
            hedge1.NextEdge     = hedge2;

            hedge2.VertexTo     = v1;
            hedge2.OppEdge      = hedge1;
            hedge2.RelativeEdge = edge;
            hedge2.PreEdge      = hedge1;
            hedge2.NextEdge     = hedge1;

            return(edge);
        }
Ejemplo n.º 13
0
 private void _DeleteVertex(HEVertex vertex)
 {
     _DeleteElement(vertex, _vertices);
 }
Ejemplo n.º 14
0
 public bool IsConnected(HEVertex v1, HEVertex v2)
 {
     return(EdgeBetween(v1, v2) != null);
 }
Ejemplo n.º 15
0
 public Vector3D GetVertexNormal(HEVertex vertex)
 {
     return(GetVertexNormal(vertex.ID));
 }