UNPKG

@inweb/viewer-visualize

Version:

JavaScript library for rendering CAD and BIM files in a browser using VisualizeJS

1 lines 330 kB
!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?e(exports):"function"==typeof define&&define.amd?define(["exports"],e):e(((t="undefined"!=typeof globalThis?globalThis:t||self).ODA=t.ODA||{},t.ODA.Visualize=t.ODA.Visualize||{}))}(this,(function(t){"use strict";class e{constructor(){this._commands=new Map}registerCommand(t,e,i,s){this._commands.set(t,{id:t,handler:e,thisArg:s,description:i})}registerCommandAlias(t,e){this.registerCommand(e,((e,...i)=>this.executeCommand(t,e,...i)))}getCommand(t){return this._commands.get(t)}getCommands(){const t=new Map;return this._commands.forEach(((e,i)=>t.set(i,e))),t}executeCommand(t,e,...i){const s=this._commands.get(t);if(!s){if(e){if(e.draggers.includes(t))return e.setActiveDragger(t)}return void console.warn(`Command '${t}' not found`)}const{handler:r,thisArg:n}=s,o=r.apply(n,[e,...i]);return null==e||e.emit({type:"command",data:t,args:i}),o}}const i=new Map;function s(t=""){let s=i.get(t);return s||(s=new e,i.set(t,s)),s}class r{constructor(){this._providers=new Map}registerDragger(t,e){this._providers.set(t,e)}registerDraggerAlias(t,e){const i=this._providers.get(t);i&&this.registerDragger(e,(t=>i(t)))}getDraggers(){const t=new Map;return this._providers.forEach(((e,i)=>t.set(i,e))),t}createDragger(t,e){const i=this._providers.get(t);if(!i)return null;const s=i(e);return s.name=t,s}}const n=new Map;function o(t=""){let e=n.get(t);return e||(e=new r,n.set(t,e)),e}class a{constructor(){this._providers=new Map}registerComponent(t,e){this._providers.set(t,e)}registerComponentAlias(t,e){const i=this._providers.get(t);i&&this.registerComponent(e,(t=>i(t)))}getComponents(){const t=new Map;return this._providers.forEach(((e,i)=>t.set(i,e))),t}createComponent(t,e){const i=this._providers.get(t);if(!i)return null;const s=i(e);return s.name=t,s}}const h=new Map;function l(t=""){let e=h.get(t);return e||(e=new a,h.set(t,e)),e}class d{constructor(){this.name="",this.abortController=new AbortController}dispose(){this.abortController.abort(),this.abortController=void 0}isSupport(t,e){return!1}load(t,e,i){return Promise.resolve(this)}cancel(){this.abortController.abort()}}class c{constructor(){this._providers=new Map}registerLoader(t,e){this._providers.set(t,e)}getLoader(t){return this._providers.get(t)}getLoaders(){const t=new Map;return this._providers.forEach(((e,i)=>t.set(i,e))),t}createLoader(t,e,i){let s=null;return this._providers.forEach(((r,n)=>{const o=r(t);o.isSupport(e,i)&&(s=o,s.name=n)})),s}}const u=new Map;function g(t=""){let e=u.get(t);return e||(e=new c,u.set(t,e)),e}function f(){return{showWCS:!0,cameraAnimation:!0,antialiasing:!0,groundShadow:!1,shadows:!1,cameraAxisXSpeed:4,cameraAxisYSpeed:1,ambientOcclusion:!1,enableStreamingMode:!0,enablePartialMode:!1,memoryLimit:3294967296,cuttingPlaneFillColor:{red:255,green:152,blue:0},edgesColor:{r:255,g:152,b:0},facesColor:{r:255,g:152,b:0},edgesVisibility:!0,edgesOverlap:!0,facesOverlap:!1,facesTransparancy:200,enableCustomHighlight:!0,sceneGraph:!1,edgeModel:!0,reverseZoomWheel:!1,enableZoomWheel:!0,enableGestures:!0,geometryType:"vsfx",rulerUnit:"Default"}}class p{constructor(t){this._emitter=t,this._data={showWCS:!0,cameraAnimation:!0,antialiasing:!0,groundShadow:!1,shadows:!1,cameraAxisXSpeed:4,cameraAxisYSpeed:1,ambientOcclusion:!1,enableStreamingMode:!0,enablePartialMode:!1,memoryLimit:3294967296,cuttingPlaneFillColor:{red:255,green:152,blue:0},edgesColor:{r:255,g:152,b:0},facesColor:{r:255,g:152,b:0},edgesVisibility:!0,edgesOverlap:!0,facesOverlap:!1,facesTransparancy:200,enableCustomHighlight:!0,sceneGraph:!1,edgeModel:!0,reverseZoomWheel:!1,enableZoomWheel:!0,enableGestures:!0,geometryType:"vsfx",rulerUnit:"Default"},this.loadFromStorage()}static defaults(){return{showWCS:!0,cameraAnimation:!0,antialiasing:!0,groundShadow:!1,shadows:!1,cameraAxisXSpeed:4,cameraAxisYSpeed:1,ambientOcclusion:!1,enableStreamingMode:!0,enablePartialMode:!1,memoryLimit:3294967296,cuttingPlaneFillColor:{red:255,green:152,blue:0},edgesColor:{r:255,g:152,b:0},facesColor:{r:255,g:152,b:0},edgesVisibility:!0,edgesOverlap:!0,facesOverlap:!1,facesTransparancy:200,enableCustomHighlight:!0,sceneGraph:!1,edgeModel:!0,reverseZoomWheel:!1,enableZoomWheel:!0,enableGestures:!0,geometryType:"vsfx",rulerUnit:"Default"}}notifierChangeEvent(){console.warn("Options.notifierChangeEvent() has been deprecated since 25.3 and will be removed in a future release, use Options.change() instead."),this.change()}change(){void 0!==this._emitter&&(this.saveToStorage(),this._emitter.emit({type:"optionschange",data:this}))}saveToStorage(){if("undefined"!=typeof window)try{localStorage.setItem("od-client-settings",JSON.stringify(this.data))}catch(t){console.error("Cannot save client settings.",t)}}loadFromStorage(){if("undefined"!=typeof window)try{const t=localStorage.getItem("od-client-settings");if(t){const e=JSON.parse(t);this.data={...e}}}catch(t){console.error("Cannot load client settings.",t)}}resetToDefaults(t){if(void 0!==t){const e=p.defaults(),i=t.reduce(((t,i)=>(t[i]=e[i],t)),{});this.data={...this.data,...i}}else this.data={...this.data,...p.defaults()}}get data(){return this._data}set data(t){const e=!!t.enableStreamingMode&&t.enablePartialMode,i=!e&&t.sceneGraph;this._data={...p.defaults(),...this._data,...t,enablePartialMode:e,sceneGraph:i},this.change()}get showWCS(){return this._data.showWCS}set showWCS(t){this._data.showWCS=t,this.change()}get cameraAnimation(){return this._data.cameraAnimation}set cameraAnimation(t){this._data.cameraAnimation=t,this.change()}get antialiasing(){return this._data.antialiasing}set antialiasing(t){this._data.antialiasing=t,this.change()}get groundShadow(){return this._data.groundShadow}set groundShadow(t){this._data.groundShadow=t,this.change()}get shadows(){return this._data.shadows}set shadows(t){this._data.shadows=t,this.change()}get cameraAxisXSpeed(){return this._data.cameraAxisXSpeed}set cameraAxisXSpeed(t){this._data.cameraAxisXSpeed=t,this.change()}get cameraAxisYSpeed(){return this._data.cameraAxisYSpeed}set cameraAxisYSpeed(t){this.cameraAxisYSpeed=t,this.change()}get ambientOcclusion(){return this._data.ambientOcclusion}set ambientOcclusion(t){this._data.ambientOcclusion=t,this.change()}get enableStreamingMode(){return this._data.enableStreamingMode}set enableStreamingMode(t){this._data.enableStreamingMode=t,t||(this._data.enablePartialMode=!1),this.change()}get enablePartialMode(){return this._data.enablePartialMode}set enablePartialMode(t){this._data.enablePartialMode=t,t&&(this._data.enableStreamingMode=!0,this._data.sceneGraph=!1),this.change()}get memoryLimit(){return this._data.memoryLimit}set memoryLimit(t){this._data.memoryLimit=t,this.change()}get cuttingPlaneFillColor(){return this._data.cuttingPlaneFillColor}set cuttingPlaneFillColor(t){this._data.cuttingPlaneFillColor=t,this.change()}get edgesColor(){return this._data.edgesColor}set edgesColor(t){this._data.edgesColor=t,this.change()}get facesColor(){return this._data.facesColor}set facesColor(t){this._data.facesColor=t,this.change()}get edgesVisibility(){return this._data.edgesVisibility}set edgesVisibility(t){this._data.edgesVisibility=t,this.change()}get edgesOverlap(){return this._data.edgesOverlap}set edgesOverlap(t){this._data.edgesOverlap=t,this.change()}get facesOverlap(){return this._data.facesOverlap}set facesOverlap(t){this._data.facesOverlap=t,this.change()}get facesTransparancy(){return this._data.facesTransparancy}set facesTransparancy(t){this._data.facesTransparancy=t,this.change()}get enableCustomHighlight(){return this._data.enableCustomHighlight}set enableCustomHighlight(t){this._data.enableCustomHighlight=t,this.change()}get sceneGraph(){return this._data.sceneGraph}set sceneGraph(t){this._data.sceneGraph=t,t&&(this._data.enablePartialMode=!1),this.change()}get edgeModel(){return Boolean(this._data.edgeModel)}set edgeModel(t){this._data.edgeModel=Boolean(t),this.change()}get reverseZoomWheel(){return this._data.reverseZoomWheel}set reverseZoomWheel(t){this._data.reverseZoomWheel=!!t,this.change()}get enableZoomWheel(){return this._data.enableZoomWheel}set enableZoomWheel(t){this._data.enableZoomWheel=!!t,this.change()}get enableGestures(){return this._data.enableGestures}set enableGestures(t){this._data.enableGestures=!!t,this.change()}get geometryType(){return this._data.geometryType}set geometryType(t){this._data.geometryType=t,this.change()}get rulerUnit(){return this._data.rulerUnit}set rulerUnit(t){this._data.rulerUnit=t,this.change()}}const m=["click","contextmenu","dblclick","mousedown","mouseleave","mousemove","mouseup","pointercancel","pointerdown","pointerleave","pointermove","pointerup","touchcancel","touchend","touchmove","touchstart","wheel"],_=m;class v{constructor(t){this.setViewParams=t=>{var e;const i=this.m_module.getViewer().getActiveTvExtendedView();i.setView(t.position,t.target,t.upVector,t.viewFieldWidth,t.viewFieldHeight,t.perspective),null===(e=i.delete)||void 0===e||e.call(i)},this.getViewParams=()=>{var t;const e=this.m_module.getViewer().activeView,i={position:e.viewPosition,target:e.viewTarget,upVector:e.upVector,viewFieldWidth:e.viewFieldWidth,viewFieldHeight:e.viewFieldHeight,perspective:e.perspective};return null===(t=e.delete)||void 0===t||t.call(e),i},this.m_module=t}getViewer(){return this.m_module.getViewer()}getModel(){return this.getViewer().getMarkupModel()}copyPoint(t){const e=new this.m_module.Point3d;return e.set(t.x,t.y,t.z),e}createVector3d(){return new this.m_module.Vector3d}createPoint3d(){return new this.m_module.Point3d}createMatrix3d(){return new this.m_module.Matrix3d}createPlane(){return new this.m_module.OdTvPlane}toVector(t){return this.m_module.Vector3d.createFromArray(t)}toGeVector(t){return[t.x,t.y,t.z]}toGePoint(t){return[t.x,t.y,t.z]}toPoint(t){return this.m_module.Point3d.createFromArray(t)}screenToWorld(t,e){return this.toPoint(this.m_module.getViewer().screenToWorld(t,e))}toDoubleArray(t){const e=[];for(let i=0;i<t.length;i++)e.push(t[i].x),e.push(t[i].y),e.push(t[i].z);return e}correctCameraTarget(){const t=this.getViewParams(),e=this.m_module.getViewer().getActiveExtents(),{min:i,max:s}=e,r=this.toPoint(t.target);r.x>=i.x&&r.y>=i.y&&r.z>=i.z&&r.x<=s.x&&r.y<=s.y&&r.z<=s.z||(t.target=e.center(),this.setViewParams(t))}}class y extends v{constructor(t){super(t.visualizeJs),this.beginInteractivity=()=>{const t=this.getViewer().activeView;t.beginInteractivity&&(t.beginInteractivity(24),this.subject.update()),t.delete()},this.endInteractivity=()=>{const t=this.getViewer().activeView;if(t.endInteractivity){t.endInteractivity();const e=this.getViewer().getActiveDevice(),i=this.m_module.canvas;e.invalidate([0,0,i.width,i.height]),e.delete(),this.subject.update()}t.delete()},this.subject=t,this.needInputText=!1,this.mouseDownPosition={x:0,y:0},this.autoSelect=!1,this.onmessage=t=>this.subject.emitEvent(t),this.canvasEvents=_}initialize(){this.canvasEvents=this.canvasEvents.filter((t=>"function"==typeof this[t])),this.canvasEvents.forEach((t=>this[t]=this[t].bind(this))),this.canvasEvents.forEach((t=>this.subject.on(t,this[t]))),this.getViewer().setEnableAutoSelect(!!this.autoSelect)}dispose(){this.canvasEvents.forEach((t=>this.subject.off(t,this[t])))}relativeCoords(t){return{x:t.offsetX*window.devicePixelRatio,y:t.offsetY*window.devicePixelRatio}}pointerdown(t){if(!t.isPrimary||y.isGestureActive)return;t.target.setPointerCapture(t.pointerId);const e=this.relativeCoords(t);this.isDragging=!0,this.mouseDownPosition={x:e.x,y:e.y},this.start(e.x,e.y,t.clientX,t.clientY),this.subject.update()}pointerup(t){if(y.needSkipPointerUp)return;if(!t.isPrimary)return;t.target.releasePointerCapture(t.pointerId);const e=this.relativeCoords(t);this.end(e.x,e.y,t.clientX,t.clientY),this.isDragging=!1,this.subject.update()}pointercancel(t){t.isPrimary&&this.m_module.canvas.dispatchEvent(new PointerEvent("pointerup",t))}pointermove(t){if(!t.isPrimary||y.isGestureActive)return;const e=this.relativeCoords(t);this.drag(e.x,e.y,t.clientX,t.clientY),this.isDragging&&this.subject.update()}click(t){const e=this.getViewer(),i=this.relativeCoords(t),s=i.x,r=i.y,n=Math.abs(s-this.mouseDownPosition.x)<5&&Math.abs(r-this.mouseDownPosition.y)<5;if(e&&e.getEnableAutoSelect()&&n){e.unselect(),e.select(s,r,s,r),this.subject.update();const t=e.getSelected(),i=this.subject.getSelected();this.onmessage({type:"select",data:t,handles:i})}}dblclick(t){const e=this.getViewer(),i=this.relativeCoords(t),s=i.x,r=i.y,n=e.getActiveDevice(),o=n.viewAt([s,r]);if(o&&!o.active)e.activeView=o,o.delete(),this.subject.update();else if(e&&e.getEnableAutoSelect()){const t=e.getSelected();if(!t.isNull()&&0!==t.numItems()){const i=t.getIterator(),s=i.getEntity();e.zoomToEntity(s),this.onmessage({type:"zoomtoentity",data:s}),this.subject.update(),this.deleteAll([i,s])}}n.delete()}start(t,e,i=0,s=0){}drag(t,e,i=0,s=0){}end(t,e,i=0,s=0){}getActiveMarkupEntity(t){return this.subject.addMarkupEntity(t)}syncOverlayView(){return this.subject.syncOverlay()}deleteAll(t){var e;for(const i of t)null===(e=null==i?void 0:i.delete)||void 0===e||e.call(i)}updatePreview(){}static set isGestureActive(t){y._isGestureActive!==t&&(y._isGestureActive=t,y._isGestureActive&&(y.needSkipPointerUp=!0))}static get isGestureActive(){return y._isGestureActive}static get needSkipPointerUp(){return!!y._needSkipPointerUp&&(y.needSkipPointerUp=!1,!0)}static set needSkipPointerUp(t){y._needSkipPointerUp=t}}function w(t,e,i){return t||((t=document.createElement("div")).setAttribute("data-testid",i),e.appendChild(t)),t}function x(t,e){return t&&e.removeChild(t),null}function b(t,e,i){const s=e.Point3d.createFromArray(t),r=i.activeView,n=r.worldToDeviceMatrix,o=s.transformBy(n),a={x:o.x/window.devicePixelRatio,y:o.y/window.devicePixelRatio};return n.delete(),s.delete(),o.delete(),r.delete(),a}function S(t){return t<0?Math.ceil(t):Math.floor(t)}y._isGestureActive=!1,y._needSkipPointerUp=!1;function C(t,e,i,s,r){const n=((t,e,i,s)=>{const r=e.x-t.x,n=e.y-t.y,o=s.x-i.x,a=s.y-i.y,h=(-n*(t.x-i.x)+r*(t.y-i.y))/(-o*n+r*a),l=(+o*(t.y-i.y)-a*(t.x-i.x))/(-o*n+r*a);return h>=0&&h<=1&&l>=0&&l<=1&&{x:S(t.x+l*r),y:S(t.y+l*n)}})(t,e,i,s);n&&r.push(n)}function P(t,e,i){return t.x<=e&&t.x>=0&&t.y<=i&&t.y>=0}function A(t,e){t&&(t.onclick=e?()=>e():()=>{})}function T(t,e){t.style.pointerEvents=e?"auto":"none"}class k{constructor(t,e,i){this.htmlElemStartPoint=null,this.htmlElemEndPoint=null,this.htmlElemLine=null,this.htmlElemTitle=null,this.startPoint=null,this.endPoint=null,this.unit="",this.scale=1,this.size=10,this.lineThickness=2,this.style={border:"2px solid #FFFFFF",background:"#009bff",color:"white",boxShadow:"0 0 10px rgba(0,0,0,0.5)"},this.htmlElemStartPoint=w(this.htmlElemStartPoint,t,"ruler-start"),this.htmlElemEndPoint=w(this.htmlElemEndPoint,t,"ruler-end"),this.htmlElemLine=w(this.htmlElemLine,t,"ruler-line"),this.htmlElemTitle=w(this.htmlElemTitle,t,"ruler-value"),this.viewer=e,this.moduleInstance=i,this.targetElement=t,this.isFinishDraw=!1}drawMeasureLine(){const t=this.size,e=this.moduleInstance.canvas.getBoundingClientRect();if(this.startPoint){this.htmlElemStartPoint=w(this.htmlElemStartPoint,this.targetElement,"ruler-start");const i=b(this.startPoint,this.moduleInstance,this.viewer);P(i,e.width,e.height)?(this.htmlElemStartPoint.style.display="block",this.htmlElemStartPoint.style.cursor="pointer",this.htmlElemStartPoint.style.position="absolute",this.htmlElemStartPoint.style.top=i.y-t/2+"px",this.htmlElemStartPoint.style.left=i.x-t/2+"px",this.htmlElemStartPoint.style.borderRadius=`${t}px`,this.htmlElemStartPoint.style.border=this.style.border,this.htmlElemStartPoint.style.background=this.style.background,this.htmlElemStartPoint.style.zIndex="2",this.htmlElemStartPoint.style.width=`${t}px`,this.htmlElemStartPoint.style.height=`${t}px`,this.htmlElemStartPoint.style.boxShadow=this.style.boxShadow):this.htmlElemStartPoint.style.display="none"}if(this.endPoint&&this.isFinishDraw){this.htmlElemEndPoint=w(this.htmlElemEndPoint,this.targetElement,"ruler-end");const i=b(this.endPoint,this.moduleInstance,this.viewer);P(i,e.width,e.height)?(this.htmlElemEndPoint.style.display="block",this.htmlElemEndPoint.style.cursor="pointer",this.htmlElemEndPoint.style.position="absolute",this.htmlElemEndPoint.style.top=i.y-t/2+"px",this.htmlElemEndPoint.style.left=i.x-t/2+"px",this.htmlElemEndPoint.style.borderRadius=`${t}px`,this.htmlElemEndPoint.style.border=this.style.border,this.htmlElemEndPoint.style.background=this.style.background,this.htmlElemEndPoint.style.zIndex="2",this.htmlElemEndPoint.style.width=`${t}px`,this.htmlElemEndPoint.style.height=`${t}px`,this.htmlElemEndPoint.style.boxShadow=this.style.boxShadow):this.htmlElemEndPoint.style.display="none"}if(this.endPoint&&this.startPoint){const t=b(this.startPoint,this.moduleInstance,this.viewer),i=b(this.endPoint,this.moduleInstance,this.viewer),{p1:s,p2:r,angle:n,width:o}=function(t,e,i,s){const r={x:0,y:0},n={x:i,y:0},o={x:0,y:s},a={x:i,y:s},h=[];C(t,e,r,n,h),C(t,e,r,o,h),C(t,e,o,a,h),C(t,e,a,n,h);let l=null,d=null;0===h.length?(l=t,d=e):1===h.length?P(t,i,s)?(l=t,d=h[0]):(l=h[0],d=e):(l=h[0],d=h[1]);const c=d.x-l.x,u=d.y-l.y;let g=180*Math.atan(u/c)/Math.PI;return c<0&&(g-=180),{angle:g,width:Math.sqrt(Math.pow(c,2)+Math.pow(u,2)),p1:l,p2:d}}(t,i,e.width,e.height),a=r.x-s.x,h=r.y-s.y,l=this.lineThickness;if(P(s,e.width,e.height)&&P(r,e.width,e.height)){this.htmlElemLine=w(this.htmlElemLine,this.targetElement,"ruler-line"),this.htmlElemLine.style.display="block",this.htmlElemLine.style.cursor="pointer",this.htmlElemLine.style.position="absolute",this.htmlElemLine.style.top=`${s.y}px`,this.htmlElemLine.style.left=`${s.x}px`,this.htmlElemLine.style.width=`${o}px`,this.htmlElemLine.style.transform=`rotate(${n}deg)`,this.htmlElemLine.style.transformOrigin=`0px ${l/2}px`,this.htmlElemLine.style.boxShadow=this.style.boxShadow,this.htmlElemLine.style.border="none",this.htmlElemLine.style.background=this.style.background,this.htmlElemLine.style.zIndex="1",this.htmlElemLine.style.height=`${l}px`;const t=`${this.getDistance()} ${this.unit}`,e=s.x+a/2,i=s.y+h/2,r=10*t.length;this.htmlElemTitle=w(this.htmlElemTitle,this.targetElement,"ruler-value"),this.htmlElemTitle.style.display="block",this.htmlElemTitle.style.cursor="pointer",this.htmlElemTitle.style.font="10px",this.htmlElemTitle.style.color="white",this.htmlElemTitle.style.position="Absolute",this.htmlElemTitle.style.top=`${i}px`,this.htmlElemTitle.style.left=e-r/2+"px",this.htmlElemTitle.style.width=`${r}px`,this.htmlElemTitle.style.transformOrigin="0px 0px",this.htmlElemTitle.style.borderRadius="5px",this.htmlElemTitle.style.boxShadow=this.style.boxShadow,this.htmlElemTitle.style.border="none",this.htmlElemTitle.style.background=this.style.background,this.htmlElemTitle.style.zIndex="3",this.htmlElemTitle.style.padding="2px",this.htmlElemTitle.style.textAlign="center",this.htmlElemTitle.innerHTML=`${t}`}else this.htmlElemLine.style.display="none",this.htmlElemTitle.style.display="none"}}getDistance(){let t=function(t,e,i){const s=i.Point3d.createFromArray(t),r=i.Point3d.createFromArray(e),n=s.distanceTo(r).toFixed(2);return s.delete(),r.delete(),n}(this.startPoint,this.endPoint,this.moduleInstance);return Math.abs(this.scale-1)>1e-4&&(t=(t/this.scale).toFixed(2)),t}setStartPoint(t){this.startPoint=t,this.drawMeasureLine()}setEndPoint(t,e){this.isFinishDraw=void 0===e||e,this.endPoint=t,this.drawMeasureLine()}update(){this.drawMeasureLine()}setSize(t){this.size=t,this.drawMeasureLine()}clear(){this.endPoint=null,this.startPoint=null,this.htmlElemStartPoint=x(this.htmlElemStartPoint,this.targetElement),this.htmlElemEndPoint=x(this.htmlElemEndPoint,this.targetElement),this.htmlElemLine=x(this.htmlElemLine,this.targetElement),this.htmlElemTitle=x(this.htmlElemTitle,this.targetElement)}setUnit(t){this.unit=t,this.drawMeasureLine()}setConversionFactor(t){this.scale=t,this.drawMeasureLine()}setStyle(t){this.style=t,this.drawMeasureLine()}setSelectionReactor(t){A(this.htmlElemStartPoint,t?t.onStartPoint:null),A(this.htmlElemEndPoint,t?t.onEndPoint:null),A(this.htmlElemTitle,t?t.onTitle:null)}setSelectability(t){T(this.htmlElemStartPoint,t),T(this.htmlElemEndPoint,t),T(this.htmlElemLine,t),T(this.htmlElemTitle,t)}}function E(t,e){return t[e]||e}class M extends y{constructor(t){var e;super(t),this.lineThickness=2,this.press=!1,this.gripingRadius=5,this.firstPoint=null,this.secondPoint=null,this.renameUnitTable={Millimeters:"mm",Centimeters:"cm",Meters:"m",Feet:"ft",Inches:"in",Yards:"yd",Kilometers:"km",Miles:"mi",Micrometers:"µm",MicroInches:"µin",Default:"unit"},this.items=[],this.canvasEvents.push("resize"),this.oldRulerUnit=null!==(e=t.options.rulerUnit)&&void 0!==e?e:"Default",this.optionsChange=this.optionsChange.bind(this)}initialize(){super.initialize(),this.m_overlayElement=document.createElement("div"),this.m_overlayElement.style.background="rgba(0,0,0,0)",this.m_overlayElement.style.position="fixed",this.m_overlayElement.style.zIndex="1",this.m_overlayElement.style.pointerEvents="none",document.body.appendChild(this.m_overlayElement),this.subject.addEventListener("optionschange",this.optionsChange),this.resize()}dispose(){super.dispose(),this.m_overlayElement.remove(),this.subject.removeEventListener("optionschange",this.optionsChange)}updatePreview(){this.items.forEach((t=>t.update()))}resize(){const t=this.m_module.canvas.getBoundingClientRect();this.m_overlayElement.style.top=`${t.top}px`,this.m_overlayElement.style.left=`${t.left}px`,this.m_overlayElement.style.width=`${t.width}px`,this.m_overlayElement.style.height=`${t.height}px`}getSnapPointRadius(){const t=this.getViewer().activeView.viewDcCorners(),e=t.lowerLeft,i=t.upperRight;return i[0]-=e[0],i[1]-=e[1],Math.min(i[0],i[1])/120}start(t,e){this.createNewMeasureIfNeed();const i=this.getViewer().getSnapPoint(t,e,this.gripingRadius);i&&(this.firstPoint=i,this.previewMeasureLine.setStartPoint(this.firstPoint))}drag(t,e){this.createNewMeasureIfNeed();const i=this.getViewer().getSnapPoint(t,e,this.gripingRadius);this.isDragging?i?this.firstPoint?(this.secondPoint=i,this.previewMeasureLine.setStartPoint(this.firstPoint),this.previewMeasureLine.setEndPoint(this.secondPoint,!0)):(this.firstPoint=i,this.previewMeasureLine.setStartPoint(this.firstPoint)):(this.secondPoint=null,this.previewMeasureLine.clear(),this.previewMeasureLine.setStartPoint(this.firstPoint),this.previewMeasureLine.setEndPoint(this.getViewer().screenToWorld(t,e),!1)):i?this.previewMeasureLine.setStartPoint(i):this.previewMeasureLine.clear()}end(){if(this.firstPoint&&this.secondPoint){const t=this.createMeasureLine();t.setStartPoint(this.firstPoint),t.setEndPoint(this.secondPoint,!0)}this.firstPoint=null,this.secondPoint=null,this.previewMeasureLine.clear()}createNewMeasureIfNeed(){this.previewMeasureLine||(this.previewMeasureLine=this.createMeasureLine())}createMeasureLine(){const t=this.m_module.getViewer(),e=new k(this.m_overlayElement,t,this.m_module);e.lineThickness=this.lineThickness||e.lineThickness;const i=!this.subject.options.rulerUnit||"Default"===this.subject.options.rulerUnit;if(e.setUnit(E(this.renameUnitTable,i?t.getUnit():this.subject.options.rulerUnit)),i)e.setConversionFactor(1);else{const i=this.getKUnitByName(t.getUnit()),s=this.getKUnitByName(this.subject.options.rulerUnit),r=t.getUnitsConversionCoef(i,s);this.conversionFactor=1/r,e.setConversionFactor(this.conversionFactor)}return this.items.push(e),e}optionsChange(t){var e;const i=null!==(e=t.data.rulerUnit)&&void 0!==e?e:"Default";if(this.oldRulerUnit===i)return;this.oldRulerUnit=i;const s=this.m_module.getViewer().getUnit(),r=this.getKUnitByName(i),n=this.getKUnitByName(s);this.items.forEach((t=>{if("Default"===i)t.setUnit(E(this.renameUnitTable,s)),t.setConversionFactor(1);else{t.setUnit(E(this.renameUnitTable,i));const e=this.m_module.getViewer().getUnitsConversionCoef(n,r);this.conversionFactor=1/e,t.setConversionFactor(this.conversionFactor)}}))}getKUnitByName(t){let e=this.m_module.Units.kUserDefined;switch(t){case"Millimeters":e=this.m_module.Units.kMillimeters;break;case"Centimeters":e=this.m_module.Units.kCentimeters;break;case"Meters":e=this.m_module.Units.kMeters;break;case"Feet":e=this.m_module.Units.kFeet;break;case"Inches":e=this.m_module.Units.kInches;break;case"Yards":e=this.m_module.Units.kYards;break;case"Kilometers":e=this.m_module.Units.kKilometers;break;case"Miles":e=this.m_module.Units.kMiles;break;case"Micrometers":e=this.m_module.Units.kMicrometers;break;case"MicroInches":e=this.m_module.Units.kMicroInches}return e}}class F extends y{constructor(t){super(t),this.viewer=void 0,this.multiplier=5,this.speed=1,this.keyPressMap=new Set,this.keydown=this.keydown.bind(this),this.keyup=this.keyup.bind(this),this.lastFrameTS=0,this.animationId=void 0,this.processMovement=this.processMovement.bind(this),this.deltaAngle=Math.PI/3600,this.autoSelect=!0}initialize(){super.initialize(),this.viewer=this.getViewer(),window.addEventListener("keydown",this.keydown,!1),window.addEventListener("keyup",this.keyup,!1),this.oldWCSEnableValue=this.viewer.getEnableWCS(),this.viewer.setEnableWCS(!1);const t=this.viewer.activeView,e=this.getMaxDimension(t);this.speed=e/3e4,this.subject.emitEvent({type:"walkstart"}),this.viewParams=this.getViewParams(),this.setViewParams(this.viewParams);const i=this.viewer.getActiveModel();this.cameraId=i.appendCamera("Camera0"),this.setupCamera(t),i.delete(),this.cameraWalker=new this.m_module.OdTvCameraWalker,this.cameraWalker.setCamera(this.cameraId),this.subject.update(),this.enableZoomWheelPreviousValue=this.subject.options.enableZoomWheel,this.subject.options.enableZoomWheel=!1}dispose(){var t;if(this.oldWCSEnableValue=void 0!==this.oldWCSEnableValue?this.oldWCSEnableValue:this.subject.options.showWCS,this.viewer.setEnableWCS(this.oldWCSEnableValue),super.dispose(),this.keyPressMap.clear(),window.removeEventListener("keydown",this.keydown),window.removeEventListener("keyup",this.keyup),this.animationId&&(window.cancelAnimationFrame(this.animationId),this.animationId=void 0),this.cameraId){const e=this.viewer.getActiveModel();e.removeEntity(this.cameraId),e.delete(),null===(t=this.cameraWalker)||void 0===t||t.delete()}if(this.viewParams){this.setViewParams(this.viewParams);this.viewer.activeView.delete()}this.subject.update(!0),this.subject.options.enableZoomWheel=this.enableZoomWheelPreviousValue}keydown(t){switch(t.code){case"NumpadSubtract":case"Minus":this.multiplier>1&&(this.multiplier=this.multiplier-1,this.subject.emitEvent({type:"walkspeedchange",data:this.multiplier}));break;case"NumpadAdd":case"Equal":this.multiplier<10&&(this.multiplier=this.multiplier+1,this.subject.emitEvent({type:"walkspeedchange",data:this.multiplier}));break;case"KeyW":case"KeyA":case"KeyS":case"KeyD":case"KeyQ":case"KeyE":this.keyPressMap.add(t.code),this.animationId||this.processMovement(0)}}keyup(t){this.keyPressMap.delete(t.code),this.keyPressMap.size<1&&this.animationId&&(window.cancelAnimationFrame(this.animationId),this.animationId=void 0,this.lastFrameTS=0)}processMovement(t){if(this.animationId=requestAnimationFrame(this.processMovement),0!==this.lastFrameTS){const e=t-this.lastFrameTS,i=this.multiplier*e*this.speed;for(const t of this.keyPressMap)switch(t){case"KeyW":this.cameraWalker.moveForward(i);break;case"KeyS":this.cameraWalker.moveBackward(i);break;case"KeyA":this.cameraWalker.moveLeft(i);break;case"KeyD":this.cameraWalker.moveRight(i);break;case"KeyQ":this.cameraWalker.moveUp(i);break;case"KeyE":this.cameraWalker.moveDown(i)}this.subject.update()}this.lastFrameTS=t}start(t,e){this.dragPosition={x:t,y:e}}drag(t,e){if(this.cameraId&&this.isDragging){const i=t-this.dragPosition.x,s=e-this.dragPosition.y;this.dragPosition={x:t,y:e},0!==i&&this.turnLeft(-i*this.deltaAngle),0!==s&&this.cameraWalker.turnDown(s*this.deltaAngle),this.subject.update()}}turnLeft(t){const e=this.cameraWalker.camera().openObjectAsCamera(),i=this.toVector(e.direction()),s=this.toVector(e.upVector()),r=e.position(),n=this.createMatrix3d();n.setToRotation(t,[0,0,1],r),i.transformBy(n),s.transformBy(n),e.setupCameraByDirection(r,i.toArray(),s.toArray()),e.delete()}setupCamera(t){const e=this.cameraId.openObjectAsCamera(),i=t.viewTarget;e.setDisplayGlyph(!1),e.setDisplayTarget(!1),e.setAutoAdjust(!0),e.setupCamera(t.viewPosition,i,t.upVector),e.setNearClip(!1,1),e.setFarClip(!1,0),e.setViewParameters(t.viewFieldWidth,t.viewFieldHeight,!0);const s=(r=t.lensLength,n=t.viewFieldWidth,o=t.viewFieldHeight,r/42*Math.sqrt(n*n+o*o));var r,n,o;const a=this.toPoint(t.viewTarget),h=this.toPoint(t.viewPosition),l=h.sub(a),d=l.asVector(),c=d.normalize(),u=this.toGeVector(c),g=[u[0]*s,u[1]*s,u[2]*s],f=this.toPoint(t.viewTarget),p=this.toPoint(g),m=f.add(p);e.setupCamera(this.toGePoint(m),t.viewTarget,t.upVector),this.deleteAll([a,h,l,d,c,f,p,m]),e.assignView(t),e.delete()}getMaxDimension(t){const[e,i,s]=t.sceneExtents.max(),[r,n,o]=t.sceneExtents.min(),a=[e-r,i-n,s-o];return Math.max(...a)}}class I extends y{constructor(t){super(t),this.press=!1;const e=this.getViewer().getActiveExtents(),i=e.min(),s=e.max();this.m_size_x=Math.abs(s[0]-i[0])/2,this.m_size_y=Math.abs(s[1]-i[1])/2,this.m_size_z=Math.abs(s[2]-i[2])/2,this.m_center=this.toPoint(e.center()),this.m_normal=this.createNormal();const r=this.getViewer().activeView,n=this.createPlane();n.set(this.toGePoint(this.m_center),this.m_normal),r.addCuttingPlane(n),this.index=r.numCuttingPlanes()-1;const{red:o,green:a,blue:h}=this.subject.options.cuttingPlaneFillColor;r.setEnableCuttingPlaneFill(!0,o,a,h),r.setCuttingPlaneFillPatternEnabled(!0,this.m_module.CuttingPlaneFillStyle.kHorizontalBars,0,0,0),this.m_model=this.getModel(),this.createPreview(),this.deleteAll([e,r,n])}dispose(){super.dispose(),this.m_entity&&(this.m_model.removeEntity(this.m_entity),this.deleteAll([this.m_model,this.m_entity,this.planePreview,this.m_center]),this.m_entity=null,this.planePreview=null,this.subject.update())}createNormal(){return[0,0,0]}handleDelta(t){return t}getPlanePreviewCoordinate(){return[]}start(t,e){this.press=!0,this.m_last=this.screenToWorld(t,e),this.m_click={x:t,y:e}}drag(t,e){if(this.press){const i=this.screenToWorld(t,e),s=this.handleDelta(i.sub(this.m_last)),r=this.m_center;this.m_center=r.add(s);const n=this.m_last;this.m_last=i;const o=this.getViewer().activeView,a=this.createPlane(),h=a.set(this.toGePoint(this.m_center),this.m_normal),l=o.updateCuttingPlane(this.index,a);this.drawPreview(),this.deleteAll([o,a,r,s,n,h,l]);const d=this.getViewer().getActiveDevice();d.invalidate(d.getSize())}}end(t,e){if(this.press=!1,t===this.m_click.x&&e===this.m_click.y){this.m_normal=[-1*this.m_normal[0],-1*this.m_normal[1],-1*this.m_normal[2]];const t=this.getViewer().activeView,e=this.createPlane();e.set(this.toGePoint(this.m_center),this.m_normal),t.updateCuttingPlane(this.index,e),this.deleteAll([t,e,this.m_last]);const i=this.getViewer().getActiveDevice();i.invalidate(i.getSize())}}createPreview(){this.m_entity=this.m_model.appendEntity("&CuttingPlanePreview");const t=this.m_module.GeometryTypes,e=new this.m_module.OdTvTransparencyDef,i=new this.m_module.OdTvColorDef(112,112,112);e.setValue(.9);const s=this.m_entity.openObject();s.setColor(i,t.kFaces.value),i.setColor(112,112,112),s.setColor(i,t.kEdges.value),s.setLineWeight(5),s.setTransparency(e,t.kFaces),e.setValue(1),s.setTransparency(e,t.kEdges),this.planePreview=s.appendPolygon(this.getPlanePreviewCoordinate());const r=this.planePreview.openAsPolygon();r.setFilled(!0),this.deleteAll([e,i,s,r,t]),this.subject.syncOverlay()}drawPreview(){const t=this.planePreview.openAsPolygon();t.setPoints(this.getPlanePreviewCoordinate()),this.deleteAll([t]),this.subject.syncOverlay()}}class R extends I{createNormal(){return[1,0,0]}handleDelta(t){return t.y=0,t.z=0,t}getPlanePreviewCoordinate(){return[this.m_center.x,this.m_center.y-this.m_size_y,this.m_center.z-this.m_size_z,this.m_center.x,this.m_center.y+this.m_size_y,this.m_center.z-this.m_size_z,this.m_center.x,this.m_center.y+this.m_size_y,this.m_center.z+this.m_size_z,this.m_center.x,this.m_center.y-this.m_size_y,this.m_center.z+this.m_size_z]}}class O extends I{createNormal(){return[0,1,0]}handleDelta(t){return t.x=0,t.z=0,t}getPlanePreviewCoordinate(){return[this.m_center.x-this.m_size_x,this.m_center.y,this.m_center.z-this.m_size_z,this.m_center.x+this.m_size_x,this.m_center.y,this.m_center.z-this.m_size_z,this.m_center.x+this.m_size_x,this.m_center.y,this.m_center.z+this.m_size_z,this.m_center.x-this.m_size_x,this.m_center.y,this.m_center.z+this.m_size_z]}}class D extends I{createNormal(){return[0,0,1]}handleDelta(t){return t.x=0,t.y=0,t}getPlanePreviewCoordinate(){return[this.m_center.x-this.m_size_x,this.m_center.y-this.m_size_y,this.m_center.z,this.m_center.x+this.m_size_x,this.m_center.y-this.m_size_y,this.m_center.z,this.m_center.x+this.m_size_x,this.m_center.y+this.m_size_y,this.m_center.z,this.m_center.x-this.m_size_x,this.m_center.y+this.m_size_y,this.m_center.z]}}class L{constructor(t,e,i,s){this._m_module=t,this._subject=e,this._beginInteractivity=i,this._endInteractivity=s}beginAction(t,e){this.m_viewCenter=this.getCenter(),this.m_startPoint={x:t,y:e};this.getViewer().activeView.delete(),this._beginInteractivity()}action(t,e){var i,s;const r=this.getViewer().activeView,n=r.vportRect,o=Math.max(Math.abs(n[2]-n[0]),Math.abs(n[3]-n[1])),a=(this.m_startPoint.x-t)*Math.PI/o,h=(this.m_startPoint.y-e)*Math.PI/o;this.m_startPoint.x=t,this.m_startPoint.y=e;const l=h,d=a,c={position:r.viewPosition,target:r.viewTarget,upVector:r.upVector,viewFieldWidth:r.viewFieldWidth,viewFieldHeight:r.viewFieldHeight,perspective:r.perspective};r.delete();const u=this.getSideVector(c);0!==l&&this.calculateXOrbit(c,-l,u),0!==d&&this.calculateYOrbit(c,d,u),u.delete();const g=this.getViewer().getActiveTvExtendedView();g.setView(c.position,c.target,c.upVector,c.viewFieldWidth,c.viewFieldHeight,c.perspective),g.delete(),null===(s=null===(i=this._subject.activeDragger())||void 0===i?void 0:i.updatePreview)||void 0===s||s.call(i)}endAction(){this._endInteractivity()}getSideVector(t){const e=this.toVector(t.upVector),i=this.toPoint(t.target),s=this.toPoint(t.position),r=i.sub(s),n=r.asVector(),o=e.crossProduct(n),a=o.normalize();return this.deleteAll([r,e,i,s,n,o]),a}calculateXOrbit(t,e,i){{const s=this.toPoint(t.position),r=this.toPoint(this.m_viewCenter),n=s.rotateByBasePoint(e,i,r);t.position=n.toArray(),this.deleteAll([s,r,n])}{const s=this.toPoint(t.target),r=this.toPoint(this.m_viewCenter),n=s.rotateByBasePoint(e,i,r);t.target=n.toArray(),this.deleteAll([s,r,n])}{const e=this.toPoint(t.position),s=this.toPoint(t.target),r=this.toPoint(this.m_viewCenter),n=s.sub(e),o=n.asVector(),a=o.crossProduct(i),h=a.normalize();t.upVector=h.toArray(),this.deleteAll([e,s,r,n,o,a,h])}}calculateYOrbit(t,e,i){{const i=this.toPoint(t.position),s=this.toPoint(this.m_viewCenter),r=this.toVector(this._m_module.Vector3d.kZAxis),n=i.rotateByBasePoint(e,r,s);t.position=n.toArray(),this.deleteAll([r,i,s,n])}{const i=this.toPoint(t.target),s=this.toPoint(this.m_viewCenter),r=this.toVector(this._m_module.Vector3d.kZAxis),n=i.rotateByBasePoint(e,r,s);t.target=n.toArray(),this.deleteAll([r,i,s,n])}{const s=this.toVector(this._m_module.Vector3d.kZAxis),r=this.toPoint(t.target),n=this.toPoint(t.position),o=i.rotateBy(e,s),a=r.sub(n),h=a.asVector(),l=h.crossProduct(o),d=l.normalize();t.upVector=d.toArray(),this.deleteAll([s,r,n,o,a,h,l,d])}}getCenter(){const t=this.getViewer();let e;const i=t.getSelected();if(i.isNull()||0===i.numItems())e=t.getActiveExtents().center();else{const t=i.getIterator();let s,r,n;for(;!t.done();t.step())r=t.getEntity(),s=r.getWCSExtents(),n?n.addExt(s):n=s;e=n.center(),n.delete(),t.delete()}return e}getViewer(){return this._m_module.getViewer()}toVector(t){return this._m_module.Vector3d.createFromArray(t)}toPoint(t){return this._m_module.Point3d.createFromArray(t)}deleteAll(t){var e;for(const i of t)null===(e=null==i?void 0:i.delete)||void 0===e||e.call(i)}}class V extends y{constructor(t){super(t),this.autoSelect=!0,this.press=!1,this._orbitAction=new L(this.m_module,this.subject,this.beginInteractivity,this.endInteractivity)}start(t,e){this.press=!0,this._orbitAction.beginAction(t,e)}setDefaultViewParams(){const t=this.getViewer().getActiveTvExtendedView();t.setView(this.startCameraParams.position,this.startCameraParams.target,this.startCameraParams.upVector,this.startCameraParams.viewFieldWidth,this.startCameraParams.viewFieldHeight,this.startCameraParams.perspective),t.delete()}drag(t,e){this.press&&this._orbitAction.action(t,e)}end(){this.press=!1,this._orbitAction.endAction()}}class z{constructor(t,e,i,s,r,n){this._m_module=t,this._subject=e,this._beginInteractivity=i,this._endInteractivity=s,this._getViewParams=r,this._setViewParams=n}beginAction(t,e,i,s){this._m_start=this.screenToWorld(t,e),this._deltaScreenPosition={x:i,y:s},this._beginInteractivity()}action(t,e,i,s){var r,n;const{Vector3d:o}=this._m_module,a=this._getViewParams(),h=this.screenToWorld(t,e),l=this._m_start.sub(h).asVector(),d=o.createFromArray(a.target),c=d.add(l);a.target=c.toArray();const u=o.createFromArray(a.position),g=u.add(l);a.position=g.toArray(),this._setViewParams(a),d.delete(),c.delete(),u.delete(),g.delete(),null===(n=null===(r=this._subject.activeDragger())||void 0===r?void 0:r.updatePreview)||void 0===n||n.call(r),this._subject.emitEvent({type:"pan",x:i,y:s,dX:i-this._deltaScreenPosition.x,dY:s-this._deltaScreenPosition.y}),this._deltaScreenPosition={x:i,y:s}}endAction(){this._endInteractivity()}screenToWorld(t,e){return this._m_module.Point3d.createFromArray(this._m_module.getViewer().screenToWorld(t,e))}}class G extends y{constructor(t){super(t),this.autoSelect=!0,this.press=!1,this._panAction=new z(this.m_module,this.subject,this.beginInteractivity,this.endInteractivity,this.getViewParams,this.setViewParams)}start(t,e,i,s){this.press=!0,this._panAction.beginAction(t,e,i,s)}drag(t,e,i,s){this.press&&this._panAction.action(t,e,i,s)}end(t,e){this.press=!1,this._panAction.endAction()}}class N{constructor(t,e){this._m_module=t,this._subject=e}action(t,e,i,s,r){var n,o;this._m_module.getViewer().zoomAt(i,t,e),this._subject.deviceAutoRegeneration(),null===(o=null===(n=this._subject.activeDragger())||void 0===n?void 0:n.updatePreview)||void 0===o||o.call(n),this._subject.emitEvent({type:"zoomat",data:i,x:s,y:r})}}class W extends y{constructor(t){super(t),this.autoSelect=!0,this.press=!1,this._zoomAction=new N(this.m_module,this.subject)}start(t,e,i=0,s=0){this.press=!0,this.pressX=t,this.pressY=e,this.absoluteX=i,this.absoluteY=s,this.prevY=e,this.beginInteractivity()}drag(t,e){const i=e-this.prevY;if(this.prevY=e,this.press&&Math.abs(i)>=1e-5){const t=.975,e=i>0?1/t:t;this._zoomAction.action(this.pressX,this.pressY,e,this.absoluteX,this.absoluteY)}}end(){this.press=!1,this.endInteractivity()}}class U extends y{constructor(t){super(t),this.canvasEvents=["wheel"],this._zoomAction=new N(this.m_module,this.subject),this._endInteractivityTimeOutId=void 0,this._isEnableInteractivityMode=!1}wheel(t){if(!this.subject.options.enableZoomWheel)return;(t=t||window.event).preventDefault();const e=this.subject.options.reverseZoomWheel?.925:1/.925,i=this.subject.options.reverseZoomWheel?1/.925:.925;if(this.getViewer()){const s=t.deltaY>0?e:i;this._zoomAction.action(t.offsetX*window.devicePixelRatio,t.offsetY*window.devicePixelRatio,s,t.offsetX,t.offsetY),this._isEnableInteractivityMode||(this._isEnableInteractivityMode=!0,this.beginInteractivity()),this._endInteractivityTimeOutId&&clearTimeout(this._endInteractivityTimeOutId),this._isEnableInteractivityMode||(this._isEnableInteractivityMode=!0,this.beginInteractivity()),this._endInteractivityTimeOutId&&clearTimeout(this._endInteractivityTimeOutId),this.subject.update(!0),this._endInteractivityTimeOutId=setTimeout((()=>{this._endInteractivityTimeOutId=void 0,this.endInteractivity(),this._isEnableInteractivityMode=!1}),100)}}dispose(){this._endInteractivityTimeOutId&&(clearTimeout(this._endInteractivityTimeOutId),this.endInteractivity(),this._isEnableInteractivityMode=!1)}}class B{constructor(){this.m_start=[0,0,0],this.m_end=[0,0,0],this.m_model=null}createPoint3d(){return new this.m_module.Point3d}init(t,e){this.m_module=t,this.m_model=e}getViewer(){return this.m_module.getViewer()}setValue(t){this.m_end=t,this.draw()}setStartPoint(t){this.m_start=t,this.m_end=t,this.draw()}toDoubleArray(t){const e=[];for(let i=0;i<t.length;i++)e.push(t[i].x),e.push(t[i].y),e.push(t[i].z);return e}draw(){const t=this.getViewer().activeView,e=t.viewingMatrix,i=[];i.push(this.m_start),i.push(this.createPoint3d()),i.push(this.m_end),i.push(this.createPoint3d());const s=this.createPoint3d();s.set(this.m_start[0],this.m_start[1],this.m_start[2]);const r=this.createPoint3d();r.set(this.m_end[0],this.m_end[1],this.m_end[2]),s.transformBy(e),r.transformBy(e),i[1].x=s.x,i[3].x=r.x,i[1].y=r.y,i[3].y=s.y,i[1].z=i[3].z=r.z;const n=t.eyeToWorldMatrix;if(i[1].transformBy(n),i[3].transformBy(n),this.m_entity)this.m_frame.openAsPolygon().setPoints(this.toDoubleArray(i));else{this.m_entity=this.m_model.appendEntity("");const t=this.m_entity.openObject();t.setColor(112,112,112),t.setLineWeight(2),this.m_frame=t.appendPolygon(this.toDoubleArray(i)),t.delete()}}clear(){this.m_entity&&(this.m_model.removeEntity(this.m_entity),this.m_entity=null)}}class j extends y{constructor(t){super(t),this.autoSelect=!0,this.press=!1,this.needInputText=!1,this.m_frame=new B,this.m_frame.init(this.m_module,this.getModel())}start(t,e){this.press=!0,this.m_minX=t,this.m_minY=e;const i=this.screenToWorld(t,e);this.m_frame.setStartPoint(i)}drag(t,e){if(this.press){this.m_maxX=t,this.m_maxY=e;const i=this.screenToWorld(t,e);this.m_frame.setValue(i)}}end(t,e){this.press=!1,this.m_maxX=t,this.m_maxY=e,this.m_minX!==this.m_maxX&&this.m_minY!==this.m_maxY&&(this.m_frame.clear(),this.getViewer().zoomWindow(this.m_minX,this.m_minY,this.m_maxX,this.m_maxY))}}class H extends y{constructor(t){super(t),this.autoSelect=!0,this.press=!1,this.maxPolarAngle=Math.PI/2,this.minPolarAngle=0}start(t,e){this.press=!0,this.m_viewCenter=this.getCenter(),this.m_startPoint={x:t,y:e};const i=this.getViewer().activeView;this.startCameraParams=this.getViewParams();const s=i.vportRect;this.m_delta=Math.max(s[1]-s[0],s[2]-s[3]),this.beginInteractivity()}setDefaultViewParams(){this.setViewParams(this.startCameraParams)}drag(t,e){if(this.press){let i=t-this.m_startPoint.x,s=e-this.m_startPoint.y;i*=Math.PI/this.m_delta,s*=Math.PI/this.m_delta,this.setDefaultViewParams();const{Vector3d:r,Matrix3d:n}=this.m_module,o=r.createFromArray(this.startCameraParams.target),a=r.createFromArray(this.startCameraParams.position).sub(o),h=a.normalize(),l=new n;l.setToIdentity();const d=new n;d.setToIdentity();const c=r.createFromArray([h.x,h.y,h.z]),u=r.createFromArray(this.startCameraParams.upVector),g=c.crossProduct(u);let f=r.createFromArray([c.x,c.y,0]);f.length()<=1e-5?f.set(-g.y,g.x,0):f=f.normalize();i-=Math.sign(f.dotProduct(r.createFromArray([-1,0,0])))*f.angleTo(r.createFromArray([0,1,0]));let p=r.createFromArray([h.x,h.y,0]),m=0;p.length()<=1e-5?m=-h.z*Math.PI/2:(p=p.normalize(),m=-p.angleTo(h)),s-=m,l.setToRotation(-i,[0,0,1],[0,0,0]);const _=Math.max(this.minPolarAngle,Math.min(this.maxPolarAngle,s));d.setToRotation(_,[1,0,0],[0,0,0]);const v=l.postMultBy(d);let y=r.createFromArray([0,1,0]).transformBy(v);const w=r.createFromArray([0,0,1]).transformBy(v);y.setLength(a.length()),y=o.add(y);const x=this.getViewParams();x.position=y.toArray(),x.upVector=w.toArray(),this.setViewParams(x)}}end(){this.press=!1,this.endInteractivity()}getCenter(){const t=this.getViewer();let e=t.getActiveExtents();const i=t.getSelected();if(!i.isNull()&&0!==i.numItems()){const t=i.getIterator(),s=t.getEntity();if(1===s.getType()){const t=s.openObject();e.delete(),e=t.getExtents(),t.delete()}else if(2===s.getType()){const t=s.openObjectAsInsert(),i=t.getExtents();e.delete(),e=i.ext,i.delete(),t.delete()}t.delete()}const s=e.center();return e.delete(),s}}const Y=o("visualizejs");Y.registerDragger("Pan",(t=>new G(t))),Y.registerDragger("Orbit",(t=>new V(t))),Y.registerDragger("Zoom",(t=>new W(t))),Y.registerDragger("ZoomWindow",(t=>new j(t))),Y.registerDragger("ZoomWheel",(t=>new U(t))),Y.registerDragger("OrbitAroundBuilding",(t=>new H(t))),Y.registerDragger("MeasureLine",(t=>new M(t))),Y.registerDragger("CuttingPlaneXAxis",(t=>new R(t))),Y.registerDragger("CuttingPlaneYAxis",(t=>new O(t))),Y.registerDragger("CuttingPlaneZAxis",(t=>new D(t))),Y.registerDragger("Walk",(t=>new F(t)));const X=(t,e,i)=>{const{translate:s,scale:r,rotation:n}=t,o=new i.Matrix3d;o.setTranslation([s.x,s.y,s.z]);const a=new i.Matrix3d;a.setToRotation(n.angle,[n.x,n.y,n.z],e);const h=new i.Matrix3d;return h.setToScaling(r,e),a.postMultBy(o).postMultBy(h)};function K(t,e=0){if(!t.visualizeJs)return;t.visViewer().explode(e),t.update(),t.emitEvent({type:"explode",data:e})}function q(t,e=""){if(!t.visualizeJs)return;const i=t.visLib(),s=t.visViewer(),r=i.DefaultViewPosition;s.setDefaultViewPositionWithAnimation(r[e]),t.update(),t.emit({type:"viewposition",data:e})}function J(t){return"$"===t.getName()[0]}const Z=s("visualizejs");Z.registerCommand("applyModelTransform",(function(t,e){var i;if(!t.visualizeJs)return;if(!e.getModelTransformMatrix)return;const s=t.visLib(),r=s.getViewer(),n=r.getModelIterator();for(;!n.done();n.step()){const t=n.getModel(),i=e.getModelTransformMatrix(t.getDatabaseHandle());if(i){const e=t.getExtents();e.transformBy(t.getUnitsMatrix());const r=X(i,e.center(),s);t.setModelingMatrix(r,!0)}}n.delete(),null===(i=r.clearViewExtentsCache)||void 0===i||i.call(r),t.update()})),Z.registerCommand("clearMarkup",(function(t){t.clearOverlay()})),Z.registerCommand("clearSelected",(function(t){if(!t.visualizeJs)return;t.visViewer().unselect(),t.update(),t.emitEvent({type:"select",data:void 0,handles:[]})})),Z.registerCommand("clearSlices",(function(t){t.clearSlices()})),Z.registerCommand("createPreview",(function(t,e="image/jpeg",i=.25){var s;return t.visualizeJs&&(null===(s=t.canvas)||void 0===s?void 0:s.toDataURL(e,i))||""})),Z.registerCommand("explode",K),Z.registerCommand("collect",(function(t){K(t,0)})),Z.registerCommand("getDefaultViewPositions",(function(t){if(!t.visualizeJs)return[];const e=t.visLib().DefaultViewPosition;return Object.keys(e).filter((t=>"values"!==t))})),Z.registerCommand("getModels",(function(t){if(!t.visualizeJs)return[];const e=[],i=t.visViewer().getModelIterator();for(;!i.done();i.step()){const t=i.getModel();"$"!==t.getName()[0]&&e.push(t.getDatabaseHandle())}return i.delete(),e})),Z.registerCommand("getSelected",(function(t){if(!t.visualizeJs)return[];const e=[],i=t.visViewer().getSelected();if(!i.isNull()&&0!==i.numItems()){const t=i.getIterator();for(;!t.done();t.step()){const i=t.getEntity(),s=1===i.getType()?i.openObject():2===i.getType()?i.openObjectAsInsert():null;if(s){const t=s.getNativeDatabaseHandle();"-1"!==t&&e.push(t),s.delete()}}t.delete()}return e})),Z.registerCommand("hideSelected",(function(t){if(!t.visualizeJs)return;t.visViewer().hideSelectedObjects(!1),t.update(),t.emitEvent({type:"hide"}),t.emitEvent({type:"select",data:void 0,handles:[]})})),Z.registerCommand("isolateSelected",(function(t){if(!t.visualizeJs)return;t.visViewer().isolateSelectedObjects(!1),t.update(),t.emitEvent({type:"isolate"})})),Z.registerCommand("regenerateAll",(function(t){if(!t.visualizeJs)return;t.visViewer().regenAll(),t.update(),t.emit({type:"regenerateall"})})),Z.registerCommand("resetView",(function(t){t.visualizeJs&&(t.executeCommand("setActiveDragger"),t.executeCommand("clearSlices"),t.executeCommand("clearOverlay"),t.executeCommand("setMarkupColor"),t.executeCommand("clearSelected"),t.executeCommand("showAll"),t.executeCommand("explode",0),t.executeCommand("zoomToExtents",!0),t.executeCommand("k3DViewSW"),t.emit({type:"resetview"}))})),Z.registerCommand("selectModel",(function(t,e){if(!t.visualizeJs)return;const i=t.visViewer(),s=i.activeView,r=i.getModelIterator();for(;!r.done();r.step()){const n=r.getModel();if(n.getDatabaseHandle()===e){const e=s.selectCrossing([0,9999,9999,0],n);i.setSelected(e);const r=t.getSelected();t.update(),t.emitEvent({type:"select",data:e,handles:r}),e.delete();break}}r.delete()})),Z.registerCommand("setActiveDragger",(function(t,e=""){t.setActiveDragger(e)})),Z.registerCommand("setDefaultViewPosition",q),Z.registerCommand("setMarkupColor",(function(t,e=255,i=0,s=0){t.markup.setMarkupColor(e,i,s)})),Z.registerCommand("setSelected",(function(t,e=[]){if(!t.visualizeJs)return;const i=t.visLib(),s=i.getViewer(),r=new i.OdTvSelectionSet;null==e||e.forEach((t=>{const e=s.getEntityByOriginalHandle(t+"");e.isNull()||r.appendEntity(e)})),s.setSelected(r),t.update(),t.emitEvent({type:"select",data:r,handles:e}),r.delete()})),Z.registerCommand("showAll",(function(t){if(!t.visualizeJs)return;t.visViewer().unisolateSelectedObjects(!1),t.update(),t.emitEvent({type:"showall"})})),Z.registerCommand("zoomToExtents",(function(t,e=!1,i=t.options.cameraAnimation){if(!t.visualizeJs)return;const s=t.visViewer(),r=s.getEnableAnimation();s.setEnableAnimation(i),s.zoomExtents(e),s.update(),s.setEnableAnimation(r),t.deviceAutoRegeneration(),t.update(),t.emitEvent({type:"zoom"})})),Z.registerCommand("zoomToObjects",(function(t,e=[]){var i;if(!t.visualizeJs)return;const s=t.visLib(),r=t.visViewer(),n=new s.OdTvSelectionSet;e.forEach((t=>{const e=r.getEntityByOriginalHandle(t+"");e.isNull()||n.appendEntity(e)})),null===(i=r.zoomToObjects)||void 0===i||i.call(r,n),t.deviceAutoRegeneration(),t.update(),t.emitEvent({type:"zoom"}),n.delete()})),Z.registerCommand("zoomToSelected",(function(t){var e;if(!t.visualizeJs)return;const i=t.visViewer(),s=i.getSelected();null===(e=i.zoomToObjects)||void 0===e||e.call(i,s),t.deviceAutoRegeneration(),t.update(),t.emitEvent({type:"zoom"})})),Z.registerCommand("autoTransformAllModelsToCentralPoint",(async function(t,e){var i;if(!t.