Ticket #5552: deleteSpeed-2.diff

File deleteSpeed-2.diff, 1.9 KB (added by extropy, 15 years ago)

Fixed nodes counter

  • src/org/openstreetmap/josm/data/osm/Way.java

     
    55
    66import java.util.ArrayList;
    77import java.util.Arrays;
    8 import java.util.Collection;
    98import java.util.List;
     9import java.util.Set;
    1010
    1111import org.openstreetmap.josm.Main;
    1212import org.openstreetmap.josm.data.osm.visitor.Visitor;
     
    293293        }
    294294    }
    295295
    296     public void removeNodes(Collection<? extends OsmPrimitive> selection) {
     296    public void removeNodes(Set<? extends OsmPrimitive> selection) {
    297297        if (isIncomplete()) return;
    298298        boolean locked = writeLock();
    299299        try {
    300             for(OsmPrimitive p : selection) {
    301                 if (p instanceof Node) {
    302                     removeNode((Node)p);
     300
     301            //test if there is anything to remove
     302            int nodesToRemove = 0;
     303            for (Node n: nodes) {
     304                if (selection.contains(n)) {
     305                    nodesToRemove ++;
    303306                }
    304307            }
     308
     309            if (nodesToRemove > 0) {
     310
     311                boolean closed = (lastNode() == firstNode() && selection.contains(lastNode()));
     312                List<Node> copy = new ArrayList<Node>(this.getNodesCount() - nodesToRemove);
     313
     314                for (Node n: nodes) {
     315                    if (!selection.contains(n)) {
     316                        copy.add(n);
     317                    }
     318                }
     319
     320                int i = copy.size();
     321                if (closed && i > 2) {
     322                    copy.add(copy.get(0));
     323                } else if (i >= 2 && i <= 3 && copy.get(0) == copy.get(i-1)) {
     324                    copy.remove(i-1);
     325                }
     326                setNodes(copy);
     327            }
    305328        } finally {
    306329            writeUnlock(locked);
    307330        }