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}