From 8200497675508d40d6b1007f8b93b8b0368e6278 Mon Sep 17 00:00:00 2001 From: Holt59 Date: Sun, 11 Mar 2018 22:51:34 +0100 Subject: [PATCH] Fix issue with path taking too long to be drawn due to useless syncrhonization. --- .../insa/graphics/drawing/components/MapViewDrawing.java | 4 +++- .../graphics/drawing/overlays/PolylineAutoScaling.java | 9 ++++++--- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/src/main/org/insa/graphics/drawing/components/MapViewDrawing.java b/src/main/org/insa/graphics/drawing/components/MapViewDrawing.java index aee6f31..82b2382 100644 --- a/src/main/org/insa/graphics/drawing/components/MapViewDrawing.java +++ b/src/main/org/insa/graphics/drawing/components/MapViewDrawing.java @@ -414,9 +414,11 @@ public class MapViewDrawing extends MapView implements Drawing { @Override public PathOverlay drawPath(Path path, Color color, boolean markers) { PolylineAutoScaling line = new PolylineAutoScaling(1, DEFAULT_PATH_COLOR); + ArrayList points = new ArrayList<>(path.getArcs().size() * 4); for (Arc arc: path.getArcs()) { - line.add(arc.getPoints()); + points.addAll(arc.getPoints()); } + line.addAll(points); PathOverlay overlay = null; if (markers) { MarkerAutoScaling origin = createMarker(path.getOrigin().getPoint(), diff --git a/src/main/org/insa/graphics/drawing/overlays/PolylineAutoScaling.java b/src/main/org/insa/graphics/drawing/overlays/PolylineAutoScaling.java index beb344e..cbcec47 100644 --- a/src/main/org/insa/graphics/drawing/overlays/PolylineAutoScaling.java +++ b/src/main/org/insa/graphics/drawing/overlays/PolylineAutoScaling.java @@ -1,7 +1,8 @@ package org.insa.graphics.drawing.overlays; import java.awt.Color; -import java.util.List; +import java.util.ArrayList; +import java.util.Collection; import org.insa.graph.Point; import org.mapsforge.core.graphics.Canvas; @@ -70,10 +71,12 @@ public class PolylineAutoScaling extends Polyline { /** * @param points Points to add to this line. */ - public void add(List points) { + public void addAll(Collection points) { + ArrayList latlongs = new ArrayList<>(points.size()); for (Point point: points) { - add(point); + latlongs.add(new LatLong(point.getLatitude(), point.getLongitude())); } + getLatLongs().addAll(latlongs); } @Override