Ticket #10638: 10638-v2.patch

File 10638-v2.patch, 5.1 KB (added by GerdP, 10 years ago)
  • src/org/openstreetmap/josm/data/DataSource.java

     
    22package org.openstreetmap.josm.data;
    33
    44import java.awt.geom.Area;
     5import java.awt.geom.Path2D;
    56import java.util.ArrayList;
    67import java.util.Collection;
    78import java.util.List;
     
    7677        if (dataSources == null || dataSources.isEmpty()) {
    7778            return null;
    7879        }
    79         Area a = new Area();
     80        Path2D.Double p = new Path2D.Double();
    8081        for (DataSource source : dataSources) {
    8182            // create area from data bounds
    82             a.add(new Area(source.bounds.asRect()));
     83            p.append(source.bounds.asRect(), false);
    8384        }
    84         return a;
     85        return new Area(p);
    8586    }
    8687
    8788    /**
  • src/org/openstreetmap/josm/data/osm/Node.java

     
    409409
    410410    @Override
    411411    public boolean isOutsideDownloadArea() {
    412         return !isNewOrUndeleted() && getDataSet() != null && getDataSet().getDataSourceArea() != null
    413                 && getCoor() != null && !getCoor().isIn(getDataSet().getDataSourceArea());
     412        java.awt.geom.Area dsArea = getDataSet() == null ? null : getDataSet().getDataSourceArea();
     413        return !isNewOrUndeleted() && dsArea != null && isLatLonKnown() && !getCoor().isIn(dsArea);
    414414    }
    415415}
  • src/org/openstreetmap/josm/data/validation/tests/WayConnectedToArea.java

     
    33
    44import static org.openstreetmap.josm.tools.I18n.tr;
    55
     6import java.awt.geom.Area;
    67import java.util.Arrays;
    78import java.util.List;
    89
     10import org.openstreetmap.josm.Main;
     11import org.openstreetmap.josm.data.osm.DataSet;
    912import org.openstreetmap.josm.data.osm.Node;
    1013import org.openstreetmap.josm.data.osm.OsmPrimitive;
    1114import org.openstreetmap.josm.data.osm.Relation;
     
    1417import org.openstreetmap.josm.data.validation.Test;
    1518import org.openstreetmap.josm.data.validation.TestError;
    1619import org.openstreetmap.josm.gui.mappaint.ElemStyles;
     20import org.openstreetmap.josm.gui.progress.ProgressMonitor;
    1721
    1822/**
    1923 * Checks for ways connected to areas.
     
    2024 * @since 4682
    2125 */
    2226public class WayConnectedToArea extends Test {
     27    private Area dsArea;
    2328
    2429    /**
    2530     * Constructs a new {@code WayConnectedToArea} test.
     
    2934    }
    3035
    3136    @Override
     37    public void startTest(ProgressMonitor monitor) {
     38        super.startTest(monitor);
     39        DataSet dataSet = Main.getLayerManager().getEditDataSet();
     40        dsArea = dataSet == null ? null : dataSet.getDataSourceArea();
     41    }
     42
     43    @Override
    3244    public void visit(Way w) {
    3345        if (!w.isUsable() || w.isClosed() || !w.hasKey("highway")) {
    3446            return;
     
    6375    }
    6476
    6577    private void testForError(Way w, Node wayNode, OsmPrimitive p) {
    66         if (wayNode.isOutsideDownloadArea()) {
     78        // wayNode.isOutsideDownloadArea()
     79        if (!wayNode.isNewOrUndeleted() && dsArea != null
     80                && wayNode.isLatLonKnown() && !wayNode.getCoor().isIn(dsArea)) {
    6781            return;
    6882        } else if (wayNode.getReferrers().stream().anyMatch(p1 -> p1.hasTag("route", "ferry"))) {
    6983            return;
  • src/org/openstreetmap/josm/gui/layer/OsmDataLayer.java

     
    1616import java.awt.TexturePaint;
    1717import java.awt.event.ActionEvent;
    1818import java.awt.geom.Area;
     19import java.awt.geom.Path2D;
    1920import java.awt.geom.Rectangle2D;
    2021import java.awt.image.BufferedImage;
    2122import java.io.File;
     
    403404            // on some platforms viewport bounds seem to be offset from the left,
    404405            // over-grow it just to be sure
    405406            b.grow(100, 100);
    406             Area a = new Area(b);
     407            Path2D p = new Path2D.Double();
    407408
    408             // now successively subtract downloaded areas
     409            // combine successively downloaded areas
    409410            for (Bounds bounds : data.getDataSourceBounds()) {
    410411                if (bounds.isCollapsed()) {
    411412                    continue;
    412413                }
    413                 a.subtract(mv.getState().getArea(bounds));
     414                p.append(mv.getState().getArea(bounds), false);
    414415            }
     416            // subtract combined areas
     417            Area a = new Area(b);
     418            a.subtract(new Area(p));
    415419
    416420            // paint remainder
    417421            MapViewPoint anchor = mv.getState().getPointFor(new EastNorth(0, 0));