Changeset 33848 in osm for applications


Ignore:
Timestamp:
2017-11-21T01:35:52+01:00 (7 years ago)
Author:
donvip
Message:

update to JOSM 12840

Location:
applications/editors/josm/plugins/merge-overlap
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • applications/editors/josm/plugins/merge-overlap/build.xml

    r33436 r33848  
    44    <property name="commit.message" value="MergeOverlap: help shortcut parser, rebuild"/>
    55    <!-- enter the *lowest* JOSM version this plugin is currently compatible with -->
    6     <property name="plugin.main.version" value="12463"/>
     6    <property name="plugin.main.version" value="12840"/>
    77   
    88    <!-- Configure these properties (replace "..." accordingly).
  • applications/editors/josm/plugins/merge-overlap/src/mergeoverlap/MergeOverlapAction.java

    r33436 r33848  
    99import java.awt.event.KeyEvent;
    1010import java.util.ArrayList;
    11 import java.util.Arrays;
    1211import java.util.Collection;
    1312import java.util.Collections;
    1413import java.util.HashMap;
    1514import java.util.HashSet;
    16 import java.util.Iterator;
    1715import java.util.LinkedHashSet;
    1816import java.util.LinkedList;
     
    2119import java.util.Set;
    2220
    23 import javax.swing.JOptionPane;
    24 
    25 import mergeoverlap.hack.MyCombinePrimitiveResolverDialog;
    26 
    2721import org.openstreetmap.josm.Main;
    2822import org.openstreetmap.josm.actions.JosmAction;
    29 import org.openstreetmap.josm.actions.SplitWayAction;
    30 import org.openstreetmap.josm.actions.SplitWayAction.SplitWayResult;
    31 import org.openstreetmap.josm.command.AddCommand;
    3223import org.openstreetmap.josm.command.ChangeCommand;
    3324import org.openstreetmap.josm.command.Command;
    3425import org.openstreetmap.josm.command.DeleteCommand;
    3526import org.openstreetmap.josm.command.SequenceCommand;
     27import org.openstreetmap.josm.command.SplitWayCommand;
    3628import org.openstreetmap.josm.corrector.ReverseWayTagCorrector;
    3729import org.openstreetmap.josm.data.osm.Node;
     
    3931import org.openstreetmap.josm.data.osm.OsmPrimitive;
    4032import org.openstreetmap.josm.data.osm.Relation;
    41 import org.openstreetmap.josm.data.osm.RelationMember;
    4233import org.openstreetmap.josm.data.osm.TagCollection;
    4334import org.openstreetmap.josm.data.osm.Way;
    44 import org.openstreetmap.josm.gui.layer.OsmDataLayer;
     35import org.openstreetmap.josm.gui.MainApplication;
    4536import org.openstreetmap.josm.tools.Pair;
    4637import org.openstreetmap.josm.tools.Shortcut;
    4738import org.openstreetmap.josm.tools.UserCancelException;
     39
     40import mergeoverlap.hack.MyCombinePrimitiveResolverDialog;
    4841
    4942/**
     
    162155            }
    163156            if (!nodes.isEmpty() && !way.isClosed() || nodes.size() >= 2) {
    164                 List<List<Node>> wayChunks = SplitWayAction.buildSplitChunks(way, new ArrayList<>(nodes));
    165                 SplitWayResult result = splitWay(getLayerManager().getEditLayer(), way, wayChunks);
    166 
    167                 cmds.add(result.getCommand());
     157                List<List<Node>> wayChunks = SplitWayCommand.buildSplitChunks(way, new ArrayList<>(nodes));
     158                SplitWayCommand result = SplitWayCommand.splitWay(way, wayChunks, Collections.emptyList());
     159
     160                cmds.add(result);
    168161                sel.remove(way);
    169162                sel.add(result.getOriginalWay());
     
    238231        Main.main.undoRedo.add(new SequenceCommand(tr("Merge Overlap (combine)"), cmds));
    239232        getLayerManager().getEditDataSet().setSelected(sel);
    240         Main.map.repaint();
     233        MainApplication.getMap().repaint();
    241234
    242235        relations.clear();
     
    294287
    295288    /**
    296      * Splits a way
    297      *
    298      * @param layer
    299      * @param way
    300      * @param wayChunks
    301      * @return
    302      */
    303     private SplitWayResult splitWay(OsmDataLayer layer, Way way, List<List<Node>> wayChunks) {
    304         // build a list of commands, and also a new selection list
    305         Collection<Command> commandList = new ArrayList<>(wayChunks.size());
    306 
    307         Iterator<List<Node>> chunkIt = wayChunks.iterator();
    308         Collection<String> nowarnroles = Main.pref.getCollection("way.split.roles.nowarn",
    309                 Arrays.asList(new String[] { "outer", "inner", "forward", "backward" }));
    310 
    311         // First, change the original way
    312         Way changedWay = new Way(way);
    313         oldWays.put(changedWay, way);
    314         changedWay.setNodes(chunkIt.next());
    315         commandList.add(new ChangeCommand(way, changedWay));
    316 
    317         List<Way> newWays = new ArrayList<>();
    318         // Second, create new ways
    319         while (chunkIt.hasNext()) {
    320             Way wayToAdd = new Way();
    321             wayToAdd.setKeys(way.getKeys());
    322             newWays.add(wayToAdd);
    323             wayToAdd.setNodes(chunkIt.next());
    324             commandList.add(new AddCommand(layer, wayToAdd));
    325         }
    326         boolean warnmerole = false;
    327         boolean warnme = false;
    328         // now copy all relations to new way also
    329 
    330         for (Relation r : getParentRelations(way)) {
    331             if (!r.isUsable()) {
    332                 continue;
    333             }
    334             Relation c = null;
    335             String type = r.get("type");
    336             if (type == null) {
    337                 type = "";
    338             }
    339 
    340             int ic = 0, ir = 0;
    341             List<RelationMember> relationMembers = r.getMembers();
    342             for (RelationMember rm : relationMembers) {
    343                 if (rm.isWay() && rm.getMember() == way) {
    344                     boolean insert = true;
    345                     if ("restriction".equals(type)) {
    346                         /*
    347                          * this code assumes the restriction is correct. No real
    348                          * error checking done
    349                          */
    350                         String role = rm.getRole();
    351                         if ("from".equals(role) || "to".equals(role)) {
    352                             OsmPrimitive via = null;
    353                             for (RelationMember rmv : r.getMembers()) {
    354                                 if ("via".equals(rmv.getRole())) {
    355                                     via = rmv.getMember();
    356                                 }
    357                             }
    358                             List<Node> nodes = new ArrayList<>();
    359                             if (via != null) {
    360                                 if (via instanceof Node) {
    361                                     nodes.add((Node) via);
    362                                 } else if (via instanceof Way) {
    363                                     nodes.add(((Way) via).lastNode());
    364                                     nodes.add(((Way) via).firstNode());
    365                                 }
    366                             }
    367                             Way res = null;
    368                             for (Node n : nodes) {
    369                                 if (changedWay.isFirstLastNode(n)) {
    370                                     res = way;
    371                                 }
    372                             }
    373                             if (res == null) {
    374                                 for (Way wayToAdd : newWays) {
    375                                     for (Node n : nodes) {
    376                                         if (wayToAdd.isFirstLastNode(n)) {
    377                                             res = wayToAdd;
    378                                         }
    379                                     }
    380                                 }
    381                                 if (res != null) {
    382                                     if (c == null) {
    383                                         c = getNew(r);
    384                                     }
    385                                     c.addMember(new RelationMember(role, res));
    386                                     c.removeMembersFor(way);
    387                                     insert = false;
    388                                 }
    389                             } else {
    390                                 insert = false;
    391                             }
    392                         } else if (!"via".equals(role)) {
    393                             warnme = true;
    394                         }
    395                     } else if (!("route".equals(type)) && !("multipolygon".equals(type))) {
    396                         warnme = true;
    397                     }
    398                     if (c == null) {
    399                         c = getNew(r);
    400                     }
    401 
    402                     if (insert) {
    403                         if (rm.hasRole() && !nowarnroles.contains(rm.getRole())) {
    404                             warnmerole = true;
    405                         }
    406 
    407                         Boolean backwards = null;
    408                         int k = 1;
    409                         while (ir - k >= 0 || ir + k < relationMembers.size()) {
    410                             if ((ir - k >= 0) && relationMembers.get(ir - k).isWay()) {
    411                                 Way w = relationMembers.get(ir - k).getWay();
    412                                 if ((w.lastNode() == way.firstNode()) || w.firstNode() == way.firstNode()) {
    413                                     backwards = false;
    414                                 } else if ((w.firstNode() == way.lastNode()) || w.lastNode() == way.lastNode()) {
    415                                     backwards = true;
    416                                 }
    417                                 break;
    418                             }
    419                             if ((ir + k < relationMembers.size()) && relationMembers.get(ir + k).isWay()) {
    420                                 Way w = relationMembers.get(ir + k).getWay();
    421                                 if ((w.lastNode() == way.firstNode()) || w.firstNode() == way.firstNode()) {
    422                                     backwards = true;
    423                                 } else if ((w.firstNode() == way.lastNode()) || w.lastNode() == way.lastNode()) {
    424                                     backwards = false;
    425                                 }
    426                                 break;
    427                             }
    428                             k++;
    429                         }
    430 
    431                         int j = ic;
    432                         for (Way wayToAdd : newWays) {
    433                             RelationMember em = new RelationMember(rm.getRole(), wayToAdd);
    434                             j++;
    435                             if ((backwards != null) && backwards) {
    436                                 c.addMember(ic, em);
    437                             } else {
    438                                 c.addMember(j, em);
    439                             }
    440                         }
    441                         ic = j;
    442                     }
    443                 }
    444                 ic++;
    445                 ir++;
    446             }
    447 
    448             if (c != null) {
    449                 // commandList.add(new ChangeCommand(layer, r, c));
    450                 newRelations.put(r, c);
    451             }
    452         }
    453         if (warnmerole) {
    454             JOptionPane.showMessageDialog(Main.parent,
    455                 tr("<html>A role based relation membership was copied to all new ways.<br>You should verify this and correct it when necessary.</html>"),
    456                 tr("Warning"), JOptionPane.WARNING_MESSAGE);
    457         } else if (warnme) {
    458             JOptionPane.showMessageDialog(Main.parent,
    459                 tr("<html>A relation membership was copied to all new ways.<br>You should verify this and correct it when necessary.</html>"),
    460                 tr("Warning"), JOptionPane.WARNING_MESSAGE);
    461         }
    462 
    463         return new SplitWayResult(new SequenceCommand(tr("Split way"), commandList), null, changedWay, newWays);
    464     }
    465 
    466     /**
    467289     * @param ways
    468290     * @return null if ways cannot be combined. Otherwise returns the combined
     
    639461    }
    640462
    641     private Relation getNew(Relation r) {
    642         return getNew(r, newRelations);
    643     }
    644 
    645463    public static Relation getNew(Relation r, Map<Relation, Relation> newRelations) {
    646464        if (newRelations.containsValue(r)) {
  • applications/editors/josm/plugins/merge-overlap/src/mergeoverlap/MergeOverlapPlugin.java

    r30782 r33848  
    11package mergeoverlap;
    22
    3 import org.openstreetmap.josm.Main;
     3import org.openstreetmap.josm.gui.MainApplication;
    44import org.openstreetmap.josm.gui.MainMenu;
    55import org.openstreetmap.josm.plugins.Plugin;
     
    1717    public MergeOverlapPlugin(PluginInformation info) {
    1818        super(info);
    19         MainMenu.add(Main.main.menu.moreToolsMenu, new MergeOverlapAction());
     19        MainMenu.add(MainApplication.getMenu().moreToolsMenu, new MergeOverlapAction());
    2020    }
    2121}
Note: See TracChangeset for help on using the changeset viewer.