001: /*
002: * The Unified Mapping Platform (JUMP) is an extensible, interactive GUI
003: * for visualizing and manipulating spatial features with geometry and attributes.
004: *
005: * Copyright (C) 2003 Vivid Solutions
006: *
007: * This program is free software; you can redistribute it and/or
008: * modify it under the terms of the GNU General Public License
009: * as published by the Free Software Foundation; either version 2
010: * of the License, or (at your option) any later version.
011: *
012: * This program is distributed in the hope that it will be useful,
013: * but WITHOUT ANY WARRANTY; without even the implied warranty of
014: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
015: * GNU General Public License for more details.
016: *
017: * You should have received a copy of the GNU General Public License
018: * along with this program; if not, write to the Free Software
019: * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
020: *
021: * For more information, contact:
022: *
023: * Vivid Solutions
024: * Suite #1A
025: * 2328 Government Street
026: * Victoria BC V8T 5G5
027: * Canada
028: *
029: * (250)385-6040
030: * www.vividsolutions.com
031: */
032:
033: package com.vividsolutions.jump.workbench.ui.plugin.generate;
034:
035: import javax.swing.ImageIcon;
036:
037: import com.vividsolutions.jts.geom.Coordinate;
038: import com.vividsolutions.jump.I18N;
039: import com.vividsolutions.jump.workbench.plugin.AbstractPlugIn;
040: import com.vividsolutions.jump.workbench.plugin.PlugInContext;
041: import com.vividsolutions.jump.workbench.ui.GUIUtil;
042: import com.vividsolutions.jump.workbench.ui.MultiInputDialog;
043:
044: /**
045: * Creates two polygon-grid layers that interlock with sinusoidal "teeth".
046: */
047: public class BoundaryMatchDataPlugIn extends AbstractPlugIn {
048: private BoundaryMatchDataEngine engine = new BoundaryMatchDataEngine();
049:
050: public BoundaryMatchDataPlugIn() {
051: }
052:
053: public void initialize(PlugInContext context) throws Exception {
054: context
055: .getFeatureInstaller()
056: .addLayerViewMenuItem(
057: this ,
058: new String[] {
059: I18N
060: .get("ui.plugin.generate.BoundaryMatchDataPlugIn.tools"),
061: I18N
062: .get("ui.plugin.generate.BoundaryMatchDataPlugIn.generate") },
063: getName() + "...");
064: }
065:
066: public boolean execute(PlugInContext context) throws Exception {
067: MultiInputDialog dialog = new MultiInputDialog(
068: context.getWorkbenchFrame(),
069: I18N
070: .get("ui.plugin.generate.BoundaryMatchDataPlugIn.generate-boundary-match-data"),
071: true);
072: setDialogValues(dialog);
073: GUIUtil.centreOnWindow(dialog);
074: dialog.setVisible(true);
075:
076: if (!dialog.wasOKPressed()) {
077: return false;
078: }
079:
080: getDialogValues(dialog);
081: engine.execute(context);
082:
083: return true;
084: }
085:
086: private void setDialogValues(MultiInputDialog dialog) {
087: dialog
088: .setTitle(I18N
089: .get("ui.plugin.generate.BoundaryMatchDataPlugIn.generate-boundary-match-data"));
090: dialog.setSideBarImage(new ImageIcon(getClass().getResource(
091: "GenerateBdyMatchData.gif")));
092: dialog
093: .setSideBarDescription(I18N
094: .get("ui.plugin.generate.BoundaryMatchDataPlugIn.generates-two-sample-datasets-containing-random-boundary-perturbations"));
095:
096: //<<TODO>> Add the concept of pluggable validators to MultiInputDialog. [Jon Aquino]
097: dialog
098: .addPositiveIntegerField(
099: I18N
100: .get("ui.plugin.generate.BoundaryMatchDataPlugIn.layer-width-cells"),
101: engine.getLayerWidthInCells(), 5);
102: dialog
103: .addPositiveIntegerField(
104: I18N
105: .get("ui.plugin.generate.BoundaryMatchDataPlugIn.layer-height-cells"),
106: engine.getLayerHeightInCells(), 5);
107: dialog
108: .addPositiveDoubleField(
109: I18N
110: .get("ui.plugin.generate.BoundaryMatchDataPlugIn.cells-side-length"),
111: engine.getCellSideLength(), 5);
112: dialog
113: .addPositiveIntegerField(
114: I18N
115: .get("ui.plugin.generate.BoundaryMatchDataPlugIn.vertices-per-cell-side"),
116: engine.getVerticesPerCellSide(), 5);
117: dialog
118: .addPositiveIntegerField(
119: I18N
120: .get("ui.plugin.generate.BoundaryMatchDataPlugIn.vertices-per-boundary-side"),
121: engine.getVerticesPerBoundarySide(), 5);
122: dialog
123: .addNonNegativeDoubleField(
124: I18N
125: .get("ui.plugin.generate.BoundaryMatchDataPlugIn.boundary-amplitude"),
126: engine.getBoundaryAmplitude(), 5);
127: dialog
128: .addPositiveDoubleField(
129: I18N
130: .get("ui.plugin.generate.BoundaryMatchDataPlugIn.boundary-period"),
131: engine.getBoundaryPeriod(), 5);
132: dialog
133: .addNonNegativeDoubleField(
134: I18N
135: .get("ui.plugin.generate.BoundaryMatchDataPlugIn.max-boundary-perturbation"),
136: engine.getMaxBoundaryPerturbation(), 5);
137: dialog
138: .addNonNegativeDoubleField(
139: I18N
140: .get("ui.plugin.generate.BoundaryMatchDataPlugIn.perturbation-probability"),
141: engine.getPerturbationProbability(), 5);
142: dialog.addDoubleField("Min X", engine
143: .getSouthwestCornerOfLeftLayer().x, 5);
144: dialog.addDoubleField("Min Y", engine
145: .getSouthwestCornerOfLeftLayer().y, 5);
146: }
147:
148: private void getDialogValues(MultiInputDialog dialog) {
149: engine.setSouthwestCornerOfLeftLayer(new Coordinate(dialog
150: .getDouble(("Min X")), dialog.getDouble(("Min Y"))));
151: engine
152: .setLayerHeightInCells(dialog
153: .getInteger((I18N
154: .get("ui.plugin.generate.BoundaryMatchDataPlugIn.layer-height-cells"))));
155: engine
156: .setLayerWidthInCells(dialog
157: .getInteger((I18N
158: .get("ui.plugin.generate.BoundaryMatchDataPlugIn.layer-width-cells"))));
159: engine
160: .setCellSideLength(dialog
161: .getDouble((I18N
162: .get("ui.plugin.generate.BoundaryMatchDataPlugIn.cells-side-length"))));
163: engine
164: .setVerticesPerCellSide(dialog
165: .getInteger((I18N
166: .get("ui.plugin.generate.BoundaryMatchDataPlugIn.vertices-per-cell-side"))));
167: engine
168: .setBoundaryAmplitude(dialog
169: .getDouble((I18N
170: .get("ui.plugin.generate.BoundaryMatchDataPlugIn.boundary-amplitude"))));
171: engine
172: .setBoundaryPeriod(dialog
173: .getDouble((I18N
174: .get("ui.plugin.generate.BoundaryMatchDataPlugIn.boundary-period"))));
175: engine
176: .setVerticesPerBoundarySide(dialog
177: .getInteger((I18N
178: .get("ui.plugin.generate.BoundaryMatchDataPlugIn.vertices-per-boundary-side"))));
179: engine
180: .setMaxBoundaryPerturbation(dialog
181: .getDouble((I18N
182: .get("ui.plugin.generate.BoundaryMatchDataPlugIn.max-boundary-perturbation"))));
183: engine
184: .setPerturbationProbability(dialog
185: .getDouble((I18N
186: .get("ui.plugin.generate.BoundaryMatchDataPlugIn.perturbation-probability"))));
187: }
188: }
|