Revision 37504 branches/v2_0_0_prep/extensions/extEditing/src/org/gvsig/editing/gui/cad/tools/SelectionCADTool.java
SelectionCADTool.java | ||
---|---|---|
26 | 26 |
import java.awt.geom.Point2D; |
27 | 27 |
import java.util.ArrayList; |
28 | 28 |
|
29 |
import org.cresques.cts.ICoordTrans; |
|
29 | 30 |
import org.slf4j.Logger; |
30 | 31 |
import org.slf4j.LoggerFactory; |
31 | 32 |
|
... | ... | |
41 | 42 |
import org.gvsig.fmap.dal.exception.ReadException; |
42 | 43 |
import org.gvsig.fmap.dal.feature.EditableFeature; |
43 | 44 |
import org.gvsig.fmap.dal.feature.Feature; |
44 |
import org.gvsig.fmap.dal.feature.FeatureSelection; |
|
45 | 45 |
import org.gvsig.fmap.dal.feature.FeatureSet; |
46 | 46 |
import org.gvsig.fmap.dal.feature.FeatureStore; |
47 | 47 |
import org.gvsig.fmap.dal.feature.exception.NeedEditingModeException; |
... | ... | |
70 | 70 |
protected Point2D firstPoint; |
71 | 71 |
|
72 | 72 |
protected String nextState; |
73 |
// Registros de los que se ha seleccionado alg?n handler. |
|
74 |
protected ArrayList rowselectedHandlers = new ArrayList(); |
|
73 |
|
|
74 |
// These two arrays are used to save the current selected features and |
|
75 |
// geometries. The selected geometries contains an instance of the |
|
76 |
// geometry that can be reprojected. |
|
77 |
protected ArrayList selectedGeometries = new ArrayList(); |
|
78 |
protected ArrayList selectedFeatures = new ArrayList(); |
|
79 |
|
|
75 | 80 |
protected String type = PluginServices.getText(this, "simple"); |
76 | 81 |
|
77 | 82 |
protected boolean multipleSelection = false; |
... | ... | |
169 | 174 |
DisposableIterator iterator = null; |
170 | 175 |
try { |
171 | 176 |
featureStore.beginEditingGroup(description); |
172 |
|
|
173 |
iterator = |
|
174 |
((FeatureSelection) featureStore.getSelection()).fastIterator(); |
|
175 |
|
|
176 |
while (iterator.hasNext()) { |
|
177 |
Feature feature = (Feature) iterator.next(); |
|
178 |
|
|
179 |
Geometry geometry = |
|
180 |
(feature.getDefaultGeometry()).cloneGeometry(); |
|
181 |
|
|
182 |
// Movemos los handlers que hemos seleccionado |
|
183 |
// previamente dentro del m?todo select() |
|
184 |
Handler[] handlers = |
|
185 |
geometry.getHandlers(Geometry.SELECTHANDLER); |
|
177 |
ICoordTrans coordTrans = getVLE().getLayer().getCoordTrans(); |
|
178 |
for (int i=0 ; i<selectedFeatures.size() ; i++){ |
|
179 |
Feature feature = (Feature) selectedFeatures.get(i); |
|
180 |
|
|
181 |
Geometry geometry = (Geometry)selectedGeometries.get(i); |
|
182 |
|
|
183 |
// Draw the moved geometry. It has been reprojected in the |
|
184 |
// select handler method |
|
186 | 185 |
for (int k = 0; k < selectedHandlers.size(); k++) { |
187 | 186 |
Handler h = (Handler) selectedHandlers.get(k); |
188 |
for (int j = 0; j < handlers.length; j++) { |
|
189 |
if (h.getPoint().equals(handlers[j].getPoint())) { |
|
190 |
handlers[j].set(x, y); |
|
191 |
} |
|
192 |
} |
|
193 |
} |
|
187 |
h.set(x, y); |
|
188 |
} |
|
189 |
|
|
190 |
//If the layer is reprojected, It is necessary |
|
191 |
//to reproject the geometry |
|
192 |
if (coordTrans != null){ |
|
193 |
geometry = geometry.cloneGeometry(); |
|
194 |
geometry.reProject(coordTrans.getInverted()); |
|
195 |
} |
|
196 |
|
|
194 | 197 |
EditableFeature eFeature = feature.getEditable(); |
195 | 198 |
eFeature.setDefaultGeometry(geometry); |
196 | 199 |
featureStore.update(eFeature); |
197 |
|
|
198 | 200 |
} |
199 | 201 |
|
200 | 202 |
firstPoint = new Point2D.Double(x, y); |
... | ... | |
277 | 279 |
|
278 | 280 |
return; |
279 | 281 |
} else |
282 |
//If there is a handler to move... |
|
280 | 283 |
if (status.equals("Selection.WithHandlers")) { |
281 |
// Movemos los handlers que hemos seleccionado |
|
282 |
// previamente dentro del m?todo select() |
|
283 |
double xPrev = 0; |
|
284 |
double yPrev = 0; |
|
285 |
for (int k = 0; k < selectedHandler.size(); k++) { |
|
286 |
Handler h = (Handler) selectedHandler.get(k); |
|
287 |
xPrev = h.getPoint().getX(); |
|
288 |
yPrev = h.getPoint().getY(); |
|
289 |
h.set(x, y); |
|
290 |
} |
|
291 |
// Y una vez movidos los v?rtices (handles) |
|
292 |
// redibujamos la nueva geometr?a. |
|
293 |
for (int i = 0; i < rowselectedHandlers.size(); i++) { |
|
294 |
Feature feature = (Feature) rowselectedHandlers.get(i); |
|
295 |
|
|
296 |
Geometry geom = |
|
297 |
(feature.getDefaultGeometry()).cloneGeometry(); |
|
298 |
renderer.setColor(Color.gray); |
|
299 |
renderer.draw(geom, |
|
300 |
mapControlManager.getAxisReferenceSymbol()); |
|
301 |
} |
|
302 |
for (int k = 0; k < selectedHandler.size(); k++) { |
|
303 |
Handler h = (Handler) selectedHandler.get(k); |
|
304 |
h.set(xPrev, yPrev); |
|
305 |
} |
|
306 |
return; |
|
284 |
drawWithHandlers(renderer, x, y, selectedHandler); |
|
307 | 285 |
} |
308 | 286 |
} |
287 |
|
|
288 |
/** |
|
289 |
* Draw method to draw a geometry with handlers |
|
290 |
* |
|
291 |
* @param mapControlDrawer |
|
292 |
* object used to draw. |
|
293 |
* @param x |
|
294 |
* selected x coordinate. |
|
295 |
* @param y |
|
296 |
* selected y coordinate. |
|
297 |
* @param selectedHandlers |
|
298 |
* the selected handlers |
|
299 |
*/ |
|
300 |
protected void drawWithHandlers(MapControlDrawer mapControlDrawer, double x, |
|
301 |
double y, ArrayList selectedHandlers) { |
|
302 |
// Moving the handlers that have been selected |
|
303 |
// in the selectHandlers method |
|
304 |
double xPrev = 0; |
|
305 |
double yPrev = 0; |
|
306 |
for (int k = 0; k < selectedHandlers.size(); k++) { |
|
307 |
Handler h = (Handler) selectedHandlers.get(k); |
|
308 |
xPrev = h.getPoint().getX(); |
|
309 |
yPrev = h.getPoint().getY(); |
|
310 |
h.set(x, y); |
|
311 |
} |
|
312 |
|
|
313 |
// Draw the moved geometry. It has been reprojected in the |
|
314 |
// select handler method |
|
315 |
for (int i = 0; i < selectedGeometries.size(); i++) { |
|
316 |
Geometry geom = (Geometry) selectedGeometries.get(i); |
|
309 | 317 |
|
318 |
mapControlDrawer.setColor(Color.gray); |
|
319 |
mapControlDrawer.draw(geom, |
|
320 |
mapControlManager.getAxisReferenceSymbol()); |
|
321 |
} |
|
322 |
for (int k = 0; k < selectedHandlers.size(); k++) { |
|
323 |
Handler h = (Handler) selectedHandlers.get(k); |
|
324 |
h.set(xPrev, yPrev); |
|
325 |
} |
|
326 |
} |
|
327 |
|
|
310 | 328 |
/** |
311 | 329 |
* Add a diferent option. |
312 | 330 |
* |
... | ... | |
410 | 428 |
Point2D auxPoint = new Point2D.Double(x, y); |
411 | 429 |
|
412 | 430 |
VectorialLayerEdited vle = getVLE(); |
431 |
|
|
432 |
//Gets the current selected handlers |
|
413 | 433 |
ArrayList selectedHandler = vle.getSelectedHandler(); |
414 | 434 |
FeatureSet selection = null; |
415 | 435 |
DisposableIterator iterator = null; |
... | ... | |
421 | 441 |
countSel); |
422 | 442 |
selectedHandler.clear(); |
423 | 443 |
|
444 |
//Clear the previous selection |
|
445 |
clearCurrentSelection(); |
|
446 |
|
|
424 | 447 |
// Se comprueba si se pincha en una gemometr?a |
425 | 448 |
PluginServices.getMDIManager().setWaitCursor(); |
426 | 449 |
|
... | ... | |
429 | 452 |
.toMapDistance(mapControlManager.getTolerance()); |
430 | 453 |
|
431 | 454 |
Handler[] handlers = null; |
432 |
rowselectedHandlers.clear(); |
|
455 |
|
|
456 |
|
|
457 |
selectedGeometries.clear(); |
|
433 | 458 |
iterator = selection.fastIterator(); |
459 |
ICoordTrans coordTrans = getVLE().getLayer().getCoordTrans(); |
|
434 | 460 |
while (iterator.hasNext()) { |
435 | 461 |
Feature feature = (Feature) iterator.next(); |
436 |
handlers = |
|
437 |
(feature.getDefaultGeometry()) |
|
438 |
.getHandlers(Geometry.SELECTHANDLER); |
|
462 |
|
|
463 |
//If the layer is reprojected, the tolerance is not applicable. It is necessary |
|
464 |
//to reproject the geometry |
|
465 |
Geometry geometry = feature.getDefaultGeometry(); |
|
466 |
if (coordTrans != null){ |
|
467 |
geometry = geometry.cloneGeometry(); |
|
468 |
geometry.reProject(coordTrans); |
|
469 |
} |
|
470 |
|
|
471 |
handlers = geometry.getHandlers(Geometry.SELECTHANDLER); |
|
439 | 472 |
|
440 | 473 |
// y miramos los handlers de cada entidad seleccionada |
441 | 474 |
double min = tam; |
... | ... | |
446 | 479 |
if (distance <= min) { |
447 | 480 |
min = distance; |
448 | 481 |
selectedHandler.add(handlers[j]); |
449 |
rowselectedHandlers.add(feature); |
|
482 |
selectedGeometries.add(geometry); |
|
483 |
selectedFeatures.add(feature); |
|
450 | 484 |
} |
451 | 485 |
} |
452 | 486 |
} |
... | ... | |
461 | 495 |
|
462 | 496 |
return selectedHandler.size(); |
463 | 497 |
} |
498 |
|
|
499 |
protected void clearCurrentSelection(){ |
|
500 |
selectedFeatures.clear(); |
|
501 |
selectedGeometries.clear(); |
|
502 |
} |
|
464 | 503 |
|
465 | 504 |
public String getType() { |
466 | 505 |
return type; |
Also available in: Unified diff