Skip to content

Commit

Permalink
Faster, more visually pleasing rendering. Work towards better renderi…
Browse files Browse the repository at this point in the history
…ng of connections between ways.
  • Loading branch information
Leif committed Nov 30, 2020
1 parent 1c4a9dc commit 5620a86
Show file tree
Hide file tree
Showing 9 changed files with 390 additions and 292 deletions.
9 changes: 1 addition & 8 deletions src/org/openstreetmap/josm/plugins/lanes/Divider.java
Original file line number Diff line number Diff line change
@@ -1,9 +1,5 @@
package org.openstreetmap.josm.plugins.lanes;

import org.openstreetmap.josm.command.Command;
import org.openstreetmap.josm.command.SequenceCommand;
import org.openstreetmap.josm.data.UndoRedoHandler;
import org.openstreetmap.josm.data.osm.Way;
import org.openstreetmap.josm.gui.MapView;
import org.openstreetmap.josm.tools.ImageProvider;

Expand All @@ -13,15 +9,12 @@
import java.awt.*;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.io.IOException;
import java.util.List;

import static org.openstreetmap.josm.tools.I18n.tr;

public class Divider extends RoadPiece {
Utils.DividerType _type = null;

public Divider(int direction, int position, MapView mv, RoadSegmentRenderer parent) {
public Divider(int direction, int position, MapView mv, MarkedRoadRenderer parent) {
super(direction, position, mv, parent);
}

Expand Down
4 changes: 2 additions & 2 deletions src/org/openstreetmap/josm/plugins/lanes/Lane.java
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ public class Lane extends RoadPiece {

private String change = null;

public Lane(int direction, int position, MapView mv, RoadSegmentRenderer parent) {
public Lane(int direction, int position, MapView mv, MarkedRoadRenderer parent) {
super(direction, position, mv, parent);
}

Expand Down Expand Up @@ -216,7 +216,7 @@ private void renderTurnMarkings(Graphics2D g) {

int numDrawn = 0;
double distSoFar = 0;
Way lanePos = Utils.getParallel(_parent.getAlignment(), _offsetStart, _offsetEnd, false, _parent.startAngle, _parent.endAngle);
Way lanePos = Utils.getParallel(_parent.getAlignment(), _offsetStart, _offsetEnd, false, _parent.otherStartAngle, _parent.otherEndAngle);
for (int i = 0; i < lanePos.getNodesCount() - 1; i++) {
double distThisTime = lanePos.getNode(i).getCoor().greatCircleDistance(lanePos.getNode(i + 1).getCoor());
double angle = lanePos.getNode(i).getCoor().bearing(lanePos.getNode(i + 1).getCoor());
Expand Down
29 changes: 16 additions & 13 deletions src/org/openstreetmap/josm/plugins/lanes/LaneMappingMode.java
Original file line number Diff line number Diff line change
Expand Up @@ -33,16 +33,14 @@
import org.openstreetmap.josm.gui.layer.OsmDataLayer;
import org.openstreetmap.josm.tools.Shortcut;

import javax.swing.*;

public class LaneMappingMode extends MapMode implements MouseListener, MouseMotionListener,
MapViewPaintable, UndoRedoHandler.CommandQueuePreciseListener {

// private List<TagWithValues> tagsForRendering = null;
private List<RoadSegmentRenderer> roadSegments = null;
private List<MarkedRoadRenderer> roadSegments = null;
private MapView _mv;

public Map<Long, RoadSegmentRenderer> wayIdToRSR = new HashMap<>();
public Map<Long, MarkedRoadRenderer> wayIdToRSR = new HashMap<>();

public LaneMappingMode(MapFrame mapFrame) {
super(tr("Lane Editing"), "laneconnectivity.png", tr("Activate lane editing mode"),
Expand All @@ -68,7 +66,7 @@ public void paint(Graphics2D g, MapView mv, Bounds bbox) {


// Render each road
for (RoadSegmentRenderer r : roadSegments) {
for (MarkedRoadRenderer r : roadSegments) {
if (wayShouldBeRendered(bounds, r.getWay())) r.render(g);
}

Expand Down Expand Up @@ -149,14 +147,19 @@ private boolean wayShouldBeRendered(ProjectionBounds bounds, Way w) {
// return output;
// }

private List<RoadSegmentRenderer> getAllRoadSegments(List<Way> ways, MapView mv) {
private List<MarkedRoadRenderer> getAllRoadSegments(List<Way> ways, MapView mv) {
wayIdToRSR = new HashMap<>();
List<RoadSegmentRenderer> output = new ArrayList<>();
List<MarkedRoadRenderer> output = new ArrayList<>();
for (Way w : ways) {
RoadSegmentRenderer rsr = new RoadSegmentRenderer(w, mv, this);
wayIdToRSR.put(w.getId(), rsr);
output.add(rsr);
MarkedRoadRenderer mrr = new MarkedRoadRenderer(w, mv, this);
wayIdToRSR.put(w.getId(), mrr);
output.add(mrr);
}

for (MarkedRoadRenderer mrr : output) {
mrr.updateAlignment(); // updates alignment based on nearby ways.
}

return output;
}

Expand Down Expand Up @@ -244,10 +247,10 @@ public void mouseReleased(MouseEvent e) {}
public void mouseMoved(MouseEvent e) {}
// </editor-fold>

private RoadSegmentRenderer getShortestSegmentMouseEvent(MouseEvent e) {
RoadSegmentRenderer min = null;
private MarkedRoadRenderer getShortestSegmentMouseEvent(MouseEvent e) {
MarkedRoadRenderer min = null;
if (roadSegments == null) roadSegments = getAllRoadSegments(getWays(), _mv);
for (RoadSegmentRenderer r : roadSegments) {
for (MarkedRoadRenderer r : roadSegments) {
if (r.mouseEventIsInside(e) && (min == null || r.getWay().getLength() < min.getWay().getLength())) min = r;
}
return min;
Expand Down
Loading

0 comments on commit 5620a86

Please sign in to comment.