public zz2DPoint(zzPainterPoint painterPoint) { autoCheckConvex = true; Vector3 lPos = painterPoint.transform.position; mPosition.x = lPos.x; mPosition.y = lPos.y; used = false; mDiagonals = new List<zz2DLine>(); painterPoint.pointInfo = this; }
public void addShape(zzPainterPoint[] points) { if (points.Length < 3) return; zz2DPoint lFirstPoint = new zz2DPoint(points[0]); mPoints.Add(lFirstPoint); zz2DPoint lPrePoint = addPoint(points[1], lFirstPoint); for (int i = 2; i < points.Length; ++i) { zz2DPoint lNewPoint = addPoint(points[i], lPrePoint); //若新的点在之前的线右边,则之前的角为凸角; //zz2DPoint.LeftOrRight( //lPrePoint.previousPoint.position, //lPrePoint.position, //lNewPoint.position) < 0;//lPrePoint's next point is lNewPoint lPrePoint = lNewPoint; } zz2DPoint lLastPoint = lPrePoint; zz2DLine lLastLine = new zz2DLine(lPrePoint, lFirstPoint); mLines.Add(lLastLine); //lLastPoint.convexAngle = zz2DPoint.LeftOrRight( // lLastPoint.previousPoint.position, // lLastPoint.position, // lLastPoint.nextPoint.position) < 0; //lFirstPoint.convexAngle = zz2DPoint.LeftOrRight( // lFirstPoint.previousPoint.position, // lFirstPoint.position, // lFirstPoint.nextPoint.position) < 0; //sortPoint(mPoints); }
private zz2DPoint addPoint(zzPainterPoint pointPos, zz2DPoint lPrePoint) { zz2DPoint lPoint = new zz2DPoint(pointPos); mPoints.Add(lPoint); zz2DLine lLine = new zz2DLine(lPrePoint, lPoint); mLines.Add(lLine); lPrePoint = lPoint; return lPoint; }
public static zzSimplyPolygon toPolygon(zzPainterPoint pPoint) { zzSimplyPolygon lOut = new zzSimplyPolygon(); List<Vector2> lPoints = new List<Vector2>(); zzPainterPoint lNowPoint = pPoint; do { Vector3 l3DPoint = lNowPoint.transform.position; lPoints.Add(new Vector2(l3DPoint.x, l3DPoint.y)); lNowPoint = lNowPoint.nextPoint; } while (lNowPoint != pPoint); lOut.setShape(lPoints.ToArray()); return lOut; }