Changeset 5080 in osm for applications


Ignore:
Timestamp:
2007-10-19T12:47:09+02:00 (17 years ago)
Author:
gabriel
Message:

utilsplugin: fix merge-nodes action

Location:
applications/editors/josm/plugins/utilsplugin
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • applications/editors/josm/plugins/utilsplugin/src/UtilsPlugin/MergeNodesAction.java

    r5076 r5080  
    44
    55import java.util.ArrayList;
     6import java.util.HashSet;
    67import java.util.LinkedList;
    78import java.util.Collection;
     
    3637        public void actionPerformed(ActionEvent e) {
    3738                Collection<OsmPrimitive> sel = Main.ds.getSelected();
    38                 Collection<Node> nodes = new ArrayList<Node>();
     39                HashSet<Node> nodes = new HashSet<Node>();
    3940
    4041                for (OsmPrimitive osm : sel)
     
    5960
    6061                Node newTarget = new Node(target);
    61                 cmds.add(new ChangeCommand(target, newTarget));
    6262
    6363                // Don't place the merged node on one of the former nodes.
     
    7171                        x / nodes.size(), y / nodes.size());
    7272
    73                 nodes.remove(target);
     73                cmds.add(new ChangeCommand(target, newTarget));
    7474
    75                 cmds.add(new DeleteCommand(nodes));
     75                HashSet<Node> delNodes = new HashSet<Node>(nodes);
     76                delNodes.remove(target);
     77                cmds.add(new DeleteCommand(delNodes));
    7678
    7779                for (Way w : Main.ds.ways) {
     
    8789                        if (!affected) continue;
    8890
    89                         // Replace the old nodes with the merged ones
     91                        // Replace the old nodes with the merged one
    9092                        Way wnew = new Way(w);
    9193                        for (int i = 0; i < wnew.nodes.size(); i++) {
    9294                                if (nodes.contains(wnew.nodes.get(i))) {
    93                                         wnew.nodes.set(i, newTarget);
     95                                        wnew.nodes.set(i, target);
    9496                                }
    9597                        }
     
    98100                        Node lastN = null;
    99101                        for (int i = wnew.nodes.size() - 1; i >= 0; i--) {
    100                                 if (lastN == wnew.nodes.get(i)) {
    101                                         wnew.nodes.remove(i);
    102                                         if (i < wnew.nodes.size()) i++;
    103                                 }
     102                                Node n = wnew.nodes.get(i);
     103                                if (lastN == n) wnew.nodes.remove(i);
     104                                lastN = n;
    104105                        }
    105106
     
    111112                                        JOptionPane.showMessageDialog(Main.parent,
    112113                                                tr("Cannot merge nodes: " +
    113                                                         "Would have to delete way that is still used."));
     114                                                        "Would have to delete a way that is still used."));
    114115                                        return;
    115116                                }
     
    122123
    123124                Main.main.undoRedo.add(new SequenceCommand(tr("Merge Nodes"), cmds));
     125                Main.ds.setSelected(newTarget);
    124126                Main.map.repaint();
    125127        }
Note: See TracChangeset for help on using the changeset viewer.