root / trunk / extensions / extCAD / src / com / iver / cit / gvsig / layers / VectorialLayerEdited.java @ 11437
History | View | Annotate | Download (21.2 KB)
1 |
package com.iver.cit.gvsig.layers; |
---|---|
2 |
|
3 |
import java.awt.Graphics2D; |
4 |
import java.awt.Image; |
5 |
import java.awt.geom.Point2D; |
6 |
import java.awt.geom.Rectangle2D; |
7 |
import java.awt.image.BufferedImage; |
8 |
import java.util.ArrayList; |
9 |
import java.util.EmptyStackException; |
10 |
|
11 |
import com.hardcode.gdbms.driver.exceptions.ReadDriverException; |
12 |
import com.iver.andami.PluginServices; |
13 |
import com.iver.andami.ui.mdiManager.IWindow; |
14 |
import com.iver.cit.gvsig.CADExtension; |
15 |
import com.iver.cit.gvsig.StartEditing; |
16 |
import com.iver.cit.gvsig.ViewCommandStackExtension; |
17 |
import com.iver.cit.gvsig.exceptions.expansionfile.ExpansionFileReadException; |
18 |
import com.iver.cit.gvsig.fmap.ViewPort; |
19 |
import com.iver.cit.gvsig.fmap.core.DefaultFeature; |
20 |
import com.iver.cit.gvsig.fmap.core.Handler; |
21 |
import com.iver.cit.gvsig.fmap.core.IFeature; |
22 |
import com.iver.cit.gvsig.fmap.core.IGeometry; |
23 |
import com.iver.cit.gvsig.fmap.core.v02.FGraphicUtilities; |
24 |
import com.iver.cit.gvsig.fmap.edition.DefaultRowEdited; |
25 |
import com.iver.cit.gvsig.fmap.edition.IEditableSource; |
26 |
import com.iver.cit.gvsig.fmap.edition.IRowEdited; |
27 |
import com.iver.cit.gvsig.fmap.edition.VectorialEditableAdapter; |
28 |
import com.iver.cit.gvsig.fmap.layers.CancelationException; |
29 |
import com.iver.cit.gvsig.fmap.layers.FBitSet; |
30 |
import com.iver.cit.gvsig.fmap.layers.FLayer; |
31 |
import com.iver.cit.gvsig.fmap.layers.FLyrAnnotation; |
32 |
import com.iver.cit.gvsig.fmap.layers.FLyrVect; |
33 |
import com.iver.cit.gvsig.fmap.layers.LayerDrawEvent; |
34 |
import com.iver.cit.gvsig.fmap.layers.LayerDrawingListener; |
35 |
import com.iver.cit.gvsig.fmap.layers.LayerEvent; |
36 |
import com.iver.cit.gvsig.fmap.layers.SelectionEvent; |
37 |
import com.iver.cit.gvsig.fmap.layers.SelectionListener; |
38 |
import com.iver.cit.gvsig.fmap.rendering.Legend; |
39 |
import com.iver.cit.gvsig.gui.cad.CADTool; |
40 |
import com.iver.cit.gvsig.gui.cad.CADToolAdapter; |
41 |
import com.iver.cit.gvsig.gui.cad.DefaultCADTool; |
42 |
import com.iver.cit.gvsig.gui.cad.tools.SelectionCADTool; |
43 |
import com.iver.cit.gvsig.project.documents.view.gui.View; |
44 |
import com.vividsolutions.jts.geom.Geometry; |
45 |
|
46 |
public class VectorialLayerEdited extends DefaultLayerEdited implements LayerDrawingListener, SelectionListener{ |
47 |
private ArrayList selectedHandler = new ArrayList(); |
48 |
private ArrayList selectedRow = new ArrayList(); |
49 |
private Point2D lastPoint; |
50 |
private Point2D firstPoint; |
51 |
private CADTool cadtool=null; |
52 |
|
53 |
private ArrayList snappers = new ArrayList(); |
54 |
private ArrayList layersToSnap = new ArrayList(); |
55 |
private Legend legend;
|
56 |
/** Selecci?n previa**/
|
57 |
private ArrayList previousRowSelection=new ArrayList(); |
58 |
private ArrayList previousHandlerSelection=new ArrayList(); |
59 |
public static final boolean SAVEPREVIOUS=true; |
60 |
public static final boolean NOTSAVEPREVIOUS=false; |
61 |
|
62 |
|
63 |
public VectorialLayerEdited(FLayer lyr)
|
64 |
{ |
65 |
super(lyr);
|
66 |
lyr.getMapContext().addLayerDrawingListener(this);
|
67 |
// Por defecto, siempre hacemos snapping sobre la capa en edici?n.
|
68 |
layersToSnap.add(lyr); |
69 |
try {
|
70 |
((FLyrVect)lyr).getRecordset().addSelectionListener(this);
|
71 |
} catch (ReadDriverException e) {
|
72 |
e.printStackTrace(); |
73 |
} |
74 |
} |
75 |
|
76 |
public ArrayList getSelectedHandler() { |
77 |
return selectedHandler;
|
78 |
} |
79 |
|
80 |
public ArrayList getSelectedRow() { |
81 |
return selectedRow;
|
82 |
} |
83 |
|
84 |
public void clearSelection(boolean savePrevious) throws ReadDriverException { |
85 |
if (!selectedRow.isEmpty() && savePrevious) {
|
86 |
previousRowSelection.clear(); |
87 |
previousHandlerSelection.clear(); |
88 |
} |
89 |
if (savePrevious) {
|
90 |
previousRowSelection.addAll(selectedRow); |
91 |
previousHandlerSelection.addAll(selectedHandler); |
92 |
} |
93 |
selectedHandler.clear(); |
94 |
selectedRow.clear(); |
95 |
if (getVEA() != null) |
96 |
{ |
97 |
FBitSet selection=getVEA().getSelection(); |
98 |
selection.clear(); |
99 |
} |
100 |
} |
101 |
public void restorePreviousSelection() throws ReadDriverException { |
102 |
VectorialEditableAdapter vea=getVEA(); |
103 |
FBitSet selection=vea.getSelection(); |
104 |
|
105 |
selection.clear(); |
106 |
selectedRow.clear(); |
107 |
selectedHandler.clear(); |
108 |
|
109 |
selectedRow.addAll(previousRowSelection); |
110 |
selectedHandler.addAll(previousHandlerSelection); |
111 |
for (int i = 0;i < selectedRow.size(); i++) { |
112 |
IRowEdited edRow = (IRowEdited) selectedRow.get(i); |
113 |
selection.set(edRow.getIndex()); |
114 |
} |
115 |
|
116 |
previousRowSelection.clear(); |
117 |
previousHandlerSelection.clear(); |
118 |
} |
119 |
/**
|
120 |
* @return Returns the selectedRow.
|
121 |
*/
|
122 |
public IFeature[] getSelectedRowsCache() { |
123 |
return (IFeature[]) selectedRow.toArray(new IFeature[0]); |
124 |
} |
125 |
public void selectWithPoint(double x, double y,boolean multipleSelection){ |
126 |
firstPoint = new Point2D.Double(x, y); |
127 |
VectorialEditableAdapter vea = getVEA(); |
128 |
FBitSet selection=null;
|
129 |
try {
|
130 |
selection = vea.getSelection(); |
131 |
|
132 |
if (!multipleSelection) {
|
133 |
clearSelection(SAVEPREVIOUS); |
134 |
} |
135 |
} catch (ReadDriverException e) {
|
136 |
// TODO Auto-generated catch block
|
137 |
e.printStackTrace(); |
138 |
} |
139 |
// Se comprueba si se pincha en una gemometr?a
|
140 |
ViewPort vp=getLayer().getMapContext().getViewPort(); |
141 |
double tam =vp.toMapDistance(SelectionCADTool.tolerance);
|
142 |
Rectangle2D rect = new Rectangle2D.Double(firstPoint.getX() - tam, |
143 |
firstPoint.getY() - tam, tam * 2, tam * 2); |
144 |
|
145 |
String strEPSG = vp.getProjection().getAbrev().substring(5); |
146 |
IRowEdited[] feats;
|
147 |
|
148 |
try {
|
149 |
feats = vea.getFeatures(rect, strEPSG); |
150 |
selection.clear(); |
151 |
BufferedImage selectionImage = new BufferedImage(vp.getImageWidth(), vp.getImageHeight(), BufferedImage.TYPE_INT_ARGB); |
152 |
Graphics2D gs = selectionImage.createGraphics();
|
153 |
BufferedImage handlersImage = new BufferedImage(vp.getImageWidth(), vp.getImageHeight(), BufferedImage.TYPE_INT_ARGB); |
154 |
Graphics2D gh = handlersImage.createGraphics();
|
155 |
for (int i = 0; i < feats.length; i++) { |
156 |
IFeature feat = (IFeature) feats[i].getLinkedRow(); |
157 |
IGeometry geom = feat.getGeometry(); |
158 |
|
159 |
if (geom.intersects(rect)) { // , 0.1)){ |
160 |
selection.set(feats[i].getIndex(), true);
|
161 |
addSelectionCache((DefaultRowEdited)feats[i]); |
162 |
geom.cloneGeometry().draw(gs, vp, DefaultCADTool.selectionSymbol); |
163 |
drawHandlers(geom.cloneGeometry(),gh,vp); |
164 |
} |
165 |
} |
166 |
vea.setSelectionImage(selectionImage); |
167 |
vea.setHandlersImage(handlersImage); |
168 |
} catch (ReadDriverException e) {
|
169 |
// TODO Auto-generated catch block
|
170 |
e.printStackTrace(); |
171 |
} catch (ExpansionFileReadException e) {
|
172 |
// TODO Auto-generated catch block
|
173 |
e.printStackTrace(); |
174 |
} |
175 |
|
176 |
} |
177 |
public void selectWithSecondPoint(double x, double y) { |
178 |
VectorialEditableAdapter vea = getVEA(); |
179 |
FBitSet selection=null;
|
180 |
try {
|
181 |
selection = vea.getSelection(); |
182 |
|
183 |
lastPoint = new Point2D.Double(x, y); |
184 |
selection.clear(); |
185 |
clearSelection(SAVEPREVIOUS); |
186 |
} catch (ReadDriverException e1) {
|
187 |
// TODO Auto-generated catch block
|
188 |
e1.printStackTrace(); |
189 |
} |
190 |
ViewPort vp=getLayer().getMapContext().getViewPort(); |
191 |
double x1;
|
192 |
double y1;
|
193 |
double w1;
|
194 |
double h1;
|
195 |
|
196 |
if (firstPoint.getX() < lastPoint.getX()) {
|
197 |
x1 = firstPoint.getX(); |
198 |
w1 = lastPoint.getX() - firstPoint.getX(); |
199 |
} else {
|
200 |
x1 = lastPoint.getX(); |
201 |
w1 = firstPoint.getX() - lastPoint.getX(); |
202 |
} |
203 |
|
204 |
if (firstPoint.getY() < lastPoint.getY()) {
|
205 |
y1 = firstPoint.getY(); |
206 |
h1 = lastPoint.getY() - firstPoint.getY(); |
207 |
} else {
|
208 |
y1 = lastPoint.getY(); |
209 |
h1 = firstPoint.getY() - lastPoint.getY(); |
210 |
} |
211 |
|
212 |
Rectangle2D rect = new Rectangle2D.Double(x1, y1, w1, h1); |
213 |
|
214 |
String strEPSG = vp.getProjection().getAbrev().substring(5); |
215 |
IRowEdited[] feats;
|
216 |
try {
|
217 |
feats = vea.getFeatures(rect, strEPSG); |
218 |
BufferedImage selectionImage = new BufferedImage(vp.getImageWidth(), vp.getImageHeight(), BufferedImage.TYPE_INT_ARGB); |
219 |
Graphics2D gs = selectionImage.createGraphics();
|
220 |
BufferedImage handlersImage = new BufferedImage(vp.getImageWidth(), vp.getImageHeight(), BufferedImage.TYPE_INT_ARGB); |
221 |
Graphics2D gh = handlersImage.createGraphics();
|
222 |
for (int i = 0; i < feats.length; i++) { |
223 |
IGeometry geom = ((IFeature) feats[i].getLinkedRow()) |
224 |
.getGeometry(); |
225 |
|
226 |
if (firstPoint.getX() < lastPoint.getX()) {
|
227 |
if (rect.contains(geom.getBounds2D())) {
|
228 |
addSelectionCache((DefaultRowEdited)feats[i]); |
229 |
selection.set(feats[i].getIndex(), true);
|
230 |
geom.cloneGeometry().draw(gs, vp, DefaultCADTool.selectionSymbol); |
231 |
drawHandlers(geom.cloneGeometry(),gh,vp); |
232 |
} |
233 |
} else {
|
234 |
if (geom.intersects(rect)) { // , 0.1)){ |
235 |
addSelectionCache((DefaultRowEdited)feats[i]); |
236 |
selection.set(feats[i].getIndex(), true);
|
237 |
geom.cloneGeometry().draw(gs, vp, DefaultCADTool.selectionSymbol); |
238 |
drawHandlers(geom.cloneGeometry(),gh,vp); |
239 |
} |
240 |
} |
241 |
} |
242 |
vea.setSelectionImage(selectionImage); |
243 |
vea.setHandlersImage(handlersImage); |
244 |
} catch (ReadDriverException e) {
|
245 |
// TODO Auto-generated catch block
|
246 |
e.printStackTrace(); |
247 |
} catch (ExpansionFileReadException e) {
|
248 |
// TODO Auto-generated catch block
|
249 |
e.printStackTrace(); |
250 |
} |
251 |
|
252 |
} |
253 |
public void selectInsidePolygon(IGeometry polygon) { |
254 |
VectorialEditableAdapter vea = getVEA(); |
255 |
FBitSet selection=null;
|
256 |
try {
|
257 |
selection = vea.getSelection(); |
258 |
|
259 |
selection.clear(); |
260 |
clearSelection(SAVEPREVIOUS); |
261 |
} catch (ReadDriverException e1) {
|
262 |
// TODO Auto-generated catch block
|
263 |
e1.printStackTrace(); |
264 |
} |
265 |
ViewPort vp=getLayer().getMapContext().getViewPort(); |
266 |
|
267 |
Rectangle2D rect = polygon.getBounds2D();
|
268 |
|
269 |
String strEPSG = vp.getProjection().getAbrev().substring(5); |
270 |
IRowEdited[] feats;
|
271 |
try {
|
272 |
feats = vea.getFeatures(rect, strEPSG); |
273 |
BufferedImage selectionImage = new BufferedImage(vp.getImageWidth(), vp.getImageHeight(), BufferedImage.TYPE_INT_ARGB); |
274 |
Graphics2D gs = selectionImage.createGraphics();
|
275 |
BufferedImage handlersImage = new BufferedImage(vp.getImageWidth(), vp.getImageHeight(), BufferedImage.TYPE_INT_ARGB); |
276 |
Graphics2D gh = handlersImage.createGraphics();
|
277 |
for (int i = 0; i < feats.length; i++) { |
278 |
IGeometry geom = ((IFeature) feats[i].getLinkedRow()) |
279 |
.getGeometry(); |
280 |
if (contains(polygon,geom)) {
|
281 |
addSelectionCache((DefaultRowEdited)feats[i]); |
282 |
selection.set(feats[i].getIndex(), true);
|
283 |
geom.cloneGeometry().draw(gs, vp, DefaultCADTool.selectionSymbol); |
284 |
drawHandlers(geom.cloneGeometry(),gh,vp); |
285 |
} |
286 |
} |
287 |
vea.setSelectionImage(selectionImage); |
288 |
vea.setHandlersImage(handlersImage); |
289 |
} catch (ReadDriverException e) {
|
290 |
// TODO Auto-generated catch block
|
291 |
e.printStackTrace(); |
292 |
} catch (ExpansionFileReadException e) {
|
293 |
// TODO Auto-generated catch block
|
294 |
e.printStackTrace(); |
295 |
} |
296 |
} |
297 |
|
298 |
public void selectCrossPolygon(IGeometry polygon) { |
299 |
VectorialEditableAdapter vea = getVEA(); |
300 |
FBitSet selection=null;
|
301 |
try {
|
302 |
selection = vea.getSelection(); |
303 |
selection.clear(); |
304 |
clearSelection(SAVEPREVIOUS); |
305 |
} catch (ReadDriverException e1) {
|
306 |
// TODO Auto-generated catch block
|
307 |
e1.printStackTrace(); |
308 |
} |
309 |
ViewPort vp=getLayer().getMapContext().getViewPort(); |
310 |
|
311 |
Rectangle2D rect = polygon.getBounds2D();
|
312 |
|
313 |
String strEPSG = vp.getProjection().getAbrev().substring(5); |
314 |
IRowEdited[] feats;
|
315 |
try {
|
316 |
feats = vea.getFeatures(rect, strEPSG); |
317 |
BufferedImage selectionImage = new BufferedImage(vp.getImageWidth(), vp.getImageHeight(), BufferedImage.TYPE_INT_ARGB); |
318 |
Graphics2D gs = selectionImage.createGraphics();
|
319 |
BufferedImage handlersImage = new BufferedImage(vp.getImageWidth(), vp.getImageHeight(), BufferedImage.TYPE_INT_ARGB); |
320 |
Graphics2D gh = handlersImage.createGraphics();
|
321 |
for (int i = 0; i < feats.length; i++) { |
322 |
IGeometry geom = ((IFeature) feats[i].getLinkedRow()) |
323 |
.getGeometry(); |
324 |
if (contains(polygon,geom) || intersects(polygon,geom)) {
|
325 |
addSelectionCache((DefaultRowEdited)feats[i]); |
326 |
selection.set(feats[i].getIndex(), true);
|
327 |
geom.cloneGeometry().draw(gs, vp, DefaultCADTool.selectionSymbol); |
328 |
drawHandlers(geom.cloneGeometry(),gh,vp); |
329 |
} |
330 |
} |
331 |
vea.setSelectionImage(selectionImage); |
332 |
vea.setHandlersImage(handlersImage); |
333 |
} catch (ReadDriverException e) {
|
334 |
// TODO Auto-generated catch block
|
335 |
e.printStackTrace(); |
336 |
} catch (ExpansionFileReadException e) {
|
337 |
// TODO Auto-generated catch block
|
338 |
e.printStackTrace(); |
339 |
} |
340 |
} |
341 |
|
342 |
public void selectOutPolygon(IGeometry polygon) { |
343 |
VectorialEditableAdapter vea = getVEA(); |
344 |
FBitSet selection=null;
|
345 |
try {
|
346 |
selection = vea.getSelection(); |
347 |
selection.clear(); |
348 |
clearSelection(SAVEPREVIOUS); |
349 |
} catch (ReadDriverException e1) {
|
350 |
// TODO Auto-generated catch block
|
351 |
e1.printStackTrace(); |
352 |
} |
353 |
ViewPort vp=getLayer().getMapContext().getViewPort(); |
354 |
|
355 |
try {
|
356 |
BufferedImage selectionImage = new BufferedImage(vp.getImageWidth(), vp.getImageHeight(), BufferedImage.TYPE_INT_ARGB); |
357 |
Graphics2D gs = selectionImage.createGraphics();
|
358 |
BufferedImage handlersImage = new BufferedImage(vp.getImageWidth(), vp.getImageHeight(), BufferedImage.TYPE_INT_ARGB); |
359 |
Graphics2D gh = handlersImage.createGraphics();
|
360 |
for (int i = 0; i < vea.getRowCount(); i++) { |
361 |
IRowEdited rowEd=vea.getRow(i); |
362 |
IGeometry geom = ((IFeature)rowEd.getLinkedRow()) |
363 |
.getGeometry(); |
364 |
if (!contains(polygon,geom) && !intersects(polygon,geom)) {
|
365 |
addSelectionCache((DefaultRowEdited)rowEd); |
366 |
selection.set(rowEd.getIndex(), true);
|
367 |
geom.cloneGeometry().draw(gs, vp, DefaultCADTool.selectionSymbol); |
368 |
drawHandlers(geom.cloneGeometry(),gh,vp); |
369 |
} |
370 |
} |
371 |
vea.setSelectionImage(selectionImage); |
372 |
vea.setHandlersImage(handlersImage); |
373 |
} catch (ReadDriverException e) {
|
374 |
// TODO Auto-generated catch block
|
375 |
e.printStackTrace(); |
376 |
} catch (ExpansionFileReadException e) {
|
377 |
// TODO Auto-generated catch block
|
378 |
e.printStackTrace(); |
379 |
} |
380 |
} |
381 |
public void selectAll() { |
382 |
VectorialEditableAdapter vea = getVEA(); |
383 |
FBitSet selection=null;
|
384 |
try {
|
385 |
selection = vea.getSelection(); |
386 |
selection.clear(); |
387 |
clearSelection(SAVEPREVIOUS); |
388 |
} catch (ReadDriverException e1) {
|
389 |
// TODO Auto-generated catch block
|
390 |
e1.printStackTrace(); |
391 |
} |
392 |
ViewPort vp=getLayer().getMapContext().getViewPort(); |
393 |
|
394 |
try {
|
395 |
BufferedImage selectionImage = new BufferedImage(vp.getImageWidth(), vp.getImageHeight(), BufferedImage.TYPE_INT_ARGB); |
396 |
Graphics2D gs = selectionImage.createGraphics();
|
397 |
BufferedImage handlersImage = new BufferedImage(vp.getImageWidth(), vp.getImageHeight(), BufferedImage.TYPE_INT_ARGB); |
398 |
Graphics2D gh = handlersImage.createGraphics();
|
399 |
for (int i = 0; i < vea.getRowCount(); i++) { |
400 |
IRowEdited rowEd=vea.getRow(i); |
401 |
IGeometry geom = ((IFeature)rowEd.getLinkedRow()) |
402 |
.getGeometry(); |
403 |
addSelectionCache((DefaultRowEdited)rowEd); |
404 |
selection.set(rowEd.getIndex(), true);
|
405 |
geom.cloneGeometry().draw(gs, vp, DefaultCADTool.selectionSymbol); |
406 |
drawHandlers(geom.cloneGeometry(),gh,vp); |
407 |
} |
408 |
vea.setSelectionImage(selectionImage); |
409 |
vea.setHandlersImage(handlersImage); |
410 |
} catch (ReadDriverException e) {
|
411 |
// TODO Auto-generated catch block
|
412 |
e.printStackTrace(); |
413 |
} catch (ExpansionFileReadException e) {
|
414 |
// TODO Auto-generated catch block
|
415 |
e.printStackTrace(); |
416 |
} |
417 |
} |
418 |
|
419 |
public void refreshSelectionCache(Point2D firstPoint,CADToolAdapter cta){ |
420 |
VectorialEditableAdapter vea = getVEA(); |
421 |
FBitSet selection=null;
|
422 |
try {
|
423 |
selection = vea.getSelection(); |
424 |
// Cogemos las entidades seleccionadas
|
425 |
clearSelection(SAVEPREVIOUS); |
426 |
} catch (ReadDriverException e1) {
|
427 |
// TODO Auto-generated catch block
|
428 |
e1.printStackTrace(); |
429 |
} |
430 |
double min = java.lang.Double.MAX_VALUE;
|
431 |
ViewPort vp=getLayer().getMapContext().getViewPort(); |
432 |
BufferedImage selectionImage = new BufferedImage(vp.getImageWidth(), vp.getImageHeight(), BufferedImage.TYPE_INT_ARGB); |
433 |
Graphics2D gs = selectionImage.createGraphics();
|
434 |
BufferedImage handlersImage = new BufferedImage(vp.getImageWidth(), vp.getImageHeight(), BufferedImage.TYPE_INT_ARGB); |
435 |
Graphics2D gh = handlersImage.createGraphics();
|
436 |
for (int i = selection.nextSetBit(0); i >= 0; i = selection |
437 |
.nextSetBit(i + 1)) {
|
438 |
Handler[] handlers = null; |
439 |
|
440 |
DefaultRowEdited dre = null;
|
441 |
try {
|
442 |
dre = (DefaultRowEdited)(vea.getRow(i)); |
443 |
IFeature feat=(DefaultFeature)dre.getLinkedRow(); |
444 |
IGeometry geom=feat.getGeometry(); |
445 |
handlers = geom.getHandlers(IGeometry.SELECTHANDLER); |
446 |
addSelectionCache(dre); |
447 |
geom.cloneGeometry().draw(gs, vp, DefaultCADTool.selectionSymbol); |
448 |
drawHandlers(geom.cloneGeometry(),gh,vp); |
449 |
// y miramos los handlers de cada entidad seleccionada
|
450 |
min = cta.getMapControl().getViewPort() |
451 |
.toMapDistance(SelectionCADTool.tolerance); |
452 |
for (int j = 0; j < handlers.length; j++) { |
453 |
Point2D handlerPoint = handlers[j].getPoint();
|
454 |
double distance = firstPoint.distance(handlerPoint);
|
455 |
if (distance <= min) {
|
456 |
min = distance; |
457 |
selectedHandler.add(handlers[j]); |
458 |
} |
459 |
} |
460 |
} catch (ReadDriverException e) {
|
461 |
// TODO Auto-generated catch block
|
462 |
e.printStackTrace(); |
463 |
} catch (ExpansionFileReadException e) {
|
464 |
// TODO Auto-generated catch block
|
465 |
e.printStackTrace(); |
466 |
} |
467 |
} |
468 |
vea.setSelectionImage(selectionImage); |
469 |
vea.setHandlersImage(handlersImage); |
470 |
} |
471 |
|
472 |
public void drawHandlers(IGeometry geom, Graphics2D gs, ViewPort vp) { |
473 |
if (!(getLayer() instanceof FLyrAnnotation)){ |
474 |
Handler[] handlers = geom.getHandlers(IGeometry.SELECTHANDLER); |
475 |
FGraphicUtilities.DrawHandlers(gs, vp.getAffineTransform(), handlers,DefaultCADTool.handlerSymbol); |
476 |
} |
477 |
} |
478 |
public Image getSelectionImage(){ |
479 |
return getVEA().getSelectionImage();
|
480 |
} |
481 |
public Image getHandlersImage() { |
482 |
return getVEA().getHandlersImage();
|
483 |
} |
484 |
public VectorialEditableAdapter getVEA(){
|
485 |
if (((FLyrVect)getLayer()).getSource() instanceof VectorialEditableAdapter) |
486 |
return (VectorialEditableAdapter)((FLyrVect)getLayer()).getSource();
|
487 |
return null; |
488 |
} |
489 |
|
490 |
public void beforeLayerDraw(LayerDrawEvent e) throws CancelationException { |
491 |
if (((FLyrVect) getLayer()).getSource() instanceof VectorialEditableAdapter) { |
492 |
VectorialEditableAdapter vea = (VectorialEditableAdapter) ((FLyrVect) getLayer()) |
493 |
.getSource(); |
494 |
ViewPort vp = getLayer().getMapContext().getViewPort(); |
495 |
BufferedImage selectionImage = new BufferedImage( |
496 |
vp.getImageWidth(), vp.getImageHeight(), |
497 |
BufferedImage.TYPE_INT_ARGB);
|
498 |
BufferedImage handlersImage = new BufferedImage(vp.getImageWidth(), |
499 |
vp.getImageHeight(), BufferedImage.TYPE_INT_ARGB);
|
500 |
Graphics2D gs = selectionImage.createGraphics();
|
501 |
Graphics2D gh = handlersImage.createGraphics();
|
502 |
for (int i = 0; i < selectedRow.size(); i++) { |
503 |
IFeature feat = (IFeature) ((IRowEdited) selectedRow.get(i)) |
504 |
.getLinkedRow(); |
505 |
IGeometry geom = feat.getGeometry(); |
506 |
geom.cloneGeometry().draw(gs, vp, DefaultCADTool.selectionSymbol); |
507 |
drawHandlers(geom.cloneGeometry(), gh, vp); |
508 |
} |
509 |
vea.setSelectionImage(selectionImage); |
510 |
vea.setHandlersImage(handlersImage); |
511 |
} |
512 |
} |
513 |
|
514 |
public void afterLayerDraw(LayerDrawEvent e) throws CancelationException { |
515 |
} |
516 |
|
517 |
public void beforeGraphicLayerDraw(LayerDrawEvent e) throws CancelationException { |
518 |
} |
519 |
|
520 |
public void afterLayerGraphicDraw(LayerDrawEvent e) throws CancelationException { |
521 |
} |
522 |
private static boolean contains(IGeometry g1,IGeometry g2) { |
523 |
Geometry geometry1=g1.toJTSGeometry(); |
524 |
Geometry geometry2=g2.toJTSGeometry(); |
525 |
if (geometry1==null || geometry2==null)return false; |
526 |
return geometry1.contains(geometry2);
|
527 |
} |
528 |
private static boolean intersects(IGeometry g1,IGeometry g2) { |
529 |
Geometry geometry1=g1.toJTSGeometry(); |
530 |
Geometry geometry2=g2.toJTSGeometry(); |
531 |
if (geometry1==null || geometry2==null)return false; |
532 |
return geometry1.intersects(geometry2);
|
533 |
} |
534 |
|
535 |
public void activationGained(LayerEvent e) { |
536 |
if (ViewCommandStackExtension.csd!=null){ |
537 |
ViewCommandStackExtension.csd.setModel(((IEditableSource) ((FLyrVect)getLayer()).getSource()) |
538 |
.getCommandRecord()); |
539 |
} |
540 |
IWindow window=PluginServices.getMDIManager().getActiveWindow(); |
541 |
if (window instanceof View){ |
542 |
View view=(View)window; |
543 |
if (e.getSource().isEditing()){
|
544 |
view.showConsole(); |
545 |
} |
546 |
} |
547 |
if (cadtool!=null){ |
548 |
CADExtension.getCADToolAdapter().setCadTool(cadtool); |
549 |
PluginServices.getMainFrame().setSelectedTool(cadtool.toString()); |
550 |
StartEditing.startCommandsApplicable(null,(FLyrVect)getLayer());
|
551 |
CADExtension.initFocus(); |
552 |
} |
553 |
|
554 |
} |
555 |
|
556 |
public void activationLost(LayerEvent e) { |
557 |
try{
|
558 |
cadtool=CADExtension.getCADTool(); |
559 |
IWindow window=PluginServices.getMDIManager().getActiveWindow(); |
560 |
if (window instanceof View){ |
561 |
View view=(View)window; |
562 |
view.hideConsole(); |
563 |
} |
564 |
}catch (EmptyStackException e1) { |
565 |
cadtool=new SelectionCADTool();
|
566 |
cadtool.init(); |
567 |
} |
568 |
|
569 |
} |
570 |
|
571 |
public ArrayList getSnappers() { |
572 |
return snappers;
|
573 |
} |
574 |
|
575 |
public ArrayList getLayersToSnap() { |
576 |
return layersToSnap;
|
577 |
} |
578 |
|
579 |
public void setLayersToSnap(ArrayList layersToSnap) { |
580 |
this.layersToSnap = layersToSnap;
|
581 |
|
582 |
} |
583 |
|
584 |
public void setSelectionCache(boolean savePrevious,ArrayList selectedRowAux) { |
585 |
try {
|
586 |
clearSelection(savePrevious); |
587 |
VectorialEditableAdapter vea=getVEA(); |
588 |
FBitSet selection=vea.getSelection(); |
589 |
selectedRow.addAll(selectedRowAux); |
590 |
for (int i = 0;i < selectedRow.size(); i++) { |
591 |
IRowEdited edRow = (IRowEdited) selectedRow.get(i); |
592 |
selection.set(edRow.getIndex()); |
593 |
} |
594 |
FLyrVect active = (FLyrVect)getLayer(); |
595 |
active.getRecordset().getSelectionSupport().fireSelectionEvents(); |
596 |
} catch (ReadDriverException e) {
|
597 |
// TODO Auto-generated catch block
|
598 |
e.printStackTrace(); |
599 |
} |
600 |
} |
601 |
|
602 |
public void setLegend(Legend legend) { |
603 |
this.legend=legend;
|
604 |
} |
605 |
public Legend getLegend() {
|
606 |
return legend;
|
607 |
} |
608 |
|
609 |
public void addSelectionCache(DefaultRowEdited edited) { |
610 |
selectedRow.add(edited); |
611 |
} |
612 |
|
613 |
public boolean getPreviousSelection() { |
614 |
return !selectedRow.isEmpty();
|
615 |
} |
616 |
|
617 |
public void selectionChanged(SelectionEvent e) { |
618 |
try {
|
619 |
if (getVEA().getSelection().isEmpty())
|
620 |
clearSelection(NOTSAVEPREVIOUS); |
621 |
} catch (ReadDriverException e1) {
|
622 |
// TODO Auto-generated catch block
|
623 |
e1.printStackTrace(); |
624 |
} |
625 |
} |
626 |
} |