Ticket #5552: deleteSpeed-2.diff
| File deleteSpeed-2.diff, 1.9 KB (added by , 15 years ago) |
|---|
-
src/org/openstreetmap/josm/data/osm/Way.java
5 5 6 6 import java.util.ArrayList; 7 7 import java.util.Arrays; 8 import java.util.Collection;9 8 import java.util.List; 9 import java.util.Set; 10 10 11 11 import org.openstreetmap.josm.Main; 12 12 import org.openstreetmap.josm.data.osm.visitor.Visitor; … … 293 293 } 294 294 } 295 295 296 public void removeNodes( Collection<? extends OsmPrimitive> selection) {296 public void removeNodes(Set<? extends OsmPrimitive> selection) { 297 297 if (isIncomplete()) return; 298 298 boolean locked = writeLock(); 299 299 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 ++; 303 306 } 304 307 } 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 } 305 328 } finally { 306 329 writeUnlock(locked); 307 330 }
