UNPKG

@allincart-ag/dive

Version:

Allincart Spatial Framework

31 lines (29 loc) 28.9 kB
"use strict";var N=Object.defineProperty;var H=(a,i,e)=>i in a?N(a,i,{enumerable:!0,configurable:!0,writable:!0,value:e}):a[i]=e;var r=(a,i,e)=>H(a,typeof i!="symbol"?i+"":i,e);const w=require("./OrbitController-rMX8EHvJ.cjs"),s=require("three"),p=require("three-spritetext"),l=require("./PerspectiveCamera-CONx93im.cjs");class L extends s.OrthographicCamera{constructor(e,t,n){super(-1,1,1,-1,.1,100);r(this,"axesHelper");r(this,"_renderer");r(this,"_scene");r(this,"_camera");r(this,"_restoreViewport",new s.Vector4);this.layers.mask=l.COORDINATE_LAYER_MASK,this.axesHelper=new s.AxesHelper(.5),this.axesHelper.layers.mask=l.COORDINATE_LAYER_MASK,this.axesHelper.material.depthTest=!1,this.axesHelper.position.set(0,0,-1),this.axesHelper.setColors(new s.Color(F),new s.Color(Y),new s.Color(W));const o=new p("X",.2,v),h=new p("Y",.2,b),d=new p("Z",.2,C);o.layers.mask=l.COORDINATE_LAYER_MASK,h.layers.mask=l.COORDINATE_LAYER_MASK,d.layers.mask=l.COORDINATE_LAYER_MASK,o.position.set(.7,0,0),h.position.set(0,.7,0),d.position.set(0,0,.7),this.axesHelper.add(o),this.axesHelper.add(h),this.axesHelper.add(d),this.add(this.axesHelper),this._renderer=e,this._scene=t,this._camera=n,this._scene.add(this)}tick(){const e=this._scene.background;this._scene.background=null,this._renderer.webglrenderer.getViewport(this._restoreViewport),this._renderer.webglrenderer.setViewport(0,0,150,150),this._renderer.webglrenderer.autoClear=!1,this.setFromCameraMatrix(this._camera.matrix),this._renderer.webglrenderer.render(this._scene,this),this._renderer.webglrenderer.setViewport(this._restoreViewport),this._renderer.webglrenderer.autoClear=!0,this._scene.background=e}dispose(){this._scene.remove(this)}setFromCameraMatrix(e){this.axesHelper.rotation.setFromRotationMatrix(new s.Matrix4().extractRotation(e).invert())}}class S extends s.Object3D{constructor(){super();r(this,"isDIVELight",!0);r(this,"isDIVEAmbientLight",!0);r(this,"_light");this.name="DIVEAmbientLight",this._light=new s.AmbientLight(16777215,1),this._light.layers.mask=l.PRODUCT_LAYER_MASK,this.add(this._light)}setColor(e){this._light.color=e}setIntensity(e){this._light.intensity=e}setEnabled(e){this._light.visible=e}}class x extends s.Object3D{constructor(){super();r(this,"isDIVELight",!0);r(this,"isDIVEPointLight",!0);r(this,"isMovable",!0);r(this,"isSelectable",!0);r(this,"gizmo",null);r(this,"light");r(this,"mesh");this.name="DIVEPointLight",this.light=new s.PointLight(16777215,1),this.light.layers.mask=l.PRODUCT_LAYER_MASK,this.light.castShadow=!0,this.light.shadow.mapSize.width=512,this.light.shadow.mapSize.height=512,this.add(this.light);const e=.1,t=new s.SphereGeometry(e,e*320,e*320),n=new s.MeshBasicMaterial({color:this.light.color,transparent:!0,opacity:.8,side:s.FrontSide});this.mesh=new s.Mesh(t,n),this.mesh.layers.mask=l.UI_LAYER_MASK,this.add(this.mesh)}setColor(e){this.light.color=e,this.mesh.material.color=e}setIntensity(e){this.light.intensity=e,this.mesh.material.opacity=e>.8?.8:e*.8}setEnabled(e){this.light.visible=e}onMove(){Promise.resolve().then(()=>require("../plugins/state/index.cjs")).then(({State:e})=>{var t;(t=e.get(this.userData.id))==null||t.performAction("UPDATE_OBJECT",{id:this.userData.id,position:this.position})})}onSelect(){Promise.resolve().then(()=>require("../plugins/state/index.cjs")).then(({State:e})=>{var t;(t=e.get(this.userData.id))==null||t.performAction("SELECT_OBJECT",{id:this.userData.id})})}onDeselect(){Promise.resolve().then(()=>require("../plugins/state/index.cjs")).then(({State:e})=>{var t;(t=e.get(this.userData.id))==null||t.performAction("DESELECT_OBJECT",{id:this.userData.id})})}}class f extends s.Object3D{constructor(){super();r(this,"isDIVELight",!0);r(this,"isDIVESceneLight",!0);r(this,"_hemiLight");r(this,"_dirLight");this.name="DIVESceneLight",this._hemiLight=new s.HemisphereLight(16777215,16777215,2),this._hemiLight.layers.mask=l.PRODUCT_LAYER_MASK,this._hemiLight.position.set(0,50,0),this.add(this._hemiLight),this._dirLight=new s.DirectionalLight(16777215,3),this._dirLight.layers.mask=l.PRODUCT_LAYER_MASK,this._dirLight.position.set(1,1.75,1),this._dirLight.position.multiplyScalar(30),this._dirLight.castShadow=!0,this._dirLight.shadow.mapSize.width=2048,this._dirLight.shadow.mapSize.height=2048;const e=5;this._dirLight.shadow.camera.left=-5,this._dirLight.shadow.camera.right=e,this._dirLight.shadow.camera.top=e,this._dirLight.shadow.camera.bottom=-5,this._dirLight.shadow.camera.far=3500,this.add(this._dirLight)}setColor(e){this._hemiLight.color=e,this._dirLight.color=e}setIntensity(e){this._hemiLight.intensity=e*2,this._dirLight.intensity=e*3}setEnabled(e){this._hemiLight.visible=e,this._dirLight.visible=e}}const m=a=>a.parent?m(a.parent):a;class g extends s.Object3D{constructor(){super();r(this,"isSelectable",!0);r(this,"isMovable",!0);r(this,"isDIVENode",!0);r(this,"gizmo",null);r(this,"_positionWorldBuffer");r(this,"_boundingBox");this.layers.mask=l.PRODUCT_LAYER_MASK,this._positionWorldBuffer=new s.Vector3,this._boundingBox=new s.Box3}setPosition(e){if(!this.parent){this.position.set(e.x,e.y,e.z);return}const t=new s.Vector3(e.x,e.y,e.z);this.position.copy(this.parent.worldToLocal(t)),"isDIVEGroup"in this.parent&&this.parent.updateLineTo(this)}setRotation(e){this.rotation.set(e.x,e.y,e.z)}setScale(e){this.scale.set(e.x,e.y,e.z)}setVisibility(e){this.visible=e}setToWorldOrigin(){this.position.set(0,0,0),Promise.resolve().then(()=>require("../plugins/state/index.cjs")).then(({State:e})=>{var t;(t=e.get(this.userData.id))==null||t.performAction("UPDATE_OBJECT",{id:this.userData.id,position:this.getWorldPosition(this._positionWorldBuffer),rotation:this.rotation,scale:this.scale})})}onMove(){Promise.resolve().then(()=>require("../plugins/state/index.cjs")).then(({State:e})=>{var t;(t=e.get(this.userData.id))==null||t.performAction("UPDATE_OBJECT",{id:this.userData.id,position:this.getWorldPosition(this._positionWorldBuffer),rotation:this.rotation,scale:this.scale})})}onSelect(){Promise.resolve().then(()=>require("../plugins/state/index.cjs")).then(({State:e})=>{var t;(t=e.get(this.userData.id))==null||t.performAction("SELECT_OBJECT",{id:this.userData.id})})}onDeselect(){Promise.resolve().then(()=>require("../plugins/state/index.cjs")).then(({State:e})=>{var t;(t=e.get(this.userData.id))==null||t.performAction("DESELECT_OBJECT",{id:this.userData.id})})}}class E extends g{constructor(){super(...arguments);r(this,"isDIVEModel",!0);r(this,"_mesh",null);r(this,"_material",null);r(this,"_assetLoader",null)}async _getAssetLoader(){return this._assetLoader||(this._assetLoader=new(await Promise.resolve().then(()=>require("../plugins/assetloader/index.cjs"))).AssetLoader),this._assetLoader}async setFromURL(e){const n=await(await this._getAssetLoader()).load(e);this.setFromGLTF(n),Promise.resolve().then(()=>require("../plugins/state/index.cjs")).then(({State:o})=>{var h;(h=o.get(this.userData.id))==null||h.performAction("MODEL_LOADED",{id:this.userData.id})})}setFromGLTF(e){this.clear(),this._boundingBox.makeEmpty(),e.traverse(t=>{t.castShadow=!0,t.receiveShadow=!0,t.layers.mask=this.layers.mask,this._boundingBox.expandByObject(t),!this._mesh&&"isMesh"in t&&(this._mesh=t,this._material?this._mesh.material=this._material:this._material=t.material)}),this.add(e)}setMaterial(e){this._material||(this._material=new s.MeshStandardMaterial),e.vertexColors!==void 0&&(this._material.vertexColors=e.vertexColors),e.color!==void 0&&this._material.color.set(e.color),e.map!==void 0&&(this._material.map=e.map),e.normalMap!==void 0&&(this._material.normalMap=e.normalMap),e.roughness!==void 0&&(this._material.roughness=e.roughness),e.roughnessMap!==void 0&&(this._material.roughnessMap=e.roughnessMap,this._material.roughnessMap&&(this._material.roughness=1)),e.metalness!==void 0&&(this._material.metalness=e.metalness),e.metalnessMap!==void 0&&(this._material.metalnessMap=e.metalnessMap,this._material.metalnessMap&&(this._material.metalness=1)),this._mesh&&(this._mesh.material=this._material)}placeOnFloor(){var o,h,d,c;const e=this.getWorldPosition(this._positionWorldBuffer),t=e.clone();(h=(o=this._mesh)==null?void 0:o.geometry)==null||h.computeBoundingBox();const n=(c=(d=this._mesh)==null?void 0:d.geometry)==null?void 0:c.boundingBox;!n||!this._mesh||(e.y=e.y-this._mesh.localToWorld(n.min.clone()).y,e.y!==t.y&&Promise.resolve().then(()=>require("../plugins/state/index.cjs")).then(({State:_})=>{var u;(u=_.get(this.userData.id))==null||u.performAction("UPDATE_OBJECT",{id:this.userData.id,position:e,rotation:this.rotation,scale:this.scale})}))}dropIt(){if(!this.parent){console.warn("DIVEModel: dropIt() called on a model that is not in the scene.",this);return}const e=this._boundingBox.min.y*this.scale.y,t=this.localToWorld(this._boundingBox.getCenter(new s.Vector3).multiply(this.scale));t.y=e+this.position.y;const n=new s.Raycaster(t,new s.Vector3(0,-1,0));n.layers.mask=l.PRODUCT_LAYER_MASK;const o=n.intersectObjects(m(this).root.children,!0);if(o.length>0){const h=o[0].object;h.geometry.computeBoundingBox();const d=h.geometry.boundingBox,c=h.localToWorld(d.max.clone()),_=this.position.clone(),u=this.position.clone().setY(c.y).sub(new s.Vector3(0,e,0));if(this.position.copy(u),this.position.y===_.y)return;this.onMove()}}}class V extends g{constructor(){super();r(this,"isDIVEPrimitive",!0);r(this,"_mesh");this._mesh=new s.Mesh,this._mesh.layers.mask=l.PRODUCT_LAYER_MASK,this._mesh.castShadow=!0,this._mesh.receiveShadow=!0,this._mesh.material=new s.MeshStandardMaterial,this.add(this._mesh)}setGeometry(e){const t=this.assembleGeometry(e);t&&(this._mesh.geometry=t,this._boundingBox.setFromObject(this._mesh))}setMaterial(e){const t=this._mesh.material;e.vertexColors!==void 0&&(t.vertexColors=e.vertexColors),e.color!==void 0&&(t.color=new s.Color(e.color)),e.map!==void 0&&(t.map=e.map),e.normalMap!==void 0&&(t.normalMap=e.normalMap),e.roughness!==void 0&&(t.roughness=e.roughness),e.roughnessMap!==void 0&&(t.roughnessMap=e.roughnessMap,t.roughnessMap&&(t.roughness=1)),e.metalness!==void 0&&(t.metalness=e.metalness),e.metalnessMap!==void 0&&(t.metalnessMap=e.metalnessMap,t.metalnessMap&&(t.metalness=0)),this._mesh&&(this._mesh.material=t)}placeOnFloor(){var o,h,d,c;const e=this.getWorldPosition(this._positionWorldBuffer),t=e.clone();(h=(o=this._mesh)==null?void 0:o.geometry)==null||h.computeBoundingBox();const n=(c=(d=this._mesh)==null?void 0:d.geometry)==null?void 0:c.boundingBox;!n||!this._mesh||(e.y=e.y-this._mesh.localToWorld(n.min.clone()).y,e.y!==t.y&&Promise.resolve().then(()=>require("../plugins/state/index.cjs")).then(({State:_})=>{var u;(u=_.get(this.userData.id))==null||u.performAction("UPDATE_OBJECT",{id:this.userData.id,position:e,rotation:this.rotation,scale:this.scale})}))}dropIt(){if(!this.parent){console.warn("DIVEPrimitive: dropIt() called on a model that is not in the scene.",this);return}const e=this._boundingBox.min.y*this.scale.y,t=this.localToWorld(this._boundingBox.getCenter(new s.Vector3).multiply(this.scale));t.y=e+this.position.y;const n=new s.Raycaster(t,new s.Vector3(0,-1,0));n.layers.mask=l.PRODUCT_LAYER_MASK;const o=n.intersectObjects(m(this).root.children,!0);if(o.length>0){const h=o[0].object;h.geometry.computeBoundingBox();const d=h.geometry.boundingBox,c=h.localToWorld(d.max.clone()),_=this.position.clone(),u=this.position.clone().setY(c.y).sub(new s.Vector3(0,e,0));if(this.position.copy(u),this.position.y===_.y)return;this.onMove()}}assembleGeometry(e){switch(this._mesh.material.flatShading=!1,e.name.toLowerCase()){case"cylinder":return this.createCylinderGeometry(e);case"sphere":return this.createSphereGeometry(e);case"pyramid":return this._mesh.material.flatShading=!0,this.createPyramidGeometry(e);case"cube":case"box":return this.createBoxGeometry(e);case"cone":return this.createConeGeometry(e);case"wall":return this.createWallGeometry(e);case"plane":return this.createPlaneGeometry(e);default:return console.warn("DIVEPrimitive.assembleGeometry: Invalid geometry type:",e.name.toLowerCase()),null}}createCylinderGeometry(e){const t=new s.CylinderGeometry(e.width/2,e.width/2,e.height,64);return t.translate(0,e.height/2,0),t}createSphereGeometry(e){return new s.SphereGeometry(e.width/2,256,256)}createPyramidGeometry(e){const t=new Float32Array([-e.width/2,0,-e.depth/2,e.width/2,0,-e.depth/2,e.width/2,0,e.depth/2,-e.width/2,0,e.depth/2,0,e.height,0]),n=new Uint16Array([0,1,2,0,2,3,0,4,1,1,4,2,2,4,3,3,4,0]),o=new s.BufferGeometry;return o.setAttribute("position",new s.BufferAttribute(t,3)),o.setIndex(new s.BufferAttribute(n,1)),o.computeVertexNormals(),o.computeBoundingBox(),o.computeBoundingSphere(),o}createBoxGeometry(e){const t=new s.BoxGeometry(e.width,e.height,e.depth);return t.translate(0,e.height/2,0),t}createConeGeometry(e){const t=new s.ConeGeometry(e.width/2,e.height,256);return t.translate(0,e.height/2,0),t}createWallGeometry(e){const t=new s.BoxGeometry(e.width,e.height,e.depth||.05,16);return t.translate(0,e.height/2,0),t}createPlaneGeometry(e){const t=new s.BoxGeometry(e.width,e.height,e.depth);return t.translate(0,e.height/2,0),t}}class P extends g{constructor(){super();r(this,"isDIVEGroup",!0);r(this,"_members");r(this,"_lines");this.name="DIVEGroup",this._members=[],this._lines=[]}get members(){return this._members}setPosition(e){super.setPosition(e),this._members.forEach(t=>{"isDIVENode"in t&&t.onMove()})}setLinesVisibility(e,t){if(!t){this._lines.forEach(o=>{o.visible=e});return}const n=this._members.indexOf(t);n!==-1&&(this._lines[n].visible=e)}attach(e){if(this._members.includes(e))return this;const t=this.createLine();return this.add(t),this._lines.push(t),super.attach(e),this._members.push(e),this._updateLineTo(t,e),this.setLinesVisibility(!0,e),this}remove(e){const t=this._members.indexOf(e);if(t===-1)return this;const n=this._lines[t];return super.remove(n),this._lines.splice(t,1),super.remove(e),this._members.splice(t,1),this}updateLineTo(e){const t=this._members.indexOf(e);t!==-1&&this._updateLineTo(this._lines[t],e)}createLine(){const e=new s.BufferGeometry,t=new s.LineDashedMaterial({color:6710886,dashSize:.05,gapSize:.025}),n=new s.Line(e,t);return n.visible=!1,n}_updateLineTo(e,t){const n=[new s.Vector3(0,0,0),t.position.clone()];e.geometry.setFromPoints(n),e.computeLineDistances()}}class M extends s.Mesh{constructor(){const e=new s.PlaneGeometry(1,1);e.scale(1e3,1e3,1),e.rotateX(-Math.PI/2);const t=new s.MeshStandardMaterial({color:new s.Color(16777215),side:s.FrontSide});super(e,t);r(this,"isDIVEFloor",!0);this.name="Floor",this.layers.mask=l.PRODUCT_LAYER_MASK,this.receiveShadow=!0}setVisibility(e){this.visible=e}setColor(e){this.material.color=new s.Color(e)}}class R extends s.Object3D{constructor(){super();r(this,"isDIVERoot",!0);r(this,"_floor");this.name="Root",this._floor=new M,this.add(this._floor)}get floor(){return this._floor}computeSceneBB(){const e=new s.Box3;return this.children.forEach(t=>{"isDIVEFloor"in t||t.traverse(n=>{"isObject3D"in n&&e.expandByObject(n)})}),e}getSceneObject(e){let t;return this.traverse(n=>{t||n.userData.id===e.id&&(t=n)}),t}addSceneObject(e){let t=this.getSceneObject(e);if(t)return console.warn(`DIVERoot.addSceneObject: Scene object with id ${e.id} already exists`),t;switch(e.entityType){case"pov":break;case"light":{switch(e.type){case"scene":{t=new f;break}case"ambient":{t=new S;break}case"point":{t=new x;break}default:throw new Error(`DIVERoot.addSceneObject: Unknown light type: ${e.type}`)}t.name=e.name,t.userData.id=e.id,this.add(t),this._updateLight(t,e);break}case"model":{t=new E,t.name=e.name,t.userData.id=e.id,t.userData.uri=e.uri,this.add(t),this._updateModel(t,e);break}case"primitive":{t=new V,t.name=e.name,t.userData.id=e.id,this.add(t),this._updatePrimitive(t,e);break}case"group":{t=new P,t.name=e.name,t.userData.id=e.id,this.add(t),this._updateGroup(t,e);break}default:throw new Error(`DIVERoot.addSceneObject: Unknown entity type: ${e.entityType}`)}return t}updateSceneObject(e){const t=this.getSceneObject(e);if(!t){console.warn(`DIVERoot.updateSceneObject: Scene object with id ${e.id} does not exist`);return}switch(e.entityType){case"pov":break;case"light":{this._updateLight(t,e);break}case"model":{this._updateModel(t,e);break}case"primitive":{this._updatePrimitive(t,e);break}case"group":{this._updateGroup(t,e);break}default:throw new Error(`DIVERoot.updateSceneObject: Unknown entity type: ${e.entityType}`)}}deleteSceneObject(e){const t=this.getSceneObject(e);if(!t){console.warn(`DIVERoot.deleteSceneObject: Object with id ${e.id} not found`);return}switch(e.entityType){case"pov":break;case"light":{this._deleteLight(t);break}case"model":{this._deleteModel(t);break}case"primitive":{this._deletePrimitive(t);break}case"group":{this._deleteGroup(t);break}default:throw new Error(`DIVERoot.deleteSceneObject: Unknown entity type: ${e.entityType}`)}}_updateLight(e,t){t.name!==void 0&&t.name!==null&&(e.name=t.name),t.position!==void 0&&t.position!==null&&e.position.set(t.position.x,t.position.y,t.position.z),t.intensity!==void 0&&t.intensity!==null&&e.setIntensity(t.intensity),t.enabled!==void 0&&t.enabled!==null&&e.setEnabled(t.enabled),t.color!==void 0&&t.color!==null&&e.setColor(new s.Color(t.color)),t.visible!==void 0&&t.visible!==null&&(e.visible=t.visible),t.parentId!==void 0&&this._setParent({...t,parentId:t.parentId})}_updateModel(e,t){t.uri!==void 0&&e.setFromURL(t.uri),t.name!==void 0&&(e.name=t.name),t.position!==void 0&&e.setPosition(t.position),t.rotation!==void 0&&e.setRotation(t.rotation),t.scale!==void 0&&e.setScale(t.scale),t.visible!==void 0&&e.setVisibility(t.visible),t.material!==void 0&&e.setMaterial(t.material),t.parentId!==void 0&&this._setParent({...t,parentId:t.parentId})}_updatePrimitive(e,t){t.name!==void 0&&(e.name=t.name),t.geometry!==void 0&&e.setGeometry(t.geometry),t.position!==void 0&&e.setPosition(t.position),t.rotation!==void 0&&e.setRotation(t.rotation),t.scale!==void 0&&e.setScale(t.scale),t.visible!==void 0&&e.setVisibility(t.visible),t.material!==void 0&&e.setMaterial(t.material),t.parentId!==void 0&&this._setParent({...t,parentId:t.parentId})}_updateGroup(e,t){t.name!==void 0&&(e.name=t.name),t.position!==void 0&&e.setPosition(t.position),t.rotation!==void 0&&e.setRotation(t.rotation),t.scale!==void 0&&e.setScale(t.scale),t.visible!==void 0&&e.setVisibility(t.visible),t.bbVisible!==void 0&&e.setLinesVisibility(t.bbVisible),t.parentId!==void 0&&this._setParent({...t,parentId:t.parentId})}_deleteLight(e){this._detachTransformControls(e),e.parent.remove(e)}_deleteModel(e){this._detachTransformControls(e),e.parent.remove(e)}_deletePrimitive(e){this._detachTransformControls(e),e.parent.remove(e)}_deleteGroup(e){this._detachTransformControls(e);for(let t=e.members.length-1;t>=0;t--)this.attach(e.members[t]);e.parent.remove(e)}_setParent(e){const t=this.getSceneObject(e);if(e.parentId!==null){const n=this.getSceneObject({id:e.parentId,entityType:e.entityType});if(!n)return;n.attach(t)}else this.attach(t)}_detachTransformControls(e){this._findScene(e).children.find(t=>{"isTransformControls"in t&&t.detach()})}_findScene(e){return e.parent!==null?this._findScene(e.parent):e}}const k="#888888",T="#dddddd";class A extends s.Object3D{constructor(){super(),this.name="Grid";const i=new s.GridHelper(100,100,k,T);i.material.depthTest=!1,i.layers.mask=l.HELPER_LAYER_MASK,this.add(i)}setVisibility(i){this.visible=i}}class B extends s.Scene{constructor(){super();r(this,"_root");r(this,"_grid");this.background=new s.Color(16777215),this._root=new R,this.add(this._root),this._grid=new A,this.add(this._grid)}get root(){return this._root}get grid(){return this._grid}setBackground(e){this.background=new s.Color(e)}computeSceneBB(){return this.root.computeSceneBB()}}const D={canvas:void 0,antialias:!0,alpha:!0,powerPreference:"high-performance",precision:"highp",stencil:!1,depth:!0,logarithmicDepthBuffer:!1,shadows:!0,shadowQuality:"high"};class O{constructor(i,e,t){r(this,"_webglrenderer");r(this,"_settings");this._scene=i,this._camera=e,this._settings={...D,...t??{}},this._webglrenderer=new s.WebGLRenderer(this._settings),this._webglrenderer.shadowMap.enabled=this._settings.shadows,this._webglrenderer.shadowMap.type=this._settings.shadowQuality==="high"?s.PCFSoftShadowMap:this._settings.shadowQuality==="medium"?s.PCFShadowMap:s.BasicShadowMap}get webglrenderer(){return this._webglrenderer}setCanvas(i){this._webglrenderer.dispose(),this._settings.canvas=i,this._webglrenderer=new s.WebGLRenderer(this._settings)}render(){this._webglrenderer.render(this._scene,this._camera)}onResize(i,e){this._webglrenderer.setSize(i,e,!1)}dispose(){this._webglrenderer.dispose()}}class G{constructor(){r(this,"_renderer",null);r(this,"_lastTime",0);r(this,"_isRunning",!1);r(this,"_tickers",[])}start(){this._isRunning||(this._isRunning=!0,this._lastTime=performance.now(),requestAnimationFrame(this._tick.bind(this)))}stop(){this._isRunning=!1}setRenderer(i){this._renderer=i}addTicker(i){this._tickers.find(e=>e.uuid===i.uuid)||this._tickers.push(i)}hasTicker(i){return this._tickers.find(e=>e.uuid===i.uuid)!==void 0}removeTicker(i){const e=this._tickers.findIndex(t=>t.uuid===i.uuid);e!==-1&&this._tickers.splice(e,1)}dispose(){this.stop(),this._tickers.forEach(i=>{var e;return(e=i.dispose)==null?void 0:e.call(i)}),this._tickers=[],this._isRunning=!1,this._lastTime=0}_tick(i){var t;if(!this._isRunning)return;const e=(i-this._lastTime)/1e3;this._lastTime=i,this._tickers.forEach(n=>n.tick(e)),(t=this._renderer)==null||t.render(),requestAnimationFrame(this._tick.bind(this))}}class z{constructor(i,e){r(this,"_resizeObserver");r(this,"_width",0);r(this,"_height",0);this._resizeObserver=new ResizeObserver(t=>{for(const n of t){const{width:o,height:h}=n.contentRect;o===this._width&&h===this._height||(i.onResize(o,h),e.onResize(o,h),this._width=o,this._height=h)}}),this._observeCanvas(i.webglrenderer.domElement)}setCanvas(i){this._resizeObserver.disconnect(),this._observeCanvas(i)}dispose(){this._resizeObserver.disconnect()}_observeCanvas(i){if(i.parentElement)this._resizeObserver.observe(i.parentElement);else{const e=setInterval(()=>{i.parentElement&&(this._resizeObserver.observe(i.parentElement),clearInterval(e))},16)}}}const y={autoStart:!0,displayAxes:!1,...l.DIVEPerspectiveCameraDefaultSettings,...D};class U{constructor(i){r(this,"_renderer");r(this,"_scene");r(this,"_camera");r(this,"_resizeManager");r(this,"_clock");r(this,"_settings");this._settings={...y,...i??{}},this._scene=new B,this._camera=new l.DIVEPerspectiveCamera(this._settings),this._renderer=new O(this._scene,this._camera,this._settings),this._resizeManager=new z(this._renderer,this._camera),this._clock=new G,this._clock.setRenderer(this._renderer),this._settings.autoStart&&this.start()}get scene(){return this._scene}get camera(){return this._camera}get renderer(){return this._renderer}setCanvas(i){this._renderer.setCanvas(i),this._resizeManager.setCanvas(i)}get clock(){return this._clock}start(){this._clock.start()}stop(){this._clock.stop()}dispose(){this._clock.dispose(),this._resizeManager.dispose(),this._renderer.dispose()}}const v="#c20017",b="#00ab26",C="#0081d4",F=v,Y=b,W=C;window.DIVE={instances:[],get instance(){return window.DIVE.instances[0]}};const q={...y,...w.OrbitControllerDefaultSettings};class I{constructor(i){r(this,"_instanceId",s.MathUtils.generateUUID());r(this,"_settings");r(this,"_engine");r(this,"orbitController");r(this,"axisCamera");this._settings={...q,...i??{}},this._engine=new U(i),this.orbitController=new w.OrbitController(this._engine.camera,this._engine.renderer.webglrenderer.domElement,this._settings),this._engine.clock.addTicker(this.orbitController),this._settings.displayAxes?(this.axisCamera=new L(this._engine.renderer,this._engine.scene,this._engine.camera),this._engine.clock.addTicker(this.axisCamera)):this.axisCamera=null,Promise.resolve().then(()=>require("./package-BBfJ2Cc5.cjs")).then(e=>{console.log(`DIVE ${e.default.version} initialized successfully!`),console.log(` @@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@ @@@@+-:::::::---------------------==------------------------------=#@@@@ @@%=::::.......::---------------------------------------------------------+@@ @@+:::...........::-----------------------------------------------------------#@@ @@=:::.........::::::-------------------------------------------------------------%@ @%:::.......:::::::-----------------------------------------------------------------#@ @*:::.....:::::-----------------------------------------------------------------------*@ @%::::::.::::---------------------------------------------------------------------------@@ @@-:::::::::-----------------------------------------------------------------------------=@ @%::::::::--------------------------------------------------------------------------------%@ @+::::::::--------------------------------=@@@@@%-----------------------------------------%@ @=:::::::--------------------------------*@@ @@+---------------------------------------#@ @+:::::::-------------------------------*@ @*--------------------------------------%@ @#::::::::-----------------------------=@@ @@=-------------------------------------%@ @@-::::::::----------------------------@@ @@------------------------------------=@ @%:::::::::--------------------------*@ @*-----------------------------------@@ @*:::::::::-------------------------@@ @@----------------------------------%@ @#::::::::::----------------------%@ @%--------------------------------%@ @#:::::::::::-------------------=@@ @@=------------------------------%@ @@-::::::::::::----------------%@ @%----------------------------=@@ @@#::::::::::::::------------*@ @*--------------------------#@@ @@+::::::::::::::::--------@@ @@------------------------+@@ @@*:::::::::::::::::----@@ @@---------------------+@@ @@@-:::::::::::::::--#@ @#-----------------=%@@ @@%-::::::::::::-%@ @%-------------=%@@ @@@@+:::::::#@@ @@*-------*@@@@ @@@@@@@ @@@@@@ `)}),window.DIVE.instances.push(this)}static async QuickView(i,e){const t=new I(e);t.engine.scene.background=new s.Color(16777215),t.engine.scene.grid.setVisibility(!1),t.engine.scene.root.floor.setVisibility(!0),t.engine.camera.position.set(0,2,2),t.orbitController.target.set(0,.5,0);const n=new f;n.name="SceneLight",n.userData.id=s.MathUtils.generateUUID(),n.setEnabled(!0),n.visible=!0,n.setIntensity((e==null?void 0:e.lightIntensity)??1),n.setColor(new s.Color(16777215)),t.engine.scene.root.add(n);const o=new E;o.name="object",o.userData.id=s.MathUtils.generateUUID(),o.userData.uri=i,o.visible=!0,t.engine.scene.root.add(o),await o.setFromURL(i);const h=t.engine.scene.computeSceneBB(),d=t.orbitController.computeEncompassingView(h);return t.engine.camera.position.copy(d.position),t.orbitController.target.copy(d.target),t}get engine(){return this._engine}get canvas(){return this._engine.renderer.webglrenderer.domElement}setCanvas(i){this._engine.setCanvas(i),this._engine.clock.removeTicker(this.orbitController),this.orbitController.dispose(),this.orbitController=new w.OrbitController(this._engine.camera,i,this._settings),this._engine.clock.addTicker(this.orbitController)}async dispose(){return new Promise(i=>{this._engine.clock.removeTicker(this.orbitController),this.orbitController.dispose(),this.axisCamera&&(this._engine.clock.removeTicker(this.axisCamera),this.axisCamera.dispose()),window.DIVE.instances=window.DIVE.instances.filter(e=>e._instanceId!==this._instanceId),i()})}}const K={glb:{key:"glb",extension:"glb"},gltf:{key:"gltf",extension:"gltf"},usdz:{key:"usdz",extension:"usdz"}},J=Object.values(K).map(a=>a.extension);exports.AxesColorBlue=W;exports.AxesColorBlueLetter=C;exports.AxesColorGreen=Y;exports.AxesColorGreenLetter=b;exports.AxesColorRed=F;exports.AxesColorRedLetter=v;exports.DIVE=I;exports.DIVEAmbientLight=S;exports.DIVEAxisCamera=L;exports.DIVEClock=G;exports.DIVEDefaultSettings=q;exports.DIVEEngine=U;exports.DIVEFloor=M;exports.DIVEGrid=A;exports.DIVEGroup=P;exports.DIVEModel=E;exports.DIVENode=g;exports.DIVEPointLight=x;exports.DIVEPrimitive=V;exports.DIVERenderPipeline=O;exports.DIVERenderPipelineDefaultSettings=D;exports.DIVEResizeManager=z;exports.DIVERoot=R;exports.DIVEScene=B;exports.DIVESceneLight=f;exports.EngineDefaultSettings=y;exports.FILE_TYPES=K;exports.GRID_CENTER_LINE_COLOR=k;exports.GRID_SIDE_LINE_COLOR=T;exports.SUPPORTED_FILE_TYPES=J;exports.findSceneRecursive=m;