Revision: 6603
http://sourceforge.net/p/jump-pilot/code/6603
Author: ma15569
Date: 2020-10-26 15:46:00 +0000 (Mon, 26 Oct 2020)
Log Message:
-----------
Add Add area and Remove area tools from Kosmo
Added Paths:
-----------
plug-ins/CADExtension/trunk/src/org/openjump/advancedtools/tools/AddAreaTool.java
plug-ins/CADExtension/trunk/src/org/openjump/advancedtools/tools/RemoveAreaTool.java
Added:
plug-ins/CADExtension/trunk/src/org/openjump/advancedtools/tools/AddAreaTool.java
===================================================================
---
plug-ins/CADExtension/trunk/src/org/openjump/advancedtools/tools/AddAreaTool.java
(rev 0)
+++
plug-ins/CADExtension/trunk/src/org/openjump/advancedtools/tools/AddAreaTool.java
2020-10-26 15:46:00 UTC (rev 6603)
@@ -0,0 +1,333 @@
+package org.openjump.advancedtools.tools;
+
+import java.awt.Cursor;
+import java.awt.Point;
+import java.awt.geom.NoninvertibleTransformException;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Iterator;
+import java.util.List;
+
+import javax.swing.Icon;
+
+import org.openjump.advancedtools.icon.IconLoader;
+import org.openjump.advancedtools.utils.EditUtils;
+
+import com.vividsolutions.jts.geom.Coordinate;
+import com.vividsolutions.jts.geom.Geometry;
+import com.vividsolutions.jts.geom.GeometryCollection;
+import com.vividsolutions.jts.geom.GeometryFactory;
+import com.vividsolutions.jts.geom.LineSegment;
+import com.vividsolutions.jts.geom.LineString;
+import com.vividsolutions.jts.geom.Polygon;
+import com.vividsolutions.jts.geom.TopologyException;
+import com.vividsolutions.jts.operation.valid.IsValidOp;
+import com.vividsolutions.jump.I18N;
+import com.vividsolutions.jump.feature.Feature;
+import com.vividsolutions.jump.workbench.WorkbenchContext;
+import com.vividsolutions.jump.workbench.model.Layer;
+import com.vividsolutions.jump.workbench.model.UndoableCommand;
+import com.vividsolutions.jump.workbench.plugin.EnableCheckFactory;
+import com.vividsolutions.jump.workbench.plugin.MultiEnableCheck;
+import com.vividsolutions.jump.workbench.ui.EditTransaction;
+import com.vividsolutions.jump.workbench.ui.GeometryEditor;
+import com.vividsolutions.jump.workbench.ui.SelectionManager;
+import com.vividsolutions.jump.workbench.ui.cursortool.CursorTool;
+import com.vividsolutions.jump.workbench.ui.cursortool.PolygonTool;
+import com.vividsolutions.jump.workbench.ui.plugin.PersistentBlackboardPlugIn;
+
+
+
+public class AddAreaTool
+extends PolygonTool
+{
+
+ /** Plugin name */
+ public final static String NAME = "Add Area";
+
+ public final static String DESCRIPTION = "Select only one feature of
polygonal type";
+
+
+
+ public static final Icon ICON = IconLoader.icon("AddAreaToPolygon.gif");
+ public static final Cursor CURSOR =
createCursor(IconLoader.icon("addAreaCursor.png").getImage(), new Point(0, 0));
+
+
+ public AddAreaTool() {
+ setCloseRing(true);
+ allowSnapping();
+ }
+
+ @Override
+ public String getName() {
+
+ String tooltip = "";
+ tooltip = "<HTML><BODY>";
+ tooltip += "<DIV style=\"width: 200px; text-justification:
justify;\">";
+ tooltip += "<b>" + NAME + "</b>" + "<br>";
+ tooltip += DESCRIPTION + "<br>";
+ tooltip += "</DIV></BODY></HTML>";
+ return tooltip;
+ }
+
+ @Override
+ public Icon getIcon() {
+ return ICON;
+ }
+
+ @Override
+ public Cursor getCursor() {
+ return CURSOR;
+ }
+
+
+ public static MultiEnableCheck createEnableCheck(WorkbenchContext
workbenchContext, CursorTool tool) {
+ MultiEnableCheck solucion = new MultiEnableCheck();
+ EnableCheckFactory checkFactory = new
EnableCheckFactory(workbenchContext);
+ solucion.add(checkFactory.createTaskWindowMustBeActiveCheck());
+
solucion.add(checkFactory.createOnlyOneLayerMayHaveSelectedFeaturesCheck());
+ int MAX_FEATURES_SELECTED = 1;
+
solucion.add(checkFactory.createExactlyNFeaturesMustBeSelectedCheck(MAX_FEATURES_SELECTED));
+
solucion.add(checkFactory.createWindowWithLayerManagerMustBeActiveCheck());
+
+ /* solucion.add(checkFactory
+ .createEditableLayerTypeGeometryCheck(new int[]
{ 5, 4, 15 }));
+
+
+ solucion.add(checkFactory
+
+ .createAtLeastNFeaturesMustBeSelectedCheck(new
int[] { 5, 4 }, new int[] { 10, 11, 9 }, 1));*/
+
solucion.add(checkFactory.createSelectedItemsLayersMustBeEditableCheck());
+
+ return solucion;
+ }
+ GeometryFactory geomFac = new GeometryFactory();
+
+ /* protected Polygon getPolygon() throws
NoninvertibleTransformException {
+ LinearRing ring =
geomFac.createLinearRing(toArray(this.coordinatesCorrected));
+ return geomFac.createPolygon(ring, null);
+ }*/
+
+
+ @SuppressWarnings("unchecked")
+ @Override
+ protected Polygon getPolygon() throws NoninvertibleTransformException {
+ ArrayList<Coordinate> closedPoints = new
ArrayList<Coordinate>(getCoordinates());
+
+ if
(!closedPoints.get(0).equals(closedPoints.get(closedPoints.size() - 1))) {
+ closedPoints.add(new Coordinate(closedPoints.get(0)));
+ }
+
+ return new GeometryFactory().createPolygon(
+ new
GeometryFactory().createLinearRing(toArray(closedPoints)),
+ null);
+ }
+
+
+ @Override
+ protected void gestureFinished() throws Exception {
+ reportNothingToUndoYet();
+
+ if (!checkPolygon()) {
+ getPanel().getContext().warnUser(
+
I18N.get("ui.EditTransaction.the-geometry-is-invalid-cancelled"));
+
+ return;
+ }
+ // boolean selectAdjacents =
EditOptionsPanel.isAdjacentEditionActivated();
+
+ Polygon polygon = getPolygon();
+
+ if (isRollingBackInvalidEdits() && !polygon.isValid()) {
+ getPanel()
+ .getContext()
+ .warnUser(
+ "Polygon with invalid geometry");
+ //
I18N.getString("org.saig.jump.tools.editing.AddAreaTool.polygon-with-invalid-geometry"));
+
+ return;
+ }
+ final Layer editableLayer =
getPanel().getLayerManager().getEditableLayers()
+ .iterator().next();
+
+ if (editableLayer == null) {
+ return;
+ }
+ final SelectionManager selectionManager =
getPanel().getSelectionManager();
+ final Collection<Feature> selectedFeatures = selectionManager
+ .getFeaturesWithSelectedItems(editableLayer);
+
+ if (selectedFeatures == null || selectedFeatures.isEmpty()) {
+ getPanel()
+ .getContext()
+ .warnUser(
+
+
I18N.get("com.vividsolutions.jump.workbench.plugin.At-least-one-layer-must-be-selected"));
+
+ return;
+ }
+ if (selectedFeatures.size()>1) {
+ getPanel()
+ .getContext()
+ .warnUser(
+
+
I18N.get("com.vividsolutions.jump.workbench.plugin.Exactly-one-item-must-be-selected"));
+
+ return;
+ }
+
+ Feature selectedFeature = selectedFeatures.iterator().next();
+ GeometryEditor editor = new GeometryEditor();
+ Geometry digitizedGeometry =
editor.removeRepeatedPoints(polygon);
+
+ Geometry geomSel = selectedFeature.getGeometry();
+ if ((geomSel instanceof LineString) || (geomSel instanceof
com.vividsolutions.jts.geom.Point) )
+ {
+ getPanel()
+ .getContext()
+ .warnUser(
+ "Selected feature must be a Polygon");
+ //
I18N.get("com.vividsolutions.jump.workbench.plugin.Exactly-one-item-must-be-selected"));
+
+ return;
+ }
+ if (!digitizedGeometry.intersects(geomSel)) {
+ getPanel()
+ .getContext()
+ .warnUser(
+ "It does not intersect the selected
geometry");
+
//I18N.getString("org.saig.jump.tools.editing.AddAreaTool.it-does-not-intersect-with-the-selection"));
+ return;
+ }
+ if (geomSel.contains(digitizedGeometry)) {
+ getPanel()
+ .getContext()
+ .warnUser(
+ "Digitalized geometry is contained");
+
//I18N.getString("org.saig.jump.tools.editing.AddAreaTool.the-digitized-geometry-is-contained"));
+
+ return;
+ }
+
+ final List<Feature> featsToUpdate = new ArrayList<Feature>();
+ final List<Feature> featsSelectedToUpdate = new
ArrayList<Feature>();
+
+ Geometry modGeometry = null;
+
+
+ try {
+ Geometry[] geometrias =
EditUtils.getFragmentos(geomSel, digitizedGeometry);
+ GeometryCollection gc =
geomFac.createGeometryCollection(geometrias);
+ modGeometry = gc.buffer(0.0D);
+
+
+ // if (selectAdjacents) {
+ Collection colindantesCandidatos =
EditUtils.getColindantes(geomSel, editableLayer);
+ List<Feature> colindantes = new ArrayList();
+ Iterator<Feature> itCol =
colindantesCandidatos.iterator();
+ while (itCol.hasNext()) {
+ Feature featCol = itCol.next();
+ Geometry geomCol = featCol.getGeometry();
+ if (digitizedGeometry.intersects(geomCol)) {
+ colindantes.add(featCol);
+ }
+ }
+
+ Iterator<Feature> itColindantes =
colindantes.iterator();
+ while (itColindantes.hasNext()) {
+ Feature featCol = itColindantes.next();
+ Geometry geomCol = featCol.getGeometry();
+ Geometry geomColMod =
geomCol.difference(digitizedGeometry);
+ Geometry geomIntercc = geomCol.intersection(
+
((Polygon)digitizedGeometry).getExteriorRing());
+ Coordinate[] coordenadas =
geomIntercc.getCoordinates();
+ for (int i = 0; i < coordenadas.length; i++) {
+ if
(!EditUtils.contieneCoordenada(modGeometry, coordenadas[i])) {
+ LineSegment s =
EditUtils.segmentInRange(modGeometry, coordenadas[i]);
+ modGeometry = (new
GeometryEditor()).insertVertex(modGeometry, s.p0,
+ s.p1,
coordenadas[i]);
+ }
+ }
+
+ Feature featColClone = featCol.clone(true);
+ featColClone.setGeometry(geomColMod);
+ featsToUpdate.add(featColClone);
+ featsSelectedToUpdate.add(featCol);
+ //}
+ }
+ } catch (TopologyException ex) {
+ getPanel()
+ .getContext()
+ .warnUser(
+
I18N.get("ui.cursortool.editing.FeatureDrawingUtil.draw-feature-tool-topology-error"));
+
//I18N.getString("org.saig.jump.tools.editing.AddAreaTool.topology-error-repeat-the-operation"));
+
+ return;
+ }
+ Feature clonedFeature = selectedFeature.clone(true);
+ clonedFeature.setGeometry(modGeometry);
+ featsToUpdate.add(clonedFeature);
+ featsSelectedToUpdate.add(selectedFeature);
+
+ execute(new UndoableCommand(String.valueOf(getName()) + " - " +
+
I18N.getMessage("org.saig.jump.tools.editing.AddAreaTool.{0}-features-modified",
+ new Object[] {
Integer.valueOf(featsToUpdate.size()) })) {
+ @Override
+ public void execute() {
+ selectionManager.unselectItems(editableLayer);
+ if (!featsToUpdate.isEmpty()) {
+
editableLayer.getFeatureCollectionWrapper().removeAll(featsSelectedToUpdate);
+
editableLayer.getFeatureCollectionWrapper().addAll(featsToUpdate);
+
//editableLayer.getFeatureCollectionWrapper().updateAll(featsToUpdate);
+
editableLayer.getLayerManager().fireGeometryModified(featsToUpdate,
+ editableLayer,
featsSelectedToUpdate);
+ selectionManager.getFeatureSelection()
+ .selectItems(editableLayer,
featsToUpdate);
+ }
+ }
+
+
+ @Override
+ public void unexecute() {
+ selectionManager.unselectItems(editableLayer);
+ if (!featsToUpdate.isEmpty()) {
+
editableLayer.getFeatureCollectionWrapper().removeAll(featsToUpdate);
+
editableLayer.getFeatureCollectionWrapper().addAll(featsSelectedToUpdate);
+ //
editableLayer.getFeatureCollectionWrapper().updateAll(featsSelectedToUpdate);
+
editableLayer.getLayerManager().fireGeometryModified(featsSelectedToUpdate,
+ editableLayer,
featsToUpdate);
+ }
+
selectionManager.getFeatureSelection().selectItems(editableLayer,
+ selectedFeatures);
+ }
+ });
+ }
+
+ @Override
+ protected boolean checkPolygon() throws NoninvertibleTransformException
{
+ if (getCoordinates().size() < 3) {
+ getPanel()
+ .getContext()
+ .warnUser(
+
I18N.get("ui.cursortool.PolygonTool.the-polygon-must-have-at-least-3-points"));
+
+ return false;
+ }
+
+ IsValidOp isValidOp = new IsValidOp(getPolygon());
+
+ if (!isValidOp.isValid()) {
+ getPanel().getContext().warnUser(
+
isValidOp.getValidationError().getMessage());
+
+ if
(PersistentBlackboardPlugIn.get(getWorkbench().getContext())
+
.get(EditTransaction.ROLLING_BACK_INVALID_EDITS_KEY, false)) {
+ return false;
+ }
+ }
+
+ return true;
+ }
+}
+
+
Property changes on:
plug-ins/CADExtension/trunk/src/org/openjump/advancedtools/tools/AddAreaTool.java
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+text/plain
\ No newline at end of property
Added:
plug-ins/CADExtension/trunk/src/org/openjump/advancedtools/tools/RemoveAreaTool.java
===================================================================
---
plug-ins/CADExtension/trunk/src/org/openjump/advancedtools/tools/RemoveAreaTool.java
(rev 0)
+++
plug-ins/CADExtension/trunk/src/org/openjump/advancedtools/tools/RemoveAreaTool.java
2020-10-26 15:46:00 UTC (rev 6603)
@@ -0,0 +1,339 @@
+package org.openjump.advancedtools.tools;
+
+import java.awt.Cursor;
+import java.awt.Point;
+import java.awt.geom.NoninvertibleTransformException;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Iterator;
+import java.util.List;
+
+import javax.swing.Icon;
+
+import org.openjump.advancedtools.icon.IconLoader;
+import org.openjump.advancedtools.utils.EditUtils;
+
+import com.vividsolutions.jts.geom.Coordinate;
+import com.vividsolutions.jts.geom.Geometry;
+import com.vividsolutions.jts.geom.GeometryCollection;
+import com.vividsolutions.jts.geom.GeometryFactory;
+import com.vividsolutions.jts.geom.LineString;
+import com.vividsolutions.jts.geom.Polygon;
+import com.vividsolutions.jts.geom.TopologyException;
+import com.vividsolutions.jts.operation.valid.IsValidOp;
+import com.vividsolutions.jts.precision.EnhancedPrecisionOp;
+import com.vividsolutions.jump.I18N;
+import com.vividsolutions.jump.feature.Feature;
+import com.vividsolutions.jump.workbench.WorkbenchContext;
+import com.vividsolutions.jump.workbench.model.Layer;
+import com.vividsolutions.jump.workbench.model.UndoableCommand;
+import com.vividsolutions.jump.workbench.plugin.EnableCheckFactory;
+import com.vividsolutions.jump.workbench.plugin.MultiEnableCheck;
+import com.vividsolutions.jump.workbench.ui.EditTransaction;
+import com.vividsolutions.jump.workbench.ui.GeometryEditor;
+import com.vividsolutions.jump.workbench.ui.SelectionManager;
+import com.vividsolutions.jump.workbench.ui.cursortool.CursorTool;
+import com.vividsolutions.jump.workbench.ui.cursortool.PolygonTool;
+import com.vividsolutions.jump.workbench.ui.plugin.PersistentBlackboardPlugIn;
+
+
+
+
+public class RemoveAreaTool
+extends PolygonTool
+{
+ /** Plugin name */
+ public final static String NAME = "Remove Area";
+
+ public final static String DESCRIPTION = "Select only one feature of
polygonal type";
+
+
+
+ public static final Icon ICON =
IconLoader.icon("RemoveAreaToPolygon.gif");
+
+
+
+ public static final Cursor CURSOR =
createCursor(IconLoader.icon("removeAreaCursor.png").getImage(),
+ new Point(0, 0));
+
+
+
+ protected ArrayList coordinatesCorrected;
+
+
+
+ public RemoveAreaTool() {
+ allowSnapping();
+ setCloseRing(true);
+ }
+
+ @Override
+ public String getName() {
+
+ String tooltip = "";
+ tooltip = "<HTML><BODY>";
+ tooltip += "<DIV style=\"width: 200px; text-justification:
justify;\">";
+ tooltip += "<b>" + NAME + "</b>" + "<br>";
+ tooltip += DESCRIPTION + "<br>";
+ tooltip += "</DIV></BODY></HTML>";
+ return tooltip;
+ }
+
+ @Override
+ public Icon getIcon() {
+ return ICON;
+ }
+ @Override
+ public Cursor getCursor() {
+ return CURSOR;
+ }
+
+ public static MultiEnableCheck createEnableCheck(WorkbenchContext
workbenchContext, CursorTool tool) {
+ MultiEnableCheck solucion = new MultiEnableCheck();
+ EnableCheckFactory checkFactory = new
EnableCheckFactory(workbenchContext);
+ solucion.add(checkFactory.createTaskWindowMustBeActiveCheck());
+
solucion.add(checkFactory.createOnlyOneLayerMayHaveSelectedFeaturesCheck());
+ int MAX_FEATURES_SELECTED = 1;
+
solucion.add(checkFactory.createExactlyNFeaturesMustBeSelectedCheck(MAX_FEATURES_SELECTED));
+
solucion.add(checkFactory.createWindowWithLayerManagerMustBeActiveCheck());
+
+ /* solucion.add(checkFactory
+ .createEditableLayerTypeGeometryCheck(new int[] { 5, 4, 15 }));
+
+
+ solucion.add(checkFactory
+
+ .createAtLeastNFeaturesMustBeSelectedCheck(new int[] { 5, 4 }, new
int[] { 10, 11, 9 }, 1));
+ */
+
solucion.add(checkFactory.createSelectedItemsLayersMustBeEditableCheck());
+ return solucion;
+ }
+
+
+
+
+ @Override
+ protected Polygon getPolygon() throws NoninvertibleTransformException {
+ ArrayList closedPoints = new ArrayList(getCoordinates());
+
+ if
(!closedPoints.get(0).equals(closedPoints.get(closedPoints.size() - 1))) {
+ closedPoints.add(new Coordinate((Coordinate)
closedPoints.get(0)));
+ }
+
+ return new GeometryFactory().createPolygon(
+ new
GeometryFactory().createLinearRing(toArray(closedPoints)),
+ null);
+ }
+
+
+
+
+ @Override
+ protected void gestureFinished() throws Exception {
+ reportNothingToUndoYet();
+ if (!checkPolygon()) {
+ getPanel().getContext().warnUser(
+
I18N.get("ui.EditTransaction.the-geometry-is-invalid-cancelled"));
+
+ return;
+ }
+ // boolean selectAdjacents =
EditOptionsPanel.isAdjacentEditionActivated();
+
+ Polygon polygon = getPolygon();
+
+ if (isRollingBackInvalidEdits() && !polygon.isValid()) {
+ getPanel()
+ .getContext()
+ .warnUser(
+
+ "Polygon with invalid geometry");
+ //
I18N.getString("org.saig.jump.tools.editing.AddAreaTool.polygon-with-invalid-geometry"));
+
+ return;
+ }
+ WorkbenchContext context = getWorkbench().getContext();
+ Collection col =
context.getLayerViewPanel().getSelectionManager()
+ .getLayersWithSelectedItems();
+
+ final Layer editableLayer =
getPanel().getLayerManager().getEditableLayers()
+ .iterator().next();
+
+ if (editableLayer == null) {
+ return;
+ }
+ final SelectionManager selectionManager =
getPanel().getSelectionManager();
+ final Collection<Feature> selectedFeatures = selectionManager
+ .getFeaturesWithSelectedItems(editableLayer);
+
+ if (selectedFeatures == null || selectedFeatures.isEmpty()) {
+ getPanel()
+ .getContext()
+ .warnUser(
+
+
I18N.get("com.vividsolutions.jump.workbench.plugin.At-least-one-layer-must-be-selected"));
+
+ return;
+ }
+ if (selectedFeatures.size()>1) {
+ getPanel()
+ .getContext()
+ .warnUser(
+
+
I18N.get("com.vividsolutions.jump.workbench.plugin.Exactly-one-item-must-be-selected"));
+
+ return;
+ }
+ Feature selectedFeature = selectedFeatures.iterator().next();
+ GeometryEditor editor = new GeometryEditor();
+ Geometry digitizedGeometry =
editor.removeRepeatedPoints(polygon);
+
+ Geometry geomSel = selectedFeature.getGeometry();
+ if ((geomSel instanceof LineString) || (geomSel instanceof
com.vividsolutions.jts.geom.Point) )
+ {
+ getPanel()
+ .getContext()
+ .warnUser(
+ "Selected feature must be a Polygon");
+ //
I18N.get("com.vividsolutions.jump.workbench.plugin.Exactly-one-item-must-be-selected"));
+
+ return;
+ }
+ if (!digitizedGeometry.intersects(geomSel)) {
+ getPanel()
+ .getContext()
+ .warnUser(
+ "It does not intersect the selected
geometry");
+
//I18N.getString("org.saig.jump.tools.editing.AddAreaTool.it-does-not-intersect-with-the-selection"));
+ return;
+ }
+ if (geomSel.contains(digitizedGeometry)) {
+ getPanel()
+ .getContext()
+ .warnUser(
+ "Digitalized geometry is contained");
+
//I18N.getString("org.saig.jump.tools.editing.AddAreaTool.the-digitized-geometry-is-contained"));
+
+ return;
+ }
+
+ final List<Feature> featsToUpdate = new ArrayList<Feature>();
+ final List<Feature> featsSelectedToUpdate = new
ArrayList<Feature>();
+
+ Geometry modGeometry = null;
+
+ try {
+ modGeometry = EnhancedPrecisionOp.difference(geomSel,
digitizedGeometry);
+
+ // if (selectAdjacents) {
+ Collection colindantes =
EditUtils.getColindantes(geomSel, editableLayer);
+ Iterator<Feature> itColindantes =
colindantes.iterator();
+ int contador = 0;
+ while (itColindantes.hasNext()) {
+ Feature featCol = itColindantes.next();
+ Geometry geomCol = featCol.getGeometry();
+ if (digitizedGeometry.intersects(geomCol)) {
+ if (contador == 1) {
+ getPanel()
+ .getContext()
+ .warnUser(
+ "The digitized
polygon intersects with more than one neighbour");
+ //
I18N.getString("org.saig.jump.tools.editing.RemoveAreaTool.the-digitized-polygon-intersects-with-more-than-one-neighbour"));
+
+ return;
+ }
+ GeometryFactory geomFac = null;
+ Geometry[] geometrias =
+
EditUtils.getFragmentos(geomCol, EnhancedPrecisionOp.intersection(geomSel,
digitizedGeometry));
+ GeometryCollection gc =
geomFac.createGeometryCollection(geometrias);
+ Geometry geomColMod = gc.buffer(0.0D);
+
+ Feature featColClone =
featCol.clone(true);
+ featColClone.setGeometry(geomColMod);
+ featsToUpdate.add(featColClone);
+ featsSelectedToUpdate.add(featCol);
+ contador++;
+ }
+ }
+ // }
+ } catch (TopologyException ex) {
+ getPanel()
+ .getContext()
+ .warnUser(
+
I18N.get("ui.cursortool.editing.FeatureDrawingUtil.draw-feature-tool-topology-error"));
+ //
I18N.getString("org.saig.jump.tools.editing.RemoveAreaTool.topology-error-repeat-the-operation"));
+
+ return;
+ }
+ Feature clonedFeature = selectedFeature.clone(true);
+ clonedFeature.setGeometry(modGeometry);
+ featsToUpdate.add(clonedFeature);
+ featsSelectedToUpdate.add(selectedFeature);
+
+ execute(new UndoableCommand(String.valueOf(getName()) + " - " +
+
I18N.getMessage("org.saig.jump.tools.editing.RemoveAreaTool.{0}-features-modified",
+ new Object[] {
Integer.valueOf(featsToUpdate.size()) })) {
+ @Override
+ public void execute() {
+ selectionManager.unselectItems(editableLayer);
+ if (!featsToUpdate.isEmpty()) {
+
editableLayer.getFeatureCollectionWrapper().removeAll(featsSelectedToUpdate);
+
editableLayer.getFeatureCollectionWrapper().addAll(featsToUpdate);
+
+
+ //
editableLayer.getFeatureCollectionWrapper().updateAll(featsToUpdate);
+
editableLayer.getLayerManager().fireGeometryModified(featsToUpdate,
+ editableLayer,
featsSelectedToUpdate);
+ selectionManager.getFeatureSelection()
+ .selectItems(editableLayer,
featsToUpdate);
+ }
+ }
+
+
+ @Override
+ public void unexecute() {
+ selectionManager.unselectItems(editableLayer);
+ if (!featsToUpdate.isEmpty()) {
+
editableLayer.getFeatureCollectionWrapper().removeAll(featsToUpdate);
+
editableLayer.getFeatureCollectionWrapper().addAll(featsSelectedToUpdate);
+ //
editableLayer.getFeatureCollectionWrapper().updateAll(featsSelectedToUpdate);
+
editableLayer.getLayerManager().fireGeometryModified(featsSelectedToUpdate,
+ editableLayer,
featsToUpdate);
+ }
+
selectionManager.getFeatureSelection().selectItems(editableLayer,
+ selectedFeatures);
+ }
+ });
+ }
+
+
+
+
+
+ @Override
+ protected boolean checkPolygon() throws NoninvertibleTransformException
{
+ if (getCoordinates().size() < 3) {
+ getPanel()
+ .getContext()
+ .warnUser(
+
I18N.get("ui.cursortool.PolygonTool.the-polygon-must-have-at-least-3-points"));
+
+ return false;
+ }
+
+ IsValidOp isValidOp = new IsValidOp(getPolygon());
+
+ if (!isValidOp.isValid()) {
+ getPanel().getContext().warnUser(
+
isValidOp.getValidationError().getMessage());
+
+ if
(PersistentBlackboardPlugIn.get(getWorkbench().getContext())
+
.get(EditTransaction.ROLLING_BACK_INVALID_EDITS_KEY, false)) {
+ return false;
+ }
+ }
+
+ return true;
+ }
+}
+
+
Property changes on:
plug-ins/CADExtension/trunk/src/org/openjump/advancedtools/tools/RemoveAreaTool.java
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+text/plain
\ No newline at end of property
_______________________________________________
Jump-pilot-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/jump-pilot-devel