Statistics
| Revision:

svn-gvsig-desktop / branches / v2_0_0_prep / extensions / extEditing / src / com / iver / cit / gvsig / layers / VectorialLayerEdited.java @ 27026

History | View | Annotate | Download (26.1 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.image.BufferedImage;
7
import java.util.ArrayList;
8
import java.util.ConcurrentModificationException;
9
import java.util.EmptyStackException;
10
import java.util.Iterator;
11

    
12
import org.cresques.cts.ICoordTrans;
13
import org.gvsig.fmap.dal.exception.DataException;
14
import org.gvsig.fmap.dal.exception.ReadException;
15
import org.gvsig.fmap.dal.feature.Feature;
16
import org.gvsig.fmap.dal.feature.FeatureSelection;
17
import org.gvsig.fmap.dal.feature.FeatureSet;
18
import org.gvsig.fmap.dal.feature.FeatureStore;
19
import org.gvsig.fmap.geom.handler.Handler;
20
import org.gvsig.fmap.geom.operation.Draw;
21
import org.gvsig.fmap.geom.operation.DrawOperationContext;
22
import org.gvsig.fmap.geom.operation.GeometryOperationException;
23
import org.gvsig.fmap.geom.operation.GeometryOperationNotSupportedException;
24
import org.gvsig.fmap.geom.operation.tojts.ToJTS;
25
import org.gvsig.fmap.geom.primitive.Envelope;
26
import org.gvsig.fmap.geom.primitive.impl.DefaultEnvelope;
27
import org.gvsig.fmap.geom.util.UtilFunctions;
28
import org.gvsig.fmap.mapcontext.ViewPort;
29
import org.gvsig.fmap.mapcontext.layers.CancelationException;
30
import org.gvsig.fmap.mapcontext.layers.FLayer;
31
import org.gvsig.fmap.mapcontext.layers.LayerDrawEvent;
32
import org.gvsig.fmap.mapcontext.layers.LayerDrawingListener;
33
import org.gvsig.fmap.mapcontext.layers.LayerEvent;
34
import org.gvsig.fmap.mapcontext.layers.vectorial.FLyrVect;
35
import org.gvsig.fmap.mapcontext.rendering.legend.ILegend;
36
import org.gvsig.fmap.mapcontext.rendering.symbols.FGraphicUtilities;
37
import org.gvsig.fmap.mapcontrol.MapControl;
38
import org.gvsig.tools.observer.Observable;
39
import org.gvsig.tools.observer.Observer;
40

    
41
import com.iver.andami.PluginServices;
42
import com.iver.andami.messages.NotificationManager;
43
import com.iver.andami.ui.mdiManager.IWindow;
44
import com.iver.cit.gvsig.CADExtension;
45
import com.iver.cit.gvsig.EditionChangeManager;
46
import com.iver.cit.gvsig.StartEditing;
47
import com.iver.cit.gvsig.ViewCommandStackExtension;
48
import com.iver.cit.gvsig.gui.cad.CADTool;
49
import com.iver.cit.gvsig.gui.cad.DefaultCADTool;
50
import com.iver.cit.gvsig.gui.cad.tools.SelectionCADTool;
51
import com.iver.cit.gvsig.project.documents.view.gui.View;
52
import com.vividsolutions.jts.geom.Geometry;
53

    
54
public class VectorialLayerEdited extends DefaultLayerEdited implements
55
                LayerDrawingListener, Observer {
56
        private ArrayList selectedHandler = new ArrayList();
57
        private Point2D lastPoint;
58
        private Point2D firstPoint;
59
        private CADTool cadtool = null;
60

    
61
        // private ArrayList snappers = new ArrayList();
62
        // private ArrayList layersToSnap = new ArrayList();
63
        private ILegend legend;
64
        /** Selecci?n previa* */
65
//        private ArrayList previousRowSelection = new ArrayList();
66
//        private ArrayList previousHandlerSelection = new ArrayList();
67
        private Image imageSelection;
68
        private Image imageHandlers;
69
        public static final boolean SAVEPREVIOUS = true;
70
        public static final boolean NOTSAVEPREVIOUS = false;
71
        private EditionChangeManager echm=null;
72

    
73
        public VectorialLayerEdited(FLayer lyr) {
74
                super(lyr);
75
                lyr.getMapContext().addLayerDrawingListener(this);
76
                // Por defecto, siempre hacemos snapping sobre la capa en edici?n.
77
                lyr.getMapContext().getLayersToSnap().add(lyr);
78
                try {
79
                        ((FLyrVect) lyr).getFeatureStore().addObserver(this);
80
                } catch (ReadException e) {
81
                        NotificationManager.addError(e.getMessage(), e);
82
                }
83
        }
84

    
85
        public ArrayList getSelectedHandler() {
86
                return selectedHandler;
87
        }
88

    
89
        public void clearSelection(boolean savePrevious) throws DataException {
90
                if (getFeatureStore() == null)
91
                        return;
92
                FeatureSelection selection = getFeatureStore().getFeatureSelection();
93

    
94
//                if (!selection.isEmpty() && savePrevious) {
95
//                        previousRowSelection.clear();
96
//                        previousHandlerSelection.clear();
97
//                }
98
//                if (savePrevious) {
99
//                        previousRowSelection.addAll(selection);
100
//                        previousHandlerSelection.addAll(selectedHandler);
101
//                }
102
                selectedHandler.clear();
103
                selection.deselectAll();
104
        }
105

    
106
//        public void restorePreviousSelection() throws ReadException {
107
//                FeatureSet selection = (FeatureSet) getFeatureStore().getSelection();
108
//                selection.dispose();
109
//                selectedHandler.clear();
110
//                selection.addAll(previousRowSelection);
111
//                selectedHandler.addAll(previousHandlerSelection);
112
//                // VectorialEditableAdapter vea=getVEA();
113
//                // FBitSet selection=vea.getSelection();
114
//                //
115
//                // selection.clear();
116
//                // selectedRow.clear();
117
//                // selectedHandler.clear();
118
//                //
119
//                // selectedRow.addAll(previousRowSelection);
120
//                // selectedHandler.addAll(previousHandlerSelection);
121
//                // for (int i = 0;i < selectedRow.size(); i++) {
122
//                // IRowEdited edRow = (IRowEdited) selectedRow.get(i);
123
//                // selection.set(edRow.getIndex());
124
//                // }
125
//
126
//                previousRowSelection.clear();
127
//                previousHandlerSelection.clear();
128
//        }
129

    
130
        public void selectWithPoint(double x, double y, boolean multipleSelection) {
131
                try {
132
                        firstPoint = new Point2D.Double(x, y);
133
                        FeatureStore featureStore = getFeatureStore();
134
                        FeatureSelection selection = (FeatureSelection) featureStore
135
                                        .getSelection();
136
                        if (!multipleSelection) {
137
                                clearSelection(SAVEPREVIOUS);
138
                        }
139
                        // Se comprueba si se pincha en una gemometr?a
140
                        ViewPort vp = getLayer().getMapContext().getViewPort();
141
                        double tol = vp.toMapDistance(MapControl.tolerance);
142

    
143
                        FeatureSet newSelection = ((FLyrVect) getLayer()).queryByPoint(
144
                                        firstPoint, tol, getFeatureStore().getDefaultFeatureType());
145

    
146
                        String strEPSG = vp.getProjection().getAbrev();
147
                        BufferedImage selectionImage = null;
148
                        BufferedImage handlersImage = null;
149
                        if (multipleSelection && getSelectionImage()!=null && getHandlersImage()!=null) {
150
                                selectionImage=(BufferedImage)getSelectionImage();
151
                                handlersImage = (BufferedImage)getHandlersImage();
152
                        }else{
153
                                selectionImage = new BufferedImage(vp.getImageWidth(), vp.getImageHeight(), BufferedImage.TYPE_INT_ARGB);
154
                                handlersImage = new BufferedImage(vp.getImageWidth(), vp.getImageHeight(), BufferedImage.TYPE_INT_ARGB);
155
                        }
156

    
157
                        Graphics2D gs = selectionImage.createGraphics();
158
                        Graphics2D gh = handlersImage.createGraphics();
159
                        Iterator iterator = newSelection.iterator();
160
                        while (iterator.hasNext()) {
161
                                Feature feature = (Feature) iterator.next();
162
                                org.gvsig.fmap.geom.Geometry geom = (org.gvsig.fmap.geom.Geometry) feature
163
                                                .getDefaultGeometry();
164
                                if (geom == null) {
165
                                        continue;
166
                                }
167
                                org.gvsig.fmap.geom.Geometry geomReproject = geom
168
                                                .cloneGeometry();
169
                                // if (ct!=null)
170
                                // geomReproject.reProject(ct);
171
                                // if (geomReproject.intersects(new
172
                                // Rectangle2D.Double(rect.getMinimum(0),rect.getMaximum(0),rect.getMinimum(1)-rect.getMinimum(0),rect.getMaximum(1)-rect.getMaximum(0))))
173
                                // { // , 0.1)){
174
                                selection.select(feature);
175
                                // selection.set(feats[i].getIndex(), true);
176
                                // selectedRow.add(feats[i]);
177
                                DrawOperationContext doc = new DrawOperationContext();
178
                                doc.setGraphics(gs);
179
                                doc.setViewPort(vp);
180
                                doc.setSymbol(DefaultCADTool.selectionSymbol);
181
                                drawHandlers(geomReproject.cloneGeometry(), gh, vp);
182
                                geomReproject.invokeOperation(Draw.CODE, doc);// cloneGeometry().draw(gs,
183
                                // vp,
184
                                // DefaultCADTool.selectionSymbol);
185

    
186
                        }
187
                        setSelectionImage(selectionImage);
188
                        setHandlersImage(handlersImage);
189
                } catch (ReadException e) {
190
                        NotificationManager.addError(e.getMessage(), e);
191
                } catch (GeometryOperationNotSupportedException e) {
192
                        NotificationManager.addError(e.getMessage(), e);
193
                } catch (GeometryOperationException e) {
194
                        NotificationManager.addError(e.getMessage(), e);
195
                } catch (DataException e) {
196
                        NotificationManager.addError(e.getMessage(), e);
197
                }
198
        }
199

    
200
        public void selectWithSecondPoint(double x, double y) {
201
                try {
202
                        FeatureStore featureStore = getFeatureStore();
203

    
204
                        lastPoint = new Point2D.Double(x, y);
205
                        clearSelection(SAVEPREVIOUS);
206

    
207
                        ViewPort vp = getLayer().getMapContext().getViewPort();
208
                        double x1;
209
                        double y1;
210
                        double w1;
211
                        double h1;
212

    
213
                        if (firstPoint.getX() < lastPoint.getX()) {
214
                                x1 = firstPoint.getX();
215
                                w1 = lastPoint.getX() - firstPoint.getX();
216
                        } else {
217
                                x1 = lastPoint.getX();
218
                                w1 = firstPoint.getX() - lastPoint.getX();
219
                        }
220

    
221
                        if (firstPoint.getY() < lastPoint.getY()) {
222
                                y1 = firstPoint.getY();
223
                                h1 = lastPoint.getY() - firstPoint.getY();
224
                        } else {
225
                                y1 = lastPoint.getY();
226
                                h1 = firstPoint.getY() - lastPoint.getY();
227
                        }
228

    
229
                        Envelope envelope = UtilFunctions.createEnvelope(x1, y1, x1 + w1, y1 + h1);
230
                        String strEPSG = vp.getProjection().getAbrev();
231
                        BufferedImage selectionImage = new BufferedImage(
232
                                        vp.getImageWidth(), vp.getImageHeight(),
233
                                        BufferedImage.TYPE_INT_ARGB);
234
                        Graphics2D gs = selectionImage.createGraphics();
235
                        BufferedImage handlersImage = new BufferedImage(vp.getImageWidth(),
236
                                        vp.getImageHeight(), BufferedImage.TYPE_INT_ARGB);
237
                        Graphics2D gh = handlersImage.createGraphics();
238
                        ICoordTrans ct = getLayer().getCoordTrans();
239

    
240
                        Iterator iterator = ((FLyrVect) getLayer()).queryByEnvelope(
241
                                        envelope, featureStore.getDefaultFeatureType()).iterator();
242
                        DrawOperationContext doc = new DrawOperationContext();
243
                        doc.setGraphics(gs);
244
                        doc.setViewPort(vp);
245
                        doc.setSymbol(DefaultCADTool.selectionSymbol);
246
                        while (iterator.hasNext()) {
247
                                Feature feature = (Feature) iterator.next();
248
                                org.gvsig.fmap.geom.Geometry geom = (org.gvsig.fmap.geom.Geometry) feature
249
                                                .getDefaultGeometry();
250

    
251
                                if (geom == null) {
252
                                        continue;
253
                                }
254
                                org.gvsig.fmap.geom.Geometry geomReproject = geom
255
                                                .cloneGeometry();
256
                                if (ct != null)
257
                                        geomReproject.reProject(ct);
258

    
259
                                if (firstPoint.getX() < lastPoint.getX()) {
260
                                        if (envelope.contains(geomReproject.getEnvelope())) {
261
                                                ((FeatureSelection) featureStore.getSelection())
262
                                                                .select(feature);
263
                                                geom.cloneGeometry().invokeOperation(Draw.CODE, doc);
264
                                                drawHandlers(geom.cloneGeometry(), gh, vp);
265
                                        }
266
                                } else {
267
                                        if (geomReproject.getEnvelope().intersects(envelope.getGeometry()
268
                                                        .getEnvelope())) { // , 0.1)){
269
                                                ((FeatureSelection) featureStore.getSelection())
270
                                                                .select(feature);
271
                                                geom.cloneGeometry().invokeOperation(Draw.CODE, doc);
272
                                                drawHandlers(geom.cloneGeometry(), gh, vp);
273
                                        }
274
                                }
275
                        }
276
                        setSelectionImage(selectionImage);
277
                        setHandlersImage(handlersImage);
278
                } catch (ReadException e) {
279
                        NotificationManager.addError(e.getMessage(), e);
280
                } catch (GeometryOperationNotSupportedException e) {
281
                        NotificationManager.addError(e.getMessage(), e);
282
                } catch (GeometryOperationException e) {
283
                        NotificationManager.addError(e.getMessage(), e);
284
                } catch (DataException e) {
285
                        NotificationManager.addError(e.getMessage(), e);
286
                }
287
        }
288

    
289
        public void selectInsidePolygon(org.gvsig.fmap.geom.Geometry polygon) {
290
                try {
291
                        FeatureStore featureStore = getFeatureStore();
292
                        clearSelection(SAVEPREVIOUS);
293
                        ViewPort vp = getLayer().getMapContext().getViewPort();
294
                        Envelope envelope = polygon.getEnvelope();
295

    
296
                        String strEPSG = vp.getProjection().getAbrev();
297
                        BufferedImage selectionImage = new BufferedImage(
298
                                vp.getImageWidth(), vp.getImageHeight(),
299
                                        BufferedImage.TYPE_INT_ARGB);
300
                        Graphics2D gs = selectionImage.createGraphics();
301
                        BufferedImage handlersImage = new BufferedImage(vp.getImageWidth(),
302
                                        vp.getImageHeight(), BufferedImage.TYPE_INT_ARGB);
303
                        Graphics2D gh = handlersImage.createGraphics();
304
                        ICoordTrans ct = getLayer().getCoordTrans();
305
                        Iterator iterator = ((FLyrVect) getLayer()).queryByEnvelope(
306
                                        envelope, featureStore.getDefaultFeatureType()).iterator();
307
                        DrawOperationContext doc = new DrawOperationContext();
308
                        doc.setGraphics(gs);
309
                        doc.setViewPort(vp);
310
                        doc.setSymbol(DefaultCADTool.selectionSymbol);
311
                        while (iterator.hasNext()) {
312
                                Feature feature = (Feature) iterator.next();
313
                                org.gvsig.fmap.geom.Geometry geom = (org.gvsig.fmap.geom.Geometry) feature
314
                                                .getDefaultGeometry();
315
                                if (geom == null) {
316
                                        continue;
317
                                }
318
                                org.gvsig.fmap.geom.Geometry geomReproject = geom
319
                                                .cloneGeometry();
320
                                if (ct != null)
321
                                        geomReproject.reProject(ct);
322
                                if (contains(polygon, geomReproject)) {
323
                                        ((FeatureSelection) featureStore.getSelection())
324
                                                        .select(feature);
325
                                        geom.cloneGeometry().invokeOperation(Draw.CODE, doc);
326
                                        drawHandlers(geom.cloneGeometry(), gh, vp);
327
                                }
328
                        }
329
                        setSelectionImage(selectionImage);
330
                        setHandlersImage(handlersImage);
331
                } catch (ReadException e) {
332
                        NotificationManager.addError(e.getMessage(), e);
333
                } catch (DataException e) {
334
                        NotificationManager.addError(e.getMessage(), e);
335
                } catch (GeometryOperationNotSupportedException e) {
336
                        NotificationManager.addError(e.getMessage(), e);
337
                } catch (GeometryOperationException e) {
338
                        NotificationManager.addError(e.getMessage(), e);
339
                }
340
        }
341

    
342
        public void selectCrossPolygon(org.gvsig.fmap.geom.Geometry polygon) {
343
                try {
344
                        FeatureStore featureStore = getFeatureStore();
345
                        clearSelection(SAVEPREVIOUS);
346
                        ViewPort vp = getLayer().getMapContext().getViewPort();
347
                        Envelope envelope = polygon.getEnvelope();
348

    
349
                        String strEPSG = vp.getProjection().getAbrev();
350
                        BufferedImage selectionImage = new BufferedImage(
351
                                        vp.getImageWidth(), vp.getImageHeight(),
352
                                        BufferedImage.TYPE_INT_ARGB);
353
                        Graphics2D gs = selectionImage.createGraphics();
354
                        BufferedImage handlersImage = new BufferedImage(vp.getImageWidth(),
355
                                        vp.getImageHeight(), BufferedImage.TYPE_INT_ARGB);
356
                        Graphics2D gh = handlersImage.createGraphics();
357
                        ICoordTrans ct = getLayer().getCoordTrans();
358
                        Iterator iterator = ((FLyrVect) getLayer()).queryByEnvelope(
359
                                        envelope, featureStore.getDefaultFeatureType()).iterator();
360

    
361
                        DrawOperationContext doc = new DrawOperationContext();
362
                        doc.setGraphics(gs);
363
                        doc.setViewPort(vp);
364
                        doc.setSymbol(DefaultCADTool.selectionSymbol);
365
                        while (iterator.hasNext()) {
366
                                Feature feature = (Feature) iterator.next();
367
                                org.gvsig.fmap.geom.Geometry geom = (org.gvsig.fmap.geom.Geometry) feature
368
                                                .getDefaultGeometry();
369
                                if (geom == null) {
370
                                        continue;
371
                                }
372
                                org.gvsig.fmap.geom.Geometry geomReproject = geom
373
                                                .cloneGeometry();
374
                                if (ct != null)
375
                                        geomReproject.reProject(ct);
376
                                if (contains(polygon, geomReproject)
377
                                                || intersects(polygon, geomReproject)) {
378
                                        ((FeatureSelection) featureStore.getSelection())
379
                                                        .select(feature);
380
                                        geom.cloneGeometry().invokeOperation(Draw.CODE, doc);
381
                                        drawHandlers(geom.cloneGeometry(), gh, vp);
382
                                }
383
                        }
384
                        setSelectionImage(selectionImage);
385
                        setHandlersImage(handlersImage);
386
                } catch (ReadException e) {
387
                        NotificationManager.addError(e.getMessage(), e);
388
                } catch (DataException e) {
389
                        NotificationManager.addError(e.getMessage(), e);
390
                } catch (GeometryOperationNotSupportedException e) {
391
                        NotificationManager.addError(e.getMessage(), e);
392
                } catch (GeometryOperationException e) {
393
                        NotificationManager.addError(e.getMessage(), e);
394
                }
395
        }
396

    
397
        public void selectOutPolygon(org.gvsig.fmap.geom.Geometry polygon) {
398
                try {
399
                        FeatureStore featureStore = getFeatureStore();
400
                        clearSelection(SAVEPREVIOUS);
401
                        ViewPort vp = getLayer().getMapContext().getViewPort();
402
                        Envelope envelope = polygon.getEnvelope();
403

    
404
                        String strEPSG = vp.getProjection().getAbrev();
405
                        BufferedImage selectionImage = new BufferedImage(
406
                                        vp.getImageWidth(), vp.getImageHeight(),
407
                                        BufferedImage.TYPE_INT_ARGB);
408
                        Graphics2D gs = selectionImage.createGraphics();
409
                        BufferedImage handlersImage = new BufferedImage(vp.getImageWidth(),
410
                                        vp.getImageHeight(), BufferedImage.TYPE_INT_ARGB);
411
                        Graphics2D gh = handlersImage.createGraphics();
412
                        ICoordTrans ct = getLayer().getCoordTrans();
413
                        Iterator iterator = ((FLyrVect) getLayer()).queryByEnvelope(
414
                                        envelope, featureStore.getDefaultFeatureType()).iterator();
415

    
416
                        DrawOperationContext doc = new DrawOperationContext();
417
                        doc.setGraphics(gs);
418
                        doc.setViewPort(vp);
419
                        doc.setSymbol(DefaultCADTool.selectionSymbol);
420
                        while (iterator.hasNext()) {
421
                                Feature feature = (Feature) iterator.next();
422
                                org.gvsig.fmap.geom.Geometry geom = (org.gvsig.fmap.geom.Geometry) feature
423
                                                .getDefaultGeometry();
424
                                if (geom == null) {
425
                                        continue;
426
                                }
427
                                org.gvsig.fmap.geom.Geometry geomReproject = geom
428
                                                .cloneGeometry();
429
                                if (ct != null)
430
                                        geomReproject.reProject(ct);
431
                                if (!contains(polygon, geomReproject)
432
                                                && !intersects(polygon, geomReproject)) {
433
                                        ((FeatureSelection) featureStore.getSelection())
434
                                                        .select(feature);
435
                                        geom.cloneGeometry().invokeOperation(Draw.CODE, doc);
436
                                        drawHandlers(geom.cloneGeometry(), gh, vp);
437
                                }
438
                        }
439
                        setSelectionImage(selectionImage);
440
                        setHandlersImage(handlersImage);
441
                } catch (ReadException e) {
442
                        NotificationManager.addError(e.getMessage(), e);
443
                } catch (DataException e) {
444
                        NotificationManager.addError(e.getMessage(), e);
445
                } catch (GeometryOperationNotSupportedException e) {
446
                        NotificationManager.addError(e.getMessage(), e);
447
                } catch (GeometryOperationException e) {
448
                        NotificationManager.addError(e.getMessage(), e);
449
                }
450
        }
451

    
452
        public void selectAll() {
453
                try {
454
                        FeatureStore featureStore = getFeatureStore();
455
                        clearSelection(SAVEPREVIOUS);
456
                        ViewPort vp = getLayer().getMapContext().getViewPort();
457
                        BufferedImage selectionImage = new BufferedImage(
458
                                        vp.getImageWidth(), vp.getImageHeight(),
459
                                        BufferedImage.TYPE_INT_ARGB);
460
                        Graphics2D gs = selectionImage.createGraphics();
461
                        BufferedImage handlersImage = new BufferedImage(vp.getImageWidth(),
462
                                        vp.getImageHeight(), BufferedImage.TYPE_INT_ARGB);
463
                        Graphics2D gh = handlersImage.createGraphics();
464
                        ICoordTrans ct = getLayer().getCoordTrans();
465
                        FeatureSet fCollection = (FeatureSet) featureStore.getDataSet();
466
                        Iterator iterator = fCollection.iterator();
467
                        featureStore.setSelection(fCollection);
468

    
469
                        DrawOperationContext doc = new DrawOperationContext();
470
                        doc.setGraphics(gs);
471
                        doc.setViewPort(vp);
472
                        doc.setSymbol(DefaultCADTool.selectionSymbol);
473

    
474
                        while (iterator.hasNext()) {
475
                                Feature feature = (Feature) iterator.next();
476
                                org.gvsig.fmap.geom.Geometry geom = (org.gvsig.fmap.geom.Geometry) feature
477
                                                .getDefaultGeometry();
478
                                if (ct != null)
479
                                        geom.reProject(ct);
480
                                geom.cloneGeometry().invokeOperation(Draw.CODE, doc);
481
                                drawHandlers(geom.cloneGeometry(), gh, vp);
482
                        }
483
                        setSelectionImage(selectionImage);
484
                        setHandlersImage(handlersImage);
485
                } catch (ReadException e) {
486
                        NotificationManager.addError(e.getMessage(), e);
487
                } catch (DataException e) {
488
                        NotificationManager.addError(e.getMessage(), e);
489
                } catch (GeometryOperationNotSupportedException e) {
490
                        NotificationManager.addError(e.getMessage(), e);
491
                } catch (GeometryOperationException e) {
492
                        NotificationManager.addError(e.getMessage(), e);
493
                }
494
        }
495

    
496
//        public void refreshSelectionCache(Point2D firstPoint, CADToolAdapter cta) {
497
//                try {
498
//                        clearSelection(SAVEPREVIOUS);
499
//                        double min = java.lang.Double.MAX_VALUE;
500
//                        ViewPort vp = getLayer().getMapContext().getViewPort();
501
//                        BufferedImage selectionImage = new BufferedImage(
502
//                                        vp.getImageWidth(), vp.getImageHeight(),
503
//                                        BufferedImage.TYPE_INT_ARGB);
504
//                        Graphics2D gs = selectionImage.createGraphics();
505
//                        BufferedImage handlersImage = new BufferedImage(vp.getImageWidth(),
506
//                                        vp.getImageHeight(), BufferedImage.TYPE_INT_ARGB);
507
//                        Graphics2D gh = handlersImage.createGraphics();
508
//                        FeatureStore featureStore = getFeatureStore();
509
//
510
//                        Iterator iterator = ((FeatureSelection) featureStore.getSelection())
511
//                                        .iterator();
512
//
513
//                        DrawOperationContext doc = new DrawOperationContext();
514
//                        doc.setGraphics(gs);
515
//                        doc.setViewPort(vp);
516
//                        doc.setSymbol(DefaultCADTool.selectionSymbol);
517
//                        while (iterator.hasNext()) {
518
//                                Feature feature = (Feature) iterator.next();
519
//                                Handler[] handlers = null;
520
//                                org.gvsig.fmap.geom.Geometry geom = (org.gvsig.fmap.geom.Geometry) feature
521
//                                                .getDefaultGeometry();
522
//                                handlers = geom
523
//                                                .getHandlers(org.gvsig.fmap.geom.Geometry.SELECTHANDLER);
524
//
525
//                                geom.cloneGeometry().invokeOperation(Draw.CODE, doc);
526
//                                drawHandlers(geom.cloneGeometry(), gh, vp);
527
//                                // y miramos los handlers de cada entidad seleccionada
528
//                                min = cta.getMapControl().getViewPort().toMapDistance(
529
//                                                MapControl.tolerance);
530
//                                for (int j = 0; j < handlers.length; j++) {
531
//                                        Point2D handlerPoint = handlers[j].getPoint();
532
//                                        double distance = firstPoint.distance(handlerPoint);
533
//                                        if (distance <= min) {
534
//                                                min = distance;
535
//                                                selectedHandler.add(handlers[j]);
536
//                                        }
537
//                                }
538
//
539
//                        }
540
//
541
//                        setSelectionImage(selectionImage);
542
//                        setHandlersImage(handlersImage);
543
//                } catch (ReadException e) {
544
//                        NotificationManager.addError(e.getMessage(), e);
545
//                } catch (GeometryOperationNotSupportedException e) {
546
//                        NotificationManager.addError(e.getMessage(), e);
547
//                } catch (GeometryOperationException e) {
548
//                        NotificationManager.addError(e.getMessage(), e);
549
//                } catch (DataException e) {
550
//                        NotificationManager.addError(e.getMessage(), e);
551
//                }
552
//        }
553

    
554
        public void drawHandlers(org.gvsig.fmap.geom.Geometry geom, Graphics2D gs,
555
                        ViewPort vp) {
556
                // if (!(getLayer() instanceof FLyrAnnotation)){
557
                Handler[] handlers = geom
558
                                .getHandlers(org.gvsig.fmap.geom.Geometry.SELECTHANDLER);
559
                FGraphicUtilities.DrawHandlers(gs, vp.getAffineTransform(), handlers,
560
                                DefaultCADTool.handlerSymbol);
561
                // }
562
        }
563

    
564
        public Image getSelectionImage() {
565
                return imageSelection;
566
        }
567

    
568
        public void setSelectionImage(Image image) {
569
                imageSelection = image;
570
        }
571

    
572
        public Image getHandlersImage() {
573
                return imageHandlers;
574
        }
575

    
576
        public void setHandlersImage(Image image) {
577
                imageHandlers = image;
578
        }
579

    
580
        public void beforeLayerDraw(LayerDrawEvent e) throws CancelationException {
581
                FeatureStore featureStore = null;
582
                try {
583
                        featureStore = getFeatureStore();
584
                } catch (ReadException e2) {
585
                        e2.printStackTrace();
586
                }
587
                if (featureStore.isEditing()) {
588
                        ViewPort vp = getLayer().getMapContext().getViewPort();
589
                        BufferedImage selectionImage = new BufferedImage(
590
                                        vp.getImageWidth(), vp.getImageHeight(),
591
                                        BufferedImage.TYPE_INT_ARGB);
592
                        BufferedImage handlersImage = new BufferedImage(vp.getImageWidth(),
593
                                        vp.getImageHeight(), BufferedImage.TYPE_INT_ARGB);
594
                        Graphics2D gs = selectionImage.createGraphics();
595
                        Graphics2D gh = handlersImage.createGraphics();
596
                        Iterator iterator = null;
597
                        try {
598
                                iterator = featureStore.getFeatureSelection()
599
                                                .iterator();
600
                        } catch (DataException e2) {
601
                                e2.printStackTrace();
602
                        }
603
                        try{
604
                        while (iterator.hasNext()) {
605
                                Feature feature = (Feature) iterator.next();
606
                                org.gvsig.fmap.geom.Geometry geom = (org.gvsig.fmap.geom.Geometry) feature
607
                                                .getDefaultGeometry();
608

    
609
                                DrawOperationContext doc = new DrawOperationContext();
610
                                doc.setGraphics(gs);
611
                                doc.setViewPort(vp);
612
                                doc.setSymbol(DefaultCADTool.selectionSymbol);
613
                                try {
614
                                        geom.cloneGeometry().invokeOperation(Draw.CODE, doc);
615
                                } catch (GeometryOperationNotSupportedException e1) {
616
                                        e1.printStackTrace();
617
                                } catch (GeometryOperationException e1) {
618
                                        e1.printStackTrace();
619
                                }
620
                                drawHandlers(geom.cloneGeometry(), gh, vp);
621
                        }
622
                        }catch (ConcurrentModificationException e1) {
623
//                                throw new CancelationException(e1);
624
                                //A mitad de pintado se cambia la selecci?n y por tanto no se puede seguir recorriendo la anterior.
625
                                return;
626
                        }
627
                        setSelectionImage(selectionImage);
628
                        setHandlersImage(handlersImage);
629
                }
630
        }
631

    
632
        public void afterLayerDraw(LayerDrawEvent e) throws CancelationException {
633
        }
634

    
635
        public void beforeGraphicLayerDraw(LayerDrawEvent e)
636
                        throws CancelationException {
637
        }
638

    
639
        public void afterLayerGraphicDraw(LayerDrawEvent e)
640
                        throws CancelationException {
641
        }
642

    
643
        private static boolean contains(org.gvsig.fmap.geom.Geometry g1,
644
                        org.gvsig.fmap.geom.Geometry g2) {
645
                try {
646
                        Geometry geometry1 = (Geometry) g1
647
                                        .invokeOperation(ToJTS.CODE, null);
648
                        Geometry geometry2 = (Geometry) g2
649
                                        .invokeOperation(ToJTS.CODE, null);
650
                        if (geometry1 == null || geometry2 == null)
651
                                return false;
652
                        return geometry1.contains(geometry2);
653
                } catch (GeometryOperationNotSupportedException e) {
654
                        e.printStackTrace();
655
                } catch (GeometryOperationException e) {
656
                        e.printStackTrace();
657
                }
658
                return false;
659
        }
660

    
661
        private static boolean intersects(org.gvsig.fmap.geom.Geometry g1,
662
                        org.gvsig.fmap.geom.Geometry g2) {
663
                try {
664
                        Geometry geometry1 = (Geometry) g1
665
                                        .invokeOperation(ToJTS.CODE, null);
666
                        Geometry geometry2 = (Geometry) g2
667
                                        .invokeOperation(ToJTS.CODE, null);
668
                        if (geometry1 == null || geometry2 == null)
669
                                return false;
670
                        return geometry1.intersects(geometry2);
671
                } catch (GeometryOperationNotSupportedException e) {
672
                        e.printStackTrace();
673
                } catch (GeometryOperationException e) {
674
                        e.printStackTrace();
675
                }
676
                return false;
677
        }
678

    
679
        public void activationGained(LayerEvent e) {
680
                if (ViewCommandStackExtension.csd != null) {
681
                        try {
682
                                ViewCommandStackExtension.csd.setModel(((FLyrVect) getLayer())
683
                                                .getFeatureStore());
684
                        } catch (ReadException e1) {
685
                                e1.printStackTrace();
686
                        } catch (DataException e1) {
687
                                e1.printStackTrace();
688
                        }
689
                }
690
                IWindow window = PluginServices.getMDIManager().getActiveWindow();
691
                if (window instanceof View) {
692
                        View view = (View) window;
693
                        if (e.getSource().isEditing()) {
694
                                view.showConsole();
695
                        }
696
                }
697
                if (cadtool != null) {
698
                        CADExtension.getCADToolAdapter().setCadTool(cadtool);
699
                        PluginServices.getMainFrame().setSelectedTool(cadtool.toString());
700
                        StartEditing.startCommandsApplicable(null, (FLyrVect) getLayer());
701
                        CADExtension.initFocus();
702
                }
703

    
704
        }
705

    
706
        public void activationLost(LayerEvent e) {
707
                try {
708
                        cadtool = CADExtension.getCADTool();
709
                        IWindow window = PluginServices.getMDIManager().getActiveWindow();
710
                        if (window instanceof View) {
711
                                View view = (View) window;
712
                                view.hideConsole();
713
                        }
714
                } catch (EmptyStackException e1) {
715
                        cadtool = new SelectionCADTool();
716
                        cadtool.init();
717
                }
718

    
719
        }
720

    
721
        public void setLegend(ILegend legend) {
722
                this.legend = legend;
723
        }
724

    
725
        public ILegend getLegend() {
726
                return legend;
727
        }
728

    
729
        public FeatureStore getFeatureStore() throws ReadException {
730
                return ((FLyrVect) getLayer()).getFeatureStore();
731
        }
732

    
733
        public void update(Observable observable, Object notification) {
734
                echm.update(observable, notification);
735
//                try {
736
//                        if (((FeatureSelection) getFeatureStore().getSelection()).isEmpty())
737
//                                clearSelection(NOTSAVEPREVIOUS);
738
//                } catch (ReadException e1) {
739
//                        NotificationManager.addError(e1.getMessage(), e1);
740
//                } catch (DataException e1) {
741
//                        NotificationManager.addError(e1.getMessage(), e1);
742
//                }
743
        }
744

    
745
        public EditionChangeManager getEditionChangeManager() {
746
                return echm;
747
        }
748

    
749
        public void setEditionChangeManager(EditionChangeManager echm) {
750
                this.echm = echm;
751
        }
752
}