Revision 24265 branches/v2_0_0_prep/extensions/extCAD/src/com/iver/cit/gvsig/gui/cad/tools/ComplexSelectionCADTool.java
ComplexSelectionCADTool.java | ||
---|---|---|
54 | 54 |
import org.gvsig.fmap.data.exceptions.DataException; |
55 | 55 |
import org.gvsig.fmap.data.exceptions.InitializeException; |
56 | 56 |
import org.gvsig.fmap.data.exceptions.ReadException; |
57 |
import org.gvsig.fmap.data.feature.EditableFeature; |
|
57 | 58 |
import org.gvsig.fmap.data.feature.Feature; |
59 |
import org.gvsig.fmap.data.feature.FeatureSelection; |
|
58 | 60 |
import org.gvsig.fmap.data.feature.FeatureStore; |
59 | 61 |
import org.gvsig.fmap.data.feature.FeatureType; |
60 |
import org.gvsig.fmap.data.feature.exceptions.IsNotFeatureSettingException; |
|
61 | 62 |
import org.gvsig.fmap.geom.Geometry; |
62 |
import org.gvsig.fmap.geom.GeometryFactory; |
|
63 |
import org.gvsig.fmap.geom.GeometryManager; |
|
64 | 63 |
import org.gvsig.fmap.geom.handler.Handler; |
65 | 64 |
import org.gvsig.fmap.geom.operation.Draw; |
66 | 65 |
import org.gvsig.fmap.geom.operation.DrawOperationContext; |
... | ... | |
87 | 86 |
* @author Vicente Caballero Navarro |
88 | 87 |
*/ |
89 | 88 |
public class ComplexSelectionCADTool extends SelectionCADTool { |
90 |
//public final static int tolerance = 4; |
|
91 |
|
|
92 | 89 |
private ComplexSelectionCADToolContext _fsm; |
93 | 90 |
private List pointsPolygon=new ArrayList(); |
94 | 91 |
|
95 |
//private Point2D firstPoint; |
|
96 |
|
|
97 |
//private Point2D lastPoint; |
|
98 |
|
|
99 |
|
|
100 |
|
|
101 |
//private String nextState; |
|
102 |
// Registros de los que se ha sleccionado alg?n handler. |
|
103 |
//private ArrayList rowselectedHandlers=new ArrayList(); |
|
104 |
//private String type=PluginServices.getText(this,"inside_circle"); |
|
105 |
//private ArrayList pointsPolygon=new ArrayList(); |
|
106 | 92 |
/** |
107 | 93 |
* Crea un nuevo ComplexSelectionCADTool. |
108 | 94 |
*/ |
... | ... | |
154 | 140 |
// TODO Auto-generated catch block |
155 | 141 |
e.printStackTrace(); |
156 | 142 |
} |
157 |
// VectorialEditableAdapter vea=vle.getVEA(); |
|
158 | 143 |
ArrayList selectedHandler = vle.getSelectedHandler(); |
159 |
// ArrayList selectedRow = vle.getSelectedRow(); |
|
160 | 144 |
System.out.println("STATUS ACTUAL = " + _fsm.getTransition()); |
161 | 145 |
if (status.equals("Selection.FirstPoint")) { |
162 | 146 |
firstPoint=new Point2D.Double(x,y); |
... | ... | |
164 | 148 |
} else if (status.equals("Selection.SecondPoint")) { |
165 | 149 |
} else if (status.equals("Selection.WithFeatures")) { |
166 | 150 |
} else if (status.equals("Selection.WithHandlers")) { |
167 |
featureStore.getCommandsRecord().startComplex(); |
|
151 |
String description=PluginServices.getText(this,"move_handlers"); |
|
152 |
featureStore.beginEditingGroup(description); |
|
168 | 153 |
ArrayList selectedRowsAux=new ArrayList(); |
169 |
Iterator iterator=featureStore.getSelection().iterator();
|
|
170 |
while (iterator.hasNext()) {
|
|
171 |
Feature feature = (Feature) iterator.next();
|
|
154 |
Iterator iterator; |
|
155 |
try {
|
|
156 |
iterator = ((FeatureSelection)featureStore.getSelection()).iterator();
|
|
172 | 157 |
|
173 |
// } |
|
174 |
// for (int i = 0; i < selectedRow.size(); i++) { |
|
175 |
// IRowEdited row = (IRowEdited) selectedRow.get(i); |
|
176 |
// IFeature feat = (IFeature) row.getLinkedRow().cloneRow(); |
|
177 |
Geometry ig = ((Geometry)feature.getDefaultGeometry()).cloneGeometry(); |
|
178 |
// Movemos los handlers que hemos seleccionado |
|
179 |
// previamente dentro del m?todo select() |
|
180 |
Handler[] handlers=ig.getHandlers(Geometry.SELECTHANDLER); |
|
181 |
for (int k = 0; k < selectedHandler.size(); k++) { |
|
182 |
Handler h = (Handler)selectedHandler.get(k); |
|
183 |
for (int j=0;j<handlers.length;j++) { |
|
184 |
if (h.getPoint().equals(handlers[j].getPoint())) |
|
185 |
handlers[j].set(x,y); |
|
158 |
while (iterator.hasNext()) { |
|
159 |
Feature feature = (Feature) iterator.next(); |
|
160 |
|
|
161 |
// } |
|
162 |
Geometry ig = ((Geometry)feature.getDefaultGeometry()).cloneGeometry(); |
|
163 |
// Movemos los handlers que hemos seleccionado |
|
164 |
// previamente dentro del m?todo select() |
|
165 |
Handler[] handlers=ig.getHandlers(Geometry.SELECTHANDLER); |
|
166 |
for (int k = 0; k < selectedHandler.size(); k++) { |
|
167 |
Handler h = (Handler)selectedHandler.get(k); |
|
168 |
for (int j=0;j<handlers.length;j++) { |
|
169 |
if (h.getPoint().equals(handlers[j].getPoint())) |
|
170 |
handlers[j].set(x,y); |
|
171 |
} |
|
186 | 172 |
} |
173 |
EditableFeature eFeature=feature.getEditable(); |
|
174 |
eFeature.setGeometry(featureStore.getDefaultFeatureType().getDefaultGeometryAttributeName(), ig); |
|
175 |
featureStore.update(eFeature); |
|
176 |
selectedRowsAux.add(eFeature); |
|
187 | 177 |
} |
188 |
try { |
|
189 |
feature.editing(); |
|
190 |
feature.setGeometry(featureStore.getDefaultFeatureType().getDefaultGeometryAttributeName(), ig); |
|
191 |
featureStore.update(feature); |
|
192 |
} catch (IsNotFeatureSettingException e) { |
|
193 |
// TODO Auto-generated catch block |
|
194 |
e.printStackTrace(); |
|
195 |
} catch (DataException e) { |
|
196 |
// TODO Auto-generated catch block |
|
197 |
e.printStackTrace(); |
|
198 |
} |
|
199 |
// modifyFeature(row.getIndex(), feat); |
|
200 |
selectedRowsAux.add(feature); |
|
178 |
} catch (DataException e1) { |
|
179 |
// TODO Auto-generated catch block |
|
180 |
e1.printStackTrace(); |
|
201 | 181 |
} |
202 | 182 |
firstPoint=new Point2D.Double(x,y); |
203 | 183 |
// vle.setSelectionCache(VectorialLayerEdited.SAVEPREVIOUS, selectedRowsAux); |
204 |
String description=PluginServices.getText(this,"move_handlers"); |
|
205 |
featureStore.getCommandsRecord().endComplex(description);
|
|
184 |
|
|
185 |
featureStore.endEditingGroup();
|
|
206 | 186 |
}else if (status.equals("Selection.NextPointPolygon")) { |
207 | 187 |
pointsPolygon.add(new Point2D.Double(x,y)); |
208 | 188 |
} |
... | ... | |
214 | 194 |
* @param y |
215 | 195 |
* @return numFeatures selected |
216 | 196 |
*/ |
217 |
public int selectWithSecondPointOutRectangle(double x, double y, InputEvent event) {
|
|
197 |
public long selectWithSecondPointOutRectangle(double x, double y, InputEvent event) {
|
|
218 | 198 |
Point2D lastPoint=new Point2D.Double(x,y); |
219 | 199 |
GeneralPathX gpx=new GeneralPathX(); |
220 | 200 |
gpx.moveTo(firstPoint.getX(),firstPoint.getY()); |
... | ... | |
231 | 211 |
* @param y |
232 | 212 |
* @return numFeatures selected |
233 | 213 |
*/ |
234 |
public int selectWithCircle(double x, double y, InputEvent event) {
|
|
214 |
public long selectWithCircle(double x, double y, InputEvent event) {
|
|
235 | 215 |
Geometry circle=geomFactory.createCircle(firstPoint,new Point2D.Double(x,y)); |
236 | 216 |
return selectWithPolygon(circle); |
237 | 217 |
} |
238 |
public int selectWithPolygon(Geometry polygon) {
|
|
218 |
public long selectWithPolygon(Geometry polygon) {
|
|
239 | 219 |
VectorialLayerEdited vle = getVLE(); |
240 | 220 |
PluginServices.getMDIManager().setWaitCursor(); |
241 | 221 |
|
... | ... | |
246 | 226 |
} else if (getType().equals(PluginServices.getText(this,"out_circle")) || getType().equals(PluginServices.getText(this,"out_polygon")) || getType().equals(PluginServices.getText(this,"out_rectangle"))) { |
247 | 227 |
vle.selectOutPolygon(polygon); |
248 | 228 |
} |
249 |
int countSelection=0;
|
|
229 |
long countSelection=0;
|
|
250 | 230 |
try { |
251 |
countSelection = vle.getFeatureStore().getSelection().size();
|
|
231 |
countSelection = ((FeatureSelection)vle.getFeatureStore().getSelection()).getSize();
|
|
252 | 232 |
} catch (ReadException e) { |
253 | 233 |
// TODO Auto-generated catch block |
254 | 234 |
e.printStackTrace(); |
235 |
} catch (DataException e) { |
|
236 |
// TODO Auto-generated catch block |
|
237 |
e.printStackTrace(); |
|
255 | 238 |
} |
256 |
// ArrayList selectedRow = vle.getSelectedRow(); |
|
257 | 239 |
PluginServices.getMDIManager().restoreCursor(); |
258 | 240 |
if (countSelection>0){ |
259 |
// if (selectedRow.size() > 0) { |
|
260 | 241 |
nextState = "Selection.WithSelectedFeatures"; |
261 | 242 |
end(); |
262 | 243 |
} else |
... | ... | |
304 | 285 |
} catch (GeometryOperationException e) { |
305 | 286 |
e.printStackTrace(); |
306 | 287 |
} |
307 |
// geomFactory.createPolyline2D(elShape).draw((Graphics2D) g, |
|
308 |
// vp, |
|
309 |
// DefaultCADTool.geometrySelectSymbol); |
|
310 | 288 |
Image img = vle.getSelectionImage(); |
311 | 289 |
g.drawImage(img, 0, 0, null); |
312 | 290 |
return; |
... | ... | |
327 | 305 |
} catch (GeometryOperationException e) { |
328 | 306 |
e.printStackTrace(); |
329 | 307 |
} |
330 |
// circleSel.draw((Graphics2D) g, |
|
331 |
// vp, |
|
332 |
// DefaultCADTool.geometrySelectSymbol); |
|
333 | 308 |
Image img = vle.getSelectionImage(); |
334 | 309 |
g.drawImage(img, 0, 0, null); |
335 | 310 |
return; |
... | ... | |
347 | 322 |
} catch (GeometryOperationException e) { |
348 | 323 |
e.printStackTrace(); |
349 | 324 |
} |
350 |
// polygon.draw((Graphics2D) g, |
|
351 |
// vp, |
|
352 |
// DefaultCADTool.geometrySelectSymbol); |
|
353 | 325 |
Image img = vle.getSelectionImage(); |
354 | 326 |
g.drawImage(img, 0, 0, null); |
355 | 327 |
return; |
... | ... | |
381 | 353 |
} catch (GeometryOperationException e) { |
382 | 354 |
e.printStackTrace(); |
383 | 355 |
} |
384 |
// geom.draw((Graphics2D) g, vp, DefaultCADTool.axisReferencesSymbol); |
|
385 | 356 |
} |
386 | 357 |
for (int k = 0; k < selectedHandler.size(); k++) { |
387 | 358 |
Handler h = (Handler)selectedHandler.get(k); |
... | ... | |
446 | 417 |
} |
447 | 418 |
init(); |
448 | 419 |
} |
449 |
private int selectAll() {
|
|
420 |
private long selectAll() {
|
|
450 | 421 |
VectorialLayerEdited vle = getVLE(); |
451 | 422 |
PluginServices.getMDIManager().setWaitCursor(); |
452 | 423 |
vle.selectAll(); |
453 |
int countSelection=0;
|
|
424 |
long countSelection=0;
|
|
454 | 425 |
try { |
455 |
countSelection = vle.getFeatureStore().getSelection().size();
|
|
426 |
countSelection = ((FeatureSelection)vle.getFeatureStore().getSelection()).getSize();
|
|
456 | 427 |
} catch (ReadException e) { |
457 | 428 |
// TODO Auto-generated catch block |
458 | 429 |
e.printStackTrace(); |
430 |
} catch (DataException e) { |
|
431 |
// TODO Auto-generated catch block |
|
432 |
e.printStackTrace(); |
|
459 | 433 |
} |
460 |
// ArrayList selectedRow = vle.getSelectedRow(); |
|
461 | 434 |
PluginServices.getMDIManager().restoreCursor(); |
462 | 435 |
if (countSelection > 0) { |
463 | 436 |
nextState = "Selection.WithSelectedFeatures"; |
... | ... | |
520 | 493 |
vle.selectWithPoint(x,y,multipleSelection); |
521 | 494 |
PluginServices.getMDIManager().restoreCursor(); |
522 | 495 |
} |
523 |
int countSelection=0;
|
|
496 |
long countSelection=0;
|
|
524 | 497 |
try { |
525 |
countSelection = vle.getFeatureStore().getSelection().size();
|
|
498 |
countSelection = ((FeatureSelection)vle.getFeatureStore().getSelection()).getSize();
|
|
526 | 499 |
} catch (ReadException e) { |
527 | 500 |
// TODO Auto-generated catch block |
528 | 501 |
e.printStackTrace(); |
502 |
} catch (DataException e) { |
|
503 |
// TODO Auto-generated catch block |
|
504 |
e.printStackTrace(); |
|
529 | 505 |
} |
530 | 506 |
if (countSelection > 0) { |
531 | 507 |
nextState = "Selection.WithSelectedFeatures"; |
... | ... | |
543 | 519 |
|
544 | 520 |
VectorialLayerEdited vle = getVLE(); |
545 | 521 |
ArrayList selectedHandler = vle.getSelectedHandler(); |
546 |
// ArrayList selectedRow = vle.getSelectedRow(); |
|
547 |
// System.out.println("DENTRO DE selectHandlers. selectedRow.size= " |
|
548 |
// + selectedRow.size()); |
|
549 | 522 |
selectedHandler.clear(); |
550 | 523 |
|
551 | 524 |
// Se comprueba si se pincha en una gemometr?a |
... | ... | |
563 | 536 |
// TODO Auto-generated catch block |
564 | 537 |
e.printStackTrace(); |
565 | 538 |
} |
566 |
Iterator iterator=featureStore.getSelection().iterator(); |
|
539 |
Iterator iterator=null; |
|
540 |
try { |
|
541 |
iterator = ((FeatureSelection)featureStore.getSelection()).iterator(); |
|
542 |
} catch (DataException e1) { |
|
543 |
// TODO Auto-generated catch block |
|
544 |
e1.printStackTrace(); |
|
545 |
} |
|
567 | 546 |
while (iterator.hasNext()) { |
568 | 547 |
Feature feature = (Feature) iterator.next(); |
569 | 548 |
|
570 |
// } |
|
571 |
// for (int i = 0; i < selectedRow.size(); i++) { |
|
572 |
// IRowEdited rowEd = (IRowEdited) selectedRow.get(i); |
|
573 |
// |
|
574 |
// IFeature fea = (IFeature) rowEd.getLinkedRow(); |
|
575 | 549 |
Geometry geom=((Geometry)feature.getDefaultGeometry()).cloneGeometry(); |
576 | 550 |
handlers = geom.getHandlers(Geometry.SELECTHANDLER); |
577 | 551 |
// y miramos los handlers de cada entidad seleccionada |
578 | 552 |
double min = tam; |
579 |
// int hSel = -1; |
|
580 | 553 |
|
581 | 554 |
for (int j = 0; j < handlers.length; j++) { |
582 | 555 |
Point2D handlerPoint = handlers[j].getPoint(); |
583 | 556 |
double distance = auxPoint.distance(handlerPoint); |
584 | 557 |
if (distance <= min) { |
585 | 558 |
min = distance; |
586 |
// hSel = j; |
|
587 | 559 |
selectedHandler.add(handlers[j]); |
588 |
Feature f;
|
|
560 |
EditableFeature eFeature;
|
|
589 | 561 |
try { |
590 |
f = featureStore.createNewFeature(false); |
|
591 |
|
|
592 |
f.editing(); |
|
593 |
FeatureType featureType=featureStore.getDefaultFeatureType(); |
|
594 |
for (int i = 0; i < featureType.size(); i++) { |
|
595 |
f.setAttribute(i,feature.get(i)); |
|
596 |
} |
|
597 |
f.setGeometry(featureType.getDefaultGeometryAttributeName(), geom); |
|
562 |
eFeature = featureStore.createNewFeature(false); |
|
563 |
FeatureType featureType=featureStore.getDefaultFeatureType(); |
|
564 |
for (int i = 0; i < featureType.size(); i++) { |
|
565 |
eFeature.set(i,feature.get(i)); |
|
566 |
} |
|
567 |
eFeature.setGeometry(featureType.getDefaultGeometryAttributeName(), geom); |
|
598 | 568 |
} catch (InitializeException e) { |
599 | 569 |
// TODO Auto-generated catch block |
600 | 570 |
e.printStackTrace(); |
Also available in: Unified diff