Statistics
| Revision:

root / trunk / extensions / extGeoreferencing / src / com / iver / cit / gvsig / gui / Panels / ZoomControlPanel.java @ 3014

History | View | Annotate | Download (8.92 KB)

1
package com.iver.cit.gvsig.gui.Panels;
2

    
3
import java.awt.BorderLayout;
4
import java.awt.Canvas;
5
import java.awt.Color;
6
import java.awt.Graphics;
7
import java.awt.Graphics2D;
8
import java.awt.GridBagConstraints;
9
import java.awt.GridBagLayout;
10
import java.awt.geom.Point2D;
11
import java.awt.geom.Rectangle2D;
12

    
13
import javax.swing.ImageIcon;
14
import javax.swing.JButton;
15
import javax.swing.JPanel;
16

    
17
import com.iver.andami.PluginServices;
18
import com.iver.cit.gvsig.fmap.DriverException;
19
import com.iver.cit.gvsig.fmap.ViewPort;
20
import com.iver.cit.gvsig.fmap.layers.FLayers;
21
import com.iver.cit.gvsig.fmap.operations.Cancellable;
22
import com.iver.cit.gvsig.gui.View;
23

    
24
/**
25
 * Panel que contiene los controles de zoom de la vista para 
26
 * afinar en la georreferenciaci?n.
27
 * 
28
 * @author Nacho Brodin (brodin_ign@gva.es)
29
 *
30
 */
