Statistics
| Revision:

root / trunk / libraries / libFMap / src / com / iver / cit / gvsig / fmap / tools / Behavior / MeasureMapTool.java @ 1062

History | View | Annotate | Download (3.98 KB)

1
package com.iver.cit.gvsig.fmap.tools.Behavior;
2

    
3
import com.iver.cit.gvsig.fmap.core.GeneralPathX;
4
import com.iver.cit.gvsig.fmap.tools.BehaviorException;
5
import com.iver.cit.gvsig.fmap.tools.Events.MeasureEvent;
6
import com.iver.cit.gvsig.fmap.tools.Listeners.MeasureListener;
7
import com.iver.cit.gvsig.fmap.tools.Listeners.ToolListener;
8

    
9
import java.awt.Color;
10
import java.awt.Graphics;
11
import java.awt.Graphics2D;
12
import java.awt.Point;
13
import java.awt.event.MouseEvent;
14

    
15
import java.util.ArrayList;
16

    
17

    
18
/**
19
 * Medici?n de distancias.
20
 *
21
 * @author Vicente Caballero Navarro
22
 */
23
public class MeasureMapTool extends MapTool {
24
        protected ArrayList arrayX = new ArrayList();
25
        protected ArrayList arrayY = new ArrayList();
26
        protected boolean isClicked = false;
27
        protected MeasureListener listener;
28

    
29
        /**
30
         * DOCUMENT ME!
31
         *
32
         * @param mli
33
         */
34
        public MeasureMapTool(MeasureListener mli) {
35
                listener = mli;
36
        }
37

    
38
        /**
39
         * @see com.iver.cit.gvsig.fmap.tools.Behavior.MapTool#paintComponent(java.awt.Graphics)
40
         */
41
        public void paintComponent(Graphics g) {
42
                g.drawImage(getMapControl().getImage(), 0, 0, null);
43
                g.setColor(Color.black);
44

    
45
                if (!arrayX.isEmpty()) {
46
                        drawPolyLine((Graphics2D) g);
47
                }
48
        }
49

    
50
        /**
51
         * Reimplementaci?n del m?todo mousePressed de MapTool.
52
         *
53
         * @param E MouseEvent
54
         *
55
         * @throws BehaviorException Excepci?n lanzada cuando el Maptool.
56
         */
57
        public void mousePressed(MouseEvent E) throws BehaviorException {
58
                if (E.getClickCount() == 2) {
59
                        //System.err.println("dobleclick");
60
                        listener.polylineFinished(new MeasureEvent(
61
                                        (Double[]) arrayX.toArray(new Double[0]),
62
                                        (Double[]) arrayY.toArray(new Double[0]), E));
63
                        arrayX.clear();
64
                        arrayY.clear();
65
                        isClicked = false;
66
                } else {
67
                        //System.err.println("simpleclick");
68
                        isClicked = true;
69
                        addPoint(E.getPoint());
70

    
71
                        if (arrayX.size() < 2) {
72
                                addPoint(E.getPoint());
73
                        }
74

    
75
                        listener.pointFixed(new MeasureEvent(
76
                                        (Double[]) arrayX.toArray(new Double[0]),
77
                                        (Double[]) arrayY.toArray(new Double[0]), E));
78
                }
79
        }
80

    
81
        /**
82
         * Reimplementaci?n del m?todo mouseDragged de MapTool.
83
         *
84
         * @param e MouseEvent
85
         *
86
         * @throws BehaviorException Excepci?n lanzada cuando el Maptool.
87
         */
88
        public void mouseDragged(MouseEvent e) throws BehaviorException {
89
                mouseMoved(e);
90
        }
91

    
92
        /**
93
         * Cambio del ?ltimo punto.
94
         *
95
         * @param p punto.
96
         */
97
        protected void changeLastPoint(Point p) {
98
                arrayX.set(arrayX.size() - 1, new Double(p.getX()));
99
                arrayY.set(arrayY.size() - 1, new Double(p.getY()));
100
        }
101

    
102
        /**
103
         * DOCUMENT ME!
104
         *
105
         * @param E DOCUMENT ME!
106
         *
107
         * @throws BehaviorException
108
         */
109
        public void mouseMoved(MouseEvent E) throws BehaviorException {
110
                //System.err.println("moved antes de click");
111
                if (isClicked) {
112
                        //System.err.println("moved despues de click");
113
                        changeLastPoint(E.getPoint());
114

    
115
                        MeasureEvent event = new MeasureEvent((Double[]) arrayX.toArray(
116
                                                new Double[0]),
117
                                        (Double[]) arrayY.toArray(new Double[0]), E);
118
                        listener.points(event);
119
                        getMapControl().repaint();
120
                }
121
        }
122

    
123
        /**
124
         * Dibujo de la polil?nea.
125
         *
126
         * @param g2 Graphics2D sobre el que dibujamos.
127
         */
128
        protected void drawPolyLine(Graphics2D g2) {
129
                GeneralPathX polyline = new GeneralPathX(GeneralPathX.WIND_EVEN_ODD,
130
                                arrayX.size());
131

    
132
                polyline.moveTo(((Double) arrayX.get(0)).doubleValue(),
133
                        ((Double) arrayY.get(0)).doubleValue());
134

    
135
                for (int index = 1; index < arrayX.size(); index++) {
136
                        polyline.lineTo(((Double) arrayX.get(index)).doubleValue(),
137
                                ((Double) arrayY.get(index)).doubleValue());
138
                }
139

    
140
                g2.draw(polyline);
141
        }
142

    
143
        /**
144
         * A?ade un punto a la polil?nea.
145
         *
146
         * @param p Punto.
147
         */
148
        protected void addPoint(Point p) {
149
                arrayX.add(new Double(p.x));
150
                arrayY.add(new Double(p.y));
151
        }
152

    
153
        /**
154
         * @see com.iver.cit.gvsig.fmap.tools.Behavior.MapTool#setListener(com.iver.cit.gvsig.fmap.tools.ToolListener)
155
         */
156
        public void setListener(ToolListener listener) {
157
                this.listener = (MeasureListener) listener;
158
        }
159

    
160
        /**
161
         * @see com.iver.cit.gvsig.fmap.tools.Behavior.MapTool#getListener()
162
         */
163
        public ToolListener getListener() {
164
                return listener;
165
        }
166
}