@openglobus/og 0.14.10 → 0.15.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (140) hide show
  1. package/css/og.css +378 -275
  2. package/dist/@openglobus/og.css +1 -1
  3. package/dist/@openglobus/og.esm.js +2 -2
  4. package/dist/@openglobus/og.esm.js.map +1 -1
  5. package/dist/@openglobus/og.umd.js +2 -2
  6. package/dist/@openglobus/og.umd.js.map +1 -1
  7. package/package.json +18 -17
  8. package/src/og/Clock.js +218 -194
  9. package/src/og/Globe.js +5 -5
  10. package/src/og/Object3d.js +104 -145
  11. package/src/og/camera/Camera.js +31 -27
  12. package/src/og/camera/PlanetCamera.js +22 -14
  13. package/src/og/cons.js +107 -107
  14. package/src/og/control/Atmosphere.js +396 -0
  15. package/src/og/control/CompassButton.js +11 -18
  16. package/src/og/control/Control.js +197 -188
  17. package/src/og/control/GeoImageDragControl.js +84 -66
  18. package/src/og/control/LayerSwitcher.js +56 -138
  19. package/src/og/control/Lighting.js +314 -186
  20. package/src/og/control/MouseNavigation.js +2 -2
  21. package/src/og/control/RulerSwitcher.js +24 -19
  22. package/src/og/control/ScaleControl.js +30 -10
  23. package/src/og/control/SimpleSkyBackground.js +210 -0
  24. package/src/og/control/Sun.js +3 -1
  25. package/src/og/control/ZoomControl.js +30 -42
  26. package/src/og/control/index.js +6 -0
  27. package/src/og/control/ruler/RulerScene.js +5 -23
  28. package/src/og/control/selection/Selection.js +99 -0
  29. package/src/og/control/selection/SelectionScene.js +350 -0
  30. package/src/og/control/timeline/TimelineControl.js +99 -0
  31. package/src/og/control/timeline/TimelineModel.js +133 -0
  32. package/src/og/control/timeline/TimelineView.js +449 -0
  33. package/src/og/control/timeline/timelineUtils.js +132 -0
  34. package/src/og/ellipsoid/Ellipsoid.js +120 -93
  35. package/src/og/ellipsoid/wgs84.js +13 -13
  36. package/src/og/entity/Entity.js +36 -9
  37. package/src/og/entity/EntityCollection.js +0 -2
  38. package/src/og/entity/GeoObject.js +72 -56
  39. package/src/og/entity/GeoObjectHandler.js +487 -656
  40. package/src/og/entity/GeometryHandler.js +1341 -1337
  41. package/src/og/entity/Polyline.js +0 -16
  42. package/src/og/entity/Ray.js +0 -10
  43. package/src/og/entity/RayHandler.js +3 -44
  44. package/src/og/entity/Strip.js +1 -6
  45. package/src/og/index.js +13 -7
  46. package/src/og/input/input.js +3 -1
  47. package/src/og/layer/CanvasTiles.js +39 -34
  48. package/src/og/layer/Layer.js +69 -9
  49. package/src/og/layer/Material.js +1 -8
  50. package/src/og/layer/WMS.js +16 -5
  51. package/src/og/light/LightSource.js +2 -0
  52. package/src/og/math/Line3.js +140 -139
  53. package/src/og/math/Plane.js +118 -117
  54. package/src/og/math/Ray.js +242 -239
  55. package/src/og/math/Vec3.js +56 -37
  56. package/src/og/math/Vec4.js +3 -4
  57. package/src/og/math.js +21 -21
  58. package/src/og/quadTree/Node.js +5 -4
  59. package/src/og/quadTree/index.js +12 -0
  60. package/src/og/renderer/Renderer.js +64 -37
  61. package/src/og/renderer/RendererEvents.js +1071 -1065
  62. package/src/og/scene/Planet.js +354 -174
  63. package/src/og/scene/RenderNode.js +27 -12
  64. package/src/og/segment/Segment.js +0 -5
  65. package/src/og/shaders/atmos.js +332 -0
  66. package/src/og/shaders/drawnode.js +475 -109
  67. package/src/og/shaders/geoObject.js +96 -51
  68. package/src/og/shaders/polyline.js +212 -17
  69. package/src/og/shaders/ray.js +13 -6
  70. package/src/og/shaders/toneMapping.js +5 -5
  71. package/src/og/shaders/utils.js +88 -0
  72. package/src/og/terrain/GlobusTerrain.js +5 -4
  73. package/src/og/terrain/MapboxTerrain.js +231 -52
  74. package/src/og/ui/Button.js +106 -0
  75. package/src/og/ui/ButtonGroup.js +57 -0
  76. package/src/og/ui/Dialog.js +242 -0
  77. package/src/og/ui/Slider.js +144 -0
  78. package/src/og/ui/ToggleButton.js +51 -0
  79. package/src/og/{control → ui}/UIhelpers.js +11 -2
  80. package/src/og/ui/View.js +190 -0
  81. package/src/og/utils/shared.js +960 -942
  82. package/src/og/webgl/Framebuffer.js +308 -387
  83. package/src/og/webgl/Handler.js +90 -30
  84. package/src/og/webgl/Multisample.js +8 -0
  85. package/types/Clock.d.ts +7 -2
  86. package/types/Object3d.d.ts +14 -3
  87. package/types/camera/Camera.d.ts +18 -17
  88. package/types/camera/PlanetCamera.d.ts +3 -1
  89. package/types/control/Atmosphere.d.ts +15 -0
  90. package/types/control/CompassButton.d.ts +1 -2
  91. package/types/control/GeoImageDragControl.d.ts +7 -1
  92. package/types/control/LayerSwitcher.d.ts +5 -6
  93. package/types/control/Lighting.d.ts +32 -7
  94. package/types/control/ScaleControl.d.ts +2 -1
  95. package/types/control/SimpleSkyBackground.d.ts +15 -0
  96. package/types/control/ZoomControl.d.ts +0 -1
  97. package/types/control/index.d.ts +4 -1
  98. package/types/control/ruler/RulerScene.d.ts +0 -1
  99. package/types/control/selection/Selection.d.ts +49 -0
  100. package/types/control/selection/SelectionScene.d.ts +34 -0
  101. package/types/ellipsoid/Ellipsoid.d.ts +3 -2
  102. package/types/entity/Entity.d.ts +8 -0
  103. package/types/entity/GeoObject.d.ts +28 -22
  104. package/types/entity/GeoObjectHandler.d.ts +16 -56
  105. package/types/entity/Ray.d.ts +0 -3
  106. package/types/entity/RayHandler.d.ts +0 -4
  107. package/types/index.d.ts +9 -6
  108. package/types/input/input.d.ts +2 -0
  109. package/types/layer/CanvasTiles.d.ts +1 -0
  110. package/types/layer/Layer.d.ts +9 -0
  111. package/types/layer/WMS.d.ts +7 -3
  112. package/types/math/Plane.d.ts +1 -1
  113. package/types/math/Vec3.d.ts +19 -16
  114. package/types/math/Vec4.d.ts +2 -3
  115. package/types/math.d.ts +20 -20
  116. package/types/quadTree/index.d.ts +10 -0
  117. package/types/renderer/Renderer.d.ts +11 -37
  118. package/types/scene/Planet.d.ts +27 -1
  119. package/types/scene/RenderNode.d.ts +2 -1
  120. package/types/segment/Segment.d.ts +1 -1
  121. package/types/shaders/atmos.d.ts +4 -0
  122. package/types/shaders/drawnode.d.ts +3 -2
  123. package/types/shaders/utils.d.ts +1 -0
  124. package/types/terrain/GlobusTerrain.d.ts +1 -1
  125. package/types/terrain/MapboxTerrain.d.ts +2 -1
  126. package/types/ui/Button.d.ts +21 -0
  127. package/types/ui/Dialog.d.ts +41 -0
  128. package/types/ui/Slider.d.ts +30 -0
  129. package/types/ui/ToggleButton.d.ts +10 -0
  130. package/types/{control → ui}/UIhelpers.d.ts +1 -1
  131. package/types/ui/View.d.ts +32 -0
  132. package/types/utils/shared.d.ts +16 -14
  133. package/types/webgl/Framebuffer.d.ts +2 -5
  134. package/types/webgl/Handler.d.ts +15 -10
  135. package/types/webgl/Multisample.d.ts +2 -0
  136. package/src/og/ajax.js +0 -204
  137. package/src/og/entity/Object3d.js +0 -504
  138. package/src/og/utils/quadTreeType.js +0 -11
  139. package/types/ajax.d.ts +0 -24
  140. package/types/utils/quadTreeType.d.ts +0 -8
