@cognite/reveal 4.0.0-dev.20221109 → 4.0.0-dev.20221110
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/{718928cf96001a1ab41b.worker.js.LICENSE.txt → d08137c701d843ea90a7.worker.js.LICENSE.txt} +0 -0
- package/extensions/datasource.js.map +1 -1
- package/index.js +1 -1
- package/index.js.map +1 -1
- package/package.json +1 -1
- package/packages/api/src/public/migration/Cognite3DViewer.d.ts +5 -2
- package/packages/tools/src/HtmlOverlay/HtmlOverlayTool.d.ts +1 -1
- package/packages/utilities/src/worldToViewport.d.ts +2 -2
- package/tools.js +1 -1
- package/tools.js.map +1 -1
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@cognite/reveal",
|
|
3
|
-
"version": "4.0.0-dev.
|
|
3
|
+
"version": "4.0.0-dev.20221110",
|
|
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": {
|
|
@@ -24,7 +24,10 @@ import { Image360Entity } from '../../../../360-images';
|
|
|
24
24
|
export declare class Cognite3DViewer {
|
|
25
25
|
private readonly _domElementResizeObserver;
|
|
26
26
|
private readonly _image360ApiHelper;
|
|
27
|
-
|
|
27
|
+
/**
|
|
28
|
+
* Returns the rendering canvas, the DOM element where the renderer draws its output.
|
|
29
|
+
*/
|
|
30
|
+
get canvas(): HTMLCanvasElement;
|
|
28
31
|
/**
|
|
29
32
|
* The DOM element the viewer will insert its rendering canvas into.
|
|
30
33
|
* The DOM element can be specified in the options when the viewer is created.
|
|
@@ -35,7 +38,7 @@ export declare class Cognite3DViewer {
|
|
|
35
38
|
/**
|
|
36
39
|
* Returns the renderer used to produce images from 3D geometry.
|
|
37
40
|
*/
|
|
38
|
-
get renderer()
|
|
41
|
+
private get renderer();
|
|
39
42
|
private readonly _cdfSdkClient;
|
|
40
43
|
private readonly _dataSource;
|
|
41
44
|
private readonly _sceneHandler;
|
|
@@ -107,7 +107,7 @@ export declare class HtmlOverlayTool extends Cognite3DViewerToolBase {
|
|
|
107
107
|
private readonly scheduleUpdate;
|
|
108
108
|
private get viewerDomElement();
|
|
109
109
|
private get viewerCamera();
|
|
110
|
-
private get
|
|
110
|
+
private get viewerCanvas();
|
|
111
111
|
constructor(viewer: Cognite3DViewer, options?: HtmlOverlayToolOptions);
|
|
112
112
|
/**
|
|
113
113
|
* Returns all added HTML elements along with their 3D positions.
|
|
@@ -20,14 +20,14 @@ export declare function worldToNormalizedViewportCoordinates(camera: THREE.Persp
|
|
|
20
20
|
* coordinates (0,0 being the top left of the canvas). Z is
|
|
21
21
|
* in range [-1, 1] if the coordinate
|
|
22
22
|
* is inside the camera near and far planes.
|
|
23
|
-
* @param
|
|
23
|
+
* @param canvas Renderer canvas used to render the "world"
|
|
24
24
|
* @param camera Camera used to project point from 3D to NDC coordinates
|
|
25
25
|
* @param position3D World position in 3D
|
|
26
26
|
* @param out Optionally pre-allocated THREE.Vector3
|
|
27
27
|
* @returns Relative screen coordinates in X, Y and Z in range [-1, 1] if point
|
|
28
28
|
* is within near/far of camera.
|
|
29
29
|
*/
|
|
30
|
-
export declare function worldToViewportCoordinates(
|
|
30
|
+
export declare function worldToViewportCoordinates(canvas: HTMLCanvasElement, camera: THREE.PerspectiveCamera, position3D: THREE.Vector3, out?: THREE.Vector3): THREE.Vector3;
|
|
31
31
|
/**
|
|
32
32
|
* Converts a pixel coordinate to normalized device coordinate (in range [-1, 1])
|
|
33
33
|
*/
|
package/tools.js
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
/*! For license information please see tools.js.LICENSE.txt */
|
|
2
|
-
!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define([],t):"object"==typeof exports?exports["@cognite/reveal"]=t():e["@cognite/reveal"]=t()}("undefined"!=typeof self?self:this,(()=>(()=>{"use strict";var e={430:(e,t,s)=>{s.d(t,{Z:()=>i});const i="precision highp float;\n#define GLSLIFY 1\n\nuniform sampler2D tex;\n\nin vec2 vUv;\n\nout vec4 color;\n\nvoid main()\n{\n color = texture(tex, vUv); \n}\n"},479:(e,t,s)=>{s.d(t,{Z:()=>i});const i="#define GLSLIFY 1\nuniform mat4 modelMatrix;\nuniform vec2 scale;\nuniform vec2 offset;\n\nin vec3 position;\nin vec2 uv;\n\nout vec2 vUv;\n\nconst mat4 unitOrthographicProjection = mat4(1., 0., 0., 0., 0., 1., 0., 0., 0., 0., -1., 0., 0., 0., 0., 1.);\n\nvoid main() {\n vUv = uv;\n\n vec4 clipSpace = unitOrthographicProjection * modelMatrix * vec4(position, 1.0);\n\n clipSpace.xy *= scale.xy;\n\n clipSpace.xy += vec2(-1., -1.) + offset;\n\n gl_Position = clipSpace;\n}\n"}},t={};function s(i){var n=t[i];if(void 0!==n)return n.exports;var o=t[i]={exports:{}};return e[i](o,o.exports,s),o.exports}s.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return s.d(t,{a:t}),t},s.d=(e,t)=>{for(var i in t)s.o(t,i)&&!s.o(e,i)&&Object.defineProperty(e,i,{enumerable:!0,get:t[i]})},s.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),s.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),s.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})};var i={};return(()=>{s.r(i),s.d(i,{AxisViewTool:()=>W,Cognite3DViewerToolBase:()=>g,Corner:()=>G,DebugCameraTool:()=>O,ExplodedViewTool:()=>V,HtmlOverlayTool:()=>D,Keyframe:()=>q,MeasurementTool:()=>J,TimelineTool:()=>K});const e=require("three");class t{static color(e){const s=t._colors.get(e);if(void 0!==s)return s;const i=t.generateRandomColor();return t._colors.set(e,i),i}static colorRGB(e){const s=t.color(e);return[Math.floor(255*s.r),Math.floor(255*s.g),Math.floor(255*s.b)]}static colorCSS(e){const[s,i,n]=t.colorRGB(e);return`rgb(${s}, ${i}, ${n})`}static generateRandomColor(){const t=Math.random(),s=.4+.6*Math.random(),i=.3+.4*Math.random();return(new e.Color).setHSL(t,s,i)}}t._colors=new Map;class n{constructor(){this._listeners=[]}subscribe(e){this._listeners.push(e)}unsubscribe(e){const t=this._listeners.indexOf(e);-1!==t&&this._listeners.splice(t,1)}unsubscribeAll(){this._listeners.splice(0)}fire(...e){this._listeners.forEach((t=>t(...e)))}}function o(e,t){const s=t.getBoundingClientRect();if(e instanceof MouseEvent)return{offsetX:e.clientX-s.left,offsetY:e.clientY-s.top};if(e.changedTouches.length>0){const t=e.changedTouches[0];return{offsetX:t.clientX-s.left,offsetY:t.clientY-s.top}}return{offsetX:-1,offsetY:-1}}const r=require("lodash/debounce");var a=s.n(r);function l(e,t){throw new Error(t||"Unexpected object: "+e)}class d{constructor(e){this._events={click:new n,hover:new n},this.onHoverCallback=a()((e=>{this._events.hover.fire(o(e,this.domElement))}),100),this.domElement=e,this.setupEventListeners()}on(e,t){switch(e){case"click":this._events.click.subscribe(t);break;case"hover":this._events.hover.subscribe(t);break;default:l(e)}}off(e,t){switch(e){case"click":this._events.click.unsubscribe(t);break;case"hover":this._events.hover.unsubscribe(t);break;default:l(e)}}dispose(){!function(e){for(const t of Object.keys(e))e[t].unsubscribeAll()}(this._events)}setupEventListeners(){const{domElement:t}=this;let s=!1,i=0,n=!1;const r=new e.Vector2,a=e=>{this.handleClickEvent(e,r,s,n,i),s=!1,n=!1,t.removeEventListener("mouseup",a),t.removeEventListener("touchend",a),t.addEventListener("mousemove",this.onHoverCallback)},l=e=>{s=!0,n=!0,i=e.timeStamp;const{offsetX:l,offsetY:d}=o(e,t);r.set(l,d),t.addEventListener("mouseup",a),t.addEventListener("touchend",a),t.removeEventListener("mousemove",this.onHoverCallback)};t.addEventListener("mousedown",l),t.addEventListener("touchstart",l),t.addEventListener("mousemove",this.onHoverCallback)}isProperClick(e,t,s,i,n){const{offsetX:r,offsetY:a}=o(e,this.domElement),l=e.timeStamp-n,c=Math.abs(r-t.x)+Math.abs(a-t.y)>d.maxMoveDistance;return s&&i&&l<d.maxClickDuration&&!c}handleClickEvent(e,t,s,i,n){if(this.isProperClick(e,t,s,i,n)){const t={...o(e,this.domElement),button:e instanceof MouseEvent?e.button:void 0};this._events.click.fire(t)}}}d.maxMoveDistance=8,d.maxClickDuration=250,Math.log(2),require("assert"),new e.BufferGeometry;class c extends e.Group{constructor(){super(...arguments),this._isDisposed=!1,this._referenceCount=0}reference(){this.ensureNotDisposed(),this._referenceCount++}dereference(){if(this.ensureNotDisposed(),0===this._referenceCount)throw new Error("No references");0==--this._referenceCount&&this.dispose()}dispose(){this.ensureNotDisposed(),this._isDisposed=!0;for(const e of this.children)e instanceof THREE.Mesh&&void 0!==e.geometry&&(e.geometry.dispose(),e.geometry=emptyGeometry),e instanceof THREE.BufferGeometry&&e.dispose();this.clear()}ensureNotDisposed(){if(this._isDisposed)throw new Error("Already disposed/dereferenced")}}new e.Vector3,new e.Box3;class h extends e.Object3D{constructor(e){super(),this._activeLevel=0,this._levels=[],this.isLOD=!0,this.autoUpdate=!0,this._boundingBox=e.clone(),this.type="BoundingBoxLOD"}setBoundingBox(e){this._boundingBox.copy(e)}addLevel(e,t=0){this._levels.push({object:e,distance:Math.abs(t)}),this._levels.sort(((e,t)=>t.distance-e.distance)),e.visible=!1,this.add(e)}getCurrentLevel(){return this._levels.length>0?this._levels.length-this._activeLevel-1:0}update(e){this.updateCurrentLevel(e)}updateCurrentLevel(e){const t=this._levels,{camPos:s,bounds:i}=updateVars;i.copy(this._boundingBox).applyMatrix4(this.matrixWorld);const n=e instanceof THREE.PerspectiveCamera?e.zoom:1;if(t.length>0){s.setFromMatrixPosition(e.matrixWorld);const o=i.distanceToPoint(s)/n;t[this._activeLevel].object.visible=!1,this._activeLevel=t.findIndex((e=>o>=e.distance)),this._activeLevel=this._activeLevel>=0?this._activeLevel:t.length-1,t[this._activeLevel].object.visible=!0}}}new e.Vector3;class m{constructor(e){this._originalState={},this._renderer=e,this._originalState={}}setScissor(t,s,i,n){const o=this._renderer.getScissor(new e.Vector4);this._originalState={scissorData:o,...this._originalState},this._renderer.setScissor(t,s,i,n)}setScissorTest(e){this._originalState={scissorTest:this._renderer.getScissorTest(),...this._originalState},this._renderer.setScissorTest(e)}setClearColor(t,s){this._originalState={clearColor:this._renderer.getClearColor(new e.Color),clearAlpha:this._renderer.getClearAlpha(),...this._originalState},this._renderer.setClearColor(t,s)}setWebGLState(e,t=m.DefaultWebGLState){var s,i,n,o,r,a,l;if(this._originalState={webGLState:{buffers:(null==e?void 0:e.buffers)?{}:void 0},...this._originalState},null===(s=null==e?void 0:e.buffers)||void 0===s?void 0:s.depth){const s=null===(i=e.buffers.depth)||void 0===i?void 0:i.test,d=null===(n=e.buffers.depth)||void 0===n?void 0:n.mask;this._originalState.webGLState.buffers.depth={test:void 0!==s?null===(r=null===(o=t.buffers)||void 0===o?void 0:o.depth)||void 0===r?void 0:r.test:void 0,mask:void 0!==d?null===(l=null===(a=t.buffers)||void 0===a?void 0:a.depth)||void 0===l?void 0:l.mask:void 0},void 0!==d&&this._renderer.state.buffers.depth.setMask(d),void 0!==s&&this._renderer.state.buffers.depth.setTest(s)}}setSize(t,s){this._originalState={size:this._renderer.getSize(new e.Vector2),...this._originalState},this._renderer.setSize(t,s)}set localClippingEnabled(e){this._originalState={localClippingEnabled:this._renderer.localClippingEnabled,...this._originalState},this._renderer.localClippingEnabled=e}set autoClear(e){this._originalState={autoClear:this._renderer.autoClear,...this._originalState},this._renderer.autoClear=e}set autoClearDepth(e){this._originalState={autoClearDepth:this._renderer.autoClearDepth,...this._originalState},this._renderer.autoClearDepth=e}setRenderTarget(e){this._originalState={renderTarget:this._renderer.getRenderTarget(),...this._originalState},this._renderer.setRenderTarget(e)}resetState(){var e,t,s,i;if(void 0!==this._originalState.autoClear&&(this._renderer.autoClear=this._originalState.autoClear),void 0!==this._originalState.autoClearDepth&&(this._renderer.autoClearDepth=this._originalState.autoClearDepth),void 0!==this._originalState.clearColor&&this._renderer.setClearColor(this._originalState.clearColor,this._originalState.clearAlpha),void 0!==this._originalState.localClippingEnabled&&(this._renderer.localClippingEnabled=this._originalState.localClippingEnabled),void 0!==this._originalState.size&&this._renderer.setSize(this._originalState.size.width,this._originalState.size.height),void 0!==this._originalState.renderTarget&&this._renderer.setRenderTarget(this._originalState.renderTarget),void 0!==this._originalState.scissorData&&this._renderer.setScissor(this._originalState.scissorData),void 0!==this._originalState.scissorTest&&this._renderer.setScissorTest(this._originalState.scissorTest),void 0!==this._originalState.webGLState&&(this._renderer.state.reset(),null===(t=null===(e=this._originalState.webGLState)||void 0===e?void 0:e.buffers)||void 0===t?void 0:t.depth)){const e=null===(s=this._originalState.webGLState.buffers.depth)||void 0===s?void 0:s.test,t=null===(i=this._originalState.webGLState.buffers.depth)||void 0===i?void 0:i.mask;void 0!==t&&this._renderer.state.buffers.depth.setMask(t),void 0!==e&&this._renderer.state.buffers.depth.setTest(e)}this._originalState={}}}m.DefaultWebGLState={buffers:{depth:{mask:!0,test:!0}}};class u{constructor(e){this._value=e,this._lastAccessTime=Date.now()}get value(){return this.touch(),this._value}get lastAccessTime(){return this._lastAccessTime}touch(){this._lastAccessTime=Date.now()}}class p{constructor(e=50,t,s=10){this._data=new Map,this._maxElementsInCache=e,this._defaultCleanupCount=Math.max(s,1),this._removeCallback=t}has(e){return this._data.has(e)}forceInsert(e,t){this.isFull()&&this.cleanCache(this._defaultCleanupCount),this.insert(e,t)}insert(e,t){if(this._data.size<this._maxElementsInCache)this._data.set(e,new u(t));else if(this._maxElementsInCache>0)throw new Error("Cache full, please clean Cache and retry adding data")}remove(e){if(void 0!==this._removeCallback){const t=this._data.get(e);void 0!==t&&this._removeCallback(t.value)}this._data.delete(e)}get(e){const t=this._data.get(e);if(void 0!==t)return t.value;throw new Error(`Cache element ${e} does not exist`)}isFull(){return this._data.size>=this._maxElementsInCache}cleanCache(e){const t=Array.from(this._data.entries());t.sort(((e,t)=>t[1].lastAccessTime-e[1].lastAccessTime));for(let s=0;s<e;s++){const e=t.pop();if(void 0===e)return;this.remove(e[0])}}resize(e){this._maxElementsInCache=e,this._defaultCleanupCount=Math.max(e*p.CLEANUP_COUNT_TO_CAPACITY_RATIO,1),this.isFull()&&this.cleanCache(this._data.size-this._maxElementsInCache)}clear(){if(void 0!==this._removeCallback)for(const e of this._data.values())this._removeCallback(e.value);this._data.clear()}}p.CLEANUP_COUNT_TO_CAPACITY_RATIO=.2,require("lodash/chunk"),require("lodash/map");const _={renderSize:new e.Vector2,position:new e.Vector3};var v,f;Symbol.toStringTag,require("lodash/remove"),function(){if("undefined"!=typeof self)return self;if("undefined"!=typeof window)return window;if(void 0!==s.g)return s.g;throw new Error("unable to locate global object")}(),(f=v||(v={}))[f.Box=0]="Box",f[f.Cylinder=1]="Cylinder",f[f.Composite=2]="Composite";class g{constructor(){this._disposedEvent=new n,this._disposed=!1}on(e,t){"disposed"===e?this._disposedEvent.subscribe(t):l(e)}off(e,t){"disposed"===e?this._disposedEvent.unsubscribe(t):l(e)}dispose(){if(this._disposed)throw new Error("Already disposed");this._disposed=!0,this._disposedEvent.fire(),this._disposedEvent.unsubscribeAll()}ensureNotDisposed(){if(this._disposed)throw new Error("The tool has been disposed")}}const w=require("lodash/range");var y=s.n(w);class C{constructor(e,t){this._removedElements=new Set,this._dimensions=t,this._cells=y()(0,t[0]*t[1]).map((()=>new Array)),this._bounds=e}insert(e,t){if(!this._bounds.intersectsBox(e))throw new Error("Element to be added must be partially inside grid");if(this._removedElements.has(t))throw new Error("Re-adding previously taken elements is currently not supported");for(const s of this.cellsIntersecting(e))s.push({bounds:e,element:t})}*overlappingElements(e){if(!this._bounds.intersectsBox(e))return;const t=new Set;for(const s of this.cellsIntersecting(e))for(const i of s)t.has(i.element)||this._removedElements.has(i.element)||!e.intersectsBox(i.bounds)||(t.add(i.element),yield i.element)}*removeOverlappingElements(e){if(this._bounds.intersectsBox(e))for(const t of this.cellsIntersecting(e))for(let s=0;s<t.length;s++){const i=t[s];!this._removedElements.has(i.element)&&e.intersectsBox(i.bounds)&&(this._removedElements.add(i.element),yield i.element)}}*cellsIntersecting(t){const{min:s,max:i}=this._bounds,n=this._dimensions[0],o=this._dimensions[1],r=(t.min.x-s.x)/(i.x-s.x),a=(t.max.x-s.x)/(i.x-s.x),l=(t.min.y-s.y)/(i.y-s.y),d=(t.max.y-s.y)/(i.y-s.y),c=e.MathUtils.clamp,h=c(Math.floor(n*r),0,n-1),m=c(Math.floor(n*a),0,n-1),u=c(Math.floor(o*l),0,o-1),p=c(Math.floor(o*d),0,o-1);for(let e=u;e<=p;++e)for(let t=h;t<=m;++t)yield this._cells[e*n+t]}}const b=require("mixpanel-browser");var x=s.n(b);const M=require("loglevel"),E=require("lodash/throttle");var L=s.n(E);const{VERSION:S,MIXPANEL_TOKEN:k}={VERSION:"4.0.0-dev.20221109",MIXPANEL_TOKEN:"8c900bdfe458e32b768450c20750853d",IS_DEVELOPMENT_MODE:!1};class T{constructor(e,t,s){x().init(k,{batch_requests:!0,disable_cookie:!0,disable_persistence:!0,ip:!1,property_blacklist:["$city","$region","mp_country_code","$geo_source","$timezone","mp_lib","$lib_version","$device_id","$user_id","$current_url","$screen_width","$screen_height","$referrer","$referring_domain","$initial_referrer","$initial_referring_domain"]}),x().reset(),x().identify("reveal-single-user"),this._sessionProps={VERSION:S,project:"unknown",application:"unknown",sessionId:"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,(function(e){const t=16*Math.random()|0;return("x"==e?t:3&t|8).toString(16)}))},e&&(this._sessionProps.project=e),t&&(this._sessionProps.application=t),this.innerTrackEvent("init",s)}static init(e,t,s,i){if(void 0===globalThis.revealMetricsLogger&&e){const e=new T(t,s,i);globalThis.revealMetricsLogger={metricsLogger:e}}}innerTrackEvent(e,t){const s={...this._sessionProps,...t};x().track(e,s)}static trackEvent(e,t){globalThis.revealMetricsLogger&&globalThis.revealMetricsLogger.metricsLogger.innerTrackEvent(e,t)}static trackCreateTool(e){T.trackEvent("toolCreated",{toolName:e})}static trackLoadModel(e,t,s){T.trackEvent("loadModel",{...e,modelIdentifier:t,modelVersion:s})}static trackCadModelStyled(e,t){T.trackEvent("cadModelStyleAssigned",{nodeCollectionClassToken:e,style:t})}static trackCadNodeTransformOverriddenImpl(e,t){const{zeroVector:s,oneVector:i,identityRotation:n,translation:o,scale:r,rotation:a}=T.trackCadNodeTransformOverriddenVars;t.decompose(o,a,r);const l=Math.abs(a.angleTo(n))>1e-5,d=o.distanceToSquared(s)>1e-5,c=r.distanceToSquared(i)>1e-5;T.trackEvent("cadNodeTransformOverridden",{nodeCount:e,hasTranslation:d,hasRotation:l,hasScale:c})}static trackCameraNavigationImpl(e){T.trackEvent("cameraNavigated",e)}static trackError(e,t){M.error(e),void 0!==e?this.trackEvent("error",{message:e.message||e,name:e.name,stack:e.stack,...t}):this.trackEvent("error",{name:"unknown",...t})}}T.TrackCameraNavigationThrottleDelay=5e3,T.TrackCadNodeTransformOverriddenThrottleDelay=1e3,T.trackCadNodeTransformOverriddenVars={zeroVector:new e.Vector3(0,0,0),oneVector:new e.Vector3(1,1,1),identityRotation:(new e.Quaternion).identity(),translation:new e.Vector3,scale:new e.Vector3,rotation:new e.Quaternion},T.trackCadNodeTransformOverridden=L()(((e,t)=>T.trackCadNodeTransformOverriddenImpl(e,t)),T.TrackCadNodeTransformOverriddenThrottleDelay),T.trackCameraNavigation=L()((e=>T.trackCameraNavigationImpl(e)),T.TrackCameraNavigationThrottleDelay);class D extends g{constructor(t,s){super(),this._htmlOverlays=new Map,this._compositeOverlays=[],this._preallocatedVariables={camPos:new e.Vector3,camNormal:new e.Vector3,point:new e.Vector3,nearPlane:new e.Plane,farPlane:new e.Plane,position2D:new e.Vector2},this._onSceneRenderedHandler=this.onSceneRendered.bind(this),this._onViewerDisposedHandler=this.onViewerDisposed.bind(this),this._options=null!=s?s:{},this._viewer=t,this._viewer.on("sceneRendered",this._onSceneRenderedHandler),this._viewer.on("disposed",this._onViewerDisposedHandler),this.scheduleUpdate=a()((()=>this.forceUpdate()),20),this._visible=!0,T.trackCreateTool("HtmlOverlayTool")}get viewerDomElement(){return this._viewer.domElement}get viewerCamera(){return this._viewer.cameraManager.getCamera()}get viewerRenderer(){return this._viewer.renderer}get elements(){return Array.from(this._htmlOverlays.entries()).map((([e,t])=>({element:e,position3D:t.position3D})))}dispose(){this._viewer.off("sceneRendered",this._onSceneRenderedHandler),this._viewer.off("disposed",this._onViewerDisposedHandler),this.clear(),super.dispose()}add(t,s,i={}){if(this.ensureNotDisposed(),this.viewerDomElement.contains(t))throw new Error("Element is already attached to viewer");t.style.visibility="hidden",this.viewerDomElement.appendChild(t);const n=getComputedStyle(t);if("absolute"!==n.position)throw this.viewerDomElement.removeChild(t),new Error(`htmlElement style must have a position of absolute. but was '${n.position}'`);const o={position3D:s,options:i,state:{position2D:new e.Vector2,width:-1,height:-1,visible:!0}};this._htmlOverlays.set(t,o),this.scheduleUpdate()}remove(e){if(this.ensureNotDisposed(),!this.viewerDomElement.contains(e)||!this._htmlOverlays.has(e))throw new Error("Element is not attached to viewer");this.viewerDomElement.removeChild(e),this._htmlOverlays.delete(e)}clear(){const e=Array.from(this._htmlOverlays.keys());for(const t of e)this.remove(t);this.forceUpdate()}visible(e){const t=!0===e?"visible":"hidden";this._visible=e,this._htmlOverlays.forEach(((e,s)=>{s.style.visibility=t})),this._compositeOverlays.forEach((e=>{e.style.visibility=t})),this.forceUpdate()}forceUpdate(){if(!this._visible)return;if(this.ensureNotDisposed(),this.cleanupClusterElements(),0===this._htmlOverlays.size)return;this.updateNewElementSizes();const t=this.viewerCamera,s=this.viewerRenderer,{camPos:i,camNormal:n,point:o,nearPlane:r,farPlane:a,position2D:l}=this._preallocatedVariables;t.getWorldPosition(i),t.getWorldDirection(n),o.copy(i).addScaledVector(n,t.near),r.setFromNormalAndCoplanarPoint(n,o),o.copy(i).addScaledVector(n,t.far),a.setFromNormalAndCoplanarPoint(n,o),this._htmlOverlays.forEach(((n,o)=>{const{position3D:d,options:{positionUpdatedCallback:c,userData:h},state:m}=n,u=r.distanceToPoint(d)>=0&&a.distanceToPoint(d)<=0,{x:p,y:v}=function(t,s,i,n=new e.Vector3){!function(t,s,i=new e.Vector3){const{position:n}=_;n.copy(s),n.project(t);const o=(n.x+1)/2,r=(1-n.y)/2;i.set(o,r,n.z)}(s,i,n);const{renderSize:o}=_;t.getSize(o);const r=t.domElement,{width:a,height:l}=r.getBoundingClientRect();return n.x=Math.round(n.x*a),n.y=Math.round(n.y*l),n}(s,t,d);if(u?(m.position2D.set(p,v),m.visible=!0):m.visible=!1,c){l.set(p,v);const e=i.distanceTo(d);c(o,l,d,e,h)}})),this.clusterElements(),this.commitDOMChanges()}updateNewElementSizes(){this._htmlOverlays.forEach(((e,t)=>{if(-1===e.state.width){const s=t.getBoundingClientRect();e.state.width=s.width,e.state.height=s.height}}))}commitDOMChanges(){const e=this.viewerRenderer.domElement,t=e.offsetLeft,s=e.offsetTop;this._htmlOverlays.forEach(((e,i)=>{const{state:n}=e;i.style.left=`${n.position2D.x+t}px`,i.style.top=`${n.position2D.y+s}px`,n.visible&&"visible"!==i.style.visibility?function(e){e.style.visibility="visible",e.style.opacity="1",e.style.transition="opacity 0.2s linear"}(i):n.visible||"hidden"===i.style.visibility||function(e){e.style.visibility="hidden",e.style.opacity="0",e.style.transition="visibility 0s 0.2s, opacity 0.2s linear"}(i)})),this._compositeOverlays.forEach((e=>{this.viewerDomElement.appendChild(e)}))}clusterElements(){const e=this._options.clusteringOptions;void 0!==e&&("overlapInScreenSpace"===e.mode?this.clusterByOverlapInScreenSpace(e.createClusterElementCallback):l(e.mode,`Unsupported clustering mode: '${e.mode}`))}cleanupClusterElements(){this._compositeOverlays.forEach((e=>{this.viewerDomElement.removeChild(e)})),this._compositeOverlays.splice(0)}clusterByOverlapInScreenSpace(t){const s=(i=this.viewerRenderer.domElement.getBoundingClientRect(),(n=null!=n?n:new e.Box2).min.set(i.left,i.top),n.max.set(i.right,i.bottom),n);var i,n;const o=s.getSize(new e.Vector2);s.set(new e.Vector2(0,0),o);const r=new C(s,[10,10]);for(const[e,t]of this._htmlOverlays.entries()){const{state:i}=t,n=P(t);i.visible&&n.intersectsBox(s)&&r.insert(n,{htmlElement:e,...t})}const a=new e.Box2,l=new e.Vector2;for(const e of this._htmlOverlays.values()){const{state:i}=e;if(P(e,a),!i.visible||!a.intersectsBox(s))continue;const n=Array.from(r.removeOverlappingElements(a));if(n.length>1){const e=n.reduce(((e,t)=>e.add(t.state.position2D)),l.set(0,0)).divideScalar(n.length),s=t(n.map((e=>({htmlElement:e.htmlElement,userData:e.options.userData}))));n.forEach((e=>e.state.visible=!1)),this.addComposite(s,e)}}}addComposite(e,t){const s=this.viewerRenderer.domElement;e.style.visibility="visible",e.style.left=`${t.x+s.offsetLeft}px`,e.style.top=`${t.y+s.offsetTop}px`,this._compositeOverlays.push(e)}onSceneRendered(){this.forceUpdate()}onViewerDisposed(){this.dispose()}}function P(t,s){const{state:i}=t;return(s=null!=s?s:new e.Box2).min.set(i.position2D.x,i.position2D.y),s.max.set(i.position2D.x+i.width,i.position2D.y+i.height),s}class V extends g{constructor(e,t){super(),this._cadModel=t,this._rootTreeIndex=e,this.preloadBoundingBoxData(t,e),T.trackCreateTool("ExplodedViewTool")}get readyPromise(){return this._treeBoundingBoxdata.then()}async expand(e){const t=await this._treeBoundingBoxdata;await Promise.all(t.map((({treeIndex:t,direction:s,transform:i})=>0===e?(this._cadModel.resetNodeTransformByTreeIndex(t),Promise.resolve(0)):(i.setPosition(s.x*e,s.y*e,s.z*e),this._cadModel.setNodeTransformByTreeIndex(t,i)))))}reset(){this._cadModel.resetNodeTransformByTreeIndex(this._rootTreeIndex,!0)}preloadBoundingBoxData(t,s){const i=t.getBoundingBoxByTreeIndex(s).then((t=>t.getCenter(new e.Vector3))),n=t.getSubtreeTreeIndices(s).then((e=>{if(e.count>1e3)throw new Error(`Subtree size of ${e.count} is too large (max size = 1000)`);return e})).then((s=>Promise.all(s.toArray().map((async s=>({subTreeIndex:s,subTreeIndexBoundingBoxCenter:(await t.getBoundingBoxByTreeIndex(s)).getCenter(new e.Vector3)}))))));this._treeBoundingBoxdata=Promise.all([i,n]).then((t=>{const[s,i]=t;return i.map((({subTreeIndex:t,subTreeIndexBoundingBoxCenter:i})=>({treeIndex:t,direction:(new e.Vector3).subVectors(i,s),transform:new e.Matrix4})))})).then((async e=>(await Promise.all(e.map((e=>t.setNodeTransformByTreeIndex(e.treeIndex,e.transform)))),e)))}}class O extends g{constructor(e){super(),this._onViewerDisposedHandler=this.onViewerDisposed.bind(this),this._viewer=e,this._viewer.on("disposed",this._onViewerDisposedHandler)}get viewerCamera(){return this._viewer.cameraManager.getCamera()}dispose(){this._viewer.off("disposed",this._onViewerDisposedHandler),super.dispose()}showCameraHelper(){this.hideCameraHelper(),this._cameraHelper=new e.CameraHelper(this.viewerCamera.clone()),this._viewer.addObject3D(this._cameraHelper)}hideCameraHelper(){void 0!==this._cameraHelper&&(this._viewer.removeObject3D(this._cameraHelper),this._cameraHelper=void 0)}onViewerDisposed(){this.dispose()}}const A=require("lodash/cloneDeep");var B=s.n(A);const I=require("lodash/merge");var R=s.n(I);const N=require("@tweenjs/tween.js");var z=s.n(N);const F=require("glslify");var G,U=s.n(F);!function(e){e[e.TopRight=0]="TopRight",e[e.TopLeft=1]="TopLeft",e[e.BottomLeft=2]="BottomLeft",e[e.BottomRight=3]="BottomRight"}(G||(G={}));const $={ringLabel:"N",labelDelta:Math.PI,fontSize:void 0,fontColor:new e.Color(16711680),tickColor:new e.Color(9737364)},j={label:"",fontSize:void 0,fontColor:new e.Color(3355443),outlineSize:void 0,outlineColor:new e.Color(3355443),faceColor:new e.Color(9737364)},H={size:128,position:{corner:G.BottomRight,padding:new e.Vector2},animationSpeed:200,faces:{xPositiveFace:{...j,label:"Right"},xNegativeFace:{...j,label:"Left"},yPositiveFace:{...j,label:"Up"},yNegativeFace:{...j,label:"Down"},zPositiveFace:{...j,label:"Front"},zNegativeFace:{...j,label:"Back"}},compass:$};class W extends g{constructor(t,s){super(),this._dynamicUpdatePosition=()=>{},this._updateClickDiv=()=>{},this._screenPosition=new e.Vector2,this._boxFaceGeometry=new e.PlaneGeometry(.9,.9,1,1),this._raycaster=new e.Raycaster,this._raycaster.layers.enableAll(),this._viewer=t,this._layoutConfig=R()(B()(H),s),this._axisGroup=new e.Group,this._axisGroup.name="Axis View Tool",this._axisGroup.renderOrder=1,this._interactiveObjects=this.createAxisCross(this._axisGroup),[this._updateClickDiv,this._disposeClickDiv]=this.createClickDiv(t),this.addAxisBoxToViewer(this._axisGroup,this._layoutConfig.position),T.trackCreateTool("AxisViewTool")}dispose(){super.dispose(),this._viewer.removeObject3D(this._axisGroup),this._disposeClickDiv()}createClickDiv(e){if(null===e.domElement.querySelector("canvas"))throw new Error("Could not find canvas");const t=document.createElement("div");return t.style.position="absolute",t.style.height=`${this._layoutConfig.size}px`,t.style.width=`${this._layoutConfig.size}px`,t.style.zIndex="1",t.addEventListener("mousedown",(e=>{e.stopPropagation()})),t.addEventListener("contextmenu",(e=>e.preventDefault())),t.addEventListener("mouseup",(t=>{const s=e.domElement.getBoundingClientRect(),i=t.clientX-s.left,n=t.clientY-s.top;this.handleClick(i,n,s),t.stopPropagation()})),e.domElement.appendChild(t),[()=>{t.style.left=`${this._screenPosition.x}px`,t.style.bottom=`${this._screenPosition.y}px`},()=>{e.domElement.removeChild(t)}]}addAxisBoxToViewer(e,t){const s=this._layoutConfig.size;if(function(e){return void 0!==e.xAbsolute&&void 0!==e.yAbsolute}(t))this._screenPosition.x=t.xAbsolute,this._screenPosition.y=t.yAbsolute;else{switch(t.corner){case G.BottomRight:this._screenPosition.y=t.padding.y,this._dynamicUpdatePosition=()=>{this._screenPosition.x=this._viewer.renderer.domElement.clientWidth-t.padding.x-s};break;case G.TopRight:this._dynamicUpdatePosition=()=>{this._screenPosition.x=this._viewer.renderer.domElement.clientWidth-t.padding.x-s,this._screenPosition.y=this._viewer.renderer.domElement.clientHeight-t.padding.y-s};break;case G.TopLeft:this._screenPosition.x=t.padding.x,this._dynamicUpdatePosition=()=>{this._screenPosition.y=this._viewer.renderer.domElement.clientHeight-t.padding.y-s};break;case G.BottomLeft:this._screenPosition.x=t.padding.x,this._screenPosition.y=t.padding.y;break;default:throw new Error(`Unknown corner position for Axis Cross: Corner = ${t.corner}`)}this._dynamicUpdatePosition()}this._viewer.addObject3D(e)}handleClick(t,s,i){const n=2*(t-this._screenPosition.x)/this._layoutConfig.size-1,o=2*(i.height-s-this._screenPosition.y)/this._layoutConfig.size-1,r=new e.Vector3(n,o,1),a=new e.Vector3(0,0,-1).normalize();this._raycaster.set(r,a);const l=this._raycaster.intersectObjects(this._interactiveObjects);if(!(l.length>0))return!1;const d=l[0].object.position.clone().normalize(),c=l[0].object.userData.upVector.clone();return this.moveCameraTo(d,c),!0}createAxisCross(e){const t=this.createCompass();e.add(t);const s=this.createBoxFaces();return e.add(...s),this.setupTransformOnRender(e),s}setupTransformOnRender(t){t.children[0].onBeforeRender=s=>{this._dynamicUpdatePosition(),t.quaternion.copy(this._viewer.cameraManager.getCamera().quaternion).invert(),t.updateMatrixWorld(),this._updateClickDiv();const i=s.domElement.clientWidth,n=s.domElement.clientHeight,o=new e.Vector2;s.getSize(o);const r=this._layoutConfig.size,a=new e.Vector2(r/i,r/n),l=new e.Vector2(this._screenPosition.x/i*2+r/i,this._screenPosition.y/n*2+r/n);t.traverse((t=>{t instanceof e.Mesh&&(t.material.uniforms.offset.value=l,t.material.uniforms.scale.value=a,t.material.uniformsNeedUpdate=!0)}))}}createBoxFaces(){const t=this._layoutConfig.faces;return[this.createBoxFace(new e.Vector3(1,0,0),t.xPositiveFace),this.createBoxFace(new e.Vector3(-1,0,0),t.xNegativeFace),this.createBoxFace(new e.Vector3(0,1,0),t.yPositiveFace,new e.Vector3(0,0,-1)),this.createBoxFace(new e.Vector3(0,-1,0),t.yNegativeFace,new e.Vector3(0,0,1)),this.createBoxFace(new e.Vector3(0,0,1),t.zPositiveFace),this.createBoxFace(new e.Vector3(0,0,-1),t.zNegativeFace)]}createCompass(){const t=new e.PlaneGeometry(2,2,1,1),i=new e.Mesh(t,new e.RawShaderMaterial({vertexShader:U()(s(479).Z),fragmentShader:U()(s(430).Z),uniforms:{offset:{value:new e.Vector2},scale:{value:new e.Vector2},tex:{value:this.createCompassTexture()}},side:e.DoubleSide,glslVersion:e.GLSL3,depthTest:!1,blending:e.CustomBlending,blendDst:e.OneMinusSrcAlphaFactor,blendSrc:e.SrcAlphaFactor}));i.frustumCulled=!1,i.renderOrder=1;const n=Math.sin(this._layoutConfig.compass.labelDelta),o=Math.cos(this._layoutConfig.compass.labelDelta);return i.position.y=-.45,i.up.copy(new e.Vector3(n,0,o)),i.lookAt(0,0,0),i}createCompassTexture(){var t;const s=this._layoutConfig.compass,i=this._layoutConfig.size,n=document.createElement("canvas");n.width=i,n.height=i;const o=n.getContext("2d"),r=i/2,a=r-r/4,l=i/32,d=i/8;if(o.strokeStyle=s.tickColor.getStyle(),o.lineWidth=i/16,o.setLineDash([l,d]),o.beginPath(),o.arc(r,r,a,0,2*Math.PI),o.stroke(),s.ringLabel&&s.ringLabel.length>0){const e=null!==(t=s.fontSize)&&void 0!==t?t:i/5;o.font=`bold ${e}px Arial`,o.textAlign="center",o.fillStyle=s.fontColor.getStyle(),o.fillText(s.ringLabel,r,r*(1/4)+e/3)}return new e.CanvasTexture(n)}getFaceTexture(t,s){var i,n;const o=s/2,r=document.createElement("canvas");r.width=o,r.height=o;const a=r.getContext("2d");a.fillStyle=t.outlineColor.getStyle(),a.fillRect(0,0,o,o),a.fillStyle=t.faceColor.getStyle();const l=null!==(i=t.outlineSize)&&void 0!==i?i:o/32;if(a.fillRect(l,l,o-2*l,o-2*l),a.fill(),""!==t.label){const e=null!==(n=t.fontSize)&&void 0!==n?n:o/3;a.font=`bold ${e}px Arial`,a.textAlign="center",a.fillStyle=t.fontColor.getStyle(),a.fillText(t.label,o/2,o/2+e/3)}return new e.CanvasTexture(r)}createBoxFace(t,i,n=new e.Vector3(0,1,0)){const o=new e.Mesh(this._boxFaceGeometry,new e.RawShaderMaterial({vertexShader:U()(s(479).Z),fragmentShader:U()(s(430).Z),uniforms:{offset:{value:new e.Vector2},scale:{value:new e.Vector2},tex:{value:this.getFaceTexture(i,this._layoutConfig.size)}},depthTest:!1,glslVersion:e.GLSL3,transparent:!0}));return o.frustumCulled=!1,o.renderOrder=1e3,o.position.copy(t.multiplyScalar(.5*this._boxFaceGeometry.parameters.width)),o.lookAt(t.multiplyScalar(2)),o.userData.upVector=n,o}moveCameraTo(t,s){const i=this._viewer.cameraManager,{position:n,target:o,rotation:r}=i.getCameraState(),a=n.clone().sub(o),l=a.length(),d=a.clone().normalize(),c=Math.acos(d.dot(t)),h={t:0},m=new(z().Tween)(h),u=t.clone(),p=r.clone(),_=(new e.Quaternion).setFromRotationMatrix((new e.Matrix4).makeBasis(s.clone().cross(u),s,u));if(p.angleTo(_)<1e-6)return;const v=new e.Vector3,f=new e.Quaternion;m.to({t:1},this._layoutConfig.animationSpeed).onUpdate((()=>{v.copy(d).multiplyScalar(Math.sin((1-h.t)*c)/Math.sin(c)).add(t.clone().multiplyScalar(Math.sin(h.t*c)/Math.sin(c))),v.multiplyScalar(l),v.add(o),f.slerpQuaternions(p,_,h.t),i.setCameraState({position:v,rotation:f})})).onComplete((()=>{i.setCameraState({position:v,target:o})})).start(z().now()).update(z().now())}}class q{constructor(e,t){this._nodeCollectionAndAppearance=[],this._model=e,this._date=t}getKeyframeDate(){return this._date}activate(){this._nodeCollectionAndAppearance.forEach(((e,t)=>{this._model.assignStyledNodeCollection(e.nodes,e.nodeAppearance)}))}deactivate(){this._nodeCollectionAndAppearance.forEach(((e,t)=>{this._model.unassignStyledNodeCollection(e.nodes)}))}assignStyledNodeCollection(e,t){T.trackCadModelStyled(e.classToken,t);const s=this._nodeCollectionAndAppearance.findIndex((t=>t.nodes===e));-1!==s?this._nodeCollectionAndAppearance[s].nodeAppearance=t:this._nodeCollectionAndAppearance.push({nodes:e,nodeAppearance:t})}unassignStyledNodeCollection(e){const t=this._nodeCollectionAndAppearance.findIndex((t=>t.nodes===e));if(-1===t)throw new Error("Node collection has not been assigned to model");this._nodeCollectionAndAppearance.splice(t,1)}}class K extends g{constructor(e){super(),this._playback=void 0,this._events={dateChanged:new n},this._model=e,this._keyframes=new Array}subscribe(e,t){"dateChanged"===e?this._events.dateChanged.subscribe(t):l(e,`Unsupported event: '${e}'`)}unsubscribe(e,t){"dateChanged"===e?this._events.dateChanged.unsubscribe(t):l(e,`Unsupported event: '${e}'`)}createKeyframe(e){const t=new q(this._model,e);return this._keyframes.push(t),this.sortKeyframesByDates(),t}getKeyframeByDate(e){return this._keyframes.find((t=>t.getKeyframeDate()===e))}removeKeyframe(e){const t=this._keyframes.findIndex((t=>t===e));t>-1&&this._keyframes.splice(t,1)}removeKeyframeByDate(e){const t=this._keyframes.findIndex((t=>t.getKeyframeDate()===e));t>-1&&this._keyframes.splice(t,1)}play(e,t,s){this.stop();const i={dateInMs:e.getTime()},n={dateInMs:t.getTime()},o=new(z().Tween)(i).to(n,s);let r=-1;o.onUpdate((()=>{const s=new Date(i.dateInMs),n=r;for(;r<this._keyframes.length-1&&this._keyframes[r+1].getKeyframeDate().getTime()<=s.getTime();)r++;r!==n&&(-1!==n&&this._keyframes[n].deactivate(),this._keyframes[r].activate()),this._events.dateChanged.fire({date:s,activeKeyframe:this._keyframes[r],startDate:e,endDate:t})})),this._playback=o,o.start()}stop(){void 0!==this._playback&&(this._playback.stop(),this._playback=void 0)}pause(){void 0!==this._playback&&this._playback.isPlaying()&&this._playback.pause()}resume(){void 0!==this._playback&&this._playback.isPaused()&&this._playback.resume()}getAllKeyframes(){return this._keyframes.slice()}dispose(){super.dispose(),this._events.dateChanged.unsubscribeAll()}sortKeyframesByDates(){this._keyframes.length>1&&this._keyframes.sort(((e,t)=>e.getKeyframeDate().getTime()-t.getKeyframeDate().getTime()))}}class Y{constructor(){Y.ensureStylesLoaded()}createLabel(e){const t=document.createElement("div");return t.innerText=e,t.className=Y.stylesId,t}static ensureStylesLoaded(){if(document.getElementById(Y.stylesId))return;const e=document.createElement("style");e.id=Y.stylesId,e.appendChild(document.createTextNode(".reveal-measurement-label {\n\tposition: absolute;\n\n /* Anchor to the center of the element and ignore events */\n transform: translate(-50%, -50%);\n pointer-events: none;\n touch-action: none;\n user-select: none;\n border-radius: 6px;\n\n /* Make it look nice */\n padding: 6px;\n color: #fff;\n background: #232323da;\n border: #ffffff22 solid 1px;\n overflow: hidden;\n white-space: nowrap;\n\n /*Font - fallback to generic font if Inter not available*/\n font-family: 'Inter', sans-serif;\n font-style: normal;\n font-weight: 500;\n}\n")),document.head.appendChild(e)}}Y.stylesId="reveal-measurement-label";const X=require("three-stdlib");class Z{constructor(t,s,i){this._position=new Float32Array(6),this._geometry=new X.LineGeometry,this._adaptiveWidthLineMaterial=new X.LineMaterial({color:s.getHex(),linewidth:t,worldUnits:!0,depthTest:!1}),this._fixedWidthLineMaterial=new X.LineMaterial({color:s.getHex(),linewidth:2,worldUnits:!1,depthTest:!1}),this._meshes=new e.Group,this._meshes.name="Measurement";const n=new e.Mesh(new e.BufferGeometry);n.name="onBeforeRenderTrigger trigger (no geometry)",n.frustumCulled=!1;const o=new e.Vector2;n.onBeforeRender=e=>{const{width:t,height:s}=e.domElement.getBoundingClientRect();o.set(t,s),this._adaptiveWidthLineMaterial.resolution=this._fixedWidthLineMaterial.resolution=o},this._meshes.add(n),this.startLine(i)}dispose(){this._geometry&&this._geometry.dispose(),this._adaptiveWidthLineMaterial.dispose(),this._fixedWidthLineMaterial.dispose(),this._meshes.clear(),this._meshes.removeFromParent()}get meshes(){return this._meshes}updateLine(e){this._position[3]=e.x,this._position[4]=e.y,this._position[5]=e.z,this._geometry.setPositions(this._position)}getMeasuredDistance(){const t=new e.Vector3(this._position[0],this._position[1],this._position[2]);return new e.Vector3(this._position[3],this._position[4],this._position[5]).distanceTo(t)}getMidPointOnLine(){const t=new e.Vector3(this._position[0],this._position[1],this._position[2]);let s=new e.Vector3(this._position[3],this._position[4],this._position[5]).clone().sub(t);const i=s.length();return s=s.normalize().multiplyScalar(.5*i),t.clone().add(s)}updateLineWidth(e){this._adaptiveWidthLineMaterial.linewidth=e}updateLineColor(e){this._fixedWidthLineMaterial.color=this._adaptiveWidthLineMaterial.color=e}startLine(e){this._position[0]=this._position[3]=e.x,this._position[1]=this._position[4]=e.y,this._position[2]=this._position[5]=e.z,this._geometry.setPositions(this._position);const t=new X.Line2(this._geometry,this._adaptiveWidthLineMaterial);t.computeLineDistances(),t.renderOrder=100;const s=new X.Line2(this._geometry,this._fixedWidthLineMaterial);s.computeLineDistances(),s.renderOrder=100,this._meshes.add(t),this._meshes.add(s)}}class Q{constructor(t,s,i,n,o,r){this._measurement={measurementId:0,startPoint:new e.Vector3,endPoint:new e.Vector3,distanceInMeters:0},this._options=n,this._measurementLabel=new Y,this._htmlOverlay=o,this._domElement=t,this._camera=s,this._meshGroup=i,this._startPoint=r,this._distanceToCamera=this._camera.getWorldPosition(new e.Vector3).distanceTo(r),this._line=this.startMeasurement(r),this._meshGroup.add(this._line.meshes)}update(e){const{offsetX:t,offsetY:s}=e;this._line.updateLine(this.pointerTo3DPosition(t,s))}endMeasurement(e){const{distanceToLabelCallback:t}=this._options;this._line.updateLine(e);const s=t(this._line.getMeasuredDistance());this._labelElement=this.addLabel(this._line.getMidPointOnLine(),s),this._measurement={measurementId:Date.now(),startPoint:this._startPoint,endPoint:e,distanceInMeters:this._line.getMeasuredDistance()}}removeMeasurement(){this._meshGroup.remove(this._line.meshes),this._labelElement&&this._htmlOverlay.remove(this._labelElement),this._line&&this._line.dispose()}getMeasurement(){return this._measurement}updateLineWidth(e){this._line.updateLineWidth(e)}updateLineColor(e){this._line.updateLineColor(e)}visible(e){this._meshGroup&&(this._meshGroup.visible=e)}startMeasurement(e){return new Z(this._options.lineWidth,this._options.color,e)}addLabel(e,t){const s=this._measurementLabel.createLabel(t);return this._htmlOverlay.add(s,e),s}pointerTo3DPosition(t,s){const i=new e.Vector3,n=new e.Vector2;n.x=t/this._domElement.clientWidth*2-1,n.y=-s/this._domElement.clientHeight*2+1;const o=new e.Vector3,r=new e.Ray,a=new e.Vector3;return a.setFromMatrixPosition(this._camera.matrixWorld),r.origin.copy(a),o.set(n.x,n.y,.5).unproject(this._camera).sub(r.origin).normalize(),r.direction.copy(o),r.at(this._distanceToCamera,i),i}}class J extends g{constructor(t,s){super(),this._geometryGroup=new e.Group,this._handleLabelClustering=this.createCombineClusterElement.bind(this),this._handlePointerClick=this.onPointerClick.bind(this),this._handlePointerMove=this.onPointerMove.bind(this),this._handleMeasurementCancel=this.onKeyDown.bind(this),this._events={measurementAdded:new n,measurementStarted:new n,measurementEnded:new n,disposed:new n},this._overlayOptions={clusteringOptions:{mode:"overlapInScreenSpace",createClusterElementCallback:this._handleLabelClustering}},this._viewer=t,this._options={...J.defaultLineOptions,...s},this._measurements=[],this._measurementMode=!1,this._showMeasurements=this._showLabels=!0,this._htmlOverlay=new D(this._viewer,this._overlayOptions),this._geometryGroup.name=J.name,this._viewer.addObject3D(this._geometryGroup),T.trackCreateTool("MeasurementTool")}get isInMeasurementMode(){return this._measurementMode}on(e,t){switch(e){case"added":this._events.measurementAdded.subscribe(t);break;case"started":this._events.measurementStarted.subscribe(t);break;case"ended":this._events.measurementEnded.subscribe(t);break;case"disposed":this._events.disposed.subscribe(t);break;default:l(e,`Unsupported event: '${e}'`)}}off(e,t){switch(e){case"added":this._events.measurementAdded.unsubscribe(t);break;case"started":this._events.measurementStarted.unsubscribe(t);break;case"ended":this._events.measurementEnded.unsubscribe(t);break;case"disposed":this._events.disposed.unsubscribe(t);break;default:l(e,`Unsupported event: '${e}'`)}}enterMeasurementMode(){if(this._measurementMode)throw new Error("Measurement mode is active, call exitMeasurementMode()");this._viewer.on("click",this._handlePointerClick),this._events.measurementStarted.fire(),this._measurementMode=!0,this._showMeasurements=!0}exitMeasurementMode(){if(!this._measurementMode)throw new Error("Measurement mode is not active, call enterMeasurementMode()");this.cancelActiveMeasurement(),this._viewer.off("click",this._handlePointerClick),this._events.measurementEnded.fire(),this._measurementMode=!1}removeMeasurement(e){const t=this._measurements.findIndex((t=>t.getMeasurement()===e));if(-1===t)throw new Error("Measurement not found");this._measurements[t].removeMeasurement(),this._measurements.splice(t,1),this._viewer.requestRedraw()}removeAllMeasurements(){this._measurements.forEach((e=>{e.removeMeasurement()})),this._measurements.splice(0),this._viewer.requestRedraw()}setMeasurementLabelsVisible(e){this._showMeasurements&&this._htmlOverlay.visible(e),this._showLabels=e}setLineOptions(e){this._options={...this._options,...e}}updateLineWidth(e,t){const s=this._measurements.findIndex((t=>t.getMeasurement()===e));if(-1===s)throw new Error("Measurement not found");this._measurements[s].updateLineWidth(t),this._viewer.requestRedraw()}updateLineColor(e,t){const s=this._measurements.findIndex((t=>t.getMeasurement()===e));if(-1===s)throw new Error("Measurement not found");this._measurements[s].updateLineColor(t),this._viewer.requestRedraw()}getAllMeasurements(){return this._measurements.map((e=>e.getMeasurement()))}visible(e){this._measurements.forEach((t=>{t.visible(e)}));const t=!1!==e&&this._showLabels;this._htmlOverlay.visible(t),this._showMeasurements=e,this._viewer.requestRedraw()}dispose(){var e;this.removeAllMeasurements(),this.exitMeasurementMode(),null===(e=this._activeMeasurement)||void 0===e||e.removeMeasurement(),this._htmlOverlay.dispose(),this._geometryGroup.clear(),this._viewer.removeObject3D(this._geometryGroup),this._events.measurementAdded.unsubscribeAll(),this._events.measurementStarted.unsubscribeAll(),this._events.measurementEnded.unsubscribeAll(),super.dispose()}async onPointerClick(e){const{offsetX:t,offsetY:s}=e,i=await this._viewer.getIntersectionFromPixel(t,s);if(i){if(this._activeMeasurement){this._activeMeasurement.endMeasurement(i.point);const e=this._activeMeasurement.getMeasurement();this._measurements.push(this._activeMeasurement),this._activeMeasurement=void 0,this._events.measurementAdded.fire(this._measurements[this._measurements.length-1].getMeasurement()),this._viewer.domElement.removeEventListener("pointermove",this._handlePointerMove),window.removeEventListener("keydown",this._handleMeasurementCancel),T.trackEvent("measurementAdded",{measurement:e})}else{const e=this._viewer.cameraManager.getCamera(),t=this._viewer.domElement;this._activeMeasurement=new Q(t,e,this._geometryGroup,this._options,this._htmlOverlay,i.point),this._viewer.domElement.addEventListener("pointermove",this._handlePointerMove),window.addEventListener("keydown",this._handleMeasurementCancel)}this._viewer.requestRedraw()}}onPointerMove(e){this._activeMeasurement&&(this._activeMeasurement.update(e),this._viewer.requestRedraw())}createCombineClusterElement(){const e=document.createElement("div");return e.className=Y.stylesId,e.innerHTML='<?xml version="1.0" encoding="UTF-8"?>\n<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="50px" height="20px" viewBox="0 0 50 20" version="1.1">\n<g id="surface1">\n<path style=" stroke:none;fill-rule:nonzero;fill:rgb(100%,100%,100%);fill-opacity:0.8;" d="M 0.832031 4 C 0.371094 4 0 4.148438 0 4.332031 L 0 10 C 0 10.183594 0.371094 10.332031 0.832031 10.332031 C 1.292969 10.332031 1.667969 10.183594 1.667969 10 L 1.667969 4.332031 C 1.667969 4.148438 1.292969 4 0.832031 4 Z M 0.832031 4 "/>\n<path style=" stroke:none;fill-rule:nonzero;fill:rgb(100%,100%,100%);fill-opacity:0.8;" d="M 49.167969 4 C 48.707031 4 48.332031 4.148438 48.332031 4.332031 L 48.332031 10 C 48.332031 10.183594 48.707031 10.332031 49.167969 10.332031 C 49.628906 10.332031 50 10.183594 50 10 L 50 4.332031 C 50 4.148438 49.628906 4 49.167969 4 Z M 49.167969 4 "/>\n<path style=" stroke:none;fill-rule:nonzero;fill:rgb(100%,100%,100%);fill-opacity:0.8;" d="M 49.582031 11.332031 L 46.25 11.332031 C 46.019531 11.332031 45.835938 11.40625 45.835938 11.5 L 45.835938 12.332031 C 45.835938 12.515625 45.460938 12.667969 45 12.667969 C 44.542969 12.667969 44.167969 12.519531 44.167969 12.332031 L 44.167969 11.5 C 44.167969 11.40625 43.980469 11.332031 43.75 11.332031 L 41.25 11.332031 C 41.019531 11.332031 40.835938 11.40625 40.835938 11.5 L 40.835938 13 C 40.835938 13.183594 40.460938 13.332031 40 13.332031 C 39.542969 13.332031 39.167969 13.183594 39.167969 13 L 39.167969 11.5 C 39.167969 11.40625 38.980469 11.332031 38.75 11.332031 L 36.25 11.332031 C 36.019531 11.332031 35.832031 11.40625 35.832031 11.5 L 35.835938 12.332031 C 35.835938 12.515625 35.460938 12.667969 35 12.667969 C 34.539062 12.667969 34.167969 12.519531 34.167969 12.332031 L 34.167969 11.5 C 34.167969 11.40625 33.980469 11.332031 33.75 11.332031 L 31.25 11.332031 C 31.019531 11.332031 30.832031 11.40625 30.832031 11.5 L 30.835938 13 C 30.835938 13.183594 30.460938 13.332031 30 13.332031 C 29.539062 13.332031 29.167969 13.183594 29.167969 13 L 29.167969 11.5 C 29.167969 11.40625 28.980469 11.332031 28.75 11.332031 L 26.25 11.332031 C 26.019531 11.332031 25.832031 11.40625 25.832031 11.5 L 25.835938 12.332031 C 25.835938 12.515625 25.460938 12.667969 25 12.667969 C 24.539062 12.667969 24.167969 12.519531 24.167969 12.332031 L 24.167969 11.5 C 24.167969 11.40625 23.980469 11.332031 23.75 11.332031 L 21.25 11.332031 C 21.019531 11.332031 20.832031 11.40625 20.832031 11.5 L 20.835938 13 C 20.835938 13.183594 20.460938 13.332031 20 13.332031 C 19.539062 13.332031 19.167969 13.183594 19.167969 13 L 19.167969 11.5 C 19.167969 11.40625 18.980469 11.332031 18.75 11.332031 L 16.25 11.332031 C 16.019531 11.332031 15.832031 11.40625 15.832031 11.5 L 15.835938 12.332031 C 15.835938 12.515625 15.460938 12.667969 15 12.667969 C 14.539062 12.667969 14.167969 12.519531 14.167969 12.332031 L 14.167969 11.5 C 14.167969 11.40625 13.980469 11.332031 13.75 11.332031 L 11.25 11.332031 C 11.019531 11.332031 10.832031 11.40625 10.832031 11.5 L 10.835938 13 C 10.835938 13.183594 10.460938 13.332031 10 13.332031 C 9.539062 13.332031 9.167969 13.183594 9.167969 13 L 9.167969 11.5 C 9.167969 11.40625 8.980469 11.332031 8.75 11.332031 L 6.25 11.332031 C 6.019531 11.332031 5.832031 11.40625 5.832031 11.5 L 5.832031 12.332031 C 5.832031 12.519531 5.460938 12.667969 5 12.667969 C 4.539062 12.667969 4.167969 12.519531 4.167969 12.332031 L 4.167969 11.5 C 4.167969 11.40625 3.980469 11.332031 3.75 11.332031 L 0.417969 11.332031 C 0.1875 11.332031 0 11.40625 0 11.5 L 0 15.832031 C 0 15.925781 0.1875 16 0.417969 16 L 49.582031 16 C 49.8125 16 50 15.925781 50 15.832031 L 50 11.5 C 50 11.40625 49.8125 11.332031 49.582031 11.332031 Z M 49.582031 11.332031 "/>\n<path style=" stroke:none;fill-rule:nonzero;fill:rgb(100%,100%,100%);fill-opacity:0.8;" d="M 46.488281 7.121094 L 42.617188 5.121094 C 42.410156 5.011719 42.066406 4.972656 41.761719 5.019531 C 41.453125 5.066406 41.25 5.191406 41.25 5.332031 L 41.25 7 L 8.75 7 L 8.75 5.332031 C 8.75 5.191406 8.546875 5.066406 8.238281 5.019531 C 7.933594 4.972656 7.589844 5.011719 7.382812 5.121094 L 3.511719 7.121094 C 3.394531 7.183594 3.332031 7.257812 3.332031 7.332031 C 3.332031 7.410156 3.394531 7.484375 3.511719 7.546875 L 7.382812 9.546875 C 7.53125 9.625 7.75 9.667969 7.976562 9.667969 C 8.0625 9.667969 8.152344 9.660156 8.238281 9.648438 C 8.546875 9.597656 8.75 9.472656 8.75 9.332031 L 8.75 7.667969 L 41.25 7.667969 L 41.25 9.332031 C 41.25 9.472656 41.453125 9.597656 41.757812 9.648438 C 41.84375 9.660156 41.933594 9.667969 42.023438 9.667969 C 42.246094 9.667969 42.464844 9.625 42.617188 9.546875 L 46.488281 7.546875 C 46.605469 7.484375 46.667969 7.410156 46.667969 7.332031 C 46.667969 7.257812 46.605469 7.183594 46.488281 7.121094 Z M 46.488281 7.121094 "/>\n</g>\n</svg>\n',e}static metersLabelCallback(e){return`${e.toFixed(2)} m`}onKeyDown(e){e.metaKey||e.altKey||e.ctrlKey||"Escape"===e.key&&(this.cancelActiveMeasurement(),e.preventDefault())}cancelActiveMeasurement(){this._activeMeasurement&&(this._activeMeasurement.removeMeasurement(),this._activeMeasurement=void 0,this._viewer.requestRedraw(),this._viewer.domElement.removeEventListener("pointermove",this._handlePointerMove))}}J.defaultLineOptions={distanceToLabelCallback:e=>J.metersLabelCallback(e),lineWidth:.01,color:new e.Color(16746310)}})(),i})()));
|
|
2
|
+
!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define([],t):"object"==typeof exports?exports["@cognite/reveal"]=t():e["@cognite/reveal"]=t()}("undefined"!=typeof self?self:this,(()=>(()=>{"use strict";var e={430:(e,t,s)=>{s.d(t,{Z:()=>i});const i="precision highp float;\n#define GLSLIFY 1\n\nuniform sampler2D tex;\n\nin vec2 vUv;\n\nout vec4 color;\n\nvoid main()\n{\n color = texture(tex, vUv); \n}\n"},479:(e,t,s)=>{s.d(t,{Z:()=>i});const i="#define GLSLIFY 1\nuniform mat4 modelMatrix;\nuniform vec2 scale;\nuniform vec2 offset;\n\nin vec3 position;\nin vec2 uv;\n\nout vec2 vUv;\n\nconst mat4 unitOrthographicProjection = mat4(1., 0., 0., 0., 0., 1., 0., 0., 0., 0., -1., 0., 0., 0., 0., 1.);\n\nvoid main() {\n vUv = uv;\n\n vec4 clipSpace = unitOrthographicProjection * modelMatrix * vec4(position, 1.0);\n\n clipSpace.xy *= scale.xy;\n\n clipSpace.xy += vec2(-1., -1.) + offset;\n\n gl_Position = clipSpace;\n}\n"}},t={};function s(i){var n=t[i];if(void 0!==n)return n.exports;var o=t[i]={exports:{}};return e[i](o,o.exports,s),o.exports}s.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return s.d(t,{a:t}),t},s.d=(e,t)=>{for(var i in t)s.o(t,i)&&!s.o(e,i)&&Object.defineProperty(e,i,{enumerable:!0,get:t[i]})},s.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),s.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),s.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})};var i={};return(()=>{s.r(i),s.d(i,{AxisViewTool:()=>W,Cognite3DViewerToolBase:()=>g,Corner:()=>G,DebugCameraTool:()=>O,ExplodedViewTool:()=>V,HtmlOverlayTool:()=>D,Keyframe:()=>q,MeasurementTool:()=>J,TimelineTool:()=>K});const e=require("three");class t{static color(e){const s=t._colors.get(e);if(void 0!==s)return s;const i=t.generateRandomColor();return t._colors.set(e,i),i}static colorRGB(e){const s=t.color(e);return[Math.floor(255*s.r),Math.floor(255*s.g),Math.floor(255*s.b)]}static colorCSS(e){const[s,i,n]=t.colorRGB(e);return`rgb(${s}, ${i}, ${n})`}static generateRandomColor(){const t=Math.random(),s=.4+.6*Math.random(),i=.3+.4*Math.random();return(new e.Color).setHSL(t,s,i)}}t._colors=new Map;class n{constructor(){this._listeners=[]}subscribe(e){this._listeners.push(e)}unsubscribe(e){const t=this._listeners.indexOf(e);-1!==t&&this._listeners.splice(t,1)}unsubscribeAll(){this._listeners.splice(0)}fire(...e){this._listeners.forEach((t=>t(...e)))}}function o(e,t){const s=t.getBoundingClientRect();if(e instanceof MouseEvent)return{offsetX:e.clientX-s.left,offsetY:e.clientY-s.top};if(e.changedTouches.length>0){const t=e.changedTouches[0];return{offsetX:t.clientX-s.left,offsetY:t.clientY-s.top}}return{offsetX:-1,offsetY:-1}}const r=require("lodash/debounce");var a=s.n(r);function l(e,t){throw new Error(t||"Unexpected object: "+e)}class d{constructor(e){this._events={click:new n,hover:new n},this.onHoverCallback=a()((e=>{this._events.hover.fire(o(e,this.domElement))}),100),this.domElement=e,this.setupEventListeners()}on(e,t){switch(e){case"click":this._events.click.subscribe(t);break;case"hover":this._events.hover.subscribe(t);break;default:l(e)}}off(e,t){switch(e){case"click":this._events.click.unsubscribe(t);break;case"hover":this._events.hover.unsubscribe(t);break;default:l(e)}}dispose(){!function(e){for(const t of Object.keys(e))e[t].unsubscribeAll()}(this._events)}setupEventListeners(){const{domElement:t}=this;let s=!1,i=0,n=!1;const r=new e.Vector2,a=e=>{this.handleClickEvent(e,r,s,n,i),s=!1,n=!1,t.removeEventListener("mouseup",a),t.removeEventListener("touchend",a),t.addEventListener("mousemove",this.onHoverCallback)},l=e=>{s=!0,n=!0,i=e.timeStamp;const{offsetX:l,offsetY:d}=o(e,t);r.set(l,d),t.addEventListener("mouseup",a),t.addEventListener("touchend",a),t.removeEventListener("mousemove",this.onHoverCallback)};t.addEventListener("mousedown",l),t.addEventListener("touchstart",l),t.addEventListener("mousemove",this.onHoverCallback)}isProperClick(e,t,s,i,n){const{offsetX:r,offsetY:a}=o(e,this.domElement),l=e.timeStamp-n,c=Math.abs(r-t.x)+Math.abs(a-t.y)>d.maxMoveDistance;return s&&i&&l<d.maxClickDuration&&!c}handleClickEvent(e,t,s,i,n){if(this.isProperClick(e,t,s,i,n)){const t={...o(e,this.domElement),button:e instanceof MouseEvent?e.button:void 0};this._events.click.fire(t)}}}d.maxMoveDistance=8,d.maxClickDuration=250,Math.log(2),require("assert"),new e.BufferGeometry;class c extends e.Group{constructor(){super(...arguments),this._isDisposed=!1,this._referenceCount=0}reference(){this.ensureNotDisposed(),this._referenceCount++}dereference(){if(this.ensureNotDisposed(),0===this._referenceCount)throw new Error("No references");0==--this._referenceCount&&this.dispose()}dispose(){this.ensureNotDisposed(),this._isDisposed=!0;for(const e of this.children)e instanceof THREE.Mesh&&void 0!==e.geometry&&(e.geometry.dispose(),e.geometry=emptyGeometry),e instanceof THREE.BufferGeometry&&e.dispose();this.clear()}ensureNotDisposed(){if(this._isDisposed)throw new Error("Already disposed/dereferenced")}}new e.Vector3,new e.Box3;class h extends e.Object3D{constructor(e){super(),this._activeLevel=0,this._levels=[],this.isLOD=!0,this.autoUpdate=!0,this._boundingBox=e.clone(),this.type="BoundingBoxLOD"}setBoundingBox(e){this._boundingBox.copy(e)}addLevel(e,t=0){this._levels.push({object:e,distance:Math.abs(t)}),this._levels.sort(((e,t)=>t.distance-e.distance)),e.visible=!1,this.add(e)}getCurrentLevel(){return this._levels.length>0?this._levels.length-this._activeLevel-1:0}update(e){this.updateCurrentLevel(e)}updateCurrentLevel(e){const t=this._levels,{camPos:s,bounds:i}=updateVars;i.copy(this._boundingBox).applyMatrix4(this.matrixWorld);const n=e instanceof THREE.PerspectiveCamera?e.zoom:1;if(t.length>0){s.setFromMatrixPosition(e.matrixWorld);const o=i.distanceToPoint(s)/n;t[this._activeLevel].object.visible=!1,this._activeLevel=t.findIndex((e=>o>=e.distance)),this._activeLevel=this._activeLevel>=0?this._activeLevel:t.length-1,t[this._activeLevel].object.visible=!0}}}new e.Vector3;class m{constructor(e){this._originalState={},this._renderer=e,this._originalState={}}setScissor(t,s,i,n){const o=this._renderer.getScissor(new e.Vector4);this._originalState={scissorData:o,...this._originalState},this._renderer.setScissor(t,s,i,n)}setScissorTest(e){this._originalState={scissorTest:this._renderer.getScissorTest(),...this._originalState},this._renderer.setScissorTest(e)}setClearColor(t,s){this._originalState={clearColor:this._renderer.getClearColor(new e.Color),clearAlpha:this._renderer.getClearAlpha(),...this._originalState},this._renderer.setClearColor(t,s)}setWebGLState(e,t=m.DefaultWebGLState){var s,i,n,o,r,a,l;if(this._originalState={webGLState:{buffers:(null==e?void 0:e.buffers)?{}:void 0},...this._originalState},null===(s=null==e?void 0:e.buffers)||void 0===s?void 0:s.depth){const s=null===(i=e.buffers.depth)||void 0===i?void 0:i.test,d=null===(n=e.buffers.depth)||void 0===n?void 0:n.mask;this._originalState.webGLState.buffers.depth={test:void 0!==s?null===(r=null===(o=t.buffers)||void 0===o?void 0:o.depth)||void 0===r?void 0:r.test:void 0,mask:void 0!==d?null===(l=null===(a=t.buffers)||void 0===a?void 0:a.depth)||void 0===l?void 0:l.mask:void 0},void 0!==d&&this._renderer.state.buffers.depth.setMask(d),void 0!==s&&this._renderer.state.buffers.depth.setTest(s)}}setSize(t,s){this._originalState={size:this._renderer.getSize(new e.Vector2),...this._originalState},this._renderer.setSize(t,s)}set localClippingEnabled(e){this._originalState={localClippingEnabled:this._renderer.localClippingEnabled,...this._originalState},this._renderer.localClippingEnabled=e}set autoClear(e){this._originalState={autoClear:this._renderer.autoClear,...this._originalState},this._renderer.autoClear=e}set autoClearDepth(e){this._originalState={autoClearDepth:this._renderer.autoClearDepth,...this._originalState},this._renderer.autoClearDepth=e}setRenderTarget(e){this._originalState={renderTarget:this._renderer.getRenderTarget(),...this._originalState},this._renderer.setRenderTarget(e)}resetState(){var e,t,s,i;if(void 0!==this._originalState.autoClear&&(this._renderer.autoClear=this._originalState.autoClear),void 0!==this._originalState.autoClearDepth&&(this._renderer.autoClearDepth=this._originalState.autoClearDepth),void 0!==this._originalState.clearColor&&this._renderer.setClearColor(this._originalState.clearColor,this._originalState.clearAlpha),void 0!==this._originalState.localClippingEnabled&&(this._renderer.localClippingEnabled=this._originalState.localClippingEnabled),void 0!==this._originalState.size&&this._renderer.setSize(this._originalState.size.width,this._originalState.size.height),void 0!==this._originalState.renderTarget&&this._renderer.setRenderTarget(this._originalState.renderTarget),void 0!==this._originalState.scissorData&&this._renderer.setScissor(this._originalState.scissorData),void 0!==this._originalState.scissorTest&&this._renderer.setScissorTest(this._originalState.scissorTest),void 0!==this._originalState.webGLState&&(this._renderer.state.reset(),null===(t=null===(e=this._originalState.webGLState)||void 0===e?void 0:e.buffers)||void 0===t?void 0:t.depth)){const e=null===(s=this._originalState.webGLState.buffers.depth)||void 0===s?void 0:s.test,t=null===(i=this._originalState.webGLState.buffers.depth)||void 0===i?void 0:i.mask;void 0!==t&&this._renderer.state.buffers.depth.setMask(t),void 0!==e&&this._renderer.state.buffers.depth.setTest(e)}this._originalState={}}}m.DefaultWebGLState={buffers:{depth:{mask:!0,test:!0}}};class u{constructor(e){this._value=e,this._lastAccessTime=Date.now()}get value(){return this.touch(),this._value}get lastAccessTime(){return this._lastAccessTime}touch(){this._lastAccessTime=Date.now()}}class p{constructor(e=50,t,s=10){this._data=new Map,this._maxElementsInCache=e,this._defaultCleanupCount=Math.max(s,1),this._removeCallback=t}has(e){return this._data.has(e)}forceInsert(e,t){this.isFull()&&this.cleanCache(this._defaultCleanupCount),this.insert(e,t)}insert(e,t){if(this._data.size<this._maxElementsInCache)this._data.set(e,new u(t));else if(this._maxElementsInCache>0)throw new Error("Cache full, please clean Cache and retry adding data")}remove(e){if(void 0!==this._removeCallback){const t=this._data.get(e);void 0!==t&&this._removeCallback(t.value)}this._data.delete(e)}get(e){const t=this._data.get(e);if(void 0!==t)return t.value;throw new Error(`Cache element ${e} does not exist`)}isFull(){return this._data.size>=this._maxElementsInCache}cleanCache(e){const t=Array.from(this._data.entries());t.sort(((e,t)=>t[1].lastAccessTime-e[1].lastAccessTime));for(let s=0;s<e;s++){const e=t.pop();if(void 0===e)return;this.remove(e[0])}}resize(e){this._maxElementsInCache=e,this._defaultCleanupCount=Math.max(e*p.CLEANUP_COUNT_TO_CAPACITY_RATIO,1),this.isFull()&&this.cleanCache(this._data.size-this._maxElementsInCache)}clear(){if(void 0!==this._removeCallback)for(const e of this._data.values())this._removeCallback(e.value);this._data.clear()}}p.CLEANUP_COUNT_TO_CAPACITY_RATIO=.2,require("lodash/chunk"),require("lodash/map");const _={renderSize:new e.Vector2,position:new e.Vector3};var v,f;Symbol.toStringTag,require("lodash/remove"),function(){if("undefined"!=typeof self)return self;if("undefined"!=typeof window)return window;if(void 0!==s.g)return s.g;throw new Error("unable to locate global object")}(),(f=v||(v={}))[f.Box=0]="Box",f[f.Cylinder=1]="Cylinder",f[f.Composite=2]="Composite";class g{constructor(){this._disposedEvent=new n,this._disposed=!1}on(e,t){"disposed"===e?this._disposedEvent.subscribe(t):l(e)}off(e,t){"disposed"===e?this._disposedEvent.unsubscribe(t):l(e)}dispose(){if(this._disposed)throw new Error("Already disposed");this._disposed=!0,this._disposedEvent.fire(),this._disposedEvent.unsubscribeAll()}ensureNotDisposed(){if(this._disposed)throw new Error("The tool has been disposed")}}const w=require("lodash/range");var y=s.n(w);class C{constructor(e,t){this._removedElements=new Set,this._dimensions=t,this._cells=y()(0,t[0]*t[1]).map((()=>new Array)),this._bounds=e}insert(e,t){if(!this._bounds.intersectsBox(e))throw new Error("Element to be added must be partially inside grid");if(this._removedElements.has(t))throw new Error("Re-adding previously taken elements is currently not supported");for(const s of this.cellsIntersecting(e))s.push({bounds:e,element:t})}*overlappingElements(e){if(!this._bounds.intersectsBox(e))return;const t=new Set;for(const s of this.cellsIntersecting(e))for(const i of s)t.has(i.element)||this._removedElements.has(i.element)||!e.intersectsBox(i.bounds)||(t.add(i.element),yield i.element)}*removeOverlappingElements(e){if(this._bounds.intersectsBox(e))for(const t of this.cellsIntersecting(e))for(let s=0;s<t.length;s++){const i=t[s];!this._removedElements.has(i.element)&&e.intersectsBox(i.bounds)&&(this._removedElements.add(i.element),yield i.element)}}*cellsIntersecting(t){const{min:s,max:i}=this._bounds,n=this._dimensions[0],o=this._dimensions[1],r=(t.min.x-s.x)/(i.x-s.x),a=(t.max.x-s.x)/(i.x-s.x),l=(t.min.y-s.y)/(i.y-s.y),d=(t.max.y-s.y)/(i.y-s.y),c=e.MathUtils.clamp,h=c(Math.floor(n*r),0,n-1),m=c(Math.floor(n*a),0,n-1),u=c(Math.floor(o*l),0,o-1),p=c(Math.floor(o*d),0,o-1);for(let e=u;e<=p;++e)for(let t=h;t<=m;++t)yield this._cells[e*n+t]}}const b=require("mixpanel-browser");var x=s.n(b);const M=require("loglevel"),E=require("lodash/throttle");var L=s.n(E);const{VERSION:S,MIXPANEL_TOKEN:k}={VERSION:"4.0.0-dev.20221110",MIXPANEL_TOKEN:"8c900bdfe458e32b768450c20750853d",IS_DEVELOPMENT_MODE:!1};class T{constructor(e,t,s){x().init(k,{batch_requests:!0,disable_cookie:!0,disable_persistence:!0,ip:!1,property_blacklist:["$city","$region","mp_country_code","$geo_source","$timezone","mp_lib","$lib_version","$device_id","$user_id","$current_url","$screen_width","$screen_height","$referrer","$referring_domain","$initial_referrer","$initial_referring_domain"]}),x().reset(),x().identify("reveal-single-user"),this._sessionProps={VERSION:S,project:"unknown",application:"unknown",sessionId:"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,(function(e){const t=16*Math.random()|0;return("x"==e?t:3&t|8).toString(16)}))},e&&(this._sessionProps.project=e),t&&(this._sessionProps.application=t),this.innerTrackEvent("init",s)}static init(e,t,s,i){if(void 0===globalThis.revealMetricsLogger&&e){const e=new T(t,s,i);globalThis.revealMetricsLogger={metricsLogger:e}}}innerTrackEvent(e,t){const s={...this._sessionProps,...t};x().track(e,s)}static trackEvent(e,t){globalThis.revealMetricsLogger&&globalThis.revealMetricsLogger.metricsLogger.innerTrackEvent(e,t)}static trackCreateTool(e){T.trackEvent("toolCreated",{toolName:e})}static trackLoadModel(e,t,s){T.trackEvent("loadModel",{...e,modelIdentifier:t,modelVersion:s})}static trackCadModelStyled(e,t){T.trackEvent("cadModelStyleAssigned",{nodeCollectionClassToken:e,style:t})}static trackCadNodeTransformOverriddenImpl(e,t){const{zeroVector:s,oneVector:i,identityRotation:n,translation:o,scale:r,rotation:a}=T.trackCadNodeTransformOverriddenVars;t.decompose(o,a,r);const l=Math.abs(a.angleTo(n))>1e-5,d=o.distanceToSquared(s)>1e-5,c=r.distanceToSquared(i)>1e-5;T.trackEvent("cadNodeTransformOverridden",{nodeCount:e,hasTranslation:d,hasRotation:l,hasScale:c})}static trackCameraNavigationImpl(e){T.trackEvent("cameraNavigated",e)}static trackError(e,t){M.error(e),void 0!==e?this.trackEvent("error",{message:e.message||e,name:e.name,stack:e.stack,...t}):this.trackEvent("error",{name:"unknown",...t})}}T.TrackCameraNavigationThrottleDelay=5e3,T.TrackCadNodeTransformOverriddenThrottleDelay=1e3,T.trackCadNodeTransformOverriddenVars={zeroVector:new e.Vector3(0,0,0),oneVector:new e.Vector3(1,1,1),identityRotation:(new e.Quaternion).identity(),translation:new e.Vector3,scale:new e.Vector3,rotation:new e.Quaternion},T.trackCadNodeTransformOverridden=L()(((e,t)=>T.trackCadNodeTransformOverriddenImpl(e,t)),T.TrackCadNodeTransformOverriddenThrottleDelay),T.trackCameraNavigation=L()((e=>T.trackCameraNavigationImpl(e)),T.TrackCameraNavigationThrottleDelay);class D extends g{constructor(t,s){super(),this._htmlOverlays=new Map,this._compositeOverlays=[],this._preallocatedVariables={camPos:new e.Vector3,camNormal:new e.Vector3,point:new e.Vector3,nearPlane:new e.Plane,farPlane:new e.Plane,position2D:new e.Vector2},this._onSceneRenderedHandler=this.onSceneRendered.bind(this),this._onViewerDisposedHandler=this.onViewerDisposed.bind(this),this._options=null!=s?s:{},this._viewer=t,this._viewer.on("sceneRendered",this._onSceneRenderedHandler),this._viewer.on("disposed",this._onViewerDisposedHandler),this.scheduleUpdate=a()((()=>this.forceUpdate()),20),this._visible=!0,T.trackCreateTool("HtmlOverlayTool")}get viewerDomElement(){return this._viewer.domElement}get viewerCamera(){return this._viewer.cameraManager.getCamera()}get viewerCanvas(){return this._viewer.canvas}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._viewer.canvas,{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{width:o,height:r}=t.getBoundingClientRect();return n.x=Math.round(n.x*o),n.y=Math.round(n.y*r),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.viewerCanvas,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.viewerCanvas.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.viewerCanvas;e.style.visibility="visible",e.style.left=`${t.x+s.offsetLeft}px`,e.style.top=`${t.y+s.offsetTop}px`,this._compositeOverlays.push(e)}onSceneRendered(){this.forceUpdate()}onViewerDisposed(){this.dispose()}}function P(t,s){const{state:i}=t;return(s=null!=s?s:new e.Box2).min.set(i.position2D.x,i.position2D.y),s.max.set(i.position2D.x+i.width,i.position2D.y+i.height),s}class V extends g{constructor(e,t){super(),this._cadModel=t,this._rootTreeIndex=e,this.preloadBoundingBoxData(t,e),T.trackCreateTool("ExplodedViewTool")}get readyPromise(){return this._treeBoundingBoxdata.then()}async expand(e){const t=await this._treeBoundingBoxdata;await Promise.all(t.map((({treeIndex:t,direction:s,transform:i})=>0===e?(this._cadModel.resetNodeTransformByTreeIndex(t),Promise.resolve(0)):(i.setPosition(s.x*e,s.y*e,s.z*e),this._cadModel.setNodeTransformByTreeIndex(t,i)))))}reset(){this._cadModel.resetNodeTransformByTreeIndex(this._rootTreeIndex,!0)}preloadBoundingBoxData(t,s){const i=t.getBoundingBoxByTreeIndex(s).then((t=>t.getCenter(new e.Vector3))),n=t.getSubtreeTreeIndices(s).then((e=>{if(e.count>1e3)throw new Error(`Subtree size of ${e.count} is too large (max size = 1000)`);return e})).then((s=>Promise.all(s.toArray().map((async s=>({subTreeIndex:s,subTreeIndexBoundingBoxCenter:(await t.getBoundingBoxByTreeIndex(s)).getCenter(new e.Vector3)}))))));this._treeBoundingBoxdata=Promise.all([i,n]).then((t=>{const[s,i]=t;return i.map((({subTreeIndex:t,subTreeIndexBoundingBoxCenter:i})=>({treeIndex:t,direction:(new e.Vector3).subVectors(i,s),transform:new e.Matrix4})))})).then((async e=>(await Promise.all(e.map((e=>t.setNodeTransformByTreeIndex(e.treeIndex,e.transform)))),e)))}}class O extends g{constructor(e){super(),this._onViewerDisposedHandler=this.onViewerDisposed.bind(this),this._viewer=e,this._viewer.on("disposed",this._onViewerDisposedHandler)}get viewerCamera(){return this._viewer.cameraManager.getCamera()}dispose(){this._viewer.off("disposed",this._onViewerDisposedHandler),super.dispose()}showCameraHelper(){this.hideCameraHelper(),this._cameraHelper=new e.CameraHelper(this.viewerCamera.clone()),this._viewer.addObject3D(this._cameraHelper)}hideCameraHelper(){void 0!==this._cameraHelper&&(this._viewer.removeObject3D(this._cameraHelper),this._cameraHelper=void 0)}onViewerDisposed(){this.dispose()}}const A=require("lodash/cloneDeep");var B=s.n(A);const I=require("lodash/merge");var N=s.n(I);const R=require("@tweenjs/tween.js");var z=s.n(R);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=N()(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.canvas.clientWidth-t.padding.x-s};break;case G.TopRight:this._dynamicUpdatePosition=()=>{this._screenPosition.x=this._viewer.canvas.clientWidth-t.padding.x-s,this._screenPosition.y=this._viewer.canvas.clientHeight-t.padding.y-s};break;case G.TopLeft:this._screenPosition.x=t.padding.x,this._dynamicUpdatePosition=()=>{this._screenPosition.y=this._viewer.canvas.clientHeight-t.padding.y-s};break;case G.BottomLeft:this._screenPosition.x=t.padding.x,this._screenPosition.y=t.padding.y;break;default:throw new Error(`Unknown corner position for Axis Cross: Corner = ${t.corner}`)}this._dynamicUpdatePosition()}this._viewer.addObject3D(e)}handleClick(t,s,i){const n=2*(t-this._screenPosition.x)/this._layoutConfig.size-1,o=2*(i.height-s-this._screenPosition.y)/this._layoutConfig.size-1,r=new e.Vector3(n,o,1),a=new e.Vector3(0,0,-1).normalize();this._raycaster.set(r,a);const l=this._raycaster.intersectObjects(this._interactiveObjects);if(!(l.length>0))return!1;const d=l[0].object.position.clone().normalize(),c=l[0].object.userData.upVector.clone();return this.moveCameraTo(d,c),!0}createAxisCross(e){const t=this.createCompass();e.add(t);const s=this.createBoxFaces();return e.add(...s),this.setupTransformOnRender(e),s}setupTransformOnRender(t){t.children[0].onBeforeRender=s=>{this._dynamicUpdatePosition(),t.quaternion.copy(this._viewer.cameraManager.getCamera().quaternion).invert(),t.updateMatrixWorld(),this._updateClickDiv();const i=s.domElement.clientWidth,n=s.domElement.clientHeight,o=new e.Vector2;s.getSize(o);const r=this._layoutConfig.size,a=new e.Vector2(r/i,r/n),l=new e.Vector2(this._screenPosition.x/i*2+r/i,this._screenPosition.y/n*2+r/n);t.traverse((t=>{t instanceof e.Mesh&&(t.material.uniforms.offset.value=l,t.material.uniforms.scale.value=a,t.material.uniformsNeedUpdate=!0)}))}}createBoxFaces(){const t=this._layoutConfig.faces;return[this.createBoxFace(new e.Vector3(1,0,0),t.xPositiveFace),this.createBoxFace(new e.Vector3(-1,0,0),t.xNegativeFace),this.createBoxFace(new e.Vector3(0,1,0),t.yPositiveFace,new e.Vector3(0,0,-1)),this.createBoxFace(new e.Vector3(0,-1,0),t.yNegativeFace,new e.Vector3(0,0,1)),this.createBoxFace(new e.Vector3(0,0,1),t.zPositiveFace),this.createBoxFace(new e.Vector3(0,0,-1),t.zNegativeFace)]}createCompass(){const t=new e.PlaneGeometry(2,2,1,1),i=new e.Mesh(t,new e.RawShaderMaterial({vertexShader:U()(s(479).Z),fragmentShader:U()(s(430).Z),uniforms:{offset:{value:new e.Vector2},scale:{value:new e.Vector2},tex:{value:this.createCompassTexture()}},side:e.DoubleSide,glslVersion:e.GLSL3,depthTest:!1,blending:e.CustomBlending,blendDst:e.OneMinusSrcAlphaFactor,blendSrc:e.SrcAlphaFactor}));i.frustumCulled=!1,i.renderOrder=1;const n=Math.sin(this._layoutConfig.compass.labelDelta),o=Math.cos(this._layoutConfig.compass.labelDelta);return i.position.y=-.45,i.up.copy(new e.Vector3(n,0,o)),i.lookAt(0,0,0),i}createCompassTexture(){var t;const s=this._layoutConfig.compass,i=this._layoutConfig.size,n=document.createElement("canvas");n.width=i,n.height=i;const o=n.getContext("2d"),r=i/2,a=r-r/4,l=i/32,d=i/8;if(o.strokeStyle=s.tickColor.getStyle(),o.lineWidth=i/16,o.setLineDash([l,d]),o.beginPath(),o.arc(r,r,a,0,2*Math.PI),o.stroke(),s.ringLabel&&s.ringLabel.length>0){const e=null!==(t=s.fontSize)&&void 0!==t?t:i/5;o.font=`bold ${e}px Arial`,o.textAlign="center",o.fillStyle=s.fontColor.getStyle(),o.fillText(s.ringLabel,r,r*(1/4)+e/3)}return new e.CanvasTexture(n)}getFaceTexture(t,s){var i,n;const o=s/2,r=document.createElement("canvas");r.width=o,r.height=o;const a=r.getContext("2d");a.fillStyle=t.outlineColor.getStyle(),a.fillRect(0,0,o,o),a.fillStyle=t.faceColor.getStyle();const l=null!==(i=t.outlineSize)&&void 0!==i?i:o/32;if(a.fillRect(l,l,o-2*l,o-2*l),a.fill(),""!==t.label){const e=null!==(n=t.fontSize)&&void 0!==n?n:o/3;a.font=`bold ${e}px Arial`,a.textAlign="center",a.fillStyle=t.fontColor.getStyle(),a.fillText(t.label,o/2,o/2+e/3)}return new e.CanvasTexture(r)}createBoxFace(t,i,n=new e.Vector3(0,1,0)){const o=new e.Mesh(this._boxFaceGeometry,new e.RawShaderMaterial({vertexShader:U()(s(479).Z),fragmentShader:U()(s(430).Z),uniforms:{offset:{value:new e.Vector2},scale:{value:new e.Vector2},tex:{value:this.getFaceTexture(i,this._layoutConfig.size)}},depthTest:!1,glslVersion:e.GLSL3,transparent:!0}));return o.frustumCulled=!1,o.renderOrder=1e3,o.position.copy(t.multiplyScalar(.5*this._boxFaceGeometry.parameters.width)),o.lookAt(t.multiplyScalar(2)),o.userData.upVector=n,o}moveCameraTo(t,s){const i=this._viewer.cameraManager,{position:n,target:o,rotation:r}=i.getCameraState(),a=n.clone().sub(o),l=a.length(),d=a.clone().normalize(),c=Math.acos(d.dot(t)),h={t:0},m=new(z().Tween)(h),u=t.clone(),p=r.clone(),_=(new e.Quaternion).setFromRotationMatrix((new e.Matrix4).makeBasis(s.clone().cross(u),s,u));if(p.angleTo(_)<1e-6)return;const v=new e.Vector3,f=new e.Quaternion;m.to({t:1},this._layoutConfig.animationSpeed).onUpdate((()=>{v.copy(d).multiplyScalar(Math.sin((1-h.t)*c)/Math.sin(c)).add(t.clone().multiplyScalar(Math.sin(h.t*c)/Math.sin(c))),v.multiplyScalar(l),v.add(o),f.slerpQuaternions(p,_,h.t),i.setCameraState({position:v,rotation:f})})).onComplete((()=>{i.setCameraState({position:v,target:o})})).start(z().now()).update(z().now())}}class q{constructor(e,t){this._nodeCollectionAndAppearance=[],this._model=e,this._date=t}getKeyframeDate(){return this._date}activate(){this._nodeCollectionAndAppearance.forEach(((e,t)=>{this._model.assignStyledNodeCollection(e.nodes,e.nodeAppearance)}))}deactivate(){this._nodeCollectionAndAppearance.forEach(((e,t)=>{this._model.unassignStyledNodeCollection(e.nodes)}))}assignStyledNodeCollection(e,t){T.trackCadModelStyled(e.classToken,t);const s=this._nodeCollectionAndAppearance.findIndex((t=>t.nodes===e));-1!==s?this._nodeCollectionAndAppearance[s].nodeAppearance=t:this._nodeCollectionAndAppearance.push({nodes:e,nodeAppearance:t})}unassignStyledNodeCollection(e){const t=this._nodeCollectionAndAppearance.findIndex((t=>t.nodes===e));if(-1===t)throw new Error("Node collection has not been assigned to model");this._nodeCollectionAndAppearance.splice(t,1)}}class K extends g{constructor(e){super(),this._playback=void 0,this._events={dateChanged:new n},this._model=e,this._keyframes=new Array}subscribe(e,t){"dateChanged"===e?this._events.dateChanged.subscribe(t):l(e,`Unsupported event: '${e}'`)}unsubscribe(e,t){"dateChanged"===e?this._events.dateChanged.unsubscribe(t):l(e,`Unsupported event: '${e}'`)}createKeyframe(e){const t=new q(this._model,e);return this._keyframes.push(t),this.sortKeyframesByDates(),t}getKeyframeByDate(e){return this._keyframes.find((t=>t.getKeyframeDate()===e))}removeKeyframe(e){const t=this._keyframes.findIndex((t=>t===e));t>-1&&this._keyframes.splice(t,1)}removeKeyframeByDate(e){const t=this._keyframes.findIndex((t=>t.getKeyframeDate()===e));t>-1&&this._keyframes.splice(t,1)}play(e,t,s){this.stop();const i={dateInMs:e.getTime()},n={dateInMs:t.getTime()},o=new(z().Tween)(i).to(n,s);let r=-1;o.onUpdate((()=>{const s=new Date(i.dateInMs),n=r;for(;r<this._keyframes.length-1&&this._keyframes[r+1].getKeyframeDate().getTime()<=s.getTime();)r++;r!==n&&(-1!==n&&this._keyframes[n].deactivate(),this._keyframes[r].activate()),this._events.dateChanged.fire({date:s,activeKeyframe:this._keyframes[r],startDate:e,endDate:t})})),this._playback=o,o.start()}stop(){void 0!==this._playback&&(this._playback.stop(),this._playback=void 0)}pause(){void 0!==this._playback&&this._playback.isPlaying()&&this._playback.pause()}resume(){void 0!==this._playback&&this._playback.isPaused()&&this._playback.resume()}getAllKeyframes(){return this._keyframes.slice()}dispose(){super.dispose(),this._events.dateChanged.unsubscribeAll()}sortKeyframesByDates(){this._keyframes.length>1&&this._keyframes.sort(((e,t)=>e.getKeyframeDate().getTime()-t.getKeyframeDate().getTime()))}}class Y{constructor(){Y.ensureStylesLoaded()}createLabel(e){const t=document.createElement("div");return t.innerText=e,t.className=Y.stylesId,t}static ensureStylesLoaded(){if(document.getElementById(Y.stylesId))return;const e=document.createElement("style");e.id=Y.stylesId,e.appendChild(document.createTextNode(".reveal-measurement-label {\n\tposition: absolute;\n\n /* Anchor to the center of the element and ignore events */\n transform: translate(-50%, -50%);\n pointer-events: none;\n touch-action: none;\n user-select: none;\n border-radius: 6px;\n\n /* Make it look nice */\n padding: 6px;\n color: #fff;\n background: #232323da;\n border: #ffffff22 solid 1px;\n overflow: hidden;\n white-space: nowrap;\n\n /*Font - fallback to generic font if Inter not available*/\n font-family: 'Inter', sans-serif;\n font-style: normal;\n font-weight: 500;\n}\n")),document.head.appendChild(e)}}Y.stylesId="reveal-measurement-label";const X=require("three-stdlib");class Z{constructor(t,s,i){this._position=new Float32Array(6),this._geometry=new X.LineGeometry,this._adaptiveWidthLineMaterial=new X.LineMaterial({color:s.getHex(),linewidth:t,worldUnits:!0,depthTest:!1}),this._fixedWidthLineMaterial=new X.LineMaterial({color:s.getHex(),linewidth:2,worldUnits:!1,depthTest:!1}),this._meshes=new e.Group,this._meshes.name="Measurement";const n=new e.Mesh(new e.BufferGeometry);n.name="onBeforeRenderTrigger trigger (no geometry)",n.frustumCulled=!1;const o=new e.Vector2;n.onBeforeRender=e=>{const{width:t,height:s}=e.domElement.getBoundingClientRect();o.set(t,s),this._adaptiveWidthLineMaterial.resolution=this._fixedWidthLineMaterial.resolution=o},this._meshes.add(n),this.startLine(i)}dispose(){this._geometry&&this._geometry.dispose(),this._adaptiveWidthLineMaterial.dispose(),this._fixedWidthLineMaterial.dispose(),this._meshes.clear(),this._meshes.removeFromParent()}get meshes(){return this._meshes}updateLine(e){this._position[3]=e.x,this._position[4]=e.y,this._position[5]=e.z,this._geometry.setPositions(this._position)}getMeasuredDistance(){const t=new e.Vector3(this._position[0],this._position[1],this._position[2]);return new e.Vector3(this._position[3],this._position[4],this._position[5]).distanceTo(t)}getMidPointOnLine(){const t=new e.Vector3(this._position[0],this._position[1],this._position[2]);let s=new e.Vector3(this._position[3],this._position[4],this._position[5]).clone().sub(t);const i=s.length();return s=s.normalize().multiplyScalar(.5*i),t.clone().add(s)}updateLineWidth(e){this._adaptiveWidthLineMaterial.linewidth=e}updateLineColor(e){this._fixedWidthLineMaterial.color=this._adaptiveWidthLineMaterial.color=e}startLine(e){this._position[0]=this._position[3]=e.x,this._position[1]=this._position[4]=e.y,this._position[2]=this._position[5]=e.z,this._geometry.setPositions(this._position);const t=new X.Line2(this._geometry,this._adaptiveWidthLineMaterial);t.computeLineDistances(),t.renderOrder=100;const s=new X.Line2(this._geometry,this._fixedWidthLineMaterial);s.computeLineDistances(),s.renderOrder=100,this._meshes.add(t),this._meshes.add(s)}}class Q{constructor(t,s,i,n,o,r){this._measurement={measurementId:0,startPoint:new e.Vector3,endPoint:new e.Vector3,distanceInMeters:0},this._options=n,this._measurementLabel=new Y,this._htmlOverlay=o,this._domElement=t,this._camera=s,this._meshGroup=i,this._startPoint=r,this._distanceToCamera=this._camera.getWorldPosition(new e.Vector3).distanceTo(r),this._line=this.startMeasurement(r),this._meshGroup.add(this._line.meshes)}update(e){const{offsetX:t,offsetY:s}=e;this._line.updateLine(this.pointerTo3DPosition(t,s))}endMeasurement(e){const{distanceToLabelCallback:t}=this._options;this._line.updateLine(e);const s=t(this._line.getMeasuredDistance());this._labelElement=this.addLabel(this._line.getMidPointOnLine(),s),this._measurement={measurementId:Date.now(),startPoint:this._startPoint,endPoint:e,distanceInMeters:this._line.getMeasuredDistance()}}removeMeasurement(){this._meshGroup.remove(this._line.meshes),this._labelElement&&this._htmlOverlay.remove(this._labelElement),this._line&&this._line.dispose()}getMeasurement(){return this._measurement}updateLineWidth(e){this._line.updateLineWidth(e)}updateLineColor(e){this._line.updateLineColor(e)}visible(e){this._meshGroup&&(this._meshGroup.visible=e)}startMeasurement(e){return new Z(this._options.lineWidth,this._options.color,e)}addLabel(e,t){const s=this._measurementLabel.createLabel(t);return this._htmlOverlay.add(s,e),s}pointerTo3DPosition(t,s){const i=new e.Vector3,n=new e.Vector2;n.x=t/this._domElement.clientWidth*2-1,n.y=-s/this._domElement.clientHeight*2+1;const o=new e.Vector3,r=new e.Ray,a=new e.Vector3;return a.setFromMatrixPosition(this._camera.matrixWorld),r.origin.copy(a),o.set(n.x,n.y,.5).unproject(this._camera).sub(r.origin).normalize(),r.direction.copy(o),r.at(this._distanceToCamera,i),i}}class J extends g{constructor(t,s){super(),this._geometryGroup=new e.Group,this._handleLabelClustering=this.createCombineClusterElement.bind(this),this._handlePointerClick=this.onPointerClick.bind(this),this._handlePointerMove=this.onPointerMove.bind(this),this._handleMeasurementCancel=this.onKeyDown.bind(this),this._events={measurementAdded:new n,measurementStarted:new n,measurementEnded:new n,disposed:new n},this._overlayOptions={clusteringOptions:{mode:"overlapInScreenSpace",createClusterElementCallback:this._handleLabelClustering}},this._viewer=t,this._options={...J.defaultLineOptions,...s},this._measurements=[],this._measurementMode=!1,this._showMeasurements=this._showLabels=!0,this._htmlOverlay=new D(this._viewer,this._overlayOptions),this._geometryGroup.name=J.name,this._viewer.addObject3D(this._geometryGroup),T.trackCreateTool("MeasurementTool")}get isInMeasurementMode(){return this._measurementMode}on(e,t){switch(e){case"added":this._events.measurementAdded.subscribe(t);break;case"started":this._events.measurementStarted.subscribe(t);break;case"ended":this._events.measurementEnded.subscribe(t);break;case"disposed":this._events.disposed.subscribe(t);break;default:l(e,`Unsupported event: '${e}'`)}}off(e,t){switch(e){case"added":this._events.measurementAdded.unsubscribe(t);break;case"started":this._events.measurementStarted.unsubscribe(t);break;case"ended":this._events.measurementEnded.unsubscribe(t);break;case"disposed":this._events.disposed.unsubscribe(t);break;default:l(e,`Unsupported event: '${e}'`)}}enterMeasurementMode(){if(this._measurementMode)throw new Error("Measurement mode is active, call exitMeasurementMode()");this._viewer.on("click",this._handlePointerClick),this._events.measurementStarted.fire(),this._measurementMode=!0,this._showMeasurements=!0}exitMeasurementMode(){if(!this._measurementMode)throw new Error("Measurement mode is not active, call enterMeasurementMode()");this.cancelActiveMeasurement(),this._viewer.off("click",this._handlePointerClick),this._events.measurementEnded.fire(),this._measurementMode=!1}removeMeasurement(e){const t=this._measurements.findIndex((t=>t.getMeasurement()===e));if(-1===t)throw new Error("Measurement not found");this._measurements[t].removeMeasurement(),this._measurements.splice(t,1),this._viewer.requestRedraw()}removeAllMeasurements(){this._measurements.forEach((e=>{e.removeMeasurement()})),this._measurements.splice(0),this._viewer.requestRedraw()}setMeasurementLabelsVisible(e){this._showMeasurements&&this._htmlOverlay.visible(e),this._showLabels=e}setLineOptions(e){this._options={...this._options,...e}}updateLineWidth(e,t){const s=this._measurements.findIndex((t=>t.getMeasurement()===e));if(-1===s)throw new Error("Measurement not found");this._measurements[s].updateLineWidth(t),this._viewer.requestRedraw()}updateLineColor(e,t){const s=this._measurements.findIndex((t=>t.getMeasurement()===e));if(-1===s)throw new Error("Measurement not found");this._measurements[s].updateLineColor(t),this._viewer.requestRedraw()}getAllMeasurements(){return this._measurements.map((e=>e.getMeasurement()))}visible(e){this._measurements.forEach((t=>{t.visible(e)}));const t=!1!==e&&this._showLabels;this._htmlOverlay.visible(t),this._showMeasurements=e,this._viewer.requestRedraw()}dispose(){var e;this.removeAllMeasurements(),this.exitMeasurementMode(),null===(e=this._activeMeasurement)||void 0===e||e.removeMeasurement(),this._htmlOverlay.dispose(),this._geometryGroup.clear(),this._viewer.removeObject3D(this._geometryGroup),this._events.measurementAdded.unsubscribeAll(),this._events.measurementStarted.unsubscribeAll(),this._events.measurementEnded.unsubscribeAll(),super.dispose()}async onPointerClick(e){const{offsetX:t,offsetY:s}=e,i=await this._viewer.getIntersectionFromPixel(t,s);if(i){if(this._activeMeasurement){this._activeMeasurement.endMeasurement(i.point);const e=this._activeMeasurement.getMeasurement();this._measurements.push(this._activeMeasurement),this._activeMeasurement=void 0,this._events.measurementAdded.fire(this._measurements[this._measurements.length-1].getMeasurement()),this._viewer.domElement.removeEventListener("pointermove",this._handlePointerMove),window.removeEventListener("keydown",this._handleMeasurementCancel),T.trackEvent("measurementAdded",{measurement:e})}else{const e=this._viewer.cameraManager.getCamera(),t=this._viewer.domElement;this._activeMeasurement=new Q(t,e,this._geometryGroup,this._options,this._htmlOverlay,i.point),this._viewer.domElement.addEventListener("pointermove",this._handlePointerMove),window.addEventListener("keydown",this._handleMeasurementCancel)}this._viewer.requestRedraw()}}onPointerMove(e){this._activeMeasurement&&(this._activeMeasurement.update(e),this._viewer.requestRedraw())}createCombineClusterElement(){const e=document.createElement("div");return e.className=Y.stylesId,e.innerHTML='<?xml version="1.0" encoding="UTF-8"?>\n<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="50px" height="20px" viewBox="0 0 50 20" version="1.1">\n<g id="surface1">\n<path style=" stroke:none;fill-rule:nonzero;fill:rgb(100%,100%,100%);fill-opacity:0.8;" d="M 0.832031 4 C 0.371094 4 0 4.148438 0 4.332031 L 0 10 C 0 10.183594 0.371094 10.332031 0.832031 10.332031 C 1.292969 10.332031 1.667969 10.183594 1.667969 10 L 1.667969 4.332031 C 1.667969 4.148438 1.292969 4 0.832031 4 Z M 0.832031 4 "/>\n<path style=" stroke:none;fill-rule:nonzero;fill:rgb(100%,100%,100%);fill-opacity:0.8;" d="M 49.167969 4 C 48.707031 4 48.332031 4.148438 48.332031 4.332031 L 48.332031 10 C 48.332031 10.183594 48.707031 10.332031 49.167969 10.332031 C 49.628906 10.332031 50 10.183594 50 10 L 50 4.332031 C 50 4.148438 49.628906 4 49.167969 4 Z M 49.167969 4 "/>\n<path style=" stroke:none;fill-rule:nonzero;fill:rgb(100%,100%,100%);fill-opacity:0.8;" d="M 49.582031 11.332031 L 46.25 11.332031 C 46.019531 11.332031 45.835938 11.40625 45.835938 11.5 L 45.835938 12.332031 C 45.835938 12.515625 45.460938 12.667969 45 12.667969 C 44.542969 12.667969 44.167969 12.519531 44.167969 12.332031 L 44.167969 11.5 C 44.167969 11.40625 43.980469 11.332031 43.75 11.332031 L 41.25 11.332031 C 41.019531 11.332031 40.835938 11.40625 40.835938 11.5 L 40.835938 13 C 40.835938 13.183594 40.460938 13.332031 40 13.332031 C 39.542969 13.332031 39.167969 13.183594 39.167969 13 L 39.167969 11.5 C 39.167969 11.40625 38.980469 11.332031 38.75 11.332031 L 36.25 11.332031 C 36.019531 11.332031 35.832031 11.40625 35.832031 11.5 L 35.835938 12.332031 C 35.835938 12.515625 35.460938 12.667969 35 12.667969 C 34.539062 12.667969 34.167969 12.519531 34.167969 12.332031 L 34.167969 11.5 C 34.167969 11.40625 33.980469 11.332031 33.75 11.332031 L 31.25 11.332031 C 31.019531 11.332031 30.832031 11.40625 30.832031 11.5 L 30.835938 13 C 30.835938 13.183594 30.460938 13.332031 30 13.332031 C 29.539062 13.332031 29.167969 13.183594 29.167969 13 L 29.167969 11.5 C 29.167969 11.40625 28.980469 11.332031 28.75 11.332031 L 26.25 11.332031 C 26.019531 11.332031 25.832031 11.40625 25.832031 11.5 L 25.835938 12.332031 C 25.835938 12.515625 25.460938 12.667969 25 12.667969 C 24.539062 12.667969 24.167969 12.519531 24.167969 12.332031 L 24.167969 11.5 C 24.167969 11.40625 23.980469 11.332031 23.75 11.332031 L 21.25 11.332031 C 21.019531 11.332031 20.832031 11.40625 20.832031 11.5 L 20.835938 13 C 20.835938 13.183594 20.460938 13.332031 20 13.332031 C 19.539062 13.332031 19.167969 13.183594 19.167969 13 L 19.167969 11.5 C 19.167969 11.40625 18.980469 11.332031 18.75 11.332031 L 16.25 11.332031 C 16.019531 11.332031 15.832031 11.40625 15.832031 11.5 L 15.835938 12.332031 C 15.835938 12.515625 15.460938 12.667969 15 12.667969 C 14.539062 12.667969 14.167969 12.519531 14.167969 12.332031 L 14.167969 11.5 C 14.167969 11.40625 13.980469 11.332031 13.75 11.332031 L 11.25 11.332031 C 11.019531 11.332031 10.832031 11.40625 10.832031 11.5 L 10.835938 13 C 10.835938 13.183594 10.460938 13.332031 10 13.332031 C 9.539062 13.332031 9.167969 13.183594 9.167969 13 L 9.167969 11.5 C 9.167969 11.40625 8.980469 11.332031 8.75 11.332031 L 6.25 11.332031 C 6.019531 11.332031 5.832031 11.40625 5.832031 11.5 L 5.832031 12.332031 C 5.832031 12.519531 5.460938 12.667969 5 12.667969 C 4.539062 12.667969 4.167969 12.519531 4.167969 12.332031 L 4.167969 11.5 C 4.167969 11.40625 3.980469 11.332031 3.75 11.332031 L 0.417969 11.332031 C 0.1875 11.332031 0 11.40625 0 11.5 L 0 15.832031 C 0 15.925781 0.1875 16 0.417969 16 L 49.582031 16 C 49.8125 16 50 15.925781 50 15.832031 L 50 11.5 C 50 11.40625 49.8125 11.332031 49.582031 11.332031 Z M 49.582031 11.332031 "/>\n<path style=" stroke:none;fill-rule:nonzero;fill:rgb(100%,100%,100%);fill-opacity:0.8;" d="M 46.488281 7.121094 L 42.617188 5.121094 C 42.410156 5.011719 42.066406 4.972656 41.761719 5.019531 C 41.453125 5.066406 41.25 5.191406 41.25 5.332031 L 41.25 7 L 8.75 7 L 8.75 5.332031 C 8.75 5.191406 8.546875 5.066406 8.238281 5.019531 C 7.933594 4.972656 7.589844 5.011719 7.382812 5.121094 L 3.511719 7.121094 C 3.394531 7.183594 3.332031 7.257812 3.332031 7.332031 C 3.332031 7.410156 3.394531 7.484375 3.511719 7.546875 L 7.382812 9.546875 C 7.53125 9.625 7.75 9.667969 7.976562 9.667969 C 8.0625 9.667969 8.152344 9.660156 8.238281 9.648438 C 8.546875 9.597656 8.75 9.472656 8.75 9.332031 L 8.75 7.667969 L 41.25 7.667969 L 41.25 9.332031 C 41.25 9.472656 41.453125 9.597656 41.757812 9.648438 C 41.84375 9.660156 41.933594 9.667969 42.023438 9.667969 C 42.246094 9.667969 42.464844 9.625 42.617188 9.546875 L 46.488281 7.546875 C 46.605469 7.484375 46.667969 7.410156 46.667969 7.332031 C 46.667969 7.257812 46.605469 7.183594 46.488281 7.121094 Z M 46.488281 7.121094 "/>\n</g>\n</svg>\n',e}static metersLabelCallback(e){return`${e.toFixed(2)} m`}onKeyDown(e){e.metaKey||e.altKey||e.ctrlKey||"Escape"===e.key&&(this.cancelActiveMeasurement(),e.preventDefault())}cancelActiveMeasurement(){this._activeMeasurement&&(this._activeMeasurement.removeMeasurement(),this._activeMeasurement=void 0,this._viewer.requestRedraw(),this._viewer.domElement.removeEventListener("pointermove",this._handlePointerMove))}}J.defaultLineOptions={distanceToLabelCallback:e=>J.metersLabelCallback(e),lineWidth:.01,color:new e.Color(16746310)}})(),i})()));
|
|
3
3
|
//# sourceMappingURL=tools.js.map
|