Updates to Earthview
[fg:fgdata.git] / Nasal / earthview.nas
1 ###########################################################
2 # Earthview orbital rendering
3 ###########################################################
4
5 var start = func() {
6
7 if (earthview_running_flag == 1) {return;}
8
9 earthview_running_flag = 1;
10
11 var lat = getprop("/position/latitude-deg");
12 var lon = getprop("/position/longitude-deg");
13
14 earth_model.node = earthview.place_earth_model("Models/Astro/earth.xml",lat, lon, 0.0, 0.0, 0.0, 0.0);
15 cloudsphere_model.node = earthview.place_earth_model("Models/Astro/cloudsphere.xml",lat, lon, 0.0, 0.0, 0.0, 0.0);
16 }
17
18 var stop = func () {
19
20 earth_model.node.remove();
21 cloudsphere_model.node.remove();
22 setprop("/earthview/control_loop_flag",0);
23 earthview_running_flag = 0;
24 }
25
26 var place_earth_model = func(path, lat, lon, alt, heading, pitch, roll) {
27
28
29
30 var m = props.globals.getNode("models", 1);
31                 for (var i = 0; 1; i += 1)
32                         if (m.getChild("model", i, 0) == nil)
33                                 break;
34 var model = m.getChild("model", i, 1);
35
36 var R1 = 5800000.0;
37 var R2 = 58000.0;
38
39 var altitude1 = getprop("/position/altitude-ft");
40 var altitude2 = R2/R1 * altitude1;
41 var model_alt = altitude1 - altitude2 - R2 * m_to_ft;
42
43 setprop("/earthview/latitude-deg", lat);
44 setprop("/earthview/longitude-deg", lon);
45 setprop("/earthview/elevation-ft", model_alt);
46 setprop("/earthview/heading-deg", heading);
47 setprop("/earthview/pitch-deg", pitch);
48 setprop("/earthview/roll-deg", roll);
49 setprop("/earthview/yaw-deg", 0.0);
50
51 var eview = props.globals.getNode("earthview", 1);
52 var latN = eview.getNode("latitude-deg",1);
53 var lonN = eview.getNode("longitude-deg",1);
54 var altN = eview.getNode("elevation-ft",1);
55 var headN = eview.getNode("heading-deg",1);
56 var pitchN = eview.getNode("pitch-deg",1);
57 var rollN = eview.getNode("roll-deg",1);
58
59
60
61 model.getNode("path", 1).setValue(path);
62 model.getNode("latitude-deg-prop", 1).setValue(latN.getPath());
63 model.getNode("longitude-deg-prop", 1).setValue(lonN.getPath());
64 model.getNode("elevation-ft-prop", 1).setValue(altN.getPath());
65 model.getNode("heading-deg-prop", 1).setValue(headN.getPath());
66 model.getNode("pitch-deg-prop", 1).setValue(pitchN.getPath());
67 model.getNode("roll-deg-prop", 1).setValue(rollN.getPath());
68 model.getNode("load", 1).remove();
69
70 setprop("/earthview/heading-deg",90);
71 setprop("/earthview/control_loop_flag",1);
72
73 control_loop();
74
75 return model;
76 }
77
78
79 var control_loop = func {
80
81 var R1 = 5800000.0;
82 var R2 = 58000.0;
83
84 var altitude1 = getprop("/position/altitude-ft");
85 var altitude2 = R2/R1 * altitude1;
86 var model_alt = altitude1 - altitude2 - R2 * m_to_ft;
87
88 setprop("/earthview/elevation-ft", model_alt);
89
90 var lat = getprop("/position/latitude-deg");
91 var lon = getprop("/position/longitude-deg");
92
93 setprop("/earthview/latitude-deg", lat);
94 setprop("/earthview/longitude-deg", lon);
95
96 setprop("/earthview/roll-deg", -(90-lat));
97 setprop("/earthview/yaw-deg", -lon);
98
99
100
101 if (getprop("/earthview/control_loop_flag") ==1) {settimer( func {control_loop(); },0);}
102 }
103
104 var earthview_running_flag = 0;
105 var ft_to_m = 0.30480;
106 var m_to_ft = 1.0/ft_to_m;
107 var earth_model = {};
108 var cloudsphere_model = {};
109