Changeset 35468 in osm


Ignore:
Timestamp:
2020-05-22T18:11:19+02:00 (4 years ago)
Author:
gerdp
Message:

fix #josm17258 Orthogonalisation problem using middle nodes selection

  • select nodes in order of way
Location:
applications/editors/josm/plugins/utilsplugin2/src/org/openstreetmap/josm/plugins/utilsplugin2/selection
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • applications/editors/josm/plugins/utilsplugin2/src/org/openstreetmap/josm/plugins/utilsplugin2/selection/MiddleNodesAction.java

    r34812 r35468  
    99import java.util.Collection;
    1010import java.util.HashSet;
     11import java.util.LinkedHashSet;
    1112import java.util.Set;
    1213
     
    4445        }
    4546
    46         Set<Node> newNodes = new HashSet<>();
    47         NodeWayUtils.addMiddle(selectedNodes, newNodes);
     47        Set<Node> newSelectedNodes = new LinkedHashSet<>();
     48        NodeWayUtils.addMiddle(selectedNodes, newSelectedNodes);
    4849
    49         // select only newly found nodes
    50         newNodes.removeAll(selectedNodes);
    51         getLayerManager().getEditDataSet().addSelected(newNodes);
     50        // make sure that selected nodes are in the wanted order (see #josm17258)
     51        getLayerManager().getEditDataSet().clearSelection(newSelectedNodes);
     52        getLayerManager().getEditDataSet().addSelected(newSelectedNodes);
    5253    }
    5354
  • applications/editors/josm/plugins/utilsplugin2/src/org/openstreetmap/josm/plugins/utilsplugin2/selection/NodeWayUtils.java

    r35334 r35468  
    271271                if (w.isClosed()) {
    272272                    if ((i2-i1)*2 <= n) { // i1 ... i2
    273                         for (int i = i1+1; i != i2; i++) {
     273                        for (int i = i1; i != i2; i++) {
    274274                            filteredAdd(newNodes, nodes.get(i));
    275275                        }
     276                        filteredAdd(newNodes, nodes.get(i2));
    276277                    } else { // i2 ... n-1 0 1 ... i1
    277                         for (int i = i2+1; i != i1; i = (i+1) % n) {
     278                        for (int i = i2; i != i1; i = (i+1) % n) {
    278279                            filteredAdd(newNodes, nodes.get(i));
    279280                        }
     281                        filteredAdd(newNodes, nodes.get(i1));
    280282                    }
    281283                } else {
    282                     for (int i = i1+1; i < i2; i++) {
     284                    for (int i = i1; i <= i2; i++) {
    283285                        filteredAdd(newNodes, nodes.get(i));
    284286                    }
     
    286288            }
    287289        }
    288         if (newNodes.isEmpty()) {
     290        if (newNodes.size() <= 2) {
    289291            new Notification(
    290292                    tr("Please select two nodes connected by way!")
  • applications/editors/josm/plugins/utilsplugin2/src/org/openstreetmap/josm/plugins/utilsplugin2/selection/SelectWayNodesAction.java

    r35173 r35468  
    88import java.awt.event.KeyEvent;
    99import java.util.Collection;
    10 import java.util.HashSet;
     10import java.util.LinkedHashSet;
    1111import java.util.Set;
    1212
     
    3939    @Override
    4040    public void actionPerformed(ActionEvent e) {
    41         Set<Node> selectedNodes = new HashSet<>();
     41        Set<Node> selectedNodes = new LinkedHashSet<>();
    4242
    4343        for (OsmPrimitive p : getLayerManager().getEditDataSet().getSelected()) {
Note: See TracChangeset for help on using the changeset viewer.