@@ -5,125 +5,55 @@
5
5
  "use strict";
6
6
 
7
7
  import { Control } from "./Control.js";
8
- import { parseHTML } from "../utils/shared.js";
8
+ import { Dialog } from '../ui/Dialog.js';
9
+ import { View } from '../ui/View.js';
10
+ import { ToggleButton } from "../ui/ToggleButton.js";
11
+ import { Slider } from "../ui/Slider.js";
9
12
 
10
- const TEMPLATE = `<div class="og-lighing">
11
-
12
- <div class="og-screen-options">
13
+ const TEMPLATE =
14
+ `<div class="og-lighing">
13
15
 
14
16
  <div class="og-option">
15
- <div class="og-caption">Lighting enabled<input type="checkbox" id="lighting" name="light"/></div>
17
+ <div class="og-caption">Lighting enabled<input type="checkbox" id="lighting" name="light"/></div>
16
18
  </div>
17
-
19
+
18
20
  <div class="og-option">
19
- <div class="og-caption">Gamma</div>
20
- <div class="og-slider">
21
- <input type="range" id="gamma" name="gamma" value="0.0" min="0.0" max="5.0" step="0.01" />
22
- </div>
23
- <div class="og-value gamma"></div>
21
+ <div class="og-caption">Atmosphere enabled<input type="checkbox" id="atmosphere" name="atmosphere"/></div>
24
22
  </div>
