Changeset 3713 in josm for trunk/src/org/openstreetmap


Ignore:
Timestamp:
2010-12-11T17:59:16+01:00 (14 years ago)
Author:
jttt
Message:

Fix #5724 Merge node to the nearest one

Location:
trunk/src/org/openstreetmap/josm/actions
Files:
2 edited

Legend:

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

    r3643 r3713  
    22package org.openstreetmap.josm.actions;
    33
     4import static org.openstreetmap.josm.gui.help.HelpUtil.ht;
    45import static org.openstreetmap.josm.tools.I18n.tr;
    5 import static org.openstreetmap.josm.gui.help.HelpUtil.ht;
    66
    77import java.awt.event.ActionEvent;
     
    1212import java.util.HashMap;
    1313import java.util.HashSet;
    14 import java.util.Iterator;
    1514import java.util.LinkedList;
    1615import java.util.List;
     
    4342
    4443        for (OsmPrimitive osm : sel) {
    45             if (!(osm instanceof Node)) continue;
     44            if (!(osm instanceof Node)) {
     45                continue;
     46            }
    4647            Node node = (Node) osm;
    4748
     
    6667            for (Map.Entry<Way, List<Integer>> insertPoint : insertPoints.entrySet()) {
    6768                List<Integer> is = insertPoint.getValue();
    68                 if (is.size() == 0)
     69                if (is.size() == 0) {
    6970                    continue;
     71                }
    7072
    7173                Way w = insertPoint.getKey();
  • trunk/src/org/openstreetmap/josm/actions/MergeNodesAction.java

    r3596 r3713  
    1313import java.util.Collection;
    1414import java.util.HashSet;
    15 import java.util.LinkedHashSet;
    1615import java.util.LinkedList;
    1716import java.util.List;
     
    6261            return;
    6362        Collection<OsmPrimitive> selection = getCurrentDataSet().getSelected();
    64         LinkedHashSet<Node> selectedNodes = OsmPrimitive.getFilteredSet(selection, Node.class);
    65         if (selectedNodes.size() < 2) {
    66             JOptionPane.showMessageDialog(
    67                     Main.parent,
    68                     tr("Please select at least two nodes to merge."),
    69                     tr("Warning"),
    70                     JOptionPane.WARNING_MESSAGE
    71             );
    72             return;
     63        List<Node> selectedNodes = OsmPrimitive.getFilteredList(selection, Node.class);
     64
     65        if (selectedNodes.size() == 1) {
     66            List<Node> nearestNodes = Main.map.mapView.getNearestNodes(Main.map.mapView.getPoint(selectedNodes.get(0)), selectedNodes, OsmPrimitive.isUsablePredicate);
     67            if (nearestNodes.isEmpty()) {
     68                JOptionPane.showMessageDialog(
     69                        Main.parent,
     70                        tr("Please select at least two nodes to merge or node that is close to another node."),
     71                        tr("Warning"),
     72                        JOptionPane.WARNING_MESSAGE
     73                );
     74
     75                return;
     76            }
     77            selectedNodes.addAll(nearestNodes);
    7378        }
    7479
     
    8893     * @return the coordinates of this node are later used for the target node
    8994     */
    90     public static Node selectTargetLocationNode(LinkedHashSet<Node> candidates) {
     95    public static Node selectTargetLocationNode(List<Node> candidates) {
    9196        if (! Main.pref.getBoolean("merge-nodes.average-location", false)) {
    9297            Node targetNode = null;
     
    112117     * @return the selected target node
    113118     */
    114     public static Node selectTargetNode(LinkedHashSet<Node> candidates) {
     119    public static Node selectTargetNode(List<Node> candidates) {
    115120        Node targetNode = null;
    116121        Node lastNode = null;
     
    298303        }
    299304        boolean ok = true;
    300         if (selection.size() < 2) {
    301             setEnabled(false);
    302             return;
    303         }
    304305        for (OsmPrimitive osm : selection) {
    305306            if (!(osm instanceof Node)) {
Note: See TracChangeset for help on using the changeset viewer.