Ticket #8798: IgnoreSharedNodes2-BothDirections.patch

File IgnoreSharedNodes2-BothDirections.patch, 2.4 KB (added by AlfonZ, 11 years ago)

Should extrusion create overlapping segments or segments in straight line, which can't be simplified by moving the node because it's shared with another way, the node is removed from extruded way and replaced by new one. The behavior is controlled by advanced property extrude.ignore-shared-nodes (disabled by default).

  • src/org/openstreetmap/josm/actions/mapmode/ExtrudeAction.java

     
    7171    private Node selectedNode = null;
    7272    private Color mainColor;
    7373    private Stroke mainStroke;
     74    private boolean ignoreSharedNodes;
    7475   
    7576    /**
    7677     * drawing settings for helper lines
     
    212213       
    213214        oldLineStroke = GuiHelper.getCustomizedStroke(Main.pref.get("extrude.ctrl.stroke.old-line", "1"));
    214215        mainStroke = GuiHelper.getCustomizedStroke(Main.pref.get("extrude.stroke.main", "3"));
     216
     217        ignoreSharedNodes = Main.pref.getBoolean("extrude.ignore-shared-nodes", false);
    215218    }
    216219
    217220    @Override public void exitMode() {
     
    445448            //move existing node
    446449            Node n1Old = selectedSegment.getFirstNode();
    447450            cmds.add(new MoveCommand(n1Old, Main.getProjection().eastNorth2latlon(newN1en)));
     451        } else if (ignoreSharedNodes && nodeOverlapsSegment && !alwaysCreateNodes && hasOtherWays) {
     452            // replace shared node with new one
     453            Node n1Old = selectedSegment.getFirstNode();
     454            Node n1New = new Node(Main.getProjection().eastNorth2latlon(newN1en));
     455            wnew.addNode(insertionPoint, n1New);
     456            wnew.removeNode(n1Old);
     457            wayWasModified = true;
     458            cmds.add(new AddCommand(n1New));
    448459        } else {
    449460            //introduce new node
    450461            Node n1New = new Node(Main.getProjection().eastNorth2latlon(newN1en));
     
    463474            //move existing node
    464475            Node n2Old = selectedSegment.getSecondNode();
    465476            cmds.add(new MoveCommand(n2Old, Main.getProjection().eastNorth2latlon(newN2en)));
     477        } else if (ignoreSharedNodes && nodeOverlapsSegment && !alwaysCreateNodes && hasOtherWays) {
     478            // replace shared node with new one
     479            Node n2Old = selectedSegment.getSecondNode();
     480            Node n2New = new Node(Main.getProjection().eastNorth2latlon(newN2en));
     481            wnew.addNode(insertionPoint, n2New);
     482            wnew.removeNode(n2Old);
     483            wayWasModified = true;
     484            cmds.add(new AddCommand(n2New));
    466485        } else {
    467486            //introduce new node
    468487            Node n2New = new Node(Main.getProjection().eastNorth2latlon(newN2en));