25
- <div class="og-option">
26
- <div class="og-caption">Exposure</div>
27
- <div class="og-slider">
28
- <input type="range" id="exposure" name="exposure" value="0.0" min="0.0" max="12.0" step="0.01" />
29
- </div>
30
- <div class="og-value exposure"></div>
31
- </div>
32
- </div>
33
-
34
- <div class="og-color-options">
35
- <div class="og-caption">Ambient</div>
36
- <div class="og-option">
37
- <div class="og-label">R</div>
38
- <div class="og-slider">
39
- <input type="range" id="ambient-r" name="ambient-r" value="0.0" min="0.0" max="2.0" step="0.01" />
40
- </div>
41
- <div class="og-value ambient-r"></div>
23
+
24
+ <div class="og-option og-atmosphere-opacity">
42
25
  </div>
26
+
27
+ <div class="og-lighting-emptyline"></div>
28
+
29
+ <div class="og-option og-gamma"></div>
30
+ <div class="og-option og-exposure"></div>
31
+
32
+ <div class="og-lighting-emptyline"></div>
33
+
43
34
  <div class="og-option">
44
- <div class="og-label">G</div>
45
- <div class="og-slider">
46
- <input type="range" id="ambient-g" name="ambient-g" value="0.0" min="0.0" max="2.0" step="0.01" />
47
- </div>
48
- <div class="og-value ambient-g"></div>
35
+ <div class="og-layers">
36
+ <div class="og-caption">Select layer:</div>
37
+ <select id="layers"></select>
49
38
  </div>
50
- <div class="og-option">
51
- <div class="og-label">B</div>
52
- <div class="og-slider">
53
- <input type="range" id="ambient-b" name="ambient-b" value="0.0" min="0.0" max="2.0" step="0.01" />
54
- </div>
55
- <div class="og-value ambient-b"></div>
56
39
  </div>
57
40
 
58
- <div class="og-caption">Diffuse</div>
59
- <div class="og-option">
60
- <div class="og-label">R</div>
61
- <div class="og-slider">
62
- <input type="range" id="diffuse-r" name="diffuse-r" value="0.0" min="0.0" max="2.0" step="0.01" />
63
- </div>
64
- <div class="og-value diffuse-r"></div>
41
+ <div class="og-option og-opacity">
65
42
  </div>
66
- <div class="og-option">
67
- <div class="og-label">G</div>
68
- <div class="og-slider">
69
- <input type="range" id="diffuse-g" name="diffuse-g" value="0.0" min="0.0" max="2.0" step="0.01" />
70
- </div>
71
- <div class="og-value diffuse-g"></div>
72
- </div>
73
- <div class="og-option">
74
- <div class="og-label">B</div>
75
- <div class="og-slider">
76
- <input type="range" id="diffuse-b" name="diffuse-b" value="0.0" min="0.0" max="2.0" step="0.01" />
77
- </div>
78
- <div class="og-value diffuse-b"></div>
43
+
44
+ <div class="og-option og-night">
79
45
  </div>
46
+
47
+ <div class="og-lighting-emptyline"></div>
80
48
 
81
-
82
- <div class="og-caption">Specular</div>
83
- <div class="og-option">
84
- <div class="og-label">R</div>
85
- <div class="og-slider">
86
- <input type="range" id="specular-r" name="specular-r" value="0.0" min="0.0" max="1.0" step="0.0001" />
87
- </div>
88
- <div class="og-value specular-r"></div>
89
- </div>
90
- <div class="og-option">
91
- <div class="og-label">G</div>
92
- <div class="og-slider">
93
- <input type="range" id="specular-g" name="specular-g" value="0.0" min="0.0" max="1.0" step="0.0001" />
94
- </div>
95
- <div class="og-value specular-g"></div>
49
+ <div class="og-option og-diffuse">
96
50
  </div>
97
- <div class="og-option">
98
- <div class="og-label">B</div>
99
- <div class="og-slider">
100
- <input type="range" id="specular-b" name="specular-b" value="0.0" min="0.0" max="1.0" step="0.0001" />
101
- </div>
102
- <div class="og-value specular-b"></div>
51
+
52
+ <div class="og-option og-ambient">
103
53
  </div>
104
54
 
105
- <div class="og-caption">Shininess</div>
106
- <div class="og-option" style="margin-left: 8px;">
107
- <div class="og-slider">
108
- <input type="range" id="shininess" name="shininess" value="0.0" min="0.0" max="1000.0" step="0.1" />
109
- </div>
110
- <div class="og-value shininess"></div>
111
- </div>
112
- </div>
113
-
114
- <div class="og-layers">
115
- <div class="og-caption">Select layer:</div>
116
- <select id="layers"></select>
117
- </div>
118
-
119
- <div class="og-caption">Opacity</div>
120
- <div class="og-option">
121
- <div class="og-label">A</div>
122
- <div class="og-slider">
123
- <input type="range" id="opacity" name="opacity" value="0.0" min="0.0" max="2.0" step="0.01" />
124
- </div>
125
- <div class="og-value opacity"></div>
126
- </div>
55
+ <div class="og-option og-specular">
56
+ </div>
127
57
 
