svn-gvsig-desktop / trunk / extensions / extGeoreferencing / src / com / iver / cit / gvsig / gui / Panels / ZoomControlPanel.java @ 3195
History | View | Annotate | Download (20 KB)
1 | 3014 | nacho | package com.iver.cit.gvsig.gui.Panels; |
---|---|---|---|
2 | |||
3 | import java.awt.BorderLayout; |
||
4 | import java.awt.Canvas; |
||
5 | import java.awt.Color; |
||
6 | 3044 | nacho | import java.awt.Component; |
7 | 3014 | nacho | import java.awt.Graphics; |
8 | import java.awt.Graphics2D; |
||
9 | import java.awt.GridBagConstraints; |
||
10 | import java.awt.GridBagLayout; |
||
11 | 3037 | nacho | import java.awt.Image; |
12 | 3023 | nacho | import java.awt.event.ActionEvent; |
13 | import java.awt.event.ActionListener; |
||
14 | 3037 | nacho | import java.awt.event.MouseEvent; |
15 | import java.awt.event.MouseListener; |
||
16 | import java.awt.event.MouseMotionListener; |
||
17 | 3014 | nacho | import java.awt.geom.Point2D; |
18 | import java.awt.geom.Rectangle2D; |
||
19 | 3037 | nacho | import java.awt.image.BufferedImage; |
20 | 3014 | nacho | |
21 | import javax.swing.ImageIcon; |
||
22 | import javax.swing.JButton; |
||
23 | 3044 | nacho | import javax.swing.JOptionPane; |
24 | 3014 | nacho | import javax.swing.JPanel; |
25 | |||
26 | import com.iver.andami.PluginServices; |
||
27 | import com.iver.cit.gvsig.fmap.DriverException; |
||
28 | import com.iver.cit.gvsig.fmap.ViewPort; |
||
29 | 3037 | nacho | import com.iver.cit.gvsig.fmap.layers.FLayer; |
30 | 3014 | nacho | import com.iver.cit.gvsig.fmap.layers.FLayers; |
31 | 3037 | nacho | import com.iver.cit.gvsig.fmap.layers.FLyrGeoRaster; |
32 | import com.iver.cit.gvsig.fmap.layers.FLyrPoints; |
||
33 | 3014 | nacho | import com.iver.cit.gvsig.fmap.operations.Cancellable; |
34 | import com.iver.cit.gvsig.gui.View; |
||
35 | 3037 | nacho | import com.iver.cit.gvsig.gui.Dialogs.GeoreferencingDialog; |
36 | 3014 | nacho | |
37 | /**
|
||
38 | * Panel que contiene los controles de zoom de la vista para
|
||
39 | * afinar en la georreferenciaci?n.
|
||
40 | *
|
||
41 | * @author Nacho Brodin (brodin_ign@gva.es)
|
||
42 | *
|
||
43 | */
|
||
44 | 3023 | nacho | public class ZoomControlPanel extends JPanel implements ActionListener{ |
45 | 3014 | nacho | private JPanel pImage = null; |
46 | private JPanel pControls = null; |
||
47 | private JButton bZoomMas = null; |
||
48 | private JButton bZoomMenos = null; |
||
49 | |||
50 | 3039 | nacho | private int sX = 140, sY = 140; |
51 | 3014 | nacho | private CanvasZone canvas = null; |
52 | private ViewPort viewPort = null; |
||
53 | 3037 | nacho | |
54 | public FLyrPoints lyrPoints = null; |
||
55 | public FLyrGeoRaster lyrGeoRaster = null; |
||
56 | public GeoreferencingDialog dialog = null; |
||
57 | 3049 | nacho | private boolean rightControl = false; |
58 | 3037 | nacho | |
59 | |||
60 | |||
61 | 3014 | nacho | /**
|
62 | * This is the default constructor
|
||
63 | */
|
||
64 | 3192 | nacho | public ZoomControlPanel(boolean rightControl, GeoreferencingDialog dialog) { |
65 | 3014 | nacho | super();
|
66 | 3049 | nacho | this.rightControl = rightControl;
|
67 | 3192 | nacho | this.dialog = dialog;
|
68 | 3014 | nacho | initialize(rightControl); |
69 | } |
||
70 | |||
71 | /**
|
||
72 | * This method initializes this
|
||
73 | *
|
||
74 | * @return void
|
||
75 | */
|
||
76 | private void initialize(boolean rightControl) { |
||
77 | |||
78 | GridBagConstraints gridBagConstraints1 = new GridBagConstraints(); |
||
79 | if(rightControl)
|
||
80 | gridBagConstraints1.gridx = 1;
|
||
81 | else
|
||
82 | gridBagConstraints1.gridx = 0;
|
||
83 | gridBagConstraints1.gridy = 0;
|
||
84 | GridBagConstraints gridBagConstraints = new GridBagConstraints(); |
||
85 | if(rightControl)
|
||
86 | gridBagConstraints.gridx = 0;
|
||
87 | else
|
||
88 | gridBagConstraints.gridx = 1;
|
||
89 | gridBagConstraints.gridy = 0;
|
||
90 | this.setLayout(new GridBagLayout()); |
||
91 | 3039 | nacho | this.setPreferredSize(new java.awt.Dimension(175,142)); |
92 | this.setSize(new java.awt.Dimension(175,142)); |
||
93 | 3014 | nacho | this.setLocation(new java.awt.Point(0,0)); |
94 | this.add(getPImage(), gridBagConstraints);
|
||
95 | this.add(getPControls(), gridBagConstraints1);
|
||
96 | } |
||
97 | |||
98 | /**
|
||
99 | 3037 | nacho | * Carga las capas de puntos y de raster georreferenciado
|
100 | *
|
||
101 | */
|
||
102 | 3064 | nacho | public void loadLayer() throws InstantiationException{ |
103 | 3192 | nacho | //Cargamos las capas
|
104 | this.lyrGeoRaster = dialog.getLyrGeoRaster();
|
||
105 | this.lyrPoints = dialog.getLyrPoints();
|
||
106 | 3102 | nacho | |
107 | 3064 | nacho | if(lyrGeoRaster == null || lyrPoints == null) |
108 | throw new InstantiationException("No se ha podido instanciar la capa de puntos o georreferenciada"); |
||
109 | |||
110 | 3037 | nacho | } |
111 | |||
112 | /**
|
||
113 | 3014 | nacho | * This method initializes jPanel
|
114 | *
|
||
115 | * @return javax.swing.JPanel
|
||
116 | */
|
||
117 | private JPanel getPImage() { |
||
118 | if (pImage == null) { |
||
119 | pImage = new JPanel(); |
||
120 | BorderLayout borderLayout = new BorderLayout(); |
||
121 | pImage.setLayout(borderLayout); |
||
122 | 3039 | nacho | pImage.setPreferredSize(new java.awt.Dimension(140,140)); |
123 | 3014 | nacho | pImage.setBorder(javax.swing.BorderFactory.createBevelBorder(javax.swing.border.BevelBorder.LOWERED)); |
124 | 3091 | nacho | pImage.add(getCanvas(), BorderLayout.CENTER);
|
125 | 3014 | nacho | } |
126 | return pImage;
|
||
127 | } |
||
128 | |||
129 | /**
|
||
130 | 3091 | nacho | * This method initilizes canvas
|
131 | * @return CanvasZone
|
||
132 | */
|
||
133 | private CanvasZone getCanvas(){
|
||
134 | if(canvas == null){ |
||
135 | canvas = new CanvasZone(sX, sY, this); |
||
136 | canvas.setVisible(false);
|
||
137 | canvas.addMouseListener(canvas); |
||
138 | canvas.addMouseMotionListener(canvas); |
||
139 | } |
||
140 | return canvas;
|
||
141 | } |
||
142 | |||
143 | /**
|
||
144 | 3014 | nacho | * This method initializes jPanel1
|
145 | *
|
||
146 | * @return javax.swing.JPanel
|
||
147 | */
|
||
148 | private JPanel getPControls() { |
||
149 | if (pControls == null) { |
||
150 | GridBagConstraints gridBagConstraints3 = new GridBagConstraints(); |
||
151 | gridBagConstraints3.gridx = 0;
|
||
152 | gridBagConstraints3.insets = new java.awt.Insets(5,0,0,0); |
||
153 | gridBagConstraints3.gridy = 1;
|
||
154 | GridBagConstraints gridBagConstraints2 = new GridBagConstraints(); |
||
155 | gridBagConstraints2.gridx = 0;
|
||
156 | gridBagConstraints2.gridy = 0;
|
||
157 | pControls = new JPanel(); |
||
158 | pControls.setLayout(new GridBagLayout()); |
||
159 | 3039 | nacho | pControls.setPreferredSize(new java.awt.Dimension(33,140)); |
160 | 3014 | nacho | pControls.add(getBZoomMas(), gridBagConstraints2); |
161 | pControls.add(getBZoomMenos(), gridBagConstraints3); |
||
162 | } |
||
163 | return pControls;
|
||
164 | } |
||
165 | |||
166 | /**
|
||
167 | * This method initializes jButton
|
||
168 | *
|
||
169 | * @return javax.swing.JButton
|
||
170 | */
|
||
171 | private JButton getBZoomMas() { |
||
172 | if (bZoomMas == null) { |
||
173 | bZoomMas = new JButton(); |
||
174 | bZoomMas.setPreferredSize(new java.awt.Dimension(25,25)); |
||
175 | bZoomMas.setIcon(new ImageIcon(getClass().getResource("/com/iver/cit/gvsig/gui/Panels/images/aumentar.png"))); |
||
176 | 3023 | nacho | bZoomMas.addActionListener(this);
|
177 | 3014 | nacho | } |
178 | return bZoomMas;
|
||
179 | } |
||
180 | |||
181 | /**
|
||
182 | * This method initializes jButton
|
||
183 | *
|
||
184 | * @return javax.swing.JButton
|
||
185 | */
|
||
186 | private JButton getBZoomMenos() { |
||
187 | if (bZoomMenos == null) { |
||
188 | bZoomMenos = new JButton(); |
||
189 | bZoomMenos.setPreferredSize(new java.awt.Dimension(25,25)); |
||
190 | bZoomMenos.setIcon(new ImageIcon(getClass().getResource("/com/iver/cit/gvsig/gui/Panels/images/disminuir.png"))); |
||
191 | 3023 | nacho | bZoomMenos.addActionListener(this);
|
192 | 3014 | nacho | } |
193 | return bZoomMenos;
|
||
194 | } |
||
195 | |||
196 | /**
|
||
197 | * @param viewPort The viewPort to set.
|
||
198 | */
|
||
199 | public void setViewPort(ViewPort viewPort) { |
||
200 | this.viewPort = viewPort;
|
||
201 | 3091 | nacho | getCanvas().setViewPort(this.viewPort);
|
202 | 3014 | nacho | } |
203 | |||
204 | /**
|
||
205 | *Llama a la funci?n de pintado del canvas con los par?metros que tenga en ese momento
|
||
206 | */
|
||
207 | public void draw(){ |
||
208 | 3091 | nacho | if(!getDialog().isEnlarge())
|
209 | getCanvas().loadBuffer(); |
||
210 | getCanvas().repaint(); |
||
211 | 3014 | nacho | } |
212 | |||
213 | /**
|
||
214 | * Asigna al canvas la propiedad de visibilidad a verdadero o falso.
|
||
215 | * @param visible true para mostrar el canvas y false para ocultarlo
|
||
216 | */
|
||
217 | public void setVisible(boolean visible){ |
||
218 | canvas.setVisible(visible); |
||
219 | 3023 | nacho | if(!visible)
|
220 | canvas.setSize(0,0); |
||
221 | 3037 | nacho | else{
|
222 | 3023 | nacho | canvas.setSize(sX, sY); |
223 | 3037 | nacho | } |
224 | 3014 | nacho | canvas.repaint(); |
225 | } |
||
226 | |||
227 | /**
|
||
228 | * Asigna el punto sobre el que se centrar? el zoom de la minimagen
|
||
229 | * @param pto
|
||
230 | */
|
||
231 | public void setCenterPoint(Point2D pto){ |
||
232 | 3091 | nacho | getCanvas().setCenterPoint(pto); |
233 | 3014 | nacho | } |
234 | |||
235 | /**
|
||
236 | 3037 | nacho | * Recupera el n?mero de punto que se est? tratando
|
237 | * @param n
|
||
238 | */
|
||
239 | public int getNumberPoint(){ |
||
240 | 3064 | nacho | try{
|
241 | if(getDialog().getConectorPanel().getDataPointsTabPanel().getTbPoints().getSelectedIndex() == 0) |
||
242 | return Integer.valueOf(getDialog().getConectorPanel().getDataPointsTabPanel().getSelectPointsPanel().getTableControlerPanel().getCPoint().getSelectedItem().toString()).intValue() - 1; |
||
243 | else
|
||
244 | return Integer.valueOf(getDialog().getConectorPanel().getDataPointsTabPanel().getTablePointsPanel().getTableControlerPanel().getCPoint().getSelectedItem().toString()).intValue() - 1; |
||
245 | }catch(NullPointerException exc){ |
||
246 | return -1; |
||
247 | } |
||
248 | 3037 | nacho | } |
249 | |||
250 | /**
|
||
251 | 3023 | nacho | * Manejo de los controles zoom m?s y zoom menos
|
252 | */
|
||
253 | public void actionPerformed(ActionEvent e) { |
||
254 | if(e.getSource() == bZoomMas){
|
||
255 | canvas.calcZoom(0.6);
|
||
256 | 3057 | nacho | canvas.repaint(); |
257 | 3023 | nacho | } |
258 | |||
259 | if(e.getSource() == bZoomMenos){
|
||
260 | canvas.calcZoom(1.8);
|
||
261 | 3057 | nacho | canvas.repaint(); |
262 | 3023 | nacho | } |
263 | 3037 | nacho | |
264 | 3023 | nacho | } |
265 | 3037 | nacho | |
266 | |||
267 | 3044 | nacho | /**
|
268 | 3049 | nacho | * @return Returns the rightControl.
|
269 | */
|
||
270 | public boolean isRightControl() { |
||
271 | return rightControl;
|
||
272 | } |
||
273 | |||
274 | /**
|
||
275 | 3044 | nacho | * @return Returns the lyrGeoRaster.
|
276 | */
|
||
277 | public FLyrGeoRaster getLyrGeoRaster() {
|
||
278 | return lyrGeoRaster;
|
||
279 | } |
||
280 | |||
281 | 3057 | nacho | |
282 | 3044 | nacho | /**
|
283 | 3057 | nacho | * @return Returns the lyrPoints.
|
284 | */
|
||
285 | public FLyrPoints getLyrPoints() {
|
||
286 | 3064 | nacho | try{
|
287 | if(lyrPoints == null) |
||
288 | this.loadLayer();
|
||
289 | }catch(InstantiationException e){ |
||
290 | JOptionPane.showMessageDialog((Component)PluginServices.getMainFrame(), |
||
291 | PluginServices.getText(this, "error_capa_puntos")); |
||
292 | } |
||
293 | 3057 | nacho | return lyrPoints;
|
294 | } |
||
295 | |||
296 | /**
|
||
297 | 3044 | nacho | * @return Returns the dialog.
|
298 | */
|
||
299 | public GeoreferencingDialog getDialog() {
|
||
300 | 3064 | nacho | try{
|
301 | if(dialog == null) |
||
302 | this.loadLayer();
|
||
303 | }catch(InstantiationException e){ |
||
304 | JOptionPane.showMessageDialog((Component)PluginServices.getMainFrame(), |
||
305 | PluginServices.getText(this, "error_capa_puntos")); |
||
306 | } |
||
307 | 3044 | nacho | return dialog;
|
308 | } |
||
309 | 3037 | nacho | |
310 | 3057 | nacho | /**
|
311 | * Asigna el viewPort recalculado
|
||
312 | * @param vp ViewPort
|
||
313 | */
|
||
314 | public void setNewViewPort(ViewPort vp){ |
||
315 | canvas.setNewViewPort(vp); |
||
316 | } |
||
317 | |||
318 | 3064 | nacho | /**
|
319 | *Limpia el canvas
|
||
320 | */
|
||
321 | public void clear(){ |
||
322 | canvas.setCleanCanvas(true);
|
||
323 | canvas.repaint(); |
||
324 | } |
||
325 | |||
326 | 3023 | nacho | /**
|
327 | 3014 | nacho | * Control que representa la zona de dibujado de la ventana. Este se encarga de
|
328 | * repintar el contenido sobre el Graphics2D a partir del viewPort que se le pase
|
||
329 | * @author Nacho Brodin (brodin_ign@gva.es)
|
||
330 | */
|
||
331 | 3037 | nacho | class CanvasZone extends Canvas implements MouseListener, MouseMotionListener{ |
332 | private ZoomControlPanel zoomControl = null; |
||
333 | 3014 | nacho | private int ancho; |
334 | private int alto; |
||
335 | private FLayers flayers = null; |
||
336 | private ViewPort viewPort = null; |
||
337 | private ViewPort newViewPort = null; |
||
338 | private Point2D centerPoint = null; |
||
339 | 3102 | nacho | private int initZoom = 20; |
340 | 3037 | nacho | private boolean dragged = false; |
341 | private Image dobleBuffer = null; |
||
342 | private BufferedImage imgTmp = null; |
||
343 | private Graphics dbGraphics = null; |
||
344 | 3064 | nacho | private boolean cleanCanvas = false; |
345 | 3102 | nacho | |
346 | 3037 | nacho | /**
|
347 | * Puntos inicial y final para el desplazamiento del punto de control
|
||
348 | */
|
||
349 | private Point2D ptoIni = null, ptoFin = null; |
||
350 | private Point2D movDragged = null, initCrux = null; |
||
351 | |||
352 | 3014 | nacho | |
353 | 3037 | nacho | public CanvasZone( int anc,int alt, ZoomControlPanel zc) { |
354 | zoomControl = zc; |
||
355 | 3014 | nacho | ancho = anc; |
356 | alto = alt; |
||
357 | |||
358 | this.setSize(ancho, alto);
|
||
359 | this.setBackground(Color.WHITE); |
||
360 | 3037 | nacho | |
361 | imgTmp = new BufferedImage(this.ancho, this.alto, BufferedImage.TYPE_INT_ARGB); |
||
362 | dobleBuffer = new BufferedImage(this.ancho, this.alto, BufferedImage.TYPE_INT_ARGB); |
||
363 | dbGraphics = dobleBuffer.getGraphics(); |
||
364 | 3014 | nacho | } |
365 | |||
366 | /**
|
||
367 | * Asigna el viewPort
|
||
368 | * @param vp ViewPort
|
||
369 | */
|
||
370 | public void setViewPort(ViewPort vp){ |
||
371 | this.viewPort = vp;
|
||
372 | 3023 | nacho | this.initViewPort();
|
373 | 3014 | nacho | } |
374 | |||
375 | /**
|
||
376 | 3057 | nacho | * Asigna el viewPort recalculado
|
377 | * @param vp ViewPort
|
||
378 | */
|
||
379 | public void setNewViewPort(ViewPort vp){ |
||
380 | this.newViewPort = vp;
|
||
381 | } |
||
382 | |||
383 | /**
|
||
384 | 3023 | nacho | * Calcula el zoom dependiendo del factor de escala pasado por
|
385 | * par?metro.
|
||
386 | */
|
||
387 | public void calcZoom(double factor){ |
||
388 | Rectangle2D.Double r = new Rectangle2D.Double(); |
||
389 | double nuevoX = centerPoint.getX() -
|
||
390 | ((newViewPort.getExtent().getWidth() * factor) / 2.0);
|
||
391 | double nuevoY = centerPoint.getY() -
|
||
392 | ((newViewPort.getExtent().getHeight() * factor) / 2.0);
|
||
393 | r.x = nuevoX; |
||
394 | r.y = nuevoY; |
||
395 | r.width = newViewPort.getExtent().getWidth() * factor; |
||
396 | r.height = newViewPort.getExtent().getHeight() * factor; |
||
397 | 3044 | nacho | newViewPort.setExtent(r); |
398 | 3102 | nacho | newViewPort.setScale(); |
399 | } |
||
400 | |||
401 | 3023 | nacho | |
402 | /**
|
||
403 | 3014 | nacho | *Calculamos el viewPort para el zoom de la minimagen
|
404 | */
|
||
405 | 3023 | nacho | public void initViewPort(){ |
406 | 3014 | nacho | if(centerPoint != null){ |
407 | newViewPort = this.viewPort.cloneViewPort();
|
||
408 | //Hallamos la relaci?n entre el pixel y las WC a partir de la imagen de la capa
|
||
409 | 3102 | nacho | double relacionPixelWcWidth = ((viewPort.getExtent().getMaxX() - viewPort.getExtent().getMinX()) / initZoom)/ancho;
|
410 | double relacionPixelWcHeight = ((viewPort.getExtent().getMaxY() - viewPort.getExtent().getMinY()) / initZoom)/alto;
|
||
411 | 3014 | nacho | |
412 | 3019 | nacho | double wcOriginX = centerPoint.getX() - ((viewPort.getImageWidth()*relacionPixelWcWidth)/2); |
413 | double wcOriginY = centerPoint.getY() - ((viewPort.getImageHeight()*relacionPixelWcHeight)/2); |
||
414 | 3014 | nacho | |
415 | double wcDstMinX = wcOriginX;
|
||
416 | double wcDstMinY = wcOriginY;
|
||
417 | double wcDstMaxX = wcDstMinX + (viewPort.getImageWidth()*relacionPixelWcWidth);
|
||
418 | double wcDstMaxY = wcDstMinY + (viewPort.getImageHeight()*relacionPixelWcHeight);
|
||
419 | |||
420 | double wcDstWidth = wcDstMaxX - wcDstMinX;
|
||
421 | double wcDstHeight = wcDstMaxY - wcDstMinY;
|
||
422 | |||
423 | 3019 | nacho | Rectangle2D ext = new Rectangle2D.Double(wcDstMinX, wcDstMinY, wcDstWidth, wcDstHeight); |
424 | |||
425 | newViewPort.setExtent(ext); |
||
426 | 3091 | nacho | newViewPort.setImageSize(new java.awt.Dimension(ancho, alto));
|
427 | 3019 | nacho | newViewPort.setScale(); |
428 | 3014 | nacho | } |
429 | } |
||
430 | |||
431 | 3134 | nacho | /**
|
432 | * Dibuja sobre el graphics de la mini imagen la imagen
|
||
433 | * definida en el newViewPort.
|
||
434 | */
|
||
435 | 3091 | nacho | public void loadBuffer(){ |
436 | 3037 | nacho | Graphics2D gTmp = (Graphics2D)imgTmp.getGraphics(); |
437 | if(!dragged){
|
||
438 | dbGraphics.setColor( Color.WHITE );
|
||
439 | dbGraphics.fillRect( 0,0,ancho,alto ); |
||
440 | 3049 | nacho | gTmp.setColor( Color.WHITE );
|
441 | gTmp.fillRect( 0,0,ancho,alto ); |
||
442 | 3037 | nacho | |
443 | try{
|
||
444 | if(newViewPort != null){ |
||
445 | 3064 | nacho | if(zoomControl.getNumberPoint() != -1){//Salvamos el miniextent si hay puntos en la lista |
446 | if(!zoomControl.isRightControl())
|
||
447 | zoomControl.getLyrPoints().setMiniExtent(zoomControl.getNumberPoint(), |
||
448 | centerPoint, |
||
449 | newViewPort, |
||
450 | true);
|
||
451 | else
|
||
452 | zoomControl.getLyrPoints().setMiniExtent(zoomControl.getNumberPoint(), |
||
453 | centerPoint, |
||
454 | newViewPort, |
||
455 | false);
|
||
456 | } |
||
457 | 3037 | nacho | //Si no tenemos las capas las cargamos
|
458 | 3057 | nacho | if(flayers == null){ |
459 | 3102 | nacho | View theView = null; |
460 | try{
|
||
461 | theView = (View)PluginServices.getMDIManager().getActiveView();
|
||
462 | }catch(ClassCastException exc){ |
||
463 | return;
|
||
464 | } |
||
465 | 3037 | nacho | flayers = theView.getMapControl().getMapContext().getLayers(); |
466 | 3057 | nacho | } |
467 | //dibujamos
|
||
468 | 3192 | nacho | |
469 | 3133 | nacho | if(zoomControl.getDialog().isEnlarge()){
|
470 | 3134 | nacho | //System.out.println("-------->"+newViewPort.getExtent().getX()+" "+newViewPort.getExtent().getY()+" "+newViewPort.getExtent().getWidth()+" "+newViewPort.getExtent().getHeight());
|
471 | 3091 | nacho | flayers.draw(null, (Graphics2D) dbGraphics, newViewPort,new Cancellable() { |
472 | public boolean isCanceled() { |
||
473 | return false; |
||
474 | } |
||
475 | },flayers.getFMap().getScaleView()); |
||
476 | 3133 | nacho | } |
477 | 3057 | nacho | flayers.draw(null, gTmp, newViewPort,new Cancellable() { |
478 | public boolean isCanceled() { |
||
479 | 3037 | nacho | return false; |
480 | } |
||
481 | 3057 | nacho | },flayers.getFMap().getScaleView()); |
482 | 3192 | nacho | |
483 | 3037 | nacho | } |
484 | }catch (DriverException e) {
|
||
485 | e.printStackTrace(); |
||
486 | } |
||
487 | }else{
|
||
488 | double x, y;
|
||
489 | if(movDragged != null){ |
||
490 | x = (movDragged.getX() - ptoIni.getX()) + initCrux.getX(); |
||
491 | y = (movDragged.getY() - ptoIni.getY()) + initCrux.getY(); |
||
492 | }else{
|
||
493 | x = ptoIni.getX() + initCrux.getX(); |
||
494 | y = ptoIni.getY() + initCrux.getY(); |
||
495 | } |
||
496 | |||
497 | dbGraphics.drawImage(imgTmp, 0, 0, null); |
||
498 | dbGraphics.setColor( Color.RED );
|
||
499 | dbGraphics.drawLine((int)(x - 5), (int)y, (int)(x + 5), (int)y); |
||
500 | dbGraphics.drawLine((int)x, (int)(y - 5), (int)x, (int)(y + 5)); |
||
501 | } |
||
502 | } |
||
503 | |||
504 | |||
505 | public void update(Graphics g){ |
||
506 | this.paint(g);
|
||
507 | } |
||
508 | |||
509 | 3014 | nacho | /**
|
510 | * Dibuja sobre el Graphics2D pasado el viewPort solicitado a
|
||
511 | * la lista de capas.
|
||
512 | * @param g
|
||
513 | */
|
||
514 | public void paint( Graphics g ) { |
||
515 | 3037 | nacho | loadBuffer(); |
516 | 3064 | nacho | if(!cleanCanvas)
|
517 | g.drawImage(dobleBuffer, 0, 0, null); |
||
518 | else{
|
||
519 | g.setColor( Color.WHITE );
|
||
520 | g.fillRect( 0,0,ancho,alto ); |
||
521 | cleanCanvas = false;
|
||
522 | } |
||
523 | 3014 | nacho | } |
524 | |||
525 | /**
|
||
526 | * Asigna el punto donde se centrar? la vista de la minimagen
|
||
527 | * @param pto Punto central.
|
||
528 | */
|
||
529 | public void setCenterPoint(Point2D pto){ |
||
530 | this.centerPoint = pto;
|
||
531 | } |
||
532 | 3102 | nacho | |
533 | /**
|
||
534 | * Desplaza el extent al nuevo centro
|
||
535 | * @param pto
|
||
536 | */
|
||
537 | public void shiftExtent(Point2D pto){ |
||
538 | this.setCenterPoint(pto);
|
||
539 | this.calcZoom(1); |
||
540 | } |
||
541 | |||
542 | 3037 | nacho | /* (non-Javadoc)
|
543 | * @see java.awt.event.MouseListener#mouseClicked(java.awt.event.MouseEvent)
|
||
544 | */
|
||
545 | public void mouseClicked(MouseEvent ev) { |
||
546 | |||
547 | } |
||
548 | |||
549 | /* (non-Javadoc)
|
||
550 | * @see java.awt.event.MouseListener#mouseEntered(java.awt.event.MouseEvent)
|
||
551 | */
|
||
552 | public void mouseEntered(MouseEvent arg0) { |
||
553 | 3044 | nacho | |
554 | 3037 | nacho | } |
555 | |||
556 | /* (non-Javadoc)
|
||
557 | * @see java.awt.event.MouseListener#mouseExited(java.awt.event.MouseEvent)
|
||
558 | */
|
||
559 | public void mouseExited(MouseEvent arg0) { |
||
560 | 3044 | nacho | |
561 | 3037 | nacho | } |
562 | |||
563 | 3049 | nacho | /**
|
564 | * Al pulsar el rat?n sobre la minimagen permitimos que se pueda desplazar la cruz
|
||
565 | *
|
||
566 | 3037 | nacho | */
|
567 | public void mousePressed(MouseEvent ev) { |
||
568 | 3049 | nacho | this.movDragged = ptoIni = ev.getPoint();
|
569 | 3064 | nacho | try{
|
570 | zoomControl.loadLayer(); |
||
571 | initCrux = new Point2D.Double(); |
||
572 | initCrux.setLocation(this.getWidth() / 2, this.getHeight() / 2); |
||
573 | this.dragged = true; |
||
574 | repaint(); |
||
575 | }catch(InstantiationException e){ |
||
576 | JOptionPane.showMessageDialog((Component)PluginServices.getMainFrame(), |
||
577 | PluginServices.getText(this, "error_capa_puntos")); |
||
578 | } |
||
579 | 3037 | nacho | } |
580 | |||
581 | /* (non-Javadoc)
|
||
582 | * @see java.awt.event.MouseListener#mouseReleased(java.awt.event.MouseEvent)
|
||
583 | */
|
||
584 | public void mouseReleased(MouseEvent ev) { |
||
585 | 3102 | nacho | View theView = null; |
586 | try{
|
||
587 | theView = (View) PluginServices.getMDIManager().getActiveView();
|
||
588 | }catch(ClassCastException exc){ |
||
589 | return;
|
||
590 | } |
||
591 | 3037 | nacho | ViewPort viewPort = theView.getMapControl().getMapContext().getViewPort(); |
592 | 3044 | nacho | ptoFin = ev.getPoint(); |
593 | 3037 | nacho | this.dragged = false; |
594 | 3049 | nacho | |
595 | double destX = newViewPort.getExtent().getMinX() + ((ptoFin.getX() * (centerPoint.getX() - newViewPort.getExtent().getMinX())) / ptoIni.getX());
|
||
596 | double destY = newViewPort.getExtent().getMinY() + (((this.getHeight() - ptoFin.getY()) * (centerPoint.getY() - newViewPort.getExtent().getMinY())) / (this.getHeight() - ptoIni.getY())); |
||
597 | 3102 | nacho | |
598 | int nPoint = Integer.valueOf(zoomControl.getDialog().getSelectPointsPanel().getTableControlerPanel().getCPoint().getSelectedItem().toString()).intValue(); |
||
599 | |||
600 | 3195 | nacho | FLyrPoints lp = zoomControl.getLyrPoints();//(FLyrPoints)lyr;
|
601 | 3044 | nacho | |
602 | 3195 | nacho | if(zoomControl.isRightControl()){ //Control de actualizaci?n de pixel de imagen |
603 | Point2D pixelImg = zoomControl.getLyrGeoRaster().world2Img(destX, destY);
|
||
604 | 3049 | nacho | |
605 | 3195 | nacho | if(pixelImg == null){ |
606 | JOptionPane.showMessageDialog((Component)PluginServices.getMainFrame(), |
||
607 | 3049 | nacho | PluginServices.getText(this, "fuera_de_extent")); |
608 | 3195 | nacho | return;
|
609 | } |
||
610 | zoomControl.getLyrGeoRaster().updateData( nPoint, |
||
611 | pixelImg, |
||
612 | null,
|
||
613 | zoomControl.getDialog(), |
||
614 | null);
|
||
615 | 3058 | nacho | |
616 | 3195 | nacho | //Actualizamos la otra miniimagen
|
617 | shiftExtent(zoomControl.getLyrGeoRaster().img2World(pixelImg)); |
||
618 | zoomControl.getDialog().getConectorPanel().getAdjustGeorefPanel().getZoomLeft().draw(); |
||
619 | zoomControl.getDialog().getConectorPanel().getAdjustGeorefPanel().getZoomRight().draw(); |
||
620 | }else{ //Control de actualizaci?n de coordenadas del mundo |
||
621 | Point2D mapPoint = new Point2D.Double(); |
||
622 | mapPoint.setLocation(destX, destY); |
||
623 | zoomControl.getLyrGeoRaster().updateData( nPoint, |
||
624 | null,
|
||
625 | mapPoint, |
||
626 | zoomControl.getDialog(), |
||
627 | null);
|
||
628 | 3102 | nacho | |
629 | 3195 | nacho | //Actualizamos la otra miniimagen
|
630 | shiftExtent(mapPoint); |
||
631 | zoomControl.getDialog().getConectorPanel().getAdjustGeorefPanel().getZoomRight().draw(); |
||
632 | zoomControl.getDialog().getConectorPanel().getAdjustGeorefPanel().getZoomLeft().draw(); |
||
633 | 3044 | nacho | } |
634 | repaint(); |
||
635 | 3133 | nacho | theView.getMapControl().getMapContext().invalidate(); |
636 | 3037 | nacho | } |
637 | |||
638 | /* (non-Javadoc)
|
||
639 | * @see java.awt.event.MouseMotionListener#mouseDragged(java.awt.event.MouseEvent)
|
||
640 | */
|
||
641 | public void mouseDragged(MouseEvent ev) { |
||
642 | this.movDragged = ev.getPoint();
|
||
643 | 3044 | nacho | repaint(); |
644 | 3037 | nacho | |
645 | } |
||
646 | |||
647 | /* (non-Javadoc)
|
||
648 | * @see java.awt.event.MouseMotionListener#mouseMoved(java.awt.event.MouseEvent)
|
||
649 | */
|
||
650 | public void mouseMoved(MouseEvent arg0) { |
||
651 | 3044 | nacho | |
652 | 3037 | nacho | } |
653 | 3064 | nacho | |
654 | /**
|
||
655 | * @param cleanCanvas The cleanCanvas to set.
|
||
656 | */
|
||
657 | public void setCleanCanvas(boolean cleanCanvas) { |
||
658 | this.cleanCanvas = cleanCanvas;
|
||
659 | } |
||
660 | 3037 | nacho | |
661 | 3044 | nacho | } |
662 | |||
663 | |||
664 | |||
665 | 3037 | nacho | |
666 | 3057 | nacho | |
667 | 3037 | nacho | } |