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

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.20221104",
3
+ "version": "4.0.0-dev.20221107",
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": {
@@ -2,7 +2,7 @@
2
2
  * Copyright 2022 Cognite AS
3
3
  */
4
4
  export { Cognite3DViewer } from './src/public/migration/Cognite3DViewer';
5
- export { Cognite3DModel } from '../cad-model';
5
+ export { CogniteCadModel } from '../cad-model';
6
6
  export { ViewerState, ModelState } from './src/utilities/ViewStateHelper';
7
7
  export * from './src/public/types';
8
8
  import * as THREE from 'three';
@@ -3,12 +3,13 @@
3
3
  */
4
4
  import * as THREE from 'three';
5
5
  import { PointerEventDelegate, SceneRenderedDelegate, DisposedDelegate, BeforeSceneRenderedDelegate } from '../../../../utilities';
6
- import { Cognite3DModel } from '../../../../cad-model';
6
+ import { CogniteCadModel } from '../../../../cad-model';
7
7
  import { PointCloudBudget, CognitePointCloudModel } from '../../../../pointclouds';
8
8
  import { AddImage360Options, AddModelOptions, Cognite3DViewerOptions, Intersection, CadModelBudget } from './types';
9
+ import { CogniteModel } from '../types';
9
10
  import { ViewerState } from '../../utilities/ViewStateHelper';
10
11
  import { CameraManager, CameraChangeDelegate } from '../../../../camera-manager';
11
- import { SupportedModelTypes, CogniteModelBase } from '../../../../model-base';
12
+ import { SupportedModelTypes } from '../../../../model-base';
12
13
  import { Image360Entity } from '../../../../360-images';
13
14
  /**
14
15
  * @example
@@ -83,7 +84,7 @@ export declare class Cognite3DViewer {
83
84
  /**
84
85
  * Gets a list of models currently added to the viewer.
85
86
  */
86
- get models(): CogniteModelBase[];
87
+ get models(): CogniteModel[];
87
88
  constructor(options: Cognite3DViewerOptions);
88
89
  /**
89
90
  * Returns reveal version installed.
@@ -203,7 +204,7 @@ export declare class Cognite3DViewer {
203
204
  * });
204
205
  * ```
205
206
  */
206
- addModel(options: AddModelOptions): Promise<Cognite3DModel | CognitePointCloudModel>;
207
+ addModel(options: AddModelOptions): Promise<CogniteModel>;
207
208
  /**
208
209
  * Add a new CAD 3D model to the viewer.
209
210
  * Call {@link Cognite3DViewer.fitCameraToModel} to see the model after the model has loaded.
@@ -219,7 +220,7 @@ export declare class Cognite3DViewer {
219
220
  * });
220
221
  * ```
221
222
  */
222
- addCadModel(options: AddModelOptions): Promise<Cognite3DModel>;
223
+ addCadModel(options: AddModelOptions): Promise<CogniteCadModel>;
223
224
  /**
224
225
  * Add a new pointcloud 3D model to the viewer.
225
226
  * Call {@link Cognite3DViewer.fitCameraToModel} to see the model after the model has loaded.
@@ -265,7 +266,7 @@ export declare class Cognite3DViewer {
265
266
  * .
266
267
  * @param model
267
268
  */
268
- removeModel(model: CogniteModelBase): void;
269
+ removeModel(model: CogniteModel): void;
269
270
  /**
270
271
  * Use to determine of which type the model is.
271
272
  *
@@ -277,7 +278,7 @@ export declare class Cognite3DViewer {
277
278
  * ```typescript
278
279
  * const viewer = new Cognite3DViewer(...);
279
280
  * const type = await viewer.determineModelType(options.modelId, options.revisionId)
280
- * let model: Cognite3DModel | CognitePointCloudModel
281
+ * let model: CogniteModel
281
282
  * switch (type) {
282
283
  * case 'cad':
283
284
  * model = await viewer.addCadModel(options);
@@ -376,7 +377,7 @@ export declare class Cognite3DViewer {
376
377
  * is used as a fallback.
377
378
  * @param model The model to load camera settings from.
378
379
  */
