root / trunk / libraries / libFMap / src / com / iver / cit / gvsig / fmap / MapControl.java @ 351
History | View | Annotate | Download (27.2 KB)
1 | 213 | fernando | package com.iver.cit.gvsig.fmap; |
---|---|---|---|
2 | |||
3 | import java.awt.Color; |
||
4 | import java.awt.Cursor; |
||
5 | import java.awt.Graphics; |
||
6 | import java.awt.Graphics2D; |
||
7 | import java.awt.Image; |
||
8 | import java.awt.Point; |
||
9 | import java.awt.Rectangle; |
||
10 | import java.awt.Toolkit; |
||
11 | import java.awt.event.ActionEvent; |
||
12 | import java.awt.event.ActionListener; |
||
13 | import java.awt.event.ComponentEvent; |
||
14 | import java.awt.event.ComponentListener; |
||
15 | import java.awt.event.MouseEvent; |
||
16 | import java.awt.event.MouseListener; |
||
17 | import java.awt.event.MouseMotionListener; |
||
18 | import java.awt.geom.Point2D; |
||
19 | import java.awt.geom.Rectangle2D; |
||
20 | import java.awt.image.BufferedImage; |
||
21 | import java.text.NumberFormat; |
||
22 | import java.util.ArrayList; |
||
23 | |||
24 | import javax.swing.ImageIcon; |
||
25 | import javax.swing.JComponent; |
||
26 | import javax.swing.Timer; |
||
27 | |||
28 | import org.apache.log4j.Logger; |
||
29 | import org.cresques.cts.IProjection; |
||
30 | |||
31 | 344 | vcaballero | import com.iver.cit.gvsig.fmap.tools.Behavior.MapTool; |
32 | 213 | fernando | |
33 | |||
34 | /**
|
||
35 | * DOCUMENT ME!
|
||
36 | *
|
||
37 | * @author Fernando Gonz?lez Cort?s
|
||
38 | */
|
||
39 | public class MapControl extends JComponent { |
||
40 | private static Logger logger = Logger.getLogger(MapControl.class.getName()); |
||
41 | public static final int PRESS = 0x01; |
||
42 | public static final int RELEASE = 0x02; |
||
43 | public static final int DRAG = 0x04; |
||
44 | public static final int MOVE = 0x10; |
||
45 | public static final int CLICK = 0x20; |
||
46 | |||
47 | /** DOCUMENT ME! */
|
||
48 | public static final int ZOOM_MAS = 1; |
||
49 | |||
50 | /** DOCUMENT ME! */
|
||
51 | public static final int ZOOM_MENOS = 2; |
||
52 | |||
53 | /** DOCUMENT ME! */
|
||
54 | public static final int PAN = 3; |
||
55 | |||
56 | /** DOCUMENT ME! */
|
||
57 | public static final int INFO = 4; |
||
58 | |||
59 | /** DOCUMENT ME! */
|
||
60 | public static final int DESACTUALIZADO = 5; |
||
61 | |||
62 | /** DOCUMENT ME! */
|
||
63 | public static final int ACTUALIZADO = 6; |
||
64 | |||
65 | /** DOCUMENT ME! */
|
||
66 | public static final int MEDICION = 7; |
||
67 | |||
68 | /** DOCUMENT ME! */
|
||
69 | public static final int AREA = 8; |
||
70 | |||
71 | /** DOCUMENT ME! */
|
||
72 | public static final int LINK = 9; |
||
73 | |||
74 | /** DOCUMENT ME! */
|
||
75 | public static final int SELRECT = 10; |
||
76 | |||
77 | /** DOCUMENT ME! */
|
||
78 | public static final int SELPOINT = 11; |
||
79 | |||
80 | public static final int USERDEFINED = 12; |
||
81 | |||
82 | /**
|
||
83 | * Indica el estado del control para, por ejemplo, distinguir los casos en
|
||
84 | * los que hay que obtener la imagen nuevamente de los que solo hay que
|
||
85 | * dibujar la ultima imagen obtenida
|
||
86 | */
|
||
87 | public int status = DESACTUALIZADO; |
||
88 | |||
89 | /**
|
||
90 | * <code>m_coordsListeners</code> guarda los objetos que se registran para
|
||
91 | * los cambios de coordenadas.
|
||
92 | */
|
||
93 | private ArrayList m_coordsListeners = new ArrayList(); |
||
94 | |||
95 | /** Mapa */
|
||
96 | private FMap mapContext;
|
||
97 | |||
98 | /** Herramienta seleccionada */
|
||
99 | private int m_Tool; |
||
100 | private Point m_PointAnt; |
||
101 | private Point m_FirstPoint; |
||
102 | private Point m_LastPoint; |
||
103 | private Point m_medidaLast; |
||
104 | private Point m_medidaIni = null; |
||
105 | private Point m_medidaFin; |
||
106 | private double distAll = 0; |
||
107 | private double dist = 0; |
||
108 | private boolean isClicked = false; |
||
109 | |||
110 | private ArrayList poliLinesX = new ArrayList(); |
||
111 | private ArrayList poliLinesY = new ArrayList(); |
||
112 | private final Image ipan = new ImageIcon(MapControl.class.getResource( |
||
113 | "images/Hand.gif")).getImage();
|
||
114 | private final Image izoomout = new ImageIcon(MapControl.class.getResource( |
||
115 | "images/MagnifyCursor.gif")).getImage();
|
||
116 | private final Image iinfo = new ImageIcon(MapControl.class.getResource( |
||
117 | "images/InfoCursor.gif")).getImage();
|
||
118 | private final Image imedi = new ImageIcon(MapControl.class.getResource( |
||
119 | "images/RulerCursor.gif")).getImage();
|
||
120 | private final Image iselRect = new ImageIcon(MapControl.class.getResource( |
||
121 | "images/CruxCursor.png")).getImage();
|
||
122 | private final Image iselPoint = new ImageIcon(MapControl.class.getResource( |
||
123 | "images/CruxCursor.png")).getImage();
|
||
124 | private BufferedImage img; |
||
125 | private Image imgPan; |
||
126 | private Timer timer; |
||
127 | private EventsHandler events;
|
||
128 | |||
129 | private MapTool currentTool = null; |
||
130 | |||
131 | /**
|
||
132 | * Creates a new MapControl object.
|
||
133 | */
|
||
134 | public MapControl() {
|
||
135 | setDoubleBuffered(false);
|
||
136 | |||
137 | m_PointAnt = new Point(); |
||
138 | m_FirstPoint = new Point(); |
||
139 | |||
140 | events = new EventsHandler();
|
||
141 | timer = new Timer(500, events); |
||
142 | addComponentListener(events); |
||
143 | |||
144 | setBackground(Color.WHITE);
|
||
145 | } |
||
146 | |||
147 | /**
|
||
148 | * DOCUMENT ME!
|
||
149 | *
|
||
150 | * @param model DOCUMENT ME!
|
||
151 | */
|
||
152 | public void setModel(FMap model) { |
||
153 | mapContext = model; |
||
154 | } |
||
155 | |||
156 | /**
|
||
157 | * Activa una herramienta (tool).
|
||
158 | *
|
||
159 | * @param tool
|
||
160 | */
|
||
161 | public void setMapTool(MapTool tool) { |
||
162 | if (tool != null) { |
||
163 | setTool(USERDEFINED); |
||
164 | if (tool.getCursor() != null) |
||
165 | setCursor(tool.getCursor()); |
||
166 | } else {
|
||
167 | |||
168 | } |
||
169 | currentTool = tool; |
||
170 | } |
||
171 | |||
172 | /**
|
||
173 | * Cancelar el dibujado.
|
||
174 | */
|
||
175 | public void cancelDrawing() { |
||
176 | 214 | fernando | //TODO Implementar el cancelado bien
|
177 | 213 | fernando | } |
178 | 214 | fernando | |
179 | 213 | fernando | /**
|
180 | * @see javax.swing.JComponent#paintComponent(java.awt.Graphics)
|
||
181 | */
|
||
182 | protected void paintComponent(Graphics g) { |
||
183 | // logger.debug("pintando");
|
||
184 | switch (status) {
|
||
185 | case ZOOM_MAS:
|
||
186 | logger.debug("zoom mas");
|
||
187 | |||
188 | // g.setColor(Color.WHITE);
|
||
189 | // g.fillRect(0, 0, getWidth(), getHeight());
|
||
190 | g.drawImage(img, 0, 0, this); |
||
191 | |||
192 | g.setColor(Color.black);
|
||
193 | g.setXORMode(Color.white);
|
||
194 | |||
195 | // Borramos el anterior
|
||
196 | Rectangle r = new Rectangle(); |
||
197 | |||
198 | /* r.setFrameFromDiagonal(m_FirstPoint, m_PointAnt);
|
||
199 | g.drawRect(r.x, r.y, r.width, r.height); */
|
||
200 | |||
201 | // Dibujamos el actual
|
||
202 | if ((m_FirstPoint != null) && (m_LastPoint != null)) { |
||
203 | r.setFrameFromDiagonal(m_FirstPoint, m_LastPoint); |
||
204 | g.drawRect(r.x, r.y, r.width, r.height); |
||
205 | } |
||
206 | |||
207 | break;
|
||
208 | |||
209 | case PAN:
|
||
210 | logger.debug("pan");
|
||
211 | //setBackground(Color.white);
|
||
212 | g.setColor(Color.white);
|
||
213 | g.fillRect(0,0,getWidth(),getHeight()); |
||
214 | if (imgPan != null) { |
||
215 | // g.clearRect(0, 0, getWidth(), getHeight());
|
||
216 | g.drawImage(imgPan, m_LastPoint.x - m_PointAnt.x, |
||
217 | m_LastPoint.y - m_PointAnt.y, this);
|
||
218 | } |
||
219 | |||
220 | break;
|
||
221 | |||
222 | case DESACTUALIZADO:
|
||
223 | logger.debug("getWidth = " + getWidth() + " getHeight = " + |
||
224 | getHeight()); |
||
225 | if (App.instance != null){ |
||
226 | App.instance.getMDIContext().setMessage("1",Utilities.getMessage(this,"unidades")+" "+FConstant.NAMES[getMapContext().getDistanceUnits()]); |
||
227 | App.instance.getMDIContext().setMessage("5",Utilities.getMessage(this, "escala") + " 1:" +getScaleView()); |
||
228 | } |
||
229 | img = new BufferedImage(getWidth(), getHeight(), |
||
230 | BufferedImage.TYPE_INT_ARGB);
|
||
231 | img.getGraphics().setColor(Color.WHITE);
|
||
232 | img.getGraphics().fillRect(0, 0, getWidth(), getHeight()); |
||
233 | |||
234 | logger.debug("desactualizado " + img);
|
||
235 | |||
236 | if (img == null) { |
||
237 | return;
|
||
238 | } |
||
239 | |||
240 | timer.start(); |
||
241 | |||
242 | mapContext.drawImage(new ActionListener() { |
||
243 | public void actionPerformed(ActionEvent arg0) { |
||
244 | timer.stop(); |
||
245 | imgPan = createImage(getWidth(), getHeight()); |
||
246 | imgPan.getGraphics().setColor(Color.WHITE);
|
||
247 | imgPan.getGraphics().fillRect(0, 0, getWidth(), |
||
248 | getHeight()); |
||
249 | |||
250 | imgPan.getGraphics().drawImage(img, 0, 0, null); |
||
251 | repaint(); |
||
252 | } |
||
253 | }, img.getGraphics(), 0, 0, getWidth(), getHeight(), img); |
||
254 | |||
255 | // mapContext.drawImage(img.getGraphics(),0,0,getWidth(), getHeight(), img);
|
||
256 | g.drawImage(img, 0, 0, this); |
||
257 | |||
258 | |||
259 | status = ACTUALIZADO; |
||
260 | |||
261 | break;
|
||
262 | |||
263 | case MEDICION:
|
||
264 | logger.debug("medici?n");
|
||
265 | |||
266 | // g.setColor(Color.WHITE);
|
||
267 | // g.fillRect(0, 0, getWidth(), getHeight());
|
||
268 | g.drawImage(img, 0, 0, this); |
||
269 | g.setColor(Color.black);
|
||
270 | |||
271 | if (m_medidaFin != null) { |
||
272 | drawPoliLine((Graphics2D) g);
|
||
273 | } |
||
274 | |||
275 | if ((m_medidaFin != null) && (m_medidaLast != null)) { |
||
276 | g.drawLine(m_medidaFin.x, m_medidaFin.y, m_medidaLast.x, |
||
277 | m_medidaLast.y); |
||
278 | } else {
|
||
279 | distAll = 0;
|
||
280 | } |
||
281 | |||
282 | break;
|
||
283 | |||
284 | case AREA:
|
||
285 | logger.debug("area");
|
||
286 | // g.setColor(Color.WHITE);
|
||
287 | // g.fillRect(0, 0, getWidth(), getHeight());
|
||
288 | g.drawImage(img, 0, 0, this); |
||
289 | g.setColor(Color.black);
|
||
290 | |||
291 | if (m_medidaFin != null) { |
||
292 | drawPoliLine((Graphics2D) g);
|
||
293 | } |
||
294 | |||
295 | if ((m_medidaFin != null) && (m_medidaLast != null) && |
||
296 | (m_medidaIni != null)) {
|
||
297 | g.drawLine(m_medidaFin.x, m_medidaFin.y, m_medidaLast.x, |
||
298 | m_medidaLast.y); |
||
299 | g.drawLine(m_medidaIni.x, m_medidaIni.y, m_medidaLast.x, |
||
300 | m_medidaLast.y); |
||
301 | } else {
|
||
302 | distAll = 0;
|
||
303 | } |
||
304 | |||
305 | break;
|
||
306 | |||
307 | case ACTUALIZADO:
|
||
308 | logger.debug("actualizado");
|
||
309 | |||
310 | // logger.debug("pintando en la imagen " + img);
|
||
311 | //Se dibuja la ?ltima imagen obtenida
|
||
312 | if (img != null) { |
||
313 | //g.setColor(Color.WHITE);
|
||
314 | //g.fillRect(0, 0, getWidth(), getHeight());
|
||
315 | g.drawImage(img, 0, 0, this); |
||
316 | } else {
|
||
317 | logger.debug("Pinto blanco");
|
||
318 | g.setColor(Color.WHITE);
|
||
319 | g.fillRect(0, 0, getWidth(), getHeight()); |
||
320 | } |
||
321 | break;
|
||
322 | case USERDEFINED:
|
||
323 | currentTool.paintComponent(g); |
||
324 | } |
||
325 | } |
||
326 | |||
327 | /**
|
||
328 | * DOCUMENT ME!
|
||
329 | *
|
||
330 | * @param p DOCUMENT ME!
|
||
331 | */
|
||
332 | private void addPoint(Point p) { |
||
333 | poliLinesX.add(new Float(p.x)); |
||
334 | poliLinesY.add(new Float(p.y)); |
||
335 | } |
||
336 | |||
337 | /**
|
||
338 | * DOCUMENT ME!
|
||
339 | *
|
||
340 | * @param aux DOCUMENT ME!
|
||
341 | *
|
||
342 | * @return DOCUMENT ME!
|
||
343 | */
|
||
344 | private double returnArea(Point2D.Double aux) { |
||
345 | double elArea;
|
||
346 | int pos;
|
||
347 | Point2D pPixel;
|
||
348 | Point2D.Double p = new Point2D.Double(); |
||
349 | Point2D.Double pAnt = new Point2D.Double(); |
||
350 | long i;
|
||
351 | |||
352 | // double baseMayor, baseMenor, altura; // De cada trapezoide
|
||
353 | // El area de cada pareja de puntos ser? (x2-x1) * baseMenor + (baseMayor-baseMenor)*(x2-x1)
|
||
354 | // Simplificando la ecuaci?n queda: (x2-x1)*((baseMayor+baseMenor)/2). Es decir, que da igual
|
||
355 | // qui?n es la base mayor y quien la manor.
|
||
356 | // si la coordenada X del punto i+1 es mayor que la del punto i => Area negativa
|
||
357 | // si no => Area positiva
|
||
358 | if (poliLinesX.size() < 2) { |
||
359 | return 0.0; |
||
360 | } |
||
361 | |||
362 | i = 0;
|
||
363 | elArea = 0.0;
|
||
364 | |||
365 | for (pos = 0; pos < poliLinesX.size(); i++) { |
||
366 | pPixel = new Point2D.Float(((Float) poliLinesX.get(pos)).floatValue(), |
||
367 | ((Float) poliLinesY.get(pos)).floatValue());
|
||
368 | p = getMapContext().toMapPoint(pPixel); |
||
369 | |||
370 | // p.x = getMapContext().toMapDistance((long)((Float) poliLinesX.get(pos)).floatValue());
|
||
371 | System.out.println("p.x = " + p.x); |
||
372 | |||
373 | // p.y = getMapContext().toMapDistance((long)((Float) poliLinesY.get(pos)).floatValue());
|
||
374 | System.out.println("p.y = " + p.y); |
||
375 | pos++; |
||
376 | |||
377 | if (i == 0) { |
||
378 | pAnt.x = aux.x; |
||
379 | pAnt.y = aux.y; |
||
380 | } |
||
381 | |||
382 | elArea = elArea + ((pAnt.x - p.x) * (pAnt.y + p.y)); |
||
383 | pAnt = p; |
||
384 | } |
||
385 | |||
386 | elArea = elArea + ((pAnt.x - aux.x) * (pAnt.y + aux.y)); |
||
387 | elArea = Math.abs(elArea / 2.0); |
||
388 | |||
389 | return elArea;
|
||
390 | } |
||
391 | |||
392 | /**
|
||
393 | * DOCUMENT ME!
|
||
394 | *
|
||
395 | * @return
|
||
396 | */
|
||
397 | public FMap getMapContext() {
|
||
398 | return mapContext;
|
||
399 | } |
||
400 | |||
401 | /**
|
||
402 | * DOCUMENT ME!
|
||
403 | *
|
||
404 | * @return
|
||
405 | */
|
||
406 | public BufferedImage getImage() { |
||
407 | return img;
|
||
408 | } |
||
409 | |||
410 | /**
|
||
411 | * DOCUMENT ME!
|
||
412 | */
|
||
413 | public void drawMap() { |
||
414 | status = DESACTUALIZADO; |
||
415 | repaint(); |
||
416 | } |
||
417 | |||
418 | /**
|
||
419 | * DOCUMENT ME!
|
||
420 | *
|
||
421 | * @return
|
||
422 | */
|
||
423 | public int getTool() { |
||
424 | 230 | fernando | return tool;
|
425 | 213 | fernando | } |
426 | |||
427 | /**
|
||
428 | * DOCUMENT ME!
|
||
429 | *
|
||
430 | * @param i
|
||
431 | */
|
||
432 | public void setTool(int i) { |
||
433 | m_Tool = i; |
||
434 | |||
435 | if (getTool() == PAN) {
|
||
436 | setMapCursor(ipan); |
||
437 | } else if (getTool() == ZOOM_MAS) { |
||
438 | setMapCursor(izoomin); |
||
439 | } else if (getTool() == ZOOM_MENOS) { |
||
440 | setMapCursor(izoomout); |
||
441 | } else if (getTool() == INFO) { |
||
442 | setMapCursor(iinfo); |
||
443 | } else if (getTool() == MEDICION) { |
||
444 | setMapCursor(imedi); |
||
445 | } else if (getTool() == AREA) { |
||
446 | setMapCursor(imedi); |
||
447 | } else if (getTool() == LINK) { |
||
448 | setMapCursor(iinfo); |
||
449 | } else if (getTool() == SELRECT) { |
||
450 | setMapCursor(iselRect); |
||
451 | } else if (getTool() == SELPOINT) { |
||
452 | setMapCursor(iselPoint); |
||
453 | } |
||
454 | setMapTool(null);
|
||
455 | } |
||
456 | |||
457 | /**
|
||
458 | * DOCUMENT ME!
|
||
459 | */
|
||
460 | public void drawLine() { |
||
461 | this.getGraphics().drawLine(m_FirstPoint.x, m_FirstPoint.y,
|
||
462 | m_LastPoint.x, m_LastPoint.y); |
||
463 | } |
||
464 | |||
465 | /**
|
||
466 | * DOCUMENT ME!
|
||
467 | *
|
||
468 | * @param arg0 DOCUMENT ME!
|
||
469 | *
|
||
470 | * @return DOCUMENT ME!
|
||
471 | */
|
||
472 | public boolean addCoordsListener(ICoordsListener arg0) { |
||
473 | return m_coordsListeners.add(arg0);
|
||
474 | } |
||
475 | |||
476 | /**
|
||
477 | * DOCUMENT ME!
|
||
478 | *
|
||
479 | * @param x DOCUMENT ME!
|
||
480 | * @param y DOCUMENT ME!
|
||
481 | */
|
||
482 | private void callCoordsListeners(double x, double y) { |
||
483 | for (int i = 0; i < m_coordsListeners.size(); i++) { |
||
484 | ICoordsListener listener = (ICoordsListener) m_coordsListeners.get(i); |
||
485 | listener.coordsChanged(x, y); |
||
486 | } |
||
487 | } |
||
488 | |||
489 | /**
|
||
490 | * DOCUMENT ME!
|
||
491 | *
|
||
492 | * @author Fernando Gonz?lez Cort?s
|
||
493 | */
|
||
494 | class EventsHandler implements ActionListener, ComponentListener, |
||
495 | MouseMotionListener, MouseListener { |
||
496 | /**
|
||
497 | * @see java.awt.event.ComponentListener#componentHidden(java.awt.event.ComponentEvent)
|
||
498 | */
|
||
499 | public void componentHidden(ComponentEvent arg0) { |
||
500 | System.err.println("componentHidden"); |
||
501 | } |
||
502 | |||
503 | /**
|
||
504 | * @see java.awt.event.ComponentListener#componentMoved(java.awt.event.ComponentEvent)
|
||
505 | */
|
||
506 | public void componentMoved(ComponentEvent arg0) { |
||
507 | } |
||
508 | |||
509 | /**
|
||
510 | * @see java.awt.event.ComponentListener#componentResized(java.awt.event.ComponentEvent)
|
||
511 | */
|
||
512 | public void componentResized(ComponentEvent arg0) { |
||
513 | status = DESACTUALIZADO; |
||
514 | |||
515 | // System.err.println("componentResized");
|
||
516 | repaint(); |
||
517 | } |
||
518 | |||
519 | /**
|
||
520 | * @see java.awt.event.ComponentListener#componentShown(java.awt.event.ComponentEvent)
|
||
521 | */
|
||
522 | public void componentShown(ComponentEvent arg0) { |
||
523 | System.err.println("componentShown"); |
||
524 | } |
||
525 | |||
526 | /**
|
||
527 | * @see java.awt.event.ActionListener#actionPerformed(java.awt.event.ActionEvent)
|
||
528 | */
|
||
529 | public void actionPerformed(ActionEvent arg0) { |
||
530 | // System.err.println("actionPerformed");
|
||
531 | repaint(); |
||
532 | } |
||
533 | |||
534 | /**
|
||
535 | * @see java.awt.event.MouseMotionListener#mouseDragged(java.awt.event.MouseEvent)
|
||
536 | */
|
||
537 | public void mouseDragged(MouseEvent e) { |
||
538 | m_LastPoint = e.getPoint(); |
||
539 | repaint(); |
||
540 | } |
||
541 | |||
542 | /**
|
||
543 | * @see java.awt.event.MouseMotionListener#mouseMoved(java.awt.event.MouseEvent)
|
||
544 | */
|
||
545 | public void mouseMoved(MouseEvent E) { |
||
546 | Point2D.Double p = getMapContext().toMapPoint(E.getX(), E.getY());
|
||
547 | NumberFormat nf = NumberFormat.getInstance(); |
||
548 | nf.setMaximumFractionDigits(2);
|
||
549 | p.x = changeToUnits(p.x); |
||
550 | p.y = changeToUnits(p.y); |
||
551 | callCoordsListeners(p.getX(), p.getY()); |
||
552 | |||
553 | if (App.instance != null) { |
||
554 | App.instance.getMDIContext().setMessage("2",
|
||
555 | "X= " + nf.format(p.x) + " Y= " + nf.format(p.y)); |
||
556 | } |
||
557 | |||
558 | if (isClicked) {
|
||
559 | if ((getTool() == MEDICION) || (getTool() == AREA)) {
|
||
560 | m_medidaLast = E.getPoint(); |
||
561 | |||
562 | if (m_medidaFin != null) { |
||
563 | dist = getMapContext().toMapDistance((long) m_medidaFin.distance(
|
||
564 | m_medidaLast)); |
||
565 | |||
566 | /* try {
|
||
567 | App.instance.getMDIContext().setMessage("Longitud:Segmento",
|
||
568 | "Segmento = " + dist);
|
||
569 | } catch (Exception e) {
|
||
570 | }
|
||
571 | System.out.println("Longitud del segmento = " + (dist));
|
||
572 | */
|
||
573 | } |
||
574 | |||
575 | if (getTool() == MEDICION) {
|
||
576 | try {
|
||
577 | App.instance.getMDIContext().setMessage("3",
|
||
578 | "Segmento = " + nf.format(changeToUnits(dist)));
|
||
579 | App.instance.getMDIContext().setMessage("4",
|
||
580 | "Total = " +
|
||
581 | nf.format(changeToUnits(distAll + dist))); |
||
582 | } catch (Exception e) { |
||
583 | } |
||
584 | |||
585 | // System.out.println("Longitud Total = " + (distAll + dist));
|
||
586 | } |
||
587 | |||
588 | if (getTool() == AREA) {
|
||
589 | if ((m_medidaLast != null) && (m_medidaIni != null)) { |
||
590 | try {
|
||
591 | App.instance.getMDIContext().setMessage("3",
|
||
592 | "Per?metro = " +
|
||
593 | nf.format(changeToUnits(distAll + dist + |
||
594 | m_medidaIni.distance(m_medidaLast)))); |
||
595 | App.instance.getMDIContext().setMessage("4",
|
||
596 | "Area = " +
|
||
597 | nf.format(changeToUnits(returnArea( |
||
598 | getMapContext().toMapPoint(m_medidaLast))))); |
||
599 | } catch (Exception e) { |
||
600 | } |
||
601 | |||
602 | /* System.out.println("Per?metro = " +
|
||
603 | (distAll + dist +
|
||
604 | (int) m_medidaIni.distance(m_medidaLast)));
|
||
605 | */
|
||
606 | } |
||
607 | |||
608 | /* System.out.println("Area = " +
|
||
609 | ReturnArea(getMapContext().toMapPoint(m_medidaLast)));
|
||
610 | */
|
||
611 | } |
||
612 | |||
613 | repaint(); |
||
614 | } |
||
615 | } else {
|
||
616 | try {
|
||
617 | App.instance.getMDIContext().setMessage("3",
|
||
618 | "");
|
||
619 | App.instance.getMDIContext().setMessage("4", ""); |
||
620 | } catch (Exception e) { |
||
621 | } |
||
622 | } |
||
623 | } |
||
624 | |||
625 | /**
|
||
626 | * @see java.awt.event.MouseListener#mouseClicked(java.awt.event.MouseEvent)
|
||
627 | */
|
||
628 | public void mouseClicked(MouseEvent E) { |
||
629 | if (E.getClickCount() == 2) { |
||
630 | if ((getTool() == MEDICION) || (getTool() == AREA)) {
|
||
631 | poliLinesX.clear(); |
||
632 | poliLinesY.clear(); |
||
633 | m_medidaIni = null;
|
||
634 | m_medidaFin = null;
|
||
635 | m_medidaLast = null;
|
||
636 | distAll = 0;
|
||
637 | status = ACTUALIZADO; |
||
638 | isClicked = false;
|
||
639 | } |
||
640 | } else {
|
||
641 | if ((getTool() == MEDICION) || (getTool() == AREA)) {
|
||
642 | if (m_medidaIni == null) { |
||
643 | m_medidaIni = E.getPoint(); |
||
644 | |||
645 | //addPoint(m_medidaIni);
|
||
646 | } |
||
647 | |||
648 | isClicked = true;
|
||
649 | distAll = distAll + dist; |
||
650 | |||
651 | //status = MEDICION;
|
||
652 | m_medidaFin = E.getPoint(); |
||
653 | addPoint(m_medidaFin); |
||
654 | } |
||
655 | } |
||
656 | } |
||
657 | |||
658 | /**
|
||
659 | * @see java.awt.event.MouseListener#mouseEntered(java.awt.event.MouseEvent)
|
||
660 | */
|
||
661 | public void mouseEntered(MouseEvent arg0) { |
||
662 | //if (App.instance != null)
|
||
663 | // App.instance.getMDIContext().setMessage("Unidades",NAMES[getMapContext().getDistanceUnits()]);
|
||
664 | } |
||
665 | |||
666 | /**
|
||
667 | * @see java.awt.event.MouseListener#mouseExited(java.awt.event.MouseEvent)
|
||
668 | */
|
||
669 | public void mouseExited(MouseEvent arg0) { |
||
670 | if (App.instance != null) { |
||
671 | App.instance.getMDIContext().setMessage("2", ""); |
||
672 | App.instance.getMDIContext().setMessage("3", ""); |
||
673 | App.instance.getMDIContext().setMessage("4", ""); |
||
674 | } |
||
675 | } |
||
676 | |||
677 | /**
|
||
678 | * @see java.awt.event.MouseListener#mousePressed(java.awt.event.MouseEvent)
|
||
679 | */
|
||
680 | public void mousePressed(MouseEvent E) { |
||
681 | if (getTool() == MEDICION) {
|
||
682 | status = MEDICION; |
||
683 | } |
||
684 | |||
685 | if (getTool() == AREA) {
|
||
686 | status = AREA; |
||
687 | } |
||
688 | |||
689 | if (getTool() == SELRECT) {
|
||
690 | status = ZOOM_MAS; |
||
691 | } |
||
692 | |||
693 | if (getTool() == SELPOINT) {
|
||
694 | status = ACTUALIZADO; |
||
695 | } |
||
696 | |||
697 | if (getTool() == ZOOM_MAS) {
|
||
698 | status = ZOOM_MAS; |
||
699 | } |
||
700 | |||
701 | /* if (getTool() == MEDICION) {
|
||
702 | status = MEDICION;
|
||
703 | m_medidaFin=E.getPoint();
|
||
704 | //if (m_medidaIni==null)m_medidaIni=m_medidaFin;
|
||
705 | //getGraphics().drawLine(m_medidaIni.x,m_medidaIni.y,m_medidaFin.x,m_medidaFin.y);
|
||
706 | //m_medidaFirst=m_medidaIni;
|
||
707 | //m_medidaIni=E.getPoint();
|
||
708 | }
|
||
709 | */
|
||
710 | if (getTool() == PAN) {
|
||
711 | status = PAN; |
||
712 | } |
||
713 | |||
714 | Point pScreen = new Point(E.getX(), E.getY()); |
||
715 | |||
716 | if (E.getButton() == MouseEvent.BUTTON1) { |
||
717 | m_PointAnt = pScreen; |
||
718 | |||
719 | /* if (E.isControlDown())
|
||
720 | m_Estado = PAN; */
|
||
721 | m_FirstPoint = m_PointAnt; |
||
722 | |||
723 | if (getTool() == ZOOM_MENOS) {
|
||
724 | mapContext.setCancelDrawing(true);
|
||
725 | } |
||
726 | |||
727 | if ((getTool() == ZOOM_MAS) || (getTool() == PAN)) {
|
||
728 | mapContext.setCancelDrawing(true);
|
||
729 | } |
||
730 | } |
||
731 | |||
732 | if (E.getButton() == MouseEvent.BUTTON3) { |
||
733 | mapContext.setCancelDrawing(true);
|
||
734 | } |
||
735 | if ((getTool() == USERDEFINED)) {
|
||
736 | //Point2D.Double ptrans = new Point2D.Double();
|
||
737 | try {
|
||
738 | //vp.mat.inverseTransform(e.getPoint(), ptrans);
|
||
739 | pScreen = new Point(E.getX(), E.getY()); |
||
740 | Point2D.Double ptrans = mapContext.toMapPoint(pScreen);
|
||
741 | currentTool.cmd(ptrans, E.getButton(), PRESS); |
||
742 | //repaint();
|
||
743 | } catch (Exception except) { |
||
744 | except.printStackTrace(); |
||
745 | }; |
||
746 | } |
||
747 | } |
||
748 | |||
749 | /**
|
||
750 | * DOCUMENT ME!
|
||
751 | *
|
||
752 | * @param E DOCUMENT ME!
|
||
753 | */
|
||
754 | public void mouseReleased(MouseEvent E) { |
||
755 | Point2D.Double p1;
|
||
756 | Point2D.Double p2;
|
||
757 | Point pScreen = new Point(E.getX(), E.getY()); |
||
758 | |||
759 | p1 = mapContext.toMapPoint(m_FirstPoint); |
||
760 | p2 = mapContext.toMapPoint(pScreen); |
||
761 | |||
762 | // Borramos el anterior
|
||
763 | if ((getTool() == ZOOM_MAS) &&
|
||
764 | (E.getButton() == MouseEvent.BUTTON1)) {
|
||
765 | status = DESACTUALIZADO; |
||
766 | |||
767 | if (java.lang.Math.abs(m_FirstPoint.x - pScreen.x) <= 3) { |
||
768 | double nuevoX;
|
||
769 | double nuevoY;
|
||
770 | double cX;
|
||
771 | double cY;
|
||
772 | |||
773 | cX = p2.getX(); |
||
774 | cY = p2.getY(); |
||
775 | |||
776 | double factor = 0.6; |
||
777 | Rectangle2D.Double r = new Rectangle2D.Double(); |
||
778 | |||
779 | nuevoX = cX - |
||
780 | ((mapContext.getExtent().width * factor) / 2.0);
|
||
781 | nuevoY = cY - |
||
782 | ((mapContext.getExtent().height * factor) / 2.0);
|
||
783 | r.x = nuevoX; |
||
784 | r.y = nuevoY; |
||
785 | r.width = mapContext.getExtent().width * factor; |
||
786 | r.height = mapContext.getExtent().height * factor; |
||
787 | |||
788 | mapContext.setExtent(r); |
||
789 | } else {
|
||
790 | // Fijamos el nuevo extent
|
||
791 | Rectangle2D.Double r = new Rectangle2D.Double(); |
||
792 | |||
793 | r.setFrameFromDiagonal(p1, p2); |
||
794 | |||
795 | mapContext.setExtent(r); |
||
796 | } |
||
797 | |||
798 | // Fin del else
|
||
799 | } |
||
800 | |||
801 | if (getTool() == PAN) {
|
||
802 | status = DESACTUALIZADO; |
||
803 | |||
804 | Rectangle2D.Double r = new Rectangle2D.Double(); |
||
805 | Rectangle2D.Double extent = mapContext.getExtent();
|
||
806 | |||
807 | r.x = extent.x - (p2.x - p1.x); |
||
808 | r.y = extent.y - (p2.y - p1.y); |
||
809 | r.width = extent.width; |
||
810 | r.height = extent.height; |
||
811 | |||
812 | mapContext.setExtent(r); |
||
813 | } |
||
814 | |||
815 | mapContext.setCancelDrawing(false);
|
||
816 | |||
817 | if ((getTool() == ZOOM_MENOS) ||
|
||
818 | (E.getButton() == MouseEvent.BUTTON3)) {
|
||
819 | status = DESACTUALIZADO; |
||
820 | |||
821 | Point2D.Double pWorld;
|
||
822 | |||
823 | double nuevoX;
|
||
824 | double nuevoY;
|
||
825 | double cX;
|
||
826 | double cY;
|
||
827 | pScreen = new Point(E.getX(), E.getY()); |
||
828 | pWorld = mapContext.toMapPoint(pScreen); |
||
829 | |||
830 | cX = pWorld.getX(); |
||
831 | cY = pWorld.getY(); |
||
832 | |||
833 | double factor = 1.8; |
||
834 | Rectangle2D.Double r = new Rectangle2D.Double(); |
||
835 | |||
836 | nuevoX = cX - ((mapContext.getExtent().width * factor) / 2.0);
|
||
837 | nuevoY = cY - ((mapContext.getExtent().height * factor) / 2.0);
|
||
838 | r.x = nuevoX; |
||
839 | r.y = nuevoY; |
||
840 | r.width = mapContext.getExtent().width * factor; |
||
841 | r.height = mapContext.getExtent().height * factor; |
||
842 | |||
843 | mapContext.setExtent(r); |
||
844 | mapContext.setCancelDrawing(false);
|
||
845 | } |
||
846 | |||
847 | if (getTool() == SELRECT) {
|
||
848 | Rectangle2D.Double r = new Rectangle2D.Double(); |
||
849 | |||
850 | r.setFrameFromDiagonal(p1, p2); |
||
851 | |||
852 | mapContext.selectByRect(r); |
||
853 | status = DESACTUALIZADO; |
||
854 | |||
855 | if (table != null) { |
||
856 | table.repaint(); |
||
857 | } |
||
858 | } |
||
859 | |||
860 | if (getTool() == SELPOINT) {
|
||
861 | mapContext.selectByPoint(p2); |
||
862 | status = DESACTUALIZADO; |
||
863 | |||
864 | if (table != null) { |
||
865 | table.repaint(); |
||
866 | } |
||
867 | } |
||
868 | |||
869 | repaint(); |
||
870 | |||
871 | try {
|
||
872 | App.instance.getMDIContext().enableControls(); |
||
873 | } catch (Exception e) { |
||
874 | } |
||
875 | } |
||
876 | } |
||
877 | } |