Statistics
| Revision:

gvsig-raster / org.gvsig.raster.georeferencing / trunk / org.gvsig.raster.georeferencing / org.gvsig.raster.georeferencing.swing / org.gvsig.raster.georeferencing.swing.impl / src / main / java / org / gvsig / raster / georeferencing / swing / impl / layer / GPGraphic.java @ 1730

History | View | Annotate | Download (8.64 KB)

1
/* gvSIG. Geographic Information System of the Valencian Government
2
 *
3
 * Copyright (C) 2007-2008 Infrastructures and Transports Department
4
 * of the Valencian Government (CIT)
5
 *
6
 * This program is free software; you can redistribute it and/or
7
 * modify it under the terms of the GNU General Public License
8
 * as published by the Free Software Foundation; either version 2
9
 * of the License, or (at your option) any later version.
10
 *
11
 * This program is distributed in the hope that it will be useful,
12
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14
 * GNU General Public License for more details.
15
 *
16
 * You should have received a copy of the GNU General Public License
17
 * along with this program; if not, write to the Free Software
18
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
19
 * MA  02110-1301, USA.
20
 *
21
 */
22
package org.gvsig.raster.georeferencing.swing.impl.layer;
23

    
24
import java.awt.Color;
25
import java.awt.Graphics2D;
26
import java.awt.geom.Point2D;
27

    
28
import org.gvsig.fmap.dal.coverage.datastruct.GeoPoint;
29
import org.gvsig.raster.georeferencing.swing.impl.view.CanvasZone;
30

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

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

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

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

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

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

    
213
        /**
214
         * Asigna el flag que muestra u oculta el n?mero del punto
215
         * @param showLabel true para mostrar el punto y false para ocultarlo
216
         */
217
        public void setShowNumber(boolean showNumber) {
218
                this.showNumber = showNumber;
219
        }
220
        
221
        /**
222
         * Obtiene el punto de control asociado al este objeto gr?fico..
223
         * @return GeoPoint
224
         */
225
        public GeoPoint getGeoPoint() {
226
                return geoPoint;
227
        }
228

    
229
        /**
230
         * Consulta el flag que informa sobre si se est? pintando el punto
231
         * de control o est? oculto
232
         * @return true si se pinta el punto de control y false si est? oculto
233
         */
234
        public boolean isDraw() {
235
                return draw;
236
        }
237

    
238
        /**
239
         * Asigna el flag que informa sobre si se est? pintando el punto
240
         * de control o est? oculto
241
         * @param draw true para pintar el punto de control y false para ocultarlo
242
         */
243
        public void setDraw(boolean draw) {
244
                this.draw = draw;
245
        }
246

    
247
        /**
248
         * Obtiene el identificador de punto
249
         * @return
250
         */
251
        public long getId() {
252
                return id;
253
        }
254
        
255
        /**
256
         * Asigna el identificador de punto
257
         * @return
258
         */
259
        public void setId(long id) {
260
                this.id = id;
261
        }
262
}