379
- loadCameraFromModel(model: CogniteModelBase): void;
380
+ loadCameraFromModel(model: CogniteModel): void;
380
381
  /**
381
382
  * Move camera to a place where the 3D model is visible.
382
383
  * It uses the bounding box of the 3D model and calls {@link Cognite3DViewer.fitCameraToBoundingBox}.
@@ -396,7 +397,7 @@ export declare class Cognite3DViewer {
396
397
  * viewer.fitCameraToModel(model, 0);
397
398
  * ```
398
399
  */
399
- fitCameraToModel(model: CogniteModelBase, duration?: number): void;
400
+ fitCameraToModel(model: CogniteModel, duration?: number): void;
400
401
  /**
401
402
  * Move camera to a place where the content of a bounding box is visible to the camera.
402
403
  * @param box The bounding box in world space.
@@ -5,7 +5,7 @@ import { CogniteClient } from '@cognite/sdk';
5
5
  import { CadModelBudget } from '../../../../cad-geometry-loaders';
6
6
  import { PointCloudBudget, PointCloudIntersection } from '../../../../pointclouds';
7
7
  import { CameraManager } from '../../../../camera-manager';
8
- import { GeometryFilter, Cognite3DModel } from '../../../../cad-model';
8
+ import { GeometryFilter, CogniteCadModel } from '../../../../cad-model';
9
9
  import { DataSource } from '../../../../data-source';
10
10
  /**
11
11
  * Callback to monitor loaded requests and progress.
@@ -156,7 +156,7 @@ export declare type CadIntersection = {
156
156
  /**
157
157
  * The model that was intersected.
158
158
  */
159
- model: Cognite3DModel;
159
+ model: CogniteCadModel;
160
160
  /**
161
161
  * Coordinate of the intersection.
162
162
  */
@@ -5,6 +5,8 @@ import * as THREE from 'three';
5
5
  import { LoadingState } from '../../../model-base';
6
6
  import { RenderOptions } from '../../../rendering';
7
7
  import { InternalRevealCadOptions } from '../../../cad-geometry-loaders';
8
+ import { CogniteCadModel } from '../../../cad-model';
9
+ import { CognitePointCloudModel } from '../../../pointclouds';
8
10
  /**
9
11
  * @property logMetrics Might be used to disable usage statistics.
10
12
  * @property nodeAppearanceProvider Style node by tree-index.
@@ -23,6 +25,10 @@ export declare type RevealOptions = {
23
25
  cad?: InternalRevealCadOptions;
24
26
  };
25
27
  };
28
+ /**
29
+ * Type abstraction for CogniteCadModel or CognitePointCloudModel;.
30
+ */
31
+ export declare type CogniteModel = CogniteCadModel | CognitePointCloudModel;
26
32
  /**
27
33
  * Handler for events about data being loaded.
28
34
  */
@@ -2,7 +2,7 @@
2
2
  * Copyright 2022 Cognite AS
3
3
  */
4
4
  export { BoundingBoxClipper } from './src/utilities/BoundingBoxClipper';
5
- export { Cognite3DModel } from './src/wrappers/Cognite3DModel';
5
+ export { CogniteCadModel } from './src/wrappers/CogniteCadModel';
6
6
  export { PickingHandler } from './src/picking/PickingHandler';
7
7
  export { CadNode } from './src/wrappers/CadNode';
8
8
  export { CadModelFactory } from './src/CadModelFactory';
@@ -2,7 +2,7 @@
2
2
  * Copyright 2022 Cognite AS
3
3
  */
4
4
  /**
5
- * Units supported by {@link Cognite3DModel}.
5
+ * Units supported by {@link CogniteCadModel}.
6
6
  */
