Ticket #10638: 10638-v3.patch

File 10638-v3.patch, 5.1 KB (added by GerdP, 10 years ago)

based on r11228, no further changes

  • 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.List;
    78
     9import org.openstreetmap.josm.Main;
     10import org.openstreetmap.josm.data.osm.DataSet;
    811import org.openstreetmap.josm.data.osm.Node;
    912import org.openstreetmap.josm.data.osm.OsmPrimitive;
    1013import org.openstreetmap.josm.data.osm.Relation;
     
    1316import org.openstreetmap.josm.data.validation.Test;
    1417import org.openstreetmap.josm.data.validation.TestError;
    1518import org.openstreetmap.josm.gui.mappaint.ElemStyles;
     19import org.openstreetmap.josm.gui.progress.ProgressMonitor;
    1620
    1721/**
    1822 * Checks for ways connected to areas.
     
    1923 * @since 4682
    2024 */
    2125public class WayConnectedToArea extends Test {
     26    private Area dsArea;
    2227
    2328    /**
    2429     * Constructs a new {@code WayConnectedToArea} test.
     
    2833    }
    2934
    3035    @Override
     36    public void startTest(ProgressMonitor monitor) {
     37        super.startTest(monitor);
     38        DataSet dataSet = Main.getLayerManager().getEditDataSet();
     39        dsArea = dataSet == null ? null : dataSet.getDataSourceArea();
     40    }
     41
     42    @Override
    3143    public void visit(Way w) {
    3244        if (!w.isUsable() || w.isClosed() || !w.hasKey("highway")) {
    3345            return;
     
    6274    }
    6375
    6476    private void testForError(Way w, Node wayNode, OsmPrimitive p) {
    65         if (wayNode.isOutsideDownloadArea()) {
     77        // wayNode.isOutsideDownloadArea()
     78        if (!wayNode.isNewOrUndeleted() && dsArea != null
     79                && wayNode.isLatLonKnown() && !wayNode.getCoor().isIn(dsArea)) {
    6680            return;
    6781        } else if (wayNode.getReferrers().stream().anyMatch(p1 -> p1.hasTag("route", "ferry"))) {
    6882            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;
     
    401402            // on some platforms viewport bounds seem to be offset from the left,
    402403            // over-grow it just to be sure
    403404            b.grow(100, 100);
    404             Area a = new Area(b);
     405            Path2D p = new Path2D.Double();
    405406
    406             // now successively subtract downloaded areas
     407            // combine successively downloaded areas
    407408            for (Bounds bounds : data.getDataSourceBounds()) {
    408409                if (bounds.isCollapsed()) {
    409410                    continue;
    410411                }
    411                 a.subtract(mv.getState().getArea(bounds));
     412                p.append(mv.getState().getArea(bounds), false);
    412413            }
     414            // subtract combined areas
     415            Area a = new Area(b);
     416            a.subtract(new Area(p));
    413417
    414418            // paint remainder
    415419            MapViewPoint anchor = mv.getState().getPointFor(new EastNorth(0, 0));