Statistics
| Revision:

root / trunk / extensions / extRasterTools-SE / src / org / gvsig / rastertools / georeferencing / ui / zoom / layers / GPGraphic.java @ 18216

History | View | Annotate | Download (7.86 KB)

1
/* gvSIG. Sistema de Informaci?n Geogr?fica de la Generalitat Valenciana
2
 *
3
 * Copyright (C) 2007 IVER T.I. and Generalitat Valenciana.
4
 *
5
 * This program is free software; you can redistribute it and/or
6
 * modify it under the terms of the GNU General Public License
7
 * as published by the Free Software Foundation; either version 2
8
 * of the License, or (at your option) any later version.
9
 *
10
 * This program is distributed in the hope that it will be useful,
11
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13
 * GNU General Public License for more details.
14
 *
15
 * You should have received a copy of the GNU General Public License
16
 * along with this program; if not, write to the Free Software
17
 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
18
 */
19
package org.gvsig.rastertools.georeferencing.ui.zoom.layers;
20

    
21
import java.awt.Color;
22
import java.awt.Graphics2D;
23
import java.awt.geom.Point2D;
24

    
25
import org.gvsig.raster.datastruct.GeoPoint;
26

    
27
/**
28
 * Punto de control gr?fico. Tiene la funcionalidad de dibujado de la coordenada
29
 * pixel de un punto de control. Un punto de control tiene coordenada pixel de imagen
30
 * de origen y coordenada de destino en coordenadas geogr?ficas. Un GPGraphic tiene asociado
31
 * un GeoPoint que es el que tiene la informaci?n de georreferencia.
32
 *  
33
 * 22/12/2007
34
 * @author Nacho Brodin nachobrodin@gmail.com
35
 */