128
58
  </div>`;
129
59
 
@@ -133,136 +63,337 @@ const TEMPLATE = `<div class="og-lighing">
133
63
  * @extends {Control}
134
64
  * @param {Object} [options] -
135
65
  */
66
+
67
+ const ICON_BUTTON_SVG = `<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="256" height="256" viewBox="0 0 256 256" xml:space="preserve">
68
+
69
+ <defs>
70
+ </defs>
71
+ <g style="stroke: none; stroke-width: 0; stroke-dasharray: none; stroke-linecap: butt; stroke-linejoin: miter; stroke-miterlimit: 10; opacity: 1;" transform="translate(1.4065934065934016 1.4065934065934016) scale(2.81 2.81)" >
72
+ \t<path d="M 45 68 c -12.682 0 -23 -10.317 -23 -23 c 0 -12.682 10.318 -23 23 -23 c 12.683 0 23 10.318 23 23 C 68 57.683 57.683 68 45 68 z" style="stroke: none; stroke-width: 1; stroke-dasharray: none; stroke-linecap: butt; stroke-linejoin: miter; stroke-miterlimit: 10; fill-rule: nonzero; opacity: 1;" transform=" matrix(1 0 0 1 0 0) " stroke-linecap="round" />
73
+ \t<path d="M 45 17.556 c -1.657 0 -3 -1.343 -3 -3 V 3 c 0 -1.657 1.343 -3 3 -3 c 1.657 0 3 1.343 3 3 v 11.556 C 48 16.212 46.657 17.556 45 17.556 z" style="stroke: none; stroke-width: 1; stroke-dasharray: none; stroke-linecap: butt; stroke-linejoin: miter; stroke-miterlimit: 10; fill-rule: nonzero; opacity: 1;" transform=" matrix(1 0 0 1 0 0) " stroke-linecap="round" />
74
+ \t<path d="M 45 90 c -1.657 0 -3 -1.343 -3 -3 V 75.444 c 0 -1.657 1.343 -3 3 -3 c 1.657 0 3 1.343 3 3 V 87 C 48 88.657 46.657 90 45 90 z" style="stroke: none; stroke-width: 1; stroke-dasharray: none; stroke-linecap: butt; stroke-linejoin: miter; stroke-miterlimit: 10; fill-rule: nonzero; opacity: 1;" transform=" matrix(1 0 0 1 0 0) " stroke-linecap="round" />
75
+ \t<path d="M 14.556 48 H 3 c -1.657 0 -3 -1.343 -3 -3 c 0 -1.657 1.343 -3 3 -3 h 11.556 c 1.657 0 3 1.343 3 3 C 17.556 46.657 16.212 48 14.556 48 z" style="stroke: none; stroke-width: 1; stroke-dasharray: none; stroke-linecap: butt; stroke-linejoin: miter; stroke-miterlimit: 10; fill-rule: nonzero; opacity: 1;" transform=" matrix(1 0 0 1 0 0) " stroke-linecap="round" />
76
+ \t<path d="M 87 48 H 75.444 c -1.657 0 -3 -1.343 -3 -3 c 0 -1.657 1.343 -3 3 -3 H 87 c 1.657 0 3 1.343 3 3 C 90 46.657 88.657 48 87 48 z" style="stroke: none; stroke-width: 1; stroke-dasharray: none; stroke-linecap: butt; stroke-linejoin: miter; stroke-miterlimit: 10; fill-rule: nonzero; opacity: 1;" transform=" matrix(1 0 0 1 0 0) " stroke-linecap="round" />
77
+ \t<path d="M 66.527 26.473 c -0.768 0 -1.535 -0.293 -2.121 -0.878 c -1.172 -1.172 -1.172 -3.071 0 -4.243 l 8.171 -8.171 c 1.172 -1.172 3.07 -1.171 4.242 0 c 1.172 1.172 1.172 3.071 0 4.243 l -8.171 8.171 C 68.063 26.18 67.295 26.473 66.527 26.473 z" style="stroke: none; stroke-width: 1; stroke-dasharray: none; stroke-linecap: butt; stroke-linejoin: miter; stroke-miterlimit: 10; fill-rule: nonzero; opacity: 1;" transform=" matrix(1 0 0 1 0 0) " stroke-linecap="round" />
78
+ \t<path d="M 15.302 77.698 c -0.768 0 -1.536 -0.293 -2.121 -0.879 c -1.172 -1.171 -1.172 -3.071 0 -4.242 l 8.171 -8.171 c 1.171 -1.172 3.071 -1.172 4.242 0 c 1.172 1.171 1.172 3.071 0 4.242 l -8.171 8.171 C 16.837 77.405 16.069 77.698 15.302 77.698 z" style="stroke: none; stroke-width: 1; stroke-dasharray: none; stroke-linecap: butt; stroke-linejoin: miter; stroke-miterlimit: 10; fill-rule: nonzero; opacity: 1;" transform=" matrix(1 0 0 1 0 0) " stroke-linecap="round" />
79
+ \t<path d="M 23.473 26.473 c -0.768 0 -1.536 -0.293 -2.121 -0.878 l -8.171 -8.171 c -1.172 -1.172 -1.172 -3.071 0 -4.243 c 1.172 -1.172 3.072 -1.171 4.243 0 l 8.171 8.171 c 1.172 1.172 1.172 3.071 0 4.243 C 25.008 26.18 24.24 26.473 23.473 26.473 z" style="stroke: none; stroke-width: 1; stroke-dasharray: none; stroke-linecap: butt; stroke-linejoin: miter; stroke-miterlimit: 10; fill-rule: nonzero; opacity: 1;" transform=" matrix(1 0 0 1 0 0) " stroke-linecap="round" />
80
+ \t<path d="M 74.698 77.698 c -0.768 0 -1.535 -0.293 -2.121 -0.879 l -8.171 -8.171 c -1.172 -1.171 -1.172 -3.071 0 -4.242 c 1.172 -1.172 3.07 -1.172 4.242 0 l 8.171 8.171 c 1.172 1.171 1.172 3.071 0 4.242 C 76.233 77.405 75.466 77.698 74.698 77.698 z" style="stroke: none; stroke-width: 1; stroke-dasharray: none; stroke-linecap: butt; stroke-linejoin: miter; stroke-miterlimit: 10; fill-rule: nonzero; opacity: 1;" transform=" matrix(1 0 0 1 0 0) " stroke-linecap="round" />
81
+ </g>
82
+ </svg>`;
83
+
84
+ const MAX_COLOR = 5;
85
+
136
86
  class Lighting extends Control {
137
87
  constructor(options = {}) {
138
88
  super(options);
139
89
 
140
90
  this._selectedLayer = null;
91
+
92
+ this._toggleBtn = new ToggleButton({
93
+ classList: ["og-map-button", "og-lighting_button"],
94
+ icon: ICON_BUTTON_SVG
95
+ });
96
+
97
+ this._dialog = new Dialog({
98
+ title: "Lighting Parameters",
99
+ visible: false,
100
+ useHide: true,
101
+ top: 60,
102
+ left: 60,
103
+ width: 600
104
+ });
105
+
106
+ this._dialog.on("visibility", (v) => {
107
+ this._toggleBtn.setActive(v);
108
+ });
109
+
110
+ this._panel = new View({
111
+ template: TEMPLATE
112
+ });
113
+
114
+ this.$gamma;
115
+ this.$exposure;
116
+ this.$night;
117
+ this.$opacity;
118
+ this.$diffuse;
119
+ this.$ambient;
120
+ this.$specular;
121
+
122
+ this._atmosphereMaxOpacity = new Slider({
123
+ label: "Max.opacity",
124
+ max: 1
125
+ });
126
+
127
+ this._atmosphereMinOpacity = new Slider({
128
+ label: "Min.opacity",
129
+ max: 1
130
+ });
131
+
132
+ this._gamma = new Slider({
133
+ label: "Gamma",
134
+ max: 5
135
+ });
136
+
137
+ this._exposure = new Slider({
138
+ label: "Exposure",
139
+ max: 5
140
+ });
141
+
142
+ this._night = new Slider({
143
+ label: "Nightlight",
144
+ max: 5
145
+ });
146
+
147
+ this._opacity = new Slider({
148
+ label: "Opacity",
149
+ max: 1
150
+ });
151
+
152
+ //
153
+ // Diffuse sliders
154
+ //
155
+ this._diffuse_r = new Slider({
156
+ label: "Diffuse R",
157
+ max: MAX_COLOR
158
+ });
159
+
160
+ this._diffuse_g = new Slider({
161
+ label: "Diffuse G",
162
+ max: MAX_COLOR
163
+ });
164
+
165
+ this._diffuse_b = new Slider({
166
+ label: "Diffuse B",
167
+ max: MAX_COLOR
168
+ });
169
+
170
+ //
171
+ // Ambient sliders
172
+ //
173
+ this._ambient_r = new Slider({
174
+ label: "Ambient R",
175
+ max: MAX_COLOR
176
+ });
177
+
178
+ this._ambient_g = new Slider({
179
+ label: "Ambient G",
180
+ max: MAX_COLOR
181
+ });
182
+
183
+ this._ambient_b = new Slider({
184
+ label: "Ambient B",
185
+ max: MAX_COLOR
186
+ });
187
+
188
+ //
189
+ // Specular sliders
190
+ //
191
+ this._specular_r = new Slider({
192
+ label: "Specular R",
193
+ max: 0.2
194
+ });
195
+
196
+ this._specular_g = new Slider({
197
+ label: "Specular G",
198
+ max: 0.2
199
+ });
200
+
201
+ this._specular_b = new Slider({
202
+ label: "Specular B",
203
+ max: 0.2
204
+ });
205
+
206
+ this._shininess = new Slider({
207
+ label: "Shininess",
208
+ max: 100
209
+ });
141
210
  }
142
211
 
143
212
  bindLayer(layer) {
144
213
  this._selectedLayer = layer;
145
-
146
- document.getElementById("opacity").value = layer.opacity;
147
- document.querySelector(".og-value.opacity").innerText = layer.opacity.toString();
214
+ this._opacity.value = layer.opacity;
215
+ this._update();
148
216
  }
149
217
 
150
218
  oninit() {
151
- var panel = parseHTML(TEMPLATE);
152
- document.body.appendChild(panel[0]);
219
+ this._toggleBtn.appendTo(this.renderer.div);
220
+ this._dialog.appendTo(this.renderer.div);
221
+ this._panel.appendTo(this._dialog.container);
153
222
 
154
- var _this = this;
223
+ this._toggleBtn.on("change", (isActive) => {
224
+ this._dialog.setVisibility(isActive);
225
+ });
155
226
 
156
- document.getElementById("lighting").checked = this.planet.lightEnabled;
227
+ this.$atmosphereOpacity = document.querySelector(".og-atmosphere-opacity");
228
+ this.$gamma = document.querySelector(".og-option.og-gamma");
229
+ this.$exposure = document.querySelector(".og-option.og-exposure");
230
+ this.$opacity = document.querySelector(".og-option.og-opacity");
231
+ this.$diffuse = document.querySelector(".og-option.og-diffuse");
232
+ this.$ambient = document.querySelector(".og-option.og-ambient");
233
+ this.$specular = document.querySelector(".og-option.og-specular");
234
+ this.$night = document.querySelector(".og-option.og-night");
235
+
236
+ this._atmosphereMaxOpacity.appendTo(this.$atmosphereOpacity);
237
+ this._atmosphereMinOpacity.appendTo(this.$atmosphereOpacity);
238
+
239
+ this._gamma.appendTo(this.$gamma);
240
+ this._exposure.appendTo(this.$exposure);
241
+
242
+ this._night.appendTo(this.$night);
243
+ this._opacity.appendTo(this.$opacity);
244
+
245
+ this._diffuse_r.appendTo(this.$diffuse);
246
+ this._diffuse_g.appendTo(this.$diffuse);
247
+ this._diffuse_b.appendTo(this.$diffuse);
157
248
 
249
+ this._ambient_r.appendTo(this.$ambient);
250
+ this._ambient_g.appendTo(this.$ambient);
251
+ this._ambient_b.appendTo(this.$ambient);
252
+
253
+ this._specular_r.appendTo(this.$specular);
254
+ this._specular_g.appendTo(this.$specular);
255
+ this._specular_b.appendTo(this.$specular);
256
+ this._shininess.appendTo(this.$specular);
257
+
258
+ document.getElementById("lighting").checked = this.planet.lightEnabled;
158
259
  document.getElementById("lighting").addEventListener("change", (e) => {
159
- _this.planet.lightEnabled = e.target.checked;
260
+ this.planet.lightEnabled = e.target.checked;
160
261
  });
161
262
 
162
- document.getElementById("layers").addEventListener("change", (e) => {
163
- //this._selectedLayer = _this.planet.getLayerByName(e.target.value);
164
- this.bindLayer(_this.planet.getLayerByName(e.target.value));
263
+ if (this.planet.atmosphereEnabled) {
264
+ this.$atmosphereOpacity.style.display = "block";
265
+ } else {
266
+ this.$atmosphereOpacity.style.display = "none";
267
+ }
268
+ document.getElementById("atmosphere").checked = this.planet.atmosphereEnabled;
269
+ document.getElementById("atmosphere").addEventListener("change", (e) => {
270
+ this.planet.atmosphereEnabled = e.target.checked;
271
+ if (this.planet.atmosphereEnabled) {
272
+ this.$atmosphereOpacity.style.display = "block";
273
+ } else {
274
+ this.$atmosphereOpacity.style.display = "none";
275
+ }
165
276
  });
166
277
 
167
- document.getElementById("gamma").addEventListener("input", function (e) {
168
- _this.planet.renderer.gamma = Number(this.value);
169
- document.querySelector(".og-value.gamma").innerText = this.value;
278
+ this._atmosphereMinOpacity.value = this.planet.atmosphereMinOpacity;
279
+ this._atmosphereMinOpacity.on("change", (val) => {
280
+ this.planet.atmosphereMinOpacity = val;
170
281
  });
171
- document.getElementById("exposure").addEventListener("input", function (e) {
172
- _this.planet.renderer.exposure = Number(this.value);
173
- document.querySelector(".og-value.exposure").innerText = this.value;
282
+
283
+ this._gamma.value = this.planet.renderer.gamma;
284
+ this._gamma.on("change", (val) => {
285
+ this.planet.renderer.gamma = val;
174
286
  });
175
287
 
176
- document.querySelector(".og-value.gamma").innerText = this.planet.renderer.gamma.toString();
177
- document.querySelector(".og-value.exposure").innerText =
178
- this.planet.renderer.exposure.toString();
179
288
 
180
- document.getElementById("gamma").value = this.planet.renderer.gamma;
181
- document.getElementById("exposure").value = this.planet.renderer.exposure;
289
+ document.getElementById("layers").addEventListener("change", (e) => {
290
+ this.bindLayer(this.planet.getLayerByName(e.target.value));
291
+ });
182
292
 
183
- document.getElementById("opacity").addEventListener("input", function (e) {
184
- if (_this._selectedLayer) {
185
- _this._selectedLayer.opacity = Number(this.value);
186
- }
187
- document.querySelector(".og-value.opacity").innerText = this.value;
293
+ this._atmosphereMaxOpacity.value = this.planet.atmosphereMaxOpacity;
294
+ this._atmosphereMaxOpacity.on("change", (val) => {
295
+ this.planet.atmosphereMaxOpacity = val;
296
+ this.planet.renderer.controls.Atmosphere.opacity = val;
188
297
  });
189
298
 
190
- document.getElementById("ambient-r").addEventListener("input", function (e) {
191
- _this.planet._ambient[0] = Number(this.value);
192
- document.querySelector(".og-value.ambient-r").innerText = this.value;
299
+ this._exposure.value = this.planet.renderer.exposure;
300
+ this._exposure.on("change", (val) => {
301
+ this.planet.renderer.exposure = val;
193
302
  });
194
- document.getElementById("ambient-g").addEventListener("input", function (e) {
195
- _this.planet._ambient[1] = Number(this.value);
196
- document.querySelector(".og-value.ambient-g").innerText = this.value;
303
+
304
+ this._night.on("change", (val) => {
305
+ if (this._selectedLayer)
306
+ this._selectedLayer.nightTextureCoefficient = val;
197
307
  });
198
- document.getElementById("ambient-b").addEventListener("input", function (e) {
199
- _this.planet._ambient[2] = Number(this.value);
200
- document.querySelector(".og-value.ambient-b").innerText = this.value;
308
+
309
+ this._opacity.on("change", (val) => {
310
+ if (this._selectedLayer)
311
+ this._selectedLayer.opacity = val;
201
312
  });
202
313
 
203
- document.getElementById("diffuse-r").addEventListener("input", function (e) {
204
- _this.planet._diffuse[0] = Number(this.value);
205
- document.querySelector(".og-value.diffuse-r").innerText = this.value;
314
+ this._ambient_r.on("change", (val) => {
315
+ if (this._selectedLayer && this._selectedLayer._ambient)
316
+ this._selectedLayer._ambient[0] = val
206
317
  });
207
- document.getElementById("diffuse-g").addEventListener("input", function (e) {
208
- _this.planet._diffuse[1] = Number(this.value);
209
- document.querySelector(".og-value.diffuse-g").innerText = this.value;
318
+
319
+ this._ambient_g.on("change", (val) => {
320
+ if (this._selectedLayer && this._selectedLayer._ambient)
321
+ this._selectedLayer._ambient[1] = val
210
322
  });
211
- document.getElementById("diffuse-b").addEventListener("input", function (e) {
212
- _this.planet._diffuse[2] = Number(this.value);
213
- document.querySelector(".og-value.diffuse-b").innerText = this.value;
323
+
324
+ this._ambient_b.on("change", (val) => {
325
+ if (this._selectedLayer && this._selectedLayer._ambient)
326
+ this._selectedLayer._ambient[2] = val
327
+ });
328
+
329
+ this._diffuse_r.on("change", (val) => {
330
+ if (this._selectedLayer && this._selectedLayer._diffuse)
331
+ this._selectedLayer._diffuse[0] = val
214
332
  });
215
333
 
216
- document.getElementById("specular-r").addEventListener("input", function (e) {
217
- _this.planet._specular[0] = Number(this.value);
218
- document.querySelector(".og-value.specular-r").innerText = this.value;
334
+ this._diffuse_g.on("change", (val) => {
335
+ if (this._selectedLayer && this._selectedLayer._diffuse)
336
+ this._selectedLayer._diffuse[1] = val
219
337
  });
220
- document.getElementById("specular-g").addEventListener("input", function (e) {
221
- _this.planet._specular[1] = Number(this.value);
222
- document.querySelector(".og-value.specular-g").innerText = this.value;
338
+
339
+ this._diffuse_b.on("change", (val) => {
340
+ if (this._selectedLayer && this._selectedLayer._diffuse)
341
+ this._selectedLayer._diffuse[2] = val
223
342
  });
224
- document.getElementById("specular-b").addEventListener("input", function (e) {
225
- _this.planet._specular[2] = Number(this.value);
226
- document.querySelector(".og-value.specular-b").innerText = this.value;
343
+
344
+ this._specular_r.on("change", (val) => {
345
+ if (this._selectedLayer && this._selectedLayer._specular)
346
+ this._selectedLayer._specular[0] = val
227
347
  });
228
348
 
229
- document.getElementById("shininess").addEventListener("input", function (e) {
230
- _this.planet._specular[3] = Number(this.value);
231
- document.querySelector(".og-value.shininess").innerText = this.value;
349
+ this._specular_g.on("change", (val) => {
350
+ if (this._selectedLayer && this._selectedLayer._specular)
351
+ this._selectedLayer._specular[1] = val
232
352
  });
233
353
 
354
+ this._specular_b.on("change", (val) => {
355
+ if (this._selectedLayer && this._selectedLayer._specular)
356
+ this._selectedLayer._specular[2] = val
357
+ });
358
+
359
+ this._shininess.on("change", (val) => {
360
+ if (this._selectedLayer && this._selectedLayer._specular)
361
+ this._selectedLayer._specular[3] = val
362
+ });
363
+
364
+
234
365
  if (this.planet) {
235
366
  this.planet.events.on("layeradd", this._onLayerAdd, this);
236
367
  this.planet.events.on("layerremove", this._onLayerRemove, this);
368
+ }
237
369
 
238
- document.getElementById("ambient-r").value = this.planet._ambient[0];
239
- document.getElementById("ambient-g").value = this.planet._ambient[1];
240
- document.getElementById("ambient-b").value = this.planet._ambient[2];
370
+ this._fetchLayers();
371
+ }
241
372
 
242
- document.getElementById("diffuse-r").value = this.planet._diffuse[0];
243
- document.getElementById("diffuse-g").value = this.planet._diffuse[1];
244
- document.getElementById("diffuse-b").value = this.planet._diffuse[2];
373
+ _update() {
374
+ let l = this._selectedLayer;
245
375
 
246
- document.getElementById("specular-r").value = this.planet._specular[0];
247
- document.getElementById("specular-g").value = this.planet._specular[1];
248
- document.getElementById("specular-b").value = this.planet._specular[2];
249
- document.getElementById("shininess").value = this.planet._specular[3];
376
+ let o = l && l.opacity ? l.opacity : 0.0;
377
+ this._opacity.value = o;
250
378
 
251
- document.querySelector(".og-value.ambient-r").innerText = this.planet._ambient[0].toString();
252
- document.querySelector(".og-value.ambient-g").innerText = this.planet._ambient[1].toString();
253
- document.querySelector(".og-value.ambient-b").innerText = this.planet._ambient[2].toString();
379
+ let n = l && l.nightTextureCoefficient ? l.nightTextureCoefficient : this.planet.nightTextureCoefficient;
380
+ this._night.value = n;
254
381
 
255
- document.querySelector(".og-value.diffuse-r").innerText = this.planet._diffuse[0].toString();
256
- document.querySelector(".og-value.diffuse-g").innerText = this.planet._diffuse[1].toString();
257
- document.querySelector(".og-value.diffuse-b").innerText = this.planet._diffuse[2].toString();
382
+ let a = l && l._ambient ? l._ambient : this.planet._ambient;
383
+ this._ambient_r.value = a[0];
384
+ this._ambient_g.value = a[1];
385
+ this._ambient_b.value = a[2];
258
386
 
259
- document.querySelector(".og-value.specular-r").innerText = this.planet._specular[0].toString();
260
- document.querySelector(".og-value.specular-g").innerText = this.planet._specular[1].toString();
261
- document.querySelector(".og-value.specular-b").innerText = this.planet._specular[2].toString();
262
- document.querySelector(".og-value.shininess").innerText = this.planet._specular[3].toString();
263
- }
387
+ let d = l && l._diffuse ? l._diffuse : this.planet._diffuse;
388
+ this._diffuse_r.value = d[0];
389
+ this._diffuse_g.value = d[1];
390
+ this._diffuse_b.value = d[2];
264
391
 
265
- this._fetchLayers();
392
+ let s = l && l._specular ? l._specular : this.planet._specular;
393
+ this._specular_r.value = s[0];
394
+ this._specular_g.value = s[1];
395
+ this._specular_b.value = s[2];
396
+ this._shininess.value = s[3];
266
397
  }
267
398
 
268
399
  _fetchLayers() {
@@ -282,11 +413,8 @@ class Lighting extends Control {
282
413
  document.getElementById("layers").value = e.name;
283
414
  }
284
415
 
285
- _onLayerRemove(e) { }
286
- }
287
-
288
- export function lighting(options) {
289
- return new Lighting(options);
416
+ _onLayerRemove(e) {
417
+ }
290
418
  }
291
419
 
292
420
  export { Lighting };
@@ -356,7 +356,7 @@ class MouseNavigation extends Control {
356
356
 
357
357
  if (this.pointOnEarth && this.renderer.events.mouseState.moving) {
358
358
  this.renderer.controlsBag.scaleRot = 1.0;
359
- var l = (0.5 / cam.eye.distance(this.pointOnEarth)) * cam._lonLat.height * math.RADIANS;
359
+ var l = (0.5 / cam.eye.distance(this.pointOnEarth)) * (cam._lonLat.height < 5.0 ? 5.0 : cam._lonLat.height) * math.RADIANS;
360
360
  if (l > 0.007) l = 0.007;
361
361
  cam.rotateHorizontal(l * (e.x - e.prev_x), false, this.pointOnEarth, this.earthUp);
362
362
 
@@ -457,4 +457,4 @@ class MouseNavigation extends Control {
457
457
  }
458
458
  }
459
459
 
460
- export { MouseNavigation };
460
+ export { MouseNavigation };