Ticket #13427: patch-fix-13427.patch

File patch-fix-13427.patch, 3.9 KB (added by michael2402, 10 years ago)
  • src/org/openstreetmap/josm/data/osm/visitor/paint/WireframeMapRenderer.java

    diff --git a/src/org/openstreetmap/josm/data/osm/visitor/paint/WireframeMapRenderer.java b/src/org/openstreetmap/josm/data/osm/visitor/paint/WireframeMapRenderer.java
    index 6971d87..214b38d 100644
    a b import org.openstreetmap.josm.data.osm.Way;  
    2828import org.openstreetmap.josm.data.osm.WaySegment;
    2929import org.openstreetmap.josm.data.osm.visitor.Visitor;
    3030import org.openstreetmap.josm.gui.MapViewState.MapViewPoint;
     31import org.openstreetmap.josm.gui.MapViewState.MapViewRectangle;
    3132import org.openstreetmap.josm.gui.NavigatableComponent;
    3233import org.openstreetmap.josm.gui.draw.MapPath2D;
    3334
    public class WireframeMapRenderer extends AbstractMapRenderer implements Visitor  
    9192    /** Helper variable for {@link #visit(Relation)} */
    9293    private final Stroke relatedWayStroke = new BasicStroke(
    9394            4, BasicStroke.CAP_SQUARE, BasicStroke.JOIN_BEVEL);
     95    private MapViewRectangle viewClip;
    9496
    9597    /**
    9698     * Creates an wireframe render
    public class WireframeMapRenderer extends AbstractMapRenderer implements Visitor  
    145147                        RenderingHints.VALUE_ANTIALIAS_ON : RenderingHints.VALUE_ANTIALIAS_OFF);
    146148    }
    147149
    148     /**
    149      * Renders the dataset for display.
    150      *
    151      * @param data <code>DataSet</code> to display
    152      * @param virtual <code>true</code> if virtual nodes are used
    153      * @param bounds display boundaries
    154      */
    155150    @Override
    156151    public void render(DataSet data, boolean virtual, Bounds bounds) {
    157152        BBox bbox = bounds.toBBox();
    158153        this.ds = data;
     154        Rectangle clip = g.getClipBounds();
     155        clip.grow(50, 50);
     156        viewClip = mapState.getViewArea(clip);
    159157        getSettings(virtual);
    160158
    161159        for (final Relation rel : data.searchRelations(bbox)) {
    public class WireframeMapRenderer extends AbstractMapRenderer implements Visitor  
    315313        Iterator<Node> it = w.getNodes().iterator();
    316314        if (it.hasNext()) {
    317315            MapViewPoint lastP = mapState.getPointFor(it.next());
     316            int lastPOutside = lastP.getOutsideRectangleFlags(viewClip);
    318317            for (int orderNumber = 1; it.hasNext(); orderNumber++) {
    319318                MapViewPoint p = mapState.getPointFor(it.next());
    320                 drawSegment(lastP, p, wayColor,
    321                         showOnlyHeadArrowOnly ? !it.hasNext() : showThisDirectionArrow);
    322                 if (showOrderNumber && !isInactiveMode) {
    323                     drawOrderNumber(lastP, p, orderNumber, g.getColor());
     319                int pOutside = p.getOutsideRectangleFlags(viewClip);
     320                if ((pOutside & lastPOutside) == 0) {
     321                    drawSegment(lastP, p, wayColor,
     322                            showOnlyHeadArrowOnly ? !it.hasNext() : showThisDirectionArrow);
     323                    if (showOrderNumber && !isInactiveMode) {
     324                        drawOrderNumber(lastP, p, orderNumber, g.getColor());
     325                    }
    324326                }
    325327                lastP = p;
     328                lastPOutside = pOutside;
    326329            }
    327330        }
    328331    }
    public class WireframeMapRenderer extends AbstractMapRenderer implements Visitor  
    413416     * @since 10827
    414417     */
    415418    protected void drawSegment(MapPath2D path, MapViewPoint mv1, MapViewPoint mv2, boolean showDirection) {
    416         Rectangle bounds = g.getClipBounds();
    417         bounds.grow(100, 100);                  // avoid arrow heads at the border
    418         if (mv1.rectTo(mv2).isInView()) {
    419             path.moveTo(mv1);
    420             path.lineTo(mv2);
    421             if (showDirection) {
    422                 ARROW_PAINT_HELPER.paintArrowAt(path, mv2, mv1);
    423             }
     419        path.moveTo(mv1);
     420        path.lineTo(mv2);
     421        if (showDirection) {
     422            ARROW_PAINT_HELPER.paintArrowAt(path, mv2, mv1);
    424423        }
    425424    }
    426425