Changeset 1857 in josm for trunk/src/org/openstreetmap/josm/gui/dialogs/relation/MemberTableModel.java
- Timestamp:
- 2009-07-26T22:52:23+02:00 (16 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/org/openstreetmap/josm/gui/dialogs/relation/MemberTableModel.java
r1845 r1857 440 440 } 441 441 442 /** 443 * get a node we can link against when sorting members 444 * @param element the element we want to link against 445 * @param linked_element already linked against element 446 * @return the unlinked node if element is a way, the node itself if element is a node, null otherwise 447 */ 448 private static Node getUnusedNode(RelationMember element, RelationMember linked_element) 449 { 450 Node result = null; 451 452 if (element.member instanceof Way) { 453 Way w = (Way) element.member; 454 if (linked_element.member instanceof Way) { 455 Way x = (Way) linked_element.member; 456 if ((w.firstNode() == x.firstNode()) || (w.firstNode() == x.lastNode())) { 457 result = w.lastNode(); 458 } else { 459 result = w.firstNode(); 460 } 461 } else if (linked_element.member instanceof Node) { 462 Node m = (Node) linked_element.member; 463 if (w.firstNode() == m) { 464 result = w.lastNode(); 465 } else { 466 result = w.firstNode(); 467 } 468 } 469 } else if (element.member instanceof Node) { 470 Node n = (Node) element.member; 471 result = n; 472 } 473 474 return result; 475 } 476 442 477 void sort() { 443 478 RelationNodeMap map = new RelationNodeMap(members); … … 450 485 /* 451 486 * sort any 2 or more connected elements together may be slow with many unconnected members 452 * TODO: cleanup again, too much code in 1 method453 487 */ 454 488 455 if (map.isEmpty()) 489 if (map.isEmpty()) { 456 490 // empty relation or incomplete members 457 491 return; 492 } 458 493 segments = new Vector<LinkedList<Integer>>(); 459 494 … … 482 517 endSearchNode = null; 483 518 if (segment.size() == 1) { 519 // only one element in segment, so try to link against each linkable node of element 484 520 RelationMember m = members.get(segment.getFirst()); 485 521 if (m.member instanceof Way) { 486 522 Way w = (Way) m.member; 487 523 endSearchNode = w.lastNode(); 488 startSearchNode = w.firstNode(); 524 if (w.lastNode() != w.firstNode()) 525 { 526 startSearchNode = w.firstNode(); 527 } 489 528 } else if (m.member instanceof Node) { 490 529 Node n = (Node) m.member; … … 493 532 } else { 494 533 // add unused node of first element and unused node of last element 495 // start with the first element 496 RelationMember element = members.get(segment.getFirst()); 497 RelationMember other_element = members.get(segment.get(1)); 498 499 if (element.member instanceof Way) { 500 Way w = (Way) element.member; 501 if (other_element.member instanceof Way) { 502 Way x = (Way) other_element.member; 503 if ((w.firstNode() == x.firstNode()) || (w.firstNode() == x.lastNode())) { 504 startSearchNode = w.lastNode(); 505 } else { 506 startSearchNode = w.firstNode(); 507 } 508 } else if (other_element.member instanceof Node) { 509 Node m = (Node) other_element.member; 510 if (w.firstNode() == m) { 511 startSearchNode = w.lastNode(); 512 } else { 513 startSearchNode = w.firstNode(); 514 } 515 } 516 } else if (element.member instanceof Node) { 517 Node n = (Node) element.member; 518 startSearchNode = n; 519 } 520 521 // now the same for the last element 522 element = members.get(segment.getLast()); 523 other_element = members.get(segment.get(segment.size() - 2)); 524 525 if (element.member instanceof Way) { 526 Way w = (Way) element.member; 527 if (other_element.member instanceof Way) { 528 Way x = (Way) other_element.member; 529 if ((w.firstNode() == x.firstNode()) || (w.firstNode() == x.lastNode())) { 530 endSearchNode = w.lastNode(); 531 } else { 532 endSearchNode = w.firstNode(); 533 } 534 } else if (other_element.member instanceof Node) { 535 Node m = (Node) other_element.member; 536 if (w.firstNode() == m) { 537 endSearchNode = w.lastNode(); 538 } else { 539 endSearchNode = w.firstNode(); 540 } 541 } 542 } else if (element.member instanceof Node) { 543 Node n = (Node) element.member; 544 endSearchNode = n; 545 } 534 // start with the first element (compared to next element) 535 startSearchNode = getUnusedNode(members.get(segment.getFirst()), members.get(segment.get(1))); 536 537 // now the same for the last element (compared to previous element) 538 endSearchNode = getUnusedNode(members.get(segment.getLast()), members.get(segment.get(segment.size() - 2))); 546 539 } 547 540 … … 566 559 567 560 } 561 568 562 if (segments.size() > 0) { 569 563 // append map.remaining() to segments list (as a single segment)
Note:
See TracChangeset
for help on using the changeset viewer.