@selvajs/visualization 1.5.0 → 1.6.0-beta.0

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/dist/render.cjs CHANGED
@@ -104,5 +104,5 @@ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=requi
104
104
  float edge = max(depthEdge, normalEdge) * uOpacity;
105
105
  gl_FragColor = vec4(mix(color.rgb, uColor, edge), color.a);
106
106
  }
107
- `};var gt=class extends _.Pass{camera;scene;normalMaterial;edgeMaterial;fsQuad;normalTarget=null;width;height;constructor(e,t,n,i,a={}){super(),this.scene=e,this.camera=t,this.width=Math.max(1,n),this.height=Math.max(1,i),this.normalMaterial=new r.MeshNormalMaterial,this.normalMaterial.blending=r.NoBlending,this.edgeMaterial=new r.ShaderMaterial({uniforms:r.UniformsUtils.clone(ht.uniforms),vertexShader:ht.vertexShader,fragmentShader:ht.fragmentShader});let o=this.edgeMaterial.uniforms;o.uColor.value=new r.Color(a.color??2236962),o.uOpacity.value=a.opacity??1,o.uNormalThreshold.value=a.normalThreshold??.4,o.uDepthThreshold.value=a.depthThreshold??.02,o.uThickness.value=a.thickness??1,this.fsQuad=new _.FullScreenQuad(this.edgeMaterial),this.needsSwap=!0}acquireNormalTarget(){if(!this.normalTarget){let e=new r.DepthTexture(this.width,this.height);this.normalTarget=new r.WebGLRenderTarget(this.width,this.height,{minFilter:r.NearestFilter,magFilter:r.NearestFilter,depthTexture:e})}return this.normalTarget}setSize(e,t){this.width=Math.max(1,e),this.height=Math.max(1,t),this.normalTarget?.setSize(this.width,this.height)}render(e,t,n){let i=this.acquireNormalTarget(),a=e.getRenderTarget(),o=e.autoClear,s=e.getClearColor(new r.Color),c=e.getClearAlpha(),l=this.scene.overrideMaterial;e.setRenderTarget(i),e.setClearColor(7829503,1),e.autoClear=!0,this.scene.overrideMaterial=this.normalMaterial,e.render(this.scene,this.camera),this.scene.overrideMaterial=l,e.setClearColor(s,c),e.autoClear=o;let u=this.edgeMaterial.uniforms;u.tDiffuse.value=n.texture,u.tNormal.value=i.texture,u.tDepth.value=i.depthTexture,u.uResolution.value.set(this.width,this.height);let d=this.camera;u.uPerspective.value=+!!d.isPerspectiveCamera,u.uNear.value=this.camera.near??.1,u.uFar.value=this.camera.far??1e3,e.setRenderTarget(this.renderToScreen?null:t),this.fsQuad.render(e),e.setRenderTarget(a)}dispose(){this.normalTarget?.dispose(),this.normalMaterial.dispose(),this.edgeMaterial.dispose(),this.fsQuad.dispose()}};function _t(e){return e>=2?0:4}function vt(e,t,n,i,a,o){let s=new r.WebGLRenderTarget(i,a,{type:r.HalfFloatType}),c=new f.EffectComposer(e,s);c.renderTarget2.samples=0;let l=e=>{c.readBuffer=s,c.writeBuffer=c.renderTarget2,c.render(e)},u=new p.RenderPass(t,n);c.addPass(u);let d=null;(o.ambientOcclusion??!0)&&(d=new m.GTAOPass(t,n,i,a),d.blendIntensity=o.aoIntensity??1,d.updateGtaoMaterial({screenSpaceRadius:!0}),c.addPass(d));let _=new gt(t,n,i,a,typeof o.edgeDetection==`object`?o.edgeDetection:{});_.enabled=!!o.edgeDetection,c.addPass(_);let v=new h.SMAAPass;c.addPass(v);let y=new g.OutputPass;c.addPass(y),e.toneMapping=o.toneMapping,e.toneMappingExposure=o.toneMappingExposure;let b=o.aoPixelRatio??1,x=1;if(d){let e=d.setSize.bind(d);d.setSize=(t,n)=>e(Math.max(1,Math.round(t*x)),Math.max(1,Math.round(n*x)))}let S=e=>{x=Math.min(e,b)/e;let t=_t(e);s.samples!==t&&(s.samples=t,s.dispose()),c.setPixelRatio(e)};return S(e.getPixelRatio()),c.setSize(i,a),{render:l,setSize:(e,t,n)=>{S(n),c.setSize(e,t)},setCamera:e=>{if(u.camera=e,_.camera=e,!d)return;d.camera=e;let t=+!!e.isPerspectiveCamera;d.gtaoMaterial.defines.PERSPECTIVE_CAMERA!==t&&(d.gtaoMaterial.defines.PERSPECTIVE_CAMERA=t,d.gtaoMaterial.needsUpdate=!0)},setEdgeDetection:e=>{_.enabled=e},edgeDetectionEnabled:()=>_.enabled,dispose:()=>{c.dispose(),d?.dispose(),_.dispose(),v.dispose(),y.dispose()}}}function yt(e){let{renderer:t,scene:n,getActiveCamera:i,getCanvasSize:a,pixelRatio:o,config:s,requestRender:c}=e,l=null,u=!!s.render.ambientOcclusion,d=!1,f=!1,p=e=>{let{width:c,height:l}=a(),u=vt(t,n,i(),Math.max(1,c),Math.max(1,l),{toneMapping:s.render.toneMapping??r.NeutralToneMapping,toneMappingExposure:s.render.toneMappingExposure??1,ambientOcclusion:e,aoIntensity:s.render.aoIntensity,aoPixelRatio:s.render.aoPixelRatio,edgeDetection:!1});return u.setSize(Math.max(1,c),Math.max(1,l),o),u},m=()=>{if(!(u||d)){l?.dispose(),l=null,c();return}(!l||f!==u)&&(l?.dispose(),l=p(u),f=u),l.setEdgeDetection(d),c()};return{get:()=>l,sync:m,rebuild:()=>{l?.dispose(),l=null,m()},setAmbientOcclusion:e=>{u=e,m()},setEdgeFallback:e=>{e!==d&&(d=e,m())},isEdgeFallbackActive:()=>d,dispose:()=>{l?.dispose(),l=null}}}function bt(e,t,n){let r=new v.OrbitControls(e,t),i=n.camera.target;return i&&r.target.set(i.x,i.y,i.z),r.enableDamping=n.controls.enableDamping||!1,r.dampingFactor=n.controls.dampingFactor||.05,r.autoRotate=n.controls.autoRotate||!1,r.autoRotateSpeed=n.controls.autoRotateSpeed||.5,r.enableZoom=n.controls.enableZoom??!0,r.enablePan=n.controls.enablePan??!0,r.minDistance=n.controls.minDistance||.001,r.maxDistance=n.controls.maxDistance||1/0,r.screenSpacePanning=!1,r.maxPolarAngle=Math.PI,r.update(),r}function xt(e,n,i,a){i.environment.enableEnvironmentLighting?(O(e,n,ee(i.environment.sceneUp??Q)),new y.HDRLoader().load(i.environment.hdrPath||`/baseHDR.hdr`,function(o){if(a()){o.dispose();return}if(!o?.image){t.p().warn(`HDR loaded without image data; skipping environment map.`),o?.dispose(),i.events.onReady?.();return}o.mapping=r.EquirectangularReflectionMapping;let s=new r.PMREMGenerator(n);s.compileEquirectangularShader();let c=s.fromEquirectangular(o).texture;s.dispose(),e.environment=c,e.environmentIntensity=i.environment.environmentIntensity??1;let l=ee(i.environment.sceneUp??Q);e.environmentRotation.copy(l),i.environment.showEnvironment?(e.background=o,e.backgroundRotation.copy(l)):o.dispose(),i.events.onReady?.()},void 0,function(e){a()||(t.p().warn(`HDR texture could not be loaded, falling back to basic lighting:`,e),i.events.onReady?.())})):i.events.onReady?.()}function St(e,t){let n=t.floor.size,i=new r.PlaneGeometry(n,n),a=typeof t.floor.color==`string`?new r.Color(t.floor.color):t.floor.color,o=new r.MeshStandardMaterial({color:a,roughness:t.floor.roughness,metalness:t.floor.metalness,side:r.DoubleSide}),s=new r.Mesh(i,o);s.userData.id=`floor`,s.name=`floor`;let c=(t.environment?.sceneUp||Q).clone().normalize();s.quaternion.setFromUnitVectors(new r.Vector3(0,0,1),c),s.position.set(0,0,0),t.floor.receiveShadow&&t.render.enableShadows&&(s.receiveShadow=!0),e.add(s)}function Ct(e,t,n){if(n&&`emissive`in e){let n=e;n.emissive=t.clone(),n.emissiveIntensity=.6,n.color.lerp(t,.75),n.metalness=Math.min(n.metalness,.2),n.opacity<1&&(n.opacity=1,n.transparent=!1,n.depthWrite=!0);return}`color`in e&&(e.color=t.clone())}function wt(e,i,a,o){let s=new Set,c=new Map,l=null,u=null,d=null,f=new r.Raycaster,p=new r.Vector2,m=new r.Vector2,h=()=>a.getActiveCamera(),g=e=>{let t=e;for(;t;){if(!t.visible)return!1;t=t.parent}return!0},_=()=>{let e=B(i);if(e.isEmpty()){t.p().warn(`No objects to fit to view`);return}a.frameBounds(e,!1)},v=typeof o.events.selectionColor==`string`?new r.Color(o.events.selectionColor):o.events.selectionColor instanceof r.Color?o.events.selectionColor:new r.Color(`#ff0000`),y=()=>{l&&(l(),l=null,d?.dispose(),d=null),s.forEach(e=>{let t=e;if(c.has(e)){let n=c.get(e),a=t.material;a instanceof r.Material?a.dispose():Array.isArray(a)&&a.forEach(e=>e.dispose()),t.material=n,c.delete(e);let o=e;for(;o.parent;)o=o.parent;o!==i&&(n instanceof r.Material?n.dispose():n.forEach(e=>e.dispose()))}}),s.clear(),u=null},b=(e,t)=>{if(t&&e instanceof r.Mesh){let r=n.n(e).clone();return Ct(r,v,!0),d=r,l=be(e,t,r),!0}let i=e;if(!(i.material instanceof r.Material))return!1;let a=i.material.clone();return Ct(a,v,e instanceof r.Mesh),c.set(e,i.material),i.material=a,!0},x=null,S=-1,C=()=>{if(x===null||i.children.length!==S){let e=B(i);x=e.isEmpty()?1:e.getSize(new r.Vector3).length(),S=i.children.length}f.params.Points.threshold=x*.01},w=(t,n)=>{let r=e.getBoundingClientRect();p.x=(t-r.left)/r.width*2-1,p.y=-((n-r.top)/r.height)*2+1,C(),f.setFromCamera(p,h());for(let e of f.intersectObjects(i.children,!0))if(g(e.object)&&!z(e.object))return e;return null},T=e=>{m.set(e.clientX,e.clientY)},E=e=>{let t=new r.Vector2(e.clientX,e.clientY);if(m.distanceTo(t)>5)return;let n=w(e.clientX,e.clientY);if(!n){y(),o.events?.onBackgroundClicked?.({x:p.x,y:p.y});return}let i=n.object,a=ve(n),c=a?.index??null;s.has(i)&&c===u||(y(),s.add(i),u=c,b(i,a?.member??null),o.events?.onObjectSelected?.(i),a?o.events?.onMeshMetadataClicked?.({source:i.userData?.source,name:a.member.name,layer:a.member.layer,trackingKey:a.member.trackingKey,metadata:a.member.metadata}):i instanceof r.Mesh&&Object.keys(i.userData).length>0&&o.events?.onMeshMetadataClicked?.(i.userData))},D=e=>{let t=w(e.clientX,e.clientY);if(!t)return;let n=t.object;if(o.events?.onMeshDoubleClicked?.(n),!o.events?.enableDoubleClickZoom)return;let i=ve(t),s=i&&n instanceof r.Mesh?ye(n,i.member):new r.Box3().setFromObject(n);s.isEmpty()||a.frameBounds(s,!0)},O=e=>{if(o.events?.enableKeyboardControls)switch(e.key.toLowerCase()){case`f`:e.preventDefault(),_();break;case`escape`:e.preventDefault(),y();break;case` `:e.preventDefault(),_()}};return o.events?.enableClickToFocus&&(e.addEventListener(`mousedown`,T),e.addEventListener(`click`,E),e.addEventListener(`dblclick`,D)),o.events?.enableKeyboardControls&&(e.setAttribute(`tabindex`,`0`),e.addEventListener(`keydown`,O)),{dispose:()=>{e.removeEventListener(`mousedown`,T),e.removeEventListener(`click`,E),e.removeEventListener(`dblclick`,D),e.removeEventListener(`keydown`,O),y()},fitToView:_,clearSelection:y}}function Tt(e,t){let n=new r.AmbientLight(t.lighting.ambientLightColor,t.lighting.ambientLightIntensity);e.add(n);let i=null;if(t.lighting.enableHemisphereLight){i=new r.HemisphereLight(t.lighting.hemisphereSkyColor,t.lighting.hemisphereGroundColor,t.lighting.hemisphereIntensity);let n=t.environment.sceneUp??Q;i.position.copy(n),e.add(i)}if(!t.lighting.enableSunlight)return{ambient:n,hemisphere:i,sun:null};let a=new r.DirectionalLight(t.lighting.sunlightColor??16777215,t.lighting.sunlightIntensity),o=t.lighting.sunlightPosition;return o&&a.position.set(o.x,o.y,o.z),t.render.enableShadows?(a.castShadow=!0,a.shadow.mapSize.width=t.render.shadowMapSize||2048,a.shadow.mapSize.height=t.render.shadowMapSize||2048,a.shadow.bias=-1e-4,a.shadow.normalBias=.02,a.shadow.radius=4,e.add(a),e.add(a.target),{ambient:n,hemisphere:i,sun:a}):(e.add(a),{ambient:n,hemisphere:i,sun:null})}function Et(e,t){if(t.isEmpty())return;let n=t.getCenter(new r.Vector3),i=t.getSize(new r.Vector3).length()*.5*1.2,a=e.shadow.camera;a.left=-i,a.right=i,a.top=i,a.bottom=-i,e.target.position.copy(n),e.target.updateMatrixWorld();let o=e.position.distanceTo(n);a.near=Math.max(i*.01,o-i),a.far=o+i,a.updateProjectionMatrix()}function Dt(e,t,n){let i=new r.WebGLRenderer({antialias:t.render.antialias,canvas:e,alpha:!0,powerPreference:`high-performance`,preserveDrawingBuffer:t.render.preserveDrawingBuffer,logarithmicDepthBuffer:!1}),a=e.parentElement,o=a?a.clientWidth:window.innerWidth,s=a?a.clientHeight:window.innerHeight;return a&&(e.style.width=`100%`,e.style.height=`100%`,e.style.display=`block`),i.setSize(o,s,!1),i.setPixelRatio(n),t.render.enableShadows&&(i.shadowMap.enabled=!0,i.shadowMap.type=r.VSMShadowMap),i.toneMapping=t.render.toneMapping,i.toneMappingExposure=t.render.toneMappingExposure??1,i.outputColorSpace=r.SRGBColorSpace,i.sortObjects=!0,i}const Ot=function(e,n){let i=ot(n||{}),a=i.environment?.sceneUp||Q,o=i.render.pixelRatio??Math.min(window.devicePixelRatio,2),s=pt(i),c=ft(i,e);c.up.copy(a);let l=Dt(e,i,o);t.r(l.capabilities.getMaxAnisotropy()),n?.onMaxAnisotropy?.(l.capabilities.getMaxAnisotropy());let u=bt(c,e,i),d=re({scene:s,perspective:c,controls:u,onActiveCameraChange:()=>{},up:a}),f=()=>d.getActiveCamera(),p=!1;xt(s,l,i,()=>p);let m=Tt(s,i),h=m.sun,g=()=>{h&&Et(h,B(s))};i.floor?.enabled&&St(s,i);let _=i.floor?.enabled?s.children.find(e=>e.userData.id===`floor`)??null:null,v=i.grid.enabled?Be({cellSize:i.grid.cellSize,majorEvery:i.grid.majorEvery,cellColor:i.grid.cellColor,majorColor:i.grid.majorColor,fadeDistance:i.grid.fadeDistance,plane:i.grid.plane}):null;v&&s.add(v.object);let y=()=>{v&&v.fitToContent(B(s))},b=i.gizmo.enabled?it({camera:c,domElement:e,controller:d}):null,S=i.grid.plane??te(a),w=new r.Vector3(+(S===`x`),+(S===`y`),+(S===`z`)),T=a.clone().normalize(),D=i.camera.dynamicNear?Xe({camera:c,scene:s,groundNormals:()=>{let e=[];return v?.object.visible&&e.push(w),i.floor.enabled&&_?.visible&&e.push(T),e}}):null,O=Ve(e.parentElement??e,s),k=i.measure.enabled?Je({canvas:e,scene:s,getActiveCamera:f,labelLayer:O,options:{snapPixels:i.measure.snapPixels,color:i.measure.color,labelClassName:i.measure.labelClassName,displayUnit:i.measure.displayUnit,format:i.measure.format}}):null,A=i.events.enableEventHandlers===!1?{dispose:()=>{},fitToView:()=>{},clearSelection:()=>{}}:wt(e,s,d,i),j=nt();k&&j.register({id:`measure`,tool:k,priority:0}),b&&j.register({id:`gizmo`,tool:b,priority:-100});let M=0,N=0,P=e=>{M=e.clientX,N=e.clientY},ee=e=>Math.hypot(e.clientX-M,e.clientY-N)>5,F=e=>{ee(e)||j.handleClick(e)&&e.stopImmediatePropagation()};e.addEventListener(`mousedown`,P,{capture:!0}),e.addEventListener(`click`,F,{capture:!0});let I=e=>j.handleMove(e);e.addEventListener(`mousemove`,I,{passive:!0});let L=()=>{},R=(e,t)=>{Le(e,{color:i.edges.color,darken:i.edges.darken,width:i.edges.width,thresholdAngle:i.edges.thresholdAngle,distanceFade:i.edges.distanceFade,maxTriangles:i.edges.maxTriangles,maxSegments:i.edges.maxSegments,maxOverlays:i.edges.maxOverlays,...t}).then(()=>{z(e),L()})},z=e=>{if(i.edges.screenSpaceFallback===!1)return;let t=!1;e.traverse(e=>{let n=e.userData?.edgesSkipped;(n===`triangle-cap`||n===`overlay-budget`)&&(t=!0)}),U.setEdgeFallback(t)},ne=e=>{Re(e),U.setEdgeFallback(!1),L()},V=e.parentElement,H=()=>V?{width:V.clientWidth,height:V.clientHeight}:{width:window.innerWidth,height:window.innerHeight},U=yt({renderer:l,scene:s,getActiveCamera:f,getCanvasSize:H,pixelRatio:o,config:i,requestRender:()=>L()});U.sync();let W=dt({scene:s,renderer:l,lights:m,config:i,pipeline:U,requestRender:()=>L()}),{animate:ie,dispose:ae,invalidate:G,renderNow:K}=at(l,s,c,f,d,u,H,o,i.events.onFrame,v,b,()=>U.get(),O,D,i.render.onDemand??!0);return L=G,ie(),s.up.set(a.x,a.y,a.z),g(),y(),{scene:s,camera:c,controls:u,renderer:l,cameraController:d,grid:v,gizmo:b,measureTool:k,labelLayer:O,tools:j,applyEdges:R,clearEdges:ne,invalidate:G,captureImage:(e=`image/png`,t)=>(K(),new Promise(n=>l.domElement.toBlob(n,e,t))),setAmbientOcclusion:U.setAmbientOcclusion,setLook:W.setLook,setFillLights:W.setFillLights,setEnvironmentIntensity:W.setEnvironmentIntensity,setToneMappingExposure:W.setToneMappingExposure,setAoIntensity:W.setAoIntensity,getMaterialAppearance:W.getMaterialAppearance,updateShadowBounds:g,updateGridScale:y,dispose:()=>{p||(p=!0,ae(),A.dispose(),e.removeEventListener(`mousedown`,P,{capture:!0}),e.removeEventListener(`click`,F,{capture:!0}),e.removeEventListener(`mousemove`,I),k?.dispose(),O?.dispose(),b?.dispose(),v?.dispose(),U.dispose(),d.dispose(),u.dispose(),l.dispose(),l.forceContextLoss(),mt(s))},fitToView:A.fitToView,clearSelection:A.clearSelection,addUserGeometry:(e,t)=>{e.userData.source=t===void 0?x:C(t),s.add(e),L()},removeUserGeometry:e=>{e.removeFromParent(),t.t(e),L()},clearUserGeometry:e=>{s.children.filter(t=>E(t,e)).forEach(e=>{e.removeFromParent(),t.t(e)}),L()}}};exports.DEFAULT_LOOK=t.s,exports.ErrorCodes=t.h,exports.LOOKS=b,exports.LOOK_PRESETS=t.c,exports.SOURCE_COMPUTE=`compute`,exports.SOURCE_USER=x,exports.VisualizationError=t.g,exports.appIdFromSource=w,exports.appSource=C,exports.enableDebugLogging=t.f,exports.getLogger=t.p,exports.initThree=Ot,exports.isHostOwned=T,exports.isOwnedBy=E,exports.materialAppearanceForLook=t.d,exports.pickThreshold=Ge,exports.pointerToNdc=rt,exports.setLogger=t.m,exports.snapToVertex=qe,exports.updateScene=I;
107
+ `};var gt=class extends _.Pass{camera;scene;normalMaterial;edgeMaterial;fsQuad;normalTarget=null;width;height;constructor(e,t,n,i,a={}){super(),this.scene=e,this.camera=t,this.width=Math.max(1,n),this.height=Math.max(1,i),this.normalMaterial=new r.MeshNormalMaterial,this.normalMaterial.blending=r.NoBlending,this.edgeMaterial=new r.ShaderMaterial({uniforms:r.UniformsUtils.clone(ht.uniforms),vertexShader:ht.vertexShader,fragmentShader:ht.fragmentShader});let o=this.edgeMaterial.uniforms;o.uColor.value=new r.Color(a.color??2236962),o.uOpacity.value=a.opacity??1,o.uNormalThreshold.value=a.normalThreshold??.4,o.uDepthThreshold.value=a.depthThreshold??.02,o.uThickness.value=a.thickness??1,this.fsQuad=new _.FullScreenQuad(this.edgeMaterial),this.needsSwap=!0}acquireNormalTarget(){if(!this.normalTarget){let e=new r.DepthTexture(this.width,this.height);this.normalTarget=new r.WebGLRenderTarget(this.width,this.height,{minFilter:r.NearestFilter,magFilter:r.NearestFilter,depthTexture:e})}return this.normalTarget}setSize(e,t){this.width=Math.max(1,e),this.height=Math.max(1,t),this.normalTarget?.setSize(this.width,this.height)}render(e,t,n){let i=this.acquireNormalTarget(),a=e.getRenderTarget(),o=e.autoClear,s=e.getClearColor(new r.Color),c=e.getClearAlpha(),l=this.scene.overrideMaterial;e.setRenderTarget(i),e.setClearColor(7829503,1),e.autoClear=!0,this.scene.overrideMaterial=this.normalMaterial,e.render(this.scene,this.camera),this.scene.overrideMaterial=l,e.setClearColor(s,c),e.autoClear=o;let u=this.edgeMaterial.uniforms;u.tDiffuse.value=n.texture,u.tNormal.value=i.texture,u.tDepth.value=i.depthTexture,u.uResolution.value.set(this.width,this.height);let d=this.camera;u.uPerspective.value=+!!d.isPerspectiveCamera,u.uNear.value=this.camera.near??.1,u.uFar.value=this.camera.far??1e3,e.setRenderTarget(this.renderToScreen?null:t),this.fsQuad.render(e),e.setRenderTarget(a)}dispose(){this.normalTarget?.dispose(),this.normalMaterial.dispose(),this.edgeMaterial.dispose(),this.fsQuad.dispose()}};function _t(e){return e>=2?0:4}function vt(e,t,n,i,a,o){let s=new r.WebGLRenderTarget(i,a,{type:r.HalfFloatType}),c=new f.EffectComposer(e,s);c.renderTarget2.samples=0;let l=e=>{c.readBuffer=s,c.writeBuffer=c.renderTarget2,c.render(e)},u=new p.RenderPass(t,n);c.addPass(u);let d=null;(o.ambientOcclusion??!0)&&(d=new m.GTAOPass(t,n,i,a),d.blendIntensity=o.aoIntensity??1,d.updateGtaoMaterial({screenSpaceRadius:!0}),c.addPass(d));let _=new gt(t,n,i,a,typeof o.edgeDetection==`object`?o.edgeDetection:{});_.enabled=!!o.edgeDetection,c.addPass(_);let v=new h.SMAAPass;c.addPass(v);let y=new g.OutputPass;c.addPass(y),e.toneMapping=o.toneMapping,e.toneMappingExposure=o.toneMappingExposure;let b=o.aoPixelRatio??1,x=1;if(d){let e=d.setSize.bind(d);d.setSize=(t,n)=>e(Math.max(1,Math.round(t*x)),Math.max(1,Math.round(n*x)))}let S=e=>{x=Math.min(e,b)/e;let t=_t(e);s.samples!==t&&(s.samples=t,s.dispose()),c.setPixelRatio(e)};return S(e.getPixelRatio()),c.setSize(i,a),{render:l,setSize:(e,t,n)=>{S(n),c.setSize(e,t)},setCamera:e=>{if(u.camera=e,_.camera=e,!d)return;d.camera=e;let t=+!!e.isPerspectiveCamera;d.gtaoMaterial.defines.PERSPECTIVE_CAMERA!==t&&(d.gtaoMaterial.defines.PERSPECTIVE_CAMERA=t,d.gtaoMaterial.needsUpdate=!0)},setEdgeDetection:e=>{_.enabled=e},edgeDetectionEnabled:()=>_.enabled,dispose:()=>{c.dispose(),d?.dispose(),_.dispose(),v.dispose(),y.dispose()}}}function yt(e){let{renderer:t,scene:n,getActiveCamera:i,getCanvasSize:a,pixelRatio:o,config:s,requestRender:c}=e,l=null,u=!!s.render.ambientOcclusion,d=!1,f=!1,p=e=>{let{width:c,height:l}=a(),u=vt(t,n,i(),Math.max(1,c),Math.max(1,l),{toneMapping:s.render.toneMapping??r.NeutralToneMapping,toneMappingExposure:s.render.toneMappingExposure??1,ambientOcclusion:e,aoIntensity:s.render.aoIntensity,aoPixelRatio:s.render.aoPixelRatio,edgeDetection:!1});return u.setSize(Math.max(1,c),Math.max(1,l),o),u},m=()=>{if(!(u||d)){l?.dispose(),l=null,c();return}(!l||f!==u)&&(l?.dispose(),l=p(u),f=u),l.setEdgeDetection(d),c()};return{get:()=>l,sync:m,rebuild:()=>{l?.dispose(),l=null,m()},setAmbientOcclusion:e=>{u=e,m()},setEdgeFallback:e=>{e!==d&&(d=e,m())},isEdgeFallbackActive:()=>d,dispose:()=>{l?.dispose(),l=null}}}function bt(e,t,n){let r=new v.OrbitControls(e,t),i=n.camera.target;return i&&r.target.set(i.x,i.y,i.z),r.enableDamping=n.controls.enableDamping||!1,r.dampingFactor=n.controls.dampingFactor||.05,r.autoRotate=n.controls.autoRotate||!1,r.autoRotateSpeed=n.controls.autoRotateSpeed||.5,r.enableZoom=n.controls.enableZoom??!0,r.enablePan=n.controls.enablePan??!0,r.minDistance=n.controls.minDistance||.001,r.maxDistance=n.controls.maxDistance||1/0,r.screenSpacePanning=!1,r.maxPolarAngle=Math.PI,r.update(),r}function xt(e,n,i,a){i.environment.enableEnvironmentLighting?(O(e,n,ee(i.environment.sceneUp??Q)),new y.HDRLoader().load(i.environment.hdrPath||`/baseHDR.hdr`,function(o){if(a()){o.dispose();return}if(!o?.image){t.p().warn(`HDR loaded without image data; skipping environment map.`),o?.dispose(),i.events.onReady?.();return}o.mapping=r.EquirectangularReflectionMapping;let s=new r.PMREMGenerator(n);s.compileEquirectangularShader();let c=s.fromEquirectangular(o).texture;s.dispose(),e.environment=c,e.environmentIntensity=i.environment.environmentIntensity??1;let l=ee(i.environment.sceneUp??Q);e.environmentRotation.copy(l),i.environment.showEnvironment?(e.background=o,e.backgroundRotation.copy(l)):o.dispose(),i.events.onReady?.()},void 0,function(e){a()||(t.p().warn(`HDR texture could not be loaded, falling back to basic lighting:`,e),i.events.onReady?.())})):i.events.onReady?.()}function St(e,t){let n=t.floor.size,i=new r.PlaneGeometry(n,n),a=typeof t.floor.color==`string`?new r.Color(t.floor.color):t.floor.color,o=new r.MeshStandardMaterial({color:a,roughness:t.floor.roughness,metalness:t.floor.metalness,side:r.DoubleSide}),s=new r.Mesh(i,o);s.userData.id=`floor`,s.name=`floor`;let c=(t.environment?.sceneUp||Q).clone().normalize();s.quaternion.setFromUnitVectors(new r.Vector3(0,0,1),c),s.position.set(0,0,0),t.floor.receiveShadow&&t.render.enableShadows&&(s.receiveShadow=!0),e.add(s)}function Ct(e,t,n){if(n&&`emissive`in e){let n=e;n.emissive=t.clone(),n.emissiveIntensity=.6,n.color.lerp(t,.75),n.metalness=Math.min(n.metalness,.2),n.opacity<1&&(n.opacity=1,n.transparent=!1,n.depthWrite=!0);return}`color`in e&&(e.color=t.clone())}function wt(e,i,a,o){let s=new Set,c=new Map,l=null,u=null,d=null,f=new r.Raycaster,p=new r.Vector2,m=new r.Vector2,h=()=>a.getActiveCamera(),g=e=>{let t=e;for(;t;){if(!t.visible)return!1;t=t.parent}return!0},_=()=>{let e=B(i);if(e.isEmpty()){t.p().warn(`No objects to fit to view`);return}a.frameBounds(e,!1)},v=typeof o.events.selectionColor==`string`?new r.Color(o.events.selectionColor):o.events.selectionColor instanceof r.Color?o.events.selectionColor:new r.Color(`#ff0000`),y=()=>{l&&(l(),l=null,d?.dispose(),d=null),s.forEach(e=>{let t=e;if(c.has(e)){let n=c.get(e),a=t.material;a instanceof r.Material?a.dispose():Array.isArray(a)&&a.forEach(e=>e.dispose()),t.material=n,c.delete(e);let o=e;for(;o.parent;)o=o.parent;o!==i&&(n instanceof r.Material?n.dispose():n.forEach(e=>e.dispose()))}}),s.clear(),u=null},b=(e,t)=>{if(t&&e instanceof r.Mesh){let r=n.n(e).clone();return Ct(r,v,!0),d=r,l=be(e,t,r),!0}let i=e;if(!(i.material instanceof r.Material))return!1;let a=i.material.clone();return Ct(a,v,e instanceof r.Mesh),c.set(e,i.material),i.material=a,!0},x=null,S=-1,C=()=>{if(x===null||i.children.length!==S){let e=B(i);x=e.isEmpty()?1:e.getSize(new r.Vector3).length(),S=i.children.length}f.params.Points.threshold=x*.01},w=(t,n)=>{let r=e.getBoundingClientRect();p.x=(t-r.left)/r.width*2-1,p.y=-((n-r.top)/r.height)*2+1,C(),f.setFromCamera(p,h());for(let e of f.intersectObjects(i.children,!0))if(g(e.object)&&!z(e.object))return e;return null},T=e=>{m.set(e.clientX,e.clientY)},E=e=>{let t=new r.Vector2(e.clientX,e.clientY);if(m.distanceTo(t)>5)return;let n=w(e.clientX,e.clientY);if(!n){y(),o.events?.onBackgroundClicked?.({x:p.x,y:p.y});return}let i=n.object,a=ve(n),c=a?.index??null;s.has(i)&&c===u||(y(),s.add(i),u=c,b(i,a?.member??null),o.events?.onObjectSelected?.(i),a?o.events?.onMeshMetadataClicked?.({source:i.userData?.source,name:a.member.name,layer:a.member.layer,trackingKey:a.member.trackingKey,metadata:a.member.metadata}):i instanceof r.Mesh&&Object.keys(i.userData).length>0&&o.events?.onMeshMetadataClicked?.(i.userData))},D=e=>{let t=w(e.clientX,e.clientY);if(!t){o.events?.enableDoubleClickZoom&&a.frameBounds(B(i),!0);return}let n=t.object;if(o.events?.onMeshDoubleClicked?.(n),!o.events?.enableDoubleClickZoom)return;let s=ve(t),c=s&&n instanceof r.Mesh?ye(n,s.member):new r.Box3().setFromObject(n);c.isEmpty()||a.frameBounds(c,!0)},O=e=>{if(o.events?.enableKeyboardControls)switch(e.key.toLowerCase()){case`f`:e.preventDefault(),_();break;case`escape`:e.preventDefault(),y();break;case` `:e.preventDefault(),_()}};return o.events?.enableClickToFocus&&(e.addEventListener(`mousedown`,T),e.addEventListener(`click`,E),e.addEventListener(`dblclick`,D)),o.events?.enableKeyboardControls&&(e.setAttribute(`tabindex`,`0`),e.addEventListener(`keydown`,O)),{dispose:()=>{e.removeEventListener(`mousedown`,T),e.removeEventListener(`click`,E),e.removeEventListener(`dblclick`,D),e.removeEventListener(`keydown`,O),y()},fitToView:_,clearSelection:y}}function Tt(e,t){let n=new r.AmbientLight(t.lighting.ambientLightColor,t.lighting.ambientLightIntensity);e.add(n);let i=null;if(t.lighting.enableHemisphereLight){i=new r.HemisphereLight(t.lighting.hemisphereSkyColor,t.lighting.hemisphereGroundColor,t.lighting.hemisphereIntensity);let n=t.environment.sceneUp??Q;i.position.copy(n),e.add(i)}if(!t.lighting.enableSunlight)return{ambient:n,hemisphere:i,sun:null};let a=new r.DirectionalLight(t.lighting.sunlightColor??16777215,t.lighting.sunlightIntensity),o=t.lighting.sunlightPosition;return o&&a.position.set(o.x,o.y,o.z),t.render.enableShadows?(a.castShadow=!0,a.shadow.mapSize.width=t.render.shadowMapSize||2048,a.shadow.mapSize.height=t.render.shadowMapSize||2048,a.shadow.bias=-1e-4,a.shadow.normalBias=.02,a.shadow.radius=4,e.add(a),e.add(a.target),{ambient:n,hemisphere:i,sun:a}):(e.add(a),{ambient:n,hemisphere:i,sun:null})}function Et(e,t){if(t.isEmpty())return;let n=t.getCenter(new r.Vector3),i=t.getSize(new r.Vector3).length()*.5*1.2,a=e.shadow.camera;a.left=-i,a.right=i,a.top=i,a.bottom=-i,e.target.position.copy(n),e.target.updateMatrixWorld();let o=e.position.distanceTo(n);a.near=Math.max(i*.01,o-i),a.far=o+i,a.updateProjectionMatrix()}function Dt(e,t,n){let i=new r.WebGLRenderer({antialias:t.render.antialias,canvas:e,alpha:!0,powerPreference:`high-performance`,preserveDrawingBuffer:t.render.preserveDrawingBuffer,logarithmicDepthBuffer:!1}),a=e.parentElement,o=a?a.clientWidth:window.innerWidth,s=a?a.clientHeight:window.innerHeight;return a&&(e.style.width=`100%`,e.style.height=`100%`,e.style.display=`block`),i.setSize(o,s,!1),i.setPixelRatio(n),t.render.enableShadows&&(i.shadowMap.enabled=!0,i.shadowMap.type=r.VSMShadowMap),i.toneMapping=t.render.toneMapping,i.toneMappingExposure=t.render.toneMappingExposure??1,i.outputColorSpace=r.SRGBColorSpace,i.sortObjects=!0,i}const Ot=function(e,n){let i=ot(n||{}),a=i.environment?.sceneUp||Q,o=i.render.pixelRatio??Math.min(window.devicePixelRatio,2),s=pt(i),c=ft(i,e);c.up.copy(a);let l=Dt(e,i,o);t.r(l.capabilities.getMaxAnisotropy()),n?.onMaxAnisotropy?.(l.capabilities.getMaxAnisotropy());let u=bt(c,e,i),d=re({scene:s,perspective:c,controls:u,onActiveCameraChange:()=>{},up:a}),f=()=>d.getActiveCamera(),p=!1;xt(s,l,i,()=>p);let m=Tt(s,i),h=m.sun,g=()=>{h&&Et(h,B(s))};i.floor?.enabled&&St(s,i);let _=i.floor?.enabled?s.children.find(e=>e.userData.id===`floor`)??null:null,v=i.grid.enabled?Be({cellSize:i.grid.cellSize,majorEvery:i.grid.majorEvery,cellColor:i.grid.cellColor,majorColor:i.grid.majorColor,fadeDistance:i.grid.fadeDistance,plane:i.grid.plane}):null;v&&s.add(v.object);let y=()=>{v&&v.fitToContent(B(s))},b=i.gizmo.enabled?it({camera:c,domElement:e,controller:d}):null,S=i.grid.plane??te(a),w=new r.Vector3(+(S===`x`),+(S===`y`),+(S===`z`)),T=a.clone().normalize(),D=i.camera.dynamicNear?Xe({camera:c,scene:s,groundNormals:()=>{let e=[];return v?.object.visible&&e.push(w),i.floor.enabled&&_?.visible&&e.push(T),e}}):null,O=Ve(e.parentElement??e,s),k=i.measure.enabled?Je({canvas:e,scene:s,getActiveCamera:f,labelLayer:O,options:{snapPixels:i.measure.snapPixels,color:i.measure.color,labelClassName:i.measure.labelClassName,displayUnit:i.measure.displayUnit,format:i.measure.format}}):null,A=i.events.enableEventHandlers===!1?{dispose:()=>{},fitToView:()=>{},clearSelection:()=>{}}:wt(e,s,d,i),j=nt();k&&j.register({id:`measure`,tool:k,priority:0}),b&&j.register({id:`gizmo`,tool:b,priority:-100});let M=0,N=0,P=e=>{M=e.clientX,N=e.clientY},ee=e=>Math.hypot(e.clientX-M,e.clientY-N)>5,F=e=>{ee(e)||j.handleClick(e)&&e.stopImmediatePropagation()};e.addEventListener(`mousedown`,P,{capture:!0}),e.addEventListener(`click`,F,{capture:!0});let I=e=>j.handleMove(e);e.addEventListener(`mousemove`,I,{passive:!0});let L=()=>{},R=(e,t)=>{Le(e,{color:i.edges.color,darken:i.edges.darken,width:i.edges.width,thresholdAngle:i.edges.thresholdAngle,distanceFade:i.edges.distanceFade,maxTriangles:i.edges.maxTriangles,maxSegments:i.edges.maxSegments,maxOverlays:i.edges.maxOverlays,...t}).then(()=>{z(e),L()})},z=e=>{if(i.edges.screenSpaceFallback===!1)return;let t=!1;e.traverse(e=>{let n=e.userData?.edgesSkipped;(n===`triangle-cap`||n===`overlay-budget`)&&(t=!0)}),U.setEdgeFallback(t)},ne=e=>{Re(e),U.setEdgeFallback(!1),L()},V=e.parentElement,H=()=>V?{width:V.clientWidth,height:V.clientHeight}:{width:window.innerWidth,height:window.innerHeight},U=yt({renderer:l,scene:s,getActiveCamera:f,getCanvasSize:H,pixelRatio:o,config:i,requestRender:()=>L()});U.sync();let W=dt({scene:s,renderer:l,lights:m,config:i,pipeline:U,requestRender:()=>L()}),{animate:ie,dispose:ae,invalidate:G,renderNow:K}=at(l,s,c,f,d,u,H,o,i.events.onFrame,v,b,()=>U.get(),O,D,i.render.onDemand??!0);return L=G,ie(),s.up.set(a.x,a.y,a.z),g(),y(),{scene:s,camera:c,controls:u,renderer:l,cameraController:d,grid:v,gizmo:b,measureTool:k,labelLayer:O,tools:j,applyEdges:R,clearEdges:ne,invalidate:G,captureImage:(e=`image/png`,t)=>(K(),new Promise(n=>l.domElement.toBlob(n,e,t))),setAmbientOcclusion:U.setAmbientOcclusion,setLook:W.setLook,setFillLights:W.setFillLights,setEnvironmentIntensity:W.setEnvironmentIntensity,setToneMappingExposure:W.setToneMappingExposure,setAoIntensity:W.setAoIntensity,getMaterialAppearance:W.getMaterialAppearance,updateShadowBounds:g,updateGridScale:y,dispose:()=>{p||(p=!0,ae(),A.dispose(),e.removeEventListener(`mousedown`,P,{capture:!0}),e.removeEventListener(`click`,F,{capture:!0}),e.removeEventListener(`mousemove`,I),k?.dispose(),O?.dispose(),b?.dispose(),v?.dispose(),U.dispose(),d.dispose(),u.dispose(),l.dispose(),l.forceContextLoss(),mt(s))},fitToView:A.fitToView,clearSelection:A.clearSelection,addUserGeometry:(e,t)=>{e.userData.source=t===void 0?x:C(t),s.add(e),L()},removeUserGeometry:e=>{e.removeFromParent(),t.t(e),L()},clearUserGeometry:e=>{s.children.filter(t=>E(t,e)).forEach(e=>{e.removeFromParent(),t.t(e)}),L()}}};exports.DEFAULT_LOOK=t.s,exports.ErrorCodes=t.h,exports.LOOKS=b,exports.LOOK_PRESETS=t.c,exports.SOURCE_COMPUTE=`compute`,exports.SOURCE_USER=x,exports.VisualizationError=t.g,exports.appIdFromSource=w,exports.appSource=C,exports.enableDebugLogging=t.f,exports.getLogger=t.p,exports.initThree=Ot,exports.isHostOwned=T,exports.isOwnedBy=E,exports.materialAppearanceForLook=t.d,exports.pickThreshold=Ge,exports.pointerToNdc=rt,exports.setLogger=t.m,exports.snapToVertex=qe,exports.updateScene=I;
108
108
  //# sourceMappingURL=render.cjs.map