36 |
36 |
import org.gvsig.fmap.dal.feature.FeatureSelection;
|
37 |
37 |
import org.gvsig.fmap.dal.feature.FeatureStore;
|
38 |
38 |
import org.gvsig.fmap.geom.Geometry;
|
|
39 |
import org.gvsig.fmap.geom.GeometryLocator;
|
|
40 |
import org.gvsig.fmap.geom.GeometryManager;
|
|
41 |
import org.gvsig.fmap.geom.aggregate.Aggregate;
|
|
42 |
import org.gvsig.fmap.geom.aggregate.MultiCurve;
|
|
43 |
import org.gvsig.fmap.geom.aggregate.MultiPoint;
|
|
44 |
import org.gvsig.fmap.geom.aggregate.MultiSurface;
|
|
45 |
import org.gvsig.fmap.geom.primitive.Curve;
|
39 |
46 |
import org.gvsig.fmap.geom.primitive.Point;
|
|
47 |
import org.gvsig.fmap.geom.primitive.Surface;
|
|
48 |
import org.gvsig.fmap.mapcontext.rendering.symbols.ISymbol;
|
|
49 |
import org.gvsig.symbology.SymbologyLocator;
|
|
50 |
import org.gvsig.symbology.SymbologyManager;
|
|
51 |
import org.gvsig.symbology.fmap.mapcontext.rendering.symbol.text.ISimpleTextSymbol;
|
|
52 |
import org.gvsig.tools.ToolsLocator;
|
40 |
53 |
import org.gvsig.tools.dispose.DisposableIterator;
|
41 |
54 |
import org.gvsig.tools.dynobject.DynObject;
|
42 |
55 |
import org.gvsig.tools.exception.BaseException;
|
|
56 |
import org.gvsig.tools.i18n.I18nManager;
|
43 |
57 |
import org.gvsig.tools.service.spi.ProviderServices;
|
44 |
58 |
import org.gvsig.tools.visitor.VisitCanceledException;
|
45 |
59 |
import org.gvsig.tools.visitor.Visitor;
|
... | ... | |
55 |
69 |
import org.gvsig.vectorediting.lib.spi.DefaultEditingServiceParameter;
|
56 |
70 |
import org.gvsig.vectorediting.lib.spi.EditingProvider;
|
57 |
71 |
import org.gvsig.vectorediting.lib.spi.EditingProviderFactory;
|
|
72 |
import org.gvsig.vectorediting.lib.spi.EditingProviderLocator;
|
|
73 |
import org.gvsig.vectorediting.lib.spi.EditingProviderManager;
|
58 |
74 |
import org.gvsig.vectorediting.lib.spi.EditingProviderServices;
|
59 |
75 |
|
60 |
76 |
/**
|
... | ... | |
101 |
117 |
EditingServiceParameter.TYPE.SELECTION);
|
102 |
118 |
|
103 |
119 |
this.basePoint =
|
104 |
|
new DefaultEditingServiceParameter("indicate_new_point", "indicate_new_point",
|
105 |
|
EditingServiceParameter.TYPE.POSITION);
|
|
120 |
new DefaultEditingServiceParameter("indicate_new_point",
|
|
121 |
"indicate_new_point", EditingServiceParameter.TYPE.POSITION);
|
106 |
122 |
|
107 |
123 |
this.columns =
|
108 |
|
new DefaultEditingServiceParameter("columns_number", "columns_number",
|
109 |
|
EditingServiceParameter.TYPE.VALUE);
|
|
124 |
new DefaultEditingServiceParameter("columns_number",
|
|
125 |
"columns_number", EditingServiceParameter.TYPE.VALUE);
|
110 |
126 |
|
111 |
127 |
this.rows =
|
112 |
128 |
new DefaultEditingServiceParameter("rows_number", "rows_number",
|
... | ... | |
114 |
130 |
|
115 |
131 |
this.columnSpacing =
|
116 |
132 |
new DefaultEditingServiceParameter("space_between_columns",
|
117 |
|
"spacing_between_columns", EditingServiceParameter.TYPE.VALUE,
|
|
133 |
"space_between_columns", EditingServiceParameter.TYPE.VALUE,
|
118 |
134 |
EditingServiceParameter.TYPE.POSITION);
|
119 |
135 |
|
120 |
136 |
this.rowSpacing =
|
121 |
137 |
new DefaultEditingServiceParameter("space_between_rows",
|
122 |
|
"spacing_between_rows", EditingServiceParameter.TYPE.VALUE,
|
|
138 |
"space_between_rows", EditingServiceParameter.TYPE.VALUE,
|
123 |
139 |
EditingServiceParameter.TYPE.POSITION);
|
124 |
140 |
}
|
125 |
141 |
|
... | ... | |
145 |
161 |
|
146 |
162 |
DefaultDrawingStatus drawingStatus = new DefaultDrawingStatus();
|
147 |
163 |
|
|
164 |
GeometryManager geometryManager = GeometryLocator.getGeometryManager();
|
|
165 |
I18nManager i18nManager = ToolsLocator.getI18nManager();
|
|
166 |
|
148 |
167 |
FeatureSelection featureSelection =
|
149 |
168 |
(FeatureSelection) values.get(selection);
|
150 |
169 |
Integer columnsValue = (Integer) values.get(columns);
|
... | ... | |
156 |
175 |
if (featureSelection != null && columnsValue != null
|
157 |
176 |
&& rowsValue != null && basePointValue != null) {
|
158 |
177 |
|
|
178 |
int subtype = basePointValue.getGeometryType().getSubType();
|
|
179 |
|
159 |
180 |
if (spacingColumnsValue == null) {
|
160 |
181 |
spacingColumnsValue =
|
161 |
182 |
mousePosition.getX() - basePointValue.getX();
|
... | ... | |
165 |
186 |
spacingRowsValue = mousePosition.getY() - basePointValue.getY();
|
166 |
187 |
}
|
167 |
188 |
|
|
189 |
// Creation of symbology
|
|
190 |
EditingProviderManager editingProviderManager =
|
|
191 |
EditingProviderLocator.getProviderManager();
|
|
192 |
ISymbol auxiliaryPointSymbolEditing =
|
|
193 |
editingProviderManager
|
|
194 |
.getSymbol("auxiliary-point-symbol-editing");
|
|
195 |
|
|
196 |
// Create base point indicator
|
|
197 |
drawingStatus.addStatus(basePointValue,
|
|
198 |
auxiliaryPointSymbolEditing, "");
|
|
199 |
|
|
200 |
// Create distance text indicator
|
|
201 |
try {
|
|
202 |
double textDistance =
|
|
203 |
basePointValue.distance(mousePosition) / 6;
|
|
204 |
String columnsText =
|
|
205 |
i18nManager.getTranslation("space_between_columns")
|
|
206 |
.concat(" ")
|
|
207 |
.concat(String.valueOf(spacingColumnsValue));
|
|
208 |
Geometry pointText =
|
|
209 |
geometryManager.createPoint(
|
|
210 |
mousePosition.getX() + textDistance
|
|
211 |
* Math.cos(Math.PI / 4),
|
|
212 |
mousePosition.getY() + textDistance
|
|
213 |
* Math.sin(Math.PI / 4), subtype);
|
|
214 |
|
|
215 |
drawingStatus
|
|
216 |
.addStatus(pointText, getTextSymbol(), columnsText);
|
|
217 |
|
|
218 |
String rowsText =
|
|
219 |
i18nManager.getTranslation("space_between_rows")
|
|
220 |
.concat(" ").concat(String.valueOf(spacingRowsValue));
|
|
221 |
pointText =
|
|
222 |
geometryManager.createPoint(
|
|
223 |
mousePosition.getX() + textDistance
|
|
224 |
* Math.cos(Math.PI / 4),
|
|
225 |
mousePosition.getY() + textDistance
|
|
226 |
* Math.sin(3 * Math.PI / 2), subtype);
|
|
227 |
|
|
228 |
drawingStatus.addStatus(pointText, getTextSymbol(), rowsText);
|
|
229 |
|
|
230 |
} catch (BaseException e) {
|
|
231 |
throw new DrawServiceException(e);
|
|
232 |
}
|
|
233 |
|
168 |
234 |
DisposableIterator it = null;
|
169 |
235 |
try {
|
170 |
236 |
it = featureSelection.fastIterator();
|
... | ... | |
178 |
244 |
|
179 |
245 |
for (int i = 0; i < matrix.length; i++) {
|
180 |
246 |
for (int j = 0; j < matrix[i].length; j++) {
|
181 |
|
drawingStatus.addGeometry(matrix[i][j]);
|
|
247 |
|
|
248 |
ISymbol symbol = getSymbol(matrix[i][j]);
|
|
249 |
|
|
250 |
if (matrix[i][j] instanceof Aggregate) {
|
|
251 |
int primitivesNumber =
|
|
252 |
((Aggregate) matrix[i][j])
|
|
253 |
.getPrimitivesNumber();
|
|
254 |
for (int k = 0; k < primitivesNumber; k++) {
|
|
255 |
drawingStatus.addStatus(
|
|
256 |
((Aggregate) matrix[i][j])
|
|
257 |
.getPrimitiveAt(k), symbol, "");
|
|
258 |
}
|
|
259 |
} else {
|
|
260 |
drawingStatus.addStatus(matrix[i][j], symbol,
|
|
261 |
"");
|
|
262 |
}
|
182 |
263 |
}
|
183 |
264 |
}
|
184 |
265 |
}
|
... | ... | |
191 |
272 |
return drawingStatus;
|
192 |
273 |
}
|
193 |
274 |
|
|
275 |
private ISymbol getSymbol(Geometry geometry) {
|
|
276 |
|
|
277 |
EditingProviderManager editingProviderManager =
|
|
278 |
EditingProviderLocator.getProviderManager();
|
|
279 |
ISymbol auxiliaryPointSymbolEditing =
|
|
280 |
editingProviderManager.getSymbol("auxiliary-point-symbol-editing");
|
|
281 |
ISymbol lineSymbolEditing =
|
|
282 |
editingProviderManager.getSymbol("line-symbol-editing");
|
|
283 |
ISymbol polygonSymbolEditing =
|
|
284 |
editingProviderManager.getSymbol("polygon-symbol-editing");
|
|
285 |
|
|
286 |
if (geometry instanceof Curve || geometry instanceof MultiCurve) {
|
|
287 |
return lineSymbolEditing;
|
|
288 |
} else if (geometry instanceof Surface
|
|
289 |
|| geometry instanceof MultiSurface) {
|
|
290 |
return polygonSymbolEditing;
|
|
291 |
} else if (geometry instanceof Point || geometry instanceof MultiPoint) {
|
|
292 |
return auxiliaryPointSymbolEditing;
|
|
293 |
}
|
|
294 |
return null;
|
|
295 |
}
|
|
296 |
|
|
297 |
private ISimpleTextSymbol getTextSymbol() {
|
|
298 |
SymbologyManager symbologyManager =
|
|
299 |
SymbologyLocator.getSymbologyManager();
|
|
300 |
ISimpleTextSymbol textSymbol =
|
|
301 |
symbologyManager.createSimpleTextSymbol();
|
|
302 |
textSymbol.setFontSize(10);
|
|
303 |
return textSymbol;
|
|
304 |
}
|
|
305 |
|
194 |
306 |
private Geometry[][] createRectangularMatrix(Geometry geometry,
|
195 |
307 |
int columnsValue, int rowsValue, Point basePointValue,
|
196 |
308 |
double spacingColumns, double spacingRows) throws BaseException {
|
... | ... | |
345 |
457 |
public void start() throws StartServiceException, InvalidEntryException {
|
346 |
458 |
values = new HashMap<EditingServiceParameter, Object>();
|
347 |
459 |
FeatureSelection selected = null;
|
348 |
|
if (featureStore != null && selection == null) {
|
|
460 |
if (featureStore != null && values.get(selection) == null) {
|
349 |
461 |
try {
|
350 |
462 |
selected = featureStore.getFeatureSelection();
|
351 |
463 |
} catch (DataException e) {
|