Statistics
| Revision:

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

History | View | Annotate | Download (29.7 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
import java.util.Iterator;
11

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

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

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

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

    
70

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

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

    
88
//        public ArrayList getSelectedRow() {
89
//                return selectedRow;
90
//        }
91

    
92
        public void clearSelection(boolean savePrevious) throws ReadException {
93
                if (getFeatureStore()==null)
94
                        return;
95
                FeatureCollection selection=(FeatureCollection)getFeatureStore().getSelection();
96
                if (!selection.isEmpty() && savePrevious){
97
//                if (!selectedRow.isEmpty() && savePrevious) {
98
                        previousRowSelection.clear();
99
                        previousHandlerSelection.clear();
100
                }
101
                if (savePrevious) {
102
                        previousRowSelection.addAll(selection);
103
                        previousHandlerSelection.addAll(selectedHandler);
104
                }
105
                selectedHandler.clear();
106
                selection.clear();
107
//                if (getVEA() != null)
108
//                {
109
//                        FBitSet selection=getVEA().getSelection();
110
//                        selection.clear();
111
//                }
112
        }
113
        public void restorePreviousSelection() throws ReadException {
114
                FeatureCollection selection=(FeatureCollection)getFeatureStore().getSelection();
115
                selection.clear();
116
                selectedHandler.clear();
117
                selection.addAll(previousRowSelection);
118
                selectedHandler.addAll(previousHandlerSelection);
119
//                VectorialEditableAdapter vea=getVEA();
120
//                FBitSet selection=vea.getSelection();
121
//
122
//                selection.clear();
123
//                selectedRow.clear();
124
//                selectedHandler.clear();
125
//
126
//                selectedRow.addAll(previousRowSelection);
127
//                selectedHandler.addAll(previousHandlerSelection);
128
//                for (int i = 0;i < selectedRow.size(); i++) {
129
//                          IRowEdited edRow = (IRowEdited) selectedRow.get(i);
130
//                          selection.set(edRow.getIndex());
131
//                }
132

    
133
                previousRowSelection.clear();
134
                previousHandlerSelection.clear();
135
        }
136
        /**
137
         * @return Returns the selectedRow.
138
         */
139
//        public IFeature[] getSelectedRowsCache() {
140
//                return (IFeature[]) selectedRow.toArray(new IFeature[0]);
141
//        }
142
        public void selectWithPoint(double x, double y,boolean multipleSelection){
143
                try {
144
                firstPoint = new Point2D.Double(x, y);
145
//                VectorialEditableAdapter vea = getVEA();
146
                FeatureStore featureStore=getFeatureStore();
147
                FeatureCollection selection=(FeatureCollection)featureStore.getSelection();
148
//                FBitSet selection=null;
149
//                try {
150
//                        selection = vea.getSelection();
151

    
152
                if (!multipleSelection) {
153
                        clearSelection(SAVEPREVIOUS);
154
                }
155
//                } catch (ReadException e) {
156
//                        NotificationManager.addError(e.getMessage(),e);
157
//                }
158
                // Se comprueba si se pincha en una gemometr?a
159
                ViewPort vp=getLayer().getMapContext().getViewPort();
160
                double tol =vp.toMapDistance(SelectionCADTool.tolerance);
161

    
162
                 FeatureCollection newSelection = ((FLyrVect)getLayer()).queryByPoint(firstPoint, tol, getFeatureStore().getDefaultFeatureType());
163

    
164

    
165
//                Envelope rect = new DefaultEnvelope(firstPoint.getX() - tam,
166
//                                firstPoint.getY() - tam, tam * 2, tam * 2);
167
//
168
                String strEPSG = vp.getProjection().getAbrev();
169
                selection.clear();
170
                BufferedImage selectionImage = new BufferedImage(vp.getImageWidth(), vp.getImageHeight(), BufferedImage.TYPE_INT_ARGB);
171
                Graphics2D gs = selectionImage.createGraphics();
172
                BufferedImage handlersImage = new BufferedImage(vp.getImageWidth(), vp.getImageHeight(), BufferedImage.TYPE_INT_ARGB);
173
                Graphics2D gh = handlersImage.createGraphics();
174
//                ICoordTrans ct=getLayer().getCoordTrans();
175
//                Iterator iterator=featureStore.getDataCollection(featureStore.getDefaultFeatureType(),((FLyrVect)getLayer()).getDataStoreFilterForGeomerty(
176
//                                rect.getGeometry(),
177
//                                featureStore.getDefaultFeatureType().getDefaultGeometry(),null),null).iterator();
178
                Iterator iterator=newSelection.iterator();
179
                while (iterator.hasNext()) {
180
                        Feature feature = (Feature) iterator.next();
181

    
182
//                }
183
//                IRowEdited[] feats;
184
//
185

    
186
//                        feats = vea.getFeatures(rect, strEPSG);
187
//                        selection.clear();
188
//                        BufferedImage selectionImage = new BufferedImage(vp.getImageWidth(), vp.getImageHeight(), BufferedImage.TYPE_INT_ARGB);
189
//                        Graphics2D gs = selectionImage.createGraphics();
190
//                        BufferedImage handlersImage = new BufferedImage(vp.getImageWidth(), vp.getImageHeight(), BufferedImage.TYPE_INT_ARGB);
191
//                        Graphics2D gh = handlersImage.createGraphics();
192
//                        ICoordTrans ct=getLayer().getCoordTrans();
193
//                        for (int i = 0; i < feats.length; i++) {
194
//                                IFeature feat = (IFeature) feats[i].getLinkedRow();
195
                                org.gvsig.fmap.geom.Geometry geom = (org.gvsig.fmap.geom.Geometry)feature.getDefaultGeometry();
196
                                if (geom == null) {
197
                                        continue;
198
                                }
199
                                org.gvsig.fmap.geom.Geometry geomReproject=geom.cloneGeometry();
200
//                                if (ct!=null)
201
//                                        geomReproject.reProject(ct);
202
//                                if (geomReproject.intersects(new Rectangle2D.Double(rect.getMinimum(0),rect.getMaximum(0),rect.getMinimum(1)-rect.getMinimum(0),rect.getMaximum(1)-rect.getMaximum(0)))) { // , 0.1)){
203
                                        selection.add(feature);
204
//                                        selection.set(feats[i].getIndex(), true);
205
//                                        selectedRow.add(feats[i]);
206
                                        DrawOperationContext doc=new DrawOperationContext();
207
                                        doc.setGraphics(gs);
208
                                        doc.setViewPort(vp);
209
                                        doc.setSymbol(DefaultCADTool.selectionSymbol);
210
                                        geomReproject.invokeOperation(Draw.CODE,doc);//cloneGeometry().draw(gs, vp, DefaultCADTool.selectionSymbol);
211
                                        drawHandlers(geomReproject.cloneGeometry(),gh,vp);
212
                                }
213
//                        }
214
                        setSelectionImage(selectionImage);
215
                        setHandlersImage(handlersImage);
216
                } catch (ReadException e) {
217
                        NotificationManager.addError(e.getMessage(),e);
218
                } catch (GeometryOperationNotSupportedException e) {
219
                        NotificationManager.addError(e.getMessage(),e);
220
                } catch (GeometryOperationException e) {
221
                        NotificationManager.addError(e.getMessage(),e);
222
                }
223
        }
224
        public void selectWithSecondPoint(double x, double y) {
225

    
226
//                FBitSet selection=null;
227
                try {
228
                        FeatureStore featureStore=getFeatureStore();
229
//                        selection = vea.getSelection();
230

    
231
                lastPoint = new Point2D.Double(x, y);
232
//                selection.clear();
233
                clearSelection(SAVEPREVIOUS);
234

    
235
                ViewPort vp=getLayer().getMapContext().getViewPort();
236
                double x1;
237
                double y1;
238
                double w1;
239
                double h1;
240

    
241
                if (firstPoint.getX() < lastPoint.getX()) {
242
                        x1 = firstPoint.getX();
243
                        w1 = lastPoint.getX() - firstPoint.getX();
244
                } else {
245
                        x1 = lastPoint.getX();
246
                        w1 = firstPoint.getX() - lastPoint.getX();
247
                }
248

    
249
                if (firstPoint.getY() < lastPoint.getY()) {
250
                        y1 = firstPoint.getY();
251
                        h1 = lastPoint.getY() - firstPoint.getY();
252
                } else {
253
                        y1 = lastPoint.getY();
254
                        h1 = firstPoint.getY() - lastPoint.getY();
255
                }
256

    
257
                Rectangle2D rect = new Rectangle2D.Double(x1, y1, w1, h1);
258

    
259
                String strEPSG = vp.getProjection().getAbrev();
260
                        BufferedImage selectionImage = new BufferedImage(vp.getImageWidth(), vp.getImageHeight(), BufferedImage.TYPE_INT_ARGB);
261
                        Graphics2D gs = selectionImage.createGraphics();
262
                        BufferedImage handlersImage = new BufferedImage(vp.getImageWidth(), vp.getImageHeight(), BufferedImage.TYPE_INT_ARGB);
263
                        Graphics2D gh = handlersImage.createGraphics();
264
                        ICoordTrans ct=getLayer().getCoordTrans();
265
                        Iterator iterator=featureStore.getDataCollection(featureStore.getDefaultFeatureType(),rect.toString(),null).iterator();
266
                        DrawOperationContext doc=new DrawOperationContext();
267
                        doc.setGraphics(gs);
268
                        doc.setViewPort(vp);
269
                        doc.setSymbol(DefaultCADTool.selectionSymbol);
270
                        while (iterator.hasNext()) {
271
                        Feature feature = (Feature) iterator.next();
272
//
273
//                }
274
//                IRowEdited[] feats;
275
//                try {
276
//                        feats = vea.getFeatures(rect, strEPSG);
277

    
278
//                        for (int i = 0; i < feats.length; i++) {
279
                                org.gvsig.fmap.geom.Geometry geom = (org.gvsig.fmap.geom.Geometry)feature
280
                                                .getDefaultGeometry();
281

    
282
                                if (geom == null) {
283
                                        continue;
284
                                }
285
                                org.gvsig.fmap.geom.Geometry geomReproject=geom.cloneGeometry();
286
                                if (ct!=null)
287
                                        geomReproject.reProject(ct);
288

    
289
                                if (firstPoint.getX() < lastPoint.getX()) {
290
                                        if (rect.contains(geomReproject.getBounds2D())) {
291
                                                featureStore.getSelection().add(feature);
292
//                                                selectedRow.add(feats[i]);
293
//                                                selection.set(feats[i].getIndex(), true);
294
                                                geom.cloneGeometry().invokeOperation(Draw.CODE,doc);
295
//                                                draw(gs, vp, DefaultCADTool.selectionSymbol);
296
                                                drawHandlers(geom.cloneGeometry(),gh,vp);
297
                                        }
298
                                } else {
299
                                        if (geomReproject.intersects(rect)) { // , 0.1)){
300
                                                featureStore.getSelection().add(feature);
301
//                                                selectedRow.add(feats[i]);
302
//                                                selection.set(feats[i].getIndex(), true);
303
                                                geom.cloneGeometry().invokeOperation(Draw.CODE,doc);
304
//                                                draw(gs, vp, DefaultCADTool.selectionSymbol);
305
                                                drawHandlers(geom.cloneGeometry(),gh,vp);
306
                                        }
307
                                }
308
                        }
309
                        setSelectionImage(selectionImage);
310
                        setHandlersImage(handlersImage);
311
                } catch (ReadException e) {
312
                        NotificationManager.addError(e.getMessage(),e);
313
                } catch (GeometryOperationNotSupportedException e) {
314
                        NotificationManager.addError(e.getMessage(),e);
315
                } catch (GeometryOperationException e) {
316
                        NotificationManager.addError(e.getMessage(),e);
317
                }
318
        }
319
        public void selectInsidePolygon(org.gvsig.fmap.geom.Geometry polygon) {
320

    
321
//                VectorialEditableAdapter vea = getVEA();
322
//                FBitSet selection=null;
323
                try {
324
                        FeatureStore featureStore=getFeatureStore();
325
//                        selection = vea.getSelection();
326
//
327
//                selection.clear();
328
                clearSelection(SAVEPREVIOUS);
329
//                } catch (ReadException e1) {
330
//                        NotificationManager.addError(e1.getMessage(),e1);
331
//                }
332
                ViewPort vp=getLayer().getMapContext().getViewPort();
333

    
334
                Rectangle2D rect = polygon.getBounds2D();
335

    
336
                String strEPSG = vp.getProjection().getAbrev();
337
                BufferedImage selectionImage = new BufferedImage(vp.getImageWidth(), vp.getImageHeight(), BufferedImage.TYPE_INT_ARGB);
338
                Graphics2D gs = selectionImage.createGraphics();
339
                BufferedImage handlersImage = new BufferedImage(vp.getImageWidth(), vp.getImageHeight(), BufferedImage.TYPE_INT_ARGB);
340
                Graphics2D gh = handlersImage.createGraphics();
341
                ICoordTrans ct=getLayer().getCoordTrans();
342
                Iterator iterator=featureStore.getDataCollection(featureStore.getDefaultFeatureType(),rect.toString(),null).iterator();
343
                DrawOperationContext doc=new DrawOperationContext();
344
                doc.setGraphics(gs);
345
                doc.setViewPort(vp);
346
                doc.setSymbol(DefaultCADTool.selectionSymbol);
347
                while (iterator.hasNext()) {
348
                        Feature feature = (Feature) iterator.next();
349

    
350
//                }
351
//                IRowEdited[] feats;
352
//                try {
353
//                        feats = vea.getFeatures(rect, strEPSG);
354

    
355
//                        for (int i = 0; i < feats.length; i++) {
356
                                org.gvsig.fmap.geom.Geometry geom = (org.gvsig.fmap.geom.Geometry)feature.getDefaultGeometry();
357
                                if (geom == null) {
358
                                        continue;
359
                                }
360
                                org.gvsig.fmap.geom.Geometry geomReproject=geom.cloneGeometry();
361
                                if (ct!=null)
362
                                        geomReproject.reProject(ct);
363
                                if (contains(polygon,geomReproject)) {
364
                                        featureStore.getSelection().add(feature);
365
//                                        selectedRow.add(feats[i]);
366
//                                        selection.set(feats[i].getIndex(), true);
367
                                        geom.cloneGeometry().invokeOperation(Draw.CODE,doc);
368
//                                        draw(gs, vp, DefaultCADTool.selectionSymbol);
369
                                        drawHandlers(geom.cloneGeometry(),gh,vp);
370
                                }
371
                        }
372
                        setSelectionImage(selectionImage);
373
                        setHandlersImage(handlersImage);
374
                } catch (ReadException e) {
375
                        NotificationManager.addError(e.getMessage(),e);
376
                } catch (GeometryOperationNotSupportedException e) {
377
                        NotificationManager.addError(e.getMessage(),e);
378
                } catch (GeometryOperationException e) {
379
                        NotificationManager.addError(e.getMessage(),e);
380
                }
381
        }
382

    
383
        public void selectCrossPolygon(org.gvsig.fmap.geom.Geometry polygon) {
384
//                VectorialEditableAdapter vea = getVEA();
385
//                FBitSet selection=null;
386
                try {
387
                        FeatureStore featureStore=getFeatureStore();
388
//                        selection = vea.getSelection();
389
//                        selection.clear();
390
                clearSelection(SAVEPREVIOUS);
391
//                } catch (ReadException e1) {
392
//                        NotificationManager.addError(e1.getMessage(),e1);
393
//                }
394
                ViewPort vp=getLayer().getMapContext().getViewPort();
395

    
396
                Rectangle2D rect = polygon.getBounds2D();
397

    
398
                String strEPSG = vp.getProjection().getAbrev();
399
                BufferedImage selectionImage = new BufferedImage(vp.getImageWidth(), vp.getImageHeight(), BufferedImage.TYPE_INT_ARGB);
400
                Graphics2D gs = selectionImage.createGraphics();
401
                BufferedImage handlersImage = new BufferedImage(vp.getImageWidth(), vp.getImageHeight(), BufferedImage.TYPE_INT_ARGB);
402
                Graphics2D gh = handlersImage.createGraphics();
403
                ICoordTrans ct=getLayer().getCoordTrans();
404
                Iterator iterator=featureStore.getDataCollection(featureStore.getDefaultFeatureType(),rect.toString(),null).iterator();
405

    
406
                DrawOperationContext doc=new DrawOperationContext();
407
                doc.setGraphics(gs);
408
                doc.setViewPort(vp);
409
                doc.setSymbol(DefaultCADTool.selectionSymbol);
410
                while (iterator.hasNext()) {
411
                        Feature feature = (Feature) iterator.next();
412

    
413
//                }
414
//                IRowEdited[] feats;
415
//                try {
416
//                        feats = vea.getFeatures(rect, strEPSG);
417

    
418
//                        for (int i = 0; i < feats.length; i++) {
419
                                org.gvsig.fmap.geom.Geometry geom = (org.gvsig.fmap.geom.Geometry)feature.getDefaultGeometry();
420
                                if (geom == null) {
421
                                        continue;
422
                                }
423
                                org.gvsig.fmap.geom.Geometry geomReproject=geom.cloneGeometry();
424
                                if (ct!=null)
425
                                        geomReproject.reProject(ct);
426
                                if (contains(polygon,geomReproject) || intersects(polygon,geomReproject)) {
427
                                        featureStore.getSelection().add(feature);
428
//                                        selectedRow.add(feats[i]);
429
//                                        selection.set(feats[i].getIndex(), true);
430
                                        geom.cloneGeometry().invokeOperation(Draw.CODE,doc);
431
//                                        draw(gs, vp, DefaultCADTool.selectionSymbol);
432
                                        drawHandlers(geom.cloneGeometry(),gh,vp);
433
                                }
434
                        }
435
                        setSelectionImage(selectionImage);
436
                        setHandlersImage(handlersImage);
437
                } catch (ReadException e) {
438
                        NotificationManager.addError(e.getMessage(),e);
439
                } catch (GeometryOperationNotSupportedException e) {
440
                        NotificationManager.addError(e.getMessage(),e);
441
                } catch (GeometryOperationException e) {
442
                        NotificationManager.addError(e.getMessage(),e);
443
                }
444
        }
445

    
446
        public void selectOutPolygon(org.gvsig.fmap.geom.Geometry polygon) {
447

    
448
//                VectorialEditableAdapter vea = getVEA();
449
//                FBitSet selection=null;
450
                try {
451
                        FeatureStore featureStore=getFeatureStore();
452
//                        selection = vea.getSelection();
453
//                        selection.clear();
454
                clearSelection(SAVEPREVIOUS);
455
//                } catch (ReadException e1) {
456
//                        NotificationManager.addError(e1.getMessage(),e1);
457
//                }
458
                ViewPort vp=getLayer().getMapContext().getViewPort();
459
                Rectangle2D rect = polygon.getBounds2D();
460

    
461
                String strEPSG = vp.getProjection().getAbrev();
462
                BufferedImage selectionImage = new BufferedImage(vp.getImageWidth(), vp.getImageHeight(), BufferedImage.TYPE_INT_ARGB);
463
                Graphics2D gs = selectionImage.createGraphics();
464
                BufferedImage handlersImage = new BufferedImage(vp.getImageWidth(), vp.getImageHeight(), BufferedImage.TYPE_INT_ARGB);
465
                Graphics2D gh = handlersImage.createGraphics();
466
                ICoordTrans ct=getLayer().getCoordTrans();
467
                Iterator iterator=featureStore.getDataCollection(featureStore.getDefaultFeatureType(),rect.toString(),null).iterator();
468

    
469
                DrawOperationContext doc=new DrawOperationContext();
470
                doc.setGraphics(gs);
471
                doc.setViewPort(vp);
472
                doc.setSymbol(DefaultCADTool.selectionSymbol);
473
                while (iterator.hasNext()) {
474
                        Feature feature = (Feature) iterator.next();
475
                                org.gvsig.fmap.geom.Geometry geom = (org.gvsig.fmap.geom.Geometry)feature.getDefaultGeometry();
476
                                if (geom == null) {
477
                                        continue;
478
                                }
479
                                org.gvsig.fmap.geom.Geometry geomReproject=geom.cloneGeometry();
480
                                if (ct!=null)
481
                                        geomReproject.reProject(ct);
482
                                if (!contains(polygon,geomReproject) && !intersects(polygon,geomReproject)) {
483
                                        featureStore.getSelection().add(feature);
484
//                                        selectedRow.add(rowEd);
485
//                                        selection.set(rowEd.getIndex(), true);
486
                                        geom.cloneGeometry().invokeOperation(Draw.CODE,doc);
487
//                                        draw(gs, vp, DefaultCADTool.selectionSymbol);
488
                                        drawHandlers(geom.cloneGeometry(),gh,vp);
489
                                }
490
                        }
491
                        setSelectionImage(selectionImage);
492
                        setHandlersImage(handlersImage);
493
                } catch (ReadException e) {
494
                        NotificationManager.addError(e.getMessage(),e);
495
                } catch (GeometryOperationNotSupportedException e) {
496
                        NotificationManager.addError(e.getMessage(),e);
497
                } catch (GeometryOperationException e) {
498
                        NotificationManager.addError(e.getMessage(),e);
499
                }
500
        }
501
        public void selectAll() {
502

    
503
//                VectorialEditableAdapter vea = getVEA();
504
//                FBitSet selection=null;
505
                try {
506
                        FeatureStore featureStore=getFeatureStore();
507
//                        selection = vea.getSelection();
508
//                        selection.clear();
509
                clearSelection(SAVEPREVIOUS);
510
//                } catch (ReadException e1) {
511
//                        NotificationManager.addError(e1.getMessage(),e1);
512
//                }
513
                ViewPort vp=getLayer().getMapContext().getViewPort();
514

    
515
//                try {
516
                        BufferedImage selectionImage = new BufferedImage(vp.getImageWidth(), vp.getImageHeight(), BufferedImage.TYPE_INT_ARGB);
517
                        Graphics2D gs = selectionImage.createGraphics();
518
                        BufferedImage handlersImage = new BufferedImage(vp.getImageWidth(), vp.getImageHeight(), BufferedImage.TYPE_INT_ARGB);
519
                        Graphics2D gh = handlersImage.createGraphics();
520
                        ICoordTrans ct=getLayer().getCoordTrans();
521
                        FeatureCollection fCollection=(FeatureCollection)featureStore.getDataCollection();
522
                        Iterator iterator=fCollection.iterator();
523
                        featureStore.setSelection(fCollection);
524

    
525
                        DrawOperationContext doc=new DrawOperationContext();
526
                        doc.setGraphics(gs);
527
                        doc.setViewPort(vp);
528
                        doc.setSymbol(DefaultCADTool.selectionSymbol);
529

    
530
                        while (iterator.hasNext()) {
531
                                Feature feature = (Feature) iterator.next();
532

    
533
//                        }
534
//                        for (int i = 0; i < vea.getRowCount(); i++) {
535
//                                IRowEdited rowEd=vea.getRow(i);
536
                                org.gvsig.fmap.geom.Geometry geom = (org.gvsig.fmap.geom.Geometry)feature.getDefaultGeometry();
537
                                if (ct!=null)
538
                                        geom.reProject(ct);
539
//                                addSelectionCache((DefaultRowEdited)rowEd);
540
//                                selection.set(rowEd.getIndex(), true);
541
                                geom.cloneGeometry().invokeOperation(Draw.CODE,doc);
542
//                                draw(gs, vp, DefaultCADTool.selectionSymbol);
543
                                drawHandlers(geom.cloneGeometry(),gh,vp);
544
                        }
545
                        setSelectionImage(selectionImage);
546
                        setHandlersImage(handlersImage);
547
                } catch (ReadException e) {
548
                        NotificationManager.addError(e.getMessage(),e);
549
                } catch (GeometryOperationNotSupportedException e) {
550
                        NotificationManager.addError(e.getMessage(),e);
551
                } catch (GeometryOperationException e) {
552
                        NotificationManager.addError(e.getMessage(),e);
553
                } catch (DataException e) {
554
                        NotificationManager.addError(e.getMessage(),e);
555
                }
556
        }
557

    
558
        public void refreshSelectionCache(Point2D firstPoint,CADToolAdapter cta){
559
//                VectorialEditableAdapter vea = getVEA();
560
//                FBitSet selection=null;
561
                try {
562
//                        selection = vea.getSelection();
563
                        //                 Cogemos las entidades seleccionadas
564
                        clearSelection(SAVEPREVIOUS);
565
//                } catch (ReadException e1) {
566
//                        NotificationManager.addError(e1.getMessage(),e1);
567
//                }
568
                double min = java.lang.Double.MAX_VALUE;
569
                ViewPort vp=getLayer().getMapContext().getViewPort();
570
                BufferedImage selectionImage = new BufferedImage(vp.getImageWidth(), vp.getImageHeight(), BufferedImage.TYPE_INT_ARGB);
571
                Graphics2D gs = selectionImage.createGraphics();
572
                BufferedImage handlersImage = new BufferedImage(vp.getImageWidth(), vp.getImageHeight(), BufferedImage.TYPE_INT_ARGB);
573
                Graphics2D gh = handlersImage.createGraphics();
574
                FeatureStore featureStore=getFeatureStore();
575

    
576
                Iterator iterator=featureStore.getSelection().iterator();
577

    
578
                DrawOperationContext doc=new DrawOperationContext();
579
                doc.setGraphics(gs);
580
                doc.setViewPort(vp);
581
                doc.setSymbol(DefaultCADTool.selectionSymbol);
582
                while (iterator.hasNext()) {
583
                        Feature feature = (Feature) iterator.next();
584

    
585
//                }
586
//                for (int i = selection.nextSetBit(0); i >= 0; i = selection
587
//                                .nextSetBit(i + 1)) {
588
                        Handler[] handlers = null;
589

    
590
//                        DefaultRowEdited dre = null;
591
//                        try {
592
//                                dre = (DefaultRowEdited)(vea.getRow(i));
593
//                                IFeature feat=(DefaultFeature)dre.getLinkedRow();
594
                                org.gvsig.fmap.geom.Geometry geom=(org.gvsig.fmap.geom.Geometry)feature.getDefaultGeometry();
595
                                handlers = geom.getHandlers(org.gvsig.fmap.geom.Geometry.SELECTHANDLER);
596
//                                addSelectionCache(dre);
597

    
598
                                geom.cloneGeometry().invokeOperation(Draw.CODE,doc);
599
//                                draw(gs, vp, DefaultCADTool.selectionSymbol);
600
                                drawHandlers(geom.cloneGeometry(),gh,vp);
601
                                // y miramos los handlers de cada entidad seleccionada
602
                                min = cta.getMapControl().getViewPort()
603
                                                .toMapDistance(SelectionCADTool.tolerance);
604
                                for (int j = 0; j < handlers.length; j++) {
605
                                        Point2D handlerPoint = handlers[j].getPoint();
606
                                        double distance = firstPoint.distance(handlerPoint);
607
                                        if (distance <= min) {
608
                                                min = distance;
609
                                                selectedHandler.add(handlers[j]);
610
                                        }
611
                                }
612

    
613
                }
614

    
615
                setSelectionImage(selectionImage);
616
                setHandlersImage(handlersImage);
617
                } catch (ReadException e) {
618
                        NotificationManager.addError(e.getMessage(),e);
619
                } catch (GeometryOperationNotSupportedException e) {
620
                        NotificationManager.addError(e.getMessage(),e);
621
                } catch (GeometryOperationException e) {
622
                        NotificationManager.addError(e.getMessage(),e);
623
                }
624
        }
625

    
626
        public void drawHandlers(org.gvsig.fmap.geom.Geometry geom, Graphics2D gs, ViewPort vp) {
627
//                if (!(getLayer() instanceof FLyrAnnotation)){
628
                        Handler[] handlers = geom.getHandlers(org.gvsig.fmap.geom.Geometry.SELECTHANDLER);
629
                        FGraphicUtilities.DrawHandlers(gs, vp.getAffineTransform(), handlers,DefaultCADTool.handlerSymbol);
630
//                }
631
        }
632
        public Image getSelectionImage(){
633
                return imageSelection;
634
        }
635
        public void setSelectionImage(Image image){
636
                imageSelection=image;
637
        }
638
        public Image getHandlersImage() {
639
                return imageHandlers;
640
        }
641
        public void setHandlersImage(Image image){
642
                imageHandlers=image;
643
        }
644
//        public VectorialEditableAdapter getVEA(){
645
//                if (((FLyrVect)getLayer()).getSource() instanceof VectorialEditableAdapter)
646
//                        return (VectorialEditableAdapter)((FLyrVect)getLayer()).getSource();
647
//                return null;
648
//        }
649

    
650
        public void beforeLayerDraw(LayerDrawEvent e) throws CancelationException {
651
                FeatureStore featureStore=null;
652
                try {
653
                        featureStore = getFeatureStore();
654
                } catch (ReadException e2) {
655
                        // TODO Auto-generated catch block
656
                        e2.printStackTrace();
657
                }
658
                if (featureStore.isEditing()) {
659
//                        VectorialEditableAdapter vea = (VectorialEditableAdapter) ((FLyrVect) getLayer())
660
//                                        .getSource();
661
                        ViewPort vp = getLayer().getMapContext().getViewPort();
662
                        BufferedImage selectionImage = new BufferedImage(
663
                                        vp.getImageWidth(), vp.getImageHeight(),
664
                                        BufferedImage.TYPE_INT_ARGB);
665
                        BufferedImage handlersImage = new BufferedImage(vp.getImageWidth(),
666
                                        vp.getImageHeight(), BufferedImage.TYPE_INT_ARGB);
667
                        Graphics2D gs = selectionImage.createGraphics();
668
                        Graphics2D gh = handlersImage.createGraphics();
669
                        Iterator iterator=featureStore.getSelection().iterator();
670
                        while (iterator.hasNext()) {
671
                                Feature feature = (Feature) iterator.next();
672

    
673
//                        }
674
//                        for (int i = 0; i < selectedRow.size(); i++) {
675
//                                IFeature feat = (IFeature) ((IRowEdited) selectedRow.get(i))
676
//                                                .getLinkedRow();
677
                                org.gvsig.fmap.geom.Geometry geom = (org.gvsig.fmap.geom.Geometry)feature.getDefaultGeometry();
678

    
679
                                DrawOperationContext doc=new DrawOperationContext();
680
                            doc.setGraphics(gs);
681
                            doc.setViewPort(vp);
682
                            doc.setSymbol(DefaultCADTool.selectionSymbol);
683
                    try {
684
                                        geom.cloneGeometry().invokeOperation(Draw.CODE,doc);
685
                                } catch (GeometryOperationNotSupportedException e1) {
686
                                        e1.printStackTrace();
687
                                } catch (GeometryOperationException e1) {
688
                                        e1.printStackTrace();
689
                                }
690
                                drawHandlers(geom.cloneGeometry(), gh, vp);
691
                        }
692
//                        vea.setSelectionImage(selectionImage);
693
//                        vea.setHandlersImage(handlersImage);
694
                }
695
        }
696

    
697
        public void afterLayerDraw(LayerDrawEvent e) throws CancelationException {
698
        }
699

    
700

    
701
        public void beforeGraphicLayerDraw(LayerDrawEvent e) throws CancelationException {
702
        }
703

    
704
        public void afterLayerGraphicDraw(LayerDrawEvent e) throws CancelationException {
705
        }
706
        private static boolean contains(org.gvsig.fmap.geom.Geometry g1,org.gvsig.fmap.geom.Geometry g2) {
707
                try{
708
                        Geometry geometry1=(Geometry)g1.invokeOperation(ToJTS.CODE,null);
709
                        Geometry geometry2=(Geometry)g2.invokeOperation(ToJTS.CODE,null);
710
                        if (geometry1==null || geometry2==null)return false;
711
                        return geometry1.contains(geometry2);
712
                } catch (GeometryOperationNotSupportedException e) {
713
                        e.printStackTrace();
714
                } catch (GeometryOperationException e) {
715
                        e.printStackTrace();
716
                }
717
                return false;
718
        }
719
        private static boolean intersects(org.gvsig.fmap.geom.Geometry g1,org.gvsig.fmap.geom.Geometry g2) {
720
                try{
721
                        Geometry geometry1=(Geometry)g1.invokeOperation(ToJTS.CODE,null);
722
                        Geometry geometry2=(Geometry)g2.invokeOperation(ToJTS.CODE,null);
723
                        if (geometry1==null || geometry2==null)return false;
724
                        return geometry1.intersects(geometry2);
725
                } catch (GeometryOperationNotSupportedException e) {
726
                        e.printStackTrace();
727
                } catch (GeometryOperationException e) {
728
                        e.printStackTrace();
729
                }
730
                return false;
731
        }
732

    
733
        public void activationGained(LayerEvent e) {
734
                if (ViewCommandStackExtension.csd!=null){
735
                        try {
736
                                ViewCommandStackExtension.csd.setModel(((FLyrVect)getLayer()).getFeatureStore().getCommandsRecord());
737
                        } catch (ReadException e1) {
738
                                // TODO Auto-generated catch block
739
                                e1.printStackTrace();
740
                        }
741
                }
742
                IWindow window=PluginServices.getMDIManager().getActiveWindow();
743
                if (window instanceof View){
744
                        View view=(View)window;
745
                        if (e.getSource().isEditing()){
746
                                view.showConsole();
747
                        }
748
                }
749
                if (cadtool!=null){
750
                        CADExtension.getCADToolAdapter().setCadTool(cadtool);
751
                        PluginServices.getMainFrame().setSelectedTool(cadtool.toString());
752
                        StartEditing.startCommandsApplicable(null,(FLyrVect)getLayer());
753
                        CADExtension.initFocus();
754
                }
755

    
756
        }
757

    
758
        public void activationLost(LayerEvent e) {
759
                try{
760
                        cadtool=CADExtension.getCADTool();
761
                        IWindow window=PluginServices.getMDIManager().getActiveWindow();
762
                        if (window instanceof View){
763
                                View view=(View)window;
764
                                view.hideConsole();
765
                        }
766
                }catch (EmptyStackException e1) {
767
                        cadtool=new SelectionCADTool();
768
                        cadtool.init();
769
                }
770

    
771
        }
772

    
773
        public ArrayList getSnappers() {
774
                return snappers;
775
        }
776

    
777
        public ArrayList getLayersToSnap() {
778
                return layersToSnap;
779
        }
780

    
781
        public void setLayersToSnap(ArrayList layersToSnap) {
782
                this.layersToSnap = layersToSnap;
783

    
784
        }
785

    
786
//        public void setSelectionCache(boolean savePrevious,ArrayList selectedRowAux) {
787
//                try {
788
//                        clearSelection(savePrevious);
789
//                        VectorialEditableAdapter vea=getVEA();
790
//                        FBitSet selection=vea.getSelection();
791
//                        selectedRow.addAll(selectedRowAux);
792
//                        for (int i = 0;i < selectedRow.size(); i++) {
793
//                                IRowEdited edRow = (IRowEdited) selectedRow.get(i);
794
//                                selection.set(edRow.getIndex());
795
//                        }
796
//                        FLyrVect active = (FLyrVect)getLayer();
797
//                        active.getRecordset().getSelectionSupport().fireSelectionEvents();
798
//                } catch (ReadException e) {
799
//                        NotificationManager.addError(e.getMessage(),e);
800
//                }
801
//    }
802

    
803
        public void setLegend(ILegend legend) {
804
                this.legend=legend;
805
        }
806
        public ILegend getLegend() {
807
                return legend;
808
        }
809

    
810
//        public void addSelectionCache(DefaultRowEdited edited) {
811
//                selectedRow.add(edited);
812
//        }
813

    
814
        public boolean getPreviousSelection() {
815
                try {
816
                        return !((FLyrVect)getLayer()).getFeatureStore().getSelection().isEmpty();
817
                } catch (ReadException e) {
818
                        // TODO Auto-generated catch block
819
                        e.printStackTrace();
820
                }
821
                return false;
822
        }
823
        public FeatureStore getFeatureStore() throws ReadException{
824
                return ((FLyrVect)getLayer()).getFeatureStore();
825
        }
826

    
827
        public void update(Observable observable, Object notification) {
828
                try {
829
                        if (getFeatureStore().getSelection().isEmpty())
830
                                clearSelection(NOTSAVEPREVIOUS);
831
                } catch (ReadException e1) {
832
                        NotificationManager.addError(e1.getMessage(),e1);
833
                }
834

    
835
        }
836
}