Statistics
| Revision:

svn-gvsig-desktop / trunk / libraries / lib3DMap / src / org / gvsig / gvsig3d / gui / Hud.java @ 26036

History | View | Annotate | Download (7.43 KB)

1 21940 jcampos
package org.gvsig.gvsig3d.gui;
2 15008 julio
3 15111 rgaitan
import java.awt.Component;
4 15008 julio
import java.awt.event.MouseEvent;
5
import java.awt.event.MouseMotionListener;
6
7 20893 jcampos
import org.apache.log4j.Logger;
8 15159 julio
import org.gvsig.gui.beans.Messages;
9 20893 jcampos
import org.gvsig.osgvp.Group;
10
import org.gvsig.osgvp.Node;
11 26036 jzarzoso
import org.gvsig.osgvp.UpdateNodeListener;
12
import org.gvsig.osgvp.Vec3;
13 20893 jcampos
import org.gvsig.osgvp.Vec4;
14
import org.gvsig.osgvp.exceptions.InvalidValueException;
15
import org.gvsig.osgvp.exceptions.node.NodeException;
16
import org.gvsig.osgvp.features.Text;
17
import org.gvsig.osgvp.planets.Planet;
18
import org.gvsig.osgvp.viewer.IViewerContainer;
19 15159 julio
20 22171 jcampos
import com.iver.ai2.gvsig3d.resources.ResourcesFactory;
21 15099 julio
import com.iver.andami.PluginServices;
22 15095 julio
23 15008 julio
/**
24
 * Use this class for draw items in HUD
25
 *
26
 * @author julio
27
 *
28
 */
