Statistics
| Revision:

svn-gvsig-desktop / trunk / extensions / extGeoreferencing / src / com / iver / cit / gvsig / fmap / layers / FLyrPoints.java @ 5352

History | View | Annotate | Download (29.1 KB)

1 5241 nacho
/* gvSIG. Sistema de Informaci?n Geogr?fica de la Generalitat Valenciana
2
 *
3
 * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
4
 *
5
 * This program is free software; you can redistribute it and/or
6
 * modify it under the terms of the GNU General Public License
7
 * as published by the Free Software Foundation; either version 2
8
 * of the License, or (at your option) any later version.
9
 *
10
 * This program is distributed in the hope that it will be useful,
11
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13
 * GNU General Public License for more details.
14
 *
15
 * You should have received a copy of the GNU General Public License
16
 * along with this program; if not, write to the Free Software
17
 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
18
 */
19
package com.iver.cit.gvsig.fmap.layers;
20
21
import java.awt.Color;
22
import java.awt.Dimension;
23
import java.awt.Graphics2D;
24
import java.awt.geom.Point2D;
25
import java.awt.geom.Rectangle2D;
26
import java.awt.image.BufferedImage;
27
import java.util.ArrayList;
28
import java.util.Iterator;
29
30
import org.cresques.cts.ProjectionPool;
31
import org.gvsig.georeferencing.utils.GeoPointPersistence;
32
import org.gvsig.georeferencing.utils.PointManager;
33
34
import com.iver.andami.PluginServices;
35
import com.iver.cit.gvsig.fmap.DriverException;
36
import com.iver.cit.gvsig.fmap.ViewPort;
37
import com.iver.cit.gvsig.gui.View;
38
import com.iver.utiles.XMLEntity;
39 5352 nacho
import com.iver.utiles.swing.threads.Cancellable;
40 5241 nacho
41
42
/**
43
 * Clase de capa de marcado de puntos sobre una vista. Dibuja un puntero sobre
44
 * cada punto en la vista. Esta capa hereda de GraphicLayer que es una capa que est?
45
 * metida de forma fija en FMap. Con esto conseguimos que nuestra capa de puntos
46
 * no aparezca en el TOC y siempre se dibuje por encima de todas las capas. Tiene
47
 * el inconveniente de que est? en FMap y si hacemos un dibujado de las capas
48
 * sobre un panel que no sea la vista de gvSIG este GraphicLayer no aparece.
49
 * Si queremos hacer este tipo de dibujados tendremos que dibujar todas las capas
50
 * con el draw de FLayers y al final llamar al draw de FLyrPoints.
51
 *
52
 * @author Nacho Brodin (brodin_ign@gva.es)
53
 */
