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