001package sec.geo.shape;
002
003import sec.sun.awt.geom.Area;
004import sec.geo.GeoArc;
005import sec.geo.GeoEllipse;
006import sec.geo.ShapeObject;
007import sec.geo.GeoPoint;
008import sec.geo.kml.KmlOptions.AltitudeMode;
009
010public class Radarc/* extends AArc */ {  //AArc extends APivot which extends AExtrusion
011
012    private double minAltitudeMeters;
013    private double maxAltitudeMeters;
014    private Area shape;
015    protected double maxDistanceMeters;
016    protected double flatnessDistanceMeters;
017    private double minRadiusMeters;
018    protected double leftAzimuthDegrees, rightAzimuthDegrees;
019    protected GeoPoint pivot;
020    protected double radiusMeters;
021    protected AltitudeMode altitudeMode;
022    protected int limit;
023
024    public Radarc() {
025        maxDistanceMeters = 100000;
026        flatnessDistanceMeters = 1;
027        limit = 4;  //was 4
028    }
029
030    public void setRightAzimuthDegrees(double rightAzimuthDegrees) {
031        this.rightAzimuthDegrees = rightAzimuthDegrees;
032        shapeChanged();
033    }
034
035    public void setLeftAzimuthDegrees(double leftAzimuthDegrees) {
036        this.leftAzimuthDegrees = leftAzimuthDegrees;
037        shapeChanged();
038    }
039
040    public void setMinRadius(double minRadiusMeters) {
041        this.minRadiusMeters = minRadiusMeters;
042        shapeChanged();
043    }
044
045    protected void shapeChanged() {
046        shape = null;
047    }
048
049    //@Override
050    protected Area createShape() {
051        GeoArc arc = new GeoArc(pivot, radiusMeters * 2, radiusMeters * 2, leftAzimuthDegrees, rightAzimuthDegrees,
052                maxDistanceMeters, flatnessDistanceMeters, limit);
053        ShapeObject arcObj = new ShapeObject(arc);
054        //Area shape = new Area(arc);
055        Area shape1 = new Area(arcObj);
056        GeoEllipse ellipse = new GeoEllipse(pivot, minRadiusMeters * 2, minRadiusMeters * 2, maxDistanceMeters,
057                flatnessDistanceMeters, limit);
058
059        ShapeObject ellipseObj = new ShapeObject(ellipse);
060
061        shape1.subtract(new Area(ellipseObj));
062        return shape1;
063    }
064
065    public double getMinAltitude() {
066        return minAltitudeMeters;
067    }
068
069    public void setMinAltitude(double minAltitudeMeters) {
070        this.minAltitudeMeters = minAltitudeMeters;
071        shapeChanged();
072    }
073
074    public double getMaxAltitude() {
075        return maxAltitudeMeters;
076    }
077
078    public void setMaxAltitude(double maxAltitudeMeters) {
079        this.maxAltitudeMeters = maxAltitudeMeters;
080        shapeChanged();
081    }
082
083    public void setMaxDistance(double maxDistanceMeters) {
084        this.maxDistanceMeters = maxDistanceMeters;
085        shapeChanged();
086    }
087
088    public void setFlatness(double flatnessDistanceMeters) {
089        this.flatnessDistanceMeters = flatnessDistanceMeters;
090        shapeChanged();
091    }
092
093    public void setLimit(int limit) {
094        this.limit = limit;
095        shapeChanged();
096    }
097
098    public AltitudeMode getAltitudeMode() {
099        return altitudeMode;
100    }
101
102    public void setAltitudeMode(AltitudeMode altitudeMode) {
103        this.altitudeMode = altitudeMode;
104    }
105
106    public void setRadius(double radiusMeters) {
107        this.radiusMeters = radiusMeters;
108        shapeChanged();
109    }
110
111    public void setPivot(GeoPoint pivot) {
112        this.pivot = pivot;
113        shapeChanged();
114    }
115
116    public Area getShape() {
117        if (shape == null) {
118            shape = createShape();
119        }
120        return shape;
121    }
122
123}