package sec.geo.shape; import sec.geo.GeoPath; import java.util.ArrayList; import sec.geo.GeoPoint; import sec.geo.ShapeObject; import sec.geo.kml.KmlOptions.AltitudeMode; public class Polyarc /* extends APath implements IArc */ { //APath extedns AExtruusion private double minAltitudeMeters; private double maxAltitudeMeters; private ShapeObject shape; //was shape protected double maxDistanceMeters; protected double flatnessDistanceMeters; protected int limit; private GeoPoint pivot; private double radiusMeters; private double leftAzimuthDegrees, rightAzimuthDegrees; protected AltitudeMode altitudeMode; protected final ArrayList<GeoPoint> points; public Polyarc() { points = new ArrayList<GeoPoint>(); maxDistanceMeters = 100000; flatnessDistanceMeters = 1; limit = 4; } public void addPoint(GeoPoint point) { points.add(point); shapeChanged(); } public void addPoints(ArrayList<GeoPoint> points) { this.points.addAll(points); shapeChanged(); } //@Override public void setRadius(double radiusMeters) { this.radiusMeters = radiusMeters; shapeChanged(); } //@Override public void setPivot(GeoPoint pivot) { this.pivot = pivot; shapeChanged(); } public void setRightAzimuthDegrees(double rightAzimuthDegrees) { this.rightAzimuthDegrees = rightAzimuthDegrees; shapeChanged(); } public void setLeftAzimuthDegrees(double leftAzimuthDegrees) { this.leftAzimuthDegrees = leftAzimuthDegrees; shapeChanged(); } //@Override protected ShapeObject createShape() { GeoPath path = new GeoPath(maxDistanceMeters, flatnessDistanceMeters, limit); int n = points.size(); //for (int i = 0; i < points.size(); i++) for (int i = 0; i < n; i++) { GeoPoint point = points.get(i); if (i == 0) { path.moveTo(point); } else { path.lineTo(point); } } path.arcTo(pivot, radiusMeters * 2, radiusMeters * 2, leftAzimuthDegrees, rightAzimuthDegrees); path.closePath(); return new ShapeObject(path); } protected void shapeChanged() { shape = null; } public ShapeObject getShape() { if (shape == null) { shape = createShape(); } return shape; } //protected abstract Shape createShape(); 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; } }