Statistics
| Revision:

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
}