001package sec.geo.shape; 002 003import sec.geo.ShapeObject; 004import java.util.ArrayList; 005import sec.geo.GeoPoint; 006import sec.geo.GeoPath; 007import sec.geo.kml.KmlOptions.AltitudeMode; 008 009public class Polygon /*extends APath*/ { //APath extends AExtrusion 010 011 private double minAltitudeMeters; 012 private double maxAltitudeMeters; 013 protected double maxDistanceMeters; 014 protected double flatnessDistanceMeters; 015 protected AltitudeMode altitudeMode; 016 protected int limit; 017 private ShapeObject shape; 018 //@Override 019 protected final ArrayList<GeoPoint> points; 020 021 public Polygon() { 022 points = new ArrayList<GeoPoint>(); 023 maxDistanceMeters = 100000; 024 flatnessDistanceMeters = 1; 025 limit = 4; 026 } 027 028 public void addPoint(GeoPoint point) { 029 points.add(point); 030 shapeChanged(); 031 } 032 033 public void addPoints(ArrayList<GeoPoint> points) { 034 this.points.addAll(points); 035 shapeChanged(); 036 } 037 038 protected ShapeObject createShape() { 039 GeoPath path = new GeoPath(maxDistanceMeters, flatnessDistanceMeters, limit); 040 int n=points.size(); 041 //for (int i = 0; i < points.size(); i++) 042 for (int i = 0; i < n; i++) 043 { 044 if (i > 0) { 045 path.lineTo(points.get(i)); 046 } else { 047 path.moveTo(points.get(i)); 048 } 049 } 050 path.closePath(); 051 return new ShapeObject(path); 052 } 053 054 protected void shapeChanged() { 055 shape = null; 056 } 057 058 public ShapeObject getShape() { 059 if (shape == null) { 060 shape = createShape(); 061 } 062 return shape; 063 } 064 065 //protected abstract Shape createShape(); 066 public double getMinAltitude() { 067 return minAltitudeMeters; 068 } 069 070 public void setMinAltitude(double minAltitudeMeters) { 071 this.minAltitudeMeters = minAltitudeMeters; 072 shapeChanged(); 073 } 074 075 public double getMaxAltitude() { 076 return maxAltitudeMeters; 077 } 078 079 public void setMaxAltitude(double maxAltitudeMeters) { 080 this.maxAltitudeMeters = maxAltitudeMeters; 081 shapeChanged(); 082 } 083 084 public void setMaxDistance(double maxDistanceMeters) { 085 this.maxDistanceMeters = maxDistanceMeters; 086 shapeChanged(); 087 } 088 089 public void setFlatness(double flatnessDistanceMeters) { 090 this.flatnessDistanceMeters = flatnessDistanceMeters; 091 shapeChanged(); 092 } 093 094 public void setLimit(int limit) { 095 this.limit = limit; 096 shapeChanged(); 097 } 098 099 public AltitudeMode getAltitudeMode() { 100 return altitudeMode; 101 } 102 103 public void setAltitudeMode(AltitudeMode altitudeMode) { 104 this.altitudeMode = altitudeMode; 105 } 106}