001: /*****************************************************
002: * created: 07.12.2004
003: * last modified:
004: *
005: * description:
006: * Merges two selected polygons if they intersect each other in more than one point.
007: * The first feature in the selection gets the new geometry while the second feature is deleted.
008: *****************************************************/package org.openjump.core.ui.plugin.tools;
009:
010: import java.util.ArrayList;
011: import java.util.Collection;
012: import java.util.Iterator;
013: import java.util.Map;
014:
015: import org.openjump.core.geomutils.algorithm.PolygonMerge;
016:
017: import com.vividsolutions.jts.geom.Geometry;
018: import com.vividsolutions.jump.I18N;
019: import com.vividsolutions.jump.feature.Feature;
020: import com.vividsolutions.jump.workbench.WorkbenchContext;
021: import com.vividsolutions.jump.workbench.model.Layer;
022: import com.vividsolutions.jump.workbench.plugin.AbstractPlugIn;
023: import com.vividsolutions.jump.workbench.plugin.EnableCheckFactory;
024: import com.vividsolutions.jump.workbench.plugin.MultiEnableCheck;
025: import com.vividsolutions.jump.workbench.plugin.PlugInContext;
026: import com.vividsolutions.jump.workbench.ui.EditTransaction;
027: import com.vividsolutions.jump.workbench.ui.MenuNames;
028: import com.vividsolutions.jump.workbench.ui.plugin.FeatureInstaller;
029:
030: import de.fho.jump.pirol.utilities.apiTools.FeatureCollectionTools;
031: import de.fho.jump.pirol.utilities.apiTools.LayerTools;
032:
033: /**
034: * @author sstein
035: *
036: **/
037: public class MergeTwoSelectedPolygonsPlugIn extends AbstractPlugIn {
038:
039: private String sMergeTwoPolys = I18N
040: .get("org.openjump.core.ui.plugin.tools.MergeTwoSelectedPolygonsPlugIn.Merge-Two-Polygons");
041:
042: //private String sMergeTwoPolys = "MergeTwoPolygons";
043:
044: public void initialize(PlugInContext context) throws Exception {
045: FeatureInstaller featureInstaller = new FeatureInstaller(
046: context.getWorkbenchContext());
047: featureInstaller.addMainMenuItem(this , //exe
048: new String[] { MenuNames.TOOLS,
049: MenuNames.TOOLS_EDIT_GEOMETRY }, //menu path
050: this .getName(), //name methode .getName recieved by AbstractPlugIn
051: false, //checkbox
052: null, //icon
053: createEnableCheck(context.getWorkbenchContext())); //enable check
054: }
055:
056: public String getName() {
057: return sMergeTwoPolys;
058: }
059:
060: public static MultiEnableCheck createEnableCheck(
061: WorkbenchContext workbenchContext) {
062: EnableCheckFactory checkFactory = new EnableCheckFactory(
063: workbenchContext);
064:
065: return new MultiEnableCheck()
066: .add(
067: checkFactory
068: .createWindowWithLayerNamePanelMustBeActiveCheck())
069: .add(
070: checkFactory
071: .createSelectedLayersMustBeEditableCheck())
072: .add(
073: checkFactory
074: .createAtLeastNItemsMustBeSelectedCheck(2));
075: }
076:
077: public boolean execute(PlugInContext context) throws Exception {
078:
079: Collection features = context.getWorkbenchContext()
080: .getLayerViewPanel().getSelectionManager()
081: .getFeaturesWithSelectedItems();
082: if (features.size() == 2) {
083: Iterator iter = features.iterator();
084: Feature f1 = (Feature) iter.next();
085: Feature f2 = (Feature) iter.next();
086: PolygonMerge merge = new PolygonMerge(f1.getGeometry(), f2
087: .getGeometry());
088: if (merge.isMergeSuccesfull() == 1) {
089: //-- merge using an edit transaction to enable undo
090: ArrayList fToEdit = new ArrayList();
091: fToEdit.add(f1);
092: Map layer2FeatList = LayerTools.getLayer2FeatureMap(
093: fToEdit, context);
094: Layer[] layersWithFeatures = (Layer[]) layer2FeatList
095: .keySet().toArray(new Layer[0]);
096: EditTransaction edtr = new EditTransaction(fToEdit,
097: "setgeom", layersWithFeatures[0], true, false,
098: context.getLayerViewPanel());
099: Geometry g = merge.getOutPolygon();
100: //f1.setGeometry(g);
101: edtr.setGeometry(f1, g);
102: edtr.commit();
103: edtr.clearEnvelopeCaches();
104: //-- delete other feature
105: ArrayList fToDelete = new ArrayList();
106: fToDelete.add(f2);
107: FeatureCollectionTools.deleteFeatures(fToDelete,
108: context);
109: }
110: } else {
111: context.getWorkbenchFrame().warnUser(
112: "more than 2 objects selected");
113: }
114: //context.getWorkbenchContext().getLayerViewPanel().getSelectionManager().clear();
115: return true;
116: }
117:
118: }
|