Changeset 8 in josm for src/org/openstreetmap/josm/actions/mapmode/DeleteAction.java
- Timestamp:
- 2005-10-03T04:18:02+02:00 (19 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
src/org/openstreetmap/josm/actions/mapmode/DeleteAction.java
r7 r8 5 5 import java.util.ArrayList; 6 6 import java.util.HashMap; 7 import java.util. Iterator;7 import java.util.LinkedList; 8 8 import java.util.Map; 9 9 … … 133 133 if (osm instanceof Node) { 134 134 // delete any track and line segment the node is in. 135 for (Track t : ds.tracks )136 for (LineSegment ls : t.segments )137 if (ls. start == osm || ls.end== osm)135 for (Track t : ds.tracks()) 136 for (LineSegment ls : t.segments()) 137 if (ls.getStart() == osm || ls.getEnd() == osm) 138 138 tracksToDelete.add(t); 139 for (LineSegment ls : ds.pendingLineSegments )140 if (ls. start == osm || ls.end== osm)139 for (LineSegment ls : ds.pendingLineSegments()) 140 if (ls.getStart() == osm || ls.getEnd() == osm) 141 141 lineSegmentsToDelete.add(ls); 142 142 … … 144 144 LineSegment lineSegment = (LineSegment)osm; 145 145 lineSegmentsToDelete.add(lineSegment); 146 for (Track t : ds.tracks )147 for (LineSegment ls : t.segments )146 for (Track t : ds.tracks()) 147 for (LineSegment ls : t.segments()) 148 148 if (lineSegment == ls) 149 149 tracksToDelete.add(t); … … 154 154 ArrayList<Node> checkUnreferencing = new ArrayList<Node>(); 155 155 for (Track t : tracksToDelete) { 156 for (LineSegment ls : t.segments ) {157 checkUnreferencing.add(ls. start);158 checkUnreferencing.add(ls. end);156 for (LineSegment ls : t.segments()) { 157 checkUnreferencing.add(ls.getStart()); 158 checkUnreferencing.add(ls.getEnd()); 159 159 } 160 160 } 161 161 for (LineSegment ls : lineSegmentsToDelete) { 162 checkUnreferencing.add(ls. start);163 checkUnreferencing.add(ls. end);162 checkUnreferencing.add(ls.getStart()); 163 checkUnreferencing.add(ls.getEnd()); 164 164 } 165 165 166 166 // delete tracks and areas 167 ds.tracks.removeAll(tracksToDelete); 168 ds.pendingLineSegments.removeAll(lineSegmentsToDelete); 167 for (Track t : tracksToDelete) 168 ds.removeTrack(t); 169 for (LineSegment ls : lineSegmentsToDelete) 170 ds.destroyPendingLineSegment(ls); 169 171 170 172 // removing all unreferenced nodes … … 198 200 ds.nodes.remove(n); 199 201 } else if (osm instanceof LineSegment) { 200 for (Iterator<Track> it = ds.tracks.iterator(); it.hasNext();) { 201 Track t = it.next(); 202 t.segments.remove(osm); 203 if (t.segments.isEmpty()) 204 it.remove(); 205 } 206 ds.pendingLineSegments.remove(osm); 202 LinkedList<Track> tracksToDelete = new LinkedList<Track>(); 203 for (Track t : ds.tracks()) { 204 t.remove((LineSegment)osm); 205 if (t.segments().isEmpty()) 206 tracksToDelete.add(t); 207 } 208 for (Track t : tracksToDelete) 209 ds.removeTrack(t); 210 ds.destroyPendingLineSegment((LineSegment)osm); 207 211 } else if (osm instanceof Track) { 208 ds.tracks.remove(osm); 209 ds.pendingLineSegments.addAll(((Track)osm).segments); 212 ds.removeTrack((Track)osm); 213 for (LineSegment ls : ((Track)osm).segments()) 214 ds.addPendingLineSegment(ls); 210 215 } 211 216 } … … 218 223 */ 219 224 private boolean isReferenced(Node n) { 220 for (Track t : ds.tracks )221 for (LineSegment ls : t.segments )222 if (ls. start == n || ls.end== n)225 for (Track t : ds.tracks()) 226 for (LineSegment ls : t.segments()) 227 if (ls.getStart() == n || ls.getEnd() == n) 223 228 return true; 224 for (LineSegment ls : ds.pendingLineSegments )225 if (ls. start == n || ls.end== n)229 for (LineSegment ls : ds.pendingLineSegments()) 230 if (ls.getStart() == n || ls.getEnd() == n) 226 231 return true; 227 232 // TODO areas … … 240 245 private String combine(Node n) { 241 246 // first, check for pending line segments 242 for (LineSegment ls : ds.pendingLineSegments )243 if (n == ls. start || n == ls.end)247 for (LineSegment ls : ds.pendingLineSegments()) 248 if (n == ls.getStart() || n == ls.getEnd()) 244 249 return "Node used by a line segment which is not part of any track. Remove this first."; 245 250 … … 253 258 HashMap<ArrayList<LineSegment>, Track> lineSegments = new HashMap<ArrayList<LineSegment>, Track>(); 254 259 255 for (Track t : ds.tracks ) {260 for (Track t : ds.tracks()) { 256 261 ArrayList<LineSegment> current = new ArrayList<LineSegment>(); 257 for (LineSegment ls : t.segments )258 if (ls. start == n || ls.end== n)262 for (LineSegment ls : t.segments()) 263 if (ls.getStart() == n || ls.getEnd() == n) 259 264 current.add(ls); 260 265 if (!current.isEmpty()) { … … 262 267 return "Node used by more than two line segments."; 263 268 if (current.size() == 1 && 264 (current.get(0) == t. segments.get(0) || current.get(0) == t.segments.get(t.segments.size()-1)))269 (current.get(0) == t.getStartingSegment() || current.get(0) == t.getEndingSegment())) 265 270 pendingLineSegmentsForTrack.add(current.get(0)); 266 else if (current.get(0). end != current.get(1).start&&267 current.get(1). end != current.get(0).start)271 else if (current.get(0).getEnd() != current.get(1).getStart() && 272 current.get(1).getEnd() != current.get(0).getStart()) 268 273 return "Node used by line segments that points together."; 269 274 else if (!current.get(0).keyPropertiesMergable(current.get(1))) … … 276 281 // try to combine tracks 277 282 ArrayList<Track> tracks = new ArrayList<Track>(); 278 for (Track t : ds.tracks )279 if ( !t.segments.isEmpty() && (t.segments.get(0).start == n || t.segments.get(t.segments.size()-1).end == n))283 for (Track t : ds.tracks()) 284 if (t.getStartingNode() == n || t.getEndingNode() == n) 280 285 tracks.add(t); 281 286 if (!tracks.isEmpty()) { … … 286 291 Track t1 = tracks.get(0); 287 292 Track t2 = tracks.get(1); 288 if (t1. segments.get(0).start != t2.segments.get(t2.segments.size()-1).end&&289 t2. segments.get(0).start != t1.segments.get(t1.segments.size()-1).end) {290 if (t1. segments.get(0).start == t2.segments.get(t2.segments.size()-1).start||291 t1. segments.get(0).end == t2.segments.get(t2.segments.size()-1).end)293 if (t1.getStartingNode() != t2.getEndingNode() && 294 t2.getStartingNode() != t1.getEndingNode()) { 295 if (t1.getStartingNode() == t2.getStartingNode() || 296 t1.getEndingNode() == t2.getEndingNode()) 292 297 return "Node used by tracks that point together."; 293 298 return "Node used by tracks that cannot be combined."; … … 301 306 LineSegment l1 = pendingLineSegmentsForTrack.get(0); 302 307 LineSegment l2 = pendingLineSegmentsForTrack.get(1); 303 if (l1. start == l2.start || l1.end == l2.end)308 if (l1.getStart() == l2.getStart() || l1.getEnd() == l2.getEnd()) 304 309 return "Node used by line segments that points together."; 305 if (l1. start == l2.end || l2.start == l1.end)310 if (l1.getStart() == l2.getEnd() || l2.getStart() == l1.getEnd()) 306 311 pendingLineSegmentsForTrack.clear(); // resolved. 307 312 } … … 316 321 LineSegment first = list.get(0); 317 322 LineSegment second = list.get(1); 318 if (first. start == second.end) {323 if (first.getStart() == second.getEnd()) { 319 324 first = second; 320 325 second = list.get(0); 321 326 } 322 first. end = second.end;327 first.setEnd(second.getEnd()); 323 328 first.keys = mergeKeys(first.keys, second.keys); 324 lineSegments.get(list). segments.remove(second);329 lineSegments.get(list).remove(second); 325 330 } 326 331 … … 329 334 Track first = tracks.get(0); 330 335 Track second = tracks.get(1); 331 if (first. segments.get(0).start == second.segments.get(second.segments.size()-1).end) {336 if (first.getStartingNode() == second.getEndingNode()) { 332 337 first = second; 333 338 second = tracks.get(0); 334 339 } 335 340 // concatenate the line segments. 336 LineSegment lastOfFirst = first. segments.get(first.segments.size()-1);337 LineSegment firstOfSecond = second. segments.get(0);338 lastOfFirst. end = firstOfSecond.end;341 LineSegment lastOfFirst = first.getEndingSegment(); 342 LineSegment firstOfSecond = second.getStartingSegment(); 343 lastOfFirst.setEnd(firstOfSecond.getEnd()); 339 344 lastOfFirst.keys = mergeKeys(lastOfFirst.keys, firstOfSecond.keys); 340 second. segments.remove(firstOfSecond);345 second.remove(firstOfSecond); 341 346 // move the remaining line segments to first track. 342 first. segments.addAll(second.segments);343 ds. tracks.remove(second);347 first.addAll(second.segments()); 348 ds.removeTrack(second); 344 349 } 345 350
Note:
See TracChangeset
for help on using the changeset viewer.