Revision 23424 branches/v2_0_0_prep/extensions/extCAD/src/com/iver/cit/gvsig/gui/cad/tools/ComplexSelectionCADTool.java
ComplexSelectionCADTool.java | ||
---|---|---|
48 | 48 |
import java.awt.event.MouseEvent; |
49 | 49 |
import java.awt.geom.Point2D; |
50 | 50 |
import java.util.ArrayList; |
51 |
import java.util.Iterator; |
|
51 | 52 |
|
53 |
import org.gvsig.fmap.data.DataException; |
|
54 |
import org.gvsig.fmap.data.InitializeException; |
|
52 | 55 |
import org.gvsig.fmap.data.ReadException; |
56 |
import org.gvsig.fmap.data.feature.Feature; |
|
57 |
import org.gvsig.fmap.data.feature.FeatureStore; |
|
58 |
import org.gvsig.fmap.data.feature.FeatureType; |
|
59 |
import org.gvsig.fmap.data.feature.IsNotFeatureSettingException; |
|
53 | 60 |
import org.gvsig.fmap.geom.Geometry; |
61 |
import org.gvsig.fmap.geom.GeometryFactory; |
|
62 |
import org.gvsig.fmap.geom.GeometryManager; |
|
54 | 63 |
import org.gvsig.fmap.geom.handler.Handler; |
64 |
import org.gvsig.fmap.geom.operation.Draw; |
|
65 |
import org.gvsig.fmap.geom.operation.DrawOperationContext; |
|
66 |
import org.gvsig.fmap.geom.operation.GeometryOperationException; |
|
67 |
import org.gvsig.fmap.geom.operation.GeometryOperationNotSupportedException; |
|
55 | 68 |
import org.gvsig.fmap.geom.primitive.GeneralPathX; |
56 | 69 |
import org.gvsig.fmap.mapcontext.ViewPort; |
57 | 70 |
import org.gvsig.fmap.mapcontext.layers.vectorial.FLyrVect; |
... | ... | |
120 | 133 |
public void addPoint(double x, double y, InputEvent event) { |
121 | 134 |
if (event!=null && ((MouseEvent)event).getClickCount()==2){ |
122 | 135 |
try { |
123 |
pointDoubleClick((MapControl)event.getComponent());
|
|
136 |
pointDoubleClick(((MapControl)event.getComponent()).getMapContext());
|
|
124 | 137 |
} catch (ReadException e) { |
125 | 138 |
NotificationManager.addError(e.getMessage(),e); |
126 | 139 |
} |
... | ... | |
132 | 145 |
System.out.println("PREVIOUSSTATE =" + status); // + "ESTADO ACTUAL: " + |
133 | 146 |
// _fsm.getState()); |
134 | 147 |
VectorialLayerEdited vle = getVLE(); |
135 |
VectorialEditableAdapter vea=vle.getVEA(); |
|
148 |
FeatureStore featureStore=null; |
|
149 |
try { |
|
150 |
featureStore = vle.getFeatureStore(); |
|
151 |
} catch (ReadException e) { |
|
152 |
// TODO Auto-generated catch block |
|
153 |
e.printStackTrace(); |
|
154 |
} |
|
155 |
// VectorialEditableAdapter vea=vle.getVEA(); |
|
136 | 156 |
ArrayList selectedHandler = vle.getSelectedHandler(); |
137 |
ArrayList selectedRow = vle.getSelectedRow(); |
|
157 |
// ArrayList selectedRow = vle.getSelectedRow();
|
|
138 | 158 |
System.out.println("STATUS ACTUAL = " + _fsm.getTransition()); |
139 | 159 |
if (status.equals("Selection.FirstPoint")) { |
140 | 160 |
firstPoint=new Point2D.Double(x,y); |
... | ... | |
142 | 162 |
} else if (status.equals("Selection.SecondPoint")) { |
143 | 163 |
} else if (status.equals("Selection.WithFeatures")) { |
144 | 164 |
} else if (status.equals("Selection.WithHandlers")) { |
145 |
vea.startComplexRow();
|
|
165 |
featureStore.getCommandsRecord().startComplex();
|
|
146 | 166 |
ArrayList selectedRowsAux=new ArrayList(); |
147 |
for (int i = 0; i < selectedRow.size(); i++) { |
|
148 |
IRowEdited row = (IRowEdited) selectedRow.get(i); |
|
149 |
IFeature feat = (IFeature) row.getLinkedRow().cloneRow(); |
|
150 |
IGeometry ig = feat.getGeometry(); |
|
167 |
Iterator iterator=featureStore.getSelection().iterator(); |
|
168 |
while (iterator.hasNext()) { |
|
169 |
Feature feature = (Feature) iterator.next(); |
|
170 |
|
|
171 |
// } |
|
172 |
// for (int i = 0; i < selectedRow.size(); i++) { |
|
173 |
// IRowEdited row = (IRowEdited) selectedRow.get(i); |
|
174 |
// IFeature feat = (IFeature) row.getLinkedRow().cloneRow(); |
|
175 |
Geometry ig = ((Geometry)feature.getDefaultGeometry()).cloneGeometry(); |
|
151 | 176 |
// Movemos los handlers que hemos seleccionado |
152 | 177 |
// previamente dentro del m?todo select() |
153 |
Handler[] handlers=ig.getHandlers(IGeometry.SELECTHANDLER);
|
|
178 |
Handler[] handlers=ig.getHandlers(Geometry.SELECTHANDLER); |
|
154 | 179 |
for (int k = 0; k < selectedHandler.size(); k++) { |
155 | 180 |
Handler h = (Handler)selectedHandler.get(k); |
156 | 181 |
for (int j=0;j<handlers.length;j++) { |
... | ... | |
158 | 183 |
handlers[j].set(x,y); |
159 | 184 |
} |
160 | 185 |
} |
161 |
|
|
162 |
modifyFeature(row.getIndex(), feat); |
|
163 |
selectedRowsAux.add(new DefaultRowEdited(feat,IRowEdited.STATUS_MODIFIED,row.getIndex())); |
|
186 |
try { |
|
187 |
feature.editing(); |
|
188 |
feature.setGeometry(featureStore.getDefaultFeatureType().getDefaultGeometry(), ig); |
|
189 |
featureStore.update(feature); |
|
190 |
} catch (IsNotFeatureSettingException e) { |
|
191 |
// TODO Auto-generated catch block |
|
192 |
e.printStackTrace(); |
|
193 |
} catch (DataException e) { |
|
194 |
// TODO Auto-generated catch block |
|
195 |
e.printStackTrace(); |
|
196 |
} |
|
197 |
// modifyFeature(row.getIndex(), feat); |
|
198 |
selectedRowsAux.add(feature); |
|
164 | 199 |
} |
165 | 200 |
firstPoint=new Point2D.Double(x,y); |
166 |
vle.setSelectionCache(VectorialLayerEdited.SAVEPREVIOUS, selectedRowsAux); |
|
201 |
// vle.setSelectionCache(VectorialLayerEdited.SAVEPREVIOUS, selectedRowsAux);
|
|
167 | 202 |
String description=PluginServices.getText(this,"move_handlers"); |
168 |
vea.endComplexRow(description);
|
|
203 |
featureStore.getCommandsRecord().endComplex(description);
|
|
169 | 204 |
}else if (status.equals("Selection.NextPointPolygon")) { |
170 | 205 |
pointsPolygon.add(new Point2D.Double(x,y)); |
171 | 206 |
} |
... | ... | |
185 | 220 |
gpx.lineTo(lastPoint.getX(),lastPoint.getY()); |
186 | 221 |
gpx.lineTo(firstPoint.getX(),lastPoint.getY()); |
187 | 222 |
gpx.closePath(); |
188 |
IGeometry rectangle=ShapeFactory.createPolygon2D(gpx);
|
|
223 |
Geometry rectangle=geomFactory.createPolygon2D(gpx);
|
|
189 | 224 |
return selectWithPolygon(rectangle); |
190 | 225 |
} |
191 | 226 |
/** |
... | ... | |
195 | 230 |
* @return numFeatures selected |
196 | 231 |
*/ |
197 | 232 |
public int selectWithCircle(double x, double y, InputEvent event) { |
198 |
IGeometry circle=geomFactory.createCircle(firstPoint,new Point2D.Double(x,y));
|
|
233 |
Geometry circle=geomFactory.createCircle(firstPoint,new Point2D.Double(x,y)); |
|
199 | 234 |
return selectWithPolygon(circle); |
200 | 235 |
} |
201 | 236 |
public int selectWithPolygon(Geometry polygon) { |
... | ... | |
209 | 244 |
} else if (getType().equals(PluginServices.getText(this,"out_circle")) || getType().equals(PluginServices.getText(this,"out_polygon")) || getType().equals(PluginServices.getText(this,"out_rectangle"))) { |
210 | 245 |
vle.selectOutPolygon(polygon); |
211 | 246 |
} |
212 |
ArrayList selectedRow = vle.getSelectedRow(); |
|
247 |
int countSelection=0; |
|
248 |
try { |
|
249 |
countSelection = vle.getFeatureStore().getSelection().size(); |
|
250 |
} catch (ReadException e) { |
|
251 |
// TODO Auto-generated catch block |
|
252 |
e.printStackTrace(); |
|
253 |
} |
|
254 |
// ArrayList selectedRow = vle.getSelectedRow(); |
|
213 | 255 |
PluginServices.getMDIManager().restoreCursor(); |
214 |
if (selectedRow.size() > 0) { |
|
256 |
if (countSelection>0){ |
|
257 |
// if (selectedRow.size() > 0) { |
|
215 | 258 |
nextState = "Selection.WithSelectedFeatures"; |
216 | 259 |
end(); |
217 | 260 |
} else |
218 | 261 |
nextState = "Selection.FirstPoint"; |
219 |
return selectedRow.size();
|
|
262 |
return countSelection;
|
|
220 | 263 |
} |
221 | 264 |
|
222 | 265 |
/** |
... | ... | |
247 | 290 |
elShape.lineTo(x, y); |
248 | 291 |
elShape.lineTo(firstPoint.getX(), y); |
249 | 292 |
elShape.lineTo(firstPoint.getX(), firstPoint.getY()); |
250 |
geomFactory.createPolyline2D(elShape).draw((Graphics2D) g, |
|
251 |
vp, |
|
252 |
DefaultCADTool.geometrySelectSymbol); |
|
293 |
|
|
294 |
DrawOperationContext doc=new DrawOperationContext(); |
|
295 |
doc.setGraphics((Graphics2D)g); |
|
296 |
doc.setViewPort(vp); |
|
297 |
doc.setSymbol(DefaultCADTool.geometrySelectSymbol); |
|
298 |
try { |
|
299 |
geomFactory.createPolyline2D(elShape).invokeOperation(Draw.CODE,doc); |
|
300 |
} catch (GeometryOperationNotSupportedException e) { |
|
301 |
e.printStackTrace(); |
|
302 |
} catch (GeometryOperationException e) { |
|
303 |
e.printStackTrace(); |
|
304 |
} |
|
305 |
// geomFactory.createPolyline2D(elShape).draw((Graphics2D) g, |
|
306 |
// vp, |
|
307 |
// DefaultCADTool.geometrySelectSymbol); |
|
253 | 308 |
Image img = vle.getSelectionImage(); |
254 | 309 |
g.drawImage(img, 0, 0, null); |
255 | 310 |
return; |
... | ... | |
259 | 314 |
gpx.append(circle.getInternalShape(),true); |
260 | 315 |
Geometry circleSel=geomFactory.createPolyline2D(gpx); |
261 | 316 |
// Dibuja el c?rculo de selecci?n |
262 |
circleSel.draw((Graphics2D) g, |
|
263 |
vp, |
|
264 |
DefaultCADTool.geometrySelectSymbol); |
|
317 |
DrawOperationContext doc=new DrawOperationContext(); |
|
318 |
doc.setGraphics((Graphics2D)g); |
|
319 |
doc.setViewPort(vp); |
|
320 |
doc.setSymbol(DefaultCADTool.geometrySelectSymbol); |
|
321 |
try { |
|
322 |
circleSel.invokeOperation(Draw.CODE,doc); |
|
323 |
} catch (GeometryOperationNotSupportedException e) { |
|
324 |
e.printStackTrace(); |
|
325 |
} catch (GeometryOperationException e) { |
|
326 |
e.printStackTrace(); |
|
327 |
} |
|
328 |
// circleSel.draw((Graphics2D) g, |
|
329 |
// vp, |
|
330 |
// DefaultCADTool.geometrySelectSymbol); |
|
265 | 331 |
Image img = vle.getSelectionImage(); |
266 | 332 |
g.drawImage(img, 0, 0, null); |
267 | 333 |
return; |
268 | 334 |
}else if (status.equals("Selection.NextPointPolygon")) { |
269 | 335 |
// Dibuja el pol?gono de selecci?n |
270 | 336 |
Geometry polygon=getGeometryPolygon(new Point2D.Double(x,y)); |
271 |
polygon.draw((Graphics2D) g, |
|
272 |
vp, |
|
273 |
DefaultCADTool.geometrySelectSymbol); |
|
337 |
DrawOperationContext doc=new DrawOperationContext(); |
|
338 |
doc.setGraphics((Graphics2D)g); |
|
339 |
doc.setViewPort(vp); |
|
340 |
doc.setSymbol(DefaultCADTool.geometrySelectSymbol); |
|
341 |
try { |
|
342 |
polygon.invokeOperation(Draw.CODE,doc); |
|
343 |
} catch (GeometryOperationNotSupportedException e) { |
|
344 |
e.printStackTrace(); |
|
345 |
} catch (GeometryOperationException e) { |
|
346 |
e.printStackTrace(); |
|
347 |
} |
|
348 |
// polygon.draw((Graphics2D) g, |
|
349 |
// vp, |
|
350 |
// DefaultCADTool.geometrySelectSymbol); |
|
274 | 351 |
Image img = vle.getSelectionImage(); |
275 | 352 |
g.drawImage(img, 0, 0, null); |
276 | 353 |
return; |
... | ... | |
288 | 365 |
// Y una vez movidos los v?rtices (handles) |
289 | 366 |
// redibujamos la nueva geometr?a. |
290 | 367 |
for (int i = 0; i < rowselectedHandlers.size(); i++) { |
291 |
IRowEdited rowEd = (IRowEdited) rowselectedHandlers.get(i); |
|
292 |
IGeometry geom = ((IFeature) rowEd.getLinkedRow()) |
|
293 |
.getGeometry().cloneGeometry(); |
|
368 |
Feature rowEd = (Feature) rowselectedHandlers.get(i); |
|
369 |
Geometry geom = ((Geometry)rowEd.getDefaultGeometry()).cloneGeometry(); |
|
294 | 370 |
g.setColor(Color.gray); |
295 |
geom.draw((Graphics2D) g, vp, DefaultCADTool.axisReferencesSymbol); |
|
371 |
DrawOperationContext doc=new DrawOperationContext(); |
|
372 |
doc.setGraphics((Graphics2D)g); |
|
373 |
doc.setViewPort(vp); |
|
374 |
doc.setSymbol(DefaultCADTool.axisReferencesSymbol); |
|
375 |
try { |
|
376 |
geom.invokeOperation(Draw.CODE,doc); |
|
377 |
} catch (GeometryOperationNotSupportedException e) { |
|
378 |
e.printStackTrace(); |
|
379 |
} catch (GeometryOperationException e) { |
|
380 |
e.printStackTrace(); |
|
381 |
} |
|
382 |
// geom.draw((Graphics2D) g, vp, DefaultCADTool.axisReferencesSymbol); |
|
296 | 383 |
} |
297 | 384 |
for (int k = 0; k < selectedHandler.size(); k++) { |
298 | 385 |
Handler h = (Handler)selectedHandler.get(k); |
... | ... | |
361 | 448 |
VectorialLayerEdited vle = getVLE(); |
362 | 449 |
PluginServices.getMDIManager().setWaitCursor(); |
363 | 450 |
vle.selectAll(); |
364 |
ArrayList selectedRow = vle.getSelectedRow(); |
|
451 |
int countSelection=0; |
|
452 |
try { |
|
453 |
countSelection = vle.getFeatureStore().getSelection().size(); |
|
454 |
} catch (ReadException e) { |
|
455 |
// TODO Auto-generated catch block |
|
456 |
e.printStackTrace(); |
|
457 |
} |
|
458 |
// ArrayList selectedRow = vle.getSelectedRow(); |
|
365 | 459 |
PluginServices.getMDIManager().restoreCursor(); |
366 |
if (selectedRow.size() > 0) {
|
|
460 |
if (countSelection > 0) {
|
|
367 | 461 |
nextState = "Selection.WithSelectedFeatures"; |
368 | 462 |
} else |
369 | 463 |
nextState = "Selection.FirstPoint"; |
370 | 464 |
end(); |
371 |
return selectedRow.size();
|
|
465 |
return countSelection;
|
|
372 | 466 |
} |
373 | 467 |
|
374 | 468 |
private Geometry getGeometryPolygon(Point2D p) { |
... | ... | |
424 | 518 |
vle.selectWithPoint(x,y,multipleSelection); |
425 | 519 |
PluginServices.getMDIManager().restoreCursor(); |
426 | 520 |
} |
427 |
ArrayList selectedRow = vle.getSelectedRow(); |
|
428 |
if (selectedRow.size() > 0) { |
|
521 |
int countSelection=0; |
|
522 |
try { |
|
523 |
countSelection = vle.getFeatureStore().getSelection().size(); |
|
524 |
} catch (ReadException e) { |
|
525 |
// TODO Auto-generated catch block |
|
526 |
e.printStackTrace(); |
|
527 |
} |
|
528 |
if (countSelection > 0) { |
|
429 | 529 |
nextState = "Selection.WithSelectedFeatures"; |
430 | 530 |
return true; |
431 | 531 |
} else { |
... | ... | |
441 | 541 |
|
442 | 542 |
VectorialLayerEdited vle = getVLE(); |
443 | 543 |
ArrayList selectedHandler = vle.getSelectedHandler(); |
444 |
ArrayList selectedRow = vle.getSelectedRow(); |
|
445 |
System.out.println("DENTRO DE selectHandlers. selectedRow.size= " |
|
446 |
+ selectedRow.size()); |
|
544 |
// ArrayList selectedRow = vle.getSelectedRow();
|
|
545 |
// System.out.println("DENTRO DE selectHandlers. selectedRow.size= "
|
|
546 |
// + selectedRow.size());
|
|
447 | 547 |
selectedHandler.clear(); |
448 | 548 |
|
449 | 549 |
// Se comprueba si se pincha en una gemometr?a |
... | ... | |
454 | 554 |
|
455 | 555 |
Handler[] handlers = null; |
456 | 556 |
rowselectedHandlers.clear(); |
457 |
for (int i = 0; i < selectedRow.size(); i++) { |
|
458 |
IRowEdited rowEd = (IRowEdited) selectedRow.get(i); |
|
557 |
FeatureStore featureStore=null; |
|
558 |
try { |
|
559 |
featureStore = vle.getFeatureStore(); |
|
560 |
} catch (ReadException e) { |
|
561 |
// TODO Auto-generated catch block |
|
562 |
e.printStackTrace(); |
|
563 |
} |
|
564 |
Iterator iterator=featureStore.getSelection().iterator(); |
|
565 |
while (iterator.hasNext()) { |
|
566 |
Feature feature = (Feature) iterator.next(); |
|
459 | 567 |
|
460 |
IFeature fea = (IFeature) rowEd.getLinkedRow(); |
|
461 |
handlers = fea.getGeometry().getHandlers(IGeometry.SELECTHANDLER); |
|
568 |
// } |
|
569 |
// for (int i = 0; i < selectedRow.size(); i++) { |
|
570 |
// IRowEdited rowEd = (IRowEdited) selectedRow.get(i); |
|
571 |
// |
|
572 |
// IFeature fea = (IFeature) rowEd.getLinkedRow(); |
|
573 |
Geometry geom=((Geometry)feature.getDefaultGeometry()).cloneGeometry(); |
|
574 |
handlers = geom.getHandlers(Geometry.SELECTHANDLER); |
|
462 | 575 |
// y miramos los handlers de cada entidad seleccionada |
463 | 576 |
double min = tam; |
464 | 577 |
// int hSel = -1; |
... | ... | |
470 | 583 |
min = distance; |
471 | 584 |
// hSel = j; |
472 | 585 |
selectedHandler.add(handlers[j]); |
473 |
rowselectedHandlers.add(rowEd); |
|
586 |
Feature f; |
|
587 |
try { |
|
588 |
f = featureStore.createDefaultFeature(false); |
|
589 |
|
|
590 |
f.editing(); |
|
591 |
FeatureType featureType=featureStore.getDefaultFeatureType(); |
|
592 |
for (int i = 0; i < featureType.size(); i++) { |
|
593 |
f.set(i,feature.get(i)); |
|
594 |
} |
|
595 |
f.setGeometry(featureType.getDefaultGeometry(), geom); |
|
596 |
} catch (InitializeException e) { |
|
597 |
// TODO Auto-generated catch block |
|
598 |
e.printStackTrace(); |
|
599 |
} catch (DataException e) { |
|
600 |
// TODO Auto-generated catch block |
|
601 |
e.printStackTrace(); |
|
602 |
} |
|
603 |
rowselectedHandlers.add(feature); |
|
474 | 604 |
} |
475 | 605 |
} |
476 | 606 |
} |
Also available in: Unified diff