Exemplo n.º 1
0
        protected bool Add(TriangulationPoint p, int idx, bool constrainToBounds)
        {
            if (p == null)
            {
                return(false);
            }

            if (constrainToBounds)
            {
                ConstrainPointToBounds(p);
            }

            // if we already have an instance of the point, then don't bother inserting it again as duplicate points
            // will actually cause some real problems later on.   Still return true though to indicate that the point
            // is successfully "added"
            if (_pointMap.ContainsKey(p.VertexCode))
            {
                return(true);
            }
            _pointMap.Add(p.VertexCode, p);

            if (idx < 0)
            {
                MPoints.Add(p);
            }
            else
            {
                MPoints.Insert(idx, p);
            }

            return(true);
        }
Exemplo n.º 2
0
        protected override void Add(Point2D p, int idx, bool bCalcWindingOrderAndEpsilon)
        {
            TriangulationPoint pt;

            if (p is TriangulationPoint)
            {
                pt = p as TriangulationPoint;
            }
            else
            {
                pt = new TriangulationPoint(p.X, p.Y);
            }
            if (idx < 0)
            {
                MPoints.Add(pt);
            }
            else
            {
                MPoints.Insert(idx, pt);
            }
            BoundingBox = BoundingBox.AddPoint(pt);
            if (bCalcWindingOrderAndEpsilon)
            {
                if (WindingOrder == WindingOrderType.Unknown)
                {
                    WindingOrder = CalculateWindingOrder();
                }
                Epsilon = CalculateEpsilon();
            }
        }
Exemplo n.º 3
0
 public override void RemoveAt(int idx)
 {
     if (idx < 0 || idx >= Count)
     {
         return;
     }
     MPoints.RemoveAt(idx);
 }
Exemplo n.º 4
0
        /// <summary>
        /// Removes a point from the polygon.  Note this can be a somewhat expensive operation
        /// as it must recalculate the bounding area from scratch.
        /// </summary>
        /// <param name="p"></param>
        public void RemovePoint(PolygonPoint p)
        {
            PolygonPoint next = p.Next;
            PolygonPoint prev = p.Previous;

            prev.Next     = next;
            next.Previous = prev;
            MPoints.Remove(p);

            BoundingBox = new Rect2D();
            foreach (var point2D in MPoints)
            {
                BoundingBox = BoundingBox.AddPoint(point2D);
            }
        }
Exemplo n.º 5
0
        protected override void AddRange(IEnumerator <Point2D> iter, WindingOrderType windingOrder)
        {
            if (iter == null)
            {
                return;
            }

            if (WindingOrder == WindingOrderType.Unknown && Count == 0)
            {
                WindingOrder = windingOrder;
            }
            bool bReverseReadOrder = (WindingOrder != WindingOrderType.Unknown) && (windingOrder != WindingOrderType.Unknown) && (WindingOrder != windingOrder);
            bool bAddedFirst       = true;
            int  startCount        = MPoints.Count;

            iter.Reset();
            while (iter.MoveNext())
            {
                TriangulationPoint pt;
                if (iter.Current is TriangulationPoint)
                {
                    pt = iter.Current as TriangulationPoint;
                }
                else
                {
                    pt = new TriangulationPoint(iter.Current.X, iter.Current.Y);
                }
                if (!bAddedFirst)
                {
                    bAddedFirst = true;
                    MPoints.Add(pt);
                }
                else if (bReverseReadOrder)
                {
                    MPoints.Insert(startCount, pt);
                }
                else
                {
                    MPoints.Add(pt);
                }
                BoundingBox = BoundingBox.AddPoint(iter.Current);
            }
            if (WindingOrder == WindingOrderType.Unknown && windingOrder == WindingOrderType.Unknown)
            {
                WindingOrder = CalculateWindingOrder();
            }
            Epsilon = CalculateEpsilon();
        }
Exemplo n.º 6
0
 public bool Contains(TriangulationPoint p)
 {
     return(MPoints.Contains(p));
 }
Exemplo n.º 7
0
 public bool Remove(TriangulationPoint p)
 {
     return(MPoints.Remove(p));
 }
Exemplo n.º 8
0
 public override bool Remove(Point2D p)
 {
     return(MPoints.Remove(p));
 }
Exemplo n.º 9
0
 public void Insert(int idx, TriangulationPoint item)
 {
     MPoints.Insert(idx, item);
 }
Exemplo n.º 10
0
 public int IndexOf(TriangulationPoint p)
 {
     return(MPoints.IndexOf(p));
 }
Exemplo n.º 11
0
 IEnumerator <TriangulationPoint> IEnumerable <TriangulationPoint> .GetEnumerator()
 {
     return(MPoints.Cast <TriangulationPoint>().GetEnumerator());
 }