protected float _radius = 100; // rayon souhaité #endregion Fields #region Constructors public ArchedPoint2(Point2 point) : base(point) { _prevEdge = point.GetPrevEdge (); _nextEdge = point.GetNextEdge (); _junction = JunctionType.Curved; _prevEdge.SetNextPoint2 (this); _nextEdge.SetPrevPoint2 (this); Update (false); }
public void SetJunctionType(int index, JunctionType junction) { Point2 selectedPoint = _points[index]; if (selectedPoint.GetJunction () != junction) { if (junction == JunctionType.Curved) { ArchedPoint2 ap = new ArchedPoint2 (selectedPoint); _points[index] = ap; } else if (junction == JunctionType.Broken) { Point2 newPoint = new Point2 (selectedPoint); newPoint.SetPrevEdge (selectedPoint.GetPrevEdge ()); newPoint.SetNextEdge (selectedPoint.GetNextEdge ()); Edge2 prevEdge = newPoint.GetPrevEdge (); if (prevEdge != null) { prevEdge.SetNextPoint2 (newPoint); } Edge2 nextEdge = newPoint.GetNextEdge (); if (nextEdge != null) { nextEdge.SetPrevPoint2 (newPoint); } _points[index] = newPoint; } } }
public Polygon(PolygonRawData polygonRawData) { _closed = true; float area = 0; for (int i = 0; i < polygonRawData.Count; ++i) { Vector2 p1 = polygonRawData[i]; Vector2 p2 = polygonRawData[i + 1]; area += p1.x * p2.y - p2.x * p1.y; } if (area > 0) { polygonRawData.Reverse (); } //Debug.Log ("AREA " + area); Edge2 prevEdge = null; Point2 prevPt = null; Point2 currentPt = null; for (int i = 0; i < polygonRawData.Count - 1; ++i) { Vector2 rawPt = polygonRawData[i]; if (currentPt == null) { //currentPt = new Point2 (rawPt); currentPt = new Point2 (); currentPt.Set( rawPt.x, rawPt.y); } Point2 nextPt = new Point2 (polygonRawData[i + 1]); if (i == polygonRawData.Count - 2 && polygonRawData.Count > 2) { nextPt = _points[0].GetPrevEdge ().GetPrevPoint2 (); //nextPt = (Point2)_points[0].GetPrevEdge ().GetPrevPoint2 ().Clone(); //nextPt = new Point2(); nextPt.Set( _points[0].GetPrevEdge ().GetPrevPoint2 ().GetX(), _points[0].GetPrevEdge ().GetPrevPoint2 ().GetY()); } if (prevEdge == null) { if (prevPt == null) { //prevPt = new Point2 (polygonRawData[i - 1]); prevPt = new Point2 (); prevPt.Set( polygonRawData[i - 1].x, polygonRawData[i - 1].y); } prevEdge = new Edge2 (prevPt, currentPt); prevPt.SetNextEdge (prevEdge); } Edge2 nextEdge = new Edge2 (currentPt, nextPt); // if (i == polygonRawData.Count - 1) // { // nextEdge = _points[0].GetPrevEdge (); // } currentPt.SetEdges (prevEdge, nextEdge); _points.Add (currentPt); _edges.Add (nextEdge); if (i == polygonRawData.Count - 2 && polygonRawData.Count >= 2) { nextPt.SetPrevEdge (nextEdge); _edges.Add (nextPt.GetNextEdge ()); _points.Add (nextPt); } prevEdge = nextEdge; prevPt = currentPt; currentPt = nextPt; } if (_edges.Count == 2 && _points.Count == 2) { _points[0].SetPrevEdge (null); _points[1].SetNextEdge (null); _edges.RemoveAt (1); } UpdateBounds (); }