7
7
  export declare type WellKnownUnit = 'Meters' | 'Centimeters' | 'Millimeters' | 'Micrometers' | 'Kilometers' | 'Feet' | 'Inches' | 'Yards' | 'Miles' | 'Mils' | 'Microinches';
8
8
  export declare type GeometryFilter = {
@@ -3,7 +3,7 @@
3
3
  */
4
4
  import * as THREE from 'three';
5
5
  import { CogniteInternalId } from '@cognite/sdk';
6
- import { SupportedModelTypes, CogniteModelBase } from '../../../model-base';
6
+ import { SupportedModelTypes } from '../../../model-base';
7
7
  import { NumericRange, CameraConfiguration } from '../../../utilities';
8
8
  import { NodeAppearance, NodeCollection, CdfModelNodeCollectionDataProvider } from '../../../cad-styling';
9
9
  import { WellKnownUnit } from '../types';
@@ -12,7 +12,7 @@ import { WellKnownUnit } from '../types';
12
12
  * @noInheritDoc
13
13
  * @module @cognite/reveal
14
14
  */
15
- export declare class Cognite3DModel implements CogniteModelBase, CdfModelNodeCollectionDataProvider {
15
+ export declare class CogniteCadModel implements CdfModelNodeCollectionDataProvider {
16
16
  readonly type: SupportedModelTypes;
17
17
  /**
18
18
  * Returns the unit the coordinates for the model is stored. Returns an empty string
@@ -315,7 +315,7 @@ export declare class Cognite3DModel implements CogniteModelBase, CdfModelNodeCol
315
315
  /**
316
316
  * Maps a list of tree indices to node IDs for use with the Cognite SDK.
317
317
  * This function is useful if you have a list of tree indices, e.g. from
318
- * {@link Cognite3DModel.iterateSubtreeByTreeIndex}, and want to perform
318
+ * {@link CogniteCadModel.iterateSubtreeByTreeIndex}, and want to perform
319
319
  * some operations on these nodes using the SDK.
320
320
  *
321
321
  * @param treeIndices Tree indices to map to node IDs.
@@ -3,5 +3,4 @@
3
3
  */
4
4
  export { IntersectInput, LoadingState } from './src/types';
5
5
  export { SupportedModelTypes } from './src/SupportedModelTypes';
6
- export { CogniteModelBase } from './src/CogniteModelBase';
7
6
  export { MetadataRepository } from './src/MetadataRepository';
@@ -5,7 +5,7 @@ import * as THREE from 'three';
5
5
  import { CameraConfiguration } from '../../utilities';
6
6
  import { WellKnownAsprsPointClassCodes } from './types';
7
7
  import { PointColorType, PointShape, PointSizeType } from '../../rendering';
8
- import { SupportedModelTypes, CogniteModelBase } from '../../model-base';
8
+ import { SupportedModelTypes } from '../../model-base';
9
9
  import { PointCloudObjectMetadata } from '../../data-providers';
10
10
  import { StyledPointCloudObjectCollection, PointCloudObjectCollection, PointCloudAppearance } from '../../pointcloud-styling';
11
11
  /**
@@ -13,7 +13,7 @@ import { StyledPointCloudObjectCollection, PointCloudObjectCollection, PointClou
13
13
  * @noInheritDoc
14
14
  * @module @cognite/reveal
15
15
  */
16
- export declare class CognitePointCloudModel implements CogniteModelBase {
16
+ export declare class CognitePointCloudModel {
17
17
  readonly type: SupportedModelTypes;
18
18
  readonly modelId: number;
19
19
  /**
@@ -1,11 +1,11 @@
1
1
  import { Cognite3DViewerToolBase } from './Cognite3DViewerToolBase';
2
- import { Cognite3DModel } from '../../api';
2
+ import { CogniteCadModel } from '../../api';
3
3
  export declare class ExplodedViewTool extends Cognite3DViewerToolBase {
4
4
  private readonly _cadModel;
5
5
  private _treeBoundingBoxdata;
6
6
  private readonly _rootTreeIndex;
7
7
  get readyPromise(): Promise<void>;
8
- constructor(treeIndex: number, cadModel: Cognite3DModel);
8
+ constructor(treeIndex: number, cadModel: CogniteCadModel);
9
9
  expand(expandRadius: number): Promise<void>;
10
10
  reset(): void;
11
11
  private preloadBoundingBoxData;
@@ -50,6 +50,11 @@ export declare class MeasurementManager {
50
50
  * @param color Color of the measuring line mesh.
51
51
  */
52
52
  updateLineColor(color: THREE.Color): void;
53
+ /**
54
+ * Hide/unhide all measurements
55
+ * @param enable
56
+ */
57
+ visible(enable: boolean): void;
53
58
  /**
54
59
  * Start the measurement.
55
60
  * @param point World position to start measurement operation from.
@@ -46,6 +46,8 @@ export declare class MeasurementTool extends Cognite3DViewerToolBase {
46
46
  private _activeMeasurement;
47
47
  private readonly _htmlOverlay;
48
48
  private _measurementMode;
49
+ private _showMeasurements;
50
+ private _showLabels;
49
51
  private readonly _handleLabelClustering;
50
52
  private readonly _handlePointerClick;
51
53
  private readonly _handlePointerMove;
@@ -159,6 +161,11 @@ export declare class MeasurementTool extends Cognite3DViewerToolBase {
159
161
  * @returns Array of Measurements containing Id, start point, end point & measured distance.
160
162
  */
161
163
  getAllMeasurements(): Measurement[];
164
+ /**
165
+ * Hide/unhide all measurements
166
+ * @param enable
167
+ */
168
+ visible(enable: boolean): void;
162
169
  /**
163
170
  * Dispose Measurement Tool.
164
171
  */
@@ -1,7 +1,7 @@
1
1
  /*!
2
2
  * Copyright 2021 Cognite AS
3
3
  */
4
- import { Cognite3DModel } from '../../../api';
4
+ import { CogniteCadModel } from '../../../api';
5
5
  import { NodeAppearance, NodeCollection } from '../../../cad-styling';
6
6
  /**
7
7
  * Timeline Key Frames contains parameters to access Nodes, Styles for the Timeline
@@ -10,7 +10,7 @@ export declare class Keyframe {
10
10
  private readonly _date;
11
11
  private readonly _model;
12
12
  private readonly _nodeCollectionAndAppearance;
13
- constructor(model: Cognite3DModel, date: Date);
13
+ constructor(model: CogniteCadModel, date: Date);
14
14
  /**
15
15
  * Get date of the Keyframe
16
16
  * @returns date
@@ -4,7 +4,7 @@
4
4
  import { Cognite3DViewerToolBase } from '../Cognite3DViewerToolBase';
5
5
  import { Keyframe } from './Keyframe';
6
6
  import { TimelineDateUpdateDelegate } from './types';
7
- import { Cognite3DModel } from '../../../api';
7
+ import { CogniteCadModel } from '../../../api';
8
8
  /**
9
9
  * Tool to applying styles to nodes based on date to play them over in Timeline
10
10
  */
@@ -13,7 +13,7 @@ export declare class TimelineTool extends Cognite3DViewerToolBase {
13
13
  private readonly _keyframes;
14
14
  private _playback;
15
15
  private readonly _events;
16
- constructor(cadModel: Cognite3DModel);
16
+ constructor(cadModel: CogniteCadModel);
17
17
  /**
18
18
  * Subscribe to the Date changed event
19
19
  * @param event `dateChanged` event
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:()=>A,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 y=require("lodash/range");var w=s.n(y);class C{constructor(e,t){this._removedElements=new Set,this._dimensions=t,this._cells=w()(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.20221104",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 A 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 O=require("lodash/cloneDeep");var B=s.n(O);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)}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._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}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._htmlOverlay.visible(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()))}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 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})()));
3
3
  //# sourceMappingURL=tools.js.map