svn-gvsig-desktop / trunk / extensions / extGeoreferencing / src / com / iver / cit / gvsig / gui / panels / ZoomControlPanel.java @ 4831
History | View | Annotate | Download (26.4 KB)
1 | 4686 | nacho | package com.iver.cit.gvsig.gui.panels; |
---|---|---|---|
2 | |||
3 | import java.awt.BorderLayout; |
||
4 | import java.awt.Color; |
||
5 | import java.awt.Component; |
||
6 | 4745 | nacho | import java.awt.Cursor; |
7 | 4686 | nacho | import java.awt.Graphics; |
8 | import java.awt.Graphics2D; |
||
9 | import java.awt.GridBagConstraints; |
||
10 | import java.awt.GridBagLayout; |
||
11 | import java.awt.Image; |
||
12 | 4745 | nacho | import java.awt.Point; |
13 | import java.awt.Toolkit; |
||
14 | 4686 | nacho | import java.awt.event.ActionEvent; |
15 | import java.awt.event.ActionListener; |
||
16 | import java.awt.event.MouseEvent; |
||
17 | import java.awt.event.MouseListener; |
||
18 | import java.awt.event.MouseMotionListener; |
||
19 | import java.awt.geom.Point2D; |
||
20 | import java.awt.geom.Rectangle2D; |
||
21 | import java.awt.image.BufferedImage; |
||
22 | |||
23 | import javax.swing.ImageIcon; |
||
24 | import javax.swing.JButton; |
||
25 | import javax.swing.JOptionPane; |
||
26 | import javax.swing.JPanel; |
||
27 | |||
28 | import com.iver.andami.PluginServices; |
||
29 | import com.iver.cit.gvsig.fmap.DriverException; |
||
30 | 4745 | nacho | import com.iver.cit.gvsig.fmap.MapControl; |
31 | 4686 | nacho | import com.iver.cit.gvsig.fmap.ViewPort; |
32 | import com.iver.cit.gvsig.fmap.layers.FLayers; |
||
33 | import com.iver.cit.gvsig.fmap.layers.FLyrGeoRaster; |
||
34 | import com.iver.cit.gvsig.fmap.layers.FLyrPoints; |
||
35 | import com.iver.cit.gvsig.fmap.operations.Cancellable; |
||
36 | import com.iver.cit.gvsig.gui.View; |
||
37 | import com.iver.cit.gvsig.gui.dialogs.GeoreferencingDialog; |
||
38 | 4772 | nacho | import com.iver.cit.gvsig.utils.MathUtils; |
39 | 4686 | nacho | |
40 | /**
|
||
41 | * Panel que contiene los controles de zoom de la vista para
|
||
42 | * afinar en la georreferenciaci?n.
|
||
43 | *
|
||
44 | * @author Nacho Brodin (brodin_ign@gva.es)
|
||
45 | *
|
||
46 | */
|
||
47 | public class ZoomControlPanel extends JPanel implements ActionListener{ |
||
48 | |||
49 | //**********************Vars**********************************
|
||
50 | private JPanel pImage = null; |
||
51 | private JPanel pControls = null; |
||
52 | private JButton bZoomMas = null; |
||
53 | private JButton bZoomMenos = null; |
||
54 | private int sX = 140, sY = 140; |
||
55 | private CanvasZone canvas = null; |
||
56 | private ViewPort viewPort = null; |
||
57 | public FLyrPoints lyrPoints = null; |
||
58 | public FLyrGeoRaster lyrGeoRaster = null; |
||
59 | public GeoreferencingDialog dialog = null; |
||
60 | private boolean rightControl = false; |
||
61 | //**********************End Vars******************************
|
||
62 | |||
63 | //**********************Methods*******************************
|
||
64 | /**
|
||
65 | * This is the default constructor
|
||
66 | */
|
||
67 | public ZoomControlPanel(boolean rightControl, GeoreferencingDialog dialog) { |
||
68 | super();
|
||
69 | this.rightControl = rightControl;
|
||
70 | this.dialog = dialog;
|
||
71 | initialize(rightControl); |
||
72 | } |
||
73 | |||
74 | /**
|
||
75 | * This method initializes this
|
||
76 | *
|
||
77 | * @return void
|
||
78 | */
|
||
79 | private void initialize(boolean rightControl) { |
||
80 | |||
81 | GridBagConstraints gridBagConstraints1 = new GridBagConstraints(); |
||
82 | if(rightControl)
|
||
83 | gridBagConstraints1.gridx = 1;
|
||
84 | else
|
||
85 | gridBagConstraints1.gridx = 0;
|
||
86 | gridBagConstraints1.gridy = 0;
|
||
87 | GridBagConstraints gridBagConstraints = new GridBagConstraints(); |
||
88 | if(rightControl)
|
||
89 | gridBagConstraints.gridx = 0;
|
||
90 | else
|
||
91 | gridBagConstraints.gridx = 1;
|
||
92 | gridBagConstraints.gridy = 0;
|
||
93 | this.setLayout(new GridBagLayout()); |
||
94 | this.setPreferredSize(new java.awt.Dimension(175,142)); |
||
95 | this.setSize(new java.awt.Dimension(175,142)); |
||
96 | this.setLocation(new java.awt.Point(0,0)); |
||
97 | this.add(getPImage(), gridBagConstraints);
|
||
98 | 4729 | nacho | this.add(getPControls(), gridBagConstraints1);
|
99 | //Desactivamos el control en la inicializaci?n
|
||
100 | this.setEnabled(false); |
||
101 | 4686 | nacho | } |
102 | |||
103 | /**
|
||
104 | * Carga las capas de puntos y de raster georreferenciado
|
||
105 | *
|
||
106 | */
|
||
107 | public void loadLayer() throws InstantiationException{ |
||
108 | //Cargamos las capas
|
||
109 | this.lyrGeoRaster = dialog.getLyrGeoRaster();
|
||
110 | this.lyrPoints = dialog.getLyrPoints();
|
||
111 | |||
112 | if(lyrGeoRaster == null || lyrPoints == null) |
||
113 | throw new InstantiationException("No se ha podido instanciar la capa de puntos o georreferenciada"); |
||
114 | |||
115 | } |
||
116 | |||
117 | /**
|
||
118 | *Llama a la funci?n de pintado del canvas con los par?metros que tenga en ese momento
|
||
119 | */
|
||
120 | public void draw(){ |
||
121 | if(!getDialog().isEnlarge())
|
||
122 | getCanvas().loadBuffer(); |
||
123 | getCanvas().repaint(); |
||
124 | } |
||
125 | |||
126 | /**
|
||
127 | * Manejo de los controles zoom m?s y zoom menos
|
||
128 | */
|
||
129 | public void actionPerformed(ActionEvent e) { |
||
130 | if(e.getSource() == bZoomMas){
|
||
131 | canvas.calcZoom(0.6);
|
||
132 | canvas.repaint(); |
||
133 | } |
||
134 | |||
135 | if(e.getSource() == bZoomMenos){
|
||
136 | canvas.calcZoom(1.8);
|
||
137 | canvas.repaint(); |
||
138 | } |
||
139 | |||
140 | } |
||
141 | |||
142 | /**
|
||
143 | *Limpia el canvas
|
||
144 | */
|
||
145 | public void clear(){ |
||
146 | canvas.setCleanCanvas(true);
|
||
147 | canvas.repaint(); |
||
148 | } |
||
149 | //**********************End Methods***************************
|
||
150 | |||
151 | //**********************Setters & Getters*********************
|
||
152 | /**
|
||
153 | * @param viewPort The viewPort to set.
|
||
154 | */
|
||
155 | public void setViewPort(ViewPort viewPort) { |
||
156 | this.viewPort = viewPort;
|
||
157 | getCanvas().setViewPort(this.viewPort);
|
||
158 | } |
||
159 | |||
160 | /**
|
||
161 | * This method initializes jPanel
|
||
162 | *
|
||
163 | * @return javax.swing.JPanel
|
||
164 | */
|
||
165 | private JPanel getPImage() { |
||
166 | if (pImage == null) { |
||
167 | pImage = new JPanel(); |
||
168 | BorderLayout borderLayout = new BorderLayout(); |
||
169 | pImage.setLayout(borderLayout); |
||
170 | pImage.setPreferredSize(new java.awt.Dimension(140,140)); |
||
171 | pImage.setBorder(javax.swing.BorderFactory.createBevelBorder(javax.swing.border.BevelBorder.LOWERED)); |
||
172 | pImage.add(getCanvas(), BorderLayout.CENTER);
|
||
173 | } |
||
174 | return pImage;
|
||
175 | } |
||
176 | |||
177 | /**
|
||
178 | * This method initilizes canvas
|
||
179 | * @return CanvasZone
|
||
180 | */
|
||
181 | public CanvasZone getCanvas(){
|
||
182 | if(canvas == null){ |
||
183 | canvas = new CanvasZone(sX, sY, this); |
||
184 | canvas.setVisible(false);
|
||
185 | canvas.addMouseListener(canvas); |
||
186 | canvas.addMouseMotionListener(canvas); |
||
187 | } |
||
188 | return canvas;
|
||
189 | } |
||
190 | |||
191 | /**
|
||
192 | * This method initializes jPanel1
|
||
193 | *
|
||
194 | * @return javax.swing.JPanel
|
||
195 | */
|
||
196 | private JPanel getPControls() { |
||
197 | if (pControls == null) { |
||
198 | GridBagConstraints gridBagConstraints3 = new GridBagConstraints(); |
||
199 | gridBagConstraints3.gridx = 0;
|
||
200 | gridBagConstraints3.insets = new java.awt.Insets(5,0,0,0); |
||
201 | gridBagConstraints3.gridy = 1;
|
||
202 | GridBagConstraints gridBagConstraints2 = new GridBagConstraints(); |
||
203 | gridBagConstraints2.gridx = 0;
|
||
204 | gridBagConstraints2.gridy = 0;
|
||
205 | pControls = new JPanel(); |
||
206 | pControls.setLayout(new GridBagLayout()); |
||
207 | pControls.setPreferredSize(new java.awt.Dimension(33,140)); |
||
208 | pControls.add(getBZoomMas(), gridBagConstraints2); |
||
209 | pControls.add(getBZoomMenos(), gridBagConstraints3); |
||
210 | } |
||
211 | return pControls;
|
||
212 | } |
||
213 | |||
214 | /**
|
||
215 | * This method initializes jButton
|
||
216 | *
|
||
217 | * @return javax.swing.JButton
|
||
218 | */
|
||
219 | private JButton getBZoomMas() { |
||
220 | if (bZoomMas == null) { |
||
221 | bZoomMas = new JButton(); |
||
222 | bZoomMas.setPreferredSize(new java.awt.Dimension(25,25)); |
||
223 | bZoomMas.setIcon(new ImageIcon(getClass().getResource("/com/iver/cit/gvsig/gui/panels/images/aumentar.png"))); |
||
224 | bZoomMas.addActionListener(this);
|
||
225 | } |
||
226 | return bZoomMas;
|
||
227 | } |
||
228 | |||
229 | /**
|
||
230 | * This method initializes jButton
|
||
231 | *
|
||
232 | * @return javax.swing.JButton
|
||
233 | */
|
||
234 | private JButton getBZoomMenos() { |
||
235 | if (bZoomMenos == null) { |
||
236 | bZoomMenos = new JButton(); |
||
237 | bZoomMenos.setPreferredSize(new java.awt.Dimension(25,25)); |
||
238 | bZoomMenos.setIcon(new ImageIcon(getClass().getResource("/com/iver/cit/gvsig/gui/panels/images/disminuir.png"))); |
||
239 | bZoomMenos.addActionListener(this);
|
||
240 | } |
||
241 | return bZoomMenos;
|
||
242 | } |
||
243 | |||
244 | /**
|
||
245 | * Obtiene true si se trata de un control con los botones de zoom
|
||
246 | * a la derecha y false si los tiene a la izquierda.
|
||
247 | * @return Returns the rightControl.
|
||
248 | */
|
||
249 | public boolean isRightControl() { |
||
250 | return rightControl;
|
||
251 | } |
||
252 | |||
253 | /**
|
||
254 | * Obtiene la capa de imagen georreferenciada.
|
||
255 | * @return Returns the lyrGeoRaster.
|
||
256 | */
|
||
257 | public FLyrGeoRaster getLyrGeoRaster() {
|
||
258 | return lyrGeoRaster;
|
||
259 | } |
||
260 | |||
261 | /**
|
||
262 | * Obtiene la capa de puntos.
|
||
263 | * @return Returns the lyrPoints.
|
||
264 | */
|
||
265 | public FLyrPoints getLyrPoints() {
|
||
266 | try{
|
||
267 | if(lyrPoints == null) |
||
268 | this.loadLayer();
|
||
269 | }catch(InstantiationException e){ |
||
270 | JOptionPane.showMessageDialog((Component)PluginServices.getMainFrame(), |
||
271 | PluginServices.getText(this, "error_capa_puntos")); |
||
272 | } |
||
273 | return lyrPoints;
|
||
274 | } |
||
275 | |||
276 | /**
|
||
277 | * @return Returns the dialog.
|
||
278 | */
|
||
279 | public GeoreferencingDialog getDialog() {
|
||
280 | try{
|
||
281 | if(dialog == null) |
||
282 | this.loadLayer();
|
||
283 | }catch(InstantiationException e){ |
||
284 | JOptionPane.showMessageDialog((Component)PluginServices.getMainFrame(), |
||
285 | PluginServices.getText(this, "error_capa_puntos")); |
||
286 | } |
||
287 | return dialog;
|
||
288 | } |
||
289 | |||
290 | /**
|
||
291 | * Asigna el viewPort recalculado
|
||
292 | * @param vp ViewPort
|
||
293 | */
|
||
294 | public void setNewViewPort(ViewPort vp){ |
||
295 | canvas.setNewViewPort(vp); |
||
296 | } |
||
297 | |||
298 | 4772 | nacho | /**
|
299 | * Obtiene el viewPort recalculado
|
||
300 | * @return vp ViewPort
|
||
301 | */
|
||
302 | public ViewPort getNewViewPort(){
|
||
303 | return canvas.getNewViewPort();
|
||
304 | } |
||
305 | |||
306 | 4686 | nacho | /**
|
307 | * Asigna al canvas la propiedad de visibilidad a verdadero o falso.
|
||
308 | * @param visible true para mostrar el canvas y false para ocultarlo
|
||
309 | */
|
||
310 | public void setVisible(boolean visible){ |
||
311 | canvas.setVisible(visible); |
||
312 | canvas.repaint(); |
||
313 | } |
||
314 | |||
315 | /**
|
||
316 | * Asigna el punto sobre el que se centrar? el zoom de la minimagen
|
||
317 | * @param pto
|
||
318 | */
|
||
319 | public void setCenterPoint(Point2D pto){ |
||
320 | getCanvas().setCenterPoint(pto); |
||
321 | } |
||
322 | |||
323 | /**
|
||
324 | * Recupera el n?mero de punto que se est? tratando
|
||
325 | * @param n
|
||
326 | */
|
||
327 | public int getNumberPoint(){ |
||
328 | try{
|
||
329 | if(getDialog().getConectorPanel().getDataPointsTabPanel().getTbPoints().getSelectedIndex() == 0) |
||
330 | return Integer.valueOf(getDialog().getConectorPanel().getDataPointsTabPanel().getSelectPointsPanel().getTableControlerPanel().getCPoint().getSelectedItem().toString()).intValue() - 1; |
||
331 | else
|
||
332 | return Integer.valueOf(getDialog().getConectorPanel().getDataPointsTabPanel().getTablePointsPanel().getTableControlerPanel().getCPoint().getSelectedItem().toString()).intValue() - 1; |
||
333 | }catch(NullPointerException exc){ |
||
334 | return -1; |
||
335 | } |
||
336 | } |
||
337 | 4723 | nacho | |
338 | /**
|
||
339 | * Activa o desactiva este panel y todos los que lo componen
|
||
340 | * @param enabled variable booleana para la activaci?n y/o desactivaci?n
|
||
341 | */
|
||
342 | public void setEnabled(boolean enabled){ |
||
343 | this.getBZoomMas().setEnabled(enabled);
|
||
344 | this.getBZoomMenos().setEnabled(enabled);
|
||
345 | this.getCanvas().setEnableEvent(enabled);
|
||
346 | } |
||
347 | |||
348 | 4686 | nacho | //**********************End Setters & Getters*****************
|
349 | /**
|
||
350 | * Control que representa la zona de dibujado de la ventana. Este se encarga de
|
||
351 | * repintar el contenido sobre el Graphics2D a partir del viewPort que se le pase
|
||
352 | * @author Nacho Brodin (brodin_ign@gva.es)
|
||
353 | */
|
||
354 | public class CanvasZone extends JPanel implements MouseListener, MouseMotionListener{ |
||
355 | |||
356 | //**********************Params********************************
|
||
357 | /**
|
||
358 | * Zoom inicial de la miniimagen
|
||
359 | */
|
||
360 | private int initZoom = 20; |
||
361 | //**********************End Params****************************
|
||
362 | |||
363 | //**********************Vars**********************************
|
||
364 | private ZoomControlPanel zoomControl = null; |
||
365 | private int ancho; |
||
366 | private int alto; |
||
367 | private FLayers flayers = null; |
||
368 | private ViewPort newViewPort = null; |
||
369 | private Point2D centerPoint = null; |
||
370 | private Image dobleBuffer = null; |
||
371 | private BufferedImage imgTmp = null; |
||
372 | private Graphics dbGraphics = null; |
||
373 | private boolean cleanCanvas = false; |
||
374 | 4723 | nacho | /**
|
375 | * Cuando el control est? desactivado necesitamos controlar con esta variable que
|
||
376 | * aunque se pinche sobre el canvas no se capture el evento
|
||
377 | */
|
||
378 | private boolean enableEvent = true; |
||
379 | 4745 | nacho | /**
|
380 | * Puntos inicial y final para el desplazamiento del punto de control
|
||
381 | */
|
||
382 | 4750 | nacho | private Point2D ptoIni = null, ptoFin = null; |
383 | private Point2D movDragged = null, initCrux = null; |
||
384 | private boolean dragged = false; |
||
385 | private final Image redCursor = new ImageIcon(this.getClass().getResource( |
||
386 | "images/icoRed.png")).getImage();
|
||
387 | private final Image blueCursor = new ImageIcon(this.getClass().getResource( |
||
388 | "images/icoBlue.png")).getImage();
|
||
389 | 4686 | nacho | //**********************End Vars******************************
|
390 | |||
391 | //**********************Methods*******************************
|
||
392 | /**
|
||
393 | *
|
||
394 | */
|
||
395 | public CanvasZone( int anc,int alt, ZoomControlPanel zc) { |
||
396 | zoomControl = zc; |
||
397 | ancho = anc; |
||
398 | alto = alt; |
||
399 | |||
400 | this.setSize(ancho, alto);
|
||
401 | this.setBackground(Color.WHITE); |
||
402 | |||
403 | imgTmp = new BufferedImage(this.ancho, this.alto, BufferedImage.TYPE_INT_ARGB); |
||
404 | dobleBuffer = new BufferedImage(this.ancho, this.alto, BufferedImage.TYPE_INT_ARGB); |
||
405 | dbGraphics = dobleBuffer.getGraphics(); |
||
406 | } |
||
407 | |||
408 | /**
|
||
409 | * Calcula el zoom dependiendo del factor de escala pasado por
|
||
410 | * par?metro.
|
||
411 | */
|
||
412 | public void calcZoom(double factor){ |
||
413 | Rectangle2D.Double r = new Rectangle2D.Double(); |
||
414 | double nuevoX = centerPoint.getX() -
|
||
415 | ((newViewPort.getExtent().getWidth() * factor) / 2.0);
|
||
416 | double nuevoY = centerPoint.getY() -
|
||
417 | ((newViewPort.getExtent().getHeight() * factor) / 2.0);
|
||
418 | r.x = nuevoX; |
||
419 | r.y = nuevoY; |
||
420 | r.width = newViewPort.getExtent().getWidth() * factor; |
||
421 | r.height = newViewPort.getExtent().getHeight() * factor; |
||
422 | newViewPort.setExtent(r); |
||
423 | newViewPort.setScale(); |
||
424 | } |
||
425 | |||
426 | |||
427 | /**
|
||
428 | *Calculamos el viewPort para el zoom de la minimagen
|
||
429 | */
|
||
430 | public ViewPort initViewPort(ViewPort vp, Point2D center, ViewPort vpDest){ |
||
431 | if(center != null){ |
||
432 | |||
433 | //Hallamos la relaci?n entre el pixel y las WC a partir de la imagen de la capa
|
||
434 | 4729 | nacho | double relacionPixelWcWidth = ((vp.getExtent().getMaxX() - vp.getExtent().getMinX()) / initZoom) / ancho;
|
435 | double relacionPixelWcHeight = ((vp.getExtent().getMaxY() - vp.getExtent().getMinY()) / initZoom) / alto;
|
||
436 | 4686 | nacho | |
437 | 4729 | nacho | double wcOriginX = center.getX() - ((vp.getImageWidth() * relacionPixelWcWidth) / 2); |
438 | double wcOriginY = center.getY() - ((vp.getImageHeight() * relacionPixelWcHeight) / 2); |
||
439 | 4686 | nacho | |
440 | double wcDstMinX = wcOriginX;
|
||
441 | double wcDstMinY = wcOriginY;
|
||
442 | double wcDstMaxX = wcDstMinX + (vp.getImageWidth()*relacionPixelWcWidth);
|
||
443 | double wcDstMaxY = wcDstMinY + (vp.getImageHeight()*relacionPixelWcHeight);
|
||
444 | |||
445 | double wcDstWidth = wcDstMaxX - wcDstMinX;
|
||
446 | double wcDstHeight = wcDstMaxY - wcDstMinY;
|
||
447 | |||
448 | Rectangle2D ext = new Rectangle2D.Double(wcDstMinX, wcDstMinY, wcDstWidth, wcDstHeight); |
||
449 | |||
450 | if(vpDest == null){ |
||
451 | newViewPort = vp.cloneViewPort(); |
||
452 | newViewPort.setExtent(ext); |
||
453 | newViewPort.setImageSize(new java.awt.Dimension(ancho, alto));
|
||
454 | newViewPort.setScale(); |
||
455 | return newViewPort;
|
||
456 | }else{
|
||
457 | vpDest.setExtent(ext); |
||
458 | vpDest.setScale(); |
||
459 | return vpDest;
|
||
460 | } |
||
461 | |||
462 | } |
||
463 | return null; |
||
464 | } |
||
465 | |||
466 | /**
|
||
467 | * Dibuja sobre el graphics de la mini imagen la imagen
|
||
468 | * definida en el newViewPort.
|
||
469 | */
|
||
470 | public void loadBuffer(){ |
||
471 | Graphics2D gTmp = (Graphics2D)imgTmp.getGraphics(); |
||
472 | |||
473 | |||
474 | dbGraphics.setColor( Color.WHITE );
|
||
475 | dbGraphics.fillRect( 0,0,ancho,alto ); |
||
476 | gTmp.setColor( Color.WHITE );
|
||
477 | gTmp.fillRect( 0,0,ancho,alto ); |
||
478 | |||
479 | try{
|
||
480 | if(newViewPort != null){ |
||
481 | if(zoomControl.getNumberPoint() != -1){//Salvamos el miniextent si hay puntos en la lista |
||
482 | if(!zoomControl.isRightControl())
|
||
483 | zoomControl.getLyrPoints().setMiniExtent(zoomControl.getNumberPoint(), |
||
484 | centerPoint, |
||
485 | newViewPort, |
||
486 | true);
|
||
487 | else
|
||
488 | zoomControl.getLyrPoints().setMiniExtent(zoomControl.getNumberPoint(), |
||
489 | centerPoint, |
||
490 | newViewPort, |
||
491 | false);
|
||
492 | } |
||
493 | //Si no tenemos las capas las cargamos
|
||
494 | if(flayers == null){ |
||
495 | View theView = null; |
||
496 | try{
|
||
497 | theView = (View)PluginServices.getMDIManager().getActiveView();
|
||
498 | }catch(ClassCastException exc){ |
||
499 | return;
|
||
500 | } |
||
501 | flayers = theView.getMapControl().getMapContext().getLayers(); |
||
502 | } |
||
503 | |||
504 | 4704 | nacho | /*Dibujamos sobre las miniimagenes
|
505 | Forzamos un draw de las capas para dibujar la vista sobre el control de las miniimagenes.
|
||
506 | Como la capa gr?fica est? en FMap esta no aparece en el dibujado de FLayers por los que
|
||
507 | forzaremos el pintado tambi?n de la capa de puntos sobre nuestro control*/
|
||
508 | |||
509 | 4686 | nacho | if(zoomControl.getDialog().isEnlarge()){
|
510 | if(zoomControl.getNumberPoint() != -1){ |
||
511 | flayers.draw(null, (Graphics2D) dbGraphics, newViewPort,new Cancellable() { |
||
512 | public boolean isCanceled() { |
||
513 | return false; |
||
514 | } |
||
515 | },flayers.getFMap().getScaleView()); |
||
516 | 4704 | nacho | zoomControl.getLyrPoints().draw(null, (Graphics2D) dbGraphics, newViewPort,new Cancellable() { |
517 | public boolean isCanceled() { |
||
518 | return false; |
||
519 | } |
||
520 | },flayers.getFMap().getScaleView()); |
||
521 | 4686 | nacho | } |
522 | } |
||
523 | |||
524 | flayers.draw(null, gTmp, newViewPort,new Cancellable() { |
||
525 | public boolean isCanceled() { |
||
526 | return false; |
||
527 | } |
||
528 | },flayers.getFMap().getScaleView()); |
||
529 | 4704 | nacho | zoomControl.getLyrPoints().draw(null, gTmp, newViewPort,new Cancellable() { |
530 | public boolean isCanceled() { |
||
531 | return false; |
||
532 | } |
||
533 | },flayers.getFMap().getScaleView()); |
||
534 | 4686 | nacho | |
535 | } |
||
536 | }catch (DriverException e) {
|
||
537 | e.printStackTrace(); |
||
538 | } |
||
539 | } |
||
540 | |||
541 | /**
|
||
542 | *
|
||
543 | */
|
||
544 | public void update(Graphics g){ |
||
545 | this.paint(g);
|
||
546 | } |
||
547 | |||
548 | /**
|
||
549 | * Dibuja sobre el Graphics2D pasado el viewPort solicitado a
|
||
550 | * la lista de capas.
|
||
551 | * @param g
|
||
552 | */
|
||
553 | public void paint( Graphics g ) { |
||
554 | if(!cleanCanvas){
|
||
555 | loadBuffer(); |
||
556 | g.drawImage(dobleBuffer, 0, 0, null); |
||
557 | 4772 | nacho | AdjustGeorefPanel p = zoomControl.getDialog().getConectorPanel().getAdjustGeorefPanel(); |
558 | try{
|
||
559 | if(!this.zoomControl.isRightControl()) |
||
560 | p.setLZoomLeft("1:"+((int)newViewPort.getScale())); |
||
561 | else
|
||
562 | p.setLZoomRight("1:"+((int)newViewPort.getScale())); |
||
563 | }catch(NullPointerException exc){ |
||
564 | //No ponemos la escala
|
||
565 | } |
||
566 | 4686 | nacho | }else{
|
567 | g.setColor( Color.WHITE );
|
||
568 | g.fillRect( 0,0,ancho,alto ); |
||
569 | cleanCanvas = false;
|
||
570 | } |
||
571 | } |
||
572 | |||
573 | /**
|
||
574 | * Desplaza el extent al nuevo centro
|
||
575 | * @param pto
|
||
576 | */
|
||
577 | public void shiftExtent(Point2D pto){ |
||
578 | this.setCenterPoint(pto);
|
||
579 | this.calcZoom(1); |
||
580 | } |
||
581 | |||
582 | /* (non-Javadoc)
|
||
583 | * @see java.awt.event.MouseListener#mouseClicked(java.awt.event.MouseEvent)
|
||
584 | */
|
||
585 | public void mouseClicked(MouseEvent ev) { |
||
586 | |||
587 | } |
||
588 | |||
589 | 4729 | nacho | /**
|
590 | * Cuando el rat?n entra dentro del control fijamos el valor de las coordenadas
|
||
591 | * que tiene el punto seleccionado. De esta forma cuando salga del control podr?
|
||
592 | * volver a restaurarlo en caso de que no haya sido cambiado.
|
||
593 | 4686 | nacho | */
|
594 | public void mouseEntered(MouseEvent arg0) { |
||
595 | 4729 | nacho | if(isEnableEvent()){
|
596 | if(!zoomControl.rightControl)
|
||
597 | zoomControl.getDialog().getPointManager().setCurrentWC(); |
||
598 | else
|
||
599 | zoomControl.getDialog().getPointManager().setCurrentPixelCoord(); |
||
600 | } |
||
601 | 4686 | nacho | } |
602 | |||
603 | 4729 | nacho | /**
|
604 | * Al sacar el rat?n de la zona de dibujado de la miniimagen restauramos los valores
|
||
605 | * de los JTextField.
|
||
606 | *
|
||
607 | * Se actualizaran los correspondientes a las coordenadas del mundo real
|
||
608 | * en el caso de que el control tenga botones a la izquierda.
|
||
609 | *
|
||
610 | * Se actualizaran los correspondientes a las coordenadas en pixels cuando se trata del control con
|
||
611 | * botones a la derecha.
|
||
612 | 4686 | nacho | */
|
613 | public void mouseExited(MouseEvent arg0) { |
||
614 | 4729 | nacho | if(isEnableEvent()){
|
615 | if(!zoomControl.rightControl)
|
||
616 | zoomControl.getDialog().getPointManager().replaceWC(); |
||
617 | else
|
||
618 | zoomControl.getDialog().getPointManager().replacePixelCoord(); |
||
619 | } |
||
620 | 4686 | nacho | } |
621 | |||
622 | /**
|
||
623 | 4729 | nacho | * Controla la actualizaci?n del valor de un punto en los JTextDialog. Cuando se mueve sobre
|
624 | * el panel con controles a la izquierda actualizamos las coordenadas del mapa. Cuando se mueve sobre
|
||
625 | * el panel con controles a la derecha actualizamos las coordenadas de la imagen.
|
||
626 | */
|
||
627 | public void mouseMoved(MouseEvent arg0) { |
||
628 | 4772 | nacho | if( isEnableEvent() &&
|
629 | zoomControl.getLyrPoints() != null &&
|
||
630 | zoomControl.getLyrPoints().getCountPoints() > 0){
|
||
631 | 4729 | nacho | double newWCPointX = this.newViewPort.getExtent().getMinX() + ((arg0.getX() * this.newViewPort.getExtent().getWidth()) / this.getWidth()); |
632 | int ptoSelectY = (int)(this.getHeight() - arg0.getY()); |
||
633 | double newWCPointY = this.newViewPort.getExtent().getMinY() + ((ptoSelectY * this.newViewPort.getExtent().getHeight()) / this.getHeight()); |
||
634 | if(!zoomControl.rightControl){
|
||
635 | zoomControl.getDialog().getPointManager().setTempWC(newWCPointX, newWCPointY); |
||
636 | }else{
|
||
637 | Point2D pixelImg = zoomControl.getLyrGeoRaster().world2Img(newWCPointX, newWCPointY);
|
||
638 | if(pixelImg != null) |
||
639 | zoomControl.getDialog().getPointManager().setTempPixelCoord(pixelImg.getX(), pixelImg.getY()); |
||
640 | else
|
||
641 | //Si pixelImg es null es que nos hemos salido de la imagen por lo que reponemos los valores originales hasta que vuelva a entrar.
|
||
642 | zoomControl.getDialog().getPointManager().replacePixelCoord(); |
||
643 | |||
644 | } |
||
645 | } |
||
646 | } |
||
647 | |||
648 | /**
|
||
649 | 4686 | nacho | * Al pulsar el rat?n sobre la minimagen permitimos que se pueda desplazar la cruz
|
650 | 4745 | nacho | *
|
651 | 4686 | nacho | */
|
652 | public void mousePressed(MouseEvent ev) { |
||
653 | 4750 | nacho | int cte = 10; |
654 | if( (ev.getX() > ((getWidth() >> 1) - cte)) && (ev.getX() < ((getWidth() >> 1) + cte)) && |
||
655 | (ev.getY() > ((getHeight() >> 1) - cte)) && (ev.getY() < ((getHeight() >> 1) + cte))){ |
||
656 | this.dragged = true; |
||
657 | this.movDragged = ptoIni = ev.getPoint();
|
||
658 | try{
|
||
659 | if(zoomControl.isRightControl())
|
||
660 | setCursor(Toolkit.getDefaultToolkit().createCustomCursor(redCursor, new Point(16, 16), "")); |
||
661 | else
|
||
662 | setCursor(Toolkit.getDefaultToolkit().createCustomCursor(blueCursor, new Point(16, 16), "")); |
||
663 | |||
664 | zoomControl.loadLayer(); |
||
665 | initCrux = new Point2D.Double(); |
||
666 | initCrux.setLocation(this.getWidth() / 2, this.getHeight() / 2); |
||
667 | repaint(); |
||
668 | }catch(InstantiationException e){ |
||
669 | JOptionPane.showMessageDialog((Component)PluginServices.getMainFrame(), |
||
670 | PluginServices.getText(this, "error_capa_puntos")); |
||
671 | } |
||
672 | 4745 | nacho | } |
673 | 4686 | nacho | } |
674 | 4745 | nacho | |
675 | 4686 | nacho | /* (non-Javadoc)
|
676 | * @see java.awt.event.MouseListener#mouseReleased(java.awt.event.MouseEvent)
|
||
677 | */
|
||
678 | public void mouseReleased(MouseEvent ev) { |
||
679 | 4750 | nacho | if(!dragged)
|
680 | return;
|
||
681 | dragged = false;
|
||
682 | 4745 | nacho | View theView = null; |
683 | try{
|
||
684 | theView = (View) PluginServices.getMDIManager().getActiveView();
|
||
685 | }catch(ClassCastException exc){ |
||
686 | return;
|
||
687 | } |
||
688 | ViewPort viewPort = theView.getMapControl().getMapContext().getViewPort(); |
||
689 | setCursor(new Cursor(Cursor.DEFAULT_CURSOR)); |
||
690 | |||
691 | ptoFin = ev.getPoint(); |
||
692 | |||
693 | 4831 | nacho | /*double destX = this.newViewPort.getExtent().getMinX() + ((ev.getX() * this.newViewPort.getExtent().getWidth()) / this.getWidth());
|
694 | 4750 | nacho | int ptoSelectY = (int)(this.getHeight() - ev.getY());
|
695 | 4831 | nacho | double destY = this.newViewPort.getExtent().getMinY() + ((ptoSelectY * this.newViewPort.getExtent().getHeight()) / this.getHeight());
|
696 | */
|
||
697 | Point2D point = newViewPort.toMapPoint(ev.getX(), ev.getY());
|
||
698 | 4745 | nacho | int nPoint = Integer.valueOf(zoomControl.getDialog().getSelectPointsPanel().getTableControlerPanel().getCPoint().getSelectedItem().toString()).intValue(); |
699 | |||
700 | FLyrPoints lp = zoomControl.getLyrPoints();//(FLyrPoints)lyr;
|
||
701 | |||
702 | if(zoomControl.isRightControl()){ //Control de actualizaci?n de pixel de imagen |
||
703 | 4831 | nacho | Point2D pixelImg = zoomControl.getLyrGeoRaster().world2Img(point);
|
704 | //Point2D pixelImg = zoomControl.getLyrGeoRaster().world2Img(newWCPointX, newWCPointY);
|
||
705 | |||
706 | 4745 | nacho | if(pixelImg == null){ |
707 | JOptionPane.showMessageDialog((Component)PluginServices.getMainFrame(), |
||
708 | PluginServices.getText(this, "fuera_de_extent")); |
||
709 | return;
|
||
710 | } |
||
711 | zoomControl.getDialog().getPointManager().updateData( nPoint, |
||
712 | pixelImg, |
||
713 | null,
|
||
714 | zoomControl.getDialog(), |
||
715 | null);
|
||
716 | |||
717 | //Actualizamos la otra miniimagen
|
||
718 | shiftExtent(zoomControl.getLyrGeoRaster().img2World(pixelImg)); |
||
719 | zoomControl.getDialog().getConectorPanel().getAdjustGeorefPanel().getZoomLeft().draw(); |
||
720 | zoomControl.getDialog().getConectorPanel().getAdjustGeorefPanel().getZoomRight().draw(); |
||
721 | zoomControl.getDialog().getPointManager().setCurrentPixelCoord(); |
||
722 | }else{ //Control de actualizaci?n de coordenadas del mundo |
||
723 | Point2D mapPoint = new Point2D.Double(); |
||
724 | 4831 | nacho | mapPoint.setLocation(point); |
725 | //Point2D mapPoint = new Point2D.Double();
|
||
726 | //mapPoint.setLocation(newWCPointX, newWCPointY);
|
||
727 | 4745 | nacho | zoomControl.getDialog().getPointManager().updateData( nPoint, |
728 | null,
|
||
729 | mapPoint, |
||
730 | zoomControl.getDialog(), |
||
731 | null);
|
||
732 | |||
733 | //Actualizamos la otra miniimagen
|
||
734 | shiftExtent(mapPoint); |
||
735 | zoomControl.getDialog().getConectorPanel().getAdjustGeorefPanel().getZoomRight().draw(); |
||
736 | zoomControl.getDialog().getConectorPanel().getAdjustGeorefPanel().getZoomLeft().draw(); |
||
737 | zoomControl.getDialog().getPointManager().setCurrentWC(); |
||
738 | } |
||
739 | repaint(); |
||
740 | theView.getMapControl().getMapContext().invalidate(); |
||
741 | } |
||
742 | |||
743 | 4686 | nacho | /* (non-Javadoc)
|
744 | * @see java.awt.event.MouseMotionListener#mouseDragged(java.awt.event.MouseEvent)
|
||
745 | */
|
||
746 | public void mouseDragged(MouseEvent ev) { |
||
747 | 4745 | nacho | this.mouseMoved(ev);
|
748 | 4686 | nacho | } |
749 | //**********************End Methods***************************
|
||
750 | |||
751 | //**********************Setters & Getters*********************
|
||
752 | /**
|
||
753 | * @param cleanCanvas The cleanCanvas to set.
|
||
754 | */
|
||
755 | public void setCleanCanvas(boolean cleanCanvas) { |
||
756 | this.cleanCanvas = cleanCanvas;
|
||
757 | } |
||
758 | |||
759 | /**
|
||
760 | * Asigna el punto donde se centrar? la vista de la minimagen
|
||
761 | * @param pto Punto central.
|
||
762 | */
|
||
763 | public void setCenterPoint(Point2D pto){ |
||
764 | this.centerPoint = pto;
|
||
765 | } |
||
766 | |||
767 | /**
|
||
768 | * Asigna el viewPort
|
||
769 | * @param vp ViewPort
|
||
770 | */
|
||
771 | public void setViewPort(ViewPort vp){ |
||
772 | this.initViewPort(vp, this.centerPoint, null); |
||
773 | } |
||
774 | |||
775 | /**
|
||
776 | * Asigna el viewPort recalculado
|
||
777 | * @param vp ViewPort
|
||
778 | */
|
||
779 | public void setNewViewPort(ViewPort vp){ |
||
780 | this.newViewPort = vp;
|
||
781 | } |
||
782 | 4723 | nacho | |
783 | /**
|
||
784 | 4772 | nacho | * Obtiene el viewPort recalculado
|
785 | * @return vp ViewPort
|
||
786 | */
|
||
787 | public ViewPort getNewViewPort(){
|
||
788 | return this.newViewPort; |
||
789 | } |
||
790 | |||
791 | /**
|
||
792 | 4723 | nacho | * Obtiene el valor del desactivador de eventos sobre el canvas.
|
793 | * @return
|
||
794 | */
|
||
795 | public boolean isEnableEvent() { |
||
796 | return enableEvent;
|
||
797 | } |
||
798 | |||
799 | /**
|
||
800 | * Asigna el desactivador de eventos sobre el canvas
|
||
801 | * @param enableEvent
|
||
802 | */
|
||
803 | public void setEnableEvent(boolean enableEvent) { |
||
804 | this.enableEvent = enableEvent;
|
||
805 | } |
||
806 | 4686 | nacho | //**********************End Setters & Getters*****************
|
807 | |||
808 | } |
||
809 | } |