@openglobus/og 0.22.2 → 0.23.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 (167) hide show
  1. package/css/og.css +137 -1
  2. package/lib/@openglobus/js/Object3d.d.ts +20 -10
  3. package/lib/@openglobus/js/camera/Camera.d.ts +9 -0
  4. package/lib/@openglobus/js/camera/Frustum.d.ts +3 -0
  5. package/lib/@openglobus/js/control/CameraLock.d.ts +38 -0
  6. package/lib/@openglobus/js/control/SimpleNavigation.d.ts +27 -10
  7. package/lib/@openglobus/js/control/geoObjectEditor/ArrowEntity.d.ts +15 -0
  8. package/lib/@openglobus/js/control/geoObjectEditor/AxisTrackEntity.d.ts +9 -0
  9. package/lib/@openglobus/js/control/geoObjectEditor/GeoObjectEditor.d.ts +13 -0
  10. package/lib/@openglobus/js/control/geoObjectEditor/GeoObjectEditorDialog.d.ts +69 -0
  11. package/lib/@openglobus/js/control/geoObjectEditor/GeoObjectEditorScene.d.ts +78 -9
  12. package/lib/@openglobus/js/control/geoObjectEditor/MoveAxisEntity.d.ts +17 -0
  13. package/lib/@openglobus/js/control/geoObjectEditor/MovePlaneEntity.d.ts +7 -0
  14. package/lib/@openglobus/js/control/geoObjectEditor/RotateEntity.d.ts +9 -0
  15. package/lib/@openglobus/js/control/geoObjectEditor/colors.d.ts +8 -0
  16. package/lib/@openglobus/js/control/index.d.ts +2 -0
  17. package/lib/@openglobus/js/entity/Entity.d.ts +278 -19
  18. package/lib/@openglobus/js/entity/EntityCollection.d.ts +8 -9
  19. package/lib/@openglobus/js/entity/GeoObject.d.ts +141 -36
  20. package/lib/@openglobus/js/entity/GeoObjectHandler.d.ts +39 -63
  21. package/lib/@openglobus/js/entity/InstanceData.d.ts +76 -0
  22. package/lib/@openglobus/js/entity/Polyline.d.ts +19 -6
  23. package/lib/@openglobus/js/entity/PolylineHandler.d.ts +7 -0
  24. package/lib/@openglobus/js/index.d.ts +2 -1
  25. package/lib/@openglobus/js/layer/Vector.d.ts +4 -0
  26. package/lib/@openglobus/js/light/LightSource.d.ts +1 -139
  27. package/lib/@openglobus/js/math/Quat.d.ts +46 -33
  28. package/lib/@openglobus/js/math/Ray.d.ts +10 -4
  29. package/lib/@openglobus/js/math/Vec3.d.ts +15 -0
  30. package/lib/@openglobus/js/math.d.ts +2 -2
  31. package/lib/@openglobus/js/quadTree/EntityCollectionNode.d.ts +2 -2
  32. package/lib/@openglobus/js/quadTree/Node.d.ts +1 -1
  33. package/lib/@openglobus/js/quadTree/earth/EarthEntityCollectionNodeLonLat.d.ts +1 -1
  34. package/lib/@openglobus/js/quadTree/equi/EquiEntityCollectionNodeLonLat.d.ts +1 -1
  35. package/lib/@openglobus/js/renderer/Renderer.d.ts +63 -44
  36. package/lib/@openglobus/js/renderer/RendererEvents.d.ts +1 -0
  37. package/lib/@openglobus/js/scene/Planet.d.ts +11 -7
  38. package/lib/@openglobus/js/scene/RenderNode.d.ts +10 -25
  39. package/lib/@openglobus/js/shaders/drawnode.d.ts +1 -0
  40. package/lib/@openglobus/js/shaders/geoObject.d.ts +1 -0
  41. package/lib/@openglobus/js/shaders/utils.d.ts +1 -1
  42. package/lib/@openglobus/js/ui/Checkbox.d.ts +31 -0
  43. package/lib/@openglobus/js/ui/Dialog.d.ts +3 -0
  44. package/lib/@openglobus/js/ui/Input.d.ts +32 -0
  45. package/lib/@openglobus/js/ui/View.d.ts +3 -1
  46. package/lib/@openglobus/js/utils/objParser.d.ts +44 -12
  47. package/lib/@openglobus/js/utils/shared.d.ts +22 -0
  48. package/lib/@openglobus/js/webgl/BaseFramebuffer.d.ts +0 -1
  49. package/lib/@openglobus/js/webgl/Framebuffer.d.ts +35 -8
  50. package/lib/@openglobus/js/webgl/Handler.d.ts +1 -0
  51. package/lib/@openglobus/og.css +1 -1
  52. package/lib/@openglobus/og.esm.js +1 -1
  53. package/lib/@openglobus/og.esm.js.map +1 -1
  54. package/lib/@openglobus/og.umd.js +1 -1
  55. package/lib/@openglobus/og.umd.js.map +1 -1
  56. package/lib/js/Object3d.d.ts +20 -10
  57. package/lib/js/Object3d.js +124 -48
  58. package/lib/js/camera/Camera.d.ts +9 -0
  59. package/lib/js/camera/Camera.js +27 -1
  60. package/lib/js/camera/Frustum.d.ts +3 -0
  61. package/lib/js/camera/Frustum.js +7 -0
  62. package/lib/js/control/Atmosphere.js +10 -6
  63. package/lib/js/control/CameraLock.d.ts +38 -0
  64. package/lib/js/control/CameraLock.js +216 -0
  65. package/lib/js/control/Control.js +1 -1
  66. package/lib/js/control/DebugInfo.js +13 -3
  67. package/lib/js/control/KeyboardNavigation.js +1 -1
  68. package/lib/js/control/ScaleControl.js +9 -3
  69. package/lib/js/control/SimpleNavigation.d.ts +27 -10
  70. package/lib/js/control/SimpleNavigation.js +148 -49
  71. package/lib/js/control/Sun.js +1 -1
  72. package/lib/js/control/elevationProfile/ElevationProfileScene.js +4 -4
  73. package/lib/js/control/geoObjectEditor/ArrowEntity.d.ts +15 -0
  74. package/lib/js/control/geoObjectEditor/ArrowEntity.js +59 -0
  75. package/lib/js/control/geoObjectEditor/AxisTrackEntity.d.ts +9 -0
  76. package/lib/js/control/geoObjectEditor/AxisTrackEntity.js +93 -0
  77. package/lib/js/control/geoObjectEditor/GeoObjectEditor.d.ts +13 -0
  78. package/lib/js/control/geoObjectEditor/GeoObjectEditor.js +30 -0
  79. package/lib/js/control/geoObjectEditor/GeoObjectEditorDialog.d.ts +69 -0
  80. package/lib/js/control/geoObjectEditor/GeoObjectEditorDialog.js +502 -0
  81. package/lib/js/control/geoObjectEditor/GeoObjectEditorScene.d.ts +78 -9
  82. package/lib/js/control/geoObjectEditor/GeoObjectEditorScene.js +487 -43
  83. package/lib/js/control/geoObjectEditor/MoveAxisEntity.d.ts +17 -0
  84. package/lib/js/control/geoObjectEditor/MoveAxisEntity.js +106 -0
  85. package/lib/js/control/geoObjectEditor/MovePlaneEntity.d.ts +7 -0
  86. package/lib/js/control/geoObjectEditor/MovePlaneEntity.js +34 -0
  87. package/lib/js/control/geoObjectEditor/RotateEntity.d.ts +9 -0
  88. package/lib/js/control/geoObjectEditor/RotateEntity.js +105 -0
  89. package/lib/js/control/geoObjectEditor/colors.d.ts +8 -0
  90. package/lib/js/control/geoObjectEditor/colors.js +8 -0
  91. package/lib/js/control/index.d.ts +2 -0
  92. package/lib/js/control/index.js +2 -0
  93. package/lib/js/control/timeline/TimelineControl.js +2 -0
  94. package/lib/js/entity/Entity.d.ts +278 -19
  95. package/lib/js/entity/Entity.js +483 -63
  96. package/lib/js/entity/EntityCollection.d.ts +8 -9
  97. package/lib/js/entity/EntityCollection.js +48 -45
  98. package/lib/js/entity/GeoObject.d.ts +141 -36
  99. package/lib/js/entity/GeoObject.js +153 -90
  100. package/lib/js/entity/GeoObjectHandler.d.ts +39 -63
  101. package/lib/js/entity/GeoObjectHandler.js +198 -295
  102. package/lib/js/entity/InstanceData.d.ts +76 -0
  103. package/lib/js/entity/InstanceData.js +344 -0
  104. package/lib/js/entity/Polyline.d.ts +19 -6
  105. package/lib/js/entity/Polyline.js +76 -36
  106. package/lib/js/entity/PolylineHandler.d.ts +7 -0
  107. package/lib/js/entity/PolylineHandler.js +26 -1
  108. package/lib/js/index.d.ts +2 -1
  109. package/lib/js/index.js +2 -1
  110. package/lib/js/layer/Bing.js +2 -2
  111. package/lib/js/layer/Vector.d.ts +4 -0
  112. package/lib/js/layer/Vector.js +16 -0
  113. package/lib/js/light/LightSource.d.ts +1 -139
  114. package/lib/js/light/LightSource.js +21 -227
  115. package/lib/js/math/Quat.d.ts +46 -33
  116. package/lib/js/math/Quat.js +91 -90
  117. package/lib/js/math/Ray.d.ts +10 -4
  118. package/lib/js/math/Ray.js +20 -4
  119. package/lib/js/math/Vec3.d.ts +15 -0
  120. package/lib/js/math/Vec3.js +30 -1
  121. package/lib/js/math.d.ts +2 -2
  122. package/lib/js/math.js +3 -3
  123. package/lib/js/quadTree/EntityCollectionNode.d.ts +2 -2
  124. package/lib/js/quadTree/EntityCollectionNode.js +8 -8
  125. package/lib/js/quadTree/Node.d.ts +1 -1
  126. package/lib/js/quadTree/Node.js +2 -2
  127. package/lib/js/quadTree/QuadTreeStrategy.js +1 -1
  128. package/lib/js/quadTree/earth/EarthEntityCollectionNodeLonLat.d.ts +1 -1
  129. package/lib/js/quadTree/earth/EarthEntityCollectionNodeLonLat.js +2 -2
  130. package/lib/js/quadTree/equi/EquiEntityCollectionNodeLonLat.d.ts +1 -1
  131. package/lib/js/quadTree/equi/EquiEntityCollectionNodeLonLat.js +2 -2
  132. package/lib/js/renderer/Renderer.d.ts +63 -44
  133. package/lib/js/renderer/Renderer.js +260 -263
  134. package/lib/js/renderer/RendererEvents.d.ts +1 -0
  135. package/lib/js/renderer/RendererEvents.js +2 -1
  136. package/lib/js/scene/Planet.d.ts +11 -7
  137. package/lib/js/scene/Planet.js +109 -87
  138. package/lib/js/scene/RenderNode.d.ts +10 -25
  139. package/lib/js/scene/RenderNode.js +70 -58
  140. package/lib/js/shaders/depth.js +2 -5
  141. package/lib/js/shaders/drawnode.d.ts +1 -0
  142. package/lib/js/shaders/drawnode.js +51 -52
  143. package/lib/js/shaders/geoObject.d.ts +1 -0
  144. package/lib/js/shaders/geoObject.js +154 -91
  145. package/lib/js/shaders/polyline.js +68 -51
  146. package/lib/js/shaders/utils.d.ts +1 -1
  147. package/lib/js/shaders/utils.js +11 -0
  148. package/lib/js/ui/Checkbox.d.ts +31 -0
  149. package/lib/js/ui/Checkbox.js +110 -0
  150. package/lib/js/ui/Color.js +2 -1
  151. package/lib/js/ui/Dialog.d.ts +3 -0
  152. package/lib/js/ui/Dialog.js +20 -0
  153. package/lib/js/ui/Input.d.ts +32 -0
  154. package/lib/js/ui/Input.js +107 -0
  155. package/lib/js/ui/View.d.ts +3 -1
  156. package/lib/js/ui/View.js +6 -0
  157. package/lib/js/utils/objParser.d.ts +44 -12
  158. package/lib/js/utils/objParser.js +241 -149
  159. package/lib/js/utils/shared.d.ts +22 -0
  160. package/lib/js/utils/shared.js +34 -0
  161. package/lib/js/webgl/BaseFramebuffer.d.ts +0 -1
  162. package/lib/js/webgl/Framebuffer.d.ts +35 -8
  163. package/lib/js/webgl/Framebuffer.js +136 -29
  164. package/lib/js/webgl/Handler.d.ts +1 -0
  165. package/lib/js/webgl/Handler.js +11 -1
  166. package/lib/js/webgl/Program.js +0 -8
  167. package/package.json +4 -2
@@ -1,79 +1,515 @@
1
1
  import { createEvents } from '../../Events';
2
- import { Object3d } from '../../Object3d';
2
+ import { DEGREES, MAX32, RADIANS } from "../../math";
3
+ import { Plane } from "../../math/Plane";
3
4
  import { RenderNode } from '../../scene/RenderNode';
4
- import { Vector } from '../../layer/Vector';
5
5
  import { Vec2 } from '../../math/Vec2';
6
- let obj3d = Object3d.createCylinder(1.1, 0, 2.7, 20, 1, true, false, 0, 0, 0);
6
+ import { Vec3 } from '../../math/Vec3';
7
+ import { Quat } from '../../math/Quat';
8
+ import { LonLat } from "../../LonLat";
9
+ import { Entity } from "../../entity/Entity";
10
+ import { MoveAxisEntity } from "./MoveAxisEntity";
11
+ import { MovePlaneEntity } from "./MovePlaneEntity";
12
+ import { RotateEntity } from "./RotateEntity";
13
+ import { Ray } from "../../math/Ray";
14
+ import { Sphere } from "../../bv/Sphere";
15
+ import { AxisTrackEntity } from "./AxisTrackEntity";
16
+ import { EntityCollection } from "../../entity/EntityCollection";
17
+ function dragSimpleRes(unit, eye, clickDir, direction, p0, res) {
18
+ let p1 = p0.add(Vec3.UP), p2 = p0.add(unit);
19
+ let px = new Vec3();
20
+ if (new Ray(eye, clickDir).hitPlane(p0, p1, p2, px) === Ray.INSIDE) {
21
+ let clickCart = Vec3.proj_b_to_a(px, unit);
22
+ if (new Ray(eye, direction).hitPlane(p0, p1, p2, px) === Ray.INSIDE) {
23
+ let dragCart = Vec3.proj_b_to_a(px, unit);
24
+ let dragVec = dragCart.sub(clickCart);
25
+ res.copy(p0.add(dragVec));
26
+ }
27
+ }
28
+ }
7
29
  class GeoObjectEditorScene extends RenderNode {
8
30
  constructor(options = {}) {
9
- super("GeoObjectEditorScene");
10
- // protected _onCornerLdown = (e: IMouseState) => {
11
- // this.renderer?.controls.mouseNavigation?.deactivate();
12
- // this._startClick.set(e.x, e.y);
13
- // let coords = e.pickingObject.getCartesian();
14
- // this._startPos = this._planet!.getPixelFromCartesian(coords);
15
- // }
16
- this._onLUp = () => {
17
- this.renderer.controls.mouseNavigation?.activate();
31
+ super(options.name || 'GeoObjectEditorScene');
32
+ this._onAxisLayerMouseEnter = (e) => {
33
+ this.renderer.handler.canvas.style.cursor = "pointer";
34
+ e.pickingObject.setColorHTML(e.pickingObject.properties.style.selectColor);
18
35
  };
19
- this._onLclick = (e) => {
36
+ this._onAxisLayerMouseLeave = (e) => {
37
+ this.renderer.handler.canvas.style.cursor = "default";
38
+ e.pickingObject.setColorHTML(e.pickingObject.properties.style.color);
39
+ };
40
+ this._onAxisLayerLUp = (e) => {
41
+ this._selectedMove = null;
42
+ this._navActivate();
43
+ this._setAxisTrackVisibility(false);
44
+ };
45
+ this._onAxisLayerLDown = (e) => {
46
+ this._clickPos = e.pos.clone();
47
+ if (this._selectedEntity) {
48
+ this._selectedEntityCart = this._selectedEntity.getAbsoluteCartesian();
49
+ this._setAxisTrackVisibility(true);
50
+ }
51
+ this._selectedMove = e.pickingObject.properties.opName;
52
+ this._navDeactivate();
53
+ };
54
+ this._onPlaneLayerMouseEnter = (e) => {
55
+ this.renderer.handler.canvas.style.cursor = "pointer";
56
+ e.pickingObject.geoObject.setColorHTML(e.pickingObject.properties.style.selectColor);
57
+ };
58
+ this._onPlaneLayerMouseLeave = (e) => {
59
+ this.renderer.handler.canvas.style.cursor = "default";
60
+ e.pickingObject.geoObject.setColorHTML(e.pickingObject.properties.style.color);
61
+ };
62
+ this._onPlaneLayerLUp = (e) => {
63
+ this._selectedMove = null;
64
+ this._navActivate();
65
+ this._setAxisTrackVisibility(false);
66
+ };
67
+ this._onPlaneLayerLDown = (e) => {
68
+ this._clickPos = e.pos.clone();
69
+ if (this._selectedEntity) {
70
+ this._selectedEntityCart = this._selectedEntity.getAbsoluteCartesian();
71
+ this._setAxisTrackVisibility(true);
72
+ }
73
+ this._selectedMove = e.pickingObject.properties.opName;
74
+ this._navDeactivate();
75
+ };
76
+ this._onRotateLayerMouseEnter = (e) => {
77
+ this.renderer.handler.canvas.style.cursor = "pointer";
78
+ e.pickingObject.polyline.setColorHTML(e.pickingObject.properties.style.selectColor);
79
+ };
80
+ this._onRotateLayerMouseLeave = (e) => {
81
+ this.renderer.handler.canvas.style.cursor = "default";
82
+ e.pickingObject.polyline.setColorHTML(e.pickingObject.properties.style.color);
83
+ };
84
+ this._onRotateLayerLUp = (e) => {
85
+ this._selectedMove = null;
86
+ this._navActivate();
87
+ };
88
+ this._onRotateLayerLDown = (e) => {
89
+ this._clickPos = e.pos.clone();
90
+ if (this._selectedEntity) {
91
+ this._selectedEntityCart = this._selectedEntity.getAbsoluteCartesian();
92
+ if (this._selectedEntity) {
93
+ this._selectedEntityPitch = this._selectedEntity.getAbsolutePitch();
94
+ this._selectedEntityYaw = this._selectedEntity.getAbsoluteYaw();
95
+ this._selectedEntityRoll = this._selectedEntity.getAbsoluteRoll();
96
+ }
97
+ }
98
+ this._selectedMove = e.pickingObject.properties.opName;
99
+ this._navDeactivate();
20
100
  };
21
101
  this._onMouseMove = (e) => {
102
+ if (this._selectedEntity && this._selectedMove && this._ops[this._selectedMove]) {
103
+ this._ops[this._selectedMove](e);
104
+ }
105
+ };
106
+ this._onLclick = (e) => {
107
+ if (e.pickingObject && (e.pickingObject instanceof Entity)) {
108
+ this.select(e.pickingObject);
109
+ }
110
+ };
111
+ this._moveX = (e) => {
112
+ if (!this._selectedEntity)
113
+ return;
114
+ let cam = this.renderer.activeCamera;
115
+ let p0 = this._selectedEntityCart;
116
+ let clickDir = cam.unproject(this._clickPos.x, this._clickPos.y);
117
+ let px = new Vec3();
118
+ if (this.planet) {
119
+ let clickCart = new Ray(cam.eye, clickDir).hitSphere(new Sphere(p0.length(), new Vec3()));
120
+ let currCart = new Ray(cam.eye, e.direction).hitSphere(new Sphere(p0.length(), new Vec3()));
121
+ if (!currCart)
122
+ return;
123
+ let rot = Quat.getRotationBetweenVectors(clickCart.normal(), currCart.normal());
124
+ px = rot.mulVec3(p0);
125
+ if (this._ellipsoid) {
126
+ let p0_lonLat = this._ellipsoid.cartesianToLonLat(p0);
127
+ let px_lonLat = this._ellipsoid.cartesianToLonLat(px);
128
+ this._ellipsoid.lonLatToCartesianRes(new LonLat(px_lonLat.lon, p0_lonLat.lat, p0_lonLat.height), px);
129
+ }
130
+ }
131
+ else {
132
+ dragSimpleRes(Vec3.UNIT_X, cam.eye, clickDir, e.direction, p0, px);
133
+ }
134
+ this._selectedEntity.setAbsoluteCartesian3v(px);
135
+ this.events.dispatch(this.events.position, px, this._selectedEntity);
136
+ this.events.dispatch(this.events.change, this._selectedEntity);
137
+ };
138
+ this._moveY = (e) => {
139
+ if (!this._selectedEntity)
140
+ return;
141
+ let cam = this.renderer.activeCamera;
142
+ let p0 = this._selectedEntityCart;
143
+ let groundNormal = Vec3.UP;
144
+ if (this.planet) {
145
+ groundNormal = this._axisEntity.getY();
146
+ }
147
+ let p1 = p0.add(groundNormal);
148
+ let p2 = p0.add(cam.getRight());
149
+ let px = new Vec3();
150
+ let clickDir = cam.unproject(this._clickPos.x, this._clickPos.y);
151
+ if (new Ray(cam.eye, clickDir).hitPlane(p0, p1, p2, px) === Ray.INSIDE) {
152
+ let clickCart = Vec3.proj_b_to_a(px, groundNormal);
153
+ if (new Ray(cam.eye, e.direction).hitPlane(p0, p1, p2, px) === Ray.INSIDE) {
154
+ let dragCart = Vec3.proj_b_to_a(px, groundNormal);
155
+ let dragVec = dragCart.sub(clickCart);
156
+ let pos = this._selectedEntityCart.add(dragVec);
157
+ this._selectedEntity.setAbsoluteCartesian3v(pos);
158
+ this.events.dispatch(this.events.position, px, this._selectedEntity);
159
+ this.events.dispatch(this.events.change, this._selectedEntity);
160
+ }
161
+ }
162
+ };
163
+ this._moveZ = (e) => {
164
+ if (!this._selectedEntity)
165
+ return;
166
+ let cam = this.renderer.activeCamera;
167
+ let p0 = this._selectedEntityCart;
168
+ let clickDir = cam.unproject(this._clickPos.x, this._clickPos.y);
169
+ let px = new Vec3();
170
+ if (this.planet) {
171
+ let clickCart = new Ray(cam.eye, clickDir).hitSphere(new Sphere(p0.length(), new Vec3()));
172
+ let currCart = new Ray(cam.eye, e.direction).hitSphere(new Sphere(p0.length(), new Vec3()));
173
+ if (!currCart)
174
+ return;
175
+ let rot = Quat.getRotationBetweenVectors(clickCart.normal(), currCart.normal());
176
+ px = rot.mulVec3(p0);
177
+ if (this._ellipsoid) {
178
+ let p0_lonLat = this._ellipsoid.cartesianToLonLat(p0);
179
+ let px_lonLat = this._ellipsoid.cartesianToLonLat(px);
180
+ this._ellipsoid.lonLatToCartesianRes(new LonLat(p0_lonLat.lon, px_lonLat.lat, p0_lonLat.height), px);
181
+ }
182
+ }
183
+ else {
184
+ dragSimpleRes(Vec3.UNIT_Z, cam.eye, clickDir, e.direction, p0, px);
185
+ }
186
+ this._selectedEntity.setAbsoluteCartesian3v(px);
187
+ this.events.dispatch(this.events.position, px, this._selectedEntity);
188
+ this.events.dispatch(this.events.change, this._selectedEntity);
189
+ };
190
+ this._moveXZ = (e) => {
191
+ if (!this._selectedEntity)
192
+ return;
193
+ let cam = this.renderer.activeCamera;
194
+ let p0 = this._selectedEntityCart;
195
+ let clickDir = cam.unproject(this._clickPos.x, this._clickPos.y);
196
+ let px = new Vec3();
197
+ if (this.planet) {
198
+ let clickCart = new Ray(cam.eye, clickDir).hitSphere(new Sphere(p0.length(), new Vec3()));
199
+ let currCart = new Ray(cam.eye, e.direction).hitSphere(new Sphere(p0.length(), new Vec3()));
200
+ if (!currCart)
201
+ return;
202
+ let rot = Quat.getRotationBetweenVectors(clickCart.normal(), currCart.normal());
203
+ px = rot.mulVec3(p0);
204
+ if (this._ellipsoid) {
205
+ let lonLat = this._ellipsoid.cartesianToLonLat(px);
206
+ let height = this._selectedEntity.getLonLat().height;
207
+ this._ellipsoid.lonLatToCartesianRes(new LonLat(lonLat.lon, lonLat.lat, height), px);
208
+ }
209
+ }
210
+ else {
211
+ let p1 = p0.add(Vec3.UNIT_X), p2 = p0.add(Vec3.UNIT_Z);
212
+ let clickCart = new Vec3(), dragCart = new Vec3();
213
+ if (new Ray(cam.eye, clickDir).hitPlane(p0, p1, p2, clickCart) === Ray.INSIDE) {
214
+ if (new Ray(cam.eye, e.direction).hitPlane(p0, p1, p2, dragCart) === Ray.INSIDE) {
215
+ let dragVec = dragCart.sub(clickCart);
216
+ px = p0.add(dragVec);
217
+ }
218
+ }
219
+ }
220
+ this._selectedEntity.setAbsoluteCartesian3v(px);
221
+ this.events.dispatch(this.events.position, px, this._selectedEntity);
222
+ this.events.dispatch(this.events.change, this._selectedEntity);
223
+ };
224
+ this._moveXY = (e) => {
225
+ console.log("moveXY");
226
+ };
227
+ this._moveZY = (e) => {
228
+ console.log("moveZY");
229
+ };
230
+ this._rotatePitch = (e) => {
231
+ if (!this._selectedEntity)
232
+ return;
233
+ let cam = this.renderer.activeCamera;
234
+ let p0 = this._selectedEntityCart;
235
+ let qp = Quat.xRotation(0);
236
+ let qy = Quat.yRotation(this._selectedEntity.getYaw() * RADIANS);
237
+ let qr = Quat.zRotation(0);
238
+ let qRot = qr.mul(qp).mul(qy).mul(this.getFrameRotation(p0)).conjugate();
239
+ //let norm = qNorthFrame.mulVec3(new Vec3(1, 0, 0)).normalize();
240
+ let norm = qRot.mulVec3(new Vec3(1, 0, 0)).normalize();
241
+ let clickDir = cam.unproject(this._clickPos.x, this._clickPos.y);
242
+ let pl = new Plane(p0, norm);
243
+ let clickCart = new Vec3(), dragCart = new Vec3();
244
+ if (new Ray(cam.eye, clickDir).hitPlane2(pl, clickCart) === Ray.INSIDE) {
245
+ if (new Ray(cam.eye, e.direction).hitPlane2(pl, dragCart) === Ray.INSIDE) {
246
+ let c0 = clickCart.sub(p0).normalize(), c1 = dragCart.sub(p0).normalize();
247
+ let sig = Math.sign(c0.cross(c1).dot(norm));
248
+ let angle = Math.acos(c0.dot(c1)) * DEGREES;
249
+ let deg = this._selectedEntityPitch + sig * angle;
250
+ this._selectedEntity.setAbsolutePitch(deg);
251
+ this.events.dispatch(this.events.pitch, deg, this._selectedEntity);
252
+ this.events.dispatch(this.events.change, this._selectedEntity);
253
+ }
254
+ }
255
+ };
256
+ this._rotateYaw = (e) => {
257
+ if (!this._selectedEntity)
258
+ return;
259
+ let cam = this.renderer.activeCamera;
260
+ let p0 = this._selectedEntityCart;
261
+ let qNorthFrame = this.getFrameRotation(p0).conjugate();
262
+ let norm = qNorthFrame.mulVec3(new Vec3(0, 1, 0)).normalize();
263
+ let clickDir = cam.unproject(this._clickPos.x, this._clickPos.y);
264
+ let pl = new Plane(p0, norm);
265
+ let clickCart = new Vec3(), dragCart = new Vec3();
266
+ if (new Ray(cam.eye, clickDir).hitPlane2(pl, clickCart) === Ray.INSIDE) {
267
+ if (new Ray(cam.eye, e.direction).hitPlane2(pl, dragCart) === Ray.INSIDE) {
268
+ let c0 = clickCart.sub(p0).normalize(), c1 = dragCart.sub(p0).normalize();
269
+ let sig = Math.sign(c1.cross(c0).dot(norm));
270
+ let angle = Math.acos(c0.dot(c1)) * DEGREES;
271
+ let deg = this._selectedEntityYaw + sig * angle;
272
+ this._selectedEntity.setAbsoluteYaw(deg);
273
+ this.events.dispatch(this.events.yaw, deg, this._selectedEntity);
274
+ this.events.dispatch(this.events.change, this._selectedEntity);
275
+ }
276
+ }
277
+ };
278
+ this._rotateRoll = (e) => {
279
+ if (!this._selectedEntity)
280
+ return;
281
+ let cam = this.renderer.activeCamera;
282
+ let p0 = this._selectedEntityCart;
283
+ let qNorthFrame = this.getFrameRotation(p0).conjugate();
284
+ let qp = Quat.xRotation(0);
285
+ let qy = Quat.yRotation(this._selectedEntity.getYaw() * RADIANS);
286
+ let qr = Quat.zRotation(0);
287
+ let qRot = qr.mul(qp).mul(qy).mul(this.getFrameRotation(p0)).conjugate();
288
+ //let norm = qNorthFrame.mulVec3(new Vec3(0, 0, 1)).normalize();
289
+ let norm = qRot.mulVec3(new Vec3(0, 0, 1)).normalize();
290
+ let clickDir = cam.unproject(this._clickPos.x, this._clickPos.y);
291
+ let pl = new Plane(p0, norm);
292
+ let clickCart = new Vec3(), dragCart = new Vec3();
293
+ if (new Ray(cam.eye, clickDir).hitPlane2(pl, clickCart) === Ray.INSIDE) {
294
+ if (new Ray(cam.eye, e.direction).hitPlane2(pl, dragCart) === Ray.INSIDE) {
295
+ let c0 = clickCart.sub(p0).normalize(), c1 = dragCart.sub(p0).normalize();
296
+ let sig = Math.sign(c0.cross(c1).dot(norm));
297
+ let angle = Math.acos(c0.dot(c1)) * DEGREES;
298
+ let deg = this._selectedEntityRoll + sig * angle;
299
+ this._selectedEntity.setAbsoluteRoll(deg);
300
+ this.events.dispatch(this.events.roll, deg, this._selectedEntity);
301
+ this.events.dispatch(this.events.change, this._selectedEntity);
302
+ }
303
+ }
304
+ };
305
+ this._scale = (e) => {
306
+ let scale = 1;
307
+ this.events.dispatch(this.events.scale, scale, this._selectedEntity);
308
+ this.events.dispatch(this.events.change, this._selectedEntity);
309
+ };
310
+ this._scaleX = (e) => {
311
+ };
312
+ this._scaleY = (e) => {
313
+ };
314
+ this._scaleZ = (e) => {
22
315
  };
23
316
  this.events = createEvents(GEOOBJECTEDITORCENE_EVENTS);
24
317
  this._planet = options.planet || null;
25
318
  this._startPos = null;
26
319
  this._startClick = new Vec2();
27
- this._axisLayer = new Vector("axis", {
28
- entities: [],
29
- pickingEnabled: false,
30
- polygonOffsetUnits: -1.0,
31
- relativeToGround: true,
32
- hideInLayerSwitcher: true
320
+ this._axisEntity = new MoveAxisEntity();
321
+ this._planeEntity = new MovePlaneEntity();
322
+ this._rotateEntity = new RotateEntity();
323
+ this._axisTrackEntity = new AxisTrackEntity();
324
+ this._moveLayer = new EntityCollection({
325
+ scaleByDistance: [0.1, MAX32, 0.1],
326
+ useLighting: false,
327
+ pickingScale: [5, 1.1, 5],
328
+ visibility: false,
329
+ depthOrder: 1000,
33
330
  });
34
- this._rotLayer = new Vector("rotation", {
35
- entities: [],
331
+ this._planeLayer = new EntityCollection({
332
+ scaleByDistance: [0.1, MAX32, 0.1],
333
+ useLighting: false,
334
+ visibility: false,
335
+ depthOrder: 1000,
336
+ });
337
+ this._rotateLayer = new EntityCollection({
338
+ useLighting: false,
339
+ visibility: false,
340
+ depthOrder: 1000,
341
+ pickingScale: 5,
342
+ });
343
+ this._selectedEntity = null;
344
+ this._clickPos = new Vec2();
345
+ this._selectedEntityCart = new Vec3();
346
+ this._selectedEntityPitch = 0;
347
+ this._selectedEntityYaw = 0;
348
+ this._selectedEntityRoll = 0;
349
+ this._selectedMove = null;
350
+ this._axisTrackVisibility = false;
351
+ this._axisTrackLayer = new EntityCollection({
352
+ useLighting: false,
353
+ visibility: false,
354
+ pickingScale: 5,
36
355
  pickingEnabled: false,
37
- polygonOffsetUnits: -1.0,
38
- relativeToGround: true,
39
- hideInLayerSwitcher: true
356
+ opacity: 0.6
40
357
  });
358
+ this._ops = {
359
+ move_x: this._moveX,
360
+ move_y: this._moveY,
361
+ move_z: this._moveZ,
362
+ move_xz: this._moveXZ,
363
+ move_xy: this._moveXY,
364
+ move_zy: this._moveZY,
365
+ rotate_pitch: this._rotatePitch,
366
+ rotate_yaw: this._rotateYaw,
367
+ rotate_roll: this._rotateRoll,
368
+ scale: this._scale,
369
+ scale_x: this._scaleX,
370
+ scale_y: this._scaleY,
371
+ scale_z: this._scaleZ,
372
+ };
373
+ }
374
+ get planet() {
375
+ return this._planet;
376
+ }
377
+ bindPlanet(planet) {
378
+ this._planet = planet;
41
379
  }
42
380
  init() {
43
- this._activate();
381
+ this.activate();
44
382
  }
45
383
  onremove() {
46
- this._deactivate();
384
+ this.deactivate();
385
+ }
386
+ _addAxisLayers() {
387
+ this._moveLayer.addTo(this);
388
+ this._planeLayer.addTo(this);
389
+ this._rotateLayer.addTo(this);
390
+ this._axisTrackLayer.addTo(this);
391
+ this._moveLayer.add(this._axisEntity);
392
+ this._moveLayer.events.on("mouseenter", this._onAxisLayerMouseEnter);
393
+ this._moveLayer.events.on("mouseleave", this._onAxisLayerMouseLeave);
394
+ this._moveLayer.events.on("lup", this._onAxisLayerLUp);
395
+ this._moveLayer.events.on("ldown", this._onAxisLayerLDown);
396
+ this._planeLayer.add(this._planeEntity);
397
+ this._planeLayer.events.on("mouseenter", this._onPlaneLayerMouseEnter);
398
+ this._planeLayer.events.on("mouseleave", this._onPlaneLayerMouseLeave);
399
+ this._planeLayer.events.on("lup", this._onPlaneLayerLUp);
400
+ this._planeLayer.events.on("ldown", this._onPlaneLayerLDown);
401
+ this._rotateLayer.add(this._rotateEntity);
402
+ this._rotateLayer.events.on("mouseenter", this._onRotateLayerMouseEnter);
403
+ this._rotateLayer.events.on("mouseleave", this._onRotateLayerMouseLeave);
404
+ this._rotateLayer.events.on("lup", this._onRotateLayerLUp);
405
+ this._rotateLayer.events.on("ldown", this._onRotateLayerLDown);
406
+ this._axisTrackLayer.add(this._axisTrackEntity);
47
407
  }
48
- _activate() {
49
- this.renderer.events.on("lclick", this._onLclick, this);
50
- this.renderer.events.on("mousemove", this._onMouseMove, this);
51
- this.renderer.events.on("lup", this._onLUp, this);
408
+ _navActivate() {
409
+ if (this.renderer) {
410
+ if (this.renderer.controls.mouseNavigation) {
411
+ this.renderer.controls.mouseNavigation.activate();
412
+ }
413
+ if (this.renderer.controls.SimpleNavigation) {
414
+ this.renderer.controls.SimpleNavigation.activate();
415
+ }
416
+ }
52
417
  }
53
- _deactivate() {
418
+ _navDeactivate() {
419
+ if (this.renderer) {
420
+ if (this.renderer.controls.mouseNavigation) {
421
+ this.renderer.controls.mouseNavigation.deactivate();
422
+ }
423
+ if (this.renderer.controls.SimpleNavigation) {
424
+ this.renderer.controls.SimpleNavigation.deactivate();
425
+ }
426
+ }
427
+ }
428
+ _removeAxisLayers() {
429
+ this._moveLayer.remove();
430
+ this._planeLayer.remove();
431
+ this._rotateLayer.remove();
432
+ }
433
+ activate() {
434
+ this.renderer.events.on("lclick", this._onLclick);
435
+ this.renderer.events.on("mousemove", this._onMouseMove);
436
+ this._addAxisLayers();
437
+ }
438
+ deactivate() {
54
439
  this.renderer.events.off("lclick", this._onLclick);
55
440
  this.renderer.events.off("mousemove", this._onMouseMove);
56
- this.renderer.events.off("lup", this._onLUp);
441
+ this._removeAxisLayers();
57
442
  this.clear();
58
443
  }
59
- // protected _onGeoObjectEnter = (e: IMouseState) => {
60
- // e.renderer.handler.canvas!.style.cursor = "pointer";
61
- // }
62
- //
63
- // protected _onGeoObjectLeave = (e: IMouseState) => {
64
- // e.renderer.handler.canvas!.style.cursor = "default";
65
- // }
444
+ _setAxisTrackVisibility(visibility) {
445
+ if (visibility !== this._axisTrackVisibility) {
446
+ this._axisTrackVisibility = visibility;
447
+ this._axisTrackLayer.setVisibility(visibility);
448
+ }
449
+ }
66
450
  setVisibility(visibility) {
451
+ this._moveLayer.setVisibility(visibility);
452
+ this._planeLayer.setVisibility(visibility);
453
+ this._rotateLayer.setVisibility(visibility);
454
+ this.unlockView();
455
+ }
456
+ readyToEdit(entity) {
457
+ return !entity.properties || !entity.properties.noEdit;
458
+ }
459
+ select(entity) {
460
+ if ((!this._selectedEntity || this._selectedEntity && !entity.isEqual(this._selectedEntity)) && this.readyToEdit(entity)) {
461
+ if (this._selectedEntity) {
462
+ this.unselect();
463
+ }
464
+ this._selectedEntity = entity;
465
+ this.renderer && this.renderer.setRelativeCenter();
466
+ this.setVisibility(true);
467
+ this.events.dispatch(this.events.select, this._selectedEntity);
468
+ }
469
+ }
470
+ unselect() {
471
+ this.setVisibility(false);
472
+ let selectedEntity = this._selectedEntity;
473
+ this._selectedEntity = null;
474
+ this.events.dispatch(this.events.unselect, selectedEntity);
67
475
  }
68
476
  clear() {
69
- this._planet.removeLayer(this._axisLayer);
70
- this._planet.removeLayer(this._rotLayer);
477
+ this.removeEntityCollection(this._moveLayer);
478
+ this.removeEntityCollection(this._planeLayer);
479
+ this.removeEntityCollection(this._rotateLayer);
71
480
  }
72
481
  frame() {
482
+ if (this._selectedEntity) {
483
+ let cart = this._selectedEntity.getAbsoluteCartesian();
484
+ this._axisEntity.setCartesian3v(cart);
485
+ this._planeEntity.setCartesian3v(cart);
486
+ this._rotateEntity.setCartesian3v(cart, this._selectedEntity.getAbsoluteYaw());
487
+ this._axisTrackEntity.setCartesian3v(cart);
488
+ }
73
489
  }
74
- get ellipsoid() {
490
+ get _ellipsoid() {
75
491
  return this._planet ? this._planet.ellipsoid : null;
76
492
  }
493
+ getFrameRotation(cartesian) {
494
+ return this._planet ? this._planet.getFrameRotation(cartesian) : super.getFrameRotation(cartesian);
495
+ }
496
+ getSelectedEntity() {
497
+ return this._selectedEntity;
498
+ }
499
+ lockView() {
500
+ if (this.renderer && this._selectedEntity) {
501
+ let camLock = this.renderer.controls.CameraLock;
502
+ camLock.lockView(this._selectedEntity);
503
+ }
504
+ }
505
+ unlockView() {
506
+ if (this.renderer && this._selectedEntity) {
507
+ let camLock = this.renderer.controls.CameraLock;
508
+ if (camLock) {
509
+ camLock.unlockView();
510
+ }
511
+ }
512
+ }
77
513
  }
78
514
  const GEOOBJECTEDITORCENE_EVENTS = [
79
515
  "mousemove",
@@ -100,6 +536,14 @@ const GEOOBJECTEDITORCENE_EVENTS = [
100
536
  "touchend",
101
537
  "doubletouch",
102
538
  "touchleave",
103
- "touchenter"
539
+ "touchenter",
540
+ "select",
541
+ "unselect",
542
+ "change",
543
+ "position",
544
+ "pitch",
545
+ "yaw",
546
+ "roll",
547
+ "scale"
104
548
  ];
105
549
  export { GeoObjectEditorScene };
@@ -0,0 +1,17 @@
1
+ import { Entity, IEntityParams } from "../../entity/Entity";
2
+ import { Vec3 } from "../../math/Vec3";
3
+ import { ArrowEntity } from "./ArrowEntity";
4
+ export interface IAxisEntityParams extends IEntityParams {
5
+ size?: number;
6
+ }
7
+ export declare class MoveAxisEntity extends Entity {
8
+ protected _size: number;
9
+ childEntities: ArrowEntity[];
10
+ constructor(params?: IAxisEntityParams);
11
+ private _init;
12
+ setSize(size: number): void;
13
+ setPitch(a: number): void;
14
+ setYaw(a: number): void;
15
+ setRoll(a: number): void;
16
+ getY(): Vec3;
17
+ }