Statistics
| Revision:

svn-gvsig-desktop / tags / v1_1_Build_1013 / extensions / extCAD / src / com / iver / cit / gvsig / layers / VectorialLayerEdited.java @ 13521

History | View | Annotate | Download (18.5 KB)

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