소스 검색

Symbol layer edge color blue, when used in placement

dominik 8 년 전
부모
커밋
e7d68fa02b

+ 15 - 18
scopviz/src/main/java/de/tu_darmstadt/informatik/tk/scopviz/ui/mapView/EdgePainter.java

@@ -36,6 +36,11 @@ public class EdgePainter implements Painter<JXMapViewer> {
 	 */
 	private static final Color CLICKED = Color.RED;
 
+	/**
+	 * color in which edges are drawn when they are used in a placement
+	 */
+	private static final Color PLACEMENT = Color.BLUE;
+
 	/**
 	 * anti aliasing property
 	 */
@@ -106,29 +111,21 @@ public class EdgePainter implements Painter<JXMapViewer> {
 			Point2D startPoint = mapViewer.getTileFactory().geoToPixel(startPos, mapViewer.getZoom());
 			Point2D endPoint = mapViewer.getTileFactory().geoToPixel(endPos, mapViewer.getZoom());
 
-			// if edge has attribute selected
-			if (edge.hasAttribute("ui.map.selected")) {
-
+			if (edge.hasAttribute("ui.map.selected") && (boolean) edge.getAttribute("ui.map.selected")) {
 				// draw red line if edge is selected
-				if ((boolean) edge.getAttribute("ui.map.selected")) {
-					g.setColor(CLICKED);
-					g.drawLine((int) startPoint.getX(), (int) startPoint.getY(), (int) endPoint.getX(),
-							(int) endPoint.getY());
-
-					// draw black line if not selected
-				} else {
-					g.setColor(STANDARD);
-					g.drawLine((int) startPoint.getX(), (int) startPoint.getY(), (int) endPoint.getX(),
-							(int) endPoint.getY());
-				}
-
-				// edge hasnt got selected attribute
+				g.setColor(CLICKED);
+
+			} else if (edge.hasAttribute("usedInPlacement") && (boolean) edge.getAttribute("usedInPlacement")) {
+				// draw blue line when edge used in placement
+				g.setColor(PLACEMENT);
+
 			} else {
+				// draw black line if not selected
 				g.setColor(STANDARD);
-				g.drawLine((int) startPoint.getX(), (int) startPoint.getY(), (int) endPoint.getX(),
-						(int) endPoint.getY());
 			}
 
+			g.drawLine((int) startPoint.getX(), (int) startPoint.getY(), (int) endPoint.getX(), (int) endPoint.getY());
+
 			if (showWeights) {
 				drawWeights(edge, g, startPoint, endPoint);
 			}

+ 51 - 1
scopviz/src/main/java/de/tu_darmstadt/informatik/tk/scopviz/ui/mapView/WorldView.java

@@ -1,5 +1,7 @@
 package de.tu_darmstadt.informatik.tk.scopviz.ui.mapView;
 
+import java.awt.Rectangle;
+import java.awt.geom.Point2D;
 import java.io.IOException;
 import java.net.MalformedURLException;
 import java.net.URL;
@@ -13,11 +15,15 @@ import org.jxmapviewer.JXMapViewer;
 import org.jxmapviewer.OSMTileFactoryInfo;
 import org.jxmapviewer.painter.CompoundPainter;
 import org.jxmapviewer.painter.Painter;
+import org.jxmapviewer.viewer.GeoBounds;
 import org.jxmapviewer.viewer.GeoPosition;
 import org.jxmapviewer.viewer.TileFactoryInfo;
 import org.jxmapviewer.viewer.WaypointPainter;
+import org.jxmapviewer.viewer.util.GeoUtil;
 
+import de.tu_darmstadt.informatik.tk.scopviz.debug.Debug;
 import de.tu_darmstadt.informatik.tk.scopviz.ui.GUIController;
+import javafx.geometry.Rectangle2D;
 
 public class WorldView {
 
@@ -122,9 +128,11 @@ public class WorldView {
 
 		// Use 8 threads in parallel to load the tiles
 		tileFactory.setThreadPoolSize(8);
+		
+		showAllWaypoints(nodePositions);
 
 		// set Zoom and Center to show all node positions
-		internMapViewer.zoomToBestFit(nodePositions, 1);
+		//internMapViewer.zoomToBestFit(nodePositions, 1);
 
 		if (internMapViewer.getOverlayPainter() == null) {
 			internMapViewer.setOverlayPainter(painter);
@@ -154,5 +162,47 @@ public class WorldView {
 
 		}
 	}
+	
+	/**
+	 * centers map, so that all waypoints are shown
+	 * @param positions
+	 */
+	public static void showAllWaypoints(HashSet<GeoPosition> positions) {
+		
+		ArrayList<Point2D> points = new ArrayList<Point2D>(positions.size());
+		
+		internMapViewer.calculateZoomFrom(positions);
+		
+		positions.forEach((geoPos) -> points.add(internMapViewer.convertGeoPositionToPoint(geoPos)));
+		
+		double minX = Double.MAX_VALUE;
+		double maxX = Double.MIN_VALUE;
+		
+		double minY = Double.MAX_VALUE;
+		double maxY = Double.MIN_VALUE;
+		
+		for(Point2D p : points){
+			if(p.getX() < minX){
+				minX = p.getX();
+			}
+			if(p.getX() > maxX){
+				maxX = p.getX();
+			}
+			
+			if(p.getY() < minY){
+				minY = p.getY();
+			}
+			if(p.getY() > maxY){
+				maxY = p.getY();
+			}
+		}
+		
+		Rectangle2D rect = new Rectangle2D(minX, minY, maxX - minX, maxY - minY);
+		
+		Point2D center = new Point2D.Double(rect.getWidth() / 2, rect.getHeight() / 2);
+		
+		internMapViewer.setCenterPosition(internMapViewer.convertPointToGeoPosition(center));
+		
+	}
 
 }