Ticket #21154: 21154.patch
File 21154.patch, 2.2 KB (added by , 3 years ago) |
---|
-
src/org/openstreetmap/josm/plugins/utilsplugin2/actions/SplitObjectAction.java
42 42 import org.openstreetmap.josm.data.osm.visitor.paint.relations.Multipolygon.PolyData.Intersection; 43 43 import org.openstreetmap.josm.data.validation.Severity; 44 44 import org.openstreetmap.josm.data.validation.TestError; 45 import org.openstreetmap.josm.data.validation.tests.CrossingWays; 45 46 import org.openstreetmap.josm.data.validation.tests.MultipolygonTest; 47 import org.openstreetmap.josm.data.validation.tests.SelfIntersectingWay; 46 48 import org.openstreetmap.josm.gui.Notification; 47 49 import org.openstreetmap.josm.spi.preferences.Config; 48 50 import org.openstreetmap.josm.tools.CheckParameterUtil; … … 257 259 } 258 260 SplitWayCommand result = SplitWayCommand.splitWay( 259 261 selectedWay, wayChunks, Collections.<OsmPrimitive>emptyList()); 260 UndoRedoHandler.getInstance().add(result); 262 result.executeCommand(); 263 List<Way> ways = result.getParticipatingPrimitives().stream().filter(Way.class::isInstance) 264 .map(Way.class::cast).collect(Collectors.toList()); 265 266 if (!validateGeometry(ways)) { 267 showWarningNotification( 268 tr("Splitting would cause invalid geometry.")); 269 result.undoCommand(); 270 return; 271 } 272 UndoRedoHandler.getInstance().add(result, false); 261 273 if (splitWay != null) 262 274 UndoRedoHandler.getInstance().add(new DeleteCommand(splitWay)); 263 275 getLayerManager().getEditDataSet().setSelected(result.getNewSelection()); … … 264 276 } 265 277 } 266 278 279 private static boolean validateGeometry(List<Way> ways) { 280 return ways.stream() 281 .noneMatch(w -> CrossingWays.isSelfCrossing(w) || SelfIntersectingWay.isSelfIntersecting(w)); 282 } 283 267 284 /** 268 285 * Splits a multipolygon into two separate multipolygons along a way using {@link #splitMultipolygonAtWay} 269 286 * if the resulting multipolygons are valid.