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 |
} |