Statistics
| Revision:

gvsig-raster / org.gvsig.raster.georeferencing / trunk / org.gvsig.raster.georeferencing / org.gvsig.raster.georeferencing.swing / org.gvsig.raster.georeferencing.swing.impl / src / main / java / org / gvsig / raster / georeferencing / swing / impl / view / synchronize / SynchronizationViewImpl.java @ 1730

History | View | Annotate | Download (14.4 KB)

1
/* gvSIG. Sistema de Informaci?n Geogr?fica de la Generalitat Valenciana
2
 *
3
 * Copyright (C) 2007 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 org.gvsig.raster.georeferencing.swing.impl.view.synchronize;
20

    
21
import java.awt.Color;
22
import java.awt.geom.Point2D;
23

    
24
import org.gvsig.fmap.dal.coverage.datastruct.GeoPoint;
25
import org.gvsig.gui.beans.table.exceptions.NotInitializeException;
26
import org.gvsig.raster.georeferencing.swing.GeoreferencingSwingLibrary;
27
import org.gvsig.raster.georeferencing.swing.control.GeorefControlPanel;
28
import org.gvsig.raster.georeferencing.swing.exception.InvalidRequestException;
29
import org.gvsig.raster.georeferencing.swing.impl.GeoreferencingSwingImplLibrary;
30
import org.gvsig.raster.georeferencing.swing.impl.view.BaseViewPanel;
31
import org.gvsig.raster.georeferencing.swing.impl.view.ViewPanelImpl;
32
import org.gvsig.raster.georeferencing.swing.model.GCPList;
33
import org.gvsig.raster.georeferencing.swing.view.GeoreferencingView;
34
import org.gvsig.raster.georeferencing.swing.view.IViewRequestManager;
35
import org.gvsig.raster.georeferencing.swing.view.SynchronizedViews;
36
import org.gvsig.raster.georeferencing.swing.view.ToolListener;
37
import org.gvsig.raster.swing.pagedtable.PagedTable;
38

    
39
/**
40
 * Gestor para operaciones con las vistas y zooms
41
 * 
42
 * 04/02/2008
43
 * @author Nacho Brodin nachobrodin@gmail.com
44
 */