54
public class FLyrPoints extends GraphicLayer {
55
56
        //**********************Params********************************
57
        /**
58
         * Diametro del centro de la cruz
59
         */
60
        private final int                                 DIAM_CIRCLE = 18;
61
        /**
62
         * ?ltima herramienta seleccionada. Despu?s de marcar el segundo punto en la vista ser? la
63
         * herramienta por defecto.
64
         */
65
        private String                                         lastTool = "zoomIn";
66
        //**********************End Params****************************
67
68
        //**********************Vars**********************************
69
        private ArrayList                                 pointList = new ArrayList();
70
        private boolean                                 showNumber = true;
71
        private FLyrPointsState                 state = null;
72
        private IPersistence                         geoPointPersistence = null;
73
        private FLyrGeoRaster                         lyrGeoRaster = null;
74
        public static boolean                        isDrawing = false;
75
        private        PointManager                        pointManager = null;
76
        private        boolean                                        lyrVisible = true;
77
        private Point2D[]                                transformPointList = null;
78
        //**********************End Vars**********************************
79
80
        //**********************Classes***********************************
81
        /**
82
         * Estado de la capa de puntos.
83
         * @author Nacho Brodin (brodin_ign@gva.es)
84
         */
85
        public class FLyrPointsState{
86
                public ArrayList pointList = new ArrayList();
87
                public boolean showNumber = true;
88
                public String lastTool = "zoomIn";
89
        }
90
        //**********************End Classes*******************************
91
92
        //**********************Methods***********************************
93
        /**
94
         * Constructor
95
         * @param flyGeoRaster
96
         */
97
        public FLyrPoints(FLyrGeoRaster lyGeoRaster, IPersistence persistence){
98
                this.lyrGeoRaster = lyGeoRaster;
99
                geoPointPersistence = persistence;
100
        }
101
102
        /**
103
         * Salva el estado actual de la capa de puntos. Podr? ser recuperado
104
         * este ?ltimo estado salvado con la funci?n recoveryState
105
         *
106
         */
107
        public void saveState(){
108
                if(state == null)
109
                        state = new FLyrPointsState();
110
                else
111
                        state.pointList.clear();
112
113
                for(int i=0;i<this.length();i++)
114
                        state.pointList.add(((GeoPoint)pointList.get(i)).cloneGeoPoint());
115
116
                state.showNumber = showNumber;
117
                state.lastTool = lastTool;
118
        }
119
120
        /**
121
         * Recupera el estado de la capa de puntos desde la ?ltima vez que se
122
         * ejecut? la funci?n saveState. Si no hay ning?n estdo salvado es que
123
         * al principio estaba la capa vacia por lo que reiniciamos la capa de puntos.
124
         */
125
        public void recoveryState(){
126
                if(state != null){
127
                        pointList.clear();
128
                        for(int i=0;i<state.pointList.size();i++)
129
                                pointList.add(((GeoPoint)state.pointList.get(i)).cloneGeoPoint());
130
131
                        showNumber = state.showNumber;
132
                        lastTool = state.lastTool;
133
                }
134
        }
135
136
        /**
137
         * Asigna el array de puntos
138
         * @param list
139
         */
140
        public void setListPoint(ArrayList list){
141
                pointList = list;
142
        }
143
144
        /**
145
         * Dibujado de la capa de raster georeferenciado aplicando la
146
         * transformaci?n del viewPort.
147
         */
148
        public void draw(BufferedImage image, Graphics2D g, ViewPort vp,
149
                        Cancellable cancel,double scale) throws DriverException {
150
151
                Point2D pto = null;
152
153
                if(lyrVisible && lyrGeoRaster != null){
154
                        //vp = lyrGeoRaster.toImageCoord(vp);
155
                        synchronized (this) {
156
                                for(int i=0; i<pointList.size();i++){
157
                                        //Punto de la imagen
158
                                        if(((GeoPoint)pointList.get(i)).active){
159
                                                pto = ((GeoPoint)pointList.get(i)).pixelPoint;
160
                                                if(pto != null){
161
                                                        Point2D p = lyrGeoRaster.img2World(pto);
162
                                                        p = vp.fromMapPoint(p);
163
                                                        drawPixelCrux(g, p, i);
164
                                                }
165
166
                                                //Punto de la vista
167
                                                pto = ((GeoPoint)pointList.get(i)).mapPoint;
168
                                                if(pto != null){
169
                                                        Point2D p = null;
170
                                                        p = vp.fromMapPoint(pto);
171
                                                        drawMapCrux(g, p, i);
172
                                                }
173
                                        }
174
                                }
175
                        }
176
                }
177
        }
178
179
        /**
180
         * Dibuja sobre el graphics pasado la cruz del punto que marca
181
         * el pixel de la imagen.
182
         * @param g Graphics
183
         */
184
        private void drawPixelCrux(Graphics2D g, Point2D p, int pointNumber){
185
                int dpto = (DIAM_CIRCLE >> 1);
186
                int incr = 5;
187
                g.setColor(Color.WHITE);
188
                g.drawOval(        (int)p.getX() - dpto + 1,
189
                                        (int)p.getY() - dpto + 1,
190
                                        DIAM_CIRCLE - 2,
191
                                        DIAM_CIRCLE - 2);
192
                g.drawLine((int)p.getX() - incr, (int)p.getY() - 1, (int)p.getX() - 1, (int)p.getY() - 1);
193
                g.drawLine((int)p.getX() - incr, (int)p.getY() + 1, (int)p.getX() - 1, (int)p.getY() + 1);
194
195
                g.drawLine((int)p.getX() + incr, (int)p.getY() - 1, (int)p.getX() + 1, (int)p.getY() - 1);
196
                g.drawLine((int)p.getX() + incr, (int)p.getY() + 1, (int)p.getX() + 1, (int)p.getY() + 1);
197
198
                g.drawLine((int)p.getX() - 1, (int)p.getY() - incr, (int)p.getX() - 1, (int)p.getY() - 1);
199
                g.drawLine((int)p.getX() + 1, (int)p.getY() - incr, (int)p.getX() + 1, (int)p.getY() - 1);
200
201
                g.drawLine((int)p.getX() - 1, (int)p.getY() + incr, (int)p.getX() - 1, (int)p.getY() + 1);
202
                g.drawLine((int)p.getX() + 1, (int)p.getY() + incr, (int)p.getX() + 1, (int)p.getY() + 1);
203
204
                g.setColor(Color.red);
205
                g.drawOval(        (int)p.getX() - dpto,
206
                                        (int)p.getY() - dpto,
207
                                        DIAM_CIRCLE,
208
                                        DIAM_CIRCLE);
209
                g.drawLine((int)p.getX(), (int)p.getY() - dpto - incr, (int)p.getX(), (int)p.getY() + dpto + incr);
210
                g.drawLine((int)p.getX() - dpto - incr, (int)p.getY(), (int)p.getX() + dpto + incr, (int)p.getY());
211
212
                if(showNumber){
213
                        g.setColor(Color.WHITE);
214
                        g.drawString(String.valueOf(pointNumber + 1), (int)(p.getX() + dpto + 4), (int)(p.getY() - dpto - 4) );
215
                        g.setColor(Color.red);
216
                        g.drawString(String.valueOf(pointNumber + 1), (int)(p.getX() + dpto + 1), (int)(p.getY() - dpto - 1) );
217
                }
218
        }
219
220
        /**
221
         * Dibuja sobre el graphics pasado la cruz del punto que marca
222
         * la coordenada de la vista.
223
         * @param g Graphics
224
         */
225
        private void drawMapCrux(Graphics2D g, Point2D p, int pointNumber){
226
                int dpto = (DIAM_CIRCLE >> 1);
227
                int incr = 5;
228
                g.setColor(Color.WHITE);
229
                g.drawRect(        (int)p.getX() - dpto + 1,
230
                                        (int)p.getY() - dpto + 1,
231
                                        DIAM_CIRCLE - 2,
232
                                        DIAM_CIRCLE - 2);
233
                g.drawLine((int)p.getX() - incr, (int)p.getY() - 1, (int)p.getX() - 1, (int)p.getY() - 1);
234
                g.drawLine((int)p.getX() - incr, (int)p.getY() + 1, (int)p.getX() - 1, (int)p.getY() + 1);
235
236
                g.drawLine((int)p.getX() + incr, (int)p.getY() - 1, (int)p.getX() + 1, (int)p.getY() - 1);
237
                g.drawLine((int)p.getX() + incr, (int)p.getY() + 1, (int)p.getX() + 1, (int)p.getY() + 1);
238
239
                g.drawLine((int)p.getX() - 1, (int)p.getY() - incr, (int)p.getX() - 1, (int)p.getY() - 1);
240
                g.drawLine((int)p.getX() + 1, (int)p.getY() - incr, (int)p.getX() + 1, (int)p.getY() - 1);
241
242
                g.drawLine((int)p.getX() - 1, (int)p.getY() + incr, (int)p.getX() - 1, (int)p.getY() + 1);
243
                g.drawLine((int)p.getX() + 1, (int)p.getY() + incr, (int)p.getX() + 1, (int)p.getY() + 1);
244
245
                g.setColor(new Color(45, 8 , 165));
246
                g.drawRect(        (int)p.getX() - dpto,
247
                                        (int)p.getY() - dpto,
248
                                        DIAM_CIRCLE,
249
                                        DIAM_CIRCLE);
250
                g.drawLine((int)p.getX(), (int)p.getY() - dpto - incr, (int)p.getX(), (int)p.getY() + dpto + incr);
251
                g.drawLine((int)p.getX() - dpto - incr, (int)p.getY(), (int)p.getX() + dpto + incr, (int)p.getY());
252
                if(showNumber){
253
                        g.setColor(Color.WHITE);
254
                        g.drawString(String.valueOf(pointNumber + 1), (int)(p.getX() + dpto + 4), (int)(p.getY() - dpto - 4) );
255
                        g.setColor(new Color(45, 8 , 165));
256
                        g.drawString(String.valueOf(pointNumber + 1), (int)(p.getX() + dpto + 1), (int)(p.getY() - dpto - 1) );
257
                }
258
        }
259
260
        /* (non-Javadoc)
261
         * @see com.iver.cit.gvsig.fmap.layers.FLayer#print(java.awt.Graphics2D, com.iver.cit.gvsig.fmap.ViewPort, com.iver.cit.gvsig.fmap.operations.Cancellable, double)
262
         */
263
        public void print(Graphics2D g, ViewPort viewPort, Cancellable cancel,
264
                        double scale) throws DriverException {
265
                // TODO Auto-generated method stub
266
267
        }
268
269
        /**
270
         * Elimina los puntos de la lista que no tiene las dos coordenadas asignadas.
271
         */
272
        public void clean(){
273
                Iterator iter = pointList.iterator();
274
                while (iter.hasNext()) {
275
                        GeoPoint gp = (GeoPoint) iter.next();
276
                        if(gp.mapPoint == null || gp.pixelPoint == null)
277
                                iter.remove();
278
                }
279
        }
280
        /**
281
         * A?ade un punto a la lista
282
         * @param point punto para la lista
283
         */
284
        public GeoPoint addPoint(Point2D pixel, Point2D map){
285
                GeoPoint p = new GeoPoint(pixel, map);
286
                pointList.add(p);
287
                return p;
288
        }
289
290
        /**
291
         * Obtiene el punto de la posici?n pos
292
         */
293
        public GeoPoint getPoint(int pos){
294
                try{
295
                        return (GeoPoint)pointList.get(pos);
296
                }catch(IndexOutOfBoundsException exc){
297
                        return null;
298
                }
299
        }
300
301
        /**
302
         * Elimina la lista de puntos almacenada
303
         */
304
        public void clear(){
305
                pointList = new ArrayList();
306
        }
307
308
        /**
309
         * Elimina el punto de la posici?n indicada por el par?metro pos
310
         * @param pos        Posici?n del punto a eliminar
311
         */
312
        public void remove(int pos){
313
                pointList.remove(pos);
314
        }
315
316
        /**
317
         *Elimina el ?ltimo punto de la lista.
318
         */
319
        public void delLastPoint(){
320
                pointList.remove(pointList.size() - 1);
321
        }
322
323
        /**
324
         * Funci?n que obtiene si un punto es nuevo o no. Un punto es nuevo si todavia
325
         * no han sido asignadas todas sus coordenadas.
326
         * @param n N?mero de punto a obtener si es nuevo
327
         * @return        true si es nuevo o false si no lo es
328
         */
329
        public boolean isNewPoint(int n){
330
                if(this.getPoint(n) == null)
331
                        return false;
332
                if(this.getPoint(n).pixelPoint == null || this.getPoint(n).mapPoint == null)
333
                        return true;
334
                return false;
335
        }
336
337
        /**
338
         * Devuelve el n?mero de puntos de la capa
339
         * @return entero que representa el n?mero de puntos de la capa
340
         */
341
        public int length(){
342
                return pointList.size();
343
        }
344
345
        /**
346
         * Actualiza un punto de la lista de una posici?n determinada
347
         * @param point punto para la lista
348
         */
349
        public void updatePoint(Point2D pixel, Point2D map, int pos){
350
                GeoPoint gp = (GeoPoint)pointList.get(pos);
351
                if(pixel != null)
352
                        gp.pixelPoint = pixel;
353
                if(map != null)
354
                        gp.mapPoint = map;
355
        }
356
357
        /**
358
         * Calcula el RMS para el punto de la posici?n pos
359
         * @param pos        Posici?n
360
         * @return        valor RMS para el punto solicitado
361
         */
362
        private double calcDoubleRMS(int pos){
363
                if(transformPointList != null){
364
                        try{
365
                                double a = (transformPointList[pos].getX() - getPoint(pos).mapPoint.getX());
366
                                double b = (transformPointList[pos].getY() - getPoint(pos).mapPoint.getY());
367
                                return Math.sqrt(a*a + b*b);
368
                        }catch(ArrayIndexOutOfBoundsException e){
369
                                //No hacemos nada pq ha intentado obtener un punto que no existe. Hace un return 0
370
                        }catch(NullPointerException e){
371
                                //No hacemos nada pq el punto a?n no est? completo y est? intentando obtener un valor que no existe.Hace un return 0
372
                        }
373
                }
374
                return 0D;
375
        }
376
377
        /**
378
         * Calcula el RMS para el punto de la posici?n pos
379
         * @param pos        Posici?n
380
         * @return        RMS en forma de String
381
         */
382
        public String calcRMS(int pos){
383
                return String.valueOf(calcDoubleRMS(pos));
384
        }
385
386
        /**
387
         * Calcula el residuo en X para el punto de la posici?n pos
388
         * @param pos        Posici?n
389
         * @return        residuo Y en forma de String
390
         */
391
        public String calcResX(int pos){
392
                if(transformPointList != null){
393
                        try{
394
                                double a = (transformPointList[pos].getX() - getPoint(pos).mapPoint.getX());
395
                                return String.valueOf(Math.sqrt(a*a));
396
                        }catch(ArrayIndexOutOfBoundsException e){
397
                                //No hacemos nada pq ha intentado obtener un punto que no existe. Hace un return 0
398
                        }catch(NullPointerException e){
399
                                //No hacemos nada pq el punto a?n no est? completo y est? intentando obtener un valor que no existe.Hace un return 0
400
                        }
401
                }
402
                return "0";
403
        }
404
405
        /**
406
         * Calcula el residuo en Y para el punto de la posici?n pos
407
         * @param pos        Posici?n
408
         * @return        residuo Y en forma de String
409
         */
410
        public String calcResY(int pos){
411
                if(transformPointList != null){
412
                        try{
413
                                double b = (transformPointList[pos].getY() - getPoint(pos).mapPoint.getY());
414
                                return String.valueOf(Math.sqrt(b*b));
415
                        }catch(ArrayIndexOutOfBoundsException e){
416
                                //No hacemos nada pq ha intentado obtener un punto que no existe. Hace un return 0
417
                        }catch(NullPointerException e){
418
                                //No hacemos nada pq el punto a?n no est? completo y est? intentando obtener un valor que no existe.Hace un return 0
419
                        }
420
                }
421
                return "0";
422
        }
423
424
        /**
425
         * Calcula el error RMS para todos los puntos
426
         * @return        Error RMS total en forma de String
427
         */
428
        public String calcTotal(){
429
                double add = 0D;
430
                try{
431
                        for(int i=0;i<transformPointList.length;i++)
432
                                add += calcDoubleRMS(i);
433
                }catch(NullPointerException e){
434
                        //transformPointList es null por lo que no hay puntos a transformar devolviendo 0.
435
                        return "0";
436
                }
437
                return String.valueOf(Math.sqrt(add/transformPointList.length));
438
        }
439
440
        /**
441
         * Muestra en consola los puntos de la capa
442
         */
443
        public void showPoints(){
444
                for(int i=0;i<pointList.size();i++){
445
                        if(((GeoPoint)pointList.get(i)).pixelPoint != null && ((GeoPoint)pointList.get(i)).mapPoint != null){
446
                                System.out.println("PUNTO "+i+": ");
447
                                System.out.println("pix->"+((GeoPoint)pointList.get(i)).pixelPoint.getX()+" "+((GeoPoint)pointList.get(i)).pixelPoint.getY());
448
                                System.out.println("map->"+((GeoPoint)pointList.get(i)).mapPoint.getX()+" "+((GeoPoint)pointList.get(i)).mapPoint.getY());
449
                                System.out.println("extRight->"+((GeoPoint)pointList.get(i)).rightViewPort.getExtent());
450
                                System.out.println("extLeft->"+((GeoPoint)pointList.get(i)).leftViewPort.getExtent());
451
                        }else
452
                                System.out.println("PUNTO "+i+": NULL");
453
                }
454
        }
455
456
        /**
457
         * Salva la lista de puntos sobre el fichero que se la pasa por
458
         * par?metro
459
         * @param file Nombre del fichero
460
         */
461
        public void PointList2XML(String file){;
462
                geoPointPersistence.savePointList(file);
463
        }
464
465
        /**
466
         * Recupera una lista de puntos desde un fichero XML
467
         * @param file Nombre del fichero
468
         */
469
        public void XML2PointList(String file){
470
                geoPointPersistence.loadPointList(file);
471
        }
472
473
        /**
474
         * Salva la lista de puntos en forma tabular sobre el fichero que se la pasa por
475
         * par?metro
476
         * @param file Nombre del fichero
477
         */
478
        public void PointList2Ascii(String file){;
479
                geoPointPersistence.saveAsciiPointList(file);
480
        }
481
482
        /* (non-Javadoc)
483
         * @see com.iver.cit.gvsig.fmap.layers.StatusRasterInterface#setXMLEntity(com.iver.utiles.XMLEntity)
484
         */
485
        public void setXMLEntity(XMLEntity xml)throws XMLException {
486
                int nPoints = -1;
487
                if (xml.contains("raster.geoPoints.nPoints")) {
488
                        nPoints = xml.getIntProperty("raster.geoPoints.nPoints");
489
                        GeoPoint point = null;
490
                        Point2D pixel = new Point2D.Double(), map = new Point2D.Double();
491
                        if(nPoints > 0){
492
493
                                for(int i = 0;i<nPoints;i++){
494
495
                                        if (xml.contains("raster.geoPoint."+i+".pixelX") && xml.contains("raster.geoPoint."+i+".pixelY"))
496
                                                pixel.setLocation(xml.getDoubleProperty("raster.geoPoint."+i+".pixelX"), xml.getDoubleProperty("raster.geoPoint."+i+".pixelY"));
497
498
                                        if (xml.contains("raster.geoPoint."+i+".mapX") && xml.contains("raster.geoPoint."+i+".mapY"))
499
                                                map.setLocation(xml.getDoubleProperty("raster.geoPoint."+i+".mapX"), xml.getDoubleProperty("raster.geoPoint."+i+".mapY"));
500
501
                                        point = this.addPoint(pixel, map);
502
503
                                        if (xml.contains("raster.geoPoint."+i+".active"))
504
                                                point.active = xml.getBooleanProperty("raster.geoPoint."+i+".active");
505
506
                                        point.leftCenterPoint = new Point2D.Double();
507
                                        if (xml.contains("raster.geoPoint."+i+".leftCenterX") && xml.contains("raster.geoPoint."+i+".leftCenterY"))
508
                                                point.leftCenterPoint.setLocation(xml.getDoubleProperty("raster.geoPoint."+i+".leftCenterX"), xml.getDoubleProperty("raster.geoPoint."+i+".leftCenterY"));
509
510
                                        point.rightCenterPoint = new Point2D.Double();
511
                                        if (xml.contains("raster.geoPoint."+i+".rightCenterX") && xml.contains("raster.geoPoint."+i+".rightCenterY"))
512
                                                point.rightCenterPoint.setLocation(xml.getDoubleProperty("raster.geoPoint."+i+".rightCenterX"), xml.getDoubleProperty("raster.geoPoint."+i+".rightCenterY"));
513
514
                                        point.leftViewPort = new ViewPort(null);
515
                                        point.rightViewPort = new ViewPort(null);
516
517
                                        double x = 0D, y = 0D, w = 0D, h = 0D;
518
                                        int width = 0, height = 0;
519
                                        Rectangle2D r = new Rectangle2D.Double();
520
                                        if (xml.contains("raster.geoPoint."+i+".leftViewPort.proj"))
521
                                                point.leftViewPort.setProjection(ProjectionPool.get(xml.getStringProperty("raster.geoPoint."+i+".leftViewPort.proj")));
522
                                        if (xml.contains("raster.geoPoint."+i+".leftViewPort.x"))
523
                                                x = xml.getDoubleProperty("raster.geoPoint."+i+".leftViewPort.x");
524
                                        if (xml.contains("raster.geoPoint."+i+".leftViewPort.y"))
525
                                                y = xml.getDoubleProperty("raster.geoPoint."+i+".leftViewPort.y");
526
                                        if (xml.contains("raster.geoPoint."+i+".leftViewPort.w"))
527
                                                w = xml.getDoubleProperty("raster.geoPoint."+i+".leftViewPort.w");
528
                                        if (xml.contains("raster.geoPoint."+i+".leftViewPort.h"))
529
                                                h = xml.getDoubleProperty("raster.geoPoint."+i+".leftViewPort.h");
530
                                        r.setRect(x, y, w, h);
531
                                        point.leftViewPort.setExtent(r);
532
                                        if (xml.contains("raster.geoPoint."+i+".leftViewPort.imgWidth"))
533
                                                width = xml.getIntProperty("raster.geoPoint."+i+".leftViewPort.imgWidth");
534
                                        if (xml.contains("raster.geoPoint."+i+".leftViewPort.imgHeight"))
535
                                                height = xml.getIntProperty("raster.geoPoint."+i+".leftViewPort.imgHeight");
536
                                        point.leftViewPort.setImageSize(new Dimension(width, height));
537
538
                                        r = new Rectangle2D.Double();
539
                                        if (xml.contains("raster.geoPoint."+i+".rightViewPort.proj"))
540
                                                point.rightViewPort.setProjection(ProjectionPool.get(xml.getStringProperty("raster.geoPoint."+i+".rightViewPort.proj")));
541
                                        if (xml.contains("raster.geoPoint."+i+".rightViewPort.x"))
542
                                                x = xml.getDoubleProperty("raster.geoPoint."+i+".rightViewPort.x");
543
                                        if (xml.contains("raster.geoPoint."+i+".rightViewPort.y"))
544
                                                y = xml.getDoubleProperty("raster.geoPoint."+i+".rightViewPort.y");
545
                                        if (xml.contains("raster.geoPoint."+i+".rightViewPort.w"))
546
                                                w = xml.getDoubleProperty("raster.geoPoint."+i+".rightViewPort.w");
547
                                        if (xml.contains("raster.geoPoint."+i+".rightViewPort.h"))
548
                                                h = xml.getDoubleProperty("raster.geoPoint."+i+".rightViewPort.h");
549
                                        r.setRect(x, y, w, h);
550
                                        point.rightViewPort.setExtent(r);
551
                                        if (xml.contains("raster.geoPoint."+i+".rightViewPort.imgWidth"))
552
                                                width = xml.getIntProperty("raster.geoPoint."+i+".rightViewPort.imgWidth");
553
                                        if (xml.contains("raster.geoPoint."+i+".rightViewPort.imgHeight"))
554
                                                height = xml.getIntProperty("raster.geoPoint."+i+".rightViewPort.imgHeight");
555
                                        point.rightViewPort.setImageSize(new Dimension(width, height));
556
557
                                }
558
                        }
559
                }
560
        }
561
562
        /* (non-Javadoc)
563
         * @see com.iver.cit.gvsig.fmap.layers.StatusRasterInterface#getXMLEntity(com.iver.utiles.XMLEntity)
564
         */
565
        public void getXMLEntity(XMLEntity xml) throws XMLException {
566
                xml.putProperty("raster.geoPoints.nPoints", getCountPoints());
567
                for(int i=0;i<this.getCountPoints();i++){
568
                        xml.putProperty("raster.geoPoint."+i+".pixelX", getPoint(i).pixelPoint.getX());
569
                        xml.putProperty("raster.geoPoint."+i+".pixelY", getPoint(i).pixelPoint.getY());
570
                        xml.putProperty("raster.geoPoint."+i+".mapX", getPoint(i).mapPoint.getX());
571
                        xml.putProperty("raster.geoPoint."+i+".mapY", getPoint(i).mapPoint.getX());
572
573
                        xml.putProperty("raster.geoPoint."+i+".active", getPoint(i).active);
574
575
                        xml.putProperty("raster.geoPoint."+i+".leftCenterX", getPoint(i).leftCenterPoint.getX());
576
                        xml.putProperty("raster.geoPoint."+i+".leftCenterY", getPoint(i).leftCenterPoint.getY());
577
                        xml.putProperty("raster.geoPoint."+i+".rightCenterX", getPoint(i).rightCenterPoint.getX());
578
                        xml.putProperty("raster.geoPoint."+i+".rightCenterY", getPoint(i).rightCenterPoint.getY());
579
580
                        xml.putProperty("raster.geoPoint."+i+".leftViewPort.proj", getPoint(i).leftViewPort.getProjection().getAbrev());
581
                        xml.putProperty("raster.geoPoint."+i+".leftViewPort.x", getPoint(i).leftViewPort.getExtent().getX());
582
                        xml.putProperty("raster.geoPoint."+i+".leftViewPort.y", getPoint(i).leftViewPort.getExtent().getY());
583
                        xml.putProperty("raster.geoPoint."+i+".leftViewPort.w", getPoint(i).leftViewPort.getExtent().getWidth());
584
                        xml.putProperty("raster.geoPoint."+i+".leftViewPort.h", getPoint(i).leftViewPort.getExtent().getHeight());
585
                        xml.putProperty("raster.geoPoint."+i+".leftViewPort.imgWidth", getPoint(i).leftViewPort.getImageWidth());
586
                        xml.putProperty("raster.geoPoint."+i+".leftViewPort.imgHeight", getPoint(i).leftViewPort.getImageHeight());
587
588
                        xml.putProperty("raster.geoPoint."+i+".rightViewPort.proj", getPoint(i).rightViewPort.getProjection().getAbrev());
589
                        xml.putProperty("raster.geoPoint."+i+".rightViewPort.x", getPoint(i).rightViewPort.getExtent().getX());
590
                        xml.putProperty("raster.geoPoint."+i+".rightViewPort.y", getPoint(i).rightViewPort.getExtent().getY());
591
                        xml.putProperty("raster.geoPoint."+i+".rightViewPort.w", getPoint(i).rightViewPort.getExtent().getWidth());
592
                        xml.putProperty("raster.geoPoint."+i+".rightViewPort.h", getPoint(i).rightViewPort.getExtent().getHeight());
593
                        xml.putProperty("raster.geoPoint."+i+".rightViewPort.imgWidth", getPoint(i).rightViewPort.getImageWidth());
594
                        xml.putProperty("raster.geoPoint."+i+".rightViewPort.imgHeight", getPoint(i).rightViewPort.getImageHeight());
595
                }
596
        }
597
        //**********************End Methods********************************
598
599
        //**********************Setters & Getters**************************
600
        /**
601
         * Asigna el viewPort de la mini imagen de la derecha en
602
         * el punto de la posici?n que se le pasa por par?metro
603
         * @param pos Posici?n del punto
604
         * @param vp ViewPort asignado
605
         */
606
        public void setRightViewPort(int pos, ViewPort vp){
607
                getPoint(pos).rightViewPort = vp;
608
        }
609
        /**
610
         * @return Returns the showNumber.
611
         */
612
        public boolean isShowNumber() {
613
                return showNumber;
614
        }
615
616
        /**
617
         * @param showNumber The showNumber to set.
618
         */
619
        public void setShowNumber(boolean showNumber) {
620
                this.showNumber = showNumber;
621
        }
622
623
        /**
624
         * Asigna el punto central de la mini imagen de la izquierda
625
         * en el punto de la posici?n que se le pasa por par?metro
626
         * @param pos Posici?n del punto
627
         * @param p Punto asignado
628
         */
629
        public void setLeftCenterPoint(int pos, Point2D p){
630
                getPoint(pos).leftCenterPoint = p;
631
        }
632
633
        /**
634
         * Asigna el punto central de la mini imagen de la derecha
635
         * en el punto de la posici?n que se le pasa por par?metro
636
         * @param pos Posici?n del punto
637
         * @param p Punto asignado
638
         */
639
        public void setRightCenterPoint(int pos, Point2D p){
640
                getPoint(pos).rightCenterPoint = p;
641
        }
642
643
        /**
644
         * Asigna el viewPort de la mini imagen de la izquierda en
645
         * el punto de la posici?n que se le pasa por par?metro
646
         * @param pos Posici?n del punto
647
         * @param vp ViewPort asignado
648
         */
649
        public void setLeftViewPort(int pos, ViewPort vp){
650
                getPoint(pos).leftViewPort = vp;
651
        }
652
653
        /**
654
         * Devuelve el n?mero de puntos de la lista
655
         * @return entero que representa el n?mero de puntos
656
         */
657
        public int getCountPoints(){
658
                if(pointList != null)
659
                        return pointList.size();
660
                else
661
                        return 0;
662
        }
663
664
        /**
665
         * Activa o desactiva el punto de una posici?n de la lista
666
         * @param n        N?mero de punto
667
         * @param active        true activo, false desactivo
668
         */
669
        public void setPointActive(int n, boolean active){
670
                if(n < 0 || n >= this.length())
671
                        return;
672
                ((GeoPoint)pointList.get(n)).active = active;
673
        }
674
675
        /**
676
         * Dice si un punto de la lista est? activo o no
677
         * @param n        Posici?n del punto
678
         * @return        true si est? activo y false si no lo est?.
679
         */
680
        public boolean isPointActive(int n){
681
                if(n < 0 || n >= this.length())
682
                        return false;
683
                return ((GeoPoint)pointList.get(n)).active;
684
        }
685
686
        /**
687
         * Obtiene el extent de la capa
688
         * @return extent en Rectangle2D.
689
         */
690
        public Rectangle2D getFullExtent()throws DriverException {
691
                View theView = (View) PluginServices.getMDIManager().getActiveView();
692
                return theView.getMapControl().getMapContext().getViewPort().getExtent();
693
        }
694
695
        /**
696
         * @return Returns the lastTool.
697
         */
698
        public String getLastTool() {
699
                return lastTool;
700
        }
701
702
        /**
703
         * @param lastTool The lastTool to set.
704
         */
705
        public void setLastTool(String lastTool) {
706
                this.lastTool = lastTool;
707
        }
708
709
        /**
710
         *Asigna el extent para las mini imagenes. Estas deben ser recuperadas cuando se selecciona
711
         *un punto
712
         */
713
        public void setMiniExtent(int nPoint, Point2D centerPoint, ViewPort vp, boolean isRight){
714
                if(isRight){
715
                        ((GeoPoint)pointList.get(nPoint)).rightCenterPoint = centerPoint;
716
                        ((GeoPoint)pointList.get(nPoint)).rightViewPort = vp;
717
                }else{
718
                        ((GeoPoint)pointList.get(nPoint)).leftCenterPoint = centerPoint;
719
                        ((GeoPoint)pointList.get(nPoint)).leftViewPort = vp;
720
                }
721
        }
722
723
        /**
724
         * Obtiene el extent de la mini imagen
725
         * @param nPoint Punto de la lista
726
         * @return
727
         */
728
        public ViewPort getMiniExtent(int nPoint, boolean isRight){
729
                if(isRight)
730
                        return ((GeoPoint)pointList.get(nPoint)).rightViewPort;
731
                else
732
                        return ((GeoPoint)pointList.get(nPoint)).leftViewPort;
733
734
        }
735
736
        /**
737
         * Obtiene el punto central de la mini imagen
738
         * @param nPoint Punto de la lista
739
         * @return
740
         */
741
        public Point2D getCenterPoint(int nPoint, boolean isRight){
742
                if(isRight)
743
                        return ((GeoPoint)pointList.get(nPoint)).rightCenterPoint;
744
                else
745
                        return ((GeoPoint)pointList.get(nPoint)).leftCenterPoint;
746
        }
747
748
        /**
749
         * Obtiene le ?ltimo punto de la lista
750
         * @return El ?ltimo punto georreferenciado de la lista
751
         */
752
        public GeoPoint getLastPoint(){
753
                return (GeoPoint)pointList.get(pointList.size());
754
        }
755
756
        /**
757
         * Obtiene el array de puntos
758
         * @return
759
         */
760
        public ArrayList getListPoint(){
761
                return pointList;
762
        }
763
764
        /**
765
     * Obtiene el gestor de puntos
766
     * @return PointManager
767
     */
768
    public PointManager getPointManager() {
769
                return pointManager;
770
        }
771
772
    /**
773
     * Asigna el gestor de puntos
774
     * @param PointManager
775
     */
776
    public void setPointManager(PointManager pointManager) {
777
                this.pointManager = pointManager;
778
        }
779
780
    /**
781
     * Obtiene la capa de la imagen a georreferenciar
782
     * @return FLyrGeoRaster
783
     */
784
    public FLyrGeoRaster getLyrGeoRaster() {
785
                return lyrGeoRaster;
786
        }
787
788
    /**
789
         * Asigna la capa de la imagen a georreferenciar
790
         * @param flyGeoRaster
791
         */
792
        public void setLyrGeoRaster(FLyrGeoRaster lyGeoRaster){
793
                this.lyrGeoRaster = lyGeoRaster;
794
                if(geoPointPersistence == null)
795
                        geoPointPersistence = new GeoPointPersistence(this);
796
        }
797
798
        /**
799
         * Asigna el flag de visibilidad a true o false. Si est? a true la capa
800
         * es visible normalmente y si est? a false no se mostrar?
801
         * @param visible flag de visibilidad
802
         */
803
        public void setVisible(boolean visible){
804
                this.lyrVisible = visible;
805
        }
806
807
        /**
808
         * Obtiene el flag de visibilidad true o false. Si est? a true la capa
809
         * es visible normalmente y si est? a false no se muestra
810
         * @return flag de visibilidad
811
         */
812
        public boolean isVisible(){
813
                return this.lyrVisible;
814
        }
815
816
        /**
817
         * Obtiene la lista de puntos transformados. La lista de puntos transformada es la lista de puntos
818
         * a la que se le ha aplicado la transformaci?n af?n en base a las muestras tomadas.
819
         * Esta lista de puntos transformados hay que mantenerla actualizada cada vez que se hace un
820
         * update de un punto ya se usa para calcular los errores.
821
         * @return Lista de puntos transformada.
822
         */
823
        public Point2D[] getTransformPointList() {
824
                return transformPointList;
825
        }
826
827
        /**
828
         * Asigna la lista de puntos transformada. La lista de puntos transformada es la lista de puntos
829
         * a la que se le ha aplicado la transformaci?n af?n en base a las muestras tomadas.
830
         * Esta lista de puntos transformados hay que mantenerla actualizada cada vez que se hace un
831
         * update de un punto ya se usa para calcular los errores.
832
         * @param transformPointList Lista de puntos transformada.
833
         */
834
        public void setTransformPointList(Point2D[] transformPointList) {
835
                this.transformPointList = transformPointList;
836
        }
837
838
        /**
839
         * Asigna el objeto que gestiona la persistencia
840
         */
841
        public void setPersistence(IPersistence geoPointPersistence) {
842 5272 nacho
                if(this.geoPointPersistence == null)
843 5241 nacho
                        this.geoPointPersistence = geoPointPersistence;
844
        }
845
        //**********************End Setters & Getters*********************
846
847
}