Ignore:
Timestamp:
2011-10-14T09:18:45+02:00 (13 years ago)
Author:
zverik
Message:

Most of it works, except one small bug

Location:
applications/editors/josm/plugins/reltoolbox/src/relcontext
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • applications/editors/josm/plugins/reltoolbox/src/relcontext/RelContextDialog.java

    r26882 r26887  
    517517            addMenuItem("tags", tr("Move area tags from contour to relation"));
    518518            addMenuItem("alltags", tr("When moving tags, consider even non-repeating ones"));
    519             addMenuItem("allowsplit", tr("Allow splitting of ways in neighbouring multipolygons"));
     519            addMenuItem("allowsplit", tr("Always split ways of neighbouring multipolygons"));
    520520        }
    521521
  • applications/editors/josm/plugins/reltoolbox/src/relcontext/actions/CreateMultipolygonAction.java

    r26837 r26887  
    6464        Collection<Way> selectedWays = getCurrentDataSet().getSelectedWays();
    6565        if( !isBoundary && getPref("tags") ) {
    66             List<Command> commands = new ArrayList<Command>();
    6766            List<Relation> rels = null;
    68             if( getPref("allowsplit")) {
     67            if( getPref("allowsplit") || selectedWays.size() == 1 ) {
    6968                if( SplittingMultipolygons.canProcess(selectedWays) )
    70                     rels = SplittingMultipolygons.process(getCurrentDataSet().getSelectedWays(), commands);
     69                    rels = SplittingMultipolygons.process(getCurrentDataSet().getSelectedWays());
    7170            } else {
    72                 if( TheRing.areAllOfThoseRings(selectedWays) )
     71                if( TheRing.areAllOfThoseRings(selectedWays) ) {
     72                    List<Command> commands = new ArrayList<Command>();
    7373                    rels = TheRing.makeManySimpleMultipolygons(getCurrentDataSet().getSelectedWays(), commands);
    74             }
    75             if( !commands.isEmpty() && rels != null && !rels.isEmpty() ) {
    76                 Main.main.undoRedo.add(new SequenceCommand(tr("Create multipolygons from rings"), commands));
     74                    if( !commands.isEmpty() )
     75                        Main.main.undoRedo.add(new SequenceCommand(tr("Create multipolygons from rings"), commands));
     76                }
     77            }
     78            if( rels != null && !rels.isEmpty() ) {
    7779                if( chRel != null )
    7880                    chRel.set(rels.size() == 1 ? rels.get(0) : null);
  • applications/editors/josm/plugins/reltoolbox/src/relcontext/actions/SplittingMultipolygons.java

    r26844 r26887  
    11package relcontext.actions;
    22
     3import java.awt.geom.Area;
    34import static org.openstreetmap.josm.tools.I18n.tr;
    45import java.util.*;
     
    2122        List<Way> rings = new ArrayList<Way>();
    2223        List<Way> arcs = new ArrayList<Way>();
     24        Area a = Main.main.getCurrentDataSet().getDataSourceArea();
    2325        for( Way way : ways ) {
     26            if( way.isDeleted() )
     27                return false;
     28            for( Node n : way.getNodes() ) {
     29                if( n == null )
     30                    System.out.println("Node is null");
     31                if( n.isIncomplete() || (a != null && !a.contains(n.getCoor())) )
     32                    return false;
     33            }
    2434            if( way.isClosed() )
    2535                rings.add(way);
     
    5464    }
    5565   
    56     public static List<Relation> process( Collection<Way> selectedWays, List<Command> commands ) {
     66    public static List<Relation> process( Collection<Way> selectedWays ) {
    5767        System.out.println("---------------------------------------");
    5868        List<Relation> result = new ArrayList<Relation>();
     
    6777
    6878        for( Way ring : rings ) {
     79            List<Command> commands = new ArrayList<Command>();
    6980            Relation newRelation = SplittingMultipolygons.attachRingToNeighbours(ring, commands);
    70             if( newRelation != null )
     81            if( newRelation != null && !commands.isEmpty() ) {
     82                Main.main.undoRedo.add(commands.get(0));
    7183                result.add(newRelation);
     84            }
    7285        }
    7386
    7487        for( Way arc : arcs) {
     88            List<Command> commands = new ArrayList<Command>();
    7589            Relation newRelation = SplittingMultipolygons.tryToCloseOneWay(arc, commands);
    76             if( newRelation != null )
     90            if( newRelation != null && !commands.isEmpty() ) {
     91                Main.main.undoRedo.add(commands.get(0));
    7792                result.add(newRelation);
     93            }
    7894        }
    7995        return result;
  • applications/editors/josm/plugins/reltoolbox/src/relcontext/actions/TheRing.java

    r26844 r26887  
    310310            }
    311311        }
     312        // todo: когда два кольца меняют одно и то же отношение, в список команд добавляется
     313        // изменение базового отношения на новое, а не предыдущего
     314        // поэтому сохраняется только первое изменение
    312315
    313316        List<Command> commands = new ArrayList<Command>();
Note: See TracChangeset for help on using the changeset viewer.