From: Keith Packard Date: Tue, 26 May 2015 03:10:37 +0000 (-0700) Subject: altoslib: Get new abstract mapping code compiling X-Git-Tag: 1.6.0.3~72 X-Git-Url: https://git.gag.com/?p=fw%2Faltos;a=commitdiff_plain;h=00aca369c4070901e0400f291d5f269b5fb8015c altoslib: Get new abstract mapping code compiling Not useful yet, but at least it compiles now? Signed-off-by: Keith Packard --- diff --git a/altoslib/AltosMap.java b/altoslib/AltosMap.java index b42f9f85..f8c3a36b 100644 --- a/altoslib/AltosMap.java +++ b/altoslib/AltosMap.java @@ -24,19 +24,19 @@ import java.util.concurrent.*; public class AltosMap implements AltosFlightDisplay, AltosMapTileListener, AltosMapStoreListener { - static final int px_size = 512; + public static final int px_size = 512; - static final int maptype_hybrid = 0; - static final int maptype_roadmap = 1; - static final int maptype_satellite = 2; - static final int maptype_terrain = 3; - static final int maptype_default = maptype_hybrid; + public static final int maptype_hybrid = 0; + public static final int maptype_roadmap = 1; + public static final int maptype_satellite = 2; + public static final int maptype_terrain = 3; + public static final int maptype_default = maptype_hybrid; - static final int default_zoom = 15; - static final int min_zoom = 3; - static final int max_zoom = 21; + public static final int default_zoom = 15; + public static final int min_zoom = 3; + public static final int max_zoom = 21; - static final String[] maptype_names = { + public static final String[] maptype_names = { "hybrid", "roadmap", "satellite", @@ -157,7 +157,7 @@ public class AltosMap implements AltosFlightDisplay, AltosMapTileListener, Altos } public void font_size_changed(int font_size) { - map_interface.line.font_size_changed(font_size); + map_interface.line().font_size_changed(font_size); for (AltosMapTile tile : tiles.values()) tile.font_size_changed(font_size); repaint(); @@ -211,7 +211,7 @@ public class AltosMap implements AltosFlightDisplay, AltosMapTileListener, Altos if (!gps.locked && gps.nsat < 4) return; - AltosMapRectangle damage = map_interface.path.add(gps.lat, gps.lon, state.state); + AltosMapRectangle damage = map_interface.path().add(gps.lat, gps.lon, state.state); switch (state.state) { case AltosLib.ao_flight_boost: @@ -279,8 +279,8 @@ public class AltosMap implements AltosFlightDisplay, AltosMapTileListener, Altos lower_right = new AltosPointInt(centre.x + load_radius * AltosMap.px_size, centre.y + load_radius * AltosMap.px_size); } else { - upper_left = floor(transform.screen_point(new AltosPointDouble(0.0, 0.0))); - lower_right = floor(transform.screen_point(new AltosPointDouble(width(), height()))); + upper_left = floor(transform.screen_point(new AltosPointInt(0, 0))); + lower_right = floor(transform.screen_point(new AltosPointInt(width(), height()))); } LinkedList to_remove = new LinkedList(); @@ -302,8 +302,8 @@ public class AltosMap implements AltosFlightDisplay, AltosMapTileListener, Altos if (!tiles.containsKey(point)) { AltosLatLon ul = transform.lat_lon(new AltosPointDouble(x, y)); AltosLatLon center = transform.lat_lon(new AltosPointDouble(x + AltosMap.px_size/2, y + AltosMap.px_size/2)); - AltosMapTile tile = new AltosMapTile(this, ul, center, zoom, maptype, - AltosMap.px_size); + AltosMapTile tile = map_interface.new_tile(this, ul, center, zoom, maptype, + AltosMap.px_size); tiles.put(point, tile); } } @@ -328,6 +328,22 @@ public class AltosMap implements AltosFlightDisplay, AltosMapTileListener, Altos return "Map"; } + public void paint() { + make_tiles(); + + for (AltosMapTile tile : tiles.values()) + tile.paint(transform); + + synchronized(marks) { + for (AltosMapMark mark : marks) + mark.paint(transform); + } + + map_interface.path().paint(transform); + + map_interface.line().paint(transform); + } + /* AltosMapTileListener methods */ public synchronized void notify_tile(AltosMapTile tile, int status) { for (AltosPointInt point : tiles.keySet()) { diff --git a/altoslib/AltosMapInterface.java b/altoslib/AltosMapInterface.java index ea5454de..c548744b 100644 --- a/altoslib/AltosMapInterface.java +++ b/altoslib/AltosMapInterface.java @@ -20,16 +20,18 @@ package org.altusmetrum.altoslib_6; import java.io.*; import java.net.*; -public abstract class AltosMapInterface { - - public AltosMapPath path; - public AltosMapLine line; +public interface AltosMapInterface { + public abstract AltosMapPath path(); + public abstract AltosMapLine line(); public abstract AltosImage load_image(File file) throws Exception; public abstract AltosMapMark new_mark(double lat, double lon, int state); + public abstract AltosMapTile new_tile(AltosMapTileListener listener, AltosLatLon upper_left, AltosLatLon center, int zoom, int maptype, int px_size); + public abstract int width(); + public abstract int height(); public abstract void repaint(); @@ -39,9 +41,4 @@ public abstract class AltosMapInterface { public abstract void repaint(double x, double y, double w, double h); public abstract void set_units(); - - public AltosMapInterface (AltosMapPath path, AltosMapLine line) { - this.path = path; - this.line = line; - } } diff --git a/altoslib/AltosMapLine.java b/altoslib/AltosMapLine.java index 83de47f9..77807b94 100644 --- a/altoslib/AltosMapLine.java +++ b/altoslib/AltosMapLine.java @@ -23,26 +23,28 @@ import java.util.*; import java.util.concurrent.*; public abstract class AltosMapLine implements AltosFontListener { - AltosLatLon start, end; + public AltosLatLon start, end; static public int stroke_width = 6; public abstract void font_size_changed(int font_size); - private AltosLatLon lat_lon(AltosPointDouble pt, AltosMapTransform t) { + public abstract void paint(AltosMapTransform t); + + private AltosLatLon lat_lon(AltosPointInt pt, AltosMapTransform t) { return t.screen_lat_lon(pt); } - public void dragged(AltosPointDouble pt, AltosMapTransform t) { + public void dragged(AltosPointInt pt, AltosMapTransform t) { end = lat_lon(pt, t); } - public void pressed(AltosPointDouble pt, AltosMapTransform t) { + public void pressed(AltosPointInt pt, AltosMapTransform t) { start = lat_lon(pt, t); end = null; } - private String line_dist() { + public String line_dist() { String format; AltosGreatCircle g = new AltosGreatCircle(start.lat, start.lon, end.lat, end.lon); @@ -78,6 +80,4 @@ public abstract class AltosMapLine implements AltosFontListener { } return String.format(format, distance); } - - public abstract void paint(AltosMapTransform t); } diff --git a/altoslib/AltosMapPath.java b/altoslib/AltosMapPath.java index 272a4316..e7224b57 100644 --- a/altoslib/AltosMapPath.java +++ b/altoslib/AltosMapPath.java @@ -22,34 +22,17 @@ import java.lang.Math; import java.util.*; import java.util.concurrent.*; -class PathPoint { - AltosLatLon lat_lon; - int state; - - public PathPoint(AltosLatLon lat_lon, int state) { - this.lat_lon = lat_lon; - this.state = state; - } - - public boolean equals(PathPoint other) { - if (other == null) - return false; - - return lat_lon.equals(other.lat_lon) && state == other.state; - } -} - public abstract class AltosMapPath { - LinkedList points = new LinkedList(); - PathPoint last_point = null; + public LinkedList points = new LinkedList(); + public AltosMapPathPoint last_point = null; static public int stroke_width = 6; public abstract void paint(AltosMapTransform t); public AltosMapRectangle add(double lat, double lon, int state) { - PathPoint point = new PathPoint(new AltosLatLon (lat, lon), state); + AltosMapPathPoint point = new AltosMapPathPoint(new AltosLatLon (lat, lon), state); AltosMapRectangle rect = null; if (!point.equals(last_point)) { @@ -62,6 +45,6 @@ public abstract class AltosMapPath { } public void clear () { - points = new LinkedList(); + points = new LinkedList(); } } diff --git a/altoslib/AltosMapPathPoint.java b/altoslib/AltosMapPathPoint.java new file mode 100644 index 00000000..757211af --- /dev/null +++ b/altoslib/AltosMapPathPoint.java @@ -0,0 +1,41 @@ +/* + * Copyright © 2015 Keith Packard + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License along + * with this program; if not, write to the Free Software Foundation, Inc., + * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. + */ + +package org.altusmetrum.altoslib_6; + +import java.io.*; +import java.lang.Math; +import java.util.*; +import java.util.concurrent.*; + +public class AltosMapPathPoint { + public AltosLatLon lat_lon; + public int state; + + public boolean equals(AltosMapPathPoint other) { + if (other == null) + return false; + + return lat_lon.equals(other.lat_lon) && state == other.state; + } + + public AltosMapPathPoint(AltosLatLon lat_lon, int state) { + this.lat_lon = lat_lon; + this.state = state; + } +} + diff --git a/altoslib/AltosMapTile.java b/altoslib/AltosMapTile.java index b5dee7a4..923b7c6b 100644 --- a/altoslib/AltosMapTile.java +++ b/altoslib/AltosMapTile.java @@ -20,7 +20,7 @@ package org.altusmetrum.altoslib_6; import java.io.*; import java.util.*; -public class AltosMapTile implements AltosFontListener { +public abstract class AltosMapTile implements AltosFontListener { AltosMapTileListener listener; AltosLatLon upper_left, center; int px_size; @@ -94,6 +94,8 @@ public class AltosMapTile implements AltosFontListener { store.remove_listener(listener); } + public abstract void paint(AltosMapTransform t); + public AltosMapTile(AltosMapTileListener listener, AltosLatLon upper_left, AltosLatLon center, int zoom, int maptype, int px_size) { this.listener = listener; this.upper_left = upper_left; diff --git a/altoslib/AltosMapTransform.java b/altoslib/AltosMapTransform.java index f5fc5ebe..384c1744 100644 --- a/altoslib/AltosMapTransform.java +++ b/altoslib/AltosMapTransform.java @@ -39,10 +39,18 @@ public class AltosMapTransform { return new AltosLatLon(lat,lon); } + public AltosPointDouble screen_point(AltosPointInt screen) { + return new AltosPointDouble(screen.x + offset_x, screen.y + offset_y); + } + public AltosPointDouble screen_point(AltosPointDouble screen) { return new AltosPointDouble(screen.x + offset_x, screen.y + offset_y); } + public AltosLatLon screen_lat_lon(AltosPointInt screen) { + return lat_lon(screen_point(screen)); + } + public AltosLatLon screen_lat_lon(AltosPointDouble screen) { return lat_lon(screen_point(screen)); } @@ -71,12 +79,12 @@ public class AltosMapTransform { (int) (point.y - offset_y + 0.5)); } -// public Rectangle screen(AltosMapRectangle map_rect) { -// AltosPoint2D ul = screen(map_rect.ul); -// AltosPoint2D lr = screen(map_rect.lr); -// -// return new Rectangle((int) ul.x, (int) ul.y, (int) (lr.x - ul.x), (int) (lr.y - ul.y)); -// } + public AltosRectangle screen(AltosMapRectangle map_rect) { + AltosPointDouble ul = screen(map_rect.ul); + AltosPointDouble lr = screen(map_rect.lr); + + return new AltosRectangle((int) ul.x, (int) ul.y, (int) (lr.x - ul.x), (int) (lr.y - ul.y)); + } public AltosPointDouble screen(AltosLatLon lat_lon) { return screen(point(lat_lon)); diff --git a/altoslib/AltosRectangle.java b/altoslib/AltosRectangle.java new file mode 100644 index 00000000..c55fd613 --- /dev/null +++ b/altoslib/AltosRectangle.java @@ -0,0 +1,29 @@ +/* + * Copyright © 2015 Keith Packard + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License along + * with this program; if not, write to the Free Software Foundation, Inc., + * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. + */ + +package org.altusmetrum.altoslib_6; + +public class AltosRectangle { + public int x, y, width, height; + + public AltosRectangle(int x, int y, int w, int h) { + this.x = x; + this.y = y; + this.width = w; + this.height = h; + } +} diff --git a/altoslib/Makefile.am b/altoslib/Makefile.am index 0ee7b935..481c974f 100644 --- a/altoslib/Makefile.am +++ b/altoslib/Makefile.am @@ -138,6 +138,7 @@ altoslib_JAVA = \ AltosMapLine.java \ AltosMapMark.java \ AltosMapPath.java \ + AltosMapPathPoint.java \ AltosMapRectangle.java \ AltosMapStore.java \ AltosMapStoreListener.java \ @@ -147,6 +148,7 @@ altoslib_JAVA = \ AltosMapZoomListener.java \ AltosPointDouble.java \ AltosPointInt.java \ + AltosRectangle.java \ AltosFlightDisplay.java \ AltosFontListener.java \ AltosVersion.java