/// <summary> /// Returns a set of this EdgeCollection, AKA without duplicate edges. /// </summary> /// <returns>The same EdgeCollection but without duplicates</returns> public EdgeCollection <T> GetSetCollection() { var hashSet = new HashSet <T>(); var edgeSet = new EdgeCollection <T>(); foreach (T edge in this.Where(edge => !hashSet.Contains(edge))) { hashSet.Add(edge); edgeSet.Add(edge); } return(edgeSet); }
/// <summary> /// Simplifies outer perimeter using EdgeCollection's simplification algorithm to /// merge collinear segments together. /// </summary> /// <param name="outerPerimUnsimplified"></param> /// <returns></returns> private static Vector2[] _SimplifyOuterPerim(Vector2[] outerPerimUnsimplified) { var edgeCollection = new EdgeCollection <PolyEdge>(); for (int i = 0; i < outerPerimUnsimplified.Length; i++) { Vector2 thisVertex = outerPerimUnsimplified[i]; Vector2 nextVertex = outerPerimUnsimplified[(i + 1) % outerPerimUnsimplified.Length]; if (thisVertex == nextVertex) { continue; } var polyEdge = new PolyEdge(thisVertex, nextVertex); edgeCollection.Add(polyEdge); } List <Vector2> simplified = edgeCollection.GetSimplifiedPerim(); return(simplified.ToArray()); }