001package sec.geo.shape; 002 003import sec.sun.awt.geom.Area; 004import sec.geo.kml.KmlOptions.AltitudeMode; 005import sec.geo.GeoBlock; 006import sec.geo.GeoEllipse; 007import sec.geo.GeoPoint; 008import sec.geo.ShapeObject; 009import java.util.ArrayList; 010 011public class Orbit /* extends APath */ { //APath extends AExtrusion 012 013 private double minAltitudeMeters; 014 private double maxAltitudeMeters; 015 protected double maxDistanceMeters; 016 protected double flatnessDistanceMeters; 017 protected AltitudeMode altitudeMode; 018 private Area shape; 019 protected int limit; 020 private double widthMeters; 021 protected final ArrayList<GeoPoint> points; 022 023 public Orbit() { 024 points = new ArrayList<GeoPoint>(); 025 maxDistanceMeters = 100000; 026 flatnessDistanceMeters = 1; 027 limit = 4; 028 } 029 030 public void addPoint(GeoPoint point) { 031 points.add(point); 032 shapeChanged(); 033 } 034 035 public void addPoints(ArrayList<GeoPoint> points) { 036 this.points.addAll(points); 037 shapeChanged(); 038 } 039 040 public void setWidth(double widthMeters) { 041 this.widthMeters = widthMeters; 042 shapeChanged(); 043 } 044 045 //@Override 046 protected Area createShape() { 047 Area orbit = new Area(); 048 GeoPoint previousPoint = null; 049 050 for (GeoPoint point : points) { 051 GeoEllipse ellipse = new GeoEllipse(point, widthMeters, widthMeters, maxDistanceMeters, 052 flatnessDistanceMeters, limit); 053 ShapeObject el = new ShapeObject(ellipse); 054 //orbit.add(new Area(ellipse)); 055 //orbit.add(new Area(el)); 056 Area rhs = new Area(el); 057 orbit.add(rhs); 058 059 if (previousPoint != null) { 060 GeoBlock block = new GeoBlock(previousPoint, point, widthMeters, maxDistanceMeters, 061 flatnessDistanceMeters, limit); 062 ShapeObject bl = new ShapeObject(block); 063 Area rhs2 = new Area(bl); 064 //orbit.add(new Area(bl)); 065 orbit.add(rhs2); 066 } 067 previousPoint = point; 068 } 069 return orbit; 070 } 071 072 public Area getShape() { 073 if (shape == null) { 074 shape = createShape(); 075 } 076 return shape; 077 } 078 079 protected void shapeChanged() { 080 shape = null; 081 } 082 083 //protected abstract Shape createShape(); 084 public double getMinAltitude() { 085 return minAltitudeMeters; 086 } 087 088 public void setMinAltitude(double minAltitudeMeters) { 089 this.minAltitudeMeters = minAltitudeMeters; 090 shapeChanged(); 091 } 092 093 public double getMaxAltitude() { 094 return maxAltitudeMeters; 095 } 096 097 public void setMaxAltitude(double maxAltitudeMeters) { 098 this.maxAltitudeMeters = maxAltitudeMeters; 099 shapeChanged(); 100 } 101 102 public void setMaxDistance(double maxDistanceMeters) { 103 this.maxDistanceMeters = maxDistanceMeters; 104 shapeChanged(); 105 } 106 107 public void setFlatness(double flatnessDistanceMeters) { 108 this.flatnessDistanceMeters = flatnessDistanceMeters; 109 shapeChanged(); 110 } 111 112 public void setLimit(int limit) { 113 this.limit = limit; 114 shapeChanged(); 115 } 116 117 public AltitudeMode getAltitudeMode() { 118 return altitudeMode; 119 } 120 121 public void setAltitudeMode(AltitudeMode altitudeMode) { 122 this.altitudeMode = altitudeMode; 123 } 124}