31
public class ZoomControlPanel extends JPanel{
32

    
33
        
34
        private JPanel pImage = null;
35
        private JPanel pControls = null;
36
        private JButton bZoomMas = null;
37
        private JButton bZoomMenos = null;
38

    
39
        private int sX = 150, sY = 150; 
40
        private CanvasZone canvas = null;
41
        private ViewPort viewPort = null;
42
        
43
        /**
44
         * This is the default constructor
45
         */
46
        public ZoomControlPanel(boolean rightControl) {
47
                super();
48
                initialize(rightControl);
49
        }
50

    
51
        /**
52
         * This method initializes this
53
         * 
54
         * @return void
55
         */
56
        private void initialize(boolean rightControl) {
57
                
58
        GridBagConstraints gridBagConstraints1 = new GridBagConstraints();
59
        if(rightControl)
60
                gridBagConstraints1.gridx = 1;
61
        else
62
                gridBagConstraints1.gridx = 0;
63
        gridBagConstraints1.gridy = 0;
64
        GridBagConstraints gridBagConstraints = new GridBagConstraints();
65
        if(rightControl)
66
                gridBagConstraints.gridx = 0;
67
        else
68
                gridBagConstraints.gridx = 1;
69
        gridBagConstraints.gridy = 0;
70
        this.setLayout(new GridBagLayout());
71
        this.setPreferredSize(new java.awt.Dimension(200,175));
72
        this.setSize(new java.awt.Dimension(200,175));
73
        this.setLocation(new java.awt.Point(0,0));
74
        this.add(getPImage(), gridBagConstraints);
75
        this.add(getPControls(), gridBagConstraints1);        
76
        }
77

    
78
        /**
79
         * This method initializes jPanel        
80
         *         
81
         * @return javax.swing.JPanel        
82
         */
83
        private JPanel getPImage() {
84
                if (pImage == null) {
85
                        pImage = new JPanel();
86
                        BorderLayout borderLayout = new BorderLayout();
87
                        pImage.setLayout(borderLayout);
88
                        pImage.setPreferredSize(new java.awt.Dimension(sX, sY));
89
                        pImage.setBorder(javax.swing.BorderFactory.createBevelBorder(javax.swing.border.BevelBorder.LOWERED));
90
                        if(canvas == null){
91
                                canvas = new CanvasZone(sX, sY);
92
                                canvas.setVisible(false);
93
                        }
94
                        pImage.add(canvas, BorderLayout.CENTER);
95
                        
96
                }
97
                return pImage;
98
        }
99

    
100
        /**
101
         * This method initializes jPanel1        
102
         *         
103
         * @return javax.swing.JPanel        
104
         */
105
        private JPanel getPControls() {
106
                if (pControls == null) {
107
                        GridBagConstraints gridBagConstraints3 = new GridBagConstraints();
108
                        gridBagConstraints3.gridx = 0;
109
                        gridBagConstraints3.insets = new java.awt.Insets(5,0,0,0);
110
                        gridBagConstraints3.gridy = 1;
111
                        GridBagConstraints gridBagConstraints2 = new GridBagConstraints();
112
                        gridBagConstraints2.gridx = 0;
113
                        gridBagConstraints2.gridy = 0;
114
                        pControls = new JPanel();
115
                        pControls.setLayout(new GridBagLayout());
116
                        pControls.setPreferredSize(new java.awt.Dimension(33,150));
117
                        pControls.add(getBZoomMas(), gridBagConstraints2);
118
                        pControls.add(getBZoomMenos(), gridBagConstraints3);
119
                }
120
                return pControls;
121
        }
122

    
123
        /**
124
         * This method initializes jButton        
125
         *         
126
         * @return javax.swing.JButton        
127
         */
128
        private JButton getBZoomMas() {
129
                if (bZoomMas == null) {
130
                        bZoomMas = new JButton();
131
                        bZoomMas.setPreferredSize(new java.awt.Dimension(25,25));
132
                        bZoomMas.setIcon(new ImageIcon(getClass().getResource("/com/iver/cit/gvsig/gui/Panels/images/aumentar.png")));
133
                }
134
                return bZoomMas;
135
        }
136

    
137
        /**
138
         * This method initializes jButton        
139
         *         
140
         * @return javax.swing.JButton        
141
         */
142
        private JButton getBZoomMenos() {
143
                if (bZoomMenos == null) {
144
                        bZoomMenos = new JButton();
145
                        bZoomMenos.setPreferredSize(new java.awt.Dimension(25,25));
146
                        bZoomMenos.setIcon(new ImageIcon(getClass().getResource("/com/iver/cit/gvsig/gui/Panels/images/disminuir.png")));
147
                }
148
                return bZoomMenos;
149
        }
150

    
151
        /**
152
         * @param viewPort The viewPort to set.
153
         */
154
        public void setViewPort(ViewPort viewPort) {
155
                this.viewPort = viewPort;
156
        }
157
        
158
        /**
159
         *Llama a la funci?n de pintado del canvas con los par?metros que tenga en ese momento
160
         */
161
        public void draw(){
162
                if(canvas != null){
163
                        canvas.setViewPort(this.viewPort);
164
                        canvas.repaint();
165
                }
166
        }
167
        
168
        /**
169
         * Asigna al canvas la propiedad de visibilidad a verdadero o falso.
170
         * @param visible true para mostrar el canvas y false para ocultarlo
171
         */
172
        public void setVisible(boolean visible){
173
                canvas.setVisible(visible);
174
                canvas.repaint();
175
        }
176
        
177
        /**
178
         * Asigna el punto sobre el que se centrar? el zoom de la minimagen
179
         * @param pto
180
         */
181
        public void setCenterPoint(Point2D pto){
182
                canvas.setCenterPoint(pto);
183
        }
184
        
185
        /**
186
         * Control que representa la zona de dibujado de la ventana. Este se encarga de
187
         * repintar el contenido sobre el Graphics2D a partir del viewPort que se le pase
188
         * @author Nacho Brodin (brodin_ign@gva.es)
189
         */
190
        class CanvasZone extends Canvas{
191
            private int ancho;
192
            private int alto;
193
            private FLayers flayers = null;
194
            private ViewPort viewPort = null;
195
            private ViewPort newViewPort = null;
196
            private Rectangle2D fullExtent = null;
197
            private Point2D centerPoint = null;
198

    
199
            public CanvasZone( int anc,int alt) {
200
                ancho = anc;
201
                alto = alt;
202
              
203
                this.setSize(ancho, alto);            
204
                this.setBackground(Color.WHITE);
205
            }
206
            
207
            /**
208
             * Asigna el viewPort
209
             * @param vp ViewPort
210
             */
211
            public void setViewPort(ViewPort vp){
212
                    this.viewPort = vp;
213
            }
214

    
215
            /**
216
             *Calculamos el viewPort para el zoom de la minimagen
217
             */
218
            public void calcViewPort(){
219
                    if(centerPoint != null){
220
                            newViewPort = this.viewPort.cloneViewPort();
221
                            System.out.println(" *** "+viewPort.getImageWidth()+" "+viewPort.getImageHeight());
222
                            System.out.println(" *** "+viewPort.getExtent().getMinX()+" "+viewPort.getExtent().getMinY()+" "+viewPort.getExtent().getMaxX()+" "+viewPort.getExtent().getMaxY());
223
                            Rectangle2D ext = new Rectangle2D.Double(        centerPoint.getX() - 750, 
224
                                                                                                                    centerPoint.getY() - 750, 
225
                                                                                                                        1500, 
226
                                                                                                                        1500);
227
                            newViewPort.setExtent(ext);
228
                            newViewPort.setImageSize(new java.awt.Dimension(this.getWidth(), this.getHeight()));        
229
                            newViewPort.setScale();
230
                            
231
                        //A centro de vista
232
                        double wcOriginCenterX = centerPoint.getX();
233
                        double wcOriginCenterY = centerPoint.getY();
234
                                                        
235
                        //Hallamos la relaci?n entre el pixel y las WC a partir de la imagen de la capa
236
                                double relacionPixelWcWidth =  (fullExtent.getMaxX() - fullExtent.getMinX())/this.getWidth();
237
                                double relacionPixelWcHeight = (fullExtent.getMaxY() - fullExtent.getMinY())/this.getHeight();
238
                                
239
                                double wcOriginX = wcOriginCenterX - ((viewPort.getImageWidth()*relacionPixelWcWidth)/2);
240
                                double wcOriginY = wcOriginCenterY - ((viewPort.getImageHeight()*relacionPixelWcHeight)/2);
241
                                
242
                                double wcDstMinX = wcOriginX; 
243
                                double wcDstMinY = wcOriginY; 
244
                                double wcDstMaxX = wcDstMinX + (viewPort.getImageWidth()*relacionPixelWcWidth);
245
                                double wcDstMaxY = wcDstMinY + (viewPort.getImageHeight()*relacionPixelWcHeight);
246
                                
247
                                double wcDstWidth = wcDstMaxX - wcDstMinX;
248
                                double wcDstHeight = wcDstMaxY - wcDstMinY;
249
                                                                
250
                        ext = new Rectangle2D.Double(wcDstMinX, wcDstMinY, wcDstWidth, wcDstHeight);
251
                        //getMapContext().getViewPort().setExtent(r);
252
          
253
                    }
254
            }
255
            
256
            /**
257
             * Dibuja sobre el Graphics2D pasado el viewPort solicitado a
258
             * la lista de capas.
259
             * @param g
260
             */
261
            public void paint( Graphics g ) {
262
                    //Creamos el fondo
263
                    Graphics2D g2D = (Graphics2D) g;
264
                    g.setColor( Color.WHITE );
265
                g.fillRect( 0,0,ancho,alto );
266
                try{     
267
                        if(viewPort != null){
268
                                 calcViewPort();
269
                                 //Si no tenemos las capas las cargamos
270
                                 if(flayers == null){
271
                                         View theView = (View) PluginServices.getMDIManager().getActiveView();
272
                                         flayers = theView.getMapControl().getMapContext().getLayers();
273
                                 }
274
                                 //dibujamos
275
                                 flayers.draw(null, g2D, newViewPort,new Cancellable() {
276
                                                public boolean isCanceled() {
277
                                                        return false;
278
                                                }
279
                                 },flayers.getFMap().getScaleView());
280
                        }
281
                }catch (DriverException e) {
282
                         e.printStackTrace();
283
                }
284
            }
285
            
286
            /**
287
             * Asigna el punto donde se centrar? la vista de la minimagen
288
             * @param pto Punto central.
289
             */
290
            public void setCenterPoint(Point2D pto){
291
                    System.out.println("--->"+pto);
292
                    this.centerPoint = pto;
293
            }
294
            
295
            /**
296
             * 
297
             */
298
            public void setFullExtent(Rectangle2D fe){
299
                    this.fullExtent = fe;
300
            }
301

    
302
        }
303
        
304

    
305
}