Ejemplo n.º 1
0
        /// <summary>
        /// Tries to find an already existing halfedge for the given vertices
        /// </summary>
        /// <param name="origin"></param>
        /// <param name="target"></param>
        /// <param name="result">The matching halfedge, or null</param>
        /// <returns>true on success, false on failure</returns>
        public static bool TryGetHalfEdge(Vertex origin, Vertex target, out HalfEdge result)
        {
            result = null;

            if (origin.Outgoing == null)
            {
                return(false);
            }

            // get vertex ring iterator around origin
            var iterator = new VertexEdgeRingIterator(origin);
            var outgoing = iterator.GetOutgoingEnumerator();

            foreach (var edge in iterator.GetOutgoingEnumerator())
            {
                if (edge.Target != target)
                {
                    continue;
                }

                result = edge;
                return(true);
            }

            return(false);
        }
Ejemplo n.º 2
0
        internal static bool TryShiftOutgoing(Vertex vertex)
        {
            try
            {
                var iter =
                    new VertexEdgeRingIterator(vertex)
                    .GetOutgoingEnumerator()
                    .Where(e => !EdgeLinker.IsDummyPairEdge(e)) // Only shift to a valid edge
                    .ToArray();

                if (iter.Length <= 1)
                {
                    vertex.Outgoing = null;
                    return(false);
                }

                vertex.Outgoing = iter[1];
                return(true);
            }
            catch (Exception)
            {
                // TODO: evaluate exception, or even better, fix it
                vertex.Outgoing = null;
                return(false);
            }
        }