package org.openstreetmap.josm.plugins.routes.paint; import java.awt.BasicStroke; import java.awt.Color; import java.awt.Graphics2D; import java.util.BitSet; import java.util.List; import org.openstreetmap.josm.data.osm.Node; import org.openstreetmap.josm.gui.MapView; import org.openstreetmap.josm.plugins.routes.ConvertedWay; import org.openstreetmap.josm.plugins.routes.RouteDefinition; import org.openstreetmap.josm.plugins.routes.RouteLayer; public class WideLinePainter extends AbstractLinePainter { private static final float LINE_WIDTH = 10; private final RouteLayer layer; public WideLinePainter(RouteLayer layer) { this.layer = layer; } public void drawWay(ConvertedWay way, MapView mapView, Graphics2D g) { List<Node> nodes = way.getNodes(); BitSet routes = way.getRoutes(); if (nodes.size() < 2) { return; } double totalWidth = LINE_WIDTH + (routes.size() - 1) * 4; double width = totalWidth / routes.cardinality(); double shift = -totalWidth / 2 + width / 2; for (int k=0; k<routes.length(); k++) { if (!routes.get(k)) { continue; } RouteDefinition route = layer.getRoutes().get(k); Color color = route.getColor(); g.setColor(new Color(color.getRed(), color.getGreen(), color.getBlue(), 100)); g.setStroke(new BasicStroke((float) width)); g.draw(getPath(g, mapView, nodes, shift)); shift += width; } } }