Revision 4637 trunk/extensions/extCAD/src/com/iver/cit/gvsig/gui/cad/tools/SelectionCADTool.java
SelectionCADTool.java | ||
---|---|---|
43 | 43 |
import java.awt.Color; |
44 | 44 |
import java.awt.Graphics; |
45 | 45 |
import java.awt.Graphics2D; |
46 |
import java.awt.Image; |
|
46 | 47 |
import java.awt.event.InputEvent; |
47 | 48 |
import java.awt.geom.Point2D; |
48 |
import java.awt.geom.Rectangle2D;
|
|
49 |
import java.io.IOException;
|
|
49 | 50 |
import java.util.ArrayList; |
50 | 51 |
|
51 | 52 |
import com.iver.andami.PluginServices; |
52 | 53 |
import com.iver.cit.gvsig.CADExtension; |
53 |
import com.iver.cit.gvsig.fmap.DriverException;
|
|
54 |
import com.iver.cit.gvsig.fmap.ViewPort;
|
|
54 | 55 |
import com.iver.cit.gvsig.fmap.core.GeneralPathX; |
55 | 56 |
import com.iver.cit.gvsig.fmap.core.Handler; |
56 | 57 |
import com.iver.cit.gvsig.fmap.core.IFeature; |
57 | 58 |
import com.iver.cit.gvsig.fmap.core.IGeometry; |
58 | 59 |
import com.iver.cit.gvsig.fmap.core.ShapeFactory; |
60 |
import com.iver.cit.gvsig.fmap.drivers.DriverIOException; |
|
59 | 61 |
import com.iver.cit.gvsig.fmap.edition.IRowEdited; |
60 | 62 |
import com.iver.cit.gvsig.fmap.edition.VectorialEditableAdapter; |
61 |
import com.iver.cit.gvsig.fmap.layers.FBitSet; |
|
62 | 63 |
import com.iver.cit.gvsig.gui.cad.CADTool; |
63 | 64 |
import com.iver.cit.gvsig.gui.cad.DefaultCADTool; |
64 | 65 |
import com.iver.cit.gvsig.gui.cad.tools.smc.SelectionCADToolContext; |
... | ... | |
77 | 78 |
|
78 | 79 |
private Point2D firstPoint; |
79 | 80 |
|
80 |
private Point2D lastPoint; |
|
81 |
//private Point2D lastPoint;
|
|
81 | 82 |
|
82 | 83 |
private String tool = "selection"; |
83 | 84 |
|
84 | 85 |
private String nextState; |
86 |
// Registros de los que se ha sleccionado alg?n handler. |
|
87 |
private ArrayList rowselectedHandlers=new ArrayList(); |
|
85 | 88 |
|
86 | 89 |
/** |
87 | 90 |
* Crea un nuevo LineCADTool. |
... | ... | |
157 | 160 |
* FBitSet selection = getCadToolAdapter().getVectorialAdapter() |
158 | 161 |
* .getSelection(); |
159 | 162 |
*/ |
160 |
VectorialLayerEdited vle = (VectorialLayerEdited) CADExtension
|
|
161 |
.getEditionManager().getActiveLayerEdited();
|
|
163 |
VectorialLayerEdited vle = getVLE();
|
|
164 |
VectorialEditableAdapter vea=vle.getVEA();
|
|
162 | 165 |
ArrayList selectedHandler = vle.getSelectedHandler(); |
163 | 166 |
ArrayList selectedRow = vle.getSelectedRow(); |
164 | 167 |
// ArrayList selectedRowIndex = vle.getSelectedRowIndex(); |
... | ... | |
170 | 173 |
|
171 | 174 |
|
172 | 175 |
} else if (status.equals("Selection.WithHandlers")) { |
176 |
vea.startComplexRow(); |
|
173 | 177 |
for (int i = 0; i < selectedRow.size(); i++) { |
174 | 178 |
IRowEdited row = (IRowEdited) selectedRow.get(i); |
175 | 179 |
// int index = ((Integer) selectedRowIndex.get(i)).intValue(); |
... | ... | |
181 | 185 |
h.set(x, y); |
182 | 186 |
} |
183 | 187 |
|
184 |
modifyFeature(row.getIndex(), (IFeature) row.getLinkedRow()); |
|
188 |
modifyFeature(row.getIndex(), (IFeature) row.getLinkedRow().cloneRow());
|
|
185 | 189 |
} |
190 |
try { |
|
191 |
vea.endComplexRow(); |
|
192 |
} catch (IOException e) { |
|
193 |
// TODO Auto-generated catch block |
|
194 |
e.printStackTrace(); |
|
195 |
} catch (DriverIOException e) { |
|
196 |
// TODO Auto-generated catch block |
|
197 |
e.printStackTrace(); |
|
198 |
} |
|
186 | 199 |
} |
187 | 200 |
} |
188 | 201 |
|
... | ... | |
193 | 206 |
* @return numFeatures selected |
194 | 207 |
*/ |
195 | 208 |
public int selectWithSecondPoint(double x, double y, InputEvent event) { |
196 |
VectorialLayerEdited vle = (VectorialLayerEdited) CADExtension |
|
197 |
.getEditionManager().getActiveLayerEdited(); |
|
209 |
VectorialLayerEdited vle = getVLE(); |
|
210 |
PluginServices.getMDIManager().setWaitCursor(); |
|
211 |
vle.selectWithSecondPoint(x,y); |
|
198 | 212 |
ArrayList selectedRow = vle.getSelectedRow(); |
199 |
|
|
200 |
lastPoint = new Point2D.Double(x, y); |
|
201 |
FBitSet selection = getCadToolAdapter().getVectorialAdapter() |
|
202 |
.getSelection(); |
|
203 |
selection.clear(); |
|
204 |
selectedRow.clear(); |
|
205 |
|
|
206 |
double x1; |
|
207 |
double y1; |
|
208 |
double w1; |
|
209 |
double h1; |
|
210 |
|
|
211 |
if (firstPoint.getX() < lastPoint.getX()) { |
|
212 |
x1 = firstPoint.getX(); |
|
213 |
w1 = lastPoint.getX() - firstPoint.getX(); |
|
214 |
} else { |
|
215 |
x1 = lastPoint.getX(); |
|
216 |
w1 = firstPoint.getX() - lastPoint.getX(); |
|
217 |
} |
|
218 |
|
|
219 |
if (firstPoint.getY() < lastPoint.getY()) { |
|
220 |
y1 = firstPoint.getY(); |
|
221 |
h1 = lastPoint.getY() - firstPoint.getY(); |
|
222 |
} else { |
|
223 |
y1 = lastPoint.getY(); |
|
224 |
h1 = firstPoint.getY() - lastPoint.getY(); |
|
225 |
} |
|
226 |
|
|
227 |
Rectangle2D rect = new Rectangle2D.Double(x1, y1, w1, h1); |
|
228 |
|
|
229 |
VectorialEditableAdapter vea = getCadToolAdapter() |
|
230 |
.getVectorialAdapter(); |
|
231 |
String strEPSG = getCadToolAdapter().getMapControl().getViewPort() |
|
232 |
.getProjection().getAbrev().substring(5); |
|
233 |
IRowEdited[] feats; |
|
234 |
try { |
|
235 |
feats = vea.getFeatures(rect, strEPSG); |
|
236 |
|
|
237 |
for (int i = 0; i < feats.length; i++) { |
|
238 |
IGeometry geom = ((IFeature) feats[i].getLinkedRow()) |
|
239 |
.getGeometry(); |
|
240 |
|
|
241 |
if (firstPoint.getX() < lastPoint.getX()) { |
|
242 |
if (rect.contains(geom.getBounds2D())) { |
|
243 |
selectedRow.add(feats[i]); |
|
244 |
selection.set(feats[i].getIndex(), true); |
|
245 |
} |
|
246 |
} else { |
|
247 |
if (geom.intersects(rect)) { // , 0.1)){ |
|
248 |
selectedRow.add(feats[i]); |
|
249 |
selection.set(feats[i].getIndex(), true); |
|
250 |
} |
|
251 |
} |
|
252 |
} |
|
253 |
} catch (DriverException e) { |
|
254 |
// TODO Auto-generated catch block |
|
255 |
e.printStackTrace(); |
|
256 |
} |
|
257 |
|
|
258 | 213 |
PluginServices.getMDIManager().restoreCursor(); |
259 | 214 |
if (selectedRow.size() > 0) { |
260 | 215 |
nextState = "Selection.WithSelectedFeatures"; |
... | ... | |
283 | 238 |
* FBitSet selection = getCadToolAdapter().getVectorialAdapter() |
284 | 239 |
* .getSelection(); |
285 | 240 |
*/ |
286 |
VectorialLayerEdited vle = (VectorialLayerEdited) CADExtension |
|
287 |
.getEditionManager().getActiveLayerEdited(); |
|
241 |
VectorialLayerEdited vle = getVLE(); |
|
288 | 242 |
ArrayList selectedHandler = vle.getSelectedHandler(); |
289 | 243 |
ArrayList selectedRow = vle.getSelectedRow(); |
244 |
ViewPort vp=vle.getLayer().getFMap().getViewPort(); |
|
290 | 245 |
// ArrayList selectedRowIndex = vle.getSelectedRowIndex(); |
291 | 246 |
|
292 | 247 |
/* |
... | ... | |
294 | 249 |
* selectedRowIndex.clear(); selectedHandler.clear(); } |
295 | 250 |
*/ |
296 | 251 |
|
297 |
drawHandlers(g, selectedRow, getCadToolAdapter().getMapControl() |
|
298 |
.getViewPort().getAffineTransform()); |
|
252 |
//drawHandlers(g, selectedRow, getCadToolAdapter().getMapControl()
|
|
253 |
// .getViewPort().getAffineTransform());
|
|
299 | 254 |
|
300 | 255 |
if (status.equals("Selection.SecondPoint")) { |
301 | 256 |
// Dibuja el rect?ngulo de selecci?n |
... | ... | |
307 | 262 |
elShape.lineTo(firstPoint.getX(), y); |
308 | 263 |
elShape.lineTo(firstPoint.getX(), firstPoint.getY()); |
309 | 264 |
ShapeFactory.createPolyline2D(elShape).draw((Graphics2D) g, |
310 |
getCadToolAdapter().getMapControl().getViewPort(),
|
|
265 |
vp,
|
|
311 | 266 |
CADTool.selectSymbol); |
267 |
Image img = vle.getSelectionImage(); |
|
268 |
g.drawImage(img, 0, 0, null); |
|
269 |
return; |
|
312 | 270 |
} else if (status.equals("Selection.WithHandlers")) { |
313 | 271 |
// Movemos los handlers que hemos seleccionado |
314 | 272 |
// previamente dentro del m?todo select() |
... | ... | |
319 | 277 |
|
320 | 278 |
// Y una vez movidos los v?rtices (handles) |
321 | 279 |
// redibujamos la nueva geometr?a. |
322 |
for (int i = 0; i < selectedRow.size(); i++) {
|
|
323 |
IRowEdited rowEd = (IRowEdited) selectedRow.get(i);
|
|
280 |
for (int i = 0; i < rowselectedHandlers.size(); i++) {
|
|
281 |
IRowEdited rowEd = (IRowEdited) rowselectedHandlers.get(i);
|
|
324 | 282 |
IGeometry geom = ((IFeature) rowEd.getLinkedRow()) |
325 | 283 |
.getGeometry().cloneGeometry(); |
326 | 284 |
g.setColor(Color.gray); |
327 |
geom.draw((Graphics2D) g, getCadToolAdapter().getMapControl() |
|
328 |
.getViewPort(), CADTool.modifySymbol); |
|
285 |
geom.draw((Graphics2D) g, vp, CADTool.modifySymbol); |
|
329 | 286 |
} |
287 |
return; |
|
288 |
}else{ |
|
289 |
try{ |
|
290 |
Image imgSel = vle.getSelectionImage(); |
|
291 |
if (imgSel!=null) |
|
292 |
g.drawImage(imgSel, 0, 0, null); |
|
293 |
Image imgHand = vle.getHandlersImage(); |
|
294 |
if (imgHand!=null) |
|
295 |
g.drawImage(imgHand, 0, 0, null); |
|
296 |
}catch (Exception e) { |
|
297 |
} |
|
330 | 298 |
} |
299 |
// if (firstPoint != null) { |
|
300 |
// int dx = vp.fromMapDistance(x - firstPoint.getX()); |
|
301 |
// int dy = -vp.fromMapDistance(y - firstPoint.getY()); |
|
302 |
// Image img = vle.getImage(); |
|
303 |
// g.drawImage(img, 0, 0, null); |
|
304 |
// } |
|
331 | 305 |
} |
332 | 306 |
|
333 | 307 |
/** |
... | ... | |
339 | 313 |
* Diferent option. |
340 | 314 |
*/ |
341 | 315 |
public void addOption(String s) { |
342 |
// TODO Auto-generated method stub |
|
343 | 316 |
} |
344 | 317 |
|
345 | 318 |
/* |
... | ... | |
384 | 357 |
.getState(); |
385 | 358 |
|
386 | 359 |
String status = actualState.getName(); |
387 |
VectorialLayerEdited vle = (VectorialLayerEdited) CADExtension |
|
388 |
.getEditionManager().getActiveLayerEdited(); |
|
389 |
ArrayList selectedRow = vle.getSelectedRow(); |
|
360 |
VectorialLayerEdited vle = getVLE(); |
|
390 | 361 |
|
362 |
|
|
391 | 363 |
if ((status.equals("Selection.FirstPoint")) |
392 | 364 |
|| (status.equals("Selection.WithSelectedFeatures"))) { |
393 |
firstPoint = new Point2D.Double(x, y); |
|
394 |
|
|
395 |
FBitSet selection = getCadToolAdapter().getVectorialAdapter() |
|
396 |
.getSelection(); |
|
397 |
ArrayList selectedHandler = vle.getSelectedHandler(); |
|
398 |
selectedRow.clear(); |
|
399 |
selectedHandler.clear(); |
|
400 |
|
|
401 |
// ArrayList selectedRowIndex = vle.getSelectedRowIndex(); |
|
402 |
|
|
403 |
// Se comprueba si se pincha en una gemometr?a |
|
404 | 365 |
PluginServices.getMDIManager().setWaitCursor(); |
405 |
|
|
406 |
double tam = getCadToolAdapter().getMapControl().getViewPort() |
|
407 |
.toMapDistance(tolerance); |
|
408 |
Rectangle2D rect = new Rectangle2D.Double(firstPoint.getX() - tam, |
|
409 |
firstPoint.getY() - tam, tam * 2, tam * 2); |
|
410 |
VectorialEditableAdapter vea = getCadToolAdapter() |
|
411 |
.getVectorialAdapter(); |
|
412 |
String strEPSG = getCadToolAdapter().getMapControl().getViewPort() |
|
413 |
.getProjection().getAbrev().substring(5); |
|
414 |
IRowEdited[] feats; |
|
415 |
|
|
416 |
try { |
|
417 |
feats = vea.getFeatures(rect, strEPSG); |
|
418 |
selection.clear(); |
|
419 |
|
|
420 |
for (int i = 0; i < feats.length; i++) { |
|
421 |
IFeature feat = (IFeature) feats[i].getLinkedRow(); |
|
422 |
IGeometry geom = feat.getGeometry(); |
|
423 |
|
|
424 |
if (geom.intersects(rect)) { // , 0.1)){ |
|
425 |
selection.set(feats[i].getIndex(), true); |
|
426 |
selectedRow.add(feats[i]); |
|
427 |
} |
|
428 |
} |
|
429 |
} catch (DriverException e1) { |
|
430 |
e1.printStackTrace(); |
|
431 |
} |
|
366 |
firstPoint = new Point2D.Double(x, y); |
|
367 |
vle.selectWithPoint(x,y); |
|
432 | 368 |
PluginServices.getMDIManager().restoreCursor(); |
433 | 369 |
} |
370 |
ArrayList selectedRow = vle.getSelectedRow(); |
|
434 | 371 |
if (selectedRow.size() > 0) { |
435 | 372 |
nextState = "Selection.WithSelectedFeatures"; |
436 | 373 |
return true; |
437 | 374 |
} else { |
438 |
// if (nextState == null) |
|
439 | 375 |
{ |
440 | 376 |
nextState = "Selection.SecondPoint"; |
441 | 377 |
return true; |
442 | 378 |
} |
443 | 379 |
} |
444 |
/* if (nextState.equals("Selection.SecondPoint")) |
|
445 |
nextState = "Selection.FirstPoint"; |
|
446 |
else |
|
447 |
nextState = "Selection.SecondPoint"; |
|
448 |
|
|
449 |
return true; // Truco de Vicente */ |
|
450 | 380 |
} |
451 | 381 |
|
452 | 382 |
public int selectHandlers(double x, double y, InputEvent event) { |
453 |
// firstPoint = new Point2D.Double(x, y); |
|
454 |
|
|
455 | 383 |
Point2D auxPoint = new Point2D.Double(x, y); |
456 | 384 |
|
457 |
VectorialLayerEdited vle = (VectorialLayerEdited) CADExtension |
|
458 |
.getEditionManager().getActiveLayerEdited(); |
|
385 |
VectorialLayerEdited vle = getVLE(); |
|
459 | 386 |
ArrayList selectedHandler = vle.getSelectedHandler(); |
460 | 387 |
ArrayList selectedRow = vle.getSelectedRow(); |
461 | 388 |
System.out.println("DENTRO DE selectHandlers. selectedRow.size= " |
... | ... | |
469 | 396 |
.toMapDistance(tolerance); |
470 | 397 |
|
471 | 398 |
Handler[] handlers = null; |
399 |
rowselectedHandlers.clear(); |
|
472 | 400 |
for (int i = 0; i < selectedRow.size(); i++) { |
473 | 401 |
IRowEdited rowEd = (IRowEdited) selectedRow.get(i); |
474 | 402 |
|
... | ... | |
477 | 405 |
// y miramos los handlers de cada entidad seleccionada |
478 | 406 |
double min = tam; |
479 | 407 |
// int hSel = -1; |
408 |
|
|
480 | 409 |
for (int j = 0; j < handlers.length; j++) { |
481 | 410 |
Point2D handlerPoint = handlers[j].getPoint(); |
482 | 411 |
double distance = auxPoint.distance(handlerPoint); |
... | ... | |
484 | 413 |
min = distance; |
485 | 414 |
// hSel = j; |
486 | 415 |
selectedHandler.add(handlers[j]); |
416 |
rowselectedHandlers.add(rowEd); |
|
487 | 417 |
} |
488 | 418 |
} |
489 | 419 |
} |
Also available in: Unified diff