45
public class SynchronizationViewImpl implements SynchronizedViews {
46
        //Dialogos
47
        private GeoreferencingView                viewRaster                     = null;
48
        private GeoreferencingView                viewMap                        = null;
49
        private GeoreferencingView                zoomMap                        = null;
50
        private GeoreferencingView                zoomRaster                     = null;
51
        
52
        //Gestores de peticiones
53
        private IViewRequestManager               viewRasterRequestManager       = null;
54
        private IViewRequestManager               viewMapRequestManager          = null;
55
        private IViewRequestManager               zoomRasterRequestManager       = null;
56
        private IViewRequestManager               zoomMapRequestManager          = null;
57
        
58
        private GCPList                           gpList                         = null;
59
        private GCPSynchronizationImpl            gcpSync                        = null;
60
        private GeorefControlPanel                controlPanel                   = null;
61
        
62
        public SynchronizationViewImpl(GCPList gpList, ToolListener listener) {
63
                this.gpList = gpList;
64
                gcpSync = new GCPSynchronizationImpl(gpList, listener);
65
                
66
        }
67
        
68
        /**
69
         * Asigna las vistas
70
         * @param vRaster
71
         * @param vMap
72
         * @param zRaster
73
         * @param zMap
74
         */
75
        public void setViews(
76
                        GeoreferencingView vMap,
77
                        GeoreferencingView vRaster, 
78
                        GeoreferencingView zMap,
79
                        GeoreferencingView zRaster, 
80
                        PagedTable table) {
81
                viewRaster = vRaster;
82
                viewMap = vMap;
83
                zoomMap = zMap;
84
                zoomRaster = zRaster;
85
                gcpSync.setViews(vMap, vRaster, zMap, zRaster, table);
86
        }
87

    
88
        /**
89
         * Asigna los gestores de peticiones.
90
         * @param vRaster
91
         * @param vMap
92
         * @param zRaster
93
         * @param zMap
94
         */
95
        public void setRequestsManager(
96
                        IViewRequestManager vMap, 
97
                        IViewRequestManager vRaster,
98
                        IViewRequestManager zMap,
99
                        IViewRequestManager zRaster) {
100
                viewRasterRequestManager = vRaster;
101
                viewMapRequestManager= vMap;
102
                zoomRasterRequestManager = zRaster;
103
                zoomMapRequestManager = zMap;
104
                gcpSync.setRequestsManager(vRaster, vMap, zRaster, zMap);
105
        }
106
        
107
        /**
108
         * Disables all tools in all views
109
         * @param enable
110
         */
111
        public void disableAllTools() {
112
                if(zoomMap != null) 
113
                        ((BaseViewPanel)zoomMap).disableAllTools();
114
                if(zoomRaster != null) 
115
                        ((BaseViewPanel)zoomRaster).disableAllTools();
116
                if(viewRaster != null)
117
                        ((BaseViewPanel)viewRaster).disableAllTools();
118
                if(viewMap != null)
119
                        ((BaseViewPanel)viewMap).disableAllTools();
120
                setActiveLayerPoints(false);
121
        }
122
        
123
        public void disableTool(int tool) {
124
                if(zoomMap != null) 
125
                        ((BaseViewPanel)zoomMap).disableTool(tool);
126
                if(zoomRaster != null) 
127
                        ((BaseViewPanel)zoomRaster).disableTool(tool);
128
                if(viewRaster != null)
129
                        ((BaseViewPanel)viewRaster).disableTool(tool);
130
                if(viewMap != null)
131
                        ((BaseViewPanel)viewMap).disableTool(tool);
132
                if(tool == GeoreferencingSwingLibrary.DRAG_POINT_TOOL) {
133
                        controlPanel.getDragPointButton().setSelected(false);
134
                        setActiveLayerPoints(false);
135
                }
136
                if(tool == GeoreferencingSwingLibrary.MOVE_POINT_TOOL) {
137
                        controlPanel.getMovePointButton().setSelected(false);
138
                }
139
        }
140
        
141
        /**
142
         * Asigna el panel con la tabla
143
         * @param tablePanel
144
         */
145
        public void setGeoPointList(GCPList gpList) {
146
                this.gpList = gpList;
147
        }
148
        
149
        /**
150
         * Desactiva la tool activa de las vistas
151
         * @param active
152
         */
153
        public void sleepActiveTools() {
154
                if(zoomMap != null) 
155
                        ((BaseViewPanel)zoomMap).getControl().sleepTools();
156
                if(zoomRaster != null) 
157
                        ((BaseViewPanel)zoomRaster).getControl().sleepTools();
158
                if(viewRaster != null)
159
                        ((BaseViewPanel)viewRaster).getControl().sleepTools();
160
                if(viewMap != null)
161
                        ((BaseViewPanel)viewMap).getControl().sleepTools();
162
        }
163
        
164
        /**
165
         * Activa la tool activa de las vistas
166
         * @param active
167
         */
168
        public void awakeActiveTools() {
169
                if(zoomMap != null) 
170
                        ((BaseViewPanel)zoomMap).getControl().awakeTools();
171
                if(zoomRaster != null) 
172
                        ((BaseViewPanel)zoomRaster).getControl().awakeTools();
173
                if(viewRaster != null)
174
                        ((BaseViewPanel)viewRaster).getControl().awakeTools();
175
                if(viewMap != null)
176
                        ((BaseViewPanel)viewMap).getControl().awakeTools();
177
        }
178
        
179
        public void enableTool(int tool) {
180
                if(zoomMap != null) 
181
                        ((BaseViewPanel)zoomMap).enableTool(tool);
182
                if(zoomRaster != null) 
183
                        ((BaseViewPanel)zoomRaster).enableTool(tool);
184
                if(viewRaster != null)
185
                        ((BaseViewPanel)viewRaster).enableTool(tool);
186
                if(viewMap != null)
187
                        ((BaseViewPanel)viewMap).enableTool(tool);
188
                if(tool == GeoreferencingSwingLibrary.DRAG_POINT_TOOL) {
189
                        controlPanel.getDragPointButton().setSelected(true);
190
                        setActiveLayerPoints(true);
191
                }
192
                if(tool == GeoreferencingSwingLibrary.MOVE_POINT_TOOL) {
193
                        controlPanel.getMovePointButton().setSelected(true);
194
                }
195
        }
196
        
197
        /**
198
         * Selecciona o deselecciona la tool de selecci?n de punto para cada vista
199
         * @param true para activar y false para desactivar
200
         */
201
        /*public void selectPointTool(boolean select) {
202
                if(zoomMap != null)
203
                        ((BaseZoomView)zoomMap).getControl().selectTool(SelectCoordOnViewTool.class, select);
204
                if(zoomRaster != null)
205
                        ((BaseZoomView)zoomRaster).getControl().selectTool(SelectCoordOnViewTool.class, select);
206
                if(viewRaster != null)
207
                        ((BaseZoomView)viewRaster).getControl().selectTool(SelectCoordOnViewTool.class, select);
208
                if(viewMap != null)
209
                        ((BaseZoomView)viewMap).getControl().selectTool(SelectCoordOnViewTool.class, select);
210
        }*/
211
        
212
        /**
213
         * Asigna el color de los gr?ficos.
214
         * @param c
215
         */
216
        public void setGraphicsColor(Color c) {
217
                if(viewRaster != null && viewRaster instanceof ViewPanelImpl) {
218
                        viewRaster.getCanvas().setTextColor(c);
219
                        ((ViewPanelImpl)viewRaster).getZoomCursorGraphicLayer().setColor(c);
220
                }
221
                if(viewMap != null && viewRaster instanceof ViewPanelImpl) {
222
                        viewMap.getCanvas().setTextColor(c);
223
                        ((ViewPanelImpl)viewMap).getZoomCursorGraphicLayer().setColor(c);
224
                }
225
                if(zoomRaster != null) 
226
                        zoomRaster.getCanvas().setTextColor(c);
227
                if(zoomMap != null) 
228
                        zoomMap.getCanvas().setTextColor(c);
229
        }
230
        
231
        /**
232
         * Asigna el color de los gr?ficos.
233
         * @param c
234
         */
235
        public void setBackgroundColor(Color c) {
236
                if(viewMapRequestManager != null)
237
                        viewMapRequestManager.setBackGroundColor(c);
238
                if(viewRasterRequestManager != null)
239
                        viewRasterRequestManager.setBackGroundColor(c);
240
                if(zoomMapRequestManager != null)
241
                        zoomMapRequestManager.setBackGroundColor(c);
242
                if(zoomRasterRequestManager != null)
243
                        zoomRasterRequestManager.setBackGroundColor(c);
244
                try {
245
                        if(viewRaster != null) {
246
                                viewRaster.getCanvas().setBackgroundColor(c);
247
                                viewRaster.getCanvas().setForceRequest(true);
248
                                ((BaseViewPanel)viewRaster).getControl().getExtensionRequest().request(viewRaster.getCanvas().getExtent());
249
                        }
250
                        if(viewMap != null) {
251
                                viewMap.getCanvas().setBackgroundColor(c);
252
                                viewMap.getCanvas().setForceRequest(true);
253
                                ((BaseViewPanel)viewMap).getControl().getExtensionRequest().request(viewMap.getCanvas().getExtent());
254
                        }
255
                        if(zoomRaster != null) { 
256
                                zoomRaster.getCanvas().setBackgroundColor(c);
257
                                zoomRaster.getCanvas().setForceRequest(true);
258
                                ((BaseViewPanel)zoomRaster).getControl().getExtensionRequest().request(zoomRaster.getCanvas().getExtent());
259
                        }
260
                        if(zoomMap != null) { 
261
                                zoomMap.getCanvas().setBackgroundColor(c);
262
                                zoomMap.getCanvas().setForceRequest(true);
263
                                ((BaseViewPanel)zoomMap).getControl().getExtensionRequest().request(zoomMap.getCanvas().getExtent());
264
                        }
265
                } catch (InvalidRequestException e) {
266
                }
267
        }
268
        
269
        /**
270
         * Centra las vistas sobre el punto pasado por par?metro
271
         * @param n N?mero de punto sobre el que se centrar? la visualizaci?n
272
         */
273
        public void centerToPoint(int n) {
274
                if(gpList.size() <= 0) {
275
                        GeoreferencingSwingImplLibrary.messageBoxError("no_selected_point", null);
276
                        return;
277
                }
278

    
279
                GeoPoint gp = gpList.getGeoPoint(n);
280
                double xMap = gp.getMapPoint().getX();
281
                double yMap = gp.getMapPoint().getY();
282
                double xRaster = gp.getPixelPoint().getX();
283
                double yRaster = gp.getPixelPoint().getY();
284

    
285
                if(viewRaster != null && viewMap instanceof ViewPanelImpl) 
286
                        ((ViewPanelImpl)viewRaster).setCenter(new Point2D.Double(xRaster, yRaster));
287
                if(zoomRaster != null) 
288
                        ((BaseViewPanel)zoomRaster).getControl().setCenter(new Point2D.Double(xRaster, yRaster));
289
                if(viewMap != null && viewMap instanceof ViewPanelImpl) 
290
                        ((ViewPanelImpl)viewMap).setCenter(new Point2D.Double(xMap, yMap));
291
                if(zoomMap != null) 
292
                        ((BaseViewPanel)zoomMap).getControl().setCenter(new Point2D.Double(xMap, yMap));
293
        }
294

    
295
        /**
296
         * Obtiene la vista con el mapa de referencia
297
         * @return ViewDialog
298
         */
299
        public GeoreferencingView getViewMap() {
300
                return viewMap;
301
        }
302

    
303
        /**
304
         * Obtiene la vista con el raster a georreferenciar
305
         * @return ViewDialog
306
         */
307
        public GeoreferencingView getViewRaster() {
308
                return viewRaster;
309
        }
310

    
311
        /**
312
         * Obtiene la vista con el zoom del mapa de referencia
313
         * @return ZoomMapDialog
314
         */
315
        public GeoreferencingView getZoomMap() {
316
                return zoomMap;
317
        }
318

    
319
        /**
320
         * Obtiene la vista con el zoom del raster a georreferenciar
321
         * @return ZoomRasterDialog
322
         */
323
        public GeoreferencingView getZoomRaster() {
324
                return zoomRaster;
325
        }
326

    
327
        /**
328
         * Obtiene el gestor de la vista con la cartograf?a de referencia
329
         * @return ViewMapRequestManager
330
         */
331
        public IViewRequestManager getViewMapRequestManager() {
332
                return viewMapRequestManager;
333
        }
334

    
335
        /**
336
         * Obtiene el gestor de la vista con el raster a georreferenciar
337
         * @return ViewRasterRequestManager
338
         */
339
        public IViewRequestManager getViewRasterRequestManager() {
340
                return viewRasterRequestManager;
341
        }
342

    
343
        /**
344
         * Obtiene el gestor de la vista zoom con la cartograf?a de referencia
345
         * @return ViewMapRequestManager
346
         */
347
        public IViewRequestManager getZoomMapRequestManager() {
348
                return zoomMapRequestManager;
349
        }
350

    
351
        /**
352
         * Obtiene el gestor de la vista zoom con el raster
353
         * @return ViewRasterRequestManager
354
         */
355
        public IViewRequestManager getZoomRasterRequestManager() {
356
                return zoomRasterRequestManager;
357
        }
358
        
359
        /**
360
         * Activa o desactiva la capa de puntos
361
         * @param active
362
         */
363
        public void setActiveLayerZoomCursor(boolean active) {
364
                gcpSync.setActiveLayerZoomCursor(active);
365
        }
366
        
367
        /**
368
         * Activa y desactiva los n?meros de punto de las capas gr?ficas
369
         * @param active
370
         */
371
        public void setActiveNumberPoint(boolean active) {
372
                gcpSync.setActiveNumberPoint(active);
373
        }
374
        
375
        /**
376
         * Activa o desactiva la capa de puntos
377
         * @param active
378
         */
379
        public void setActiveLayerPoints(boolean active) {
380
                gcpSync.setActiveLayerPoints(active);
381
        }
382
        
383
        /**
384
         * Recalcula las coordenadas de dibujado de los puntos de control
385
         * y redibuja estos en todas las vistas
386
         */
387
        public void redrawPoints() {
388
                gcpSync.redrawPoints();
389
        }
390

    
391
        public void removePoint(int position) {
392
                gcpSync.removePoint(position);
393
        }
394
        
395
        public void removeAllPoints() {
396
                gcpSync.removeAllPoints();
397
        }
398
        
399
        /**
400
         * Asigna la numeraci?n a los puntos de control. Tanto a la tabla como
401
         * a los GeoPuntos
402
         * @throws NotInitializeException
403
         */
404
        public void calcPointsNumeration() {
405
                gcpSync.calcPointsNumeration();
406
        }
407
        
408
        /**
409
         * Obtiene un punto (GeoPoint) a partir de su n?mero. Hay que tener en cuenta que el n?mero de
410
         * punto puede no coincidir con su posici?n en el array.
411
         * @return GeoPoint
412
         */
413
        public GeoPoint getPointByNumber(int number) {
414
                return gcpSync.getPointByNumber(number);
415
        }
416
        
417
        /**
418
         * Obtiene la posici?n de un punto a partir de su n?mero. Hay que tener en cuenta que el n?mero de
419
         * punto puede no coincidir con su posici?n en el array.
420
         * @return entero con la posici?n o -1 si no existe
421
         */
422
        public int getPointPositionByNumber(int number) {
423
                return gcpSync.getPointPositionByNumber(number);
424
        }
425
        
426
        /**
427
         * Activa o desactiva la visualizaci?n de un punto.
428
         * @param active true para activarlo y false para desactivarlo
429
         * @param position Posici?n del punto
430
         */
431
        public void setVisiblePoint(boolean visible, int position) {
432
                gcpSync.setVisiblePoint(visible, position);
433
        }
434
        
435
        /**
436
         * Asigna las coordenadas del mundo real y raster al punto indicado en el par?metro. 
437
         * @param point Punto a asignar las nuevas coordenadas
438
         * @param xMap Coordenada real en X
439
         * @param yMap Coordenada real en Y
440
         * @param xRaster Coordenada pixel en X
441
         * @param yRaster Coordenada pixel en Y
442
         */
443
        public void setCoordinates(int point, double xMap, double yMap, double xRaster, double yRaster) {
444
                gcpSync.setCoordinates(point, xMap, yMap, xRaster, yRaster);
445
        }
446
        
447
        /**
448
         * A?ade un punto a las capas gr?ficas
449
         * @param map Coordenadas del mapa del punto
450
         * @param raster Coordenadas pixel del punto
451
         * @return identificador del punto a?adido
452
         */
453
        public long addPoint(Point2D map, Point2D raster) {
454
                return gcpSync.addPoint(map, raster);
455
        }
456

    
457
        public void setControlPanel(GeorefControlPanel control) {
458
                this.controlPanel = control;
459
        }
460
}