001package sec.geo.shape; 002 003import sec.geo.ShapeObject; 004import sec.geo.GeoPath; 005import sec.geo.GeoPoint; 006import java.util.ArrayList; 007import sec.geo.kml.KmlOptions.AltitudeMode; 008 009public class Line /*extends APath*/ { //APath extends AExtrusion 010 011 private double minAltitudeMeters; 012 private double maxAltitudeMeters; 013 private ShapeObject shape; 014 protected double maxDistanceMeters; 015 protected double flatnessDistanceMeters; 016 017 protected AltitudeMode altitudeMode; 018 protected int limit; 019 protected final ArrayList<GeoPoint> points; 020 021 public Line() { 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 if (i > 0) { 044 path.lineTo(points.get(i)); 045 } else { 046 path.moveTo(points.get(i)); 047 } 048 } 049 return new ShapeObject(path); 050 } 051 052 public ShapeObject getShape() { 053 if (shape == null) { 054 shape = createShape(); 055 } 056 return shape; 057 } 058 059 protected void shapeChanged() { 060 shape = null; 061 } 062 063 public double getMinAltitude() { 064 return minAltitudeMeters; 065 } 066 067 public void setMinAltitude(double minAltitudeMeters) { 068 this.minAltitudeMeters = minAltitudeMeters; 069 shapeChanged(); 070 } 071 072 public double getMaxAltitude() { 073 return maxAltitudeMeters; 074 } 075 076 public void setMaxAltitude(double maxAltitudeMeters) { 077 this.maxAltitudeMeters = maxAltitudeMeters; 078 shapeChanged(); 079 } 080 081 public void setMaxDistance(double maxDistanceMeters) { 082 this.maxDistanceMeters = maxDistanceMeters; 083 shapeChanged(); 084 } 085 086 public void setFlatness(double flatnessDistanceMeters) { 087 this.flatnessDistanceMeters = flatnessDistanceMeters; 088 shapeChanged(); 089 } 090 091 public void setLimit(int limit) { 092 this.limit = limit; 093 shapeChanged(); 094 } 095 096 public AltitudeMode getAltitudeMode() { 097 return altitudeMode; 098 } 099 100 public void setAltitudeMode(AltitudeMode altitudeMode) { 101 this.altitudeMode = altitudeMode; 102 } 103}