Statistics
| Revision:

gvsig-3d / 2.0 / trunk / org.gvsig.gvsig3d / org.gvsig.gvsig3d.lib / org.gvsig.gvsig3d.lib.impl / src / main / java / org / gvsig / gvsig3d / impl / hud / HudImpl.java @ 318

History | View | Annotate | Download (7.84 KB)

1
package org.gvsig.gvsig3d.impl.hud;
2

    
3
import java.awt.Component;
4
import java.awt.event.MouseEvent;
5
import java.awt.event.MouseMotionListener;
6

    
7
import org.gvsig.gvsig3d.Gvsig3DManager;
8
import org.gvsig.gvsig3d.compass.Compass;
9
import org.gvsig.gvsig3d.hud.Hud;
10
import org.gvsig.gvsig3d.impl.compass.CompassImpl;
11
import org.gvsig.gvsig3d.resources.ResourcesFactory;
12
import org.gvsig.i18n.Messages;
13
import org.gvsig.osgvp.core.osg.Group;
14
import org.gvsig.osgvp.core.osg.Node;
15
import org.gvsig.osgvp.core.osg.Vec3;
16
import org.gvsig.osgvp.core.osg.Vec4;
17
import org.gvsig.osgvp.exceptions.InvalidValueException;
18
import org.gvsig.osgvp.exceptions.node.NodeException;
19
import org.gvsig.osgvp.features.Text;
20
import org.gvsig.osgvp.terrain.Terrain;
21
import org.gvsig.osgvp.util.EventHandler;
22
import org.gvsig.osgvp.util.UpdateNodeListener;
23
import org.gvsig.osgvp.viewer.IViewerContainer;
24
import org.slf4j.Logger;
25
import org.slf4j.LoggerFactory;
26

    
27
public class HudImpl extends Hud implements MouseMotionListener, EventHandler {
28
        private IViewerContainer _canvas3d = null;
29
        private Terrain _terrain = null;
30
        private String _lonText;
31
        private String _latText;
32
        private String _lon;
33
        private String _lat;
34
        private Text _textoHud;
35
        private CompassImpl _compass;
36
        private static String _north;
37
        private static String _south;
38
        private static String _east;
39
        private static String _west;
40
        final static private Logger _logger = LoggerFactory
41
        .getLogger(Gvsig3DManager.class);
42

    
43
        static {
44
                _north = Messages.getText("North");
45
                _south = Messages.getText("South");
46
                _east = Messages.getText("East");
47
                _west = Messages.getText("West");
48

    
49
        }
50

    
51
        private int _projectionType;
52
        
53

    
54
        /**
55
         * Constructor
56
         * 
57
         * @param m_canvas3d
58
         *            Viewer instance
59
         * @param m_terrain
60
         *            Planet instance
61
         */
62
        public HudImpl(IViewerContainer canvas3d, Terrain terrain) {
63
                super();
64
                _canvas3d = canvas3d;
65
                _terrain = terrain;
66
                _projectionType = terrain.getCoordinateSystemType();
67
                // Inicialize object
68
                init();
69
        }
70

    
71
        /**
72
         * Inicilize the object params
73
         */
74
        private void init() {
75

    
76
                try {
77
                        _textoHud = new Text();
78
                        _compass = new CompassImpl(_terrain);
79
                        if (_projectionType == Terrain.CoordinateSystemType.GEOCENTRIC) {
80
                                _compass.setPanetType(Compass.Mode.SPHERIC);
81
                        } else
82
                                _compass.setPanetType(Compass.Mode.FLAT);
83
                } catch (NodeException e1) {
84
                        // TODO Auto-generated catch block
85
                        e1.printStackTrace();
86
                }
87
                if (getProjectionType() == Terrain.CoordinateSystemType.GEOCENTRIC) {
88
                        // Setting up longitud and latitud string
89
                        _lonText = "longitude";
90
                        _latText = "latitude";
91
                } else {
92
                        _lonText = "X" + " ";
93
                        _latText = "Y" + " ";
94
                }
95

    
96
                // Adding text to group
97
                try {
98
                        this.addChild(_textoHud);
99
                        this.addChild(_compass);
100
                } catch (NodeException e) {
101
                        _logger.error("Comand:" + "Error al a�adir nodo al hud.", e);
102
                }
103

    
104
                // Setting up the lighting mode to disable (rgaitan)
105
                try {
106
                        getOrCreateStateSet().setLightingMode(
107
                                        Node.Mode.OFF | Node.Mode.PROTECTED);
108
                } catch (InvalidValueException e) {
109
                        _logger.error("Comand:" + "Error al inicializar las luces.", e);
110
                }
111
                ;
112

    
113
                // Seting up text
114
                _textoHud.setCharacterSize(14);
115
                _textoHud.setColor(new Vec4(1.0f, 1.0f, 1.0f, 1.0f));
116
                _textoHud.setBackdropColor(0.0f, 0.0f, 1.0f, 1.0f);
117

    
118
                if (ResourcesFactory.exitsResouce("arial.ttf"))
119
                        _textoHud.setFont(ResourcesFactory.getResourcePath("arial.ttf"));
120
                else {
121
                        // TODO: This freeze the execution.. disable when working.
122
                        _textoHud.setFont("arial.ttf");
123
                }
124

    
125
                _textoHud.setPosition(10, 10, 0);
126
                _textoHud.setBackdropType(Text.BackdropType.OUTLINE);
127
                _textoHud.setAlignment(Text.AlignmentType.LEFT_CENTER);
128
                
129

    
130
                _compass.setUpdateListener(new UpdateNodeListener() {
131

    
132
                        public void update(Node arg0) {
133
                                _compass.update(_canvas3d.getOSGViewer().getCamera());
134
                                updateHud();                                
135

    
136
                        }
137
                });
138

    
139
                // disabling compass.
140
                _compass.setEnabledNode(true);
141
                _compass.setScale(new Vec3(75, 75, 75));
142
                // _compass.setPosition(new
143
                // Vec3(_canvas3d.getWidth()-70,_canvas3d.getHeight()-70,0));
144

    
145
                // Add mouse listener to viewer
146
                ((Component) _canvas3d).addMouseMotionListener(this);
147
                // _canvas3d.getOSGViewer().addEventHandler(this);
148

    
149
                _canvas3d.addComponentListener(new java.awt.event.ComponentAdapter() {
150
                        public void componentResized(java.awt.event.ComponentEvent evt) {
151
                                updateHud();
152
                        }
153
                });
154
                
155
                System.out.println("Compass creada = " + _compass.getCPtr());
156

    
157
                // Update Hud
158
                updateHud();
159
        }
160

    
161
        public void setCompassPosition(Vec3 pos) {
162

    
163
                _compass.setPosition(pos);
164

    
165
        }
166
        
167

    
168

    
169
        /**
170
         * This method updates information of the HUD
171
         */
172
        public void updateHud() {
173

    
174
                if (_terrain.getCoordinateSystemType() == Terrain.CoordinateSystemType.GEOCENTRIC) {
175
                        // Getting longitud and latitud informacion from planet
176
                        _lon = HudImpl.getSexagesinal(_terrain.getLongitude(), true);
177
                        _lat = HudImpl.getSexagesinal(_terrain.getLatitude(), false);
178

    
179
                        // Updating text information
180
                        _textoHud.setText(_lonText + " " + _lon + " " + _latText + " "
181
                                        + _lat);
182
                } else {
183
                        // Getting longitud and latitud informacion from planet
184
                        _lon = Double.toString(_terrain.getLongitude());
185
                        _lat = Double.toString(_terrain.getLatitude());
186

    
187
                        // Updating text information
188
                        _textoHud.setText(_lonText + " " + _lon + " " + _latText + " "
189
                                        + _lat);
190
                }
191

    
192
                _compass.setPosition(new Vec3(_canvas3d.getWidth() - 50, _canvas3d
193
                                .getHeight() - 50, 0));
194
                
195
                                
196
                
197
                // Repainting view
198
                /*
199
                 * if (_canvas3d != null) _canvas3d.repaint();
200
                 */
201
        }
202

    
203
        public String getLat() {
204
                return _lat;
205
        }
206

    
207
        public void setLat(String lat) {
208
                _lat = lat;
209
        }
210

    
211
        public String getLatText() {
212
                return _latText;
213
        }
214

    
215
        public void setLatText(String latText) {
216
                _latText = latText;
217
        }
218

    
219
        public String getLon() {
220
                return _lon;
221
        }
222

    
223
        public void setLon(String lon) {
224
                _lon = lon;
225
        }
226

    
227
        public String getLonText() {
228
                return _lonText;
229
        }
230

    
231
        public void setLonText(String lonText) {
232
                _lonText = lonText;
233
        }
234

    
235
        /**
236
         * To transform longitud and latitud to sexagesinal format degress minuts
237
         * seconds
238
         * 
239
         * @param num
240
         *            number to transform
241
         * @param lat
242
         *            is tatitud or not
243
         * @return sexagesinal format
244
         */
245
        public static String getSexagesinal(double num, boolean lat) {
246

    
247
                String result = "";
248
                String ori = "";
249

    
250
                // Setting up North or South and East or West
251
                if (num < 0) {
252
                        num = num * (-1);
253
                        if (lat) {
254
                                ori = _east;// south;// Messages.getText("South");
255
                        } else {
256
                                ori = _north;// north;// Messages.getText("North");
257
                        }
258
                } else {
259
                        if (lat) {
260
                                ori = _west;// west;// Messages.getText("West");
261
                        } else {
262
                                ori = _south;// east;// Messages.getText("East");
263
                        }
264
                }
265

    
266
                // transform degrees in sexagesinal format
267
                int grados = (int) num;
268
                double resG = num - grados;
269
                int minutos = (int) (resG * 60);
270
                double minutosD = (resG * 60);
271
                double resM = minutosD - minutos;
272
                int segundos = (int) (resM * 60);
273
                String cadG = "";
274
                if (grados < 10)
275
                        cadG = cadG + "0";
276
                cadG = cadG + grados;
277

    
278
                String cadM = "";
279
                if (minutos < 10)
280
                        cadM = cadM + "0";
281
                cadM = cadM + minutos;
282

    
283
                String cadS = "";
284
                if (segundos < 10)
285
                        cadS = cadS + "0";
286
                cadS = cadS + segundos;
287

    
288
                // Building result string
289
                result = cadG + " " + cadM + " " + cadS + " " + ori;
290

    
291
                return result;
292
        }
293

    
294
        // MOUSE MOTION EVENTS
295

    
296
        public void mouseDragged(MouseEvent e) {
297
                // Updating Hud information+
298
                // If not update the hud information when mouses dragged the hud don�t
299
                // change
300
                updateHud();
301

    
302
                // System.out.println("***************************************");
303
                // System.out.println("Longitud : " + m_planet.getLongitude());
304
                // System.out.println("Latitud : " + m_planet.getLatitude());
305
                // System.out.println("***************************************");
306

    
307
        }
308

    
309
        public void mouseMoved(MouseEvent e) {
310
                // TODO Auto-generated method stub
311
                updateHud();
312
        }
313

    
314
        public int getProjectionType() {
315
                return _projectionType;
316
        }
317

    
318
        public void setProjectionType(int projectionType) {
319
                _projectionType = projectionType;
320
        }
321

    
322
        public void handle() {
323

    
324
                updateHud();
325

    
326
        }
327

    
328

    
329
}