/// <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); }
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); } }