package sec.geo.shape; import sec.sun.awt.geom.Area; import sec.geo.kml.KmlOptions.AltitudeMode; import sec.geo.GeoBlock; import sec.geo.GeoEllipse; import sec.geo.GeoPoint; import sec.geo.ShapeObject; import java.util.ArrayList; public class Orbit /* extends APath */ { //APath extends AExtrusion private double minAltitudeMeters; private double maxAltitudeMeters; protected double maxDistanceMeters; protected double flatnessDistanceMeters; protected AltitudeMode altitudeMode; private Area shape; protected int limit; private double widthMeters; protected final ArrayList<GeoPoint> points; public Orbit() { 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(); } public void setWidth(double widthMeters) { this.widthMeters = widthMeters; shapeChanged(); } //@Override protected Area createShape() { Area orbit = new Area(); GeoPoint previousPoint = null; for (GeoPoint point : points) { GeoEllipse ellipse = new GeoEllipse(point, widthMeters, widthMeters, maxDistanceMeters, flatnessDistanceMeters, limit); ShapeObject el = new ShapeObject(ellipse); //orbit.add(new Area(ellipse)); //orbit.add(new Area(el)); Area rhs = new Area(el); orbit.add(rhs); if (previousPoint != null) { GeoBlock block = new GeoBlock(previousPoint, point, widthMeters, maxDistanceMeters, flatnessDistanceMeters, limit); ShapeObject bl = new ShapeObject(block); Area rhs2 = new Area(bl); //orbit.add(new Area(bl)); orbit.add(rhs2); } previousPoint = point; } return orbit; } public Area getShape() { if (shape == null) { shape = createShape(); } return shape; } protected void shapeChanged() { shape = null; } //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; } }