예제 #1
0
        /// <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);
        }
예제 #2
0
        /// <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());
        }