001package sec.geo.shape;
002
003import sec.geo.GeoPoint;
004import sec.geo.ShapeObject;
005import sec.geo.GeoEllipse;
006import sec.geo.kml.KmlOptions.AltitudeMode;
007
008public class Circle /*extends APivot*/ {    //APivot extends AExtrusion
009
010    protected GeoPoint pivot;
011    protected double radiusMeters;
012    private ShapeObject shape;
013    protected double maxDistanceMeters;
014    protected double flatnessDistanceMeters;
015    protected AltitudeMode altitudeMode;
016    private double minAltitudeMeters;
017    private double maxAltitudeMeters;
018    protected int limit;
019
020    public Circle() {
021        pivot = new GeoPoint();
022        maxDistanceMeters = 100000;
023        flatnessDistanceMeters = 1;
024        limit = 4;
025    }
026
027    public ShapeObject getShape() {
028        if (shape == null) {
029            shape = createShape();
030        }
031        return shape;
032    }
033
034    //@Override
035    public void setRadius(double radiusMeters) {
036        this.radiusMeters = radiusMeters;
037        shapeChanged();
038    }
039
040    //@Override
041    public void setPivot(GeoPoint pivot) {
042        this.pivot = pivot;
043        shapeChanged();
044    }
045
046    //@Override
047    protected ShapeObject createShape() {
048        GeoEllipse e = new GeoEllipse(pivot, radiusMeters * 2, radiusMeters * 2, maxDistanceMeters,
049                flatnessDistanceMeters, limit);
050        return new ShapeObject(e);
051    }
052
053    protected void shapeChanged() {
054        shape = null;
055    }
056
057    public double getMinAltitude() {
058        return minAltitudeMeters;
059    }
060
061    public void setMinAltitude(double minAltitudeMeters) {
062        this.minAltitudeMeters = minAltitudeMeters;
063        shapeChanged();
064    }
065
066    public double getMaxAltitude() {
067        return maxAltitudeMeters;
068    }
069
070    public void setMaxAltitude(double maxAltitudeMeters) {
071        this.maxAltitudeMeters = maxAltitudeMeters;
072        shapeChanged();
073    }
074
075    public void setMaxDistance(double maxDistanceMeters) {
076        this.maxDistanceMeters = maxDistanceMeters;
077        shapeChanged();
078    }
079
080    public void setFlatness(double flatnessDistanceMeters) {
081        this.flatnessDistanceMeters = flatnessDistanceMeters;
082        shapeChanged();
083    }
084
085    public void setLimit(int limit) {
086        this.limit = limit;
087        shapeChanged();
088    }
089
090    public AltitudeMode getAltitudeMode() {
091        return altitudeMode;
092    }
093
094    public void setAltitudeMode(AltitudeMode altitudeMode) {
095        this.altitudeMode = altitudeMode;
096    }
097}