@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.
- package/css/og.css +137 -1
- package/lib/@openglobus/js/Object3d.d.ts +20 -10
- package/lib/@openglobus/js/camera/Camera.d.ts +9 -0
- package/lib/@openglobus/js/camera/Frustum.d.ts +3 -0
- package/lib/@openglobus/js/control/CameraLock.d.ts +38 -0
- package/lib/@openglobus/js/control/SimpleNavigation.d.ts +27 -10
- package/lib/@openglobus/js/control/geoObjectEditor/ArrowEntity.d.ts +15 -0
- package/lib/@openglobus/js/control/geoObjectEditor/AxisTrackEntity.d.ts +9 -0
- package/lib/@openglobus/js/control/geoObjectEditor/GeoObjectEditor.d.ts +13 -0
- package/lib/@openglobus/js/control/geoObjectEditor/GeoObjectEditorDialog.d.ts +69 -0
- package/lib/@openglobus/js/control/geoObjectEditor/GeoObjectEditorScene.d.ts +78 -9
- package/lib/@openglobus/js/control/geoObjectEditor/MoveAxisEntity.d.ts +17 -0
- package/lib/@openglobus/js/control/geoObjectEditor/MovePlaneEntity.d.ts +7 -0
- package/lib/@openglobus/js/control/geoObjectEditor/RotateEntity.d.ts +9 -0
- package/lib/@openglobus/js/control/geoObjectEditor/colors.d.ts +8 -0
- package/lib/@openglobus/js/control/index.d.ts +2 -0
- package/lib/@openglobus/js/entity/Entity.d.ts +278 -19
- package/lib/@openglobus/js/entity/EntityCollection.d.ts +8 -9
- package/lib/@openglobus/js/entity/GeoObject.d.ts +141 -36
- package/lib/@openglobus/js/entity/GeoObjectHandler.d.ts +39 -63
- package/lib/@openglobus/js/entity/InstanceData.d.ts +76 -0
- package/lib/@openglobus/js/entity/Polyline.d.ts +19 -6
- package/lib/@openglobus/js/entity/PolylineHandler.d.ts +7 -0
- package/lib/@openglobus/js/index.d.ts +2 -1
- package/lib/@openglobus/js/layer/Vector.d.ts +4 -0
- package/lib/@openglobus/js/light/LightSource.d.ts +1 -139
- package/lib/@openglobus/js/math/Quat.d.ts +46 -33
- package/lib/@openglobus/js/math/Ray.d.ts +10 -4
- package/lib/@openglobus/js/math/Vec3.d.ts +15 -0
- package/lib/@openglobus/js/math.d.ts +2 -2
- package/lib/@openglobus/js/quadTree/EntityCollectionNode.d.ts +2 -2
- package/lib/@openglobus/js/quadTree/Node.d.ts +1 -1
- package/lib/@openglobus/js/quadTree/earth/EarthEntityCollectionNodeLonLat.d.ts +1 -1
- package/lib/@openglobus/js/quadTree/equi/EquiEntityCollectionNodeLonLat.d.ts +1 -1
- package/lib/@openglobus/js/renderer/Renderer.d.ts +63 -44
- package/lib/@openglobus/js/renderer/RendererEvents.d.ts +1 -0
- package/lib/@openglobus/js/scene/Planet.d.ts +11 -7
- package/lib/@openglobus/js/scene/RenderNode.d.ts +10 -25
- package/lib/@openglobus/js/shaders/drawnode.d.ts +1 -0
- package/lib/@openglobus/js/shaders/geoObject.d.ts +1 -0
- package/lib/@openglobus/js/shaders/utils.d.ts +1 -1
- package/lib/@openglobus/js/ui/Checkbox.d.ts +31 -0
- package/lib/@openglobus/js/ui/Dialog.d.ts +3 -0
- package/lib/@openglobus/js/ui/Input.d.ts +32 -0
- package/lib/@openglobus/js/ui/View.d.ts +3 -1
- package/lib/@openglobus/js/utils/objParser.d.ts +44 -12
- package/lib/@openglobus/js/utils/shared.d.ts +22 -0
- package/lib/@openglobus/js/webgl/BaseFramebuffer.d.ts +0 -1
- package/lib/@openglobus/js/webgl/Framebuffer.d.ts +35 -8
- package/lib/@openglobus/js/webgl/Handler.d.ts +1 -0
- package/lib/@openglobus/og.css +1 -1
- 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/js/Object3d.d.ts +20 -10
- package/lib/js/Object3d.js +124 -48
- package/lib/js/camera/Camera.d.ts +9 -0
- package/lib/js/camera/Camera.js +27 -1
- package/lib/js/camera/Frustum.d.ts +3 -0
- package/lib/js/camera/Frustum.js +7 -0
- package/lib/js/control/Atmosphere.js +10 -6
- package/lib/js/control/CameraLock.d.ts +38 -0
- package/lib/js/control/CameraLock.js +216 -0
- package/lib/js/control/Control.js +1 -1
- package/lib/js/control/DebugInfo.js +13 -3
- package/lib/js/control/KeyboardNavigation.js +1 -1
- package/lib/js/control/ScaleControl.js +9 -3
- package/lib/js/control/SimpleNavigation.d.ts +27 -10
- package/lib/js/control/SimpleNavigation.js +148 -49
- package/lib/js/control/Sun.js +1 -1
- package/lib/js/control/elevationProfile/ElevationProfileScene.js +4 -4
- package/lib/js/control/geoObjectEditor/ArrowEntity.d.ts +15 -0
- package/lib/js/control/geoObjectEditor/ArrowEntity.js +59 -0
- package/lib/js/control/geoObjectEditor/AxisTrackEntity.d.ts +9 -0
- package/lib/js/control/geoObjectEditor/AxisTrackEntity.js +93 -0
- package/lib/js/control/geoObjectEditor/GeoObjectEditor.d.ts +13 -0
- package/lib/js/control/geoObjectEditor/GeoObjectEditor.js +30 -0
- package/lib/js/control/geoObjectEditor/GeoObjectEditorDialog.d.ts +69 -0
- package/lib/js/control/geoObjectEditor/GeoObjectEditorDialog.js +502 -0
- package/lib/js/control/geoObjectEditor/GeoObjectEditorScene.d.ts +78 -9
- package/lib/js/control/geoObjectEditor/GeoObjectEditorScene.js +487 -43
- package/lib/js/control/geoObjectEditor/MoveAxisEntity.d.ts +17 -0
- package/lib/js/control/geoObjectEditor/MoveAxisEntity.js +106 -0
- package/lib/js/control/geoObjectEditor/MovePlaneEntity.d.ts +7 -0
- package/lib/js/control/geoObjectEditor/MovePlaneEntity.js +34 -0
- package/lib/js/control/geoObjectEditor/RotateEntity.d.ts +9 -0
- package/lib/js/control/geoObjectEditor/RotateEntity.js +105 -0
- package/lib/js/control/geoObjectEditor/colors.d.ts +8 -0
- package/lib/js/control/geoObjectEditor/colors.js +8 -0
- package/lib/js/control/index.d.ts +2 -0
- package/lib/js/control/index.js +2 -0
- package/lib/js/control/timeline/TimelineControl.js +2 -0
- package/lib/js/entity/Entity.d.ts +278 -19
- package/lib/js/entity/Entity.js +483 -63
- package/lib/js/entity/EntityCollection.d.ts +8 -9
- package/lib/js/entity/EntityCollection.js +48 -45
- package/lib/js/entity/GeoObject.d.ts +141 -36
- package/lib/js/entity/GeoObject.js +153 -90
- package/lib/js/entity/GeoObjectHandler.d.ts +39 -63
- package/lib/js/entity/GeoObjectHandler.js +198 -295
- package/lib/js/entity/InstanceData.d.ts +76 -0
- package/lib/js/entity/InstanceData.js +344 -0
- package/lib/js/entity/Polyline.d.ts +19 -6
- package/lib/js/entity/Polyline.js +76 -36
- package/lib/js/entity/PolylineHandler.d.ts +7 -0
- package/lib/js/entity/PolylineHandler.js +26 -1
- package/lib/js/index.d.ts +2 -1
- package/lib/js/index.js +2 -1
- package/lib/js/layer/Bing.js +2 -2
- package/lib/js/layer/Vector.d.ts +4 -0
- package/lib/js/layer/Vector.js +16 -0
- package/lib/js/light/LightSource.d.ts +1 -139
- package/lib/js/light/LightSource.js +21 -227
- package/lib/js/math/Quat.d.ts +46 -33
- package/lib/js/math/Quat.js +91 -90
- package/lib/js/math/Ray.d.ts +10 -4
- package/lib/js/math/Ray.js +20 -4
- package/lib/js/math/Vec3.d.ts +15 -0
- package/lib/js/math/Vec3.js +30 -1
- package/lib/js/math.d.ts +2 -2
- package/lib/js/math.js +3 -3
- package/lib/js/quadTree/EntityCollectionNode.d.ts +2 -2
- package/lib/js/quadTree/EntityCollectionNode.js +8 -8
- package/lib/js/quadTree/Node.d.ts +1 -1
- package/lib/js/quadTree/Node.js +2 -2
- package/lib/js/quadTree/QuadTreeStrategy.js +1 -1
- package/lib/js/quadTree/earth/EarthEntityCollectionNodeLonLat.d.ts +1 -1
- package/lib/js/quadTree/earth/EarthEntityCollectionNodeLonLat.js +2 -2
- package/lib/js/quadTree/equi/EquiEntityCollectionNodeLonLat.d.ts +1 -1
- package/lib/js/quadTree/equi/EquiEntityCollectionNodeLonLat.js +2 -2
- package/lib/js/renderer/Renderer.d.ts +63 -44
- package/lib/js/renderer/Renderer.js +260 -263
- package/lib/js/renderer/RendererEvents.d.ts +1 -0
- package/lib/js/renderer/RendererEvents.js +2 -1
- package/lib/js/scene/Planet.d.ts +11 -7
- package/lib/js/scene/Planet.js +109 -87
- package/lib/js/scene/RenderNode.d.ts +10 -25
- package/lib/js/scene/RenderNode.js +70 -58
- package/lib/js/shaders/depth.js +2 -5
- package/lib/js/shaders/drawnode.d.ts +1 -0
- package/lib/js/shaders/drawnode.js +51 -52
- package/lib/js/shaders/geoObject.d.ts +1 -0
- package/lib/js/shaders/geoObject.js +154 -91
- package/lib/js/shaders/polyline.js +68 -51
- package/lib/js/shaders/utils.d.ts +1 -1
- package/lib/js/shaders/utils.js +11 -0
- package/lib/js/ui/Checkbox.d.ts +31 -0
- package/lib/js/ui/Checkbox.js +110 -0
- package/lib/js/ui/Color.js +2 -1
- package/lib/js/ui/Dialog.d.ts +3 -0
- package/lib/js/ui/Dialog.js +20 -0
- package/lib/js/ui/Input.d.ts +32 -0
- package/lib/js/ui/Input.js +107 -0
- package/lib/js/ui/View.d.ts +3 -1
- package/lib/js/ui/View.js +6 -0
- package/lib/js/utils/objParser.d.ts +44 -12
- package/lib/js/utils/objParser.js +241 -149
- package/lib/js/utils/shared.d.ts +22 -0
- package/lib/js/utils/shared.js +34 -0
- package/lib/js/webgl/BaseFramebuffer.d.ts +0 -1
- package/lib/js/webgl/Framebuffer.d.ts +35 -8
- package/lib/js/webgl/Framebuffer.js +136 -29
- package/lib/js/webgl/Handler.d.ts +1 -0
- package/lib/js/webgl/Handler.js +11 -1
- package/lib/js/webgl/Program.js +0 -8
- package/package.json +4 -2
|
@@ -20,8 +20,10 @@ import { Quat } from "../math/Quat";
|
|
|
20
20
|
import { QuadTreeStrategy } from "../quadTree/QuadTreeStrategy";
|
|
21
21
|
import { Ray } from "../math/Ray";
|
|
22
22
|
import { RenderNode } from "./RenderNode";
|
|
23
|
+
import { Sun } from "../control/Sun";
|
|
23
24
|
import { TerrainWorker } from "../utils/TerrainWorker";
|
|
24
25
|
import { Vec2, Vec3, NumberArray2, NumberArray3, NumberArray4 } from "../math/index";
|
|
26
|
+
import { Vector } from "../layer/Vector";
|
|
25
27
|
import { VectorTileCreator } from "../utils/VectorTileCreator";
|
|
26
28
|
import { WebGLBufferExt, WebGLTextureExt, IDefaultTextureParams } from "../webgl/Handler";
|
|
27
29
|
import { Program } from "../webgl/Program";
|
|
@@ -122,14 +124,15 @@ export declare class Planet extends RenderNode {
|
|
|
122
124
|
* @protected
|
|
123
125
|
* @type {Array.<Layer>}
|
|
124
126
|
*/
|
|
125
|
-
protected visibleVectorLayers:
|
|
127
|
+
protected visibleVectorLayers: Vector[];
|
|
128
|
+
protected _visibleVectorLayersByDepthOrder: Vector[][];
|
|
126
129
|
protected _visibleTileLayerSlices: Layer[][];
|
|
127
130
|
/**
|
|
128
131
|
* Vector layers visible nodes with collections.
|
|
129
132
|
* @protected
|
|
130
|
-
* @type {
|
|
133
|
+
* @type {EntityCollection[][]}
|
|
131
134
|
*/
|
|
132
|
-
protected
|
|
135
|
+
protected _visibleEntityCollections: EntityCollection[][];
|
|
133
136
|
/**
|
|
134
137
|
* There is only one base layer on the globe when layer.isBaseLayer is true.
|
|
135
138
|
* @public
|
|
@@ -184,6 +187,7 @@ export declare class Planet extends RenderNode {
|
|
|
184
187
|
_renderedNodesInFrustum: Node[][];
|
|
185
188
|
_fadingNodes: Map<number, Node>;
|
|
186
189
|
_fadingNodesInFrustum: Node[][];
|
|
190
|
+
protected _fadingOpaqueSegments: Segment[];
|
|
187
191
|
/**
|
|
188
192
|
* Layers activity lock.
|
|
189
193
|
* @public
|
|
@@ -308,6 +312,7 @@ export declare class Planet extends RenderNode {
|
|
|
308
312
|
get terrainReady(): boolean;
|
|
309
313
|
get maxGridSize(): number;
|
|
310
314
|
getNorthFrameRotation(cartesian: Vec3): Quat;
|
|
315
|
+
getFrameRotation(cartesian: Vec3): Quat;
|
|
311
316
|
set atmosphereMaxOpacity(opacity: number);
|
|
312
317
|
get atmosphereMaxOpacity(): number;
|
|
313
318
|
set atmosphereMinOpacity(opacity: number);
|
|
@@ -327,6 +332,7 @@ export declare class Planet extends RenderNode {
|
|
|
327
332
|
* @public
|
|
328
333
|
*/
|
|
329
334
|
getLayers(): Layer[];
|
|
335
|
+
get sun(): Sun | undefined;
|
|
330
336
|
get sunPos(): Vec3;
|
|
331
337
|
/**
|
|
332
338
|
* Add the given control to the renderer of the planet scene.
|
|
@@ -466,18 +472,16 @@ export declare class Planet extends RenderNode {
|
|
|
466
472
|
unlockQuadTree(): void;
|
|
467
473
|
protected _setUniformsNoAtmos(cam: PlanetCamera): Program;
|
|
468
474
|
protected _setUniformsAtmos(cam: PlanetCamera): Program;
|
|
469
|
-
protected _renderingFadingNodes: (nodes: Map<number, boolean>, sh: Program, currentNode: Node, sl: Layer[], sliceIndex: number, outTransparentSegments?: Segment[]) => void;
|
|
470
|
-
protected _renderingFadingNodesNoDepth: (nodes: Map<number, boolean>, sh: Program, currentNode: Node, sl: Layer[], sliceIndex: number) => void;
|
|
475
|
+
protected _renderingFadingNodes: (nodes: Map<number, boolean>, sh: Program, currentNode: Node, sl: Layer[], sliceIndex: number, outTransparentSegments?: Segment[], outOpaqueSegments?: Segment[]) => void;
|
|
476
|
+
protected _renderingFadingNodesNoDepth: (nodes: Map<number, boolean>, sh: Program, currentNode: Node, sl: Layer[], sliceIndex: number, outOpaqueSegments?: Segment[]) => void;
|
|
471
477
|
/**
|
|
472
478
|
* Drawing nodes
|
|
473
479
|
*/
|
|
474
480
|
protected _renderingScreenNodes(sh: Program, cam: PlanetCamera, renderedNodes: Node[]): void;
|
|
475
481
|
protected _renderingScreenNodesWithHeight(sh: Program, cam: PlanetCamera, renderedNodes: Node[]): void;
|
|
476
|
-
protected _renderDistanceFramebufferPASS(): void;
|
|
477
482
|
protected _renderColorPickingFramebufferPASS(): void;
|
|
478
483
|
protected _renderDepthFramebufferPASS(): void;
|
|
479
484
|
protected _collectVectorLayerCollections(): void;
|
|
480
|
-
protected _frustumEntityCollectionPickingCallback(): void;
|
|
481
485
|
/**
|
|
482
486
|
* Starts clear memory thread.
|
|
483
487
|
* @public
|
|
@@ -2,6 +2,8 @@ import { BaseNode } from "./BaseNode";
|
|
|
2
2
|
import { Renderer } from "../renderer/Renderer";
|
|
3
3
|
import { LightSource } from "../light/LightSource";
|
|
4
4
|
import { EntityCollection } from "../entity/EntityCollection";
|
|
5
|
+
import { Quat } from "../math/Quat";
|
|
6
|
+
import { Vec3 } from "../math/Vec3";
|
|
5
7
|
/**
|
|
6
8
|
* Render node is a logical part of a render mechanism. Represents scene rendering.
|
|
7
9
|
* For example one scene node for rendering the Earth, another one for rendering the Moon, another node for rendering stars etc.
|
|
@@ -37,19 +39,19 @@ declare class RenderNode extends BaseNode {
|
|
|
37
39
|
* @public
|
|
38
40
|
* @type {Array.<LightSource>}
|
|
39
41
|
*/
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
_lightsParamsv: number[];
|
|
44
|
-
_lightsParamsf: number[];
|
|
42
|
+
_lightPosition: Float32Array;
|
|
43
|
+
_lightParams: Float32Array;
|
|
44
|
+
_lightShininess: number;
|
|
45
45
|
/**
|
|
46
46
|
* Entity collection array.
|
|
47
47
|
* @public
|
|
48
48
|
* @type {Array.<EntityCollection>}
|
|
49
49
|
*/
|
|
50
50
|
entityCollections: EntityCollection[];
|
|
51
|
+
protected _entityCollectionsByDepthOrder: EntityCollection[][];
|
|
51
52
|
protected _pickingId: number;
|
|
52
53
|
constructor(name?: string);
|
|
54
|
+
getFrameRotation(cartesian: Vec3): Quat;
|
|
53
55
|
/**
|
|
54
56
|
* Adds node to the current hierarchy.
|
|
55
57
|
* @public
|
|
@@ -73,13 +75,14 @@ declare class RenderNode extends BaseNode {
|
|
|
73
75
|
* @param {boolean} [isHidden] - If it's true that this collection has specific rendering.
|
|
74
76
|
* @returns {RenderNode} -
|
|
75
77
|
*/
|
|
76
|
-
addEntityCollection(entityCollection: EntityCollection, isHidden?: boolean):
|
|
78
|
+
addEntityCollection(entityCollection: EntityCollection, isHidden?: boolean): void;
|
|
77
79
|
/**
|
|
78
80
|
* Removes entity collection.
|
|
79
81
|
* @public
|
|
80
82
|
* @param {EntityCollection} entityCollection - Entity collection for remove.
|
|
81
83
|
*/
|
|
82
84
|
removeEntityCollection(entityCollection: EntityCollection): void;
|
|
85
|
+
updateEntityCollectionsDepthOrder(): void;
|
|
83
86
|
/**
|
|
84
87
|
* Adds point light source.
|
|
85
88
|
* @public
|
|
@@ -87,19 +90,6 @@ declare class RenderNode extends BaseNode {
|
|
|
87
90
|
* @returns {RenderNode}
|
|
88
91
|
*/
|
|
89
92
|
addLight(light: LightSource): RenderNode;
|
|
90
|
-
/**
|
|
91
|
-
* Gets light object by its name.
|
|
92
|
-
* @public
|
|
93
|
-
* @param {string} name - Point light name.
|
|
94
|
-
* @returns {LightSource}
|
|
95
|
-
*/
|
|
96
|
-
getLightByName(name: string): LightSource | undefined;
|
|
97
|
-
/**
|
|
98
|
-
* Removes light source.
|
|
99
|
-
* @public
|
|
100
|
-
* @param {LightSource} light - Light source object.
|
|
101
|
-
*/
|
|
102
|
-
removeLight(light: LightSource): void;
|
|
103
93
|
/**
|
|
104
94
|
* Calls render frame node's callback. Used in renderer.
|
|
105
95
|
* @public
|
|
@@ -128,17 +118,12 @@ declare class RenderNode extends BaseNode {
|
|
|
128
118
|
* @param {Number} mode - Draw mode, such as gl.TRIANGLES, gl.TRIANGLE_STRIP, gl.LINES etc.
|
|
129
119
|
*/
|
|
130
120
|
setDrawMode(mode: number): void;
|
|
131
|
-
/**
|
|
132
|
-
* IMPORTANT: This function have to be called manually in each render node frame callback, before drawing scene geometry.
|
|
133
|
-
* @public
|
|
134
|
-
*/
|
|
135
|
-
transformLights(): void;
|
|
136
121
|
updateBillboardsTexCoords(): void;
|
|
137
122
|
frame(): void;
|
|
138
123
|
preFrame(): void;
|
|
139
124
|
protected _preDrawNodes(): void;
|
|
140
125
|
protected _drawNodes(): void;
|
|
141
|
-
drawEntityCollections(ec: EntityCollection[]): void;
|
|
126
|
+
drawEntityCollections(ec: EntityCollection[], depthOrder?: number): void;
|
|
142
127
|
/**
|
|
143
128
|
* Draw entity collections picking frame.
|
|
144
129
|
* @public
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { AtmosphereParameters } from "./atmos";
|
|
2
2
|
import { Program } from "../webgl/Program";
|
|
3
|
+
export declare const ENCODE24 = "vec3 encode24(highp float f) {\n float F = abs(f);\n float s = step( 0.0, -f );\n float e = floor( log2(F) );\n float m = exp2(- e) * F;\n e = floor( log2(F) + 127.0 ) + floor( log2(m) );\n return vec3(\n ( 128.0 * s + floor( e * exp2(-1.0) ) ) / 255.0,\n ( 128.0 * mod( e, 2.0 ) + mod( floor( m * 128.0 ), 128.0 ) ) / 255.0,\n floor( mod( floor( m * exp2( 23.0 - 8.0) ), exp2(8.0) ) ) / 255.0);\n }";
|
|
3
4
|
export declare function drawnode_screen_nl(): Program;
|
|
4
5
|
export declare function drawnode_screen_wl_webgl1NoAtmos(): Program;
|
|
5
6
|
export declare function drawnode_screen_wl_webgl2NoAtmos(): Program;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export declare const UTILS = "\n float getLerpValue(in float min, in float max, in float between)\n {\n return (clamp(between, min, max) - min) / (max - min);\n }\n \n vec3 aces(vec3 color) \n {\n float a = 2.51;\n float b = 0.03;\n float c = 2.43;\n float d = 0.59;\n float e = 0.14;\n return clamp((color * (a * color + b)) / (color * (c * color + d ) + e), 0.0, 1.0);\n }\n \n bool intersectSphere(vec3 rayOrigin, vec3 rayDirection, float radius, inout float t1, inout float t2) \n {\n float b = dot(rayDirection, rayOrigin);\n float c = dot(rayOrigin, rayOrigin) - radius * radius;\n float d = b * b - c;\n if (d < 0.0) {\n return false;\n }\n t1 = -b - sqrt(d);\n t2 = -b + sqrt(d);\n return true;\n }\n \n bool intersectSphere(vec3 rayOrigin, vec3 rayDirection, float radius, inout float t) \n {\n float b = dot(rayDirection, rayOrigin);\n float c = dot(rayOrigin, rayOrigin) - radius * radius;\n float d = b * b - c;\n if (d < 0.0) {\n return false;\n }\n t = -b - sqrt(d);\n return true;\n }\n \n bool intersectEllipsoid( in vec3 ro, in vec3 rd, in vec3 ra, inout float t )\n {\n vec3 ocn = ro/ra;\n vec3 rdn = rd/ra;\n float a = dot( rdn, rdn );\n float b = dot( ocn, rdn );\n float c = dot( ocn, ocn );\n float h = b*b - a*(c-1.0);\n \n if (h < 0.0) \n { \n return false; \n }\n \n t = (-b-sqrt(h))/a;\n \n return true;\n }\n \n bool intersectEllipsoid( in vec3 ro, in vec3 rd, in vec3 ra, inout float t1, inout float t2)\n {\n vec3 ocn = ro/ra;\n vec3 rdn = rd/ra;\n float a = dot( rdn, rdn );\n float b = dot( ocn, rdn );\n float c = dot( ocn, ocn );\n float h = b*b - a*(c-1.0);\n \n if (h < 0.0) \n { \n return false; \n }\n \n h = sqrt(h);\n t1 = (-b-h)/a;\n t2 = (-b+h)/a;\n \n return true;\n }\n \n vec3 normalEllipsoid( in vec3 pos, in vec3 ra )\n {\n return normalize( pos/(ra*ra) );\n }\n";
|
|
1
|
+
export declare const UTILS = "\n float getLerpValue(in float min, in float max, in float between)\n {\n return (clamp(between, min, max) - min) / (max - min);\n }\n \n vec3 aces(vec3 color) \n {\n float a = 2.51;\n float b = 0.03;\n float c = 2.43;\n float d = 0.59;\n float e = 0.14;\n return clamp((color * (a * color + b)) / (color * (c * color + d ) + e), 0.0, 1.0);\n }\n \n bool intersectSphere(vec3 rayOrigin, vec3 rayDirection, float radius, inout float t1, inout float t2) \n {\n float b = dot(rayDirection, rayOrigin);\n float c = dot(rayOrigin, rayOrigin) - radius * radius;\n float d = b * b - c;\n if (d < 0.0) {\n return false;\n }\n t1 = -b - sqrt(d);\n t2 = -b + sqrt(d);\n return true;\n }\n \n bool intersectSphere(vec3 rayOrigin, vec3 rayDirection, float radius, inout float t) \n {\n float b = dot(rayDirection, rayOrigin);\n float c = dot(rayOrigin, rayOrigin) - radius * radius;\n float d = b * b - c;\n if (d < 0.0) {\n return false;\n }\n t = -b - sqrt(d);\n return true;\n }\n \n float intersectSphere( vec3 ro, vec3 rd, vec4 sph )\n {\n vec3 oc = ro - sph.xyz;\n float b = dot( oc, rd );\n float c = dot( oc, oc ) - sph.w*sph.w;\n float h = b*b - c;\n if( h<0.0 ) return -1.0;\n h = sqrt( h );\n return -b - h;\n }\n \n bool intersectEllipsoid( in vec3 ro, in vec3 rd, in vec3 ra, inout float t )\n {\n vec3 ocn = ro/ra;\n vec3 rdn = rd/ra;\n float a = dot( rdn, rdn );\n float b = dot( ocn, rdn );\n float c = dot( ocn, ocn );\n float h = b*b - a*(c-1.0);\n \n if (h < 0.0) \n { \n return false; \n }\n \n t = (-b-sqrt(h))/a;\n \n return true;\n }\n \n bool intersectEllipsoid( in vec3 ro, in vec3 rd, in vec3 ra, inout float t1, inout float t2)\n {\n vec3 ocn = ro/ra;\n vec3 rdn = rd/ra;\n float a = dot( rdn, rdn );\n float b = dot( ocn, rdn );\n float c = dot( ocn, ocn );\n float h = b*b - a*(c-1.0);\n \n if (h < 0.0) \n { \n return false; \n }\n \n h = sqrt(h);\n t1 = (-b-h)/a;\n t2 = (-b+h)/a;\n \n return true;\n }\n \n vec3 normalEllipsoid( in vec3 pos, in vec3 ra )\n {\n return normalize( pos/(ra*ra) );\n }\n";
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { EventsHandler } from "../Events";
|
|
2
|
+
import { IViewParams, View, ViewEventsList } from './View';
|
|
3
|
+
interface ICheckboxParams extends IViewParams {
|
|
4
|
+
label?: string;
|
|
5
|
+
checked?: boolean;
|
|
6
|
+
disabled?: boolean;
|
|
7
|
+
}
|
|
8
|
+
type CheckboxEventsList = ["change"];
|
|
9
|
+
declare class Checkbox extends View<null> {
|
|
10
|
+
events: EventsHandler<CheckboxEventsList> & EventsHandler<ViewEventsList>;
|
|
11
|
+
protected $label: HTMLElement | null;
|
|
12
|
+
protected $input: HTMLInputElement | null;
|
|
13
|
+
protected _checked: boolean;
|
|
14
|
+
protected _disabled: boolean;
|
|
15
|
+
constructor(options?: ICheckboxParams);
|
|
16
|
+
set disabled(disabled: boolean);
|
|
17
|
+
protected _updateDisabled(): void;
|
|
18
|
+
get disabled(): boolean;
|
|
19
|
+
render(params: any): this;
|
|
20
|
+
protected _onResize: () => void;
|
|
21
|
+
set checked(isChecked: boolean);
|
|
22
|
+
get checked(): boolean;
|
|
23
|
+
protected _initEvents(): void;
|
|
24
|
+
protected _clearEvents(): void;
|
|
25
|
+
protected _onMouseWheel: (e: WheelEvent) => void;
|
|
26
|
+
protected _onMouseWheelFF: (e: WheelEvent) => void;
|
|
27
|
+
protected _onClick: (e: Event) => void;
|
|
28
|
+
remove(): void;
|
|
29
|
+
set visibility(visibility: boolean);
|
|
30
|
+
}
|
|
31
|
+
export { Checkbox };
|
|
@@ -8,6 +8,7 @@ export interface IDialogParams extends IViewParams {
|
|
|
8
8
|
width?: number;
|
|
9
9
|
height?: number;
|
|
10
10
|
left?: number;
|
|
11
|
+
right?: number;
|
|
11
12
|
top?: number;
|
|
12
13
|
minHeight?: number;
|
|
13
14
|
maxHeight?: number;
|
|
@@ -28,6 +29,7 @@ declare class Dialog<M> extends View<M> {
|
|
|
28
29
|
protected _startPosY: number;
|
|
29
30
|
protected _closeBtn: Button;
|
|
30
31
|
protected _visibility: boolean;
|
|
32
|
+
protected _right: number | null;
|
|
31
33
|
constructor(options?: IDialogParams);
|
|
32
34
|
setContainer(htmlStr: string): void;
|
|
33
35
|
get container(): HTMLElement | null;
|
|
@@ -39,6 +41,7 @@ declare class Dialog<M> extends View<M> {
|
|
|
39
41
|
hide(): void;
|
|
40
42
|
close(): void;
|
|
41
43
|
setVisibility(visibility: boolean): void;
|
|
44
|
+
getVisibility(): boolean;
|
|
42
45
|
protected _initButtons(): void;
|
|
43
46
|
protected _initEvents(): void;
|
|
44
47
|
protected _onCloseBtnClick: () => void;
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { EventsHandler } from "../Events";
|
|
2
|
+
import { IViewParams, View, ViewEventsList } from './View';
|
|
3
|
+
interface IInputParams extends IViewParams {
|
|
4
|
+
label?: string;
|
|
5
|
+
value?: string;
|
|
6
|
+
min?: number;
|
|
7
|
+
max?: number;
|
|
8
|
+
type?: string;
|
|
9
|
+
maxFixed?: number;
|
|
10
|
+
}
|
|
11
|
+
type InputEventsList = ["change"];
|
|
12
|
+
declare class Input extends View<null> {
|
|
13
|
+
events: EventsHandler<InputEventsList> & EventsHandler<ViewEventsList>;
|
|
14
|
+
protected _value: string;
|
|
15
|
+
protected $label: HTMLElement | null;
|
|
16
|
+
protected $input: HTMLInputElement | null;
|
|
17
|
+
protected _maxFixed: number;
|
|
18
|
+
constructor(options?: IInputParams);
|
|
19
|
+
render(params: any): this;
|
|
20
|
+
protected _onResize: () => void;
|
|
21
|
+
set value(val: string | number);
|
|
22
|
+
protected _setValue(val: string | number): void;
|
|
23
|
+
get value(): string;
|
|
24
|
+
protected _initEvents(): void;
|
|
25
|
+
protected _clearEvents(): void;
|
|
26
|
+
protected _onMouseWheel: (e: WheelEvent) => void;
|
|
27
|
+
protected _onMouseWheelFF: (e: WheelEvent) => void;
|
|
28
|
+
protected _onInput: (e: Event) => void;
|
|
29
|
+
remove(): void;
|
|
30
|
+
set visibility(visibility: boolean);
|
|
31
|
+
}
|
|
32
|
+
export { Input };
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { EventsHandler } from '../Events';
|
|
1
|
+
import { EventCallback, EventsHandler } from '../Events';
|
|
2
2
|
export interface IViewParams {
|
|
3
3
|
model?: any;
|
|
4
4
|
template?: string;
|
|
@@ -16,6 +16,8 @@ declare class View<M> {
|
|
|
16
16
|
el: HTMLElement | null;
|
|
17
17
|
protected _classList: string[];
|
|
18
18
|
constructor(options?: IViewParams);
|
|
19
|
+
on(name: string, callback: EventCallback, sender?: any, priority?: number): void;
|
|
20
|
+
off(name: string, callback: EventCallback): void;
|
|
19
21
|
static getHTML(template: string, params: any): string;
|
|
20
22
|
static parseHTML(htmlStr: string): HTMLElement[];
|
|
21
23
|
static insertAfter(newNodes: HTMLElement | HTMLElement[], referenceNode: Node): HTMLElement[];
|
|
@@ -1,24 +1,56 @@
|
|
|
1
|
-
|
|
1
|
+
import { NumberArray3 } from "../math/Vec3";
|
|
2
|
+
export interface IObjGeometryData {
|
|
2
3
|
vertices: number[];
|
|
3
|
-
|
|
4
|
+
texCoords: number[];
|
|
4
5
|
normals: number[];
|
|
5
6
|
}
|
|
6
|
-
interface IObjGeometry {
|
|
7
|
+
export interface IObjGeometry {
|
|
7
8
|
object: string;
|
|
8
9
|
groups: string[];
|
|
9
10
|
material: string;
|
|
10
11
|
data: IObjGeometryData;
|
|
11
12
|
}
|
|
12
|
-
interface
|
|
13
|
-
|
|
14
|
-
|
|
13
|
+
export interface IObjMaterial {
|
|
14
|
+
ambient?: NumberArray3;
|
|
15
|
+
diffuse?: NumberArray3;
|
|
16
|
+
specular?: NumberArray3;
|
|
17
|
+
shininess?: number;
|
|
18
|
+
color?: NumberArray3;
|
|
19
|
+
opacity?: number;
|
|
20
|
+
illum?: number;
|
|
21
|
+
colorTexture?: string;
|
|
22
|
+
normalTexture?: string;
|
|
23
|
+
metallicRoughnessTexture?: string;
|
|
15
24
|
}
|
|
16
|
-
|
|
25
|
+
type MaterialMap = Record<string, IObjMaterial>;
|
|
26
|
+
export interface IObj {
|
|
17
27
|
geometries: IObjGeometry[];
|
|
18
|
-
|
|
19
|
-
}
|
|
20
|
-
export declare
|
|
28
|
+
materials: MaterialMap;
|
|
29
|
+
}
|
|
30
|
+
export declare class Obj {
|
|
31
|
+
objPositions: number[][];
|
|
32
|
+
objTexcoords: number[][];
|
|
33
|
+
objNormals: number[][];
|
|
34
|
+
objVertexData: [number[][], number[][], number[][]];
|
|
35
|
+
vertexData: [number[], number[], number[]];
|
|
36
|
+
_materialLibs: string[];
|
|
21
37
|
geometries: IObjGeometry[];
|
|
22
|
-
|
|
23
|
-
|
|
38
|
+
geometry: IObjGeometry | null;
|
|
39
|
+
materials: MaterialMap;
|
|
40
|
+
material: IObjMaterial;
|
|
41
|
+
object: string;
|
|
42
|
+
groups: string[];
|
|
43
|
+
keywords: Record<string, (parts: string[], unparsedArgs: string) => void>;
|
|
44
|
+
protected _path: string;
|
|
45
|
+
constructor();
|
|
46
|
+
newGeometry(): void;
|
|
47
|
+
setGeometry(): void;
|
|
48
|
+
addVertex(vert: string): void;
|
|
49
|
+
protected _innerParser(text: string, fileName: string): void;
|
|
50
|
+
get data(): IObj;
|
|
51
|
+
load(src: string): Promise<IObj>;
|
|
52
|
+
protected _readAndParse(file: File): Promise<void>;
|
|
53
|
+
readFile(objFile: File, mtlFile?: File): Promise<IObj>;
|
|
54
|
+
protected _cleanupGeometryArrays(): void;
|
|
55
|
+
}
|
|
24
56
|
export {};
|
|
@@ -7,6 +7,7 @@ import { Vec2 } from "../math/Vec2";
|
|
|
7
7
|
import { NumberArray2 } from "../math/Vec2";
|
|
8
8
|
import { NumberArray3, Vec3 } from "../math/Vec3";
|
|
9
9
|
import { NumberArray4, Vec4 } from "../math/Vec4";
|
|
10
|
+
import { Ellipsoid } from "../ellipsoid/Ellipsoid";
|
|
10
11
|
export declare function getDefault(param?: any, def?: any): boolean;
|
|
11
12
|
export declare function isEmpty(v: any): boolean;
|
|
12
13
|
/**
|
|
@@ -261,3 +262,24 @@ export declare function isImageLoaded(image: HTMLImageElement): boolean;
|
|
|
261
262
|
export declare function distanceFormat(v: number): string;
|
|
262
263
|
export declare function distanceFormatExt(v: number): [string, string];
|
|
263
264
|
export declare function getUrlParam(paramName: string): number | undefined;
|
|
265
|
+
/**
|
|
266
|
+
*
|
|
267
|
+
* @param x
|
|
268
|
+
* @param y
|
|
269
|
+
* @param z
|
|
270
|
+
* @param imageSize
|
|
271
|
+
* @param ellipsoid
|
|
272
|
+
*
|
|
273
|
+
* console.log(1, getTileImageResolution(0, 0, 1));
|
|
274
|
+
* console.log(7, getTileImageResolution(66, 44, 7));
|
|
275
|
+
* console.log(10, getTileImageResolution(536, 358, 10));
|
|
276
|
+
* console.log(12, getTileImageResolution(2149, 1446, 12));
|
|
277
|
+
* console.log(13, getTileImageResolution(4301, 2892, 13));
|
|
278
|
+
* console.log(14, getTileImageResolution(8582, 5736, 14));
|
|
279
|
+
* console.log(15, getTileImageResolution(17205, 11569, 15));
|
|
280
|
+
* console.log(16, getTileImageResolution(34419, 23138, 16));
|
|
281
|
+
* console.log(17, getTileImageResolution(68661, 45892, 17));
|
|
282
|
+
* console.log(18, getTileImageResolution(137650, 92555, 18));
|
|
283
|
+
*/
|
|
284
|
+
export declare function getTileImageResolution(x: number, y: number, z: number, imageSize?: number, ellipsoid?: Ellipsoid): number[];
|
|
285
|
+
export declare function toFixedMax(value: number, maxFixed?: number): string;
|
|
@@ -1,13 +1,37 @@
|
|
|
1
1
|
import { BaseFramebuffer, IBaseFramebufferParams } from "./BaseFramebuffer";
|
|
2
2
|
import { Handler } from "./Handler";
|
|
3
|
+
import { TypedArray } from "../utils/shared";
|
|
4
|
+
export interface ITargetParams {
|
|
5
|
+
internalFormat?: string;
|
|
6
|
+
format?: string;
|
|
7
|
+
type?: string;
|
|
8
|
+
attachment?: string;
|
|
9
|
+
filter?: string;
|
|
10
|
+
readAsync?: boolean;
|
|
11
|
+
}
|
|
3
12
|
export interface IFrameBufferParams extends IBaseFramebufferParams {
|
|
4
13
|
isBare?: boolean;
|
|
5
|
-
format?: string | string[];
|
|
6
|
-
type?: string | string[];
|
|
7
|
-
attachment?: string | string[];
|
|
8
14
|
renderbufferTarget?: string;
|
|
9
15
|
textures?: WebGLTexture[];
|
|
16
|
+
targets?: ITargetParams[];
|
|
17
|
+
}
|
|
18
|
+
type TypedArrayConstructor = Uint8ArrayConstructor | Float32ArrayConstructor;
|
|
19
|
+
interface ITarget {
|
|
20
|
+
internalFormat: string;
|
|
21
|
+
format: string;
|
|
22
|
+
type: string;
|
|
23
|
+
attachment: string;
|
|
24
|
+
filter: string;
|
|
25
|
+
pixelBufferIndex: number;
|
|
26
|
+
TypeArrayConstructor: TypedArrayConstructor;
|
|
27
|
+
}
|
|
28
|
+
interface IPixelBuffer {
|
|
29
|
+
buffer: WebGLBuffer | null;
|
|
30
|
+
data: TypedArray | null;
|
|
31
|
+
glType: number;
|
|
32
|
+
glAttachment: number;
|
|
10
33
|
}
|
|
34
|
+
export declare function clientWaitAsync(gl: WebGL2RenderingContext, sync: WebGLSync, flags: number): Promise<void>;
|
|
11
35
|
/**
|
|
12
36
|
* Class represents framebuffer.
|
|
13
37
|
* @class
|
|
@@ -15,19 +39,18 @@ export interface IFrameBufferParams extends IBaseFramebufferParams {
|
|
|
15
39
|
* @param {IFrameBufferParams} [options] - Framebuffer options:
|
|
16
40
|
*/
|
|
17
41
|
export declare class Framebuffer extends BaseFramebuffer {
|
|
18
|
-
protected _isBare: boolean;
|
|
19
|
-
protected _internalFormatArr: string[];
|
|
20
|
-
protected _formatArr: string[];
|
|
21
|
-
protected _typeArr: string[];
|
|
22
|
-
protected _attachmentArr: string[];
|
|
23
42
|
protected _renderbufferTarget: string;
|
|
43
|
+
protected _targets: ITarget[];
|
|
24
44
|
/**
|
|
25
45
|
* Framebuffer texture.
|
|
26
46
|
* @public
|
|
27
47
|
* @type {number}
|
|
28
48
|
*/
|
|
29
49
|
textures: WebGLTexture[];
|
|
50
|
+
pixelBuffers: IPixelBuffer[];
|
|
51
|
+
protected _skipFrame: boolean;
|
|
30
52
|
constructor(handler: Handler, options?: IFrameBufferParams);
|
|
53
|
+
static createTargets(targets?: ITargetParams[]): ITarget[];
|
|
31
54
|
destroy(): void;
|
|
32
55
|
/**
|
|
33
56
|
* Framebuffer initialization.
|
|
@@ -35,6 +58,9 @@ export declare class Framebuffer extends BaseFramebuffer {
|
|
|
35
58
|
* @override
|
|
36
59
|
*/
|
|
37
60
|
init(): void;
|
|
61
|
+
readPixelBuffersAsync: () => void;
|
|
62
|
+
getPixelBufferData(targetIndex: number): TypedArray | null;
|
|
63
|
+
protected _createPixelBuffer(target: ITarget): void;
|
|
38
64
|
/**
|
|
39
65
|
* Bind buffer texture.
|
|
40
66
|
* @public
|
|
@@ -67,3 +93,4 @@ export declare class Framebuffer extends BaseFramebuffer {
|
|
|
67
93
|
*/
|
|
68
94
|
getImage(): HTMLImageElement;
|
|
69
95
|
}
|
|
96
|
+
export {};
|
package/lib/@openglobus/og.css
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
:root{--grey0:#2d2d2d;--grey1:#434244;--grey2:#3f3f46;--grey3:#bbb;--grey4:#5e5e5e;--grey5:#403b3b;--grey6:#bfbfbf;--grey7:#707070;--grey8:#e2e2e2;--blue0:#1700a9ee}.og-map-button{background-color:var(--grey5);cursor:pointer;height:40px;outline:none;position:absolute;width:40px;z-index:1}.ogCenterIcon{bottom:50%;height:12px;margin-bottom:-3.5px;margin-right:-7.5px;position:absolute;right:50%;width:12px}.ogHandPoiner{cursor:pointer}.defaultText{color:#fff;left:0;position:absolute;top:0}#ogShowFpsControl{color:red}.ogGrabbingPoiner{cursor:grabbing!important}.og-inner{background-color:#000;float:left;height:100%;overflow:hidden;position:relative;-webkit-user-select:none;-moz-user-select:none;-khtml-user-select:none;-ms-user-select:none;width:100%}.og-attribution{background:#cecece;bottom:0;display:flex;flex-direction:row;font-family:Segoe UI,Frutiger,Frutiger Linotype,Dejavu Sans,Helvetica Neue,Arial,sans-serif;font-size:.7rem;line-height:1.375em;padding:1px 0;position:absolute;right:0;text-align:right}.og-attribution .og-attribution__layer{align-items:center;display:inline;margin-left:5px;margin-right:5px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.og-attribution img{max-height:1.3em}.og-zoomin-button{border-bottom-left-radius:0!important;border-bottom-right-radius:0!important;bottom:102px;right:12px}.og-zoomout-button{border-top-left-radius:0!important;border-top-right-radius:0!important;bottom:58px;right:12px}input{accent-color:var(--blue0);cursor:pointer}.og-menu-bar-vertical{background-color:rgba(64,59,59,.85);border-radius:2px;box-shadow:0 1px 4px hsla(0,0%,6%,.17);height:40px;position:absolute;right:12px;top:12px;width:40px;z-index:0}.og-hide{display:none!important}.og-not-visible{visibility:hidden!important}.og-options-container{color:#b6b6b6;height:calc(100% - 30px);padding:12px;position:relative}.og-option{align-items:center;display:inline-block;flex-direction:row;justify-content:left;padding-bottom:7px;position:relative;text-overflow:ellipsis;width:100%}.og-option .og-slider{width:100%}.og-option .og-color-label,.og-option .og-slider .og-slider-label{font-size:12px;width:100px}.og-ddialog{background-color:var(--grey0);border:1px solid;border-color:var(--grey1);border-radius:4px;box-shadow:3px 3px 4px hsla(0,0%,6%,.17);display:flex;flex-direction:column;overflow:auto;position:absolute}.og-ddialog .og-ddialog-header{align-items:center;background-color:var(--grey2);color:#fff;display:flex;flex-direction:row;height:27px;justify-content:space-between;padding:0;position:relative;width:100%;z-index:1}.og-ddialog .og-ddialog-header .og-ddialog-header__title{color:var(--grey3);font-family:Segoe UI,Tahoma,Geneva,Verdana,sans-serif;font-size:14px;font-weight:400;padding-left:5px;pointer-events:none}.og-ddialog .og-ddialog-header .og-ddialog-header__buttons{display:flex;flex-direction:row;justify-content:flex-end}.og-ddialog .og-ddialog-header .og-ddialog-header__buttons .og-button{border-radius:0}.og-ddialog .og-ddialog-container{font-family:Segoe UI,Frutiger,Frutiger Linotype,Dejavu Sans,Helvetica Neue,Arial,sans-serif;font-size:14px;height:100%;overflow:auto;position:relative;width:100%}.og-ddialog.dragging{user-select:none}.og-button{align-content:center;align-items:center;border-radius:4px;color:var(--grey6);cursor:default;display:flex;flex-direction:row;justify-content:center;padding:2px}.og-button svg,.og-button svg path{fill:var(--grey6)}.og-button__active.og-button svg,.og-button__active.og-button svg path{fill:#fff}.og-button .og-button-text{font-family:Segoe UI,Tahoma,Geneva,Verdana,sans-serif;font-size:14px;font-weight:400}.og-button:hover{background-color:var(--grey4)}.og-button-size__20{height:20px;width:20px}.og-button__active{background-color:var(--grey2)}.og-layerSwitcher_button{right:12px;top:12px}.og-layerSwitcher{color:#b6b6b6;height:100%;overflow-x:hidden;overflow-y:auto;position:relative;width:100%}.og-layerSwitcher__title{color:#b6b6b6;font-size:14px;padding:5px;position:relative;width:100%}.og-layerSwitcher__list{display:inline-block;flex-direction:column;padding:2px;position:relative;width:100%}.og-layerSwitcher__layerButton{background-color:#7a7a7a;border:2px solid transparent;border-radius:5px;cursor:pointer;height:75px;margin:3px;padding:0;position:relative;width:75px}.og-layerSwitcher__layerButton.og-layerSwitcher__visible{border:2px solid #00ff14}.og-layerSwitcher__layerButton.og-layerSwitcher__visible img{opacity:1}.og-layerSwitcher__layerButton img{border-radius:5px;height:100%;left:0;opacity:1;position:absolute;top:0;width:100%}.og-layerSwitcher__layerButton img:hover{opacity:1}.og-layerSwitcher__name{background-color:rgba(0,0,0,.5);border-bottom-left-radius:5px;border-bottom-right-radius:5px;bottom:0;color:var(--grey8);font-size:12px;max-height:25px;overflow:hidden;padding:3px;position:absolute;text-overflow:ellipsis;width:calc(100% - 6px)}.displayNone{display:none}.displayBlock{display:block}.og-drawing-default_button{right:166px;top:12px}.og-drawing-default_button .og-button-icon{transform:scale(.73)}.og-drawing-polygon_button{right:115px;top:12px}.og-drawing-linestring_button{right:66px;top:12px}.og-ruler_button{right:12px;top:65px}.ogConsole{background-color:hsla(0,0%,51%,.49);color:#fff;font-family:Arial;font-size:14px;left:0;max-height:70%;overflow:auto;pointer-events:none;position:absolute;top:0;width:100%;z-index:100000000}.ogConsole-text{overflow:hidden;padding:7px}.ogConsole-error{color:red}.ogConsole-warning{color:#ff0}.ogViewExtentBtn{background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYEAQAAAAa7ikwAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAACXBIWXMAAABgAAAAYADwa0LPAAAAB3RJTUUH5ggMBTM4rM25AwAAAAJiS0dEAACqjSMyAAABsUlEQVRIx81WWYrCQBAVg4Iwbp8ud5DoYRRBxPMoouiPegQVPYp6Azdc/ly++01XKkmPksQ4ZmAKAr3V0u9VVScU8ikQkQhwuRifHIeCFiAWgy2xWHCGRSIBVKtAt6scdDrGmtz7IOJUyjAk7ne4Ce2JdhsimXzTeKkE7PfK0vEIjMdqTuPTSc23W6BY9G/cjvpwgKjVmOBHDnitXmfnJLcboOs+YNntWGGxADIZtRcOQ4xGEMMhjdV6Ngssl6yz2XjywuSZkf8w/vrW5MS8iWi13LPFgkbC8n5SEFwmVOLry+EApaJJ6C8KCSIaVcRXKk8FlE4D/T5vzmY81zT/0Wsa68znbKPX47ksSC5/JxkM/EdPxDvJ5RKMA3nWw8EfQxQsyecz2yiXvdNUptz7adposO716pim7EQ2Lrv3ZLP+o8/n7RQVzabHwWSSGxcJlb9y4t4qcjlgtWKd9RoiHn9x1WKRG5d1E1mhBr7PzY7WCBaruAiaQsEnnrpuNC5biLzJRL0D06ki1Ircp/FH0lstdRsnoaibzZeweDuKx6m3qE5rPZnlsmu2/KtH/9Pflm+sYR/yIsaCAQAAACV0RVh0ZGF0ZTpjcmVhdGUAMjAyMi0wOC0xMlQwNTo1MTo1NiswMDowMIPhE+YAAAAldEVYdGRhdGU6bW9kaWZ5ADIwMjItMDgtMTJUMDU6NTE6NTYrMDA6MDDyvKtaAAAAKHRFWHRkYXRlOnRpbWVzdGFtcAAyMDIyLTA4LTEyVDA1OjUxOjU2KzAwOjAwpamKhQAAAABJRU5ErkJggg==) 50% no-repeat;cursor:pointer;height:24px;margin-left:12px;scale:70%;width:24px}.ogViewExtentBtn:hover{background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYEAQAAAAa7ikwAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAACXBIWXMAAABgAAAAYADwa0LPAAAAB3RJTUUH5ggMBTM4rM25AwAAAAJiS0dEAACqjSMyAAABsUlEQVRIx81WWYrCQBAVg4Iwbp8ud5DoYRRBxPMoouiPegQVPYp6Azdc/ly++01XKkmPksQ4ZmAKAr3V0u9VVScU8ikQkQhwuRifHIeCFiAWgy2xWHCGRSIBVKtAt6scdDrGmtz7IOJUyjAk7ne4Ce2JdhsimXzTeKkE7PfK0vEIjMdqTuPTSc23W6BY9G/cjvpwgKjVmOBHDnitXmfnJLcboOs+YNntWGGxADIZtRcOQ4xGEMMhjdV6Ngssl6yz2XjywuSZkf8w/vrW5MS8iWi13LPFgkbC8n5SEFwmVOLry+EApaJJ6C8KCSIaVcRXKk8FlE4D/T5vzmY81zT/0Wsa68znbKPX47ksSC5/JxkM/EdPxDvJ5RKMA3nWw8EfQxQsyecz2yiXvdNUptz7adposO716pim7EQ2Lrv3ZLP+o8/n7RQVzabHwWSSGxcJlb9y4t4qcjlgtWKd9RoiHn9x1WKRG5d1E1mhBr7PzY7WCBaruAiaQsEnnrpuNC5biLzJRL0D06ki1Ircp/FH0lstdRsnoaibzZeweDuKx6m3qE5rPZnlsmu2/KtH/9Pflm+sYR/yIsaCAQAAACV0RVh0ZGF0ZTpjcmVhdGUAMjAyMi0wOC0xMlQwNTo1MTo1NiswMDowMIPhE+YAAAAldEVYdGRhdGU6bW9kaWZ5ADIwMjItMDgtMTJUMDU6NTE6NTYrMDA6MDDyvKtaAAAAKHRFWHRkYXRlOnRpbWVzdGFtcAAyMDIyLTA4LTEyVDA1OjUxOjU2KzAwOjAwpamKhQAAAABJRU5ErkJggg==) 50% no-repeat,var(--blue0);border-radius:10px}.og-debuginfo_button{left:10px;position:absolute;top:120px}.og-debuginfo_controls{display:flex;padding-bottom:8px}.og-debuginfo_controls-button{float:left;height:25px;margin:3px;width:25px}.og-debug-info{color:#fff;font-size:12px;padding:10px}.og-debug-info .og-watch-line{display:flex;flex-direction:row;padding-bottom:5px;width:100%}.og-watch-line .og-watch-label{color:#cecece;width:200px}.og-watch-line .og-watch-value{margin-left:15px}.og-popup{bottom:-2px;position:absolute;text-align:center}.og-popup-content-wrapper,.og-popup-tip{background:#fff;box-shadow:0 3px 14px rgba(0,0,0,.4);color:#333}.og-popup-content-wrapper{border-radius:8px;min-height:17px;min-width:30px;padding:1px;text-align:left}.og-popup-content{line-height:1.4;margin:20px 5px 5px}.og-popup-tip-container{bottom:-19px;height:20px;left:50%;margin-left:-20px;overflow:hidden;pointer-events:none;position:absolute;width:40px}.og-popup-tip{height:17px;margin:-10px auto 0;padding:1px;-webkit-transform:rotate(45deg);-moz-transform:rotate(45deg);-ms-transform:rotate(45deg);transform:rotate(45deg);width:17px}.og-popup-toolbar{display:inline-block;position:absolute;right:2px;top:3px}.og-popup-btn{cursor:pointer;float:right;height:15px;width:15px}.og-popup-btn:hover{color:#2e9be7}.og-popup-title{font-size:14px;left:5px;position:absolute;top:3px}.og-scale-container{bottom:30px;position:absolute;right:320px}.og-scale-label{color:#fff;font-family:Segoe UI,Frutiger,Frutiger Linotype,Dejavu Sans,Helvetica Neue,Arial,sans-serif;font-size:12px;position:relative;text-align:center}.og-scale-ruler{border-bottom:2px solid #fff;border-left:1px solid #fff;border-right:1px solid #fff;height:7px;position:relative}.og-compass-button{bottom:153px;right:12px}.og-compass-button svg{height:40px!important;width:40px!important}.og-suncontrol-button{float:left;height:25px;margin:3px;width:25px}.og-lighting_button{left:10px;position:absolute;top:65px}.og-lighing{color:#b6b6b6;height:calc(100% - 30px);padding:12px;position:relative}.og-lighing .og-layers{align-items:center;display:flex;flex-direction:row}.og-lighing .og-caption{position:relative}.og-emptyline,.og-lighing .og-lighting-emptyline{padding:3px;width:100%}.og-emptyline-2{padding:5px;width:100%}.og-lighing .og-slider{width:100%}.og-lighing .og-color-label,.og-lighing .og-slider .og-slider-label{font-size:12px;width:100px}.og-lighing .og-color{padding-right:10px}.og-lighing #layers{font-family:monospace;margin-left:21px;padding:2px;width:200px}.og-coordinates{background-color:var(--grey5);border-radius:4px;bottom:25px;color:var(--grey8);cursor:pointer;float:left;font-family:monospace;font-size:1em;overflow:hidden;padding:5px;position:absolute;right:12px;text-align:right}.og-coordinates div{float:left}.og-lat-side,.og-lon-side{padding-right:3px;width:10px}.og-lat-val,.og-lon-val{overflow:hidden;padding-right:3px;text-align:left;text-overflow:unset;width:90px}.og-height{overflow:hidden;padding-left:3px;text-align:right;text-overflow:ellipsis;width:50px}.og-units-height{padding-left:3px;text-align:left;width:15px}.og-center-icon{bottom:50%;height:12px;margin-bottom:-3.5px;margin-right:-7.5px;pointer-events:none;position:absolute;right:50%;width:12px}.og-atmosphere_button{left:10px;position:absolute;top:230px}.og-atmosphere.og-options-container .og-slider-label{height:20px;overflow:hidden;width:300px}.og-atmosphere.og-options-container .og-slider input{width:87px}.og-timeline_button{left:10px;position:absolute;top:10px}.og-timeline-control_button{background:var(--grey7);border-radius:1px;height:20px;margin-left:3px;margin-right:3px;width:25px}.og-button svg,.og-button svg path{height:24px;width:24px}.og-timeline-control_button.og-button__active{background:var(--grey3)}.og-timeline{background:#2d2d2d;bottom:0;height:100%;left:0;overflow:hidden;position:relative;width:100%}.og-timeline-frame{height:30px;margin:0 0 0 10px;position:relative;width:calc(100% - 20px)}.og-timeline-scale{height:100%;overflow:hidden;width:100%}.og-timeline-current{cursor:pointer;height:100%;left:0;margin-left:-5px;margin-top:-7px;position:absolute;width:11px}.og-timeline-current-spin{background-color:#ff3434;height:100%;margin:0 auto;pointer-events:none;width:1px}.og-timeline-current-arrow{border-left:7px solid transparent;border-right:7px solid transparent;border-top:7px solid #ff3434;height:0;margin-left:-6px;width:0}.og-timeline-bottom{margin-top:3px;width:100%}.og-timeline-bottom,.og-timeline-controls{display:flex;justify-content:center;position:relative}.og-timeline-controls{align-items:center;border-radius:10px;flex-direction:row;padding:8px}.og-timeline-unselectable{-moz-user-select:none;-khtml-user-select:none;-webkit-user-select:none;-ms-user-select:none;user-select:none}.og-timeline-top{display:block;height:15px;width:100%}.og-slider{display:flex;flex-direction:row;width:200px}.og-slider .og-slider-label{align-items:center;color:var(--grey6);display:flex;font-family:Segoe UI,Frutiger,Frutiger Linotype,Dejavu Sans,Helvetica Neue,Arial,sans-serif;font-size:14px;height:100%;margin-right:5px;text-align:left;width:100%}.og-slider .og-slider-panel{background-color:var(--grey1);height:20px;position:relative;width:100%;z-index:1}.og-slider .og-slider-panel .og-slider-progress{background-color:var(--grey7);height:100%;pointer-events:none;position:absolute}.og-slider .og-slider-panel .og-slider-pointer{background-color:var(--grey3);height:100%;left:0;pointer-events:none;position:absolute;top:0;width:3px}.og-slider input{background:var(--grey5);border:1px solid var(--grey1);color:var(--grey3);height:100%;padding-left:5px;position:relative;width:100%;width:60px;z-index:0}.og-slider input:focus-visible{outline:none}.og-slider input::-webkit-inner-spin-button,.og-slider input::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}.og-slider input[type=number]{-moz-appearance:textfield}.og-selection_button{right:12px;top:117px}.og-geoimagegrag_button{right:12px;top:169px}.og-elevationprofile{height:100%;overflow:hidden;position:absolute;width:100%}.og-elevationprofile__container{align-content:center;align-items:center;display:flex;flex-direction:column;height:100%;position:relative;width:100%}.og-elevationprofile__menu{height:43px;position:relative;width:100%}.og-elevationprofile__graph{height:100%;position:relative;width:100%}.og-elevationprofile_button{left:10px;top:175px}.og-elevationprofile-legend{color:var(--grey8);display:flex;font-family:Segoe UI,Tahoma,Geneva,Verdana,sans-serif;font-size:12px;margin:5px;position:absolute;right:0;top:0;z-index:1}.og-elevationprofile-legend__row{padding:5px;position:relative;width:70px}.og-elevationprofile-square{float:left;height:6px;margin:5px;position:relative;width:6px}.og-elevationprofile-legend__track .og-elevationprofile-square{background-color:#00ff32}.og-elevationprofile-legend__ground .og-elevationprofile-square{background-color:#c6c6c6}.og-elevationprofile-legend__warning .og-elevationprofile-square{background-color:#ff0}.og-elevationprofile-legend__collision .og-elevationprofile-square{background-color:red}.og-elevationprofile-units{display:inline-block;float:left;padding-left:5px;position:relative}.og-elevationprofile-value{display:inline-block;float:left;overflow:hidden;position:relative;text-align:right;text-overflow:ellipsis;white-space:nowrap;width:30px}.og-elevationprofile-buttons{display:inline-block;left:0;position:absolute;top:0}.og-elevationprofile-button{float:left;height:25px;margin:3px;width:25px}.og-elevationprofile-list{display:flex;flex-direction:column;height:100%;position:relative;width:100%}.og-elevationprofile-list textarea{background:var(--grey8);height:100%;padding:5px;position:relative;resize:none;width:100%}.og-elevationprofile-list-buttons{align-items:center;display:flex;flex-direction:row;height:60px;justify-content:right;position:relative}.og-elevationprofile-list-apply{background-color:var(--grey2);float:right;margin-right:15px;padding:4px 10px 7px}.og-elevationprofile_pointer{height:100%;left:0;position:absolute;top:0}.og-elevationprofile-line{background-color:#fff;height:30px;margin-left:-1.5px;position:absolute;width:3px}.og-elevationprofile-label{color:#fff;left:0;position:absolute;top:0}.og-elevationprofile-button__location svg{height:17px;width:17px}.og-elevationprofile-loading{align-items:center;background-color:#000;display:flex;flex-direction:row;height:100%;justify-content:center;opacity:.3;position:absolute;width:100%;z-index:2}.og-simpleskybackground{display:flex}.og-color-label{color:var(--grey6);font-family:Segoe UI,Frutiger,Frutiger Linotype,Dejavu Sans,Helvetica Neue,Arial,sans-serif;font-size:14px}@keyframes ldio-p0v5a1f6oz{0%{opacity:1}50%{opacity:.5}to{opacity:1}}.ldio-p0v5a1f6oz div{animation:ldio-p0v5a1f6oz .9345794392523364s cubic-bezier(.5,0,.5,1) infinite;height:40px;position:absolute;top:30px;width:11px}.ldio-p0v5a1f6oz div:first-child{animation-delay:-.5607476635514018s;background:#353535;transform:translate(14.5px)}.ldio-p0v5a1f6oz div:nth-child(2){animation-delay:-.37383177570093457s;background:#666;transform:translate(34.5px)}.ldio-p0v5a1f6oz div:nth-child(3){animation-delay:-.18691588785046728s;background:#9b9b9b;transform:translate(54.5px)}.ldio-p0v5a1f6oz div:nth-child(4){animation-delay:-.9345794392523364s;background:#d4d4d4;transform:translate(74.5px)}.loadingio-spinner-bars-r354qqyl5v{background:none;display:inline-block;height:88px;overflow:hidden;width:88px}.ldio-p0v5a1f6oz{backface-visibility:hidden;height:100%;position:relative;transform:translateZ(0) scale(.88);transform-origin:0 0;width:100%}.ldio-p0v5a1f6oz div{box-sizing:content-box}
|
|
1
|
+
:root{--grey0:#2d2d2d;--grey1:#434244;--grey2:#3f3f46;--grey3:#bbb;--grey4:#5e5e5e;--grey5:#403b3b;--grey6:#bfbfbf;--grey7:#707070;--grey8:#e2e2e2;--grey9:#9f9f9f;--blue0:#1700a9ee}.og-map-button{background-color:var(--grey5);cursor:pointer;height:40px;outline:none;position:absolute;width:40px;z-index:1}.ogCenterIcon{bottom:50%;height:12px;margin-bottom:-3.5px;margin-right:-7.5px;position:absolute;right:50%;width:12px}.ogHandPoiner{cursor:pointer}.defaultText{color:#fff;left:0;position:absolute;top:0}#ogShowFpsControl{color:red}.ogGrabbingPoiner{cursor:grabbing!important}.og-inner{background-color:#000;float:left;height:100%;overflow:hidden;position:relative;-webkit-user-select:none;-moz-user-select:none;-khtml-user-select:none;-ms-user-select:none;width:100%}.og-attribution{background:#cecece;bottom:0;display:flex;flex-direction:row;font-family:Segoe UI,Frutiger,Frutiger Linotype,Dejavu Sans,Helvetica Neue,Arial,sans-serif;font-size:.7rem;line-height:1.375em;padding:1px 0;position:absolute;right:0;text-align:right}.og-attribution .og-attribution__layer{align-items:center;display:inline;margin-left:5px;margin-right:5px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.og-attribution img{max-height:1.3em}.og-zoomin-button{border-bottom-left-radius:0!important;border-bottom-right-radius:0!important;bottom:102px;right:12px}.og-zoomout-button{border-top-left-radius:0!important;border-top-right-radius:0!important;bottom:58px;right:12px}input{accent-color:var(--blue0);cursor:pointer}.og-menu-bar-vertical{background-color:rgba(64,59,59,.85);border-radius:2px;box-shadow:0 1px 4px hsla(0,0%,6%,.17);height:40px;position:absolute;right:12px;top:12px;width:40px;z-index:0}.og-hide{display:none!important}.og-not-visible{visibility:hidden!important}.og-options-container{color:#b6b6b6;height:calc(100% - 30px);padding:12px;position:relative}.og-option{align-items:center;display:inline-block;flex-direction:row;justify-content:left;padding-bottom:7px;position:relative;text-overflow:ellipsis;width:100%}.og-option .og-slider{width:100%}.og-option .og-color-label,.og-option .og-slider .og-slider-label{font-size:12px;width:100px}.og-ddialog{background-color:var(--grey0);border:1px solid;border-color:var(--grey1);border-radius:4px;box-shadow:3px 3px 4px hsla(0,0%,6%,.17);display:flex;flex-direction:column;overflow:auto;position:absolute}.og-ddialog .og-ddialog-header{align-items:center;background-color:var(--grey2);color:#fff;display:flex;flex-direction:row;height:27px;justify-content:space-between;padding:0;position:relative;width:100%;z-index:1}.og-ddialog .og-ddialog-header .og-ddialog-header__title{color:var(--grey3);font-family:Segoe UI,Tahoma,Geneva,Verdana,sans-serif;font-size:14px;font-weight:400;padding-left:5px;pointer-events:none}.og-ddialog .og-ddialog-header .og-ddialog-header__buttons{display:flex;flex-direction:row;justify-content:flex-end}.og-ddialog .og-ddialog-header .og-ddialog-header__buttons .og-button{border-radius:0}.og-ddialog .og-ddialog-container{font-family:Segoe UI,Frutiger,Frutiger Linotype,Dejavu Sans,Helvetica Neue,Arial,sans-serif;font-size:14px;height:100%;overflow:auto;position:relative;width:100%}.og-ddialog.dragging{user-select:none}.og-button{align-content:center;align-items:center;border-radius:4px;color:var(--grey6);cursor:default;display:flex;flex-direction:row;justify-content:center;padding:2px}.og-button svg,.og-button svg path{fill:var(--grey6)}.og-button__active.og-button svg,.og-button__active.og-button svg path{fill:#fff}.og-button .og-button-text{font-family:Segoe UI,Tahoma,Geneva,Verdana,sans-serif;font-size:14px;font-weight:400}.og-button:hover{background-color:var(--grey4)}.og-button-size__20{height:20px;width:20px}.og-button__active{background-color:var(--grey2)}.og-layerSwitcher_button{right:12px;top:12px}.og-layerSwitcher{color:#b6b6b6;height:100%;overflow-x:hidden;overflow-y:auto;position:relative;width:100%}.og-layerSwitcher__title{color:#b6b6b6;font-size:14px;padding:5px;position:relative;width:100%}.og-layerSwitcher__list{display:inline-block;flex-direction:column;padding:2px;position:relative;width:100%}.og-layerSwitcher__layerButton{background-color:#7a7a7a;border:2px solid transparent;border-radius:5px;cursor:pointer;height:75px;margin:3px;padding:0;position:relative;width:75px}.og-layerSwitcher__layerButton.og-layerSwitcher__visible{border:2px solid #00ff14}.og-layerSwitcher__layerButton.og-layerSwitcher__visible img{opacity:1}.og-layerSwitcher__layerButton img{border-radius:5px;height:100%;left:0;opacity:1;position:absolute;top:0;width:100%}.og-layerSwitcher__layerButton img:hover{opacity:1}.og-layerSwitcher__name{background-color:rgba(0,0,0,.5);border-bottom-left-radius:5px;border-bottom-right-radius:5px;bottom:0;color:var(--grey8);font-size:12px;max-height:25px;overflow:hidden;padding:3px;position:absolute;text-overflow:ellipsis;width:calc(100% - 6px)}.displayNone{display:none}.displayBlock{display:block}.og-drawing-default_button{right:166px;top:12px}.og-drawing-default_button .og-button-icon{transform:scale(.73)}.og-drawing-polygon_button{right:115px;top:12px}.og-drawing-linestring_button{right:66px;top:12px}.og-ruler_button{right:12px;top:65px}.ogConsole{background-color:hsla(0,0%,51%,.49);color:#fff;font-family:Arial;font-size:14px;left:0;max-height:70%;overflow:auto;pointer-events:none;position:absolute;top:0;width:100%;z-index:100000000}.ogConsole-text{overflow:hidden;padding:7px}.ogConsole-error{color:red}.ogConsole-warning{color:#ff0}.ogViewExtentBtn{background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYEAQAAAAa7ikwAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAACXBIWXMAAABgAAAAYADwa0LPAAAAB3RJTUUH5ggMBTM4rM25AwAAAAJiS0dEAACqjSMyAAABsUlEQVRIx81WWYrCQBAVg4Iwbp8ud5DoYRRBxPMoouiPegQVPYp6Azdc/ly++01XKkmPksQ4ZmAKAr3V0u9VVScU8ikQkQhwuRifHIeCFiAWgy2xWHCGRSIBVKtAt6scdDrGmtz7IOJUyjAk7ne4Ce2JdhsimXzTeKkE7PfK0vEIjMdqTuPTSc23W6BY9G/cjvpwgKjVmOBHDnitXmfnJLcboOs+YNntWGGxADIZtRcOQ4xGEMMhjdV6Ngssl6yz2XjywuSZkf8w/vrW5MS8iWi13LPFgkbC8n5SEFwmVOLry+EApaJJ6C8KCSIaVcRXKk8FlE4D/T5vzmY81zT/0Wsa68znbKPX47ksSC5/JxkM/EdPxDvJ5RKMA3nWw8EfQxQsyecz2yiXvdNUptz7adposO716pim7EQ2Lrv3ZLP+o8/n7RQVzabHwWSSGxcJlb9y4t4qcjlgtWKd9RoiHn9x1WKRG5d1E1mhBr7PzY7WCBaruAiaQsEnnrpuNC5biLzJRL0D06ki1Ircp/FH0lstdRsnoaibzZeweDuKx6m3qE5rPZnlsmu2/KtH/9Pflm+sYR/yIsaCAQAAACV0RVh0ZGF0ZTpjcmVhdGUAMjAyMi0wOC0xMlQwNTo1MTo1NiswMDowMIPhE+YAAAAldEVYdGRhdGU6bW9kaWZ5ADIwMjItMDgtMTJUMDU6NTE6NTYrMDA6MDDyvKtaAAAAKHRFWHRkYXRlOnRpbWVzdGFtcAAyMDIyLTA4LTEyVDA1OjUxOjU2KzAwOjAwpamKhQAAAABJRU5ErkJggg==) 50% no-repeat;cursor:pointer;height:24px;margin-left:12px;scale:70%;width:24px}.ogViewExtentBtn:hover{background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYEAQAAAAa7ikwAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAACXBIWXMAAABgAAAAYADwa0LPAAAAB3RJTUUH5ggMBTM4rM25AwAAAAJiS0dEAACqjSMyAAABsUlEQVRIx81WWYrCQBAVg4Iwbp8ud5DoYRRBxPMoouiPegQVPYp6Azdc/ly++01XKkmPksQ4ZmAKAr3V0u9VVScU8ikQkQhwuRifHIeCFiAWgy2xWHCGRSIBVKtAt6scdDrGmtz7IOJUyjAk7ne4Ce2JdhsimXzTeKkE7PfK0vEIjMdqTuPTSc23W6BY9G/cjvpwgKjVmOBHDnitXmfnJLcboOs+YNntWGGxADIZtRcOQ4xGEMMhjdV6Ngssl6yz2XjywuSZkf8w/vrW5MS8iWi13LPFgkbC8n5SEFwmVOLry+EApaJJ6C8KCSIaVcRXKk8FlE4D/T5vzmY81zT/0Wsa68znbKPX47ksSC5/JxkM/EdPxDvJ5RKMA3nWw8EfQxQsyecz2yiXvdNUptz7adposO716pim7EQ2Lrv3ZLP+o8/n7RQVzabHwWSSGxcJlb9y4t4qcjlgtWKd9RoiHn9x1WKRG5d1E1mhBr7PzY7WCBaruAiaQsEnnrpuNC5biLzJRL0D06ki1Ircp/FH0lstdRsnoaibzZeweDuKx6m3qE5rPZnlsmu2/KtH/9Pflm+sYR/yIsaCAQAAACV0RVh0ZGF0ZTpjcmVhdGUAMjAyMi0wOC0xMlQwNTo1MTo1NiswMDowMIPhE+YAAAAldEVYdGRhdGU6bW9kaWZ5ADIwMjItMDgtMTJUMDU6NTE6NTYrMDA6MDDyvKtaAAAAKHRFWHRkYXRlOnRpbWVzdGFtcAAyMDIyLTA4LTEyVDA1OjUxOjU2KzAwOjAwpamKhQAAAABJRU5ErkJggg==) 50% no-repeat,var(--blue0);border-radius:10px}.og-debuginfo_button{left:10px;position:absolute;top:120px}.og-debuginfo_controls{display:flex;padding-bottom:8px}.og-debuginfo_controls-button{float:left;height:25px;margin:3px;width:25px}.og-debug-info{color:#fff;font-size:12px;padding:10px}.og-debug-info .og-watch-line{display:flex;flex-direction:row;padding-bottom:5px;width:100%}.og-watch-line .og-watch-label{color:#cecece;width:200px}.og-watch-line .og-watch-value{margin-left:15px}.og-popup{bottom:-2px;position:absolute;text-align:center}.og-popup-content-wrapper,.og-popup-tip{background:#fff;box-shadow:0 3px 14px rgba(0,0,0,.4);color:#333}.og-popup-content-wrapper{border-radius:8px;min-height:17px;min-width:30px;padding:1px;text-align:left}.og-popup-content{line-height:1.4;margin:20px 5px 5px}.og-popup-tip-container{bottom:-19px;height:20px;left:50%;margin-left:-20px;overflow:hidden;pointer-events:none;position:absolute;width:40px}.og-popup-tip{height:17px;margin:-10px auto 0;padding:1px;-webkit-transform:rotate(45deg);-moz-transform:rotate(45deg);-ms-transform:rotate(45deg);transform:rotate(45deg);width:17px}.og-popup-toolbar{display:inline-block;position:absolute;right:2px;top:3px}.og-popup-btn{cursor:pointer;float:right;height:15px;width:15px}.og-popup-btn:hover{color:#2e9be7}.og-popup-title{font-size:14px;left:5px;position:absolute;top:3px}.og-scale-container{bottom:30px;position:absolute;right:320px}.og-scale-label{color:#fff;font-family:Segoe UI,Frutiger,Frutiger Linotype,Dejavu Sans,Helvetica Neue,Arial,sans-serif;font-size:12px;position:relative;text-align:center}.og-scale-ruler{border-bottom:2px solid #fff;border-left:1px solid #fff;border-right:1px solid #fff;height:7px;position:relative}.og-compass-button{bottom:153px;right:12px}.og-compass-button svg{height:40px!important;width:40px!important}.og-suncontrol-button{float:left;height:25px;margin:3px;width:25px}.og-lighting_button{left:10px;position:absolute;top:65px}.og-lighing{color:#b6b6b6;height:calc(100% - 30px);padding:12px;position:relative}.og-lighing .og-layers{align-items:center;display:flex;flex-direction:row}.og-lighing .og-caption{position:relative}.og-emptyline,.og-lighing .og-lighting-emptyline{padding:3px;width:100%}.og-emptyline-2{padding:5px;width:100%}.og-lighing .og-slider{width:100%}.og-lighing .og-color-label,.og-lighing .og-slider .og-slider-label{font-size:12px;width:100px}.og-lighing .og-color{padding-right:10px}.og-lighing #layers{font-family:monospace;margin-left:21px;padding:2px;width:200px}.og-coordinates{background-color:var(--grey5);border-radius:4px;bottom:25px;color:var(--grey8);cursor:pointer;float:left;font-family:monospace;font-size:1em;overflow:hidden;padding:5px;position:absolute;right:12px;text-align:right}.og-coordinates div{float:left}.og-lat-side,.og-lon-side{padding-right:3px;width:10px}.og-lat-val,.og-lon-val{overflow:hidden;padding-right:3px;text-align:left;text-overflow:unset;width:90px}.og-height{overflow:hidden;padding-left:3px;text-align:right;text-overflow:ellipsis;width:50px}.og-units-height{padding-left:3px;text-align:left;width:15px}.og-center-icon{bottom:50%;height:12px;margin-bottom:-3.5px;margin-right:-7.5px;pointer-events:none;position:absolute;right:50%;width:12px}.og-atmosphere_button{left:10px;position:absolute;top:230px}.og-atmosphere.og-options-container .og-slider-label{height:20px;overflow:hidden;width:300px}.og-atmosphere.og-options-container .og-slider input{width:87px}.og-timeline_button{left:10px;position:absolute;top:10px}.og-timeline-control_button{background:var(--grey7);border-radius:1px;height:20px;margin-left:3px;margin-right:3px;width:25px}.og-button svg,.og-button svg path{height:24px;width:24px}.og-timeline-control_button.og-button__active{background:var(--grey3)}.og-timeline{background:#2d2d2d;bottom:0;height:100%;left:0;overflow:hidden;position:relative;width:100%}.og-timeline-frame{height:30px;margin:0 0 0 10px;position:relative;width:calc(100% - 20px)}.og-timeline-scale{height:100%;overflow:hidden;width:100%}.og-timeline-current{cursor:pointer;height:100%;left:0;margin-left:-5px;margin-top:-7px;position:absolute;width:11px}.og-timeline-current-spin{background-color:#ff3434;height:100%;margin:0 auto;pointer-events:none;width:1px}.og-timeline-current-arrow{border-left:7px solid transparent;border-right:7px solid transparent;border-top:7px solid #ff3434;height:0;margin-left:-6px;width:0}.og-timeline-bottom{margin-top:3px;width:100%}.og-timeline-bottom,.og-timeline-controls{display:flex;justify-content:center;position:relative}.og-timeline-controls{align-items:center;border-radius:10px;flex-direction:row;padding:8px}.og-timeline-unselectable{-moz-user-select:none;-khtml-user-select:none;-webkit-user-select:none;-ms-user-select:none;user-select:none}.og-timeline-top{display:block;height:15px;width:100%}.og-slider{display:flex;flex-direction:row;gap:5px;width:200px}.og-slider .og-slider-label{align-items:center;color:var(--grey6);display:flex;font-family:Segoe UI,Frutiger,Frutiger Linotype,Dejavu Sans,Helvetica Neue,Arial,sans-serif;font-size:14px;height:100%;margin-right:5px;text-align:left;width:100%}.og-slider .og-slider-panel{background-color:var(--grey1);border-radius:5px;height:20px;position:relative;width:100%;z-index:1}.og-slider .og-slider-panel .og-slider-progress{background-color:var(--grey7);border-bottom-left-radius:5px;border-top-left-radius:5px;height:100%;pointer-events:none;position:absolute}.og-slider .og-slider-panel .og-slider-pointer{background-color:var(--grey3);height:100%;left:0;pointer-events:none;position:absolute;top:0;width:3px}.og-slider input{background:var(--grey5);border:1px solid var(--grey1);border-radius:5px;color:var(--grey3);height:100%;padding-left:5px;position:relative;width:100%;width:60px;z-index:0}.og-slider input:focus-visible{outline:none}.og-slider input::-webkit-inner-spin-button,.og-slider input::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}.og-slider input[type=number]{-moz-appearance:textfield}.og-checkbox,.og-input{display:flex;flex-direction:row;margin:5px}.og-checkbox .og-input-label,.og-input .og-input-label{align-items:center;color:var(--grey6);font-family:Segoe UI,Frutiger,Frutiger Linotype,Dejavu Sans,Helvetica Neue,Arial,sans-serif;font-size:14px;height:100%;margin-right:5px;text-align:left;width:100%}.og-checkbox input,.og-input input{background:var(--grey5);border:1px solid var(--grey1);border-radius:5px;color:var(--grey3);height:100%;padding-left:5px;position:relative;width:100%;z-index:0}.og-checkbox input:focus-visible,.og-input input:focus-visible{outline:none}.og-checkbox input[type=checkbox]{align-content:center;appearance:none;-webkit-appearance:none;background:var(--grey8);border:1px solid var(--grey1);border-radius:3px;cursor:pointer;display:flex;height:14px;justify-content:center;padding:0;position:relative;width:14px}.og-checkbox input[type=checkbox]:before{border:solid #000;border-width:0 2px 2px 0;content:"";height:6px;left:3.5px;opacity:0;position:absolute;top:2px;transform:rotate(45deg);transition:opacity .2s ease-in-out;width:3px}.og-checkbox input[type=checkbox]:checked:before{opacity:1}.og-checkbox input[type=checkbox]:hover{border-color:var(--grey2)}.og-checkbox .og-input-label{margin-right:0}.og-checkbox-input{width:100%}.og-input-disabled{opacity:.7;pointer-events:none}.og-input-disabled input[type=checkbox]{background:var(--grey9)}.og-input input[type=number]{-moz-appearance:textfield}.og-selection_button{right:12px;top:117px}.og-geoimagegrag_button{right:12px;top:169px}.og-elevationprofile{height:100%;overflow:hidden;position:absolute;width:100%}.og-elevationprofile__container{align-content:center;align-items:center;display:flex;flex-direction:column;height:100%;position:relative;width:100%}.og-elevationprofile__menu{height:43px;position:relative;width:100%}.og-elevationprofile__graph{height:100%;position:relative;width:100%}.og-elevationprofile_button{left:10px;top:175px}.og-elevationprofile-legend{color:var(--grey8);display:flex;font-family:Segoe UI,Tahoma,Geneva,Verdana,sans-serif;font-size:12px;margin:5px;position:absolute;right:0;top:0;z-index:1}.og-elevationprofile-legend__row{padding:5px;position:relative;width:70px}.og-elevationprofile-square{float:left;height:6px;margin:5px;position:relative;width:6px}.og-elevationprofile-legend__track .og-elevationprofile-square{background-color:#00ff32}.og-elevationprofile-legend__ground .og-elevationprofile-square{background-color:#c6c6c6}.og-elevationprofile-legend__warning .og-elevationprofile-square{background-color:#ff0}.og-elevationprofile-legend__collision .og-elevationprofile-square{background-color:red}.og-elevationprofile-units{display:inline-block;float:left;padding-left:5px;position:relative}.og-elevationprofile-value{display:inline-block;float:left;overflow:hidden;position:relative;text-align:right;text-overflow:ellipsis;white-space:nowrap;width:30px}.og-elevationprofile-buttons{display:inline-block;left:0;position:absolute;top:0}.og-elevationprofile-button{float:left;height:25px;margin:3px;width:25px}.og-elevationprofile-list{display:flex;flex-direction:column;height:100%;position:relative;width:100%}.og-elevationprofile-list textarea{background:var(--grey8);height:100%;padding:5px;position:relative;resize:none;width:100%}.og-elevationprofile-list-buttons{align-items:center;display:flex;flex-direction:row;height:60px;justify-content:right;position:relative}.og-elevationprofile-list-apply{background-color:var(--grey2);float:right;margin-right:15px;padding:4px 10px 7px}.og-elevationprofile_pointer{height:100%;left:0;position:absolute;top:0}.og-elevationprofile-line{background-color:#fff;height:30px;margin-left:-1.5px;position:absolute;width:3px}.og-elevationprofile-label{color:#fff;left:0;position:absolute;top:0}.og-elevationprofile-button__location svg{height:17px;width:17px}.og-elevationprofile-loading{align-items:center;background-color:#000;display:flex;flex-direction:row;height:100%;justify-content:center;opacity:.3;position:absolute;width:100%;z-index:2}.og-simpleskybackground{display:flex}.og-color-label{color:var(--grey6);font-family:Segoe UI,Frutiger,Frutiger Linotype,Dejavu Sans,Helvetica Neue,Arial,sans-serif;font-size:14px}@keyframes ldio-p0v5a1f6oz{0%{opacity:1}50%{opacity:.5}to{opacity:1}}.ldio-p0v5a1f6oz div{animation:ldio-p0v5a1f6oz .9345794392523364s cubic-bezier(.5,0,.5,1) infinite;height:40px;position:absolute;top:30px;width:11px}.ldio-p0v5a1f6oz div:first-child{animation-delay:-.5607476635514018s;background:#353535;transform:translate(14.5px)}.ldio-p0v5a1f6oz div:nth-child(2){animation-delay:-.37383177570093457s;background:#666;transform:translate(34.5px)}.ldio-p0v5a1f6oz div:nth-child(3){animation-delay:-.18691588785046728s;background:#9b9b9b;transform:translate(54.5px)}.ldio-p0v5a1f6oz div:nth-child(4){animation-delay:-.9345794392523364s;background:#d4d4d4;transform:translate(74.5px)}.loadingio-spinner-bars-r354qqyl5v{background:none;display:inline-block;height:88px;overflow:hidden;width:88px}.ldio-p0v5a1f6oz{backface-visibility:hidden;height:100%;position:relative;transform:translateZ(0) scale(.88);transform-origin:0 0;width:100%}.ldio-p0v5a1f6oz div{box-sizing:content-box}.og-editor-ground_button{background:var(--grey1);margin-left:5px;margin-top:15px;padding:4px 6px 8px;width:fit-content}.og-editor_toolbar{display:flex;padding-bottom:8px}.og-editor_toolbar-button{float:left;height:25px;margin:3px;width:25px}
|