@openglobus/og 0.22.2 → 0.24.0

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 (205) hide show
  1. package/css/og.css +137 -1
  2. package/lib/@openglobus/js/Globe.d.ts +0 -1
  3. package/lib/@openglobus/js/Object3d.d.ts +20 -10
  4. package/lib/@openglobus/js/camera/Camera.d.ts +57 -15
  5. package/lib/@openglobus/js/camera/Frustum.d.ts +3 -0
  6. package/lib/@openglobus/js/camera/PlanetCamera.d.ts +13 -0
  7. package/lib/@openglobus/js/control/CameraLock.d.ts +38 -0
  8. package/lib/@openglobus/js/control/MouseNavigation.d.ts +62 -51
  9. package/lib/@openglobus/js/control/OldMouseNavigation.d.ts +64 -0
  10. package/lib/@openglobus/js/control/SimpleNavigation.d.ts +27 -10
  11. package/lib/@openglobus/js/control/geoObjectEditor/ArrowEntity.d.ts +15 -0
  12. package/lib/@openglobus/js/control/geoObjectEditor/AxisTrackEntity.d.ts +9 -0
  13. package/lib/@openglobus/js/control/geoObjectEditor/GeoObjectEditor.d.ts +13 -0
  14. package/lib/@openglobus/js/control/geoObjectEditor/GeoObjectEditorDialog.d.ts +69 -0
  15. package/lib/@openglobus/js/control/geoObjectEditor/GeoObjectEditorScene.d.ts +78 -9
  16. package/lib/@openglobus/js/control/geoObjectEditor/MoveAxisEntity.d.ts +17 -0
  17. package/lib/@openglobus/js/control/geoObjectEditor/MovePlaneEntity.d.ts +7 -0
  18. package/lib/@openglobus/js/control/geoObjectEditor/RotateEntity.d.ts +9 -0
  19. package/lib/@openglobus/js/control/geoObjectEditor/colors.d.ts +8 -0
  20. package/lib/@openglobus/js/control/index.d.ts +3 -2
  21. package/lib/@openglobus/js/entity/Entity.d.ts +282 -19
  22. package/lib/@openglobus/js/entity/EntityCollection.d.ts +8 -9
  23. package/lib/@openglobus/js/entity/GeoObject.d.ts +135 -39
  24. package/lib/@openglobus/js/entity/GeoObjectHandler.d.ts +39 -63
  25. package/lib/@openglobus/js/entity/InstanceData.d.ts +76 -0
  26. package/lib/@openglobus/js/entity/Polyline.d.ts +19 -6
  27. package/lib/@openglobus/js/entity/PolylineHandler.d.ts +7 -0
  28. package/lib/@openglobus/js/index.d.ts +2 -1
  29. package/lib/@openglobus/js/input/MouseHandler.d.ts +1 -0
  30. package/lib/@openglobus/js/layer/Vector.d.ts +4 -0
  31. package/lib/@openglobus/js/light/LightSource.d.ts +1 -139
  32. package/lib/@openglobus/js/math/Mat3.d.ts +1 -1
  33. package/lib/@openglobus/js/math/Mat4.d.ts +10 -1
  34. package/lib/@openglobus/js/math/Plane.d.ts +3 -1
  35. package/lib/@openglobus/js/math/Quat.d.ts +47 -33
  36. package/lib/@openglobus/js/math/Ray.d.ts +10 -14
  37. package/lib/@openglobus/js/math/Vec2.d.ts +22 -0
  38. package/lib/@openglobus/js/math/Vec3.d.ts +15 -0
  39. package/lib/@openglobus/js/math.d.ts +2 -2
  40. package/lib/@openglobus/js/quadTree/EntityCollectionNode.d.ts +2 -2
  41. package/lib/@openglobus/js/quadTree/Node.d.ts +1 -1
  42. package/lib/@openglobus/js/quadTree/earth/EarthEntityCollectionNodeLonLat.d.ts +1 -1
  43. package/lib/@openglobus/js/quadTree/equi/EquiEntityCollectionNodeLonLat.d.ts +1 -1
  44. package/lib/@openglobus/js/renderer/Renderer.d.ts +63 -44
  45. package/lib/@openglobus/js/renderer/RendererEvents.d.ts +2 -0
  46. package/lib/@openglobus/js/scene/Planet.d.ts +15 -7
  47. package/lib/@openglobus/js/scene/RenderNode.d.ts +10 -25
  48. package/lib/@openglobus/js/shaders/drawnode.d.ts +1 -0
  49. package/lib/@openglobus/js/shaders/geoObject.d.ts +1 -0
  50. package/lib/@openglobus/js/shaders/utils.d.ts +1 -1
  51. package/lib/@openglobus/js/ui/Checkbox.d.ts +31 -0
  52. package/lib/@openglobus/js/ui/Dialog.d.ts +3 -0
  53. package/lib/@openglobus/js/ui/Input.d.ts +32 -0
  54. package/lib/@openglobus/js/ui/View.d.ts +3 -1
  55. package/lib/@openglobus/js/utils/objParser.d.ts +44 -12
  56. package/lib/@openglobus/js/utils/shared.d.ts +22 -0
  57. package/lib/@openglobus/js/webgl/BaseFramebuffer.d.ts +0 -1
  58. package/lib/@openglobus/js/webgl/Framebuffer.d.ts +35 -8
  59. package/lib/@openglobus/js/webgl/Handler.d.ts +22 -12
  60. package/lib/@openglobus/og.css +1 -1
  61. package/lib/@openglobus/og.esm.js +1 -1
  62. package/lib/@openglobus/og.esm.js.map +1 -1
  63. package/lib/@openglobus/og.umd.js +1 -1
  64. package/lib/@openglobus/og.umd.js.map +1 -1
  65. package/lib/js/Globe.d.ts +0 -1
  66. package/lib/js/Globe.js +4 -2
  67. package/lib/js/Object3d.d.ts +20 -10
  68. package/lib/js/Object3d.js +124 -48
  69. package/lib/js/Popup.js +1 -1
  70. package/lib/js/camera/Camera.d.ts +57 -15
  71. package/lib/js/camera/Camera.js +109 -29
  72. package/lib/js/camera/Frustum.d.ts +3 -0
  73. package/lib/js/camera/Frustum.js +7 -0
  74. package/lib/js/camera/PlanetCamera.d.ts +13 -0
  75. package/lib/js/camera/PlanetCamera.js +52 -5
  76. package/lib/js/control/Atmosphere.js +10 -6
  77. package/lib/js/control/CameraLock.d.ts +38 -0
  78. package/lib/js/control/CameraLock.js +216 -0
  79. package/lib/js/control/Control.js +1 -1
  80. package/lib/js/control/DebugInfo.js +38 -8
  81. package/lib/js/control/KeyboardNavigation.js +9 -9
  82. package/lib/js/control/MouseNavigation.d.ts +62 -51
  83. package/lib/js/control/MouseNavigation.js +361 -305
  84. package/lib/js/control/MouseWheelZoomControl.d.ts +0 -44
  85. package/lib/js/control/MouseWheelZoomControl.js +270 -181
  86. package/lib/js/control/OldMouseNavigation.d.ts +64 -0
  87. package/lib/js/control/OldMouseNavigation.js +368 -0
  88. package/lib/js/control/ScaleControl.js +11 -5
  89. package/lib/js/control/SimpleNavigation.d.ts +27 -10
  90. package/lib/js/control/SimpleNavigation.js +149 -49
  91. package/lib/js/control/Sun.js +6 -6
  92. package/lib/js/control/TouchNavigation.js +11 -8
  93. package/lib/js/control/elevationProfile/ElevationProfileScene.js +6 -5
  94. package/lib/js/control/geoObjectEditor/ArrowEntity.d.ts +15 -0
  95. package/lib/js/control/geoObjectEditor/ArrowEntity.js +59 -0
  96. package/lib/js/control/geoObjectEditor/AxisTrackEntity.d.ts +9 -0
  97. package/lib/js/control/geoObjectEditor/AxisTrackEntity.js +93 -0
  98. package/lib/js/control/geoObjectEditor/GeoObjectEditor.d.ts +13 -0
  99. package/lib/js/control/geoObjectEditor/GeoObjectEditor.js +30 -0
  100. package/lib/js/control/geoObjectEditor/GeoObjectEditorDialog.d.ts +69 -0
  101. package/lib/js/control/geoObjectEditor/GeoObjectEditorDialog.js +488 -0
  102. package/lib/js/control/geoObjectEditor/GeoObjectEditorScene.d.ts +78 -9
  103. package/lib/js/control/geoObjectEditor/GeoObjectEditorScene.js +487 -43
  104. package/lib/js/control/geoObjectEditor/MoveAxisEntity.d.ts +17 -0
  105. package/lib/js/control/geoObjectEditor/MoveAxisEntity.js +107 -0
  106. package/lib/js/control/geoObjectEditor/MovePlaneEntity.d.ts +7 -0
  107. package/lib/js/control/geoObjectEditor/MovePlaneEntity.js +31 -0
  108. package/lib/js/control/geoObjectEditor/RotateEntity.d.ts +9 -0
  109. package/lib/js/control/geoObjectEditor/RotateEntity.js +105 -0
  110. package/lib/js/control/geoObjectEditor/colors.d.ts +8 -0
  111. package/lib/js/control/geoObjectEditor/colors.js +8 -0
  112. package/lib/js/control/index.d.ts +3 -2
  113. package/lib/js/control/index.js +3 -2
  114. package/lib/js/control/timeline/TimelineControl.js +2 -0
  115. package/lib/js/control/visibleExtent/Segment.js +4 -4
  116. package/lib/js/entity/Entity.d.ts +282 -19
  117. package/lib/js/entity/Entity.js +497 -62
  118. package/lib/js/entity/EntityCollection.d.ts +8 -9
  119. package/lib/js/entity/EntityCollection.js +48 -45
  120. package/lib/js/entity/GeoObject.d.ts +135 -39
  121. package/lib/js/entity/GeoObject.js +150 -90
  122. package/lib/js/entity/GeoObjectHandler.d.ts +39 -63
  123. package/lib/js/entity/GeoObjectHandler.js +198 -295
  124. package/lib/js/entity/InstanceData.d.ts +76 -0
  125. package/lib/js/entity/InstanceData.js +347 -0
  126. package/lib/js/entity/Polyline.d.ts +19 -6
  127. package/lib/js/entity/Polyline.js +76 -36
  128. package/lib/js/entity/PolylineHandler.d.ts +7 -0
  129. package/lib/js/entity/PolylineHandler.js +26 -1
  130. package/lib/js/index.d.ts +2 -1
  131. package/lib/js/index.js +2 -1
  132. package/lib/js/input/MouseHandler.d.ts +1 -0
  133. package/lib/js/input/MouseHandler.js +12 -1
  134. package/lib/js/layer/Bing.js +2 -2
  135. package/lib/js/layer/Vector.d.ts +4 -0
  136. package/lib/js/layer/Vector.js +16 -0
  137. package/lib/js/light/LightSource.d.ts +1 -139
  138. package/lib/js/light/LightSource.js +21 -227
  139. package/lib/js/math/Mat3.d.ts +1 -1
  140. package/lib/js/math/Mat3.js +1 -1
  141. package/lib/js/math/Mat4.d.ts +10 -1
  142. package/lib/js/math/Mat4.js +17 -1
  143. package/lib/js/math/Plane.d.ts +3 -1
  144. package/lib/js/math/Plane.js +11 -1
  145. package/lib/js/math/Quat.d.ts +47 -33
  146. package/lib/js/math/Quat.js +92 -90
  147. package/lib/js/math/Ray.d.ts +10 -14
  148. package/lib/js/math/Ray.js +56 -33
  149. package/lib/js/math/Vec2.d.ts +22 -0
  150. package/lib/js/math/Vec2.js +32 -0
  151. package/lib/js/math/Vec3.d.ts +15 -0
  152. package/lib/js/math/Vec3.js +30 -1
  153. package/lib/js/math.d.ts +2 -2
  154. package/lib/js/math.js +3 -3
  155. package/lib/js/quadTree/EntityCollectionNode.d.ts +2 -2
  156. package/lib/js/quadTree/EntityCollectionNode.js +8 -8
  157. package/lib/js/quadTree/Node.d.ts +1 -1
  158. package/lib/js/quadTree/Node.js +2 -2
  159. package/lib/js/quadTree/QuadTreeStrategy.js +1 -1
  160. package/lib/js/quadTree/earth/EarthEntityCollectionNodeLonLat.d.ts +1 -1
  161. package/lib/js/quadTree/earth/EarthEntityCollectionNodeLonLat.js +2 -2
  162. package/lib/js/quadTree/equi/EquiEntityCollectionNodeLonLat.d.ts +1 -1
  163. package/lib/js/quadTree/equi/EquiEntityCollectionNodeLonLat.js +2 -2
  164. package/lib/js/renderer/Renderer.d.ts +63 -44
  165. package/lib/js/renderer/Renderer.js +267 -266
  166. package/lib/js/renderer/RendererEvents.d.ts +2 -0
  167. package/lib/js/renderer/RendererEvents.js +5 -2
  168. package/lib/js/scene/Planet.d.ts +15 -7
  169. package/lib/js/scene/Planet.js +133 -90
  170. package/lib/js/scene/RenderNode.d.ts +10 -25
  171. package/lib/js/scene/RenderNode.js +70 -58
  172. package/lib/js/segment/Segment.js +4 -4
  173. package/lib/js/shaders/depth.js +2 -5
  174. package/lib/js/shaders/drawnode.d.ts +1 -0
  175. package/lib/js/shaders/drawnode.js +51 -52
  176. package/lib/js/shaders/geoObject.d.ts +1 -0
  177. package/lib/js/shaders/geoObject.js +154 -91
  178. package/lib/js/shaders/polyline.js +68 -51
  179. package/lib/js/shaders/utils.d.ts +1 -1
  180. package/lib/js/shaders/utils.js +11 -0
  181. package/lib/js/terrain/GlobusTerrain.js +2 -2
  182. package/lib/js/ui/Checkbox.d.ts +31 -0
  183. package/lib/js/ui/Checkbox.js +110 -0
  184. package/lib/js/ui/Color.js +2 -1
  185. package/lib/js/ui/Dialog.d.ts +3 -0
  186. package/lib/js/ui/Dialog.js +20 -0
  187. package/lib/js/ui/Input.d.ts +32 -0
  188. package/lib/js/ui/Input.js +107 -0
  189. package/lib/js/ui/View.d.ts +3 -1
  190. package/lib/js/ui/View.js +6 -0
  191. package/lib/js/utils/objParser.d.ts +44 -12
  192. package/lib/js/utils/objParser.js +241 -149
  193. package/lib/js/utils/shared.d.ts +22 -0
  194. package/lib/js/utils/shared.js +34 -0
  195. package/lib/js/webgl/BaseFramebuffer.d.ts +0 -1
  196. package/lib/js/webgl/Framebuffer.d.ts +35 -8
  197. package/lib/js/webgl/Framebuffer.js +136 -29
  198. package/lib/js/webgl/Handler.d.ts +22 -12
  199. package/lib/js/webgl/Handler.js +53 -34
  200. package/lib/js/webgl/Program.js +0 -8
  201. package/package.json +5 -3
  202. package/lib/@openglobus/js/control/EarthNavigation.d.ts +0 -50
  203. package/lib/@openglobus/js/control/MouseWheelZoomControl.d.ts +0 -44
  204. package/lib/js/control/EarthNavigation.d.ts +0 -50
  205. package/lib/js/control/EarthNavigation.js +0 -202
