Revision 364 org.gvsig.vectorediting/trunk/org.gvsig.vectorediting/org.gvsig.vectorediting.lib/org.gvsig.vectorediting.lib.prov/org.gvsig.vectorediting.lib.prov.rectangularmatrix/src/main/java/org/gvsig/vectorediting/lib/prov/rectangularmatrix/RectangularMatrixEditingProvider.java
RectangularMatrixEditingProvider.java | ||
---|---|---|
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) { |
Also available in: Unified diff