001package sec.geo.shape;
002
003import sec.geo.ShapeObject;
004import java.util.ArrayList;
005import sec.geo.GeoPoint;
006import sec.geo.GeoPath;
007import sec.geo.kml.KmlOptions.AltitudeMode;
008
009public class Polygon /*extends APath*/ {    //APath extends AExtrusion
010
011    private double minAltitudeMeters;
012    private double maxAltitudeMeters;
013    protected double maxDistanceMeters;
014    protected double flatnessDistanceMeters;
015    protected AltitudeMode altitudeMode;
016    protected int limit;
017    private ShapeObject shape;
018    //@Override
019    protected final ArrayList<GeoPoint> points;
020
021    public Polygon() {
022        points = new ArrayList<GeoPoint>();
023        maxDistanceMeters = 100000;
024        flatnessDistanceMeters = 1;
025        limit = 4;
026    }
027
028    public void addPoint(GeoPoint point) {
029        points.add(point);
030        shapeChanged();
031    }
032
033    public void addPoints(ArrayList<GeoPoint> points) {
034        this.points.addAll(points);
035        shapeChanged();
036    }
037
038    protected ShapeObject createShape() {
039        GeoPath path = new GeoPath(maxDistanceMeters, flatnessDistanceMeters, limit);
040        int n=points.size();
041        //for (int i = 0; i < points.size(); i++) 
042        for (int i = 0; i < n; i++) 
043        {
044            if (i > 0) {
045                path.lineTo(points.get(i));
046            } else {
047                path.moveTo(points.get(i));
048            }
049        }
050        path.closePath();
051        return new ShapeObject(path);
052    }
053
054    protected void shapeChanged() {
055        shape = null;
056    }
057
058    public ShapeObject getShape() {
059        if (shape == null) {
060            shape = createShape();
061        }
062        return shape;
063    }
064
065    //protected abstract Shape createShape();
066    public double getMinAltitude() {
067        return minAltitudeMeters;
068    }
069
070    public void setMinAltitude(double minAltitudeMeters) {
071        this.minAltitudeMeters = minAltitudeMeters;
072        shapeChanged();
073    }
074
075    public double getMaxAltitude() {
076        return maxAltitudeMeters;
077    }
078
079    public void setMaxAltitude(double maxAltitudeMeters) {
080        this.maxAltitudeMeters = maxAltitudeMeters;
081        shapeChanged();
082    }
083
084    public void setMaxDistance(double maxDistanceMeters) {
085        this.maxDistanceMeters = maxDistanceMeters;
086        shapeChanged();
087    }
088
089    public void setFlatness(double flatnessDistanceMeters) {
090        this.flatnessDistanceMeters = flatnessDistanceMeters;
091        shapeChanged();
092    }
093
094    public void setLimit(int limit) {
095        this.limit = limit;
096        shapeChanged();
097    }
098
099    public AltitudeMode getAltitudeMode() {
100        return altitudeMode;
101    }
102
103    public void setAltitudeMode(AltitudeMode altitudeMode) {
104        this.altitudeMode = altitudeMode;
105    }
106}