Statistics
| Revision:

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
}