@@ -0,0 +1,368 @@
1
+ import * as math from "../math";
2
+ import { Control } from "./Control";
3
+ import { input } from "../input/input";
4
+ import { Key } from "../Lock";
5
+ import { LonLat } from "../LonLat";
6
+ import { Mat4 } from "../math/Mat4";
7
+ import { Quat } from "../math/Quat";
8
+ import { Ray } from "../math/Ray";
9
+ import { Sphere } from "../bv/Sphere";
10
+ import { Vec3 } from "../math/Vec3";
11
+ import { Plane } from "../math/Plane";
12
+ /**
13
+ * Mouse planet camera dragging control.
14
+ */
15
+ export class OldMouseNavigation extends Control {
16
+ constructor(options = {}) {
17
+ super(options);
18
+ this._deactivate = false;
19
+ this._shiftBusy = false;
20
+ this._name = "mouseNavigation";
21
+ this.grabbedPoint = new Vec3();
22
+ this._eye0 = new Vec3();
23
+ this.pointOnEarth = new Vec3();
24
+ this.earthUp = new Vec3();
25
+ this.inertia = 0.007;
26
+ this.grabbedSpheroid = new Sphere();
27
+ this.qRot = new Quat();
28
+ this.scaleRot = 0.0;
29
+ this.distDiff = 0.3;
30
+ this.stepsCount = 8;
31
+ this.stepsForward = null;
32
+ this.stepIndex = 0;
33
+ this._lmbDoubleClickActive = true;
34
+ this.minSlope = options.minSlope || 0.1;
35
+ this._wheelDirection = +1;
36
+ this._keyLock = new Key();
37
+ }
38
+ static getMovePointsFromPixelTerrain(cam, planet, stepsCount, delta, point, forward, dir) {
39
+ const steps = [];
40
+ let eye = cam.eye.clone(), n = cam.getBackward(), u = cam.getRight(), v = cam.getUp();
41
+ let a = planet.getCartesianFromPixelTerrain(point);
42
+ if (!a) {
43
+ a = planet.getCartesianFromPixelTerrain(planet.renderer.handler.getCenter());
44
+ }
45
+ if (a) {
46
+ if (!dir) {
47
+ dir = Vec3.sub(a, cam.eye).normalize();
48
+ }
49
+ let d = (delta * cam.eye.distance(a)) / stepsCount;
50
+ if (forward) {
51
+ d = -1.25 * d;
52
+ }
53
+ else {
54
+ d *= 2;
55
+ }
56
+ const scaled_n = n.scaleTo(d);
57
+ const slope = dir.dot(cam.eye.normal().negate());
58
+ if (slope >= 0.1) {
59
+ const grabbedSpheroid = new Sphere();
60
+ grabbedSpheroid.radius = a.length();
61
+ let rotArr = [], eyeArr = [];
62
+ let breaked = false;
63
+ for (let i = 0; i < stepsCount; i++) {
64
+ eye.addA(scaled_n);
65
+ const b = new Ray(eye, dir).hitSphere(grabbedSpheroid);
66
+ eyeArr[i] = eye.clone();
67
+ if (b) {
68
+ rotArr[i] = new Mat4().rotateBetweenVectors(a.normal(), b.normal());
69
+ }
70
+ else {
71
+ breaked = true;
72
+ break;
73
+ }
74
+ }
75
+ if (!breaked) {
76
+ for (let i = 0; i < stepsCount; i++) {
77
+ let rot = rotArr[i];
78
+ steps[i] = {
79
+ eye: rot.mulVec3(eyeArr[i]),
80
+ v: rot.mulVec3(v),
81
+ u: rot.mulVec3(u),
82
+ n: rot.mulVec3(n)
83
+ };
84
+ }
85
+ }
86
+ else {
87
+ eye = cam.eye.clone();
88
+ for (let i = 0; i < stepsCount; i++) {
89
+ steps[i] = {
90
+ eye: eye.addA(scaled_n).clone(),
91
+ v: v,
92
+ u: u,
93
+ n: n,
94
+ };
95
+ }
96
+ }
97
+ }
98
+ else {
99
+ for (let i = 0; i < stepsCount; i++) {
100
+ steps[i] = {
101
+ eye: eye.addA(dir.scaleTo(-d)).clone(),
102
+ v: v,
103
+ u: u,
104
+ n: n,
105
+ };
106
+ }
107
+ }
108
+ return steps;
109
+ }
110
+ }
111
+ onactivate() {
112
+ if (this.renderer) {
113
+ this.renderer.events.on("mousewheel", this.onMouseWheel, this);
114
+ this.renderer.events.on("lhold", this.onMouseLeftButtonDown, this);
115
+ this.renderer.events.on("rhold", this.onMouseRightButtonDown, this);
116
+ this.renderer.events.on("ldown", this.onMouseLeftButtonClick, this);
117
+ this.renderer.events.on("lup", this.onMouseLeftButtonUp, this);
118
+ this.renderer.events.on("rdown", this.onMouseRightButtonClick, this);
119
+ this.renderer.events.on("draw", this.onDraw, this, -1000);
120
+ this.renderer.events.on("mousemove", this.onMouseMove, this);
121
+ this.renderer.events.on("mouseleave", this.onMouseLeave, this);
122
+ this.renderer.events.on("mouseenter", this.onMouseEnter, this);
123
+ if (this._lmbDoubleClickActive) {
124
+ this.renderer.events.on("ldblclick", this.onMouseLeftButtonDoubleClick, this);
125
+ }
126
+ }
127
+ }
128
+ ondeactivate() {
129
+ if (this.renderer) {
130
+ this.renderer.events.off("mousewheel", this.onMouseWheel);
131
+ this.renderer.events.off("lhold", this.onMouseLeftButtonDown);
132
+ this.renderer.events.off("rhold", this.onMouseRightButtonDown);
133
+ this.renderer.events.off("ldown", this.onMouseLeftButtonClick);
134
+ this.renderer.events.off("lup", this.onMouseLeftButtonUp);
135
+ this.renderer.events.off("rdown", this.onMouseRightButtonClick);
136
+ this.renderer.events.off("draw", this.onDraw);
137
+ this.renderer.events.off("ldblclick", this.onMouseLeftButtonDoubleClick);
138
+ this.renderer.events.off("mouseleave", this.onMouseLeave);
139
+ this.renderer.events.off("mouseenter", this.onMouseEnter);
140
+ }
141
+ }
142
+ activateDoubleClickZoom() {
143
+ if (!this._lmbDoubleClickActive) {
144
+ this._lmbDoubleClickActive = true;
145
+ this.renderer && this.renderer.events.on("ldblclick", this.onMouseLeftButtonDoubleClick, this);
146
+ }
147
+ }
148
+ deactivateDoubleClickZoom() {
149
+ if (this._lmbDoubleClickActive) {
150
+ this._lmbDoubleClickActive = false;
151
+ this.renderer && this.renderer.events.off("ldblclick", this.onMouseLeftButtonDoubleClick);
152
+ }
153
+ }
154
+ onMouseEnter(e) {
155
+ const renderEvents = this.renderer.events;
156
+ if (renderEvents.isKeyPressed(input.KEY_ALT)) {
157
+ renderEvents.releaseKeys();
158
+ }
159
+ renderEvents.updateButtonsStates(e.sys.buttons);
160
+ if (renderEvents.mouseState.leftButtonDown) {
161
+ this.renderer.handler.canvas.classList.add("ogGrabbingPoiner");
162
+ }
163
+ else {
164
+ this.renderer.handler.canvas.classList.remove("ogGrabbingPoiner");
165
+ }
166
+ }
167
+ onMouseLeave() {
168
+ if (this.renderer.events.mouseState.leftButtonDown) {
169
+ this.scaleRot = 0;
170
+ }
171
+ this.renderer.handler.canvas.classList.remove("ogGrabbingPoiner");
172
+ }
173
+ onMouseWheel(e) {
174
+ if (this.stepIndex) {
175
+ return;
176
+ }
177
+ this.planet.stopFlying();
178
+ this.stopRotation();
179
+ this._deactivate = true;
180
+ this.lockPlanet(true);
181
+ this.stepsForward = OldMouseNavigation.getMovePointsFromPixelTerrain(this.planet.camera, this.planet, this.stepsCount, this.distDiff, e.pos, e.wheelDelta > 0, e.direction) || null;
182
+ this._wheelDirection = e.wheelDelta;
183
+ if (this.stepsForward) {
184
+ this.stepIndex = this.stepsCount;
185
+ }
186
+ }
187
+ oninit() {
188
+ this.activate();
189
+ if (this.renderer) {
190
+ this.renderer.events.on("keyfree", input.KEY_ALT, this.onShiftFree, this);
191
+ this.renderer.events.on("keyfree", input.KEY_PRINTSCREEN, this.onShiftFree, this);
192
+ }
193
+ }
194
+ onMouseLeftButtonDoubleClick(e) {
195
+ this.planet.stopFlying();
196
+ this.stopRotation();
197
+ const p = this.planet.getCartesianFromPixelTerrain(e.pos);
198
+ if (p) {
199
+ const cam = this.planet.camera;
200
+ let maxAlt = cam.maxAltitude + this.planet.ellipsoid.polarSize;
201
+ let minAlt = cam.minAltitude + this.planet.ellipsoid.polarSize;
202
+ const camAlt = cam.eye.length();
203
+ const g = this.planet.ellipsoid.cartesianToLonLat(p);
204
+ if (camAlt > maxAlt || camAlt < minAlt) {
205
+ this.planet.flyLonLat(new LonLat(g.lon, g.lat));
206
+ return;
207
+ }
208
+ if (this.renderer.events.isKeyPressed(input.KEY_ALT)) {
209
+ this.planet.flyLonLat(new LonLat(g.lon, g.lat, cam.eye.distance(p) * 2.0));
210
+ }
211
+ else {
212
+ this.planet.flyLonLat(new LonLat(g.lon, g.lat, cam.eye.distance(p) * 0.57));
213
+ }
214
+ }
215
+ }
216
+ onMouseLeftButtonClick() {
217
+ if (this._active) {
218
+ this.renderer.handler.canvas.classList.add("ogGrabbingPoiner");
219
+ this.grabbedPoint = this.planet.getCartesianFromMouseTerrain();
220
+ if (this.grabbedPoint) {
221
+ this._eye0.copy(this.planet.camera.eye);
222
+ this.grabbedSpheroid.radius = this.grabbedPoint.length();
223
+ this.stopRotation();
224
+ }
225
+ }
226
+ }
227
+ stopRotation() {
228
+ this.qRot.clear();
229
+ this.freePlanet();
230
+ }
231
+ onMouseLeftButtonUp(e) {
232
+ this.renderer.handler.canvas.classList.remove("ogGrabbingPoiner");
233
+ if (e.x === e.prev_x && e.y === e.prev_y) {
234
+ this.scaleRot = 0.0;
235
+ }
236
+ }
237
+ onMouseLeftButtonDown(e) {
238
+ if (this._active) {
239
+ if (!this.grabbedPoint) {
240
+ return;
241
+ }
242
+ this.planet.stopFlying();
243
+ if (e.moving) {
244
+ let cam = this.planet.camera;
245
+ if (cam.slope > 0.2) {
246
+ const targetPoint = new Ray(cam.eye, e.direction).hitSphere(this.grabbedSpheroid);
247
+ if (targetPoint) {
248
+ this.scaleRot = 1.0;
249
+ this.qRot = Quat.getRotationBetweenVectors(targetPoint.normal(), this.grabbedPoint.normal());
250
+ let rot = this.qRot;
251
+ cam.eye = rot.mulVec3(cam.eye);
252
+ cam.rotate(rot);
253
+ // cam._u = rot.mulVec3(cam._u);
254
+ // cam._r = rot.mulVec3(cam._r);
255
+ // cam._b = rot.mulVec3(cam._b);
256
+ // cam._f.set(-cam._b.x, -cam._b.y, -cam._b.z);
257
+ }
258
+ }
259
+ else {
260
+ let p0 = this.grabbedPoint, p1 = Vec3.add(p0, cam.getRight()), p2 = Vec3.add(p0, p0.normal());
261
+ let px = new Vec3();
262
+ if (new Ray(cam.eye, e.direction).hitPlaneRes(Plane.fromPoints(p0, p1, p2), px) === Ray.INSIDE) {
263
+ cam.eye = this._eye0.addA(px.subA(p0).negate());
264
+ }
265
+ }
266
+ }
267
+ }
268
+ }
269
+ onMouseRightButtonClick(e) {
270
+ this.stopRotation();
271
+ this.planet.stopFlying();
272
+ this.pointOnEarth = this.planet.getCartesianFromPixelTerrain(e.pos);
273
+ if (this.pointOnEarth) {
274
+ this.earthUp = this.pointOnEarth.normal();
275
+ }
276
+ }
277
+ onMouseRightButtonDown(e) {
278
+ const cam = this.planet.camera;
279
+ if (this.pointOnEarth && e.moving) {
280
+ this.renderer.controlsBag.scaleRot = 1.0;
281
+ let l = (0.5 / cam.eye.distance(this.pointOnEarth)) * cam._lonLat.height * math.RADIANS;
282
+ if (l > 0.007) {
283
+ l = 0.007;
284
+ }
285
+ else if (l < 0.003) {
286
+ l = 0.003;
287
+ }
288
+ cam.rotateHorizontal(l * (e.x - e.prev_x), false, this.pointOnEarth, this.earthUp);
289
+ cam.rotateVertical(l * (e.y - e.prev_y), this.pointOnEarth, this.minSlope);
290
+ }
291
+ }
292
+ onShiftFree() {
293
+ this._shiftBusy = false;
294
+ }
295
+ onMouseMove(e) {
296
+ if (this._active && this.renderer.events.isKeyPressed(input.KEY_ALT)) {
297
+ if (!this._shiftBusy) {
298
+ this._shiftBusy = true;
299
+ this.onMouseRightButtonClick(e);
300
+ }
301
+ this.onMouseRightButtonDown(e);
302
+ }
303
+ }
304
+ onDraw() {
305
+ if (this._active) {
306
+ const r = this.renderer;
307
+ const cam = this.planet.camera;
308
+ let prevEye = cam.eye.clone();
309
+ if (this.stepIndex) {
310
+ r.controlsBag.scaleRot = 1.0;
311
+ const sf = this.stepsForward[this.stepsCount - this.stepIndex--];
312
+ cam.eye = sf.eye;
313
+ //@ts-ignore
314
+ cam._u = sf.v;
315
+ //@ts-ignore
316
+ cam._r = sf.u;
317
+ //@ts-ignore
318
+ cam._b = sf.n;
319
+ //@ts-ignore
320
+ cam._f.set(-cam._b.x, -cam._b.y, -cam._b.z);
321
+ }
322
+ else {
323
+ if (this._deactivate) {
324
+ this._deactivate = false;
325
+ this.freePlanet();
326
+ }
327
+ }
328
+ if (r.events.mouseState.leftButtonDown || !this.scaleRot) {
329
+ return;
330
+ }
331
+ this.scaleRot -= this.inertia;
332
+ if (this.scaleRot <= 0.0) {
333
+ this.scaleRot = 0.0;
334
+ }
335
+ else {
336
+ r.controlsBag.scaleRot = this.scaleRot;
337
+ let rot = this.qRot
338
+ .slerp(Quat.IDENTITY, 1.0 - this.scaleRot * this.scaleRot * this.scaleRot)
339
+ .normalize();
340
+ if (!(rot.x || rot.y || rot.z)) {
341
+ this.scaleRot = 0.0;
342
+ }
343
+ cam.eye = rot.mulVec3(cam.eye);
344
+ cam.rotate(rot);
345
+ // cam._u = rot.mulVec3(cam._u);
346
+ // cam._r = rot.mulVec3(cam._r);
347
+ // cam._b = rot.mulVec3(cam._b);
348
+ // cam._f.set(-cam._b.x, -cam._b.y, -cam._b.z);
349
+ }
350
+ if (cam.eye.distance(prevEye) / cam.getAltitude() > 0.01) {
351
+ this.lockPlanet();
352
+ }
353
+ else {
354
+ this.freePlanet();
355
+ }
356
+ }
357
+ }
358
+ lockPlanet(skipTerrain) {
359
+ this.planet.layerLock.lock(this._keyLock);
360
+ !skipTerrain && this.planet.terrainLock.lock(this._keyLock);
361
+ this.planet._normalMapCreator.lock(this._keyLock);
362
+ }
363
+ freePlanet() {
364
+ this.planet.layerLock.free(this._keyLock);
365
+ this.planet.terrainLock.free(this._keyLock);
366
+ this.planet._normalMapCreator.free(this._keyLock);
367
+ }
368
+ }
@@ -3,7 +3,7 @@ import { Control } from "./Control";
3
3
  import { RADIANS } from "../math";