36
public class GPGraphic {
37
        public static final int         PIXEL = 0;
38
        public static final int         MAP = 1;
39
        /**
40
         * Diametro del centro de la cruz
41
         */
42
        private final int               DIAM_CIRCLE = 18;
43
        private boolean                 showNumber = true;
44
        private boolean                 showLabel = true;
45
        private int                     type = PIXEL;
46
        private GeoPoint                geoPoint = null;
47
        
48
        /**
49
         * Tipo de gr?fico en el punto
50
         * @param type El valor de "type" viene definido por las constantes en esta clase
51
         */
52
        public GPGraphic(int type) {
53
                this.type = type;
54
        }
55
        
56
        /**
57
         * Tipo de gr?fico en el punto
58
         * @param type El valor de "type" viene definido por las constantes en esta clase
59
         */
60
        public GPGraphic(int type, GeoPoint gp) {
61
                this.type = type;
62
                this.geoPoint = gp;
63
        }
64
        
65
        /**
66
         * Dibuja sobre el graphics pasado la cruz del punto que marca
67
         * el pixel de la imagen.
68
         * @param g Graphics sobre el que se pinta
69
         * @param p Punto 
70
         */
71
        public void draw(Graphics2D g, Point2D p) {
72
                if(p == null)
73
                        p = geoPoint.pixelPoint;
74
                else
75
                        p.setLocation(p.getX() + geoPoint.pixelPoint.getX(), geoPoint.pixelPoint.getY());
76
                if(geoPoint != null)
77
                        draw(g, p, geoPoint.number, geoPoint.label);
78
        }
79
        
80
        /**
81
         * Dibuja sobre el graphics pasado la cruz del punto que marca
82
         * el pixel de la imagen.
83
         * @param g Graphics sobre el que se pinta
84
         * @param p Punto del graphics que coincide con el centro del GP
85
         * @param pointNumber Numero de punto a mostrar
86
         * @param label Etiqueta del punto
87
         */
88
        public void draw(Graphics2D g, Point2D p, int pointNumber, String label) {
89
                switch (type) {
90
                case PIXEL:
91
                        drawPixelCrux(g, p, pointNumber, label);
92
                        break;
93
                case MAP:
94
                        drawMapCrux(g, p, pointNumber, label);
95
                        break;
96
                }
97
        }
98
        
99
        /**
100
         * Dibuja sobre el graphics pasado la cruz del punto que marca
101
         * el pixel de la imagen.
102
         * @param g Graphics sobre el que se pinta
103
         * @param p Punto del graphics que coincide con el centro del GP
104
         * @param pointNumber Numero de punto a mostrar
105
         * @param label Etiqueta del punto
106
         */
107
        private void drawPixelCrux(Graphics2D g, Point2D p, int pointNumber, String label) {
108
                int dpto = (DIAM_CIRCLE >> 1);
109
                int incr = 5;
110
                g.setColor(Color.WHITE);
111
                g.drawOval(        (int)p.getX() - dpto + 1,
112
                                        (int)p.getY() - dpto + 1,
113
                                        DIAM_CIRCLE - 2,
114
                                        DIAM_CIRCLE - 2);
115
                g.drawLine((int)p.getX() - incr, (int)p.getY() - 1, (int)p.getX() - 1, (int)p.getY() - 1);
116
                g.drawLine((int)p.getX() - incr, (int)p.getY() + 1, (int)p.getX() - 1, (int)p.getY() + 1);
117

    
118
                g.drawLine((int)p.getX() + incr, (int)p.getY() - 1, (int)p.getX() + 1, (int)p.getY() - 1);
119
                g.drawLine((int)p.getX() + incr, (int)p.getY() + 1, (int)p.getX() + 1, (int)p.getY() + 1);
120

    
121
                g.drawLine((int)p.getX() - 1, (int)p.getY() - incr, (int)p.getX() - 1, (int)p.getY() - 1);
122
                g.drawLine((int)p.getX() + 1, (int)p.getY() - incr, (int)p.getX() + 1, (int)p.getY() - 1);
123

    
124
                g.drawLine((int)p.getX() - 1, (int)p.getY() + incr, (int)p.getX() - 1, (int)p.getY() + 1);
125
                g.drawLine((int)p.getX() + 1, (int)p.getY() + incr, (int)p.getX() + 1, (int)p.getY() + 1);
126

    
127
                g.setColor(Color.red);
128
                g.drawOval(        (int)p.getX() - dpto,
129
                                        (int)p.getY() - dpto,
130
                                        DIAM_CIRCLE,
131
                                        DIAM_CIRCLE);
132
                g.drawLine((int)p.getX(), (int)p.getY() - dpto - incr, (int)p.getX(), (int)p.getY() + dpto + incr);
133
                g.drawLine((int)p.getX() - dpto - incr, (int)p.getY(), (int)p.getX() + dpto + incr, (int)p.getY());
134

    
135
                if(showNumber) {
136
                        String pt = String.valueOf(pointNumber );
137
                        int ptX = (int)(p.getX() + dpto + 1);
138
                        int ptY = (int)(p.getY() + dpto - 1);
139
                        g.setColor(Color.WHITE);
140
                        for (int i= -1; i<2; i++)
141
                                for (int j= -1; j<2; j++)
142
                                        g.drawString(pt, ptX + i, ptY + j );
143
                        g.setColor(Color.red);
144
                        g.drawString(pt, ptX, ptY );
145
                }
146
                if(showLabel) {
147
                        //TODO: FUNCIONALIDAD mostrar etiqueta
148
                }
149
        }
150

    
151
        /**
152
         * Dibuja sobre el graphics pasado la cruz del punto que marca
153
         * el pixel de la imagen.
154
         * @param g Graphics sobre el que se pinta
155
         * @param p Punto del graphics que coincide con el centro del GP
156
         * @param pointNumber Numero de punto a mostrar
157
         * @param label Etiqueta del punto
158
         */
159
        private void drawMapCrux(Graphics2D g, Point2D p, int pointNumber, String label){
160
                int dpto = (DIAM_CIRCLE >> 1);
161
                int incr = 5;
162
                g.setColor(Color.WHITE);
163
                g.drawRect(        (int)p.getX() - dpto + 1,
164
                                        (int)p.getY() - dpto + 1,
165
                                        DIAM_CIRCLE - 2,
166
                                        DIAM_CIRCLE - 2);
167
                g.drawLine((int)p.getX() - incr, (int)p.getY() - 1, (int)p.getX() - 1, (int)p.getY() - 1);
168
                g.drawLine((int)p.getX() - incr, (int)p.getY() + 1, (int)p.getX() - 1, (int)p.getY() + 1);
169

    
170
                g.drawLine((int)p.getX() + incr, (int)p.getY() - 1, (int)p.getX() + 1, (int)p.getY() - 1);
171
                g.drawLine((int)p.getX() + incr, (int)p.getY() + 1, (int)p.getX() + 1, (int)p.getY() + 1);
172

    
173
                g.drawLine((int)p.getX() - 1, (int)p.getY() - incr, (int)p.getX() - 1, (int)p.getY() - 1);
174
                g.drawLine((int)p.getX() + 1, (int)p.getY() - incr, (int)p.getX() + 1, (int)p.getY() - 1);
175

    
176
                g.drawLine((int)p.getX() - 1, (int)p.getY() + incr, (int)p.getX() - 1, (int)p.getY() + 1);
177
                g.drawLine((int)p.getX() + 1, (int)p.getY() + incr, (int)p.getX() + 1, (int)p.getY() + 1);
178

    
179
                g.setColor(new Color(45, 8 , 165));
180
                g.drawRect(        (int)p.getX() - dpto,
181
                                        (int)p.getY() - dpto,
182
                                        DIAM_CIRCLE,
183
                                        DIAM_CIRCLE);
184
                g.drawLine((int)p.getX(), (int)p.getY() - dpto - incr, (int)p.getX(), (int)p.getY() + dpto + incr);
185
                g.drawLine((int)p.getX() - dpto - incr, (int)p.getY(), (int)p.getX() + dpto + incr, (int)p.getY());
186
                if(showNumber){
187
                        String pt = String.valueOf(pointNumber);
188
                        int ptX = (int)(p.getX() + dpto + 1);
189
                        int ptY = (int)(p.getY() - dpto - 1);
190
                        g.setColor(Color.WHITE);
191
                        for (int i= -1; i<2; i++)
192
                                for (int j= -1; j<2; j++)
193
                                        g.drawString(pt, ptX + i, ptY + j );
194
                        g.setColor(new Color(45, 8 , 165));
195
                        g.drawString(String.valueOf(pointNumber), (int)(p.getX() + dpto + 1), (int)(p.getY() - dpto - 1) );
196
                }
197
                if(showLabel) {
198
                        //TODO: FUNCIONALIDAD mostrar etiqueta
199
                }
200
        }
201

    
202
        /**
203
         * Asigna el flag que muestra u oculta la etiqueta del punto
204
         * @param showLabel true para mostrar la etiqueta y false para ocultarla
205
         */
206
        public void setShowLabel(boolean showLabel) {
207
                this.showLabel = showLabel;
208
        }
209

    
210
        /**
211
         * Asigna el flag que muestra u oculta el n?mero del punto
212
         * @param showLabel true para mostrar el punto y false para ocultarlo
213
         */
214
        public void setShowNumber(boolean showNumber) {
215
                this.showNumber = showNumber;
216
        }
217

    
218
        /**
219
         * Asigna el tipo de gr?fico para el punto
220
         * @param type Tipo de punto definido en las constantes de clase
221
         */
222
        public void setType(int type) {
223
                this.type = type;
224
        }
225
        
226
}