Changeset 8990 in josm


Ignore:
Timestamp:
2015-11-04T19:44:01+01:00 (4 years ago)
Author:
simon04
Message:

fix #12052 - Splitting a self intersecting way does not highlight the right segments

Location:
trunk
Files:
1 added
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/org/openstreetmap/josm/actions/SplitWayAction.java

    r8988 r8990  
    4848import org.openstreetmap.josm.tools.GBC;
    4949import org.openstreetmap.josm.tools.Shortcut;
    50 import org.openstreetmap.josm.tools.Utils;
    5150
    5251/**
     
    248247                public void valueChanged(ListSelectionEvent e) {
    249248                    final Way selected = list.getSelectedValue();
    250                     if (Main.isDisplayingMapView() && selected != null) {
    251                         final List<WaySegment> segments = Utils.transform(selected.getNodes().subList(0, selected.getNodesCount() - 1),
    252                                 new Utils.Function<Node, WaySegment>() {
    253                             @Override
    254                             public WaySegment apply(Node x) {
    255                                 return new WaySegment(selectedWay, selectedWay.getNodes().indexOf(x));
    256                             }
    257                         });
     249                    if (Main.isDisplayingMapView() && selected != null && selected.getNodesCount() > 1) {
     250                        final Collection<WaySegment> segments = new ArrayList<>(selected.getNodesCount() - 1);
     251                        final Iterator<Node> it = selected.getNodes().iterator();
     252                        Node previousNode = it.next();
     253                        while (it.hasNext()) {
     254                            final Node node = it.next();
     255                            segments.add(WaySegment.forNodePair(selectedWay, previousNode, node));
     256                            previousNode = node;
     257                        }
    258258                        setHighlightedWaySegments(segments);
    259259                    }
  • trunk/src/org/openstreetmap/josm/data/osm/WaySegment.java

    r8846 r8990  
    4444    public Node getSecondNode() {
    4545        return way.getNode(lowerIndex + 1);
     46    }
     47
     48    /**
     49     * Determines and returns the way segment for the given way and node pair.
     50     * @throws IllegalArgumentException if the node pair is not part of way
     51     */
     52    public static WaySegment forNodePair(Way way, Node first, Node second) {
     53        int endIndex = way.getNodesCount() - 1;
     54        while (endIndex > 0) {
     55            final int indexOfFirst = way.getNodes().subList(0, endIndex).lastIndexOf(first);
     56            if (second.equals(way.getNode(indexOfFirst + 1))) {
     57                return new WaySegment(way, indexOfFirst);
     58            }
     59            endIndex--;
     60        }
     61        throw new IllegalArgumentException("Node pair is not part of way!");
    4662    }
    4763
Note: See TracChangeset for help on using the changeset viewer.