@cognite/reveal 4.0.0-dev.20221107 → 4.0.0-dev.20221109

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cognite/reveal",
3
- "version": "4.0.0-dev.20221107",
3
+ "version": "4.0.0-dev.20221109",
4
4
  "description": "WebGL based 3D viewer for CAD and point clouds processed in Cognite Data Fusion.",
5
5
  "homepage": "https://github.com/cognitedata/reveal/tree/master/viewer",
6
6
  "repository": {
@@ -21,7 +21,7 @@
21
21
  "dependencies": {
22
22
  "@tweenjs/tween.js": "18.6.4",
23
23
  "@types/draco3dgltf": "1.4.0",
24
- "@types/three": "0.144.0",
24
+ "@types/three": "0.146.0",
25
25
  "assert": "2.0.0",
26
26
  "async-mutex": "0.4.0",
27
27
  "comlink": "4.3.1",
@@ -34,11 +34,11 @@
34
34
  "proj4": "2.8.0",
35
35
  "rxjs": "7.5.7",
36
36
  "skmeans": "0.11.3",
37
- "three": "0.144.0",
37
+ "three": "0.146.0",
38
38
  "three-stdlib": "2.17.3"
39
39
  },
40
40
  "peerDependencies": {
41
- "@cognite/sdk": "7.10.0",
41
+ "@cognite/sdk": "7.11.0",
42
42
  "@cognite/sdk-core": "^4.1.0"
43
43
  },
44
44
  "glslify": {
@@ -319,9 +319,14 @@ export declare class Cognite3DViewer {
319
319
  removeObject3D(object: THREE.Object3D): void;
320
320
  /**
321
321
  * Sets the color used as the clear color of the renderer.
322
- * @param color
322
+ * @param backgroundColor
323
+ * @param backgroundColor.color
324
+ * @param backgroundColor.alpha
323
325
  */
324
- setBackgroundColor(color: THREE.Color): void;
326
+ setBackgroundColor(backgroundColor: {
327
+ color?: THREE.Color;
328
+ alpha?: number;
329
+ }): void;
325
330
  /**
326
331
  * Sets per-pixel clipping planes. Pixels behind any of the planes will be sliced away.
327
332
  * @param clippingPlanes The planes to use for clipping.
@@ -357,16 +362,6 @@ export declare class Cognite3DViewer {
357
362
  * Returns the current active clipping planes.
358
363
  */
359
364
  getClippingPlanes(): THREE.Plane[];
360
- /**
361
- * @obvious
362
- * @returns The THREE.Camera used for rendering.
363
- */
364
- getCamera(): THREE.PerspectiveCamera;
365
- /**
366
- * @obvious
367
- * @returns The THREE.Scene used for rendering.
368
- */
369
- getScene(): THREE.Scene;
370
365
  /**
371
366
  * Attempts to load the camera settings from the settings stored for the
372
367
  * provided model. See {@link https://docs.cognite.com/api/v1/#operation/get3DRevision}
@@ -7,6 +7,7 @@ import { PointCloudBudget, PointCloudIntersection } from '../../../../pointcloud
7
7
  import { CameraManager } from '../../../../camera-manager';
8
8
  import { GeometryFilter, CogniteCadModel } from '../../../../cad-model';
9
9
  import { DataSource } from '../../../../data-source';
10
+ import { EdlOptions } from '../../../../rendering';
10
11
  /**
11
12
  * Callback to monitor loaded requests and progress.
12
13
  * Use OnLoadingCallback instead of onProgress/onComplete.
@@ -101,6 +102,10 @@ export interface Cognite3DViewerOptions {
101
102
  * big enough. Can cause significant decrease in performance on some machines.
102
103
  */
103
104
  pointBlending?: boolean;
105
+ /**
106
+ * Eye Dome Lighting (EDL) effect, considerably improves depth perception of point cloud model.
107
+ */
108
+ edlOptions?: Partial<EdlOptions> | 'disabled';
104
109
  };
105
110
  /**
106
111
  * Enables / disables visualizing the edges of geometry. Defaults to true.
@@ -1,8 +1,7 @@
1
1
  /*!
2
2
  * Copyright 2021 Cognite AS
3
3
  */
4
- import { EventDispatcher, Vector2, Vector3, PerspectiveCamera, OrthographicCamera, Quaternion } from 'three';
5
- export declare function getHTMLOffset(domElement: HTMLElement, clientX: number, clientY: number): Vector2;
4
+ import { EventDispatcher, Vector3, PerspectiveCamera, OrthographicCamera, Quaternion } from 'three';
6
5
  export declare class ComboControls extends EventDispatcher {
7
6
  enabled: boolean;
8
7
  enableDamping: boolean;
@@ -4,7 +4,7 @@
4
4
  export { CadMaterialManager } from './src/CadMaterialManager';
5
5
  export { PointCloudMaterialManager } from './src/PointCloudMaterialManager';
6
6
  export { NodeTransformProvider } from './src/transform/NodeTransformProvider';
7
- export { RenderOptions, defaultRenderOptions, SsaoParameters, SsaoSampleQuality, AntiAliasingMode } from './src/rendering/types';
7
+ export { RenderOptions, defaultRenderOptions, SsaoParameters, SsaoSampleQuality, AntiAliasingMode, EdlOptions } from './src/rendering/types';
8
8
  export * from './src/pointcloud-rendering/constants';
9
9
  export * from './src/pointcloud-rendering/enums';
10
10
  export * from './src/pointcloud-rendering/types';
@@ -13,5 +13,6 @@ export declare const UPDATE_THROTTLE_TIME_MS = 100;
13
13
  export declare const PERSPECTIVE_CAMERA = "PerspectiveCamera";
14
14
  export declare const COLOR_BLACK: Color;
15
15
  export declare const COLOR_WHITE: Color;
16
+ export declare const DEFAULT_EDL_NEIGHBOURS_COUNT = 8;
16
17
  export declare const OBJECT_STYLING_TEXTURE_WIDTH = 256;
17
18
  export declare const OBJECT_STYLING_TEXTURE_HEIGHT = 256;
@@ -14,6 +14,8 @@ import { PostProcessingPipelineOptions } from '../render-pipeline-providers/type
14
14
  export declare class PostProcessingPass implements RenderPass {
15
15
  private readonly _scene;
16
16
  private readonly _postProcessingObjects;
17
+ private readonly _pointcloudBlitMaterial;
18
+ private readonly _postProcessingOptions;
17
19
  private readonly setBlendFactorByBackVisibility;
18
20
  updateRenderObjectsVisibility(visibilityParameters: PostProcessingObjectsVisibilityParameters): void;
19
21
  constructor(scene: THREE.Scene, postProcessingPipelineOptions: PostProcessingPipelineOptions);
@@ -3,6 +3,7 @@
3
3
  */
4
4
  import { PointShape } from '../pointcloud-rendering';
5
5
  import * as THREE from 'three';
6
+ import { EdlOptions } from '../rendering/types';
6
7
  export declare type BlendOptions = {
7
8
  blendDestination: THREE.BlendingDstFactor;
8
9
  blendSource: THREE.BlendingDstFactor | THREE.BlendingSrcFactor;
@@ -37,6 +38,7 @@ export declare type PointCloudPostProcessingOptions = {
37
38
  texture: THREE.Texture;
38
39
  depthTexture: THREE.DepthTexture;
39
40
  pointBlending: boolean;
41
+ edlOptions: EdlOptions;
40
42
  };
41
43
  export declare const transparentBlendOptions: BlendOptions;
42
44
  export declare type ThreeUniforms = {
@@ -45,6 +47,7 @@ export declare type ThreeUniforms = {
45
47
  export declare type PointCloudMaterialParameters = {
46
48
  weighted?: boolean;
47
49
  shape?: PointShape;
50
+ useEDL?: boolean;
48
51
  hqDepthPass?: boolean;
49
52
  depthWrite?: boolean;
50
53
  blending?: THREE.Blending;
@@ -0,0 +1,5 @@
1
+ /*!
2
+ * Copyright 2022 Cognite AS
3
+ */
4
+ import { EdlOptions } from '../rendering/types';
5
+ export declare function shouldApplyEdl(edlOptions: EdlOptions): boolean;
@@ -2,6 +2,7 @@
2
2
  * Copyright 2022 Cognite AS
3
3
  */
4
4
  import * as THREE from 'three';
5
+ import { EdlOptions } from '../rendering/types';
5
6
  export declare type RenderTargetData = {
6
7
  currentRenderSize: THREE.Vector2;
7
8
  ssaoRenderTarget: THREE.WebGLRenderTarget;
@@ -20,4 +21,5 @@ export declare type PostProcessingPipelineOptions = CadGeometryRenderTargets & P
20
21
  ssaoTexture: THREE.Texture;
21
22
  edges: boolean;
22
23
  pointBlending?: boolean;
24
+ edlOptions: EdlOptions;
23
25
  };
@@ -14,6 +14,19 @@ export declare enum AntiAliasingMode {
14
14
  */
15
15
  FXAA = 1
16
16
  }
17
+ /**
18
+ * Configuration parameters for Eye Dome Lighting (EDL) point cloud post-processing effect.
19
+ */
20
+ export declare type EdlOptions = {
21
+ /**
22
+ * Determines how pronounced the effect is. Lower values result in more transparent edges.
23
+ */
24
+ strength: number;
25
+ /**
26
+ * Radius of sampled points in pixels. Determines thickness of edges addet on top of points.
27
+ */
28
+ radius: number;
29
+ };
17
30
  /**
18
31
  * Options and hints for how the Reveal viewer applies rendering effects.
19
32
  */
@@ -85,4 +98,8 @@ export declare type PointCloudParameters = {
85
98
  * Effect of blending close points together. Creates smoother texture on object surfaces.
86
99
  */
87
100
  pointBlending: boolean;
101
+ /**
102
+ * Eye Dome Lighting effect options. Considerably improves perception of depth within rendered point cloud.
103
+ */
104
+ edlOptions: EdlOptions;
88
105
  };
package/tools.js CHANGED
@@ -1,3 +1,3 @@
1
1
  /*! For license information please see tools.js.LICENSE.txt */
2
- !function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define([],t):"object"==typeof exports?exports["@cognite/reveal"]=t():e["@cognite/reveal"]=t()}("undefined"!=typeof self?self:this,(()=>(()=>{"use strict";var e={430:(e,t,s)=>{s.d(t,{Z:()=>i});const i="precision highp float;\n#define GLSLIFY 1\n\nuniform sampler2D tex;\n\nin vec2 vUv;\n\nout vec4 color;\n\nvoid main()\n{\n color = texture(tex, vUv); \n}\n"},479:(e,t,s)=>{s.d(t,{Z:()=>i});const i="#define GLSLIFY 1\nuniform mat4 modelMatrix;\nuniform vec2 scale;\nuniform vec2 offset;\n\nin vec3 position;\nin vec2 uv;\n\nout vec2 vUv;\n\nconst mat4 unitOrthographicProjection = mat4(1., 0., 0., 0., 0., 1., 0., 0., 0., 0., -1., 0., 0., 0., 0., 1.);\n\nvoid main() {\n vUv = uv;\n\n vec4 clipSpace = unitOrthographicProjection * modelMatrix * vec4(position, 1.0);\n\n clipSpace.xy *= scale.xy;\n\n clipSpace.xy += vec2(-1., -1.) + offset;\n\n gl_Position = clipSpace;\n}\n"}},t={};function s(i){var n=t[i];if(void 0!==n)return n.exports;var o=t[i]={exports:{}};return e[i](o,o.exports,s),o.exports}s.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return s.d(t,{a:t}),t},s.d=(e,t)=>{for(var i in t)s.o(t,i)&&!s.o(e,i)&&Object.defineProperty(e,i,{enumerable:!0,get:t[i]})},s.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),s.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),s.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})};var i={};return(()=>{s.r(i),s.d(i,{AxisViewTool:()=>W,Cognite3DViewerToolBase:()=>g,Corner:()=>G,DebugCameraTool:()=>O,ExplodedViewTool:()=>V,HtmlOverlayTool:()=>D,Keyframe:()=>q,MeasurementTool:()=>J,TimelineTool:()=>K});const e=require("three");class t{static color(e){const s=t._colors.get(e);if(void 0!==s)return s;const i=t.generateRandomColor();return t._colors.set(e,i),i}static colorRGB(e){const s=t.color(e);return[Math.floor(255*s.r),Math.floor(255*s.g),Math.floor(255*s.b)]}static colorCSS(e){const[s,i,n]=t.colorRGB(e);return`rgb(${s}, ${i}, ${n})`}static generateRandomColor(){const t=Math.random(),s=.4+.6*Math.random(),i=.3+.4*Math.random();return(new e.Color).setHSL(t,s,i)}}t._colors=new Map;class n{constructor(){this._listeners=[]}subscribe(e){this._listeners.push(e)}unsubscribe(e){const t=this._listeners.indexOf(e);-1!==t&&this._listeners.splice(t,1)}unsubscribeAll(){this._listeners.splice(0)}fire(...e){this._listeners.forEach((t=>t(...e)))}}function o(e,t){const s=t.getBoundingClientRect();if(e instanceof MouseEvent)return{offsetX:e.clientX-s.left,offsetY:e.clientY-s.top};if(e.changedTouches.length>0){const t=e.changedTouches[0];return{offsetX:t.clientX-s.left,offsetY:t.clientY-s.top}}return{offsetX:-1,offsetY:-1}}const r=require("lodash/debounce");var a=s.n(r);function l(e,t){throw new Error(t||"Unexpected object: "+e)}class d{constructor(e){this._events={click:new n,hover:new n},this.onHoverCallback=a()((e=>{this._events.hover.fire(o(e,this.domElement))}),100),this.domElement=e,this.setupEventListeners()}on(e,t){switch(e){case"click":this._events.click.subscribe(t);break;case"hover":this._events.hover.subscribe(t);break;default:l(e)}}off(e,t){switch(e){case"click":this._events.click.unsubscribe(t);break;case"hover":this._events.hover.unsubscribe(t);break;default:l(e)}}dispose(){!function(e){for(const t of Object.keys(e))e[t].unsubscribeAll()}(this._events)}setupEventListeners(){const{domElement:t}=this;let s=!1,i=0,n=!1;const r=new e.Vector2,a=e=>{this.handleClickEvent(e,r,s,n,i),s=!1,n=!1,t.removeEventListener("mouseup",a),t.removeEventListener("touchend",a),t.addEventListener("mousemove",this.onHoverCallback)},l=e=>{s=!0,n=!0,i=e.timeStamp;const{offsetX:l,offsetY:d}=o(e,t);r.set(l,d),t.addEventListener("mouseup",a),t.addEventListener("touchend",a),t.removeEventListener("mousemove",this.onHoverCallback)};t.addEventListener("mousedown",l),t.addEventListener("touchstart",l),t.addEventListener("mousemove",this.onHoverCallback)}isProperClick(e,t,s,i,n){const{offsetX:r,offsetY:a}=o(e,this.domElement),l=e.timeStamp-n,c=Math.abs(r-t.x)+Math.abs(a-t.y)>d.maxMoveDistance;return s&&i&&l<d.maxClickDuration&&!c}handleClickEvent(e,t,s,i,n){if(this.isProperClick(e,t,s,i,n)){const t={...o(e,this.domElement),button:e instanceof MouseEvent?e.button:void 0};this._events.click.fire(t)}}}d.maxMoveDistance=8,d.maxClickDuration=250,Math.log(2),require("assert"),new e.BufferGeometry;class c extends e.Group{constructor(){super(...arguments),this._isDisposed=!1,this._referenceCount=0}reference(){this.ensureNotDisposed(),this._referenceCount++}dereference(){if(this.ensureNotDisposed(),0===this._referenceCount)throw new Error("No references");0==--this._referenceCount&&this.dispose()}dispose(){this.ensureNotDisposed(),this._isDisposed=!0;for(const e of this.children)e instanceof THREE.Mesh&&void 0!==e.geometry&&(e.geometry.dispose(),e.geometry=emptyGeometry),e instanceof THREE.BufferGeometry&&e.dispose();this.clear()}ensureNotDisposed(){if(this._isDisposed)throw new Error("Already disposed/dereferenced")}}new e.Vector3,new e.Box3;class h extends e.Object3D{constructor(e){super(),this._activeLevel=0,this._levels=[],this.isLOD=!0,this.autoUpdate=!0,this._boundingBox=e.clone(),this.type="BoundingBoxLOD"}setBoundingBox(e){this._boundingBox.copy(e)}addLevel(e,t=0){this._levels.push({object:e,distance:Math.abs(t)}),this._levels.sort(((e,t)=>t.distance-e.distance)),e.visible=!1,this.add(e)}getCurrentLevel(){return this._levels.length>0?this._levels.length-this._activeLevel-1:0}update(e){this.updateCurrentLevel(e)}updateCurrentLevel(e){const t=this._levels,{camPos:s,bounds:i}=updateVars;i.copy(this._boundingBox).applyMatrix4(this.matrixWorld);const n=e instanceof THREE.PerspectiveCamera?e.zoom:1;if(t.length>0){s.setFromMatrixPosition(e.matrixWorld);const o=i.distanceToPoint(s)/n;t[this._activeLevel].object.visible=!1,this._activeLevel=t.findIndex((e=>o>=e.distance)),this._activeLevel=this._activeLevel>=0?this._activeLevel:t.length-1,t[this._activeLevel].object.visible=!0}}}new e.Vector3;class m{constructor(e){this._originalState={},this._renderer=e,this._originalState={}}setScissor(t,s,i,n){const o=this._renderer.getScissor(new e.Vector4);this._originalState={scissorData:o,...this._originalState},this._renderer.setScissor(t,s,i,n)}setScissorTest(e){this._originalState={scissorTest:this._renderer.getScissorTest(),...this._originalState},this._renderer.setScissorTest(e)}setClearColor(t,s){this._originalState={clearColor:this._renderer.getClearColor(new e.Color),clearAlpha:this._renderer.getClearAlpha(),...this._originalState},this._renderer.setClearColor(t,s)}setWebGLState(e,t=m.DefaultWebGLState){var s,i,n,o,r,a,l;if(this._originalState={webGLState:{buffers:(null==e?void 0:e.buffers)?{}:void 0},...this._originalState},null===(s=null==e?void 0:e.buffers)||void 0===s?void 0:s.depth){const s=null===(i=e.buffers.depth)||void 0===i?void 0:i.test,d=null===(n=e.buffers.depth)||void 0===n?void 0:n.mask;this._originalState.webGLState.buffers.depth={test:void 0!==s?null===(r=null===(o=t.buffers)||void 0===o?void 0:o.depth)||void 0===r?void 0:r.test:void 0,mask:void 0!==d?null===(l=null===(a=t.buffers)||void 0===a?void 0:a.depth)||void 0===l?void 0:l.mask:void 0},void 0!==d&&this._renderer.state.buffers.depth.setMask(d),void 0!==s&&this._renderer.state.buffers.depth.setTest(s)}}setSize(t,s){this._originalState={size:this._renderer.getSize(new e.Vector2),...this._originalState},this._renderer.setSize(t,s)}set localClippingEnabled(e){this._originalState={localClippingEnabled:this._renderer.localClippingEnabled,...this._originalState},this._renderer.localClippingEnabled=e}set autoClear(e){this._originalState={autoClear:this._renderer.autoClear,...this._originalState},this._renderer.autoClear=e}set autoClearDepth(e){this._originalState={autoClearDepth:this._renderer.autoClearDepth,...this._originalState},this._renderer.autoClearDepth=e}setRenderTarget(e){this._originalState={renderTarget:this._renderer.getRenderTarget(),...this._originalState},this._renderer.setRenderTarget(e)}resetState(){var e,t,s,i;if(void 0!==this._originalState.autoClear&&(this._renderer.autoClear=this._originalState.autoClear),void 0!==this._originalState.autoClearDepth&&(this._renderer.autoClearDepth=this._originalState.autoClearDepth),void 0!==this._originalState.clearColor&&this._renderer.setClearColor(this._originalState.clearColor,this._originalState.clearAlpha),void 0!==this._originalState.localClippingEnabled&&(this._renderer.localClippingEnabled=this._originalState.localClippingEnabled),void 0!==this._originalState.size&&this._renderer.setSize(this._originalState.size.width,this._originalState.size.height),void 0!==this._originalState.renderTarget&&this._renderer.setRenderTarget(this._originalState.renderTarget),void 0!==this._originalState.scissorData&&this._renderer.setScissor(this._originalState.scissorData),void 0!==this._originalState.scissorTest&&this._renderer.setScissorTest(this._originalState.scissorTest),void 0!==this._originalState.webGLState&&(this._renderer.state.reset(),null===(t=null===(e=this._originalState.webGLState)||void 0===e?void 0:e.buffers)||void 0===t?void 0:t.depth)){const e=null===(s=this._originalState.webGLState.buffers.depth)||void 0===s?void 0:s.test,t=null===(i=this._originalState.webGLState.buffers.depth)||void 0===i?void 0:i.mask;void 0!==t&&this._renderer.state.buffers.depth.setMask(t),void 0!==e&&this._renderer.state.buffers.depth.setTest(e)}this._originalState={}}}m.DefaultWebGLState={buffers:{depth:{mask:!0,test:!0}}};class u{constructor(e){this._value=e,this._lastAccessTime=Date.now()}get value(){return this.touch(),this._value}get lastAccessTime(){return this._lastAccessTime}touch(){this._lastAccessTime=Date.now()}}class p{constructor(e=50,t,s=10){this._data=new Map,this._maxElementsInCache=e,this._defaultCleanupCount=Math.max(s,1),this._removeCallback=t}has(e){return this._data.has(e)}forceInsert(e,t){this.isFull()&&this.cleanCache(this._defaultCleanupCount),this.insert(e,t)}insert(e,t){if(this._data.size<this._maxElementsInCache)this._data.set(e,new u(t));else if(this._maxElementsInCache>0)throw new Error("Cache full, please clean Cache and retry adding data")}remove(e){if(void 0!==this._removeCallback){const t=this._data.get(e);void 0!==t&&this._removeCallback(t.value)}this._data.delete(e)}get(e){const t=this._data.get(e);if(void 0!==t)return t.value;throw new Error(`Cache element ${e} does not exist`)}isFull(){return this._data.size>=this._maxElementsInCache}cleanCache(e){const t=Array.from(this._data.entries());t.sort(((e,t)=>t[1].lastAccessTime-e[1].lastAccessTime));for(let s=0;s<e;s++){const e=t.pop();if(void 0===e)return;this.remove(e[0])}}resize(e){this._maxElementsInCache=e,this._defaultCleanupCount=Math.max(e*p.CLEANUP_COUNT_TO_CAPACITY_RATIO,1),this.isFull()&&this.cleanCache(this._data.size-this._maxElementsInCache)}clear(){if(void 0!==this._removeCallback)for(const e of this._data.values())this._removeCallback(e.value);this._data.clear()}}p.CLEANUP_COUNT_TO_CAPACITY_RATIO=.2,require("lodash/chunk"),require("lodash/map");const _={renderSize:new e.Vector2,position:new e.Vector3};var v,f;Symbol.toStringTag,require("lodash/remove"),function(){if("undefined"!=typeof self)return self;if("undefined"!=typeof window)return window;if(void 0!==s.g)return s.g;throw new Error("unable to locate global object")}(),(f=v||(v={}))[f.Box=0]="Box",f[f.Cylinder=1]="Cylinder",f[f.Composite=2]="Composite";class g{constructor(){this._disposedEvent=new n,this._disposed=!1}on(e,t){"disposed"===e?this._disposedEvent.subscribe(t):l(e)}off(e,t){"disposed"===e?this._disposedEvent.unsubscribe(t):l(e)}dispose(){if(this._disposed)throw new Error("Already disposed");this._disposed=!0,this._disposedEvent.fire(),this._disposedEvent.unsubscribeAll()}ensureNotDisposed(){if(this._disposed)throw new Error("The tool has been disposed")}}const w=require("lodash/range");var y=s.n(w);class C{constructor(e,t){this._removedElements=new Set,this._dimensions=t,this._cells=y()(0,t[0]*t[1]).map((()=>new Array)),this._bounds=e}insert(e,t){if(!this._bounds.intersectsBox(e))throw new Error("Element to be added must be partially inside grid");if(this._removedElements.has(t))throw new Error("Re-adding previously taken elements is currently not supported");for(const s of this.cellsIntersecting(e))s.push({bounds:e,element:t})}*overlappingElements(e){if(!this._bounds.intersectsBox(e))return;const t=new Set;for(const s of this.cellsIntersecting(e))for(const i of s)t.has(i.element)||this._removedElements.has(i.element)||!e.intersectsBox(i.bounds)||(t.add(i.element),yield i.element)}*removeOverlappingElements(e){if(this._bounds.intersectsBox(e))for(const t of this.cellsIntersecting(e))for(let s=0;s<t.length;s++){const i=t[s];!this._removedElements.has(i.element)&&e.intersectsBox(i.bounds)&&(this._removedElements.add(i.element),yield i.element)}}*cellsIntersecting(t){const{min:s,max:i}=this._bounds,n=this._dimensions[0],o=this._dimensions[1],r=(t.min.x-s.x)/(i.x-s.x),a=(t.max.x-s.x)/(i.x-s.x),l=(t.min.y-s.y)/(i.y-s.y),d=(t.max.y-s.y)/(i.y-s.y),c=e.MathUtils.clamp,h=c(Math.floor(n*r),0,n-1),m=c(Math.floor(n*a),0,n-1),u=c(Math.floor(o*l),0,o-1),p=c(Math.floor(o*d),0,o-1);for(let e=u;e<=p;++e)for(let t=h;t<=m;++t)yield this._cells[e*n+t]}}const b=require("mixpanel-browser");var x=s.n(b);const E=require("loglevel"),M=require("lodash/throttle");var L=s.n(M);const{VERSION:S,MIXPANEL_TOKEN:k}={VERSION:"4.0.0-dev.20221107",MIXPANEL_TOKEN:"8c900bdfe458e32b768450c20750853d",IS_DEVELOPMENT_MODE:!1};class T{constructor(e,t,s){x().init(k,{batch_requests:!0,disable_cookie:!0,disable_persistence:!0,ip:!1,property_blacklist:["$city","$region","mp_country_code","$geo_source","$timezone","mp_lib","$lib_version","$device_id","$user_id","$current_url","$screen_width","$screen_height","$referrer","$referring_domain","$initial_referrer","$initial_referring_domain"]}),x().reset(),x().identify("reveal-single-user"),this._sessionProps={VERSION:S,project:"unknown",application:"unknown",sessionId:"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,(function(e){const t=16*Math.random()|0;return("x"==e?t:3&t|8).toString(16)}))},e&&(this._sessionProps.project=e),t&&(this._sessionProps.application=t),this.innerTrackEvent("init",s)}static init(e,t,s,i){if(void 0===globalThis.revealMetricsLogger&&e){const e=new T(t,s,i);globalThis.revealMetricsLogger={metricsLogger:e}}}innerTrackEvent(e,t){const s={...this._sessionProps,...t};x().track(e,s)}static trackEvent(e,t){globalThis.revealMetricsLogger&&globalThis.revealMetricsLogger.metricsLogger.innerTrackEvent(e,t)}static trackCreateTool(e){T.trackEvent("toolCreated",{toolName:e})}static trackLoadModel(e,t,s){T.trackEvent("loadModel",{...e,modelIdentifier:t,modelVersion:s})}static trackCadModelStyled(e,t){T.trackEvent("cadModelStyleAssigned",{nodeCollectionClassToken:e,style:t})}static trackCadNodeTransformOverriddenImpl(e,t){const{zeroVector:s,oneVector:i,identityRotation:n,translation:o,scale:r,rotation:a}=T.trackCadNodeTransformOverriddenVars;t.decompose(o,a,r);const l=Math.abs(a.angleTo(n))>1e-5,d=o.distanceToSquared(s)>1e-5,c=r.distanceToSquared(i)>1e-5;T.trackEvent("cadNodeTransformOverridden",{nodeCount:e,hasTranslation:d,hasRotation:l,hasScale:c})}static trackCameraNavigationImpl(e){T.trackEvent("cameraNavigated",e)}static trackError(e,t){E.error(e),void 0!==e?this.trackEvent("error",{message:e.message||e,name:e.name,stack:e.stack,...t}):this.trackEvent("error",{name:"unknown",...t})}}T.TrackCameraNavigationThrottleDelay=5e3,T.TrackCadNodeTransformOverriddenThrottleDelay=1e3,T.trackCadNodeTransformOverriddenVars={zeroVector:new e.Vector3(0,0,0),oneVector:new e.Vector3(1,1,1),identityRotation:(new e.Quaternion).identity(),translation:new e.Vector3,scale:new e.Vector3,rotation:new e.Quaternion},T.trackCadNodeTransformOverridden=L()(((e,t)=>T.trackCadNodeTransformOverriddenImpl(e,t)),T.TrackCadNodeTransformOverriddenThrottleDelay),T.trackCameraNavigation=L()((e=>T.trackCameraNavigationImpl(e)),T.TrackCameraNavigationThrottleDelay);class D extends g{constructor(t,s){super(),this._htmlOverlays=new Map,this._compositeOverlays=[],this._preallocatedVariables={camPos:new e.Vector3,camNormal:new e.Vector3,point:new e.Vector3,nearPlane:new e.Plane,farPlane:new e.Plane,position2D:new e.Vector2},this._onSceneRenderedHandler=this.onSceneRendered.bind(this),this._onViewerDisposedHandler=this.onViewerDisposed.bind(this),this._options=null!=s?s:{},this._viewer=t,this._viewer.on("sceneRendered",this._onSceneRenderedHandler),this._viewer.on("disposed",this._onViewerDisposedHandler),this.scheduleUpdate=a()((()=>this.forceUpdate()),20),this._visible=!0,T.trackCreateTool("HtmlOverlayTool")}get viewerDomElement(){return this._viewer.domElement}get viewerCamera(){return this._viewer.getCamera()}get viewerRenderer(){return this._viewer.renderer}get elements(){return Array.from(this._htmlOverlays.entries()).map((([e,t])=>({element:e,position3D:t.position3D})))}dispose(){this._viewer.off("sceneRendered",this._onSceneRenderedHandler),this._viewer.off("disposed",this._onViewerDisposedHandler),this.clear(),super.dispose()}add(t,s,i={}){if(this.ensureNotDisposed(),this.viewerDomElement.contains(t))throw new Error("Element is already attached to viewer");t.style.visibility="hidden",this.viewerDomElement.appendChild(t);const n=getComputedStyle(t);if("absolute"!==n.position)throw this.viewerDomElement.removeChild(t),new Error(`htmlElement style must have a position of absolute. but was '${n.position}'`);const o={position3D:s,options:i,state:{position2D:new e.Vector2,width:-1,height:-1,visible:!0}};this._htmlOverlays.set(t,o),this.scheduleUpdate()}remove(e){if(this.ensureNotDisposed(),!this.viewerDomElement.contains(e)||!this._htmlOverlays.has(e))throw new Error("Element is not attached to viewer");this.viewerDomElement.removeChild(e),this._htmlOverlays.delete(e)}clear(){const e=Array.from(this._htmlOverlays.keys());for(const t of e)this.remove(t);this.forceUpdate()}visible(e){const t=!0===e?"visible":"hidden";this._visible=e,this._htmlOverlays.forEach(((e,s)=>{s.style.visibility=t})),this._compositeOverlays.forEach((e=>{e.style.visibility=t})),this.forceUpdate()}forceUpdate(){if(!this._visible)return;if(this.ensureNotDisposed(),this.cleanupClusterElements(),0===this._htmlOverlays.size)return;this.updateNewElementSizes();const t=this.viewerCamera,s=this.viewerRenderer,{camPos:i,camNormal:n,point:o,nearPlane:r,farPlane:a,position2D:l}=this._preallocatedVariables;t.getWorldPosition(i),t.getWorldDirection(n),o.copy(i).addScaledVector(n,t.near),r.setFromNormalAndCoplanarPoint(n,o),o.copy(i).addScaledVector(n,t.far),a.setFromNormalAndCoplanarPoint(n,o),this._htmlOverlays.forEach(((n,o)=>{const{position3D:d,options:{positionUpdatedCallback:c,userData:h},state:m}=n,u=r.distanceToPoint(d)>=0&&a.distanceToPoint(d)<=0,{x:p,y:v}=function(t,s,i,n=new e.Vector3){!function(t,s,i=new e.Vector3){const{position:n}=_;n.copy(s),n.project(t);const o=(n.x+1)/2,r=(1-n.y)/2;i.set(o,r,n.z)}(s,i,n);const{renderSize:o}=_;t.getSize(o);const r=t.domElement,{width:a,height:l}=r.getBoundingClientRect();return n.x=Math.round(n.x*a),n.y=Math.round(n.y*l),n}(s,t,d);if(u?(m.position2D.set(p,v),m.visible=!0):m.visible=!1,c){l.set(p,v);const e=i.distanceTo(d);c(o,l,d,e,h)}})),this.clusterElements(),this.commitDOMChanges()}updateNewElementSizes(){this._htmlOverlays.forEach(((e,t)=>{if(-1===e.state.width){const s=t.getBoundingClientRect();e.state.width=s.width,e.state.height=s.height}}))}commitDOMChanges(){const e=this.viewerRenderer.domElement,t=e.offsetLeft,s=e.offsetTop;this._htmlOverlays.forEach(((e,i)=>{const{state:n}=e;i.style.left=`${n.position2D.x+t}px`,i.style.top=`${n.position2D.y+s}px`,n.visible&&"visible"!==i.style.visibility?function(e){e.style.visibility="visible",e.style.opacity="1",e.style.transition="opacity 0.2s linear"}(i):n.visible||"hidden"===i.style.visibility||function(e){e.style.visibility="hidden",e.style.opacity="0",e.style.transition="visibility 0s 0.2s, opacity 0.2s linear"}(i)})),this._compositeOverlays.forEach((e=>{this.viewerDomElement.appendChild(e)}))}clusterElements(){const e=this._options.clusteringOptions;void 0!==e&&("overlapInScreenSpace"===e.mode?this.clusterByOverlapInScreenSpace(e.createClusterElementCallback):l(e.mode,`Unsupported clustering mode: '${e.mode}`))}cleanupClusterElements(){this._compositeOverlays.forEach((e=>{this.viewerDomElement.removeChild(e)})),this._compositeOverlays.splice(0)}clusterByOverlapInScreenSpace(t){const s=(i=this.viewerRenderer.domElement.getBoundingClientRect(),(n=null!=n?n:new e.Box2).min.set(i.left,i.top),n.max.set(i.right,i.bottom),n);var i,n;const o=s.getSize(new e.Vector2);s.set(new e.Vector2(0,0),o);const r=new C(s,[10,10]);for(const[e,t]of this._htmlOverlays.entries()){const{state:i}=t,n=P(t);i.visible&&n.intersectsBox(s)&&r.insert(n,{htmlElement:e,...t})}const a=new e.Box2,l=new e.Vector2;for(const e of this._htmlOverlays.values()){const{state:i}=e;if(P(e,a),!i.visible||!a.intersectsBox(s))continue;const n=Array.from(r.removeOverlappingElements(a));if(n.length>1){const e=n.reduce(((e,t)=>e.add(t.state.position2D)),l.set(0,0)).divideScalar(n.length),s=t(n.map((e=>({htmlElement:e.htmlElement,userData:e.options.userData}))));n.forEach((e=>e.state.visible=!1)),this.addComposite(s,e)}}}addComposite(e,t){const s=this.viewerRenderer.domElement;e.style.visibility="visible",e.style.left=`${t.x+s.offsetLeft}px`,e.style.top=`${t.y+s.offsetTop}px`,this._compositeOverlays.push(e)}onSceneRendered(){this.forceUpdate()}onViewerDisposed(){this.dispose()}}function P(t,s){const{state:i}=t;return(s=null!=s?s:new e.Box2).min.set(i.position2D.x,i.position2D.y),s.max.set(i.position2D.x+i.width,i.position2D.y+i.height),s}class V extends g{constructor(e,t){super(),this._cadModel=t,this._rootTreeIndex=e,this.preloadBoundingBoxData(t,e),T.trackCreateTool("ExplodedViewTool")}get readyPromise(){return this._treeBoundingBoxdata.then()}async expand(e){const t=await this._treeBoundingBoxdata;await Promise.all(t.map((({treeIndex:t,direction:s,transform:i})=>0===e?(this._cadModel.resetNodeTransformByTreeIndex(t),Promise.resolve(0)):(i.setPosition(s.x*e,s.y*e,s.z*e),this._cadModel.setNodeTransformByTreeIndex(t,i)))))}reset(){this._cadModel.resetNodeTransformByTreeIndex(this._rootTreeIndex,!0)}preloadBoundingBoxData(t,s){const i=t.getBoundingBoxByTreeIndex(s).then((t=>t.getCenter(new e.Vector3))),n=t.getSubtreeTreeIndices(s).then((e=>{if(e.count>1e3)throw new Error(`Subtree size of ${e.count} is too large (max size = 1000)`);return e})).then((s=>Promise.all(s.toArray().map((async s=>({subTreeIndex:s,subTreeIndexBoundingBoxCenter:(await t.getBoundingBoxByTreeIndex(s)).getCenter(new e.Vector3)}))))));this._treeBoundingBoxdata=Promise.all([i,n]).then((t=>{const[s,i]=t;return i.map((({subTreeIndex:t,subTreeIndexBoundingBoxCenter:i})=>({treeIndex:t,direction:(new e.Vector3).subVectors(i,s),transform:new e.Matrix4})))})).then((async e=>(await Promise.all(e.map((e=>t.setNodeTransformByTreeIndex(e.treeIndex,e.transform)))),e)))}}class O extends g{constructor(e){super(),this._onViewerDisposedHandler=this.onViewerDisposed.bind(this),this._viewer=e,this._viewer.on("disposed",this._onViewerDisposedHandler)}get viewerCamera(){return this._viewer.getCamera()}dispose(){this._viewer.off("disposed",this._onViewerDisposedHandler),super.dispose()}showCameraHelper(){this.hideCameraHelper(),this._cameraHelper=new e.CameraHelper(this.viewerCamera.clone()),this._viewer.addObject3D(this._cameraHelper)}hideCameraHelper(){void 0!==this._cameraHelper&&(this._viewer.removeObject3D(this._cameraHelper),this._cameraHelper=void 0)}onViewerDisposed(){this.dispose()}}const A=require("lodash/cloneDeep");var B=s.n(A);const I=require("lodash/merge");var R=s.n(I);const N=require("@tweenjs/tween.js");var z=s.n(N);const F=require("glslify");var G,U=s.n(F);!function(e){e[e.TopRight=0]="TopRight",e[e.TopLeft=1]="TopLeft",e[e.BottomLeft=2]="BottomLeft",e[e.BottomRight=3]="BottomRight"}(G||(G={}));const $={ringLabel:"N",labelDelta:Math.PI,fontSize:void 0,fontColor:new e.Color(16711680),tickColor:new e.Color(9737364)},j={label:"",fontSize:void 0,fontColor:new e.Color(3355443),outlineSize:void 0,outlineColor:new e.Color(3355443),faceColor:new e.Color(9737364)},H={size:128,position:{corner:G.BottomRight,padding:new e.Vector2},animationSpeed:200,faces:{xPositiveFace:{...j,label:"Right"},xNegativeFace:{...j,label:"Left"},yPositiveFace:{...j,label:"Up"},yNegativeFace:{...j,label:"Down"},zPositiveFace:{...j,label:"Front"},zNegativeFace:{...j,label:"Back"}},compass:$};class W extends g{constructor(t,s){super(),this._dynamicUpdatePosition=()=>{},this._updateClickDiv=()=>{},this._screenPosition=new e.Vector2,this._boxFaceGeometry=new e.PlaneGeometry(.9,.9,1,1),this._raycaster=new e.Raycaster,this._raycaster.layers.enableAll(),this._viewer=t,this._layoutConfig=R()(B()(H),s),this._axisGroup=new e.Group,this._axisGroup.name="Axis View Tool",this._axisGroup.renderOrder=1,this._interactiveObjects=this.createAxisCross(this._axisGroup),[this._updateClickDiv,this._disposeClickDiv]=this.createClickDiv(t),this.addAxisBoxToViewer(this._axisGroup,this._layoutConfig.position),T.trackCreateTool("AxisViewTool")}dispose(){super.dispose(),this._viewer.removeObject3D(this._axisGroup),this._disposeClickDiv()}createClickDiv(e){if(null===e.domElement.querySelector("canvas"))throw new Error("Could not find canvas");const t=document.createElement("div");return t.style.position="absolute",t.style.height=`${this._layoutConfig.size}px`,t.style.width=`${this._layoutConfig.size}px`,t.style.zIndex="1",t.addEventListener("mousedown",(e=>{e.stopPropagation()})),t.addEventListener("contextmenu",(e=>e.preventDefault())),t.addEventListener("mouseup",(t=>{const s=e.domElement.getBoundingClientRect(),i=t.clientX-s.left,n=t.clientY-s.top;this.handleClick(i,n,s),t.stopPropagation()})),e.domElement.appendChild(t),[()=>{t.style.left=`${this._screenPosition.x}px`,t.style.bottom=`${this._screenPosition.y}px`},()=>{e.domElement.removeChild(t)}]}addAxisBoxToViewer(e,t){const s=this._layoutConfig.size;if(function(e){return void 0!==e.xAbsolute&&void 0!==e.yAbsolute}(t))this._screenPosition.x=t.xAbsolute,this._screenPosition.y=t.yAbsolute;else{switch(t.corner){case G.BottomRight:this._screenPosition.y=t.padding.y,this._dynamicUpdatePosition=()=>{this._screenPosition.x=this._viewer.renderer.domElement.clientWidth-t.padding.x-s};break;case G.TopRight:this._dynamicUpdatePosition=()=>{this._screenPosition.x=this._viewer.renderer.domElement.clientWidth-t.padding.x-s,this._screenPosition.y=this._viewer.renderer.domElement.clientHeight-t.padding.y-s};break;case G.TopLeft:this._screenPosition.x=t.padding.x,this._dynamicUpdatePosition=()=>{this._screenPosition.y=this._viewer.renderer.domElement.clientHeight-t.padding.y-s};break;case G.BottomLeft:this._screenPosition.x=t.padding.x,this._screenPosition.y=t.padding.y;break;default:throw new Error(`Unknown corner position for Axis Cross: Corner = ${t.corner}`)}this._dynamicUpdatePosition()}this._viewer.addObject3D(e)}handleClick(t,s,i){const n=2*(t-this._screenPosition.x)/this._layoutConfig.size-1,o=2*(i.height-s-this._screenPosition.y)/this._layoutConfig.size-1,r=new e.Vector3(n,o,1),a=new e.Vector3(0,0,-1).normalize();this._raycaster.set(r,a);const l=this._raycaster.intersectObjects(this._interactiveObjects);if(!(l.length>0))return!1;const d=l[0].object.position.clone().normalize(),c=l[0].object.userData.upVector.clone();return this.moveCameraTo(d,c),!0}createAxisCross(e){const t=this.createCompass();e.add(t);const s=this.createBoxFaces();return e.add(...s),this.setupTransformOnRender(e),s}setupTransformOnRender(t){t.children[0].onBeforeRender=s=>{this._dynamicUpdatePosition(),t.quaternion.copy(this._viewer.getCamera().quaternion).invert(),t.updateMatrixWorld(),this._updateClickDiv();const i=s.domElement.clientWidth,n=s.domElement.clientHeight,o=new e.Vector2;s.getSize(o);const r=this._layoutConfig.size,a=new e.Vector2(r/i,r/n),l=new e.Vector2(this._screenPosition.x/i*2+r/i,this._screenPosition.y/n*2+r/n);t.traverse((t=>{t instanceof e.Mesh&&(t.material.uniforms.offset.value=l,t.material.uniforms.scale.value=a,t.material.uniformsNeedUpdate=!0)}))}}createBoxFaces(){const t=this._layoutConfig.faces;return[this.createBoxFace(new e.Vector3(1,0,0),t.xPositiveFace),this.createBoxFace(new e.Vector3(-1,0,0),t.xNegativeFace),this.createBoxFace(new e.Vector3(0,1,0),t.yPositiveFace,new e.Vector3(0,0,-1)),this.createBoxFace(new e.Vector3(0,-1,0),t.yNegativeFace,new e.Vector3(0,0,1)),this.createBoxFace(new e.Vector3(0,0,1),t.zPositiveFace),this.createBoxFace(new e.Vector3(0,0,-1),t.zNegativeFace)]}createCompass(){const t=new e.PlaneGeometry(2,2,1,1),i=new e.Mesh(t,new e.RawShaderMaterial({vertexShader:U()(s(479).Z),fragmentShader:U()(s(430).Z),uniforms:{offset:{value:new e.Vector2},scale:{value:new e.Vector2},tex:{value:this.createCompassTexture()}},side:e.DoubleSide,glslVersion:e.GLSL3,depthTest:!1,blending:e.CustomBlending,blendDst:e.OneMinusSrcAlphaFactor,blendSrc:e.SrcAlphaFactor}));i.frustumCulled=!1,i.renderOrder=1;const n=Math.sin(this._layoutConfig.compass.labelDelta),o=Math.cos(this._layoutConfig.compass.labelDelta);return i.position.y=-.45,i.up.copy(new e.Vector3(n,0,o)),i.lookAt(0,0,0),i}createCompassTexture(){var t;const s=this._layoutConfig.compass,i=this._layoutConfig.size,n=document.createElement("canvas");n.width=i,n.height=i;const o=n.getContext("2d"),r=i/2,a=r-r/4,l=i/32,d=i/8;if(o.strokeStyle=s.tickColor.getStyle(),o.lineWidth=i/16,o.setLineDash([l,d]),o.beginPath(),o.arc(r,r,a,0,2*Math.PI),o.stroke(),s.ringLabel&&s.ringLabel.length>0){const e=null!==(t=s.fontSize)&&void 0!==t?t:i/5;o.font=`bold ${e}px Arial`,o.textAlign="center",o.fillStyle=s.fontColor.getStyle(),o.fillText(s.ringLabel,r,r*(1/4)+e/3)}return new e.CanvasTexture(n)}getFaceTexture(t,s){var i,n;const o=s/2,r=document.createElement("canvas");r.width=o,r.height=o;const a=r.getContext("2d");a.fillStyle=t.outlineColor.getStyle(),a.fillRect(0,0,o,o),a.fillStyle=t.faceColor.getStyle();const l=null!==(i=t.outlineSize)&&void 0!==i?i:o/32;if(a.fillRect(l,l,o-2*l,o-2*l),a.fill(),""!==t.label){const e=null!==(n=t.fontSize)&&void 0!==n?n:o/3;a.font=`bold ${e}px Arial`,a.textAlign="center",a.fillStyle=t.fontColor.getStyle(),a.fillText(t.label,o/2,o/2+e/3)}return new e.CanvasTexture(r)}createBoxFace(t,i,n=new e.Vector3(0,1,0)){const o=new e.Mesh(this._boxFaceGeometry,new e.RawShaderMaterial({vertexShader:U()(s(479).Z),fragmentShader:U()(s(430).Z),uniforms:{offset:{value:new e.Vector2},scale:{value:new e.Vector2},tex:{value:this.getFaceTexture(i,this._layoutConfig.size)}},depthTest:!1,glslVersion:e.GLSL3,transparent:!0}));return o.frustumCulled=!1,o.renderOrder=1e3,o.position.copy(t.multiplyScalar(.5*this._boxFaceGeometry.parameters.width)),o.lookAt(t.multiplyScalar(2)),o.userData.upVector=n,o}moveCameraTo(t,s){const i=this._viewer.cameraManager,{position:n,target:o,rotation:r}=i.getCameraState(),a=n.clone().sub(o),l=a.length(),d=a.clone().normalize(),c=Math.acos(d.dot(t)),h={t:0},m=new(z().Tween)(h),u=t.clone(),p=r.clone(),_=(new e.Quaternion).setFromRotationMatrix((new e.Matrix4).makeBasis(s.clone().cross(u),s,u));if(p.angleTo(_)<1e-6)return;const v=new e.Vector3,f=new e.Quaternion;m.to({t:1},this._layoutConfig.animationSpeed).onUpdate((()=>{v.copy(d).multiplyScalar(Math.sin((1-h.t)*c)/Math.sin(c)).add(t.clone().multiplyScalar(Math.sin(h.t*c)/Math.sin(c))),v.multiplyScalar(l),v.add(o),f.slerpQuaternions(p,_,h.t),i.setCameraState({position:v,rotation:f})})).onComplete((()=>{i.setCameraState({position:v,target:o})})).start(z().now()).update(z().now())}}class q{constructor(e,t){this._nodeCollectionAndAppearance=[],this._model=e,this._date=t}getKeyframeDate(){return this._date}activate(){this._nodeCollectionAndAppearance.forEach(((e,t)=>{this._model.assignStyledNodeCollection(e.nodes,e.nodeAppearance)}))}deactivate(){this._nodeCollectionAndAppearance.forEach(((e,t)=>{this._model.unassignStyledNodeCollection(e.nodes)}))}assignStyledNodeCollection(e,t){T.trackCadModelStyled(e.classToken,t);const s=this._nodeCollectionAndAppearance.findIndex((t=>t.nodes===e));-1!==s?this._nodeCollectionAndAppearance[s].nodeAppearance=t:this._nodeCollectionAndAppearance.push({nodes:e,nodeAppearance:t})}unassignStyledNodeCollection(e){const t=this._nodeCollectionAndAppearance.findIndex((t=>t.nodes===e));if(-1===t)throw new Error("Node collection has not been assigned to model");this._nodeCollectionAndAppearance.splice(t,1)}}class K extends g{constructor(e){super(),this._playback=void 0,this._events={dateChanged:new n},this._model=e,this._keyframes=new Array}subscribe(e,t){"dateChanged"===e?this._events.dateChanged.subscribe(t):l(e,`Unsupported event: '${e}'`)}unsubscribe(e,t){"dateChanged"===e?this._events.dateChanged.unsubscribe(t):l(e,`Unsupported event: '${e}'`)}createKeyframe(e){const t=new q(this._model,e);return this._keyframes.push(t),this.sortKeyframesByDates(),t}getKeyframeByDate(e){return this._keyframes.find((t=>t.getKeyframeDate()===e))}removeKeyframe(e){const t=this._keyframes.findIndex((t=>t===e));t>-1&&this._keyframes.splice(t,1)}removeKeyframeByDate(e){const t=this._keyframes.findIndex((t=>t.getKeyframeDate()===e));t>-1&&this._keyframes.splice(t,1)}play(e,t,s){this.stop();const i={dateInMs:e.getTime()},n={dateInMs:t.getTime()},o=new(z().Tween)(i).to(n,s);let r=-1;o.onUpdate((()=>{const s=new Date(i.dateInMs),n=r;for(;r<this._keyframes.length-1&&this._keyframes[r+1].getKeyframeDate().getTime()<=s.getTime();)r++;r!==n&&(-1!==n&&this._keyframes[n].deactivate(),this._keyframes[r].activate()),this._events.dateChanged.fire({date:s,activeKeyframe:this._keyframes[r],startDate:e,endDate:t})})),this._playback=o,o.start()}stop(){void 0!==this._playback&&(this._playback.stop(),this._playback=void 0)}pause(){void 0!==this._playback&&this._playback.isPlaying()&&this._playback.pause()}resume(){void 0!==this._playback&&this._playback.isPaused()&&this._playback.resume()}getAllKeyframes(){return this._keyframes.slice()}dispose(){super.dispose(),this._events.dateChanged.unsubscribeAll()}sortKeyframesByDates(){this._keyframes.length>1&&this._keyframes.sort(((e,t)=>e.getKeyframeDate().getTime()-t.getKeyframeDate().getTime()))}}class Y{constructor(){Y.ensureStylesLoaded()}createLabel(e){const t=document.createElement("div");return t.innerText=e,t.className=Y.stylesId,t}static ensureStylesLoaded(){if(document.getElementById(Y.stylesId))return;const e=document.createElement("style");e.id=Y.stylesId,e.appendChild(document.createTextNode(".reveal-measurement-label {\n\tposition: absolute;\n\n /* Anchor to the center of the element and ignore events */\n transform: translate(-50%, -50%);\n pointer-events: none;\n touch-action: none;\n user-select: none;\n border-radius: 6px;\n\n /* Make it look nice */\n padding: 6px;\n color: #fff;\n background: #232323da;\n border: #ffffff22 solid 1px;\n overflow: hidden;\n white-space: nowrap;\n\n /*Font - fallback to generic font if Inter not available*/\n font-family: 'Inter', sans-serif;\n font-style: normal;\n font-weight: 500;\n}\n")),document.head.appendChild(e)}}Y.stylesId="reveal-measurement-label";const X=require("three-stdlib");class Z{constructor(t,s,i){this._position=new Float32Array(6),this._geometry=new X.LineGeometry,this._adaptiveWidthLineMaterial=new X.LineMaterial({color:s.getHex(),linewidth:t,worldUnits:!0,depthTest:!1}),this._fixedWidthLineMaterial=new X.LineMaterial({color:s.getHex(),linewidth:2,worldUnits:!1,depthTest:!1}),this._meshes=new e.Group,this._meshes.name="Measurement";const n=new e.Mesh(new e.BufferGeometry);n.name="onBeforeRenderTrigger trigger (no geometry)",n.frustumCulled=!1;const o=new e.Vector2;n.onBeforeRender=e=>{const{width:t,height:s}=e.domElement.getBoundingClientRect();o.set(t,s),this._adaptiveWidthLineMaterial.resolution=this._fixedWidthLineMaterial.resolution=o},this._meshes.add(n),this.startLine(i)}dispose(){this._geometry&&this._geometry.dispose(),this._adaptiveWidthLineMaterial.dispose(),this._fixedWidthLineMaterial.dispose(),this._meshes.clear(),this._meshes.removeFromParent()}get meshes(){return this._meshes}updateLine(e){this._position[3]=e.x,this._position[4]=e.y,this._position[5]=e.z,this._geometry.setPositions(this._position)}getMeasuredDistance(){const t=new e.Vector3(this._position[0],this._position[1],this._position[2]);return new e.Vector3(this._position[3],this._position[4],this._position[5]).distanceTo(t)}getMidPointOnLine(){const t=new e.Vector3(this._position[0],this._position[1],this._position[2]);let s=new e.Vector3(this._position[3],this._position[4],this._position[5]).clone().sub(t);const i=s.length();return s=s.normalize().multiplyScalar(.5*i),t.clone().add(s)}updateLineWidth(e){this._adaptiveWidthLineMaterial.linewidth=e}updateLineColor(e){this._fixedWidthLineMaterial.color=this._adaptiveWidthLineMaterial.color=e}startLine(e){this._position[0]=this._position[3]=e.x,this._position[1]=this._position[4]=e.y,this._position[2]=this._position[5]=e.z,this._geometry.setPositions(this._position);const t=new X.Line2(this._geometry,this._adaptiveWidthLineMaterial);t.computeLineDistances(),t.renderOrder=100;const s=new X.Line2(this._geometry,this._fixedWidthLineMaterial);s.computeLineDistances(),s.renderOrder=100,this._meshes.add(t),this._meshes.add(s)}}class Q{constructor(t,s,i,n,o,r){this._measurement={measurementId:0,startPoint:new e.Vector3,endPoint:new e.Vector3,distanceInMeters:0},this._options=n,this._measurementLabel=new Y,this._htmlOverlay=o,this._domElement=t,this._camera=s,this._meshGroup=i,this._startPoint=r,this._distanceToCamera=this._camera.getWorldPosition(new e.Vector3).distanceTo(r),this._line=this.startMeasurement(r),this._meshGroup.add(this._line.meshes)}update(e){const{offsetX:t,offsetY:s}=e;this._line.updateLine(this.pointerTo3DPosition(t,s))}endMeasurement(e){const{distanceToLabelCallback:t}=this._options;this._line.updateLine(e);const s=t(this._line.getMeasuredDistance());this._labelElement=this.addLabel(this._line.getMidPointOnLine(),s),this._measurement={measurementId:Date.now(),startPoint:this._startPoint,endPoint:e,distanceInMeters:this._line.getMeasuredDistance()}}removeMeasurement(){this._meshGroup.remove(this._line.meshes),this._labelElement&&this._htmlOverlay.remove(this._labelElement),this._line&&this._line.dispose()}getMeasurement(){return this._measurement}updateLineWidth(e){this._line.updateLineWidth(e)}updateLineColor(e){this._line.updateLineColor(e)}visible(e){this._meshGroup&&(this._meshGroup.visible=e)}startMeasurement(e){return new Z(this._options.lineWidth,this._options.color,e)}addLabel(e,t){const s=this._measurementLabel.createLabel(t);return this._htmlOverlay.add(s,e),s}pointerTo3DPosition(t,s){const i=new e.Vector3,n=new e.Vector2;n.x=t/this._domElement.clientWidth*2-1,n.y=-s/this._domElement.clientHeight*2+1;const o=new e.Vector3,r=new e.Ray,a=new e.Vector3;return a.setFromMatrixPosition(this._camera.matrixWorld),r.origin.copy(a),o.set(n.x,n.y,.5).unproject(this._camera).sub(r.origin).normalize(),r.direction.copy(o),r.at(this._distanceToCamera,i),i}}class J extends g{constructor(t,s){super(),this._geometryGroup=new e.Group,this._handleLabelClustering=this.createCombineClusterElement.bind(this),this._handlePointerClick=this.onPointerClick.bind(this),this._handlePointerMove=this.onPointerMove.bind(this),this._handleMeasurementCancel=this.onKeyDown.bind(this),this._events={measurementAdded:new n,measurementStarted:new n,measurementEnded:new n,disposed:new n},this._overlayOptions={clusteringOptions:{mode:"overlapInScreenSpace",createClusterElementCallback:this._handleLabelClustering}},this._viewer=t,this._options={...J.defaultLineOptions,...s},this._measurements=[],this._measurementMode=!1,this._showMeasurements=this._showLabels=!0,this._htmlOverlay=new D(this._viewer,this._overlayOptions),this._geometryGroup.name=J.name,this._viewer.addObject3D(this._geometryGroup),T.trackCreateTool("MeasurementTool")}get isInMeasurementMode(){return this._measurementMode}on(e,t){switch(e){case"added":this._events.measurementAdded.subscribe(t);break;case"started":this._events.measurementStarted.subscribe(t);break;case"ended":this._events.measurementEnded.subscribe(t);break;case"disposed":this._events.disposed.subscribe(t);break;default:l(e,`Unsupported event: '${e}'`)}}off(e,t){switch(e){case"added":this._events.measurementAdded.unsubscribe(t);break;case"started":this._events.measurementStarted.unsubscribe(t);break;case"ended":this._events.measurementEnded.unsubscribe(t);break;case"disposed":this._events.disposed.unsubscribe(t);break;default:l(e,`Unsupported event: '${e}'`)}}enterMeasurementMode(){if(this._measurementMode)throw new Error("Measurement mode is active, call exitMeasurementMode()");this._viewer.on("click",this._handlePointerClick),this._events.measurementStarted.fire(),this._measurementMode=!0,this._showMeasurements=!0}exitMeasurementMode(){if(!this._measurementMode)throw new Error("Measurement mode is not active, call enterMeasurementMode()");this.cancelActiveMeasurement(),this._viewer.off("click",this._handlePointerClick),this._events.measurementEnded.fire(),this._measurementMode=!1}removeMeasurement(e){const t=this._measurements.findIndex((t=>t.getMeasurement()===e));if(-1===t)throw new Error("Measurement not found");this._measurements[t].removeMeasurement(),this._measurements.splice(t,1),this._viewer.requestRedraw()}removeAllMeasurements(){this._measurements.forEach((e=>{e.removeMeasurement()})),this._measurements.splice(0),this._viewer.requestRedraw()}setMeasurementLabelsVisible(e){this._showMeasurements&&this._htmlOverlay.visible(e),this._showLabels=e}setLineOptions(e){this._options={...this._options,...e}}updateLineWidth(e,t){const s=this._measurements.findIndex((t=>t.getMeasurement()===e));if(-1===s)throw new Error("Measurement not found");this._measurements[s].updateLineWidth(t),this._viewer.requestRedraw()}updateLineColor(e,t){const s=this._measurements.findIndex((t=>t.getMeasurement()===e));if(-1===s)throw new Error("Measurement not found");this._measurements[s].updateLineColor(t),this._viewer.requestRedraw()}getAllMeasurements(){return this._measurements.map((e=>e.getMeasurement()))}visible(e){this._measurements.forEach((t=>{t.visible(e)}));const t=!1!==e&&this._showLabels;this._htmlOverlay.visible(t),this._showMeasurements=e,this._viewer.requestRedraw()}dispose(){var e;this.removeAllMeasurements(),this.exitMeasurementMode(),null===(e=this._activeMeasurement)||void 0===e||e.removeMeasurement(),this._htmlOverlay.dispose(),this._geometryGroup.clear(),this._viewer.removeObject3D(this._geometryGroup),this._events.measurementAdded.unsubscribeAll(),this._events.measurementStarted.unsubscribeAll(),this._events.measurementEnded.unsubscribeAll(),super.dispose()}async onPointerClick(e){const{offsetX:t,offsetY:s}=e,i=await this._viewer.getIntersectionFromPixel(t,s);if(i){if(this._activeMeasurement){this._activeMeasurement.endMeasurement(i.point);const e=this._activeMeasurement.getMeasurement();this._measurements.push(this._activeMeasurement),this._activeMeasurement=void 0,this._events.measurementAdded.fire(this._measurements[this._measurements.length-1].getMeasurement()),this._viewer.domElement.removeEventListener("pointermove",this._handlePointerMove),window.removeEventListener("keydown",this._handleMeasurementCancel),T.trackEvent("measurementAdded",{measurement:e})}else{const e=this._viewer.getCamera(),t=this._viewer.domElement;this._activeMeasurement=new Q(t,e,this._geometryGroup,this._options,this._htmlOverlay,i.point),this._viewer.domElement.addEventListener("pointermove",this._handlePointerMove),window.addEventListener("keydown",this._handleMeasurementCancel)}this._viewer.requestRedraw()}}onPointerMove(e){this._activeMeasurement&&(this._activeMeasurement.update(e),this._viewer.requestRedraw())}createCombineClusterElement(){const e=document.createElement("div");return e.className=Y.stylesId,e.innerHTML='<?xml version="1.0" encoding="UTF-8"?>\n<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="50px" height="20px" viewBox="0 0 50 20" version="1.1">\n<g id="surface1">\n<path style=" stroke:none;fill-rule:nonzero;fill:rgb(100%,100%,100%);fill-opacity:0.8;" d="M 0.832031 4 C 0.371094 4 0 4.148438 0 4.332031 L 0 10 C 0 10.183594 0.371094 10.332031 0.832031 10.332031 C 1.292969 10.332031 1.667969 10.183594 1.667969 10 L 1.667969 4.332031 C 1.667969 4.148438 1.292969 4 0.832031 4 Z M 0.832031 4 "/>\n<path style=" stroke:none;fill-rule:nonzero;fill:rgb(100%,100%,100%);fill-opacity:0.8;" d="M 49.167969 4 C 48.707031 4 48.332031 4.148438 48.332031 4.332031 L 48.332031 10 C 48.332031 10.183594 48.707031 10.332031 49.167969 10.332031 C 49.628906 10.332031 50 10.183594 50 10 L 50 4.332031 C 50 4.148438 49.628906 4 49.167969 4 Z M 49.167969 4 "/>\n<path style=" stroke:none;fill-rule:nonzero;fill:rgb(100%,100%,100%);fill-opacity:0.8;" d="M 49.582031 11.332031 L 46.25 11.332031 C 46.019531 11.332031 45.835938 11.40625 45.835938 11.5 L 45.835938 12.332031 C 45.835938 12.515625 45.460938 12.667969 45 12.667969 C 44.542969 12.667969 44.167969 12.519531 44.167969 12.332031 L 44.167969 11.5 C 44.167969 11.40625 43.980469 11.332031 43.75 11.332031 L 41.25 11.332031 C 41.019531 11.332031 40.835938 11.40625 40.835938 11.5 L 40.835938 13 C 40.835938 13.183594 40.460938 13.332031 40 13.332031 C 39.542969 13.332031 39.167969 13.183594 39.167969 13 L 39.167969 11.5 C 39.167969 11.40625 38.980469 11.332031 38.75 11.332031 L 36.25 11.332031 C 36.019531 11.332031 35.832031 11.40625 35.832031 11.5 L 35.835938 12.332031 C 35.835938 12.515625 35.460938 12.667969 35 12.667969 C 34.539062 12.667969 34.167969 12.519531 34.167969 12.332031 L 34.167969 11.5 C 34.167969 11.40625 33.980469 11.332031 33.75 11.332031 L 31.25 11.332031 C 31.019531 11.332031 30.832031 11.40625 30.832031 11.5 L 30.835938 13 C 30.835938 13.183594 30.460938 13.332031 30 13.332031 C 29.539062 13.332031 29.167969 13.183594 29.167969 13 L 29.167969 11.5 C 29.167969 11.40625 28.980469 11.332031 28.75 11.332031 L 26.25 11.332031 C 26.019531 11.332031 25.832031 11.40625 25.832031 11.5 L 25.835938 12.332031 C 25.835938 12.515625 25.460938 12.667969 25 12.667969 C 24.539062 12.667969 24.167969 12.519531 24.167969 12.332031 L 24.167969 11.5 C 24.167969 11.40625 23.980469 11.332031 23.75 11.332031 L 21.25 11.332031 C 21.019531 11.332031 20.832031 11.40625 20.832031 11.5 L 20.835938 13 C 20.835938 13.183594 20.460938 13.332031 20 13.332031 C 19.539062 13.332031 19.167969 13.183594 19.167969 13 L 19.167969 11.5 C 19.167969 11.40625 18.980469 11.332031 18.75 11.332031 L 16.25 11.332031 C 16.019531 11.332031 15.832031 11.40625 15.832031 11.5 L 15.835938 12.332031 C 15.835938 12.515625 15.460938 12.667969 15 12.667969 C 14.539062 12.667969 14.167969 12.519531 14.167969 12.332031 L 14.167969 11.5 C 14.167969 11.40625 13.980469 11.332031 13.75 11.332031 L 11.25 11.332031 C 11.019531 11.332031 10.832031 11.40625 10.832031 11.5 L 10.835938 13 C 10.835938 13.183594 10.460938 13.332031 10 13.332031 C 9.539062 13.332031 9.167969 13.183594 9.167969 13 L 9.167969 11.5 C 9.167969 11.40625 8.980469 11.332031 8.75 11.332031 L 6.25 11.332031 C 6.019531 11.332031 5.832031 11.40625 5.832031 11.5 L 5.832031 12.332031 C 5.832031 12.519531 5.460938 12.667969 5 12.667969 C 4.539062 12.667969 4.167969 12.519531 4.167969 12.332031 L 4.167969 11.5 C 4.167969 11.40625 3.980469 11.332031 3.75 11.332031 L 0.417969 11.332031 C 0.1875 11.332031 0 11.40625 0 11.5 L 0 15.832031 C 0 15.925781 0.1875 16 0.417969 16 L 49.582031 16 C 49.8125 16 50 15.925781 50 15.832031 L 50 11.5 C 50 11.40625 49.8125 11.332031 49.582031 11.332031 Z M 49.582031 11.332031 "/>\n<path style=" stroke:none;fill-rule:nonzero;fill:rgb(100%,100%,100%);fill-opacity:0.8;" d="M 46.488281 7.121094 L 42.617188 5.121094 C 42.410156 5.011719 42.066406 4.972656 41.761719 5.019531 C 41.453125 5.066406 41.25 5.191406 41.25 5.332031 L 41.25 7 L 8.75 7 L 8.75 5.332031 C 8.75 5.191406 8.546875 5.066406 8.238281 5.019531 C 7.933594 4.972656 7.589844 5.011719 7.382812 5.121094 L 3.511719 7.121094 C 3.394531 7.183594 3.332031 7.257812 3.332031 7.332031 C 3.332031 7.410156 3.394531 7.484375 3.511719 7.546875 L 7.382812 9.546875 C 7.53125 9.625 7.75 9.667969 7.976562 9.667969 C 8.0625 9.667969 8.152344 9.660156 8.238281 9.648438 C 8.546875 9.597656 8.75 9.472656 8.75 9.332031 L 8.75 7.667969 L 41.25 7.667969 L 41.25 9.332031 C 41.25 9.472656 41.453125 9.597656 41.757812 9.648438 C 41.84375 9.660156 41.933594 9.667969 42.023438 9.667969 C 42.246094 9.667969 42.464844 9.625 42.617188 9.546875 L 46.488281 7.546875 C 46.605469 7.484375 46.667969 7.410156 46.667969 7.332031 C 46.667969 7.257812 46.605469 7.183594 46.488281 7.121094 Z M 46.488281 7.121094 "/>\n</g>\n</svg>\n',e}static metersLabelCallback(e){return`${e.toFixed(2)} m`}onKeyDown(e){e.metaKey||e.altKey||e.ctrlKey||"Escape"===e.key&&(this.cancelActiveMeasurement(),e.preventDefault())}cancelActiveMeasurement(){this._activeMeasurement&&(this._activeMeasurement.removeMeasurement(),this._activeMeasurement=void 0,this._viewer.requestRedraw(),this._viewer.domElement.removeEventListener("pointermove",this._handlePointerMove))}}J.defaultLineOptions={distanceToLabelCallback:e=>J.metersLabelCallback(e),lineWidth:.01,color:new e.Color(16746310)}})(),i})()));
2
+ !function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define([],t):"object"==typeof exports?exports["@cognite/reveal"]=t():e["@cognite/reveal"]=t()}("undefined"!=typeof self?self:this,(()=>(()=>{"use strict";var e={430:(e,t,s)=>{s.d(t,{Z:()=>i});const i="precision highp float;\n#define GLSLIFY 1\n\nuniform sampler2D tex;\n\nin vec2 vUv;\n\nout vec4 color;\n\nvoid main()\n{\n color = texture(tex, vUv); \n}\n"},479:(e,t,s)=>{s.d(t,{Z:()=>i});const i="#define GLSLIFY 1\nuniform mat4 modelMatrix;\nuniform vec2 scale;\nuniform vec2 offset;\n\nin vec3 position;\nin vec2 uv;\n\nout vec2 vUv;\n\nconst mat4 unitOrthographicProjection = mat4(1., 0., 0., 0., 0., 1., 0., 0., 0., 0., -1., 0., 0., 0., 0., 1.);\n\nvoid main() {\n vUv = uv;\n\n vec4 clipSpace = unitOrthographicProjection * modelMatrix * vec4(position, 1.0);\n\n clipSpace.xy *= scale.xy;\n\n clipSpace.xy += vec2(-1., -1.) + offset;\n\n gl_Position = clipSpace;\n}\n"}},t={};function s(i){var n=t[i];if(void 0!==n)return n.exports;var o=t[i]={exports:{}};return e[i](o,o.exports,s),o.exports}s.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return s.d(t,{a:t}),t},s.d=(e,t)=>{for(var i in t)s.o(t,i)&&!s.o(e,i)&&Object.defineProperty(e,i,{enumerable:!0,get:t[i]})},s.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),s.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),s.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})};var i={};return(()=>{s.r(i),s.d(i,{AxisViewTool:()=>W,Cognite3DViewerToolBase:()=>g,Corner:()=>G,DebugCameraTool:()=>O,ExplodedViewTool:()=>V,HtmlOverlayTool:()=>D,Keyframe:()=>q,MeasurementTool:()=>J,TimelineTool:()=>K});const e=require("three");class t{static color(e){const s=t._colors.get(e);if(void 0!==s)return s;const i=t.generateRandomColor();return t._colors.set(e,i),i}static colorRGB(e){const s=t.color(e);return[Math.floor(255*s.r),Math.floor(255*s.g),Math.floor(255*s.b)]}static colorCSS(e){const[s,i,n]=t.colorRGB(e);return`rgb(${s}, ${i}, ${n})`}static generateRandomColor(){const t=Math.random(),s=.4+.6*Math.random(),i=.3+.4*Math.random();return(new e.Color).setHSL(t,s,i)}}t._colors=new Map;class n{constructor(){this._listeners=[]}subscribe(e){this._listeners.push(e)}unsubscribe(e){const t=this._listeners.indexOf(e);-1!==t&&this._listeners.splice(t,1)}unsubscribeAll(){this._listeners.splice(0)}fire(...e){this._listeners.forEach((t=>t(...e)))}}function o(e,t){const s=t.getBoundingClientRect();if(e instanceof MouseEvent)return{offsetX:e.clientX-s.left,offsetY:e.clientY-s.top};if(e.changedTouches.length>0){const t=e.changedTouches[0];return{offsetX:t.clientX-s.left,offsetY:t.clientY-s.top}}return{offsetX:-1,offsetY:-1}}const r=require("lodash/debounce");var a=s.n(r);function l(e,t){throw new Error(t||"Unexpected object: "+e)}class d{constructor(e){this._events={click:new n,hover:new n},this.onHoverCallback=a()((e=>{this._events.hover.fire(o(e,this.domElement))}),100),this.domElement=e,this.setupEventListeners()}on(e,t){switch(e){case"click":this._events.click.subscribe(t);break;case"hover":this._events.hover.subscribe(t);break;default:l(e)}}off(e,t){switch(e){case"click":this._events.click.unsubscribe(t);break;case"hover":this._events.hover.unsubscribe(t);break;default:l(e)}}dispose(){!function(e){for(const t of Object.keys(e))e[t].unsubscribeAll()}(this._events)}setupEventListeners(){const{domElement:t}=this;let s=!1,i=0,n=!1;const r=new e.Vector2,a=e=>{this.handleClickEvent(e,r,s,n,i),s=!1,n=!1,t.removeEventListener("mouseup",a),t.removeEventListener("touchend",a),t.addEventListener("mousemove",this.onHoverCallback)},l=e=>{s=!0,n=!0,i=e.timeStamp;const{offsetX:l,offsetY:d}=o(e,t);r.set(l,d),t.addEventListener("mouseup",a),t.addEventListener("touchend",a),t.removeEventListener("mousemove",this.onHoverCallback)};t.addEventListener("mousedown",l),t.addEventListener("touchstart",l),t.addEventListener("mousemove",this.onHoverCallback)}isProperClick(e,t,s,i,n){const{offsetX:r,offsetY:a}=o(e,this.domElement),l=e.timeStamp-n,c=Math.abs(r-t.x)+Math.abs(a-t.y)>d.maxMoveDistance;return s&&i&&l<d.maxClickDuration&&!c}handleClickEvent(e,t,s,i,n){if(this.isProperClick(e,t,s,i,n)){const t={...o(e,this.domElement),button:e instanceof MouseEvent?e.button:void 0};this._events.click.fire(t)}}}d.maxMoveDistance=8,d.maxClickDuration=250,Math.log(2),require("assert"),new e.BufferGeometry;class c extends e.Group{constructor(){super(...arguments),this._isDisposed=!1,this._referenceCount=0}reference(){this.ensureNotDisposed(),this._referenceCount++}dereference(){if(this.ensureNotDisposed(),0===this._referenceCount)throw new Error("No references");0==--this._referenceCount&&this.dispose()}dispose(){this.ensureNotDisposed(),this._isDisposed=!0;for(const e of this.children)e instanceof THREE.Mesh&&void 0!==e.geometry&&(e.geometry.dispose(),e.geometry=emptyGeometry),e instanceof THREE.BufferGeometry&&e.dispose();this.clear()}ensureNotDisposed(){if(this._isDisposed)throw new Error("Already disposed/dereferenced")}}new e.Vector3,new e.Box3;class h extends e.Object3D{constructor(e){super(),this._activeLevel=0,this._levels=[],this.isLOD=!0,this.autoUpdate=!0,this._boundingBox=e.clone(),this.type="BoundingBoxLOD"}setBoundingBox(e){this._boundingBox.copy(e)}addLevel(e,t=0){this._levels.push({object:e,distance:Math.abs(t)}),this._levels.sort(((e,t)=>t.distance-e.distance)),e.visible=!1,this.add(e)}getCurrentLevel(){return this._levels.length>0?this._levels.length-this._activeLevel-1:0}update(e){this.updateCurrentLevel(e)}updateCurrentLevel(e){const t=this._levels,{camPos:s,bounds:i}=updateVars;i.copy(this._boundingBox).applyMatrix4(this.matrixWorld);const n=e instanceof THREE.PerspectiveCamera?e.zoom:1;if(t.length>0){s.setFromMatrixPosition(e.matrixWorld);const o=i.distanceToPoint(s)/n;t[this._activeLevel].object.visible=!1,this._activeLevel=t.findIndex((e=>o>=e.distance)),this._activeLevel=this._activeLevel>=0?this._activeLevel:t.length-1,t[this._activeLevel].object.visible=!0}}}new e.Vector3;class m{constructor(e){this._originalState={},this._renderer=e,this._originalState={}}setScissor(t,s,i,n){const o=this._renderer.getScissor(new e.Vector4);this._originalState={scissorData:o,...this._originalState},this._renderer.setScissor(t,s,i,n)}setScissorTest(e){this._originalState={scissorTest:this._renderer.getScissorTest(),...this._originalState},this._renderer.setScissorTest(e)}setClearColor(t,s){this._originalState={clearColor:this._renderer.getClearColor(new e.Color),clearAlpha:this._renderer.getClearAlpha(),...this._originalState},this._renderer.setClearColor(t,s)}setWebGLState(e,t=m.DefaultWebGLState){var s,i,n,o,r,a,l;if(this._originalState={webGLState:{buffers:(null==e?void 0:e.buffers)?{}:void 0},...this._originalState},null===(s=null==e?void 0:e.buffers)||void 0===s?void 0:s.depth){const s=null===(i=e.buffers.depth)||void 0===i?void 0:i.test,d=null===(n=e.buffers.depth)||void 0===n?void 0:n.mask;this._originalState.webGLState.buffers.depth={test:void 0!==s?null===(r=null===(o=t.buffers)||void 0===o?void 0:o.depth)||void 0===r?void 0:r.test:void 0,mask:void 0!==d?null===(l=null===(a=t.buffers)||void 0===a?void 0:a.depth)||void 0===l?void 0:l.mask:void 0},void 0!==d&&this._renderer.state.buffers.depth.setMask(d),void 0!==s&&this._renderer.state.buffers.depth.setTest(s)}}setSize(t,s){this._originalState={size:this._renderer.getSize(new e.Vector2),...this._originalState},this._renderer.setSize(t,s)}set localClippingEnabled(e){this._originalState={localClippingEnabled:this._renderer.localClippingEnabled,...this._originalState},this._renderer.localClippingEnabled=e}set autoClear(e){this._originalState={autoClear:this._renderer.autoClear,...this._originalState},this._renderer.autoClear=e}set autoClearDepth(e){this._originalState={autoClearDepth:this._renderer.autoClearDepth,...this._originalState},this._renderer.autoClearDepth=e}setRenderTarget(e){this._originalState={renderTarget:this._renderer.getRenderTarget(),...this._originalState},this._renderer.setRenderTarget(e)}resetState(){var e,t,s,i;if(void 0!==this._originalState.autoClear&&(this._renderer.autoClear=this._originalState.autoClear),void 0!==this._originalState.autoClearDepth&&(this._renderer.autoClearDepth=this._originalState.autoClearDepth),void 0!==this._originalState.clearColor&&this._renderer.setClearColor(this._originalState.clearColor,this._originalState.clearAlpha),void 0!==this._originalState.localClippingEnabled&&(this._renderer.localClippingEnabled=this._originalState.localClippingEnabled),void 0!==this._originalState.size&&this._renderer.setSize(this._originalState.size.width,this._originalState.size.height),void 0!==this._originalState.renderTarget&&this._renderer.setRenderTarget(this._originalState.renderTarget),void 0!==this._originalState.scissorData&&this._renderer.setScissor(this._originalState.scissorData),void 0!==this._originalState.scissorTest&&this._renderer.setScissorTest(this._originalState.scissorTest),void 0!==this._originalState.webGLState&&(this._renderer.state.reset(),null===(t=null===(e=this._originalState.webGLState)||void 0===e?void 0:e.buffers)||void 0===t?void 0:t.depth)){const e=null===(s=this._originalState.webGLState.buffers.depth)||void 0===s?void 0:s.test,t=null===(i=this._originalState.webGLState.buffers.depth)||void 0===i?void 0:i.mask;void 0!==t&&this._renderer.state.buffers.depth.setMask(t),void 0!==e&&this._renderer.state.buffers.depth.setTest(e)}this._originalState={}}}m.DefaultWebGLState={buffers:{depth:{mask:!0,test:!0}}};class u{constructor(e){this._value=e,this._lastAccessTime=Date.now()}get value(){return this.touch(),this._value}get lastAccessTime(){return this._lastAccessTime}touch(){this._lastAccessTime=Date.now()}}class p{constructor(e=50,t,s=10){this._data=new Map,this._maxElementsInCache=e,this._defaultCleanupCount=Math.max(s,1),this._removeCallback=t}has(e){return this._data.has(e)}forceInsert(e,t){this.isFull()&&this.cleanCache(this._defaultCleanupCount),this.insert(e,t)}insert(e,t){if(this._data.size<this._maxElementsInCache)this._data.set(e,new u(t));else if(this._maxElementsInCache>0)throw new Error("Cache full, please clean Cache and retry adding data")}remove(e){if(void 0!==this._removeCallback){const t=this._data.get(e);void 0!==t&&this._removeCallback(t.value)}this._data.delete(e)}get(e){const t=this._data.get(e);if(void 0!==t)return t.value;throw new Error(`Cache element ${e} does not exist`)}isFull(){return this._data.size>=this._maxElementsInCache}cleanCache(e){const t=Array.from(this._data.entries());t.sort(((e,t)=>t[1].lastAccessTime-e[1].lastAccessTime));for(let s=0;s<e;s++){const e=t.pop();if(void 0===e)return;this.remove(e[0])}}resize(e){this._maxElementsInCache=e,this._defaultCleanupCount=Math.max(e*p.CLEANUP_COUNT_TO_CAPACITY_RATIO,1),this.isFull()&&this.cleanCache(this._data.size-this._maxElementsInCache)}clear(){if(void 0!==this._removeCallback)for(const e of this._data.values())this._removeCallback(e.value);this._data.clear()}}p.CLEANUP_COUNT_TO_CAPACITY_RATIO=.2,require("lodash/chunk"),require("lodash/map");const _={renderSize:new e.Vector2,position:new e.Vector3};var v,f;Symbol.toStringTag,require("lodash/remove"),function(){if("undefined"!=typeof self)return self;if("undefined"!=typeof window)return window;if(void 0!==s.g)return s.g;throw new Error("unable to locate global object")}(),(f=v||(v={}))[f.Box=0]="Box",f[f.Cylinder=1]="Cylinder",f[f.Composite=2]="Composite";class g{constructor(){this._disposedEvent=new n,this._disposed=!1}on(e,t){"disposed"===e?this._disposedEvent.subscribe(t):l(e)}off(e,t){"disposed"===e?this._disposedEvent.unsubscribe(t):l(e)}dispose(){if(this._disposed)throw new Error("Already disposed");this._disposed=!0,this._disposedEvent.fire(),this._disposedEvent.unsubscribeAll()}ensureNotDisposed(){if(this._disposed)throw new Error("The tool has been disposed")}}const w=require("lodash/range");var y=s.n(w);class C{constructor(e,t){this._removedElements=new Set,this._dimensions=t,this._cells=y()(0,t[0]*t[1]).map((()=>new Array)),this._bounds=e}insert(e,t){if(!this._bounds.intersectsBox(e))throw new Error("Element to be added must be partially inside grid");if(this._removedElements.has(t))throw new Error("Re-adding previously taken elements is currently not supported");for(const s of this.cellsIntersecting(e))s.push({bounds:e,element:t})}*overlappingElements(e){if(!this._bounds.intersectsBox(e))return;const t=new Set;for(const s of this.cellsIntersecting(e))for(const i of s)t.has(i.element)||this._removedElements.has(i.element)||!e.intersectsBox(i.bounds)||(t.add(i.element),yield i.element)}*removeOverlappingElements(e){if(this._bounds.intersectsBox(e))for(const t of this.cellsIntersecting(e))for(let s=0;s<t.length;s++){const i=t[s];!this._removedElements.has(i.element)&&e.intersectsBox(i.bounds)&&(this._removedElements.add(i.element),yield i.element)}}*cellsIntersecting(t){const{min:s,max:i}=this._bounds,n=this._dimensions[0],o=this._dimensions[1],r=(t.min.x-s.x)/(i.x-s.x),a=(t.max.x-s.x)/(i.x-s.x),l=(t.min.y-s.y)/(i.y-s.y),d=(t.max.y-s.y)/(i.y-s.y),c=e.MathUtils.clamp,h=c(Math.floor(n*r),0,n-1),m=c(Math.floor(n*a),0,n-1),u=c(Math.floor(o*l),0,o-1),p=c(Math.floor(o*d),0,o-1);for(let e=u;e<=p;++e)for(let t=h;t<=m;++t)yield this._cells[e*n+t]}}const b=require("mixpanel-browser");var x=s.n(b);const M=require("loglevel"),E=require("lodash/throttle");var L=s.n(E);const{VERSION:S,MIXPANEL_TOKEN:k}={VERSION:"4.0.0-dev.20221109",MIXPANEL_TOKEN:"8c900bdfe458e32b768450c20750853d",IS_DEVELOPMENT_MODE:!1};class T{constructor(e,t,s){x().init(k,{batch_requests:!0,disable_cookie:!0,disable_persistence:!0,ip:!1,property_blacklist:["$city","$region","mp_country_code","$geo_source","$timezone","mp_lib","$lib_version","$device_id","$user_id","$current_url","$screen_width","$screen_height","$referrer","$referring_domain","$initial_referrer","$initial_referring_domain"]}),x().reset(),x().identify("reveal-single-user"),this._sessionProps={VERSION:S,project:"unknown",application:"unknown",sessionId:"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,(function(e){const t=16*Math.random()|0;return("x"==e?t:3&t|8).toString(16)}))},e&&(this._sessionProps.project=e),t&&(this._sessionProps.application=t),this.innerTrackEvent("init",s)}static init(e,t,s,i){if(void 0===globalThis.revealMetricsLogger&&e){const e=new T(t,s,i);globalThis.revealMetricsLogger={metricsLogger:e}}}innerTrackEvent(e,t){const s={...this._sessionProps,...t};x().track(e,s)}static trackEvent(e,t){globalThis.revealMetricsLogger&&globalThis.revealMetricsLogger.metricsLogger.innerTrackEvent(e,t)}static trackCreateTool(e){T.trackEvent("toolCreated",{toolName:e})}static trackLoadModel(e,t,s){T.trackEvent("loadModel",{...e,modelIdentifier:t,modelVersion:s})}static trackCadModelStyled(e,t){T.trackEvent("cadModelStyleAssigned",{nodeCollectionClassToken:e,style:t})}static trackCadNodeTransformOverriddenImpl(e,t){const{zeroVector:s,oneVector:i,identityRotation:n,translation:o,scale:r,rotation:a}=T.trackCadNodeTransformOverriddenVars;t.decompose(o,a,r);const l=Math.abs(a.angleTo(n))>1e-5,d=o.distanceToSquared(s)>1e-5,c=r.distanceToSquared(i)>1e-5;T.trackEvent("cadNodeTransformOverridden",{nodeCount:e,hasTranslation:d,hasRotation:l,hasScale:c})}static trackCameraNavigationImpl(e){T.trackEvent("cameraNavigated",e)}static trackError(e,t){M.error(e),void 0!==e?this.trackEvent("error",{message:e.message||e,name:e.name,stack:e.stack,...t}):this.trackEvent("error",{name:"unknown",...t})}}T.TrackCameraNavigationThrottleDelay=5e3,T.TrackCadNodeTransformOverriddenThrottleDelay=1e3,T.trackCadNodeTransformOverriddenVars={zeroVector:new e.Vector3(0,0,0),oneVector:new e.Vector3(1,1,1),identityRotation:(new e.Quaternion).identity(),translation:new e.Vector3,scale:new e.Vector3,rotation:new e.Quaternion},T.trackCadNodeTransformOverridden=L()(((e,t)=>T.trackCadNodeTransformOverriddenImpl(e,t)),T.TrackCadNodeTransformOverriddenThrottleDelay),T.trackCameraNavigation=L()((e=>T.trackCameraNavigationImpl(e)),T.TrackCameraNavigationThrottleDelay);class D extends g{constructor(t,s){super(),this._htmlOverlays=new Map,this._compositeOverlays=[],this._preallocatedVariables={camPos:new e.Vector3,camNormal:new e.Vector3,point:new e.Vector3,nearPlane:new e.Plane,farPlane:new e.Plane,position2D:new e.Vector2},this._onSceneRenderedHandler=this.onSceneRendered.bind(this),this._onViewerDisposedHandler=this.onViewerDisposed.bind(this),this._options=null!=s?s:{},this._viewer=t,this._viewer.on("sceneRendered",this._onSceneRenderedHandler),this._viewer.on("disposed",this._onViewerDisposedHandler),this.scheduleUpdate=a()((()=>this.forceUpdate()),20),this._visible=!0,T.trackCreateTool("HtmlOverlayTool")}get viewerDomElement(){return this._viewer.domElement}get viewerCamera(){return this._viewer.cameraManager.getCamera()}get viewerRenderer(){return this._viewer.renderer}get elements(){return Array.from(this._htmlOverlays.entries()).map((([e,t])=>({element:e,position3D:t.position3D})))}dispose(){this._viewer.off("sceneRendered",this._onSceneRenderedHandler),this._viewer.off("disposed",this._onViewerDisposedHandler),this.clear(),super.dispose()}add(t,s,i={}){if(this.ensureNotDisposed(),this.viewerDomElement.contains(t))throw new Error("Element is already attached to viewer");t.style.visibility="hidden",this.viewerDomElement.appendChild(t);const n=getComputedStyle(t);if("absolute"!==n.position)throw this.viewerDomElement.removeChild(t),new Error(`htmlElement style must have a position of absolute. but was '${n.position}'`);const o={position3D:s,options:i,state:{position2D:new e.Vector2,width:-1,height:-1,visible:!0}};this._htmlOverlays.set(t,o),this.scheduleUpdate()}remove(e){if(this.ensureNotDisposed(),!this.viewerDomElement.contains(e)||!this._htmlOverlays.has(e))throw new Error("Element is not attached to viewer");this.viewerDomElement.removeChild(e),this._htmlOverlays.delete(e)}clear(){const e=Array.from(this._htmlOverlays.keys());for(const t of e)this.remove(t);this.forceUpdate()}visible(e){const t=!0===e?"visible":"hidden";this._visible=e,this._htmlOverlays.forEach(((e,s)=>{s.style.visibility=t})),this._compositeOverlays.forEach((e=>{e.style.visibility=t})),this.forceUpdate()}forceUpdate(){if(!this._visible)return;if(this.ensureNotDisposed(),this.cleanupClusterElements(),0===this._htmlOverlays.size)return;this.updateNewElementSizes();const t=this.viewerCamera,s=this.viewerRenderer,{camPos:i,camNormal:n,point:o,nearPlane:r,farPlane:a,position2D:l}=this._preallocatedVariables;t.getWorldPosition(i),t.getWorldDirection(n),o.copy(i).addScaledVector(n,t.near),r.setFromNormalAndCoplanarPoint(n,o),o.copy(i).addScaledVector(n,t.far),a.setFromNormalAndCoplanarPoint(n,o),this._htmlOverlays.forEach(((n,o)=>{const{position3D:d,options:{positionUpdatedCallback:c,userData:h},state:m}=n,u=r.distanceToPoint(d)>=0&&a.distanceToPoint(d)<=0,{x:p,y:v}=function(t,s,i,n=new e.Vector3){!function(t,s,i=new e.Vector3){const{position:n}=_;n.copy(s),n.project(t);const o=(n.x+1)/2,r=(1-n.y)/2;i.set(o,r,n.z)}(s,i,n);const{renderSize:o}=_;t.getSize(o);const r=t.domElement,{width:a,height:l}=r.getBoundingClientRect();return n.x=Math.round(n.x*a),n.y=Math.round(n.y*l),n}(s,t,d);if(u?(m.position2D.set(p,v),m.visible=!0):m.visible=!1,c){l.set(p,v);const e=i.distanceTo(d);c(o,l,d,e,h)}})),this.clusterElements(),this.commitDOMChanges()}updateNewElementSizes(){this._htmlOverlays.forEach(((e,t)=>{if(-1===e.state.width){const s=t.getBoundingClientRect();e.state.width=s.width,e.state.height=s.height}}))}commitDOMChanges(){const e=this.viewerRenderer.domElement,t=e.offsetLeft,s=e.offsetTop;this._htmlOverlays.forEach(((e,i)=>{const{state:n}=e;i.style.left=`${n.position2D.x+t}px`,i.style.top=`${n.position2D.y+s}px`,n.visible&&"visible"!==i.style.visibility?function(e){e.style.visibility="visible",e.style.opacity="1",e.style.transition="opacity 0.2s linear"}(i):n.visible||"hidden"===i.style.visibility||function(e){e.style.visibility="hidden",e.style.opacity="0",e.style.transition="visibility 0s 0.2s, opacity 0.2s linear"}(i)})),this._compositeOverlays.forEach((e=>{this.viewerDomElement.appendChild(e)}))}clusterElements(){const e=this._options.clusteringOptions;void 0!==e&&("overlapInScreenSpace"===e.mode?this.clusterByOverlapInScreenSpace(e.createClusterElementCallback):l(e.mode,`Unsupported clustering mode: '${e.mode}`))}cleanupClusterElements(){this._compositeOverlays.forEach((e=>{this.viewerDomElement.removeChild(e)})),this._compositeOverlays.splice(0)}clusterByOverlapInScreenSpace(t){const s=(i=this.viewerRenderer.domElement.getBoundingClientRect(),(n=null!=n?n:new e.Box2).min.set(i.left,i.top),n.max.set(i.right,i.bottom),n);var i,n;const o=s.getSize(new e.Vector2);s.set(new e.Vector2(0,0),o);const r=new C(s,[10,10]);for(const[e,t]of this._htmlOverlays.entries()){const{state:i}=t,n=P(t);i.visible&&n.intersectsBox(s)&&r.insert(n,{htmlElement:e,...t})}const a=new e.Box2,l=new e.Vector2;for(const e of this._htmlOverlays.values()){const{state:i}=e;if(P(e,a),!i.visible||!a.intersectsBox(s))continue;const n=Array.from(r.removeOverlappingElements(a));if(n.length>1){const e=n.reduce(((e,t)=>e.add(t.state.position2D)),l.set(0,0)).divideScalar(n.length),s=t(n.map((e=>({htmlElement:e.htmlElement,userData:e.options.userData}))));n.forEach((e=>e.state.visible=!1)),this.addComposite(s,e)}}}addComposite(e,t){const s=this.viewerRenderer.domElement;e.style.visibility="visible",e.style.left=`${t.x+s.offsetLeft}px`,e.style.top=`${t.y+s.offsetTop}px`,this._compositeOverlays.push(e)}onSceneRendered(){this.forceUpdate()}onViewerDisposed(){this.dispose()}}function P(t,s){const{state:i}=t;return(s=null!=s?s:new e.Box2).min.set(i.position2D.x,i.position2D.y),s.max.set(i.position2D.x+i.width,i.position2D.y+i.height),s}class V extends g{constructor(e,t){super(),this._cadModel=t,this._rootTreeIndex=e,this.preloadBoundingBoxData(t,e),T.trackCreateTool("ExplodedViewTool")}get readyPromise(){return this._treeBoundingBoxdata.then()}async expand(e){const t=await this._treeBoundingBoxdata;await Promise.all(t.map((({treeIndex:t,direction:s,transform:i})=>0===e?(this._cadModel.resetNodeTransformByTreeIndex(t),Promise.resolve(0)):(i.setPosition(s.x*e,s.y*e,s.z*e),this._cadModel.setNodeTransformByTreeIndex(t,i)))))}reset(){this._cadModel.resetNodeTransformByTreeIndex(this._rootTreeIndex,!0)}preloadBoundingBoxData(t,s){const i=t.getBoundingBoxByTreeIndex(s).then((t=>t.getCenter(new e.Vector3))),n=t.getSubtreeTreeIndices(s).then((e=>{if(e.count>1e3)throw new Error(`Subtree size of ${e.count} is too large (max size = 1000)`);return e})).then((s=>Promise.all(s.toArray().map((async s=>({subTreeIndex:s,subTreeIndexBoundingBoxCenter:(await t.getBoundingBoxByTreeIndex(s)).getCenter(new e.Vector3)}))))));this._treeBoundingBoxdata=Promise.all([i,n]).then((t=>{const[s,i]=t;return i.map((({subTreeIndex:t,subTreeIndexBoundingBoxCenter:i})=>({treeIndex:t,direction:(new e.Vector3).subVectors(i,s),transform:new e.Matrix4})))})).then((async e=>(await Promise.all(e.map((e=>t.setNodeTransformByTreeIndex(e.treeIndex,e.transform)))),e)))}}class O extends g{constructor(e){super(),this._onViewerDisposedHandler=this.onViewerDisposed.bind(this),this._viewer=e,this._viewer.on("disposed",this._onViewerDisposedHandler)}get viewerCamera(){return this._viewer.cameraManager.getCamera()}dispose(){this._viewer.off("disposed",this._onViewerDisposedHandler),super.dispose()}showCameraHelper(){this.hideCameraHelper(),this._cameraHelper=new e.CameraHelper(this.viewerCamera.clone()),this._viewer.addObject3D(this._cameraHelper)}hideCameraHelper(){void 0!==this._cameraHelper&&(this._viewer.removeObject3D(this._cameraHelper),this._cameraHelper=void 0)}onViewerDisposed(){this.dispose()}}const A=require("lodash/cloneDeep");var B=s.n(A);const I=require("lodash/merge");var R=s.n(I);const N=require("@tweenjs/tween.js");var z=s.n(N);const F=require("glslify");var G,U=s.n(F);!function(e){e[e.TopRight=0]="TopRight",e[e.TopLeft=1]="TopLeft",e[e.BottomLeft=2]="BottomLeft",e[e.BottomRight=3]="BottomRight"}(G||(G={}));const $={ringLabel:"N",labelDelta:Math.PI,fontSize:void 0,fontColor:new e.Color(16711680),tickColor:new e.Color(9737364)},j={label:"",fontSize:void 0,fontColor:new e.Color(3355443),outlineSize:void 0,outlineColor:new e.Color(3355443),faceColor:new e.Color(9737364)},H={size:128,position:{corner:G.BottomRight,padding:new e.Vector2},animationSpeed:200,faces:{xPositiveFace:{...j,label:"Right"},xNegativeFace:{...j,label:"Left"},yPositiveFace:{...j,label:"Up"},yNegativeFace:{...j,label:"Down"},zPositiveFace:{...j,label:"Front"},zNegativeFace:{...j,label:"Back"}},compass:$};class W extends g{constructor(t,s){super(),this._dynamicUpdatePosition=()=>{},this._updateClickDiv=()=>{},this._screenPosition=new e.Vector2,this._boxFaceGeometry=new e.PlaneGeometry(.9,.9,1,1),this._raycaster=new e.Raycaster,this._raycaster.layers.enableAll(),this._viewer=t,this._layoutConfig=R()(B()(H),s),this._axisGroup=new e.Group,this._axisGroup.name="Axis View Tool",this._axisGroup.renderOrder=1,this._interactiveObjects=this.createAxisCross(this._axisGroup),[this._updateClickDiv,this._disposeClickDiv]=this.createClickDiv(t),this.addAxisBoxToViewer(this._axisGroup,this._layoutConfig.position),T.trackCreateTool("AxisViewTool")}dispose(){super.dispose(),this._viewer.removeObject3D(this._axisGroup),this._disposeClickDiv()}createClickDiv(e){if(null===e.domElement.querySelector("canvas"))throw new Error("Could not find canvas");const t=document.createElement("div");return t.style.position="absolute",t.style.height=`${this._layoutConfig.size}px`,t.style.width=`${this._layoutConfig.size}px`,t.style.zIndex="1",t.addEventListener("mousedown",(e=>{e.stopPropagation()})),t.addEventListener("contextmenu",(e=>e.preventDefault())),t.addEventListener("mouseup",(t=>{const s=e.domElement.getBoundingClientRect(),i=t.clientX-s.left,n=t.clientY-s.top;this.handleClick(i,n,s),t.stopPropagation()})),e.domElement.appendChild(t),[()=>{t.style.left=`${this._screenPosition.x}px`,t.style.bottom=`${this._screenPosition.y}px`},()=>{e.domElement.removeChild(t)}]}addAxisBoxToViewer(e,t){const s=this._layoutConfig.size;if(function(e){return void 0!==e.xAbsolute&&void 0!==e.yAbsolute}(t))this._screenPosition.x=t.xAbsolute,this._screenPosition.y=t.yAbsolute;else{switch(t.corner){case G.BottomRight:this._screenPosition.y=t.padding.y,this._dynamicUpdatePosition=()=>{this._screenPosition.x=this._viewer.renderer.domElement.clientWidth-t.padding.x-s};break;case G.TopRight:this._dynamicUpdatePosition=()=>{this._screenPosition.x=this._viewer.renderer.domElement.clientWidth-t.padding.x-s,this._screenPosition.y=this._viewer.renderer.domElement.clientHeight-t.padding.y-s};break;case G.TopLeft:this._screenPosition.x=t.padding.x,this._dynamicUpdatePosition=()=>{this._screenPosition.y=this._viewer.renderer.domElement.clientHeight-t.padding.y-s};break;case G.BottomLeft:this._screenPosition.x=t.padding.x,this._screenPosition.y=t.padding.y;break;default:throw new Error(`Unknown corner position for Axis Cross: Corner = ${t.corner}`)}this._dynamicUpdatePosition()}this._viewer.addObject3D(e)}handleClick(t,s,i){const n=2*(t-this._screenPosition.x)/this._layoutConfig.size-1,o=2*(i.height-s-this._screenPosition.y)/this._layoutConfig.size-1,r=new e.Vector3(n,o,1),a=new e.Vector3(0,0,-1).normalize();this._raycaster.set(r,a);const l=this._raycaster.intersectObjects(this._interactiveObjects);if(!(l.length>0))return!1;const d=l[0].object.position.clone().normalize(),c=l[0].object.userData.upVector.clone();return this.moveCameraTo(d,c),!0}createAxisCross(e){const t=this.createCompass();e.add(t);const s=this.createBoxFaces();return e.add(...s),this.setupTransformOnRender(e),s}setupTransformOnRender(t){t.children[0].onBeforeRender=s=>{this._dynamicUpdatePosition(),t.quaternion.copy(this._viewer.cameraManager.getCamera().quaternion).invert(),t.updateMatrixWorld(),this._updateClickDiv();const i=s.domElement.clientWidth,n=s.domElement.clientHeight,o=new e.Vector2;s.getSize(o);const r=this._layoutConfig.size,a=new e.Vector2(r/i,r/n),l=new e.Vector2(this._screenPosition.x/i*2+r/i,this._screenPosition.y/n*2+r/n);t.traverse((t=>{t instanceof e.Mesh&&(t.material.uniforms.offset.value=l,t.material.uniforms.scale.value=a,t.material.uniformsNeedUpdate=!0)}))}}createBoxFaces(){const t=this._layoutConfig.faces;return[this.createBoxFace(new e.Vector3(1,0,0),t.xPositiveFace),this.createBoxFace(new e.Vector3(-1,0,0),t.xNegativeFace),this.createBoxFace(new e.Vector3(0,1,0),t.yPositiveFace,new e.Vector3(0,0,-1)),this.createBoxFace(new e.Vector3(0,-1,0),t.yNegativeFace,new e.Vector3(0,0,1)),this.createBoxFace(new e.Vector3(0,0,1),t.zPositiveFace),this.createBoxFace(new e.Vector3(0,0,-1),t.zNegativeFace)]}createCompass(){const t=new e.PlaneGeometry(2,2,1,1),i=new e.Mesh(t,new e.RawShaderMaterial({vertexShader:U()(s(479).Z),fragmentShader:U()(s(430).Z),uniforms:{offset:{value:new e.Vector2},scale:{value:new e.Vector2},tex:{value:this.createCompassTexture()}},side:e.DoubleSide,glslVersion:e.GLSL3,depthTest:!1,blending:e.CustomBlending,blendDst:e.OneMinusSrcAlphaFactor,blendSrc:e.SrcAlphaFactor}));i.frustumCulled=!1,i.renderOrder=1;const n=Math.sin(this._layoutConfig.compass.labelDelta),o=Math.cos(this._layoutConfig.compass.labelDelta);return i.position.y=-.45,i.up.copy(new e.Vector3(n,0,o)),i.lookAt(0,0,0),i}createCompassTexture(){var t;const s=this._layoutConfig.compass,i=this._layoutConfig.size,n=document.createElement("canvas");n.width=i,n.height=i;const o=n.getContext("2d"),r=i/2,a=r-r/4,l=i/32,d=i/8;if(o.strokeStyle=s.tickColor.getStyle(),o.lineWidth=i/16,o.setLineDash([l,d]),o.beginPath(),o.arc(r,r,a,0,2*Math.PI),o.stroke(),s.ringLabel&&s.ringLabel.length>0){const e=null!==(t=s.fontSize)&&void 0!==t?t:i/5;o.font=`bold ${e}px Arial`,o.textAlign="center",o.fillStyle=s.fontColor.getStyle(),o.fillText(s.ringLabel,r,r*(1/4)+e/3)}return new e.CanvasTexture(n)}getFaceTexture(t,s){var i,n;const o=s/2,r=document.createElement("canvas");r.width=o,r.height=o;const a=r.getContext("2d");a.fillStyle=t.outlineColor.getStyle(),a.fillRect(0,0,o,o),a.fillStyle=t.faceColor.getStyle();const l=null!==(i=t.outlineSize)&&void 0!==i?i:o/32;if(a.fillRect(l,l,o-2*l,o-2*l),a.fill(),""!==t.label){const e=null!==(n=t.fontSize)&&void 0!==n?n:o/3;a.font=`bold ${e}px Arial`,a.textAlign="center",a.fillStyle=t.fontColor.getStyle(),a.fillText(t.label,o/2,o/2+e/3)}return new e.CanvasTexture(r)}createBoxFace(t,i,n=new e.Vector3(0,1,0)){const o=new e.Mesh(this._boxFaceGeometry,new e.RawShaderMaterial({vertexShader:U()(s(479).Z),fragmentShader:U()(s(430).Z),uniforms:{offset:{value:new e.Vector2},scale:{value:new e.Vector2},tex:{value:this.getFaceTexture(i,this._layoutConfig.size)}},depthTest:!1,glslVersion:e.GLSL3,transparent:!0}));return o.frustumCulled=!1,o.renderOrder=1e3,o.position.copy(t.multiplyScalar(.5*this._boxFaceGeometry.parameters.width)),o.lookAt(t.multiplyScalar(2)),o.userData.upVector=n,o}moveCameraTo(t,s){const i=this._viewer.cameraManager,{position:n,target:o,rotation:r}=i.getCameraState(),a=n.clone().sub(o),l=a.length(),d=a.clone().normalize(),c=Math.acos(d.dot(t)),h={t:0},m=new(z().Tween)(h),u=t.clone(),p=r.clone(),_=(new e.Quaternion).setFromRotationMatrix((new e.Matrix4).makeBasis(s.clone().cross(u),s,u));if(p.angleTo(_)<1e-6)return;const v=new e.Vector3,f=new e.Quaternion;m.to({t:1},this._layoutConfig.animationSpeed).onUpdate((()=>{v.copy(d).multiplyScalar(Math.sin((1-h.t)*c)/Math.sin(c)).add(t.clone().multiplyScalar(Math.sin(h.t*c)/Math.sin(c))),v.multiplyScalar(l),v.add(o),f.slerpQuaternions(p,_,h.t),i.setCameraState({position:v,rotation:f})})).onComplete((()=>{i.setCameraState({position:v,target:o})})).start(z().now()).update(z().now())}}class q{constructor(e,t){this._nodeCollectionAndAppearance=[],this._model=e,this._date=t}getKeyframeDate(){return this._date}activate(){this._nodeCollectionAndAppearance.forEach(((e,t)=>{this._model.assignStyledNodeCollection(e.nodes,e.nodeAppearance)}))}deactivate(){this._nodeCollectionAndAppearance.forEach(((e,t)=>{this._model.unassignStyledNodeCollection(e.nodes)}))}assignStyledNodeCollection(e,t){T.trackCadModelStyled(e.classToken,t);const s=this._nodeCollectionAndAppearance.findIndex((t=>t.nodes===e));-1!==s?this._nodeCollectionAndAppearance[s].nodeAppearance=t:this._nodeCollectionAndAppearance.push({nodes:e,nodeAppearance:t})}unassignStyledNodeCollection(e){const t=this._nodeCollectionAndAppearance.findIndex((t=>t.nodes===e));if(-1===t)throw new Error("Node collection has not been assigned to model");this._nodeCollectionAndAppearance.splice(t,1)}}class K extends g{constructor(e){super(),this._playback=void 0,this._events={dateChanged:new n},this._model=e,this._keyframes=new Array}subscribe(e,t){"dateChanged"===e?this._events.dateChanged.subscribe(t):l(e,`Unsupported event: '${e}'`)}unsubscribe(e,t){"dateChanged"===e?this._events.dateChanged.unsubscribe(t):l(e,`Unsupported event: '${e}'`)}createKeyframe(e){const t=new q(this._model,e);return this._keyframes.push(t),this.sortKeyframesByDates(),t}getKeyframeByDate(e){return this._keyframes.find((t=>t.getKeyframeDate()===e))}removeKeyframe(e){const t=this._keyframes.findIndex((t=>t===e));t>-1&&this._keyframes.splice(t,1)}removeKeyframeByDate(e){const t=this._keyframes.findIndex((t=>t.getKeyframeDate()===e));t>-1&&this._keyframes.splice(t,1)}play(e,t,s){this.stop();const i={dateInMs:e.getTime()},n={dateInMs:t.getTime()},o=new(z().Tween)(i).to(n,s);let r=-1;o.onUpdate((()=>{const s=new Date(i.dateInMs),n=r;for(;r<this._keyframes.length-1&&this._keyframes[r+1].getKeyframeDate().getTime()<=s.getTime();)r++;r!==n&&(-1!==n&&this._keyframes[n].deactivate(),this._keyframes[r].activate()),this._events.dateChanged.fire({date:s,activeKeyframe:this._keyframes[r],startDate:e,endDate:t})})),this._playback=o,o.start()}stop(){void 0!==this._playback&&(this._playback.stop(),this._playback=void 0)}pause(){void 0!==this._playback&&this._playback.isPlaying()&&this._playback.pause()}resume(){void 0!==this._playback&&this._playback.isPaused()&&this._playback.resume()}getAllKeyframes(){return this._keyframes.slice()}dispose(){super.dispose(),this._events.dateChanged.unsubscribeAll()}sortKeyframesByDates(){this._keyframes.length>1&&this._keyframes.sort(((e,t)=>e.getKeyframeDate().getTime()-t.getKeyframeDate().getTime()))}}class Y{constructor(){Y.ensureStylesLoaded()}createLabel(e){const t=document.createElement("div");return t.innerText=e,t.className=Y.stylesId,t}static ensureStylesLoaded(){if(document.getElementById(Y.stylesId))return;const e=document.createElement("style");e.id=Y.stylesId,e.appendChild(document.createTextNode(".reveal-measurement-label {\n\tposition: absolute;\n\n /* Anchor to the center of the element and ignore events */\n transform: translate(-50%, -50%);\n pointer-events: none;\n touch-action: none;\n user-select: none;\n border-radius: 6px;\n\n /* Make it look nice */\n padding: 6px;\n color: #fff;\n background: #232323da;\n border: #ffffff22 solid 1px;\n overflow: hidden;\n white-space: nowrap;\n\n /*Font - fallback to generic font if Inter not available*/\n font-family: 'Inter', sans-serif;\n font-style: normal;\n font-weight: 500;\n}\n")),document.head.appendChild(e)}}Y.stylesId="reveal-measurement-label";const X=require("three-stdlib");class Z{constructor(t,s,i){this._position=new Float32Array(6),this._geometry=new X.LineGeometry,this._adaptiveWidthLineMaterial=new X.LineMaterial({color:s.getHex(),linewidth:t,worldUnits:!0,depthTest:!1}),this._fixedWidthLineMaterial=new X.LineMaterial({color:s.getHex(),linewidth:2,worldUnits:!1,depthTest:!1}),this._meshes=new e.Group,this._meshes.name="Measurement";const n=new e.Mesh(new e.BufferGeometry);n.name="onBeforeRenderTrigger trigger (no geometry)",n.frustumCulled=!1;const o=new e.Vector2;n.onBeforeRender=e=>{const{width:t,height:s}=e.domElement.getBoundingClientRect();o.set(t,s),this._adaptiveWidthLineMaterial.resolution=this._fixedWidthLineMaterial.resolution=o},this._meshes.add(n),this.startLine(i)}dispose(){this._geometry&&this._geometry.dispose(),this._adaptiveWidthLineMaterial.dispose(),this._fixedWidthLineMaterial.dispose(),this._meshes.clear(),this._meshes.removeFromParent()}get meshes(){return this._meshes}updateLine(e){this._position[3]=e.x,this._position[4]=e.y,this._position[5]=e.z,this._geometry.setPositions(this._position)}getMeasuredDistance(){const t=new e.Vector3(this._position[0],this._position[1],this._position[2]);return new e.Vector3(this._position[3],this._position[4],this._position[5]).distanceTo(t)}getMidPointOnLine(){const t=new e.Vector3(this._position[0],this._position[1],this._position[2]);let s=new e.Vector3(this._position[3],this._position[4],this._position[5]).clone().sub(t);const i=s.length();return s=s.normalize().multiplyScalar(.5*i),t.clone().add(s)}updateLineWidth(e){this._adaptiveWidthLineMaterial.linewidth=e}updateLineColor(e){this._fixedWidthLineMaterial.color=this._adaptiveWidthLineMaterial.color=e}startLine(e){this._position[0]=this._position[3]=e.x,this._position[1]=this._position[4]=e.y,this._position[2]=this._position[5]=e.z,this._geometry.setPositions(this._position);const t=new X.Line2(this._geometry,this._adaptiveWidthLineMaterial);t.computeLineDistances(),t.renderOrder=100;const s=new X.Line2(this._geometry,this._fixedWidthLineMaterial);s.computeLineDistances(),s.renderOrder=100,this._meshes.add(t),this._meshes.add(s)}}class Q{constructor(t,s,i,n,o,r){this._measurement={measurementId:0,startPoint:new e.Vector3,endPoint:new e.Vector3,distanceInMeters:0},this._options=n,this._measurementLabel=new Y,this._htmlOverlay=o,this._domElement=t,this._camera=s,this._meshGroup=i,this._startPoint=r,this._distanceToCamera=this._camera.getWorldPosition(new e.Vector3).distanceTo(r),this._line=this.startMeasurement(r),this._meshGroup.add(this._line.meshes)}update(e){const{offsetX:t,offsetY:s}=e;this._line.updateLine(this.pointerTo3DPosition(t,s))}endMeasurement(e){const{distanceToLabelCallback:t}=this._options;this._line.updateLine(e);const s=t(this._line.getMeasuredDistance());this._labelElement=this.addLabel(this._line.getMidPointOnLine(),s),this._measurement={measurementId:Date.now(),startPoint:this._startPoint,endPoint:e,distanceInMeters:this._line.getMeasuredDistance()}}removeMeasurement(){this._meshGroup.remove(this._line.meshes),this._labelElement&&this._htmlOverlay.remove(this._labelElement),this._line&&this._line.dispose()}getMeasurement(){return this._measurement}updateLineWidth(e){this._line.updateLineWidth(e)}updateLineColor(e){this._line.updateLineColor(e)}visible(e){this._meshGroup&&(this._meshGroup.visible=e)}startMeasurement(e){return new Z(this._options.lineWidth,this._options.color,e)}addLabel(e,t){const s=this._measurementLabel.createLabel(t);return this._htmlOverlay.add(s,e),s}pointerTo3DPosition(t,s){const i=new e.Vector3,n=new e.Vector2;n.x=t/this._domElement.clientWidth*2-1,n.y=-s/this._domElement.clientHeight*2+1;const o=new e.Vector3,r=new e.Ray,a=new e.Vector3;return a.setFromMatrixPosition(this._camera.matrixWorld),r.origin.copy(a),o.set(n.x,n.y,.5).unproject(this._camera).sub(r.origin).normalize(),r.direction.copy(o),r.at(this._distanceToCamera,i),i}}class J extends g{constructor(t,s){super(),this._geometryGroup=new e.Group,this._handleLabelClustering=this.createCombineClusterElement.bind(this),this._handlePointerClick=this.onPointerClick.bind(this),this._handlePointerMove=this.onPointerMove.bind(this),this._handleMeasurementCancel=this.onKeyDown.bind(this),this._events={measurementAdded:new n,measurementStarted:new n,measurementEnded:new n,disposed:new n},this._overlayOptions={clusteringOptions:{mode:"overlapInScreenSpace",createClusterElementCallback:this._handleLabelClustering}},this._viewer=t,this._options={...J.defaultLineOptions,...s},this._measurements=[],this._measurementMode=!1,this._showMeasurements=this._showLabels=!0,this._htmlOverlay=new D(this._viewer,this._overlayOptions),this._geometryGroup.name=J.name,this._viewer.addObject3D(this._geometryGroup),T.trackCreateTool("MeasurementTool")}get isInMeasurementMode(){return this._measurementMode}on(e,t){switch(e){case"added":this._events.measurementAdded.subscribe(t);break;case"started":this._events.measurementStarted.subscribe(t);break;case"ended":this._events.measurementEnded.subscribe(t);break;case"disposed":this._events.disposed.subscribe(t);break;default:l(e,`Unsupported event: '${e}'`)}}off(e,t){switch(e){case"added":this._events.measurementAdded.unsubscribe(t);break;case"started":this._events.measurementStarted.unsubscribe(t);break;case"ended":this._events.measurementEnded.unsubscribe(t);break;case"disposed":this._events.disposed.unsubscribe(t);break;default:l(e,`Unsupported event: '${e}'`)}}enterMeasurementMode(){if(this._measurementMode)throw new Error("Measurement mode is active, call exitMeasurementMode()");this._viewer.on("click",this._handlePointerClick),this._events.measurementStarted.fire(),this._measurementMode=!0,this._showMeasurements=!0}exitMeasurementMode(){if(!this._measurementMode)throw new Error("Measurement mode is not active, call enterMeasurementMode()");this.cancelActiveMeasurement(),this._viewer.off("click",this._handlePointerClick),this._events.measurementEnded.fire(),this._measurementMode=!1}removeMeasurement(e){const t=this._measurements.findIndex((t=>t.getMeasurement()===e));if(-1===t)throw new Error("Measurement not found");this._measurements[t].removeMeasurement(),this._measurements.splice(t,1),this._viewer.requestRedraw()}removeAllMeasurements(){this._measurements.forEach((e=>{e.removeMeasurement()})),this._measurements.splice(0),this._viewer.requestRedraw()}setMeasurementLabelsVisible(e){this._showMeasurements&&this._htmlOverlay.visible(e),this._showLabels=e}setLineOptions(e){this._options={...this._options,...e}}updateLineWidth(e,t){const s=this._measurements.findIndex((t=>t.getMeasurement()===e));if(-1===s)throw new Error("Measurement not found");this._measurements[s].updateLineWidth(t),this._viewer.requestRedraw()}updateLineColor(e,t){const s=this._measurements.findIndex((t=>t.getMeasurement()===e));if(-1===s)throw new Error("Measurement not found");this._measurements[s].updateLineColor(t),this._viewer.requestRedraw()}getAllMeasurements(){return this._measurements.map((e=>e.getMeasurement()))}visible(e){this._measurements.forEach((t=>{t.visible(e)}));const t=!1!==e&&this._showLabels;this._htmlOverlay.visible(t),this._showMeasurements=e,this._viewer.requestRedraw()}dispose(){var e;this.removeAllMeasurements(),this.exitMeasurementMode(),null===(e=this._activeMeasurement)||void 0===e||e.removeMeasurement(),this._htmlOverlay.dispose(),this._geometryGroup.clear(),this._viewer.removeObject3D(this._geometryGroup),this._events.measurementAdded.unsubscribeAll(),this._events.measurementStarted.unsubscribeAll(),this._events.measurementEnded.unsubscribeAll(),super.dispose()}async onPointerClick(e){const{offsetX:t,offsetY:s}=e,i=await this._viewer.getIntersectionFromPixel(t,s);if(i){if(this._activeMeasurement){this._activeMeasurement.endMeasurement(i.point);const e=this._activeMeasurement.getMeasurement();this._measurements.push(this._activeMeasurement),this._activeMeasurement=void 0,this._events.measurementAdded.fire(this._measurements[this._measurements.length-1].getMeasurement()),this._viewer.domElement.removeEventListener("pointermove",this._handlePointerMove),window.removeEventListener("keydown",this._handleMeasurementCancel),T.trackEvent("measurementAdded",{measurement:e})}else{const e=this._viewer.cameraManager.getCamera(),t=this._viewer.domElement;this._activeMeasurement=new Q(t,e,this._geometryGroup,this._options,this._htmlOverlay,i.point),this._viewer.domElement.addEventListener("pointermove",this._handlePointerMove),window.addEventListener("keydown",this._handleMeasurementCancel)}this._viewer.requestRedraw()}}onPointerMove(e){this._activeMeasurement&&(this._activeMeasurement.update(e),this._viewer.requestRedraw())}createCombineClusterElement(){const e=document.createElement("div");return e.className=Y.stylesId,e.innerHTML='<?xml version="1.0" encoding="UTF-8"?>\n<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="50px" height="20px" viewBox="0 0 50 20" version="1.1">\n<g id="surface1">\n<path style=" stroke:none;fill-rule:nonzero;fill:rgb(100%,100%,100%);fill-opacity:0.8;" d="M 0.832031 4 C 0.371094 4 0 4.148438 0 4.332031 L 0 10 C 0 10.183594 0.371094 10.332031 0.832031 10.332031 C 1.292969 10.332031 1.667969 10.183594 1.667969 10 L 1.667969 4.332031 C 1.667969 4.148438 1.292969 4 0.832031 4 Z M 0.832031 4 "/>\n<path style=" stroke:none;fill-rule:nonzero;fill:rgb(100%,100%,100%);fill-opacity:0.8;" d="M 49.167969 4 C 48.707031 4 48.332031 4.148438 48.332031 4.332031 L 48.332031 10 C 48.332031 10.183594 48.707031 10.332031 49.167969 10.332031 C 49.628906 10.332031 50 10.183594 50 10 L 50 4.332031 C 50 4.148438 49.628906 4 49.167969 4 Z M 49.167969 4 "/>\n<path style=" stroke:none;fill-rule:nonzero;fill:rgb(100%,100%,100%);fill-opacity:0.8;" d="M 49.582031 11.332031 L 46.25 11.332031 C 46.019531 11.332031 45.835938 11.40625 45.835938 11.5 L 45.835938 12.332031 C 45.835938 12.515625 45.460938 12.667969 45 12.667969 C 44.542969 12.667969 44.167969 12.519531 44.167969 12.332031 L 44.167969 11.5 C 44.167969 11.40625 43.980469 11.332031 43.75 11.332031 L 41.25 11.332031 C 41.019531 11.332031 40.835938 11.40625 40.835938 11.5 L 40.835938 13 C 40.835938 13.183594 40.460938 13.332031 40 13.332031 C 39.542969 13.332031 39.167969 13.183594 39.167969 13 L 39.167969 11.5 C 39.167969 11.40625 38.980469 11.332031 38.75 11.332031 L 36.25 11.332031 C 36.019531 11.332031 35.832031 11.40625 35.832031 11.5 L 35.835938 12.332031 C 35.835938 12.515625 35.460938 12.667969 35 12.667969 C 34.539062 12.667969 34.167969 12.519531 34.167969 12.332031 L 34.167969 11.5 C 34.167969 11.40625 33.980469 11.332031 33.75 11.332031 L 31.25 11.332031 C 31.019531 11.332031 30.832031 11.40625 30.832031 11.5 L 30.835938 13 C 30.835938 13.183594 30.460938 13.332031 30 13.332031 C 29.539062 13.332031 29.167969 13.183594 29.167969 13 L 29.167969 11.5 C 29.167969 11.40625 28.980469 11.332031 28.75 11.332031 L 26.25 11.332031 C 26.019531 11.332031 25.832031 11.40625 25.832031 11.5 L 25.835938 12.332031 C 25.835938 12.515625 25.460938 12.667969 25 12.667969 C 24.539062 12.667969 24.167969 12.519531 24.167969 12.332031 L 24.167969 11.5 C 24.167969 11.40625 23.980469 11.332031 23.75 11.332031 L 21.25 11.332031 C 21.019531 11.332031 20.832031 11.40625 20.832031 11.5 L 20.835938 13 C 20.835938 13.183594 20.460938 13.332031 20 13.332031 C 19.539062 13.332031 19.167969 13.183594 19.167969 13 L 19.167969 11.5 C 19.167969 11.40625 18.980469 11.332031 18.75 11.332031 L 16.25 11.332031 C 16.019531 11.332031 15.832031 11.40625 15.832031 11.5 L 15.835938 12.332031 C 15.835938 12.515625 15.460938 12.667969 15 12.667969 C 14.539062 12.667969 14.167969 12.519531 14.167969 12.332031 L 14.167969 11.5 C 14.167969 11.40625 13.980469 11.332031 13.75 11.332031 L 11.25 11.332031 C 11.019531 11.332031 10.832031 11.40625 10.832031 11.5 L 10.835938 13 C 10.835938 13.183594 10.460938 13.332031 10 13.332031 C 9.539062 13.332031 9.167969 13.183594 9.167969 13 L 9.167969 11.5 C 9.167969 11.40625 8.980469 11.332031 8.75 11.332031 L 6.25 11.332031 C 6.019531 11.332031 5.832031 11.40625 5.832031 11.5 L 5.832031 12.332031 C 5.832031 12.519531 5.460938 12.667969 5 12.667969 C 4.539062 12.667969 4.167969 12.519531 4.167969 12.332031 L 4.167969 11.5 C 4.167969 11.40625 3.980469 11.332031 3.75 11.332031 L 0.417969 11.332031 C 0.1875 11.332031 0 11.40625 0 11.5 L 0 15.832031 C 0 15.925781 0.1875 16 0.417969 16 L 49.582031 16 C 49.8125 16 50 15.925781 50 15.832031 L 50 11.5 C 50 11.40625 49.8125 11.332031 49.582031 11.332031 Z M 49.582031 11.332031 "/>\n<path style=" stroke:none;fill-rule:nonzero;fill:rgb(100%,100%,100%);fill-opacity:0.8;" d="M 46.488281 7.121094 L 42.617188 5.121094 C 42.410156 5.011719 42.066406 4.972656 41.761719 5.019531 C 41.453125 5.066406 41.25 5.191406 41.25 5.332031 L 41.25 7 L 8.75 7 L 8.75 5.332031 C 8.75 5.191406 8.546875 5.066406 8.238281 5.019531 C 7.933594 4.972656 7.589844 5.011719 7.382812 5.121094 L 3.511719 7.121094 C 3.394531 7.183594 3.332031 7.257812 3.332031 7.332031 C 3.332031 7.410156 3.394531 7.484375 3.511719 7.546875 L 7.382812 9.546875 C 7.53125 9.625 7.75 9.667969 7.976562 9.667969 C 8.0625 9.667969 8.152344 9.660156 8.238281 9.648438 C 8.546875 9.597656 8.75 9.472656 8.75 9.332031 L 8.75 7.667969 L 41.25 7.667969 L 41.25 9.332031 C 41.25 9.472656 41.453125 9.597656 41.757812 9.648438 C 41.84375 9.660156 41.933594 9.667969 42.023438 9.667969 C 42.246094 9.667969 42.464844 9.625 42.617188 9.546875 L 46.488281 7.546875 C 46.605469 7.484375 46.667969 7.410156 46.667969 7.332031 C 46.667969 7.257812 46.605469 7.183594 46.488281 7.121094 Z M 46.488281 7.121094 "/>\n</g>\n</svg>\n',e}static metersLabelCallback(e){return`${e.toFixed(2)} m`}onKeyDown(e){e.metaKey||e.altKey||e.ctrlKey||"Escape"===e.key&&(this.cancelActiveMeasurement(),e.preventDefault())}cancelActiveMeasurement(){this._activeMeasurement&&(this._activeMeasurement.removeMeasurement(),this._activeMeasurement=void 0,this._viewer.requestRedraw(),this._viewer.domElement.removeEventListener("pointermove",this._handlePointerMove))}}J.defaultLineOptions={distanceToLabelCallback:e=>J.metersLabelCallback(e),lineWidth:.01,color:new e.Color(16746310)}})(),i})()));
3
3
  //# sourceMappingURL=tools.js.map