Exemple #1
0
 public void Add(LineChain2 <T> chain, LeakyResizableArray <Node <T> > nodes, LeakyResizableArray <Edge <T> > edges)
 {
     if (chain == null)
     {
         return;
     }
     this.AddImpl(chain, chain.Points, false, nodes, edges);
 }
Exemple #2
0
 public void Add(Ring2 <T> ring, LeakyResizableArray <Node <T> > nodes, LeakyResizableArray <Edge <T> > edges)
 {
     if (ring == null)
     {
         return;
     }
     this.AddImpl(ring, ring.Points, true, nodes, edges);
 }
Exemple #3
0
 internal NodeFront(LeakyResizableArray <Node <T> > masterNodes)
 {
     if (masterNodes == null)
     {
         throw new ArgumentNullException();
     }
     this.masterNodes = masterNodes;
     this.Reset();
 }
Exemple #4
0
        internal void Add(Point2 <T> point, LeakyResizableArray <Node <T> > nodes)
        {
            if (point == null)
            {
                return;
            }
            Node <T> node = new Node <T>(point, point);

            this.Nodes.Add(node);
            nodes.Add(node);
            //this.Points.Add(point);
        }
Exemple #5
0
        public void Add(IEnumerable <Point2 <T> > chain, bool isRing, LeakyResizableArray <Node <T> > nodes, LeakyResizableArray <Edge <T> > edges)
        {
            if (chain == null)
            {
                return;
            }
            List <Point2 <T> > chainPoints = RemoveDups(chain, isRing);

            if (chainPoints.Count < 3)
            {
                return;
            }
            this.AddImpl(chainPoints, chainPoints, isRing, nodes, edges);
        }
Exemple #6
0
        public void Add(Point2 <T>[] chain, bool isRing, LeakyResizableArray <Node <T> > nodes)
        {
            if (chain == null || chain.Length < 3)
            {
                return;
            }
            List <Point2 <T> > chainPoints = RemoveDups(chain, isRing);

            if (chainPoints.Count < 3)
            {
                return;
            }
            this.AddImpl(chainPoints, chainPoints, isRing, nodes);
        }
        public Point2 <T>[] ToArray()
        {
            LeakyResizableArray <Point2 <T> > pts = new LeakyResizableArray <Point2 <T> >();

            foreach (Polyline2 <T> ch in this.Lines)
            {
                foreach (Point2 <T> pt in ch.Points)
                {
                    pts.Add(pt);
                }
            }
            pts.TrimExcess();
            return(pts.Data);
        }
Exemple #8
0
 public PolylineBag2 <T> ConstructPolylineBag(IEnumerable <Polyline2 <T> > chains)
 {
     if (chains != null)
     {
         LeakyResizableArray <Polyline2 <T> > chainSet = new LeakyResizableArray <Polyline2 <T> >();
         foreach (Polyline2 <T> ch in chains)
         {
             if (ch == null)
             {
                 return(null);
             }
             chainSet.Add(ch);
         }
         chainSet.TrimExcess();
         return(new PolylineBag2 <T>(chainSet.Data));
     }
     return(null);
 }
Exemple #9
0
        internal void Add(Point2 <T> start, Point2 <T> end, LeakyResizableArray <Node <T> > nodes)
        {
            if (start == null || end == null || start.Equals(end))
            {
                return;
            }
            LineSegment2 <T> seg = start.Factory.ConstructSegment(start, end);
            Node <T>         n   = new Node <T>(start, seg);
            Node <T>         p   = new Node <T>(end, seg);

            this.Nodes.Add(n);
            this.Nodes.Add(p);
            nodes.Add(n);
            nodes.Add(p);

            Edge <T> e = new Edge <T>(n, p);

            this.Edges.Add(e);
        }
Exemple #10
0
        internal void Add(LineSegment2 <T> segment, LeakyResizableArray <Node <T> > nodes)
        {
            if (segment == null)
            {
                return;
            }
            //this.Points.Add(segment.Start);
            //this.Points.Add(segment.End);
            Node <T> n = new Node <T>(segment.Start, segment);
            Node <T> p = new Node <T>(segment.End, segment);

            this.Nodes.Add(n);
            this.Nodes.Add(p);
            nodes.Add(n);
            nodes.Add(p);

            Edge <T> e = new Edge <T>(n, p);

            this.Edges.Add(e);
        }
Exemple #11
0
        public RingBag2 <T> ConstructRingBag(IEnumerable <Ring2 <T> > chains)
        {
            if (chains != null)
            {
                LeakyResizableArray <Ring2 <T> > chainSet = new LeakyResizableArray <Ring2 <T> >();
                foreach (Ring2 <T> ch in chains)
                {
                    if (ch == null)
                    {
                        return(null);
                    }
                    chainSet.Add(ch);
                }
                chainSet.TrimExcess();
                Ring2 <T>[] Chains = chainSet.Data;

                return(new RingBag2 <T>(Chains));
            }
            return(null);
        }
Exemple #12
0
        public override RingSet2 <double> ConstructRingSet(IEnumerable <Ring2 <double> > chains)
        {
            if (chains == null)
            {
                return(null);
            }
            LeakyResizableArray <Ring2 <double> > chainSet = new LeakyResizableArray <Ring2 <double> >();

            foreach (Ring2 <double> ch in chains)
            {
                if (ch == null)
                {
                    return(null);
                }
                chainSet.Add(ch);
            }
            chainSet.TrimExcess();
            Ring2 <double>[] Chains = chainSet.Data;

            PlanarChainGraph <double> graph = new PlanarChainGraph <double>();

            foreach (Ring2 <double> ch in Chains)
            {
                if (ch == null)
                {
                    return(null); //can't have null chains
                }
                graph.Add(ch);
            }
            if (PlanarGraphUtils.AnyIntersections(graph)) //there must be overlap
            {
                return(null);
            }

            return(new RingSet2 <double>(Chains));
        }
Exemple #13
0
        private void AddImpl(object parentShape, IEnumerable <Point2 <T> > chain, bool isRing, LeakyResizableArray <Node <T> > nodes, LeakyResizableArray <Edge <T> > edges)
        {
            int      firstIndex = (int)this.Nodes.Count;
            int      firstEdge  = (int)this.Edges.Count;
            Node <T> n          = null;
            Node <T> p          = null;
            Edge <T> e          = null;
            Edge <T> prev       = null;

            foreach (Point2 <T> pt in chain)
            {
                p = n;
                n = new Node <T>(pt, parentShape);
                if (p != null)
                {
                    prev = e;
                    e    = new Edge <T>(p, n);
                    if (prev != null)
                    {
                        e.Previous = prev;
                        prev.Next  = e;
                    }
                    this.Edges.Add(e);
                    edges.Add(e);
                }
                this.Nodes.Add(n);
                nodes.Add(n);
            }
            if (isRing)   //wraparound
            {
                p    = n; //last node added above
                n    = this.Nodes.Data[firstIndex];
                prev = e; //last edge added above
                e    = new Edge <T>(p, n);

                e.Previous = prev;
                prev.Next  = e;

                //connect the wrap
                prev       = e;
                e          = this.Edges.Data[firstEdge];
                e.Previous = prev;
                prev.Next  = e;

                this.Edges.Add(e);
                edges.Add(e);
            }
        }