package sec.geo.shape;
import sec.sun.awt.geom.Area;
import sec.geo.GeoArc;
import sec.geo.GeoEllipse;
import sec.geo.ShapeObject;
import sec.geo.GeoPoint;
import sec.geo.kml.KmlOptions.AltitudeMode;
public class Radarc/* extends AArc */ { //AArc extends APivot which extends AExtrusion
private double minAltitudeMeters;
private double maxAltitudeMeters;
private Area shape;
protected double maxDistanceMeters;
protected double flatnessDistanceMeters;
private double minRadiusMeters;
protected double leftAzimuthDegrees, rightAzimuthDegrees;
protected GeoPoint pivot;
protected double radiusMeters;
protected AltitudeMode altitudeMode;
protected int limit;
public Radarc() {
maxDistanceMeters = 100000;
flatnessDistanceMeters = 1;
limit = 4; //was 4
}
public void setRightAzimuthDegrees(double rightAzimuthDegrees) {
this.rightAzimuthDegrees = rightAzimuthDegrees;
shapeChanged();
}
public void setLeftAzimuthDegrees(double leftAzimuthDegrees) {
this.leftAzimuthDegrees = leftAzimuthDegrees;
shapeChanged();
}
public void setMinRadius(double minRadiusMeters) {
this.minRadiusMeters = minRadiusMeters;
shapeChanged();
}
protected void shapeChanged() {
shape = null;
}
//@Override
protected Area createShape() {
GeoArc arc = new GeoArc(pivot, radiusMeters * 2, radiusMeters * 2, leftAzimuthDegrees, rightAzimuthDegrees,
maxDistanceMeters, flatnessDistanceMeters, limit);
ShapeObject arcObj = new ShapeObject(arc);
//Area shape = new Area(arc);
Area shape1 = new Area(arcObj);
GeoEllipse ellipse = new GeoEllipse(pivot, minRadiusMeters * 2, minRadiusMeters * 2, maxDistanceMeters,
flatnessDistanceMeters, limit);
ShapeObject ellipseObj = new ShapeObject(ellipse);
shape1.subtract(new Area(ellipseObj));
return shape1;
}
public double getMinAltitude() {
return minAltitudeMeters;
}
public void setMinAltitude(double minAltitudeMeters) {
this.minAltitudeMeters = minAltitudeMeters;
shapeChanged();
}
public double getMaxAltitude() {
return maxAltitudeMeters;
}
public void setMaxAltitude(double maxAltitudeMeters) {
this.maxAltitudeMeters = maxAltitudeMeters;
shapeChanged();
}
public void setMaxDistance(double maxDistanceMeters) {
this.maxDistanceMeters = maxDistanceMeters;
shapeChanged();
}
public void setFlatness(double flatnessDistanceMeters) {
this.flatnessDistanceMeters = flatnessDistanceMeters;
shapeChanged();
}
public void setLimit(int limit) {
this.limit = limit;
shapeChanged();
}
public AltitudeMode getAltitudeMode() {
return altitudeMode;
}
public void setAltitudeMode(AltitudeMode altitudeMode) {
this.altitudeMode = altitudeMode;
}
public void setRadius(double radiusMeters) {
this.radiusMeters = radiusMeters;
shapeChanged();
}
public void setPivot(GeoPoint pivot) {
this.pivot = pivot;
shapeChanged();
}
public Area getShape() {
if (shape == null) {
shape = createShape();
}
return shape;
}
}