29
public class Hud extends Group implements MouseMotionListener {
30
31 15138 rgaitan
        private IViewerContainer m_canvas3d = null;
32 15441 julio
33 15008 julio
        private Planet m_planet = null;
34
35
        private String lonText;
36
37
        private String latText;
38
39
        private String lon;
40
41
        private String lat;
42
43 21908 jcampos
        private Text textoHud;
44 15008 julio
45 15159 julio
        private static String north;
46
47
        private static String south;
48
49
        private static String east;
50
51
        private static String west;
52 20893 jcampos
53 26036 jzarzoso
        private static Compass compass;
54
55 20893 jcampos
        private static Logger logger = Logger.getLogger(Hud.class.getName());
56 15159 julio
57
        static {
58
                north = Messages.getText("North");
59
                south = Messages.getText("South");
60
                east = Messages.getText("East");
61
                west = Messages.getText("West");
62
63
        }
64
65 15108 julio
        private int projectionType;
66
67 15008 julio
        /**
68
         * Constructor
69
         *
70 15048 julio
         * @param m_canvas3d
71
         *            Viewer instance
72
         * @param m_planet
73
         *            Planet instance
74 15008 julio
         */
75 15138 rgaitan
        public Hud(IViewerContainer m_canvas3d, Planet m_planet) {
76 15008 julio
                super();
77
                this.m_canvas3d = m_canvas3d;
78
                this.m_planet = m_planet;
79 15587 rgaitan
                this.projectionType = m_planet.getCoordinateSystemType();
80 15008 julio
                // Inicialize object
81
                init();
82
        }
83
84
        /**
85
         * Inicilize the object params
86
         */
87
        private void init() {
88 15048 julio
89 21908 jcampos
                try {
90
                        textoHud = new Text();
91 26036 jzarzoso
                        compass = new Compass(m_planet);
92
                        if(projectionType == Planet.CoordinateSystemType.GEOCENTRIC){
93
                                compass.setPanetType(Compass.Mode.SPHERIC);
94
                        }
95
                        else compass.setPanetType(Compass.Mode.FLAT);
96 21908 jcampos
                } catch (NodeException e1) {
97
                        // TODO Auto-generated catch block
98
                        e1.printStackTrace();
99
                }
100 15587 rgaitan
                if (getProjectionType() == Planet.CoordinateSystemType.GEOCENTRIC) {
101 15108 julio
                        // Setting up longitud and latitud string
102 15272 julio
                        lonText = PluginServices.getText(this, "Ext3D.longitude");
103
                        latText = PluginServices.getText(this, "Ext3D.latitude");
104 15159 julio
                } else {
105
                        lonText = PluginServices.getText(this, "X") + " ";
106
                        ;
107
                        latText = PluginServices.getText(this, "Y") + " ";
108
                        ;
109 15108 julio
                }
110 15008 julio
111
                // Adding text to group
112 20893 jcampos
                try {
113
                        this.addChild(textoHud);
114 26036 jzarzoso
                        this.addChild(compass);
115 20893 jcampos
                } catch (NodeException e) {
116 26036 jzarzoso
                        logger.error("Comand:" + "Error al a�adir nodo al hud.",e);
117 20893 jcampos
                }
118 15736 rgaitan
119
                //Setting up the lighting mode to disable (rgaitan)
120 20893 jcampos
                try {
121
                        getOrCreateStateSet().setLightingMode(Node.Mode.OFF | Node.Mode.PROTECTED);
122
                } catch (InvalidValueException e) {
123
                        logger.error("Comand:" + "Error al inicializar las luces.",e);
124
                };
125 15008 julio
126 15048 julio
                // Seting up text
127 15008 julio
                textoHud.setCharacterSize(14);
128
                textoHud.setColor(new Vec4(1.0f, 1.0f, 1.0f, 1.0f));
129
                textoHud.setBackdropColor(0.0f, 0.0f, 1.0f, 1.0f);
130 15159 julio
131 15095 julio
                if (ResourcesFactory.exitsResouce("arial.ttf"))
132
                        textoHud.setFont(ResourcesFactory.getResourcePath("arial.ttf"));
133 15449 rgaitan
                else {
134
                        // TODO: This freeze the execution.. disable when working.
135 15736 rgaitan
                        textoHud.setFont("arial.ttf");
136 15449 rgaitan
                }
137 15159 julio
138 15008 julio
                textoHud.setPosition(10, 10, 0);
139
                textoHud.setBackdropType(Text.BackdropType.OUTLINE);
140
                textoHud.setAlignment(Text.AlignmentType.LEFT_CENTER);
141 26036 jzarzoso
142
                compass.setUpdateListener(new UpdateNodeListener(){
143 15008 julio
144 26036 jzarzoso
                        public void update(Node arg0) {
145
                                compass.update(m_canvas3d.getOSGViewer().getCamera());
146
147
                        }});
148
149 15008 julio
                // Add mouse listener to viewer
150 15111 rgaitan
                ((Component) m_canvas3d).addMouseMotionListener(this);
151 15008 julio
152
                // Update Hud
153
                updateHud();
154
        }
155
156
        /**
157
         * This method updates information of the HUD
158
         */
159
        public void updateHud() {
160
161 15587 rgaitan
                if (m_planet.getCoordinateSystemType() == Planet.CoordinateSystemType.GEOCENTRIC) {
162 15048 julio
                        // Getting longitud and latitud informacion from planet
163
                        lon = Hud.getSexagesinal(m_planet.getLongitude(), true);
164
                        lat = Hud.getSexagesinal(m_planet.getLatitude(), false);
165 15736 rgaitan
166 15048 julio
167
                        // Updating text information
168
                        textoHud.setText(lonText + " " + lon + " " + latText + " " + lat);
169
                } else {
170
                        // Getting longitud and latitud informacion from planet
171
                        lon = Double.toString(m_planet.getLongitude());
172
                        lat = Double.toString(m_planet.getLatitude());
173
174
                        // Updating text information
175
                        textoHud.setText(lonText + " " + lon + " " + latText + " " + lat);
176
                }
177 26036 jzarzoso
178
                compass.setScale(new Vec3(75,75,75));
179
                compass.setPosition(new Vec3(m_canvas3d.getWidth()-70,m_canvas3d.getHeight()-70,0));
180 15274 julio
                // Repainting view
181
                if (m_canvas3d != null)
182
                        m_canvas3d.repaint();
183 15008 julio
        }
184
185
        public String getLat() {
186
                return lat;
187
        }
188
189
        public void setLat(String lat) {
190
                this.lat = lat;
191
        }
192
193
        public String getLatText() {
194
                return latText;
195
        }
196
197
        public void setLatText(String latText) {
198
                this.latText = latText;
199
        }
200
201
        public String getLon() {
202
                return lon;
203
        }
204
205
        public void setLon(String lon) {
206
                this.lon = lon;
207
        }
208
209
        public String getLonText() {
210
                return lonText;
211
        }
212
213
        public void setLonText(String lonText) {
214
                this.lonText = lonText;
215
        }
216
217
        /**
218 15048 julio
         * To transform longitud and latitud to sexagesinal format degress minuts
219
         * seconds
220 15008 julio
         *
221 15048 julio
         * @param num
222
         *            number to transform
223
         * @param lat
224
         *            is tatitud or not
225
         * @return sexagesinal format
226 15008 julio
         */
227
        public static String getSexagesinal(double num, boolean lat) {
228 15048 julio
229 15008 julio
                String result = "";
230
                String ori = "";
231 15736 rgaitan
232 15048 julio
                // Setting up North or South and East or West
233 15008 julio
                if (num < 0) {
234
                        num = num * (-1);
235
                        if (lat) {
236 15159 julio
                                ori = east;//south;// Messages.getText("South");
237 15008 julio
                        } else {
238 15159 julio
                                ori = north;//north;// Messages.getText("North");
239 15008 julio
                        }
240
                } else {
241
                        if (lat) {
242 15159 julio
                                ori = west;//west;// Messages.getText("West");
243 15008 julio
                        } else {
244 15159 julio
                                ori = south;//east;// Messages.getText("East");
245 15008 julio
                        }
246
                }
247 15048 julio
248 15008 julio
                // transform degrees in sexagesinal format
249
                int grados = (int) num;
250
                double resG = num - grados;
251
                int minutos = (int) (resG * 60);
252
                double minutosD = (resG * 60);
253
                double resM = minutosD - minutos;
254
                int segundos = (int) (resM * 60);
255
                String cadG = "";
256
                if (grados < 10)
257
                        cadG = cadG + "0";
258
                cadG = cadG + grados;
259
260
                String cadM = "";
261
                if (minutos < 10)
262
                        cadM = cadM + "0";
263
                cadM = cadM + minutos;
264
265
                String cadS = "";
266
                if (segundos < 10)
267
                        cadS = cadS + "0";
268
                cadS = cadS + segundos;
269
270 15048 julio
                // Building result string
271 15008 julio
                result = cadG + " " + cadM + " " + cadS + " " + ori;
272 15048 julio
273 15008 julio
                return result;
274
        }
275
276
        // MOUSE MOTION EVENTS
277
278
        public void mouseDragged(MouseEvent e) {
279 15274 julio
                // Updating Hud information+
280 15449 rgaitan
                // If not update the hud information when mouses dragged the hud don�t change
281 15008 julio
                updateHud();
282 15048 julio
283 15108 julio
                // System.out.println("***************************************");
284
                // System.out.println("Longitud : " + m_planet.getLongitude());
285
                // System.out.println("Latitud : " + m_planet.getLatitude());
286
                // System.out.println("***************************************");
287 15048 julio
288 15008 julio
        }
289
290
        public void mouseMoved(MouseEvent e) {
291
                // TODO Auto-generated method stub
292 15274 julio
                updateHud();
293 15008 julio
        }
294
295 15108 julio
        public int getProjectionType() {
296
                return projectionType;
297
        }
298
299
        public void setProjectionType(int projectionType) {
300
                this.projectionType = projectionType;
301
        }
302
303 15008 julio
}