svn-gvsig-desktop / trunk / libraries / libFMap / src / com / iver / cit / gvsig / fmap / tools / MapTools / MeasureMapTool.java @ 292
History | View | Annotate | Download (3.16 KB)
1 |
package com.iver.cit.gvsig.fmap.tools.MapTools; |
---|---|
2 |
|
3 |
import java.awt.Color; |
4 |
import java.awt.Graphics; |
5 |
import java.awt.Graphics2D; |
6 |
import java.awt.Point; |
7 |
import java.awt.event.MouseEvent; |
8 |
import java.util.ArrayList; |
9 |
|
10 |
import com.iver.cit.gvsig.fmap.core.GeneralPathX; |
11 |
import com.iver.cit.gvsig.fmap.tools.Events.MeasureEvent; |
12 |
import com.iver.cit.gvsig.fmap.tools.Listeners.MeasureListener; |
13 |
import com.iver.cit.gvsig.fmap.tools.Listeners.ToolListener; |
14 |
|
15 |
|
16 |
/**
|
17 |
* Medici?n de distancias.
|
18 |
*
|
19 |
* @author Vicente Caballero Navarro
|
20 |
*/
|
21 |
public class MeasureMapTool extends MapTool { |
22 |
protected ArrayList arrayX = new ArrayList(); |
23 |
protected ArrayList arrayY = new ArrayList(); |
24 |
protected boolean isClicked = false; |
25 |
protected MeasureListener listener;
|
26 |
|
27 |
/**
|
28 |
* @see com.iver.cit.gvsig.fmap.tools.MapTools.MapTool#paintComponent(java.awt.Graphics)
|
29 |
*/
|
30 |
public void paintComponent(Graphics g) { |
31 |
g.drawImage(getMapControl().getImage(), 0, 0, null); |
32 |
g.setColor(Color.black);
|
33 |
|
34 |
if (!arrayX.isEmpty()) {
|
35 |
drawPolyLine((Graphics2D) g);
|
36 |
} |
37 |
} |
38 |
|
39 |
|
40 |
|
41 |
/**
|
42 |
* DOCUMENT ME!
|
43 |
*
|
44 |
* @param E DOCUMENT ME!
|
45 |
*/
|
46 |
public void mouseClicked(MouseEvent E) { |
47 |
if (E.getClickCount() == 2) { |
48 |
arrayX.clear(); |
49 |
arrayY.clear(); |
50 |
isClicked = false;
|
51 |
} else {
|
52 |
isClicked = true;
|
53 |
addPoint(E.getPoint()); |
54 |
|
55 |
if (arrayX.size() < 2) { |
56 |
addPoint(E.getPoint()); |
57 |
} |
58 |
} |
59 |
} |
60 |
|
61 |
/**
|
62 |
* DOCUMENT ME!
|
63 |
*
|
64 |
* @param p DOCUMENT ME!
|
65 |
*/
|
66 |
protected void changeLastPoint(Point p) { |
67 |
arrayX.set(arrayX.size() - 1, new Double(p.getX())); |
68 |
arrayY.set(arrayY.size() - 1, new Double(p.getY())); |
69 |
} |
70 |
|
71 |
/**
|
72 |
* DOCUMENT ME!
|
73 |
*
|
74 |
* @param E DOCUMENT ME!
|
75 |
*/
|
76 |
public void mouseMoved(MouseEvent E) { |
77 |
if (isClicked) {
|
78 |
changeLastPoint(E.getPoint()); |
79 |
|
80 |
MeasureEvent event = new MeasureEvent((Double[]) arrayX.toArray( |
81 |
new Double[0]), (Double[]) arrayX.toArray(new Double[0])); |
82 |
listener.points(event); |
83 |
getMapControl().repaint(); |
84 |
} |
85 |
} |
86 |
|
87 |
/**
|
88 |
* DOCUMENT ME!
|
89 |
*
|
90 |
* @param g2 DOCUMENT ME!
|
91 |
*/
|
92 |
protected void drawPolyLine(Graphics2D g2) { |
93 |
GeneralPathX polyline = new GeneralPathX(GeneralPathX.WIND_EVEN_ODD,
|
94 |
arrayX.size()); |
95 |
|
96 |
polyline.moveTo(((Double) arrayX.get(0)).doubleValue(), |
97 |
((Double) arrayY.get(0)).doubleValue()); |
98 |
|
99 |
for (int index = 1; index < arrayX.size(); index++) { |
100 |
polyline.lineTo(((Double) arrayX.get(index)).doubleValue(),
|
101 |
((Double) arrayY.get(index)).doubleValue());
|
102 |
} |
103 |
|
104 |
g2.draw(polyline); |
105 |
} |
106 |
|
107 |
/**
|
108 |
* DOCUMENT ME!
|
109 |
*
|
110 |
* @param p DOCUMENT ME!
|
111 |
*/
|
112 |
protected void addPoint(Point p) { |
113 |
arrayX.add(new Double(p.x)); |
114 |
arrayY.add(new Double(p.y)); |
115 |
} |
116 |
|
117 |
/**
|
118 |
* @see com.iver.cit.gvsig.fmap.tools.MapTools.MapTool#setListener(com.iver.cit.gvsig.fmap.tools.ToolListener)
|
119 |
*/
|
120 |
public void setListener(ToolListener listener) { |
121 |
this.listener = (MeasureListener) listener;
|
122 |
} |
123 |
} |