Ticket #18861: 18861.mini.patch

File 18861.mini.patch, 3.6 KB (added by GerdP, 4 years ago)
  • src/org/openstreetmap/josm/data/osm/visitor/paint/relations/Multipolygon.java

     
    598598            while (joined && left > 0) {
    599599                joined = false;
    600600                for (int i = 0; i < joinArray.length && left != 0; ++i) {
     601                    if (nodes != null && nodes.get(0) == nodes.get(nodes.size()-1)) {
     602                        // see 18861: Stop joining when a ring is closed
     603                        break;
     604                    }
    601605                    if (joinArray[i] != null) {
    602606                        Way c = joinArray[i];
    603607                        if (c.getNodesCount() == 0) {
     
    613617                            int cl = c.getNodesCount()-1;
    614618                            int nl;
    615619                            if (nodes == null) {
    616                                 nl = w.getNodesCount()-1;
    617                                 if (w.getNode(nl) == c.getNode(0)) {
    618                                     mode = 21;
    619                                 } else if (w.getNode(nl) == c.getNode(cl)) {
    620                                     mode = 22;
    621                                 } else if (w.getNode(0) == c.getNode(0)) {
    622                                     mode = 11;
    623                                 } else if (w.getNode(0) == c.getNode(cl)) {
    624                                     mode = 12;
    625                                 }
    626                             } else {
    627                                 nl = nodes.size()-1;
    628                                 if (nodes.get(nl) == c.getNode(0)) {
    629                                     mode = 21;
    630                                 } else if (nodes.get(0) == c.getNode(cl)) {
    631                                     mode = 12;
    632                                 } else if (nodes.get(0) == c.getNode(0)) {
    633                                     mode = 11;
    634                                 } else if (nodes.get(nl) == c.getNode(cl)) {
    635                                     mode = 22;
    636                                 }
     620                                nodes = new ArrayList<>(w.getNodes());
     621                                wayIds.add(w.getUniqueId());
    637622                            }
     623                            nl = nodes.size()-1;
     624                            if (nodes.get(nl) == c.getNode(0)) {
     625                                mode = 21;
     626                            } else if (nodes.get(0) == c.getNode(cl)) {
     627                                mode = 12;
     628                            } else if (nodes.get(0) == c.getNode(0)) {
     629                                mode = 11;
     630                            } else if (nodes.get(nl) == c.getNode(cl)) {
     631                                mode = 22;
     632                            }
    638633                            if (mode != 0) {
    639634                                joinArray[i] = null;
    640635                                joined = true;
     
    642637                                    selected = true;
    643638                                }
    644639                                --left;
    645                                 if (nodes == null) {
    646                                     nodes = new ArrayList<>(w.getNodes());
    647                                     wayIds.add(w.getUniqueId());
    648                                 }
    649640                                if (mode == 21) {
    650641                                    nodes.addAll(c.getNodes().subList(1, cl + 1));
    651642                                } else if (mode == 12) {