4
4
  import { Vec3 } from "../math/Vec3";
5
5
  const scale = [
6
- 1, 2, 3, 5, 10, 20, 30, 50, 100, 200, 300, 500, 1e3, 2e3, 3e3, 5e3, 10e3, 20e3, 30e3, 50e3,
6
+ 0.001, 0.005, 0.01, 0.05, 0.1, 0.2, 0.5, 1, 2, 3, 5, 10, 20, 30, 50, 100, 200, 300, 500, 1e3, 2e3, 3e3, 5e3, 10e3, 20e3, 30e3, 50e3,
7
7
  100e3, 200e3, 300e3, 500e3, 1000e3, 2000e3, 3000e3, 5000e3, 10000e3
8
8
  ];
9
9
  const TEMPLATE = `<div class="og-scale-container">
@@ -63,13 +63,13 @@ export class ScaleControl extends Control {
63
63
  let s0 = px;
64
64
  let dist = this.planet.getDistanceFromPixel(s0) || 0;
65
65
  if (dist === 0) {
66
- s0 = cam.project(Vec3.ZERO);
66
+ s0 = cam.project3v(Vec3.ZERO);
67
67
  dist = this.planet.getDistanceFromPixel(s0) || 0;
68
68
  }
69
69
  let p0 = cam.getForward().scaleTo(dist).addA(cam.eye);
70
70
  let tempSize = dist * Math.tan(cam.viewAngle * RADIANS);
71
71
  let p1 = p0.add(cam.getRight().scaleTo(tempSize));
72
- let s1 = cam.project(p1);
72
+ let s1 = cam.project3v(p1);
73
73
  this._mPx = tempSize / s1.distance(s0);
74
74
  let metersInMinSize = this._mPx * this._minWidth;
75
75
  let index = binarySearch(scale, metersInMinSize, (a, b) => a - b);
@@ -79,12 +79,18 @@ export class ScaleControl extends Control {
79
79
  let minMeters = scale[index], maxMeters = scale[index + 1];
80
80
  let t = (minMeters - metersInMinSize) / (maxMeters - minMeters);
81
81
  this.currWidth = this._minWidth + t * (this._maxWidth - this._minWidth);
82
- if (minMeters > 1000) {
82
+ if (minMeters >= 1000) {
83
83
  this._scaleLabelEl.innerText = `${minMeters / 1000} km`;
84
84
  }
85
- else {
85
+ else if (minMeters >= 1) {
86
86
  this._scaleLabelEl.innerText = `${minMeters} m`;
87
87
  }
88
+ else if (minMeters >= 0.01) {
89
+ this._scaleLabelEl.innerText = `${minMeters * 100} cm`;
90
+ }
91
+ else {
92
+ this._scaleLabelEl.innerText = `${minMeters * 1000} mm`;
93
+ }
88
94
  this._metersInMinSize = metersInMinSize;
89
95
  this.el.style.width = this.currWidth + "px";
90
96
  }
@@ -1,4 +1,6 @@
1
1
  import { Control, IControlParams } from "./Control";
2
+ import { IMouseState } from "../renderer/RendererEvents";
3
+ import { Vec3 } from "../math/Vec3";
2
4
  interface ISimpleNavigationParams extends IControlParams {
3
5
  speed?: number;
4
6
  }
@@ -7,19 +9,34 @@ interface ISimpleNavigationParams extends IControlParams {
7
9
  */
8
10
  export declare class SimpleNavigation extends Control {
9
11
  speed: number;
12
+ force: Vec3;
13
+ vel: Vec3;
14
+ mass: number;
15
+ protected _lookPos: Vec3 | undefined;
16
+ protected _up: Vec3 | null;
17
+ protected _grabbedPoint: Vec3 | undefined;
18
+ protected _eye0: Vec3;
10
19
  constructor(options?: ISimpleNavigationParams);
11
20
  oninit(): void;
12
21
  onactivate(): void;
13
22
  ondeactivate(): void;
14
- protected onCameraMoveForward(): void;
15
- protected onCameraMoveBackward(): void;
16
- protected onCameraStrifeLeft(): void;
17
- protected onCameraStrifeRight(): void;
18
- protected onCameraLookUp(): void;
19
- protected onCameraLookDown(): void;
20
- protected onCameraTurnLeft(): void;
21
- protected onCameraTurnRight(): void;
22
- protected onCameraRollLeft(): void;
23
- protected onCameraRollRight(): void;
23
+ protected _onMouseLeftButtonClick: (e: IMouseState) => void;
24
+ protected _onMouseLeftButtonUp: (e: IMouseState) => void;
25
+ protected _onMouseLeftButtonDown: (e: IMouseState) => void;
26
+ protected _onRHold: (e: IMouseState) => void;
27
+ protected _onRDown: (e: IMouseState) => void;
28
+ protected _onMouseWheel: (e: IMouseState) => void;
29
+ protected onCameraMoveForward: () => void;
30
+ protected onCameraMoveBackward: () => void;
31
+ protected onCameraStrifeLeft: () => void;
32
+ protected onCameraStrifeRight: () => void;
33
+ protected onCameraLookUp: () => void;
34
+ protected onCameraLookDown: () => void;
35
+ protected onCameraTurnLeft: () => void;
36
+ protected onCameraTurnRight: () => void;
37
+ protected onCameraRollLeft: () => void;
38
+ protected onCameraRollRight: () => void;
39
+ protected get dt(): number;
40
+ protected onDraw(): void;
24
41
  }
25
42
  export {};