@openglobus/og 0.20.4 → 0.22.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.
- package/lib/@openglobus/js/Globe.d.ts +5 -1
- package/lib/@openglobus/js/Object3d.d.ts +8 -2
- package/lib/@openglobus/js/camera/Camera.d.ts +2 -0
- package/lib/@openglobus/js/control/geoObjectEditor/GeoObjectEditorScene.d.ts +58 -0
- package/lib/@openglobus/js/ellipsoid/Ellipsoid.d.ts +1 -1
- package/lib/@openglobus/js/ellipsoid/index.d.ts +4 -3
- package/lib/@openglobus/js/ellipsoid/mars.d.ts +6 -0
- package/lib/@openglobus/js/ellipsoid/moon.d.ts +6 -0
- package/lib/@openglobus/js/entity/Entity.d.ts +4 -2
- package/lib/@openglobus/js/entity/EntityCollection.d.ts +3 -2
- package/lib/@openglobus/js/entity/GeoObject.d.ts +6 -1
- package/lib/@openglobus/js/entity/GeoObjectHandler.d.ts +4 -0
- package/lib/@openglobus/js/entity/GeometryHandler.d.ts +3 -2
- package/lib/@openglobus/js/entity/Label.d.ts +14 -0
- package/lib/@openglobus/js/entity/LabelHandler.d.ts +1 -1
- package/lib/@openglobus/js/index.d.ts +3 -3
- package/lib/@openglobus/js/layer/Vector.d.ts +12 -29
- package/lib/@openglobus/js/proj/equi.d.ts +9 -0
- package/lib/@openglobus/js/quadTree/{EPSG4326QuadTreeStrategy.d.ts → EPSG4326/EPSG4326QuadTreeStrategy.d.ts} +2 -2
- package/lib/@openglobus/js/quadTree/EntityCollectionNode.d.ts +5 -13
- package/lib/@openglobus/js/quadTree/EntityCollectionsTreeStrategy.d.ts +25 -0
- package/lib/@openglobus/js/quadTree/QuadTreeStrategy.d.ts +11 -0
- package/lib/@openglobus/js/quadTree/earth/EarthEntityCollectionNodeLonLat.d.ts +18 -0
- package/lib/@openglobus/js/quadTree/earth/EarthEntityCollectionsTreeStrategy.d.ts +19 -0
- package/lib/@openglobus/js/quadTree/earth/EarthQuadTreeStrategy.d.ts +29 -0
- package/lib/@openglobus/js/quadTree/equi/EquiEntityCollectionNodeLonLat.d.ts +17 -0
- package/lib/@openglobus/js/quadTree/equi/EquiEntityCollectionsTreeStrategy.d.ts +17 -0
- package/lib/@openglobus/js/quadTree/equi/EquiQuadTreeStrategy.d.ts +19 -0
- package/lib/@openglobus/js/quadTree/index.d.ts +6 -6
- package/lib/{js/quadTree → @openglobus/js/quadTree/wgs84}/Wgs84QuadTreeStrategy.d.ts +2 -2
- package/lib/@openglobus/js/renderer/Renderer.d.ts +2 -0
- package/lib/@openglobus/js/scene/Planet.d.ts +0 -27
- package/lib/@openglobus/js/segment/Segment.d.ts +0 -1
- package/lib/@openglobus/js/segment/SegmentLonLat.d.ts +0 -4
- package/lib/@openglobus/js/segment/{SegmentLonLatWgs84.d.ts → SegmentLonLatEqui.d.ts} +1 -1
- package/lib/@openglobus/js/terrain/RgbTerrain.d.ts +20 -0
- package/lib/@openglobus/og.esm.js +1 -1
- package/lib/@openglobus/og.esm.js.map +1 -1
- package/lib/@openglobus/og.umd.js +1 -1
- package/lib/@openglobus/og.umd.js.map +1 -1
- package/lib/@openglobus/res/fonts/Ephesis-Regular.json +4648 -0
- package/lib/@openglobus/res/fonts/Ephesis-Regular.ttf.cfg +1282 -0
- package/lib/@openglobus/res/fonts/Ephesis-Regular.ttf.png +0 -0
- package/lib/js/Globe.d.ts +5 -1
- package/lib/js/Globe.js +13 -4
- package/lib/js/Object3d.d.ts +8 -2
- package/lib/js/Object3d.js +64 -6
- package/lib/js/camera/Camera.d.ts +2 -0
- package/lib/js/camera/Camera.js +8 -0
- package/lib/js/control/elevationProfile/ElevationProfileScene.js +2 -0
- package/lib/js/control/geoObjectEditor/GeoObjectEditorScene.d.ts +58 -0
- package/lib/js/control/geoObjectEditor/GeoObjectEditorScene.js +105 -0
- package/lib/js/ellipsoid/Ellipsoid.d.ts +1 -1
- package/lib/js/ellipsoid/Ellipsoid.js +1 -1
- package/lib/js/ellipsoid/index.d.ts +4 -3
- package/lib/js/ellipsoid/index.js +4 -3
- package/lib/js/ellipsoid/mars.d.ts +6 -0
- package/lib/js/ellipsoid/mars.js +6 -0
- package/lib/js/ellipsoid/moon.d.ts +6 -0
- package/lib/js/ellipsoid/moon.js +6 -0
- package/lib/js/entity/Entity.d.ts +4 -2
- package/lib/js/entity/Entity.js +4 -1
- package/lib/js/entity/EntityCollection.d.ts +3 -2
- package/lib/js/entity/EntityCollection.js +26 -2
- package/lib/js/entity/GeoObject.d.ts +6 -1
- package/lib/js/entity/GeoObject.js +9 -0
- package/lib/js/entity/GeoObjectHandler.d.ts +4 -0
- package/lib/js/entity/GeoObjectHandler.js +32 -1
- package/lib/js/entity/GeometryHandler.d.ts +3 -2
- package/lib/js/entity/GeometryHandler.js +58 -0
- package/lib/js/entity/Label.d.ts +14 -0
- package/lib/js/entity/Label.js +24 -4
- package/lib/js/entity/LabelHandler.d.ts +1 -1
- package/lib/js/entity/LabelHandler.js +4 -4
- package/lib/js/entity/Polyline.js +1 -1
- package/lib/js/index.d.ts +3 -3
- package/lib/js/index.js +3 -3
- package/lib/js/layer/Bing.js +1 -0
- package/lib/js/layer/Layer.js +7 -4
- package/lib/js/layer/Vector.d.ts +12 -29
- package/lib/js/layer/Vector.js +38 -161
- package/lib/js/layer/XYZ.js +1 -1
- package/lib/js/proj/equi.d.ts +9 -0
- package/lib/js/proj/equi.js +9 -0
- package/lib/js/quadTree/{EPSG4326QuadTreeStrategy.d.ts → EPSG4326/EPSG4326QuadTreeStrategy.d.ts} +2 -2
- package/lib/js/quadTree/EPSG4326/EPSG4326QuadTreeStrategy.js +16 -0
- package/lib/js/quadTree/EntityCollectionNode.d.ts +5 -13
- package/lib/js/quadTree/EntityCollectionNode.js +18 -83
- package/lib/js/quadTree/EntityCollectionsTreeStrategy.d.ts +25 -0
- package/lib/js/quadTree/EntityCollectionsTreeStrategy.js +49 -0
- package/lib/js/quadTree/Node.js +6 -12
- package/lib/js/quadTree/QuadTreeStrategy.d.ts +11 -0
- package/lib/js/quadTree/QuadTreeStrategy.js +12 -0
- package/lib/js/quadTree/earth/EarthEntityCollectionNodeLonLat.d.ts +18 -0
- package/lib/js/quadTree/earth/EarthEntityCollectionNodeLonLat.js +74 -0
- package/lib/js/quadTree/earth/EarthEntityCollectionsTreeStrategy.d.ts +19 -0
- package/lib/js/quadTree/earth/EarthEntityCollectionsTreeStrategy.js +103 -0
- package/lib/js/quadTree/earth/EarthQuadTreeStrategy.d.ts +29 -0
- package/lib/js/quadTree/{EarthQuadTreeStrategy.js → earth/EarthQuadTreeStrategy.js} +29 -6
- package/lib/js/quadTree/equi/EquiEntityCollectionNodeLonLat.d.ts +17 -0
- package/lib/js/quadTree/equi/EquiEntityCollectionNodeLonLat.js +70 -0
- package/lib/js/quadTree/equi/EquiEntityCollectionsTreeStrategy.d.ts +17 -0
- package/lib/js/quadTree/equi/EquiEntityCollectionsTreeStrategy.js +75 -0
- package/lib/js/quadTree/equi/EquiQuadTreeStrategy.d.ts +19 -0
- package/lib/js/quadTree/equi/EquiQuadTreeStrategy.js +62 -0
- package/lib/js/quadTree/index.d.ts +6 -6
- package/lib/js/quadTree/index.js +6 -6
- package/lib/{@openglobus/js/quadTree → js/quadTree/wgs84}/Wgs84QuadTreeStrategy.d.ts +2 -2
- package/lib/js/quadTree/wgs84/Wgs84QuadTreeStrategy.js +15 -0
- package/lib/js/renderer/Renderer.d.ts +2 -0
- package/lib/js/renderer/Renderer.js +2 -2
- package/lib/js/scene/Planet.d.ts +0 -27
- package/lib/js/scene/Planet.js +2 -9
- package/lib/js/segment/Segment.d.ts +0 -1
- package/lib/js/segment/Segment.js +0 -3
- package/lib/js/segment/SegmentLonLat.d.ts +0 -4
- package/lib/js/segment/SegmentLonLat.js +0 -11
- package/lib/js/segment/{SegmentLonLatWgs84.d.ts → SegmentLonLatEqui.d.ts} +1 -1
- package/lib/js/segment/{SegmentLonLatWgs84.js → SegmentLonLatEqui.js} +3 -1
- package/lib/js/shaders/geoObject.js +10 -5
- package/lib/js/shaders/polyline.js +8 -6
- package/lib/js/terrain/RgbTerrain.d.ts +20 -0
- package/lib/js/terrain/RgbTerrain.js +227 -214
- package/lib/js/utils/PlainSegmentWorker.js +3 -1
- package/lib/js/webgl/Handler.js +1 -1
- package/package.json +15 -15
- package/lib/@openglobus/js/quadTree/EarthQuadTreeStrategy.d.ts +0 -9
- package/lib/@openglobus/js/quadTree/MarsQuadTreeStrategy.d.ts +0 -11
- package/lib/js/quadTree/EPSG4326QuadTreeStrategy.js +0 -16
- package/lib/js/quadTree/EarthQuadTreeStrategy.d.ts +0 -9
- package/lib/js/quadTree/MarsQuadTreeStrategy.d.ts +0 -11
- package/lib/js/quadTree/MarsQuadTreeStrategy.js +0 -43
- package/lib/js/quadTree/Wgs84QuadTreeStrategy.js +0 -15
|
Binary file
|
package/lib/js/Globe.d.ts
CHANGED
|
@@ -45,6 +45,8 @@ export interface IGlobeParams {
|
|
|
45
45
|
fontsSrc?: string;
|
|
46
46
|
resourcesSrc?: string;
|
|
47
47
|
atmosphereParameters?: IAtmosphereParams;
|
|
48
|
+
gamma?: number;
|
|
49
|
+
exposure?: number;
|
|
48
50
|
}
|
|
49
51
|
/**
|
|
50
52
|
* Creates a WebGL context with globe.
|
|
@@ -97,6 +99,8 @@ export interface IGlobeParams {
|
|
|
97
99
|
* @param {boolean} [options.atmosphereEnabled] - Enables atmosphere effect.
|
|
98
100
|
* @param {boolean} [options.transtitionOpacityEnabled] - Enables terrain smooth opacity transition effect.
|
|
99
101
|
* @param {IAtmosphereParams} [options.atmosphereParameters] - Atmosphere model parameters.
|
|
102
|
+
* @param {number} [options.gamma] - Gamma
|
|
103
|
+
* @param {number} [options.exposure] - Exposure
|
|
100
104
|
*/
|
|
101
105
|
declare class Globe {
|
|
102
106
|
static __counter__: number;
|
|
@@ -130,7 +134,7 @@ declare class Globe {
|
|
|
130
134
|
* @public
|
|
131
135
|
*/
|
|
132
136
|
fadeOut(): void;
|
|
133
|
-
attachTo(target: HTMLElement | string): void;
|
|
137
|
+
attachTo(target: HTMLElement | string, isFirst?: boolean): void;
|
|
134
138
|
detach(): void;
|
|
135
139
|
destroy(): void;
|
|
136
140
|
}
|
package/lib/js/Globe.js
CHANGED
|
@@ -68,6 +68,8 @@ const PLANET_NAME_PREFIX = "globus_planet_";
|
|
|
68
68
|
* @param {boolean} [options.atmosphereEnabled] - Enables atmosphere effect.
|
|
69
69
|
* @param {boolean} [options.transtitionOpacityEnabled] - Enables terrain smooth opacity transition effect.
|
|
70
70
|
* @param {IAtmosphereParams} [options.atmosphereParameters] - Atmosphere model parameters.
|
|
71
|
+
* @param {number} [options.gamma] - Gamma
|
|
72
|
+
* @param {number} [options.exposure] - Exposure
|
|
71
73
|
*/
|
|
72
74
|
class Globe {
|
|
73
75
|
constructor(options) {
|
|
@@ -126,7 +128,9 @@ class Globe {
|
|
|
126
128
|
}), {
|
|
127
129
|
autoActivate: false,
|
|
128
130
|
msaa: options.msaa,
|
|
129
|
-
fontsSrc: options.fontsSrc
|
|
131
|
+
fontsSrc: options.fontsSrc,
|
|
132
|
+
gamma: options.gamma,
|
|
133
|
+
exposure: options.exposure,
|
|
130
134
|
});
|
|
131
135
|
this.renderer.div = this.$inner;
|
|
132
136
|
// Skybox
|
|
@@ -150,7 +154,7 @@ class Globe {
|
|
|
150
154
|
maxLoadingRequests: options.maxLoadingRequests,
|
|
151
155
|
atmosphereEnabled: options.atmosphereEnabled,
|
|
152
156
|
transitionOpacityEnabled: options.transitionOpacityEnabled,
|
|
153
|
-
atmosphereParameters: options.atmosphereParameters
|
|
157
|
+
atmosphereParameters: options.atmosphereParameters,
|
|
154
158
|
});
|
|
155
159
|
// Attach terrain provider (can be one object or array)
|
|
156
160
|
if (options.terrain) {
|
|
@@ -239,7 +243,7 @@ class Globe {
|
|
|
239
243
|
fadeOut() {
|
|
240
244
|
this._canvas.style.opacity = "0";
|
|
241
245
|
}
|
|
242
|
-
attachTo(target) {
|
|
246
|
+
attachTo(target, isFirst) {
|
|
243
247
|
this.detach();
|
|
244
248
|
let t;
|
|
245
249
|
if (target instanceof HTMLElement) {
|
|
@@ -250,7 +254,12 @@ class Globe {
|
|
|
250
254
|
}
|
|
251
255
|
if (t) {
|
|
252
256
|
this.$target = t;
|
|
253
|
-
|
|
257
|
+
if (isFirst && this.$target.firstChild) {
|
|
258
|
+
this.$target.insertBefore(this.$inner, this.$target.firstChild);
|
|
259
|
+
}
|
|
260
|
+
else {
|
|
261
|
+
t.appendChild(this.$inner);
|
|
262
|
+
}
|
|
254
263
|
}
|
|
255
264
|
}
|
|
256
265
|
detach() {
|
package/lib/js/Object3d.d.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { TypedArray } from './utils/shared';
|
|
2
2
|
import { NumberArray3, Vec3 } from './math/Vec3';
|
|
3
|
+
import { Mat4 } from "./math/Mat4";
|
|
3
4
|
interface IObject3dParams {
|
|
4
5
|
name?: string;
|
|
5
6
|
vertices?: number[];
|
|
@@ -9,7 +10,7 @@ interface IObject3dParams {
|
|
|
9
10
|
center?: boolean;
|
|
10
11
|
src?: string;
|
|
11
12
|
color?: number[] | TypedArray | string;
|
|
12
|
-
scale?: number;
|
|
13
|
+
scale?: number | Vec3;
|
|
13
14
|
}
|
|
14
15
|
declare class Object3d {
|
|
15
16
|
protected _name: string;
|
|
@@ -27,6 +28,10 @@ declare class Object3d {
|
|
|
27
28
|
protected _normals: number[];
|
|
28
29
|
constructor(data?: IObject3dParams);
|
|
29
30
|
static centering(verts: number[]): void;
|
|
31
|
+
centering(): this;
|
|
32
|
+
applyMat4(m: Mat4): this;
|
|
33
|
+
scale(s: Vec3): this;
|
|
34
|
+
translate(v: Vec3): this;
|
|
30
35
|
get src(): string | null;
|
|
31
36
|
set src(src: string | null);
|
|
32
37
|
get name(): string;
|
|
@@ -35,7 +40,7 @@ declare class Object3d {
|
|
|
35
40
|
get indices(): number[];
|
|
36
41
|
get texCoords(): number[];
|
|
37
42
|
get numVertices(): number;
|
|
38
|
-
static scale(vertices: number[], s:
|
|
43
|
+
static scale(vertices: number[], s: Vec3): void;
|
|
39
44
|
static centroid(vertices: number[]): number[];
|
|
40
45
|
static translate(vertices: number[], v: NumberArray3): void;
|
|
41
46
|
static getNormals(vertices: number[]): number[];
|
|
@@ -60,5 +65,6 @@ declare class Object3d {
|
|
|
60
65
|
static createCube(length?: number, height?: number, depth?: number, xOffset?: number, yOffset?: number, zOffset?: number): Object3d;
|
|
61
66
|
static createArrow(back?: number, height?: number, front?: number): Object3d;
|
|
62
67
|
static loadObj(src: string): Promise<Object3d[]>;
|
|
68
|
+
merge(other: Object3d): Object3d;
|
|
63
69
|
}
|
|
64
70
|
export { Object3d };
|
package/lib/js/Object3d.js
CHANGED
|
@@ -28,7 +28,15 @@ class Object3d {
|
|
|
28
28
|
this._src = data.src || null;
|
|
29
29
|
this.color = getColor(data.color);
|
|
30
30
|
if (data.scale) {
|
|
31
|
-
|
|
31
|
+
let s = data.scale;
|
|
32
|
+
let scale;
|
|
33
|
+
if (typeof s === 'number') {
|
|
34
|
+
scale = new Vec3(s, s, s);
|
|
35
|
+
}
|
|
36
|
+
else {
|
|
37
|
+
scale = s;
|
|
38
|
+
}
|
|
39
|
+
Object3d.scale(this._vertices, scale);
|
|
32
40
|
}
|
|
33
41
|
if (data.indices) {
|
|
34
42
|
this._indices = data.indices;
|
|
@@ -68,6 +76,36 @@ class Object3d {
|
|
|
68
76
|
verts[i + 2] -= c_z;
|
|
69
77
|
}
|
|
70
78
|
}
|
|
79
|
+
centering() {
|
|
80
|
+
Object3d.centering(this._vertices);
|
|
81
|
+
return this;
|
|
82
|
+
}
|
|
83
|
+
applyMat4(m) {
|
|
84
|
+
for (let i = 0, len = this._vertices.length; i < len; i += 3) {
|
|
85
|
+
let v = new Vec3(this._vertices[i], this._vertices[i + 1], this._vertices[i + 2]), n = new Vec3(this._normals[i], this._normals[i + 1], this._normals[i + 2]);
|
|
86
|
+
v = m.mulVec3(v);
|
|
87
|
+
n = m.mulVec3(n);
|
|
88
|
+
this._vertices[i] = v.x;
|
|
89
|
+
this._vertices[i + 1] = v.y;
|
|
90
|
+
this._vertices[i + 2] = v.z;
|
|
91
|
+
this._normals[i] = n.x;
|
|
92
|
+
this._normals[i + 1] = n.y;
|
|
93
|
+
this._normals[i + 2] = n.z;
|
|
94
|
+
}
|
|
95
|
+
return this;
|
|
96
|
+
}
|
|
97
|
+
scale(s) {
|
|
98
|
+
Object3d.scale(this._vertices, s);
|
|
99
|
+
return this;
|
|
100
|
+
}
|
|
101
|
+
translate(v) {
|
|
102
|
+
for (let i = 0, len = this._vertices.length; i < len; i += 3) {
|
|
103
|
+
this._vertices[i] += v.x;
|
|
104
|
+
this._vertices[i + 1] += v.y;
|
|
105
|
+
this._vertices[i + 2] += v.z;
|
|
106
|
+
}
|
|
107
|
+
return this;
|
|
108
|
+
}
|
|
71
109
|
get src() {
|
|
72
110
|
return this._src;
|
|
73
111
|
}
|
|
@@ -93,8 +131,10 @@ class Object3d {
|
|
|
93
131
|
return this._numVertices;
|
|
94
132
|
}
|
|
95
133
|
static scale(vertices, s) {
|
|
96
|
-
for (let i = 0; i < vertices.length; i
|
|
97
|
-
vertices[i] *= s;
|
|
134
|
+
for (let i = 0; i < vertices.length; i += 3) {
|
|
135
|
+
vertices[i] *= s.x;
|
|
136
|
+
vertices[i + 1] *= s.y;
|
|
137
|
+
vertices[i + 2] *= s.z;
|
|
98
138
|
}
|
|
99
139
|
}
|
|
100
140
|
static centroid(vertices) {
|
|
@@ -118,9 +158,9 @@ class Object3d {
|
|
|
118
158
|
}
|
|
119
159
|
static translate(vertices, v) {
|
|
120
160
|
for (let i = 0; i < vertices.length; i += 3) {
|
|
121
|
-
vertices[i]
|
|
122
|
-
vertices[i + 1]
|
|
123
|
-
vertices[i + 2]
|
|
161
|
+
vertices[i] += v[0];
|
|
162
|
+
vertices[i + 1] += v[1];
|
|
163
|
+
vertices[i + 2] += v[2];
|
|
124
164
|
}
|
|
125
165
|
}
|
|
126
166
|
static getNormals(vertices) {
|
|
@@ -370,5 +410,23 @@ class Object3d {
|
|
|
370
410
|
texCoords: textures
|
|
371
411
|
}));
|
|
372
412
|
}
|
|
413
|
+
merge(other) {
|
|
414
|
+
const mergedVertices = [...this._vertices, ...other.vertices];
|
|
415
|
+
const mergedNormals = [...this._normals, ...other.normals];
|
|
416
|
+
const mergedTexCoords = [...this._texCoords, ...other.texCoords];
|
|
417
|
+
const offset = this._vertices.length / 3;
|
|
418
|
+
const mergedIndices = [
|
|
419
|
+
...this._indices,
|
|
420
|
+
...other.indices.map(index => index + offset)
|
|
421
|
+
];
|
|
422
|
+
return new Object3d({
|
|
423
|
+
name: `${this._name}_${other.name}`,
|
|
424
|
+
vertices: mergedVertices,
|
|
425
|
+
texCoords: mergedTexCoords,
|
|
426
|
+
indices: mergedIndices,
|
|
427
|
+
normals: mergedNormals,
|
|
428
|
+
color: this.color
|
|
429
|
+
});
|
|
430
|
+
}
|
|
373
431
|
}
|
|
374
432
|
export { Object3d };
|
|
@@ -5,6 +5,7 @@ import { Mat4, NumberArray16 } from "../math/Mat4";
|
|
|
5
5
|
import { Renderer } from "../renderer/Renderer";
|
|
6
6
|
import { Vec2, NumberArray2 } from "../math/Vec2";
|
|
7
7
|
import { Vec3 } from "../math/Vec3";
|
|
8
|
+
import { Sphere } from "../bv/Sphere";
|
|
8
9
|
type CameraEvents = ["viewchange", "moveend"];
|
|
9
10
|
export interface ICameraParams {
|
|
10
11
|
eye?: Vec3;
|
|
@@ -285,6 +286,7 @@ declare class Camera {
|
|
|
285
286
|
getNormalMatrix(): NumberArray9;
|
|
286
287
|
setCurrentFrustum(k: number): void;
|
|
287
288
|
getCurrentFrustum(): number;
|
|
289
|
+
containsSphere(sphere: Sphere): boolean;
|
|
288
290
|
get frustum(): Frustum;
|
|
289
291
|
/**
|
|
290
292
|
* Returns projection matrix.
|
package/lib/js/camera/Camera.js
CHANGED
|
@@ -414,6 +414,14 @@ class Camera {
|
|
|
414
414
|
getCurrentFrustum() {
|
|
415
415
|
return this.currentFrustumIndex;
|
|
416
416
|
}
|
|
417
|
+
containsSphere(sphere) {
|
|
418
|
+
for (let i = 0; i < this.frustums.length; i++) {
|
|
419
|
+
if (this.frustums[i].containsSphere(sphere)) {
|
|
420
|
+
return true;
|
|
421
|
+
}
|
|
422
|
+
}
|
|
423
|
+
return false;
|
|
424
|
+
}
|
|
417
425
|
get frustum() {
|
|
418
426
|
return this.frustums[this.currentFrustumIndex];
|
|
419
427
|
}
|
|
@@ -24,6 +24,7 @@ const POINTER_BILLBOARD_OPTIONS = {
|
|
|
24
24
|
};
|
|
25
25
|
const POINTER_LABEL_OPTIONS = {
|
|
26
26
|
text: "",
|
|
27
|
+
face: "arial",
|
|
27
28
|
size: 10.5,
|
|
28
29
|
color: "rgba(455,455,455,1.0)",
|
|
29
30
|
outlineColor: "rgba(0,0,0,0.34)",
|
|
@@ -32,6 +33,7 @@ const POINTER_LABEL_OPTIONS = {
|
|
|
32
33
|
offset: [5, 15, -5]
|
|
33
34
|
};
|
|
34
35
|
const LABEL_OPTIONS = {
|
|
36
|
+
face: "arial",
|
|
35
37
|
text: "",
|
|
36
38
|
size: 10.5,
|
|
37
39
|
color: "rgba(455,455,455,1.0)",
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import { EventsHandler } from '../../Events';
|
|
2
|
+
import { Planet } from "../../scene/Planet";
|
|
3
|
+
import { RenderNode } from '../../scene/RenderNode';
|
|
4
|
+
import { Vector } from '../../layer/Vector';
|
|
5
|
+
import { Vec2 } from '../../math/Vec2';
|
|
6
|
+
import { IMouseState } from "../../renderer/RendererEvents";
|
|
7
|
+
import { Ellipsoid } from "../../ellipsoid/Ellipsoid";
|
|
8
|
+
export interface IGeoObjectEditorSceneParams {
|
|
9
|
+
planet?: Planet;
|
|
10
|
+
}
|
|
11
|
+
type GeoObjectSceneEventsList = [
|
|
12
|
+
"mousemove",
|
|
13
|
+
"mouseenter",
|
|
14
|
+
"mouseleave",
|
|
15
|
+
"lclick",
|
|
16
|
+
"rclick",
|
|
17
|
+
"mclick",
|
|
18
|
+
"ldblclick",
|
|
19
|
+
"rdblclick",
|
|
20
|
+
"mdblclick",
|
|
21
|
+
"lup",
|
|
22
|
+
"rup",
|
|
23
|
+
"mup",
|
|
24
|
+
"ldown",
|
|
25
|
+
"rdown",
|
|
26
|
+
"mdown",
|
|
27
|
+
"lhold",
|
|
28
|
+
"rhold",
|
|
29
|
+
"mhold",
|
|
30
|
+
"mousewheel",
|
|
31
|
+
"touchmove",
|
|
32
|
+
"touchstart",
|
|
33
|
+
"touchend",
|
|
34
|
+
"doubletouch",
|
|
35
|
+
"touchleave",
|
|
36
|
+
"touchenter"
|
|
37
|
+
];
|
|
38
|
+
declare class GeoObjectEditorScene extends RenderNode {
|
|
39
|
+
events: EventsHandler<GeoObjectSceneEventsList>;
|
|
40
|
+
protected _planet: Planet | null;
|
|
41
|
+
protected _startPos: Vec2 | null;
|
|
42
|
+
protected _startClick: Vec2;
|
|
43
|
+
protected _axisLayer: Vector;
|
|
44
|
+
protected _rotLayer: Vector;
|
|
45
|
+
constructor(options?: IGeoObjectEditorSceneParams);
|
|
46
|
+
init(): void;
|
|
47
|
+
onremove(): void;
|
|
48
|
+
_activate(): void;
|
|
49
|
+
protected _deactivate(): void;
|
|
50
|
+
protected _onLUp: () => void;
|
|
51
|
+
setVisibility(visibility: boolean): void;
|
|
52
|
+
protected _onLclick: (e: IMouseState) => void;
|
|
53
|
+
protected _onMouseMove: (e: IMouseState) => void;
|
|
54
|
+
clear(): void;
|
|
55
|
+
frame(): void;
|
|
56
|
+
get ellipsoid(): Ellipsoid | null;
|
|
57
|
+
}
|
|
58
|
+
export { GeoObjectEditorScene };
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
import { createEvents } from '../../Events';
|
|
2
|
+
import { Object3d } from '../../Object3d';
|
|
3
|
+
import { RenderNode } from '../../scene/RenderNode';
|
|
4
|
+
import { Vector } from '../../layer/Vector';
|
|
5
|
+
import { Vec2 } from '../../math/Vec2';
|
|
6
|
+
let obj3d = Object3d.createCylinder(1.1, 0, 2.7, 20, 1, true, false, 0, 0, 0);
|
|
7
|
+
class GeoObjectEditorScene extends RenderNode {
|
|
8
|
+
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();
|
|
18
|
+
};
|
|
19
|
+
this._onLclick = (e) => {
|
|
20
|
+
};
|
|
21
|
+
this._onMouseMove = (e) => {
|
|
22
|
+
};
|
|
23
|
+
this.events = createEvents(GEOOBJECTEDITORCENE_EVENTS);
|
|
24
|
+
this._planet = options.planet || null;
|
|
25
|
+
this._startPos = null;
|
|
26
|
+
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
|
|
33
|
+
});
|
|
34
|
+
this._rotLayer = new Vector("rotation", {
|
|
35
|
+
entities: [],
|
|
36
|
+
pickingEnabled: false,
|
|
37
|
+
polygonOffsetUnits: -1.0,
|
|
38
|
+
relativeToGround: true,
|
|
39
|
+
hideInLayerSwitcher: true
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
init() {
|
|
43
|
+
this._activate();
|
|
44
|
+
}
|
|
45
|
+
onremove() {
|
|
46
|
+
this._deactivate();
|
|
47
|
+
}
|
|
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);
|
|
52
|
+
}
|
|
53
|
+
_deactivate() {
|
|
54
|
+
this.renderer.events.off("lclick", this._onLclick);
|
|
55
|
+
this.renderer.events.off("mousemove", this._onMouseMove);
|
|
56
|
+
this.renderer.events.off("lup", this._onLUp);
|
|
57
|
+
this.clear();
|
|
58
|
+
}
|
|
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
|
+
// }
|
|
66
|
+
setVisibility(visibility) {
|
|
67
|
+
}
|
|
68
|
+
clear() {
|
|
69
|
+
this._planet.removeLayer(this._axisLayer);
|
|
70
|
+
this._planet.removeLayer(this._rotLayer);
|
|
71
|
+
}
|
|
72
|
+
frame() {
|
|
73
|
+
}
|
|
74
|
+
get ellipsoid() {
|
|
75
|
+
return this._planet ? this._planet.ellipsoid : null;
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
const GEOOBJECTEDITORCENE_EVENTS = [
|
|
79
|
+
"mousemove",
|
|
80
|
+
"mouseenter",
|
|
81
|
+
"mouseleave",
|
|
82
|
+
"lclick",
|
|
83
|
+
"rclick",
|
|
84
|
+
"mclick",
|
|
85
|
+
"ldblclick",
|
|
86
|
+
"rdblclick",
|
|
87
|
+
"mdblclick",
|
|
88
|
+
"lup",
|
|
89
|
+
"rup",
|
|
90
|
+
"mup",
|
|
91
|
+
"ldown",
|
|
92
|
+
"rdown",
|
|
93
|
+
"mdown",
|
|
94
|
+
"lhold",
|
|
95
|
+
"rhold",
|
|
96
|
+
"mhold",
|
|
97
|
+
"mousewheel",
|
|
98
|
+
"touchmove",
|
|
99
|
+
"touchstart",
|
|
100
|
+
"touchend",
|
|
101
|
+
"doubletouch",
|
|
102
|
+
"touchleave",
|
|
103
|
+
"touchenter"
|
|
104
|
+
];
|
|
105
|
+
export { GeoObjectEditorScene };
|
|
@@ -98,7 +98,7 @@ declare class Ellipsoid {
|
|
|
98
98
|
*/
|
|
99
99
|
lonLatToCartesianRes(lonlat: LonLat, res: Vec3): Vec3;
|
|
100
100
|
/**
|
|
101
|
-
* Gets cartesian ECEF from
|
|
101
|
+
* Gets cartesian ECEF 3d coordinates from geodetic coordinates.
|
|
102
102
|
* @public
|
|
103
103
|
* @param {Number} lon - Longitude.
|
|
104
104
|
* @param {Number} lat - Latitude.
|
|
@@ -126,7 +126,7 @@ class Ellipsoid {
|
|
|
126
126
|
return this.geodeticToCartesian(lonlat.lon, lonlat.lat, lonlat.height, res);
|
|
127
127
|
}
|
|
128
128
|
/**
|
|
129
|
-
* Gets cartesian ECEF from
|
|
129
|
+
* Gets cartesian ECEF 3d coordinates from geodetic coordinates.
|
|
130
130
|
* @public
|
|
131
131
|
* @param {Number} lon - Longitude.
|
|
132
132
|
* @param {Number} lat - Latitude.
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
export
|
|
1
|
+
export * from './Ellipsoid';
|
|
2
|
+
export * from './wgs84';
|
|
3
|
+
export * from './mars';
|
|
4
|
+
export * from './moon';
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
export
|
|
1
|
+
export * from './Ellipsoid';
|
|
2
|
+
export * from './wgs84';
|
|
3
|
+
export * from './mars';
|
|
4
|
+
export * from './moon';
|
|
@@ -10,7 +10,7 @@ import { NumberArray2 } from "../math/Vec2";
|
|
|
10
10
|
import { IPointCloudParams, PointCloud } from "./PointCloud";
|
|
11
11
|
import { IPolylineParams, Polyline } from "./Polyline";
|
|
12
12
|
import { IRayParams, Ray } from "./Ray";
|
|
13
|
-
import { Strip } from "./Strip";
|
|
13
|
+
import { Strip, IStripParams } from "./Strip";
|
|
14
14
|
import { Vector, VectorEventsType } from "../layer/Vector";
|
|
15
15
|
import { EntityCollectionNode } from "../quadTree/EntityCollectionNode";
|
|
16
16
|
export interface IEntityParams {
|
|
@@ -27,7 +27,8 @@ export interface IEntityParams {
|
|
|
27
27
|
pointCloud?: PointCloud | IPointCloudParams;
|
|
28
28
|
geometry?: Geometry | IGeometryParams;
|
|
29
29
|
geoObject?: GeoObject | IGeoObjectParams;
|
|
30
|
-
strip?: Strip;
|
|
30
|
+
strip?: Strip | IStripParams;
|
|
31
|
+
independentPicking?: boolean;
|
|
31
32
|
}
|
|
32
33
|
/**
|
|
33
34
|
* Entity instances aggregate multiple forms of visualization into a single high-level object.
|
|
@@ -134,6 +135,7 @@ declare class Entity {
|
|
|
134
135
|
* @type {Vec3}
|
|
135
136
|
*/
|
|
136
137
|
_pickingColor: Vec3;
|
|
138
|
+
_independentPicking: boolean;
|
|
137
139
|
protected _featureConstructorArray: Record<string, [any, Function]>;
|
|
138
140
|
/**
|
|
139
141
|
* Billboard entity.
|
package/lib/js/entity/Entity.js
CHANGED
|
@@ -48,6 +48,7 @@ class Entity {
|
|
|
48
48
|
this._layer = null;
|
|
49
49
|
this._layerIndex = -1;
|
|
50
50
|
this._pickingColor = new Vec3(0, 0, 0);
|
|
51
|
+
this._independentPicking = options.independentPicking || false;
|
|
51
52
|
this._featureConstructorArray = {
|
|
52
53
|
billboard: [Billboard, this.setBillboard],
|
|
53
54
|
label: [Label, this.setLabel],
|
|
@@ -443,7 +444,9 @@ class Entity {
|
|
|
443
444
|
*/
|
|
444
445
|
appendChild(entity) {
|
|
445
446
|
entity._entityCollection = this._entityCollection;
|
|
446
|
-
entity.
|
|
447
|
+
if (!entity._independentPicking) {
|
|
448
|
+
entity._pickingColor = this._pickingColor;
|
|
449
|
+
}
|
|
447
450
|
entity.parent = this;
|
|
448
451
|
this.childrenNodes.push(entity);
|
|
449
452
|
this._entityCollection && this._entityCollection.appendChildEntity(entity);
|
|
@@ -19,7 +19,7 @@ interface IEntityCollectionParams {
|
|
|
19
19
|
labelMaxLetters?: number;
|
|
20
20
|
pickingEnabled?: boolean;
|
|
21
21
|
scaleByDistance?: NumberArray3;
|
|
22
|
-
pickingScale?: number;
|
|
22
|
+
pickingScale?: number | NumberArray3;
|
|
23
23
|
opacity?: number;
|
|
24
24
|
useLighting?: boolean;
|
|
25
25
|
entities?: Entity[];
|
|
@@ -160,7 +160,7 @@ declare class EntityCollection {
|
|
|
160
160
|
* @type {Array.<number>} - (exactly 3 entries)
|
|
161
161
|
*/
|
|
162
162
|
scaleByDistance: NumberArray3;
|
|
163
|
-
pickingScale:
|
|
163
|
+
pickingScale: Float32Array;
|
|
164
164
|
/**
|
|
165
165
|
* Global opacity.
|
|
166
166
|
* @protected
|
|
@@ -187,6 +187,7 @@ declare class EntityCollection {
|
|
|
187
187
|
_quadNode?: EntityCollectionNode;
|
|
188
188
|
_useLighting: number;
|
|
189
189
|
constructor(options?: IEntityCollectionParams);
|
|
190
|
+
isEmpty(): boolean;
|
|
190
191
|
get id(): number;
|
|
191
192
|
get useLighting(): boolean;
|
|
192
193
|
set useLighting(f: boolean);
|
|
@@ -75,7 +75,20 @@ class EntityCollection {
|
|
|
75
75
|
}
|
|
76
76
|
this._entities = [];
|
|
77
77
|
this.scaleByDistance = options.scaleByDistance || [math.MAX32, math.MAX32, math.MAX32];
|
|
78
|
-
|
|
78
|
+
let pickingScale = new Float32Array([1.0, 1.0, 1.0]);
|
|
79
|
+
if (options.pickingScale !== undefined) {
|
|
80
|
+
if (options.pickingScale instanceof Array) {
|
|
81
|
+
pickingScale[0] = options.pickingScale[0] || pickingScale[0];
|
|
82
|
+
pickingScale[1] = options.pickingScale[1] || pickingScale[1];
|
|
83
|
+
pickingScale[2] = options.pickingScale[2] || pickingScale[2];
|
|
84
|
+
}
|
|
85
|
+
else if (typeof options.pickingScale === 'number') {
|
|
86
|
+
pickingScale[0] = options.pickingScale;
|
|
87
|
+
pickingScale[1] = options.pickingScale;
|
|
88
|
+
pickingScale[2] = options.pickingScale;
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
this.pickingScale = pickingScale;
|
|
79
92
|
this._opacity = options.opacity == undefined ? 1.0 : options.opacity;
|
|
80
93
|
this._fadingOpacity = this._opacity;
|
|
81
94
|
this.events = this.rendererEvents = createEvents(ENTITYCOLLECTION_EVENTS, this);
|
|
@@ -85,6 +98,9 @@ class EntityCollection {
|
|
|
85
98
|
this.addEntities(options.entities);
|
|
86
99
|
}
|
|
87
100
|
}
|
|
101
|
+
isEmpty() {
|
|
102
|
+
return this._entities.length == 0;
|
|
103
|
+
}
|
|
88
104
|
get id() {
|
|
89
105
|
return this.__id;
|
|
90
106
|
}
|
|
@@ -176,10 +192,18 @@ class EntityCollection {
|
|
|
176
192
|
//geoObject
|
|
177
193
|
entity.geoObject && this.geoObjectHandler.add(entity.geoObject);
|
|
178
194
|
this.events.dispatch(this.events.entityadd, entity);
|
|
195
|
+
let rn = this.renderNode;
|
|
179
196
|
for (let i = 0; i < entity.childrenNodes.length; i++) {
|
|
180
197
|
entity.childrenNodes[i]._entityCollection = this;
|
|
181
198
|
entity.childrenNodes[i]._entityCollectionIndex = entity._entityCollectionIndex;
|
|
182
|
-
entity.childrenNodes[i].
|
|
199
|
+
if (entity.childrenNodes[i]._independentPicking) {
|
|
200
|
+
if (rn) {
|
|
201
|
+
rn.renderer && rn.renderer.assignPickingColor(entity.childrenNodes[i]);
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
else {
|
|
205
|
+
entity.childrenNodes[i]._pickingColor = entity._pickingColor;
|
|
206
|
+
}
|
|
183
207
|
this._addRecursively(entity.childrenNodes[i]);
|
|
184
208
|
}
|
|
185
209
|
}
|
|
@@ -13,7 +13,8 @@ export interface IGeoObjectParams {
|
|
|
13
13
|
pitch?: number;
|
|
14
14
|
yaw?: number;
|
|
15
15
|
roll?: number;
|
|
16
|
-
scale?: number | Vec3;
|
|
16
|
+
scale?: number | Vec3 | NumberArray3;
|
|
17
|
+
translate?: Vec3 | NumberArray3;
|
|
17
18
|
color?: Vec4 | NumberArray4 | string;
|
|
18
19
|
visibility?: boolean;
|
|
19
20
|
}
|
|
@@ -49,6 +50,7 @@ declare class GeoObject {
|
|
|
49
50
|
protected _yawRad: number;
|
|
50
51
|
protected _rollRad: number;
|
|
51
52
|
protected _scale: Vec3;
|
|
53
|
+
protected _translate: Vec3;
|
|
52
54
|
/**
|
|
53
55
|
* RGBA color.
|
|
54
56
|
* @public
|
|
@@ -66,6 +68,7 @@ declare class GeoObject {
|
|
|
66
68
|
protected _qNorthFrame: Quat;
|
|
67
69
|
private _textureSrc?;
|
|
68
70
|
_objectSrc?: string;
|
|
71
|
+
protected _children: GeoObject[];
|
|
69
72
|
constructor(options: IGeoObjectParams);
|
|
70
73
|
get tag(): string;
|
|
71
74
|
getPosition(): Vec3;
|
|
@@ -139,6 +142,8 @@ declare class GeoObject {
|
|
|
139
142
|
setScale(scale: number): void;
|
|
140
143
|
setScale3v(scale: Vec3): void;
|
|
141
144
|
getScale(): Vec3;
|
|
145
|
+
setTranslate3v(translate: Vec3): void;
|
|
146
|
+
getTranslate(): Vec3;
|
|
142
147
|
/**
|
|
143
148
|
* Removes geo object from handler.
|
|
144
149
|
* @public
|