@pacem/pacem-3d 1.0.0-abel
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/LICENSE +191 -0
- package/NOTICE +4 -0
- package/dist/browser/pacem-3d.js +7718 -0
- package/dist/browser/pacem-3d.js.map +1 -0
- package/dist/browser/pacem-3d.min.js +2 -0
- package/dist/browser/pacem-3d.min.js.map +1 -0
- package/dist/bundle/pacem-3d.min.mjs +345 -0
- package/dist/bundle/pacem-3d.mjs +7737 -0
- package/dist/bundle/pacem-3d.mjs.map +7 -0
- package/dist/esm/constants.js +2 -0
- package/dist/esm/converters.js +40 -0
- package/dist/esm/decorators.js +29 -0
- package/dist/esm/detector.js +73 -0
- package/dist/esm/geometry.js +102 -0
- package/dist/esm/index-components-drawing3d.js +22 -0
- package/dist/esm/index-components.js +1 -0
- package/dist/esm/index-drawing3d.js +6 -0
- package/dist/esm/index-iife.js +3 -0
- package/dist/esm/index-root.js +1 -0
- package/dist/esm/index.js +2 -0
- package/dist/esm/stage.js +280 -0
- package/dist/esm/types.js +482 -0
- package/package.json +39 -0
- package/typings/index.d.ts +1084 -0
|
@@ -0,0 +1,345 @@
|
|
|
1
|
+
var Un=Object.defineProperty;var Oo=(n,e)=>{for(var t in e)Un(n,t,{get:e[t],enumerable:!0})};var Sn={};Oo(Sn,{Drawing3D:()=>Bi});var Bi={};Oo(Bi,{AdapterUtils:()=>We,BasicMaterialElement:()=>$o,DragEvent:()=>mt,KnownShader:()=>U,LambertMaterialElement:()=>Ht,LineMaterialElement:()=>yt,MaterialElement:()=>Q,OrbitCameraBehavior:()=>Po,Pacem3DAdapterElement:()=>Je,Pacem3DCameraElement:()=>Ce,Pacem3DDetector:()=>Vo,Pacem3DElement:()=>xe,Pacem3DGroupElement:()=>Ze,Pacem3DLightElement:()=>Ie,Pacem3DMeshElement:()=>ke,Pacem3DObjectElement:()=>Fe,Pacem3DOrthographicCameraElement:()=>Be,Pacem3DPerspectiveCameraElement:()=>qe,Pacem3DPrimitiveElement:()=>ee,Pacem3DThreeAdapterElement:()=>lo,Pacem3DWebgpuAdapterElement:()=>Pt,Pacem3DWgslScriptElement:()=>sr,PacemBoxElement:()=>Ae,PacemConeElement:()=>tt,PacemCylinderElement:()=>rt,PacemDodecahedronElement:()=>Ko,PacemHexahedronElement:()=>qo,PacemIcosahedronElement:()=>Jo,PacemLineElement:()=>Qr,PacemOctahedronElement:()=>Zo,PacemOrbitCameraBehaviorElement:()=>Pe,PacemPlaneElement:()=>Ct,PacemSphereElement:()=>Er,PacemTetrahedronElement:()=>Yo,PacemTorusElement:()=>Rt,PhongMaterialElement:()=>He,PolyhedronElement:()=>je,RenderableElement:()=>be,RenderableEvent:()=>gt,StalePropertyFlag:()=>I,StandardMaterialElement:()=>Qe,UI3DEvent:()=>$t,Ui3DElement:()=>ae,computePlaneNormal:()=>So,computeSharpVertexNormals:()=>ce,isBasicMaterial:()=>Fr,isCamera:()=>pe,isGeometry:()=>cr,isGroup:()=>vt,isInteraction:()=>kr,isLambertMaterial:()=>Xr,isLight:()=>Se,isLineMaterial:()=>Ke,isMaterial:()=>Ne,isMesh:()=>Ee,isMeshGeometry:()=>kt,isOrthographicCamera:()=>Ur,isPerspectiveCamera:()=>zr,isPhongMaterial:()=>Hr,isRenderable:()=>ar,isShaderMaterial:()=>Yi,isStage:()=>Bo,isStandardMaterial:()=>jr,isUi3DObject:()=>Ut});import{Watch as k,PropertyConverters as J,CustomElement as zt,PacemEventTarget as Wn,PropertyChangeEvent as Yn,CustomElementUtils as Wi,CustomUIEvent as Zn,P as _t,Utils as Ge,Components as qn}from"@pacem/pacem-core";import{Geometry as De}from"@pacem/pacem-numerical";import{Utils as kn}from"@pacem/pacem-core";import{parseAsNumericalArray as ki}from"@pacem/pacem-foundation";import{Geometry as Sr}from"@pacem/pacem-numerical";var $e={convert:n=>Sr.LinearAlgebra.Vector3D.parse(n),convertBack:n=>`${n.x||0} ${n.y||0} ${n.z||0}`},Vr={convert:n=>{let e=ki(n),t=()=>{throw new Error(`Cannot parse "${n}" as a valid Vector3D.`)};if(kn.isNullOrEmpty(e)&&t(),e.length===3)return Sr.LinearAlgebra.Vector3D.from(...e);if(e.length===1){let o=e[0];return Sr.LinearAlgebra.Vector3D.from(o,o,o)}t()},convertBack:n=>`${n.x||0} ${n.y||0} ${n.z||0}`},Do={convert:n=>Sr.LinearAlgebra.Quaternion.parse(n),convertBack:n=>`${n.x||0} ${n.y||0} ${n.z||0} ${n.w||0}`},Go={convert:n=>n==="true"?!0:n==="false"?!1:ki(n)[0],convertBack:n=>n.toString()};import{CustomElement as Fn,P as Bt,PCSS as Hi,Defaults as Xn,ViewChild as ji,Watch as St,PropertyConverters as Vt,Utils as ge,Components as Fi,PropertyChangeEventName as Xi,Logging as Hn,Animations as jn,UI as $r}from"@pacem/pacem-core";var ze=Math.PI/180;var Ue=function(n,e,t,o){var r=arguments.length,i=r<3?e:o===null?o=Object.getOwnPropertyDescriptor(e,t):o,s;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")i=Reflect.decorate(n,e,t,o);else for(var a=n.length-1;a>=0;a--)(s=n[a])&&(i=(r<3?s(i):r>3?s(e,t,i):s(e,t))||i);return r>3&&i&&Object.defineProperty(e,t,i),i},xe=class extends Fi.PacemItemsContainerElement{constructor(){super(...arguments),this._itemPropertyChangeHandler=e=>{let t=e.target;this.adapter&&this.adapter.updateItem(this,t),t.flags.splice(0)},this._clickHandler=e=>{let t=this;if(!t.interactive||ge.isNull(t._lastHitResult))return;let o=e.type.replace(/^mouse/,""),r=t._lastHitResult,i=r.object,s=r.point;this._itemDispatch(i,s,o,e)},this._hitTestCallback=(e,t)=>{let o=this;if(e!=o._lastHitResult){if(e?.object!=o._lastHitResult?.object){let r=e?.object,i=o._lastHitResult?.object,s=e?.point;ge.isNull(i)||this._itemDispatch(i,s,"out",t),ge.isNull(r)||this._itemDispatch(r,s,"over",t)}o._lastHitResult=e}},this._moveHandler=e=>{let t=this;if(!t.adapter||!t.interactive)return;let o=t._resizer.currentSize,r=s=>t._hitTestCallback(s,e),i=e.type==="mousemove"?{x:e.pageX-o.left,y:e.pageY-o.top}:{x:-1,y:-1};t.adapter.raycast(this,i,o,r)},this._resizeHandler=e=>{let t=this.#e,o=e.detail;if(!ge.isNull(t)&&t.height===o.height&&t.width===o.width)return;this.#e=o;let r=this.adapter;ge.isNull(r)||(this.adapter.invalidateSize(this,o),this.dispatchEvent(new Fi.ResizeEvent(o)))}}validate(e){return e instanceof be}get stage(){return this._container}get scene(){return this.adapter&&this.adapter.getScene(this)}register(e){let t=super.register(e);return t&&(this._add(e),e.addEventListener(Xi,this._itemPropertyChangeHandler,!1)),t}unregister(e){let t=super.unregister(e);return t&&(e.removeEventListener(Xi,this._itemPropertyChangeHandler,!1),this._erase(e)),t}_refreshDatasource(e=this.datasource){this.adapter?.updateItem(this,void 0)}_buildUpDatasourceFromDOM(e=this.items){ge.isNullOrEmpty(e)||(this.datasource=e.slice())}_add(e){this.adapter&&this.adapter.addItem(this,e)}_erase(e){this.adapter&&this.adapter.removeItem(this,e)}_initializeAdapter(e,t){return new Promise((o,r)=>{let i=this.datasource||[];ge.isNull(e)||i.forEach(s=>e.removeItem(this,s)),!ge.isNull(this._container)&&!ge.isNull(t)?t.initialize(this).then(s=>{(i||[]).forEach(a=>this._add(a)),o()},s=>{this.log(Hn.LogLevel.Error,s?.toString()),r(s)}):o()})}propertyChangedCallback(e,t,o,r){if(super.propertyChangedCallback(e,t,o,r),!r)switch(e){case"adapter":this._initializeAdapter(t,o);break;case"items":this._buildUpDatasourceFromDOM(o);break;case"transparent":this.adapter?.invalidateSize(this,this.size);break;case"datasource":this._refreshDatasource(o);case"disabled":case"background":this.render();break}}viewActivatedCallback(){super.viewActivatedCallback();let e=this._container,t=this._resizer;t.addEventListener("resize",this._resizeHandler,!1),t.target=e,this._initializeAdapter(null,this.adapter).then(o=>{e.addEventListener("mousemove",this._moveHandler,!1),e.addEventListener("click",this._clickHandler,!1),e.addEventListener("mouseup",this._clickHandler,!1),e.addEventListener("mousedown",this._clickHandler,!1),e.addEventListener("mouseout",this._moveHandler,!1),this._buildUpDatasourceFromDOM(),this.render()})}_itemDispatch(e,t,o,r){if(!ge.isNull(e)){var i,s,a;r instanceof Event?s=r:i={item:e,offset:r},typeof o=="string"?a=o:(a=o.type,s=o.originalEvent);let l=t,u=()=>r instanceof Event?new gt(a,e,s,l):new mt(a,{detail:i,cancelable:a===$r.DragDropEventType.Init||a===$r.DragDropEventType.Drag},s,l),p=r instanceof Event?new gt("item"+a,e,s,l):new mt("item"+a,{detail:i,cancelable:a===$r.DragDropEventType.Init||a===$r.DragDropEventType.Drag},s,l);var c=!1;if(e instanceof EventTarget){let f=u();e.dispatchEvent(f),c=f.defaultPrevented}return e.stage.dispatchEvent(p),c||p.defaultPrevented}return!1}disconnectedCallback(){this.#t?.stop();let e=this._resizer,t=this._container;ge.isNull(t)||(t.removeEventListener("click",this._clickHandler,!1),t.removeEventListener("mouseup",this._clickHandler,!1),t.removeEventListener("mousedown",this._clickHandler,!1),t.removeEventListener("mousemove",this._moveHandler,!1),t.removeEventListener("mouseout",this._moveHandler,!1)),ge.isNull(e)||e.removeEventListener("resize",this._resizeHandler,!1),super.disconnectedCallback()}#e;get size(){return this.#e}render(e,t,o=performance.now()){if(ge.isNull(e))this.#t?.stop(),this.#t=jn.Timer.run(r=>this._doRender());else{let r=this.adapter;ge.isNull(r)||r.updateItem(this,e)}}#t;_doRender(){if(!this.disabled&&!ge.isNull(this.adapter)){let e=this.adapter.getScene(this),t=new CustomEvent("prerender",{detail:{scene:e},cancelable:!0});this.dispatchEvent(t),t.defaultPrevented||(this.adapter.render(this),this.dispatchEvent(new CustomEvent("render",{detail:{scene:e}})))}}};Ue([ji(`.${Hi}-3d`)],xe.prototype,"_container",void 0);Ue([ji(Bt+"-resize")],xe.prototype,"_resizer",void 0);Ue([St({emit:!1,converter:Vt.Boolean})],xe.prototype,"interactive",void 0);Ue([St({emit:!1,converter:Vt.Boolean})],xe.prototype,"transparent",void 0);Ue([St({emit:!1,converter:Vt.String})],xe.prototype,"background",void 0);Ue([St({emit:!1,converter:Vt.Element})],xe.prototype,"adapter",void 0);Ue([St({emit:!1,converter:Vt.Json})],xe.prototype,"datasource",void 0);Ue([St({emit:!1,converter:Vt.Boolean})],xe.prototype,"orbit",void 0);xe=Ue([Fn({tagName:Bt+"-"+"3d",shadow:Xn.USE_SHADOW_ROOT,template:`<${Bt}-resize watch-position="true"></${Bt}-resize><div class="${Hi}-3d"></div><${Bt}-content></${Bt}-content>`})],xe);var S=function(n,e,t,o){var r=arguments.length,i=r<3?e:o===null?o=Object.getOwnPropertyDescriptor(e,t):o,s;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")i=Reflect.decorate(n,e,t,o);else for(var a=n.length-1;a>=0;a--)(s=n[a])&&(i=(r<3?s(i):r>3?s(e,t,i):s(e,t))||i);return r>3&&i&&Object.defineProperty(e,t,i),i};function Bo(n){return!Ge.isNull(n)&&"render"in n&&typeof n.render=="function"}function ar(n){return Bo(n?.stage)}function Ut(n){return"transformMatrix"in n&&ar(n)}function pe(n){return"type"in n&&"up"in n&&"lookAt"in n&&ar(n)}function zr(n){return pe(n)&&"type"in n&&n.type==="perspective"}function Ur(n){return pe(n)&&"type"in n&&n.type==="orthographic"}function Se(n){return"type"in n&&(n.type==="ambient"||n.type==="omni"||n.type==="direction"||n.type=="spot")&&ar(n)}function Ee(n){return"geometry"in n&&Ut(n)}function cr(n){return"positions"in n&&Ge.isArray(n.positions)}function kt(n){return("triangleIndices"in n&&Ge.isArray(n.triangleIndices)||"normals"in n&&Ge.isArray(n.normals)||"textureCoordinates"in n&&Ge.isArray(n.textureCoordinates))&&cr(n)}function vt(n){return"childRenderables"in n&&Ge.isArray(n.childRenderables)&&Ut(n)}function ce(n){let e=[];if(!Ge.isNullOrEmpty(n)){let t=n.triangleIndices;if(t.length%3!==0)throw new RangeError(`Invalid mesh geometry: ${t.length} is not multiple of 3.`);for(let o=2;o<t.length;o+=3){let r=t[o-2],i=t[o-1],s=t[o],a=n.positions[r],c=n.positions[i],l=n.positions[s],u=So(a,c,l);e.push(u,u,u)}}n.normals=e}function So(n,e,t){let o=De.LinearAlgebra.Vector3D.subtract(n,e),r=De.LinearAlgebra.Vector3D.subtract(n,t),i=De.LinearAlgebra.Vector3D.cross(o,r);return De.LinearAlgebra.Vector3D.unit(i)}var $t=class extends Zn{constructor(e,t,o,r){super(e,t,o),this.#e=r}#e;get point(){return this.#e}},mt=class extends $t{},gt=class extends $t{constructor(e,t,o,r){super(e,{detail:t,bubbles:!0,cancelable:!0},o,r)}},I;(function(n){n.Position="position",n.Transform="transform",n.Geometry="geometry",n.Children="children",n.Material="material",n.Light="light",n.Camera="camera",n.Visibility="visibility"})(I||(I={}));function kr(n){return typeof n=="object"&&"time"in n&&typeof n.time=="number"}var Xe={OBJECT_SELECTOR:_t+"-"+"3d"+"-object",LIGHT_SELECTOR:_t+"-"+"3d"+"-light",PERSPECTIVE_CAMERA_SELECTOR:_t+"-"+"3d"+"-perspective-camera",ORTHO_CAMERA_SELECTOR:_t+"-"+"3d"+"-orthographic-camera",LINE_SELECTOR:_t+"-"+"3d"+"-line",MESH_SELECTOR:_t+"-"+"3d"+"-mesh",GROUP_SELECTOR:_t+"-"+"3d"+"-group",DEFAULT_COORDS:{x:0,y:0,z:0}},be=class n extends qn.PacemCrossItemsContainerElement{constructor(){super(...arguments),this.position=Xe.DEFAULT_COORDS,this.#e=[]}validate(e){return!1}findContainer(){return this.parent||this.stage}get stage(){return this._scene=this._scene||Wi.findAncestorOfType(this,xe)}get parent(){return this._drawableParent=this._drawableParent||Wi.findAncestor(this,e=>e instanceof n)}disconnectedCallback(){delete this._scene,delete this._drawableParent,super.disconnectedCallback()}propertyChangedCallback(e,t,o,r){switch(super.propertyChangedCallback(e,t,o,r),e){case"hide":this.setAsDirty(I.Visibility);break;case"items":this.setAsDirty(I.Children);break;case"position":this.setAsDirty(I.Position);break}}#e;get flags(){return this.#e}setAsDirty(...e){for(let t of e)this.flags.includes(t)||this.flags.push(t);this.stage?.render(this)}};S([k({emit:!1,converter:$e})],be.prototype,"position",void 0);S([k({emit:!1,reflectBack:!0,converter:J.String})],be.prototype,"tag",void 0);S([k({emit:!1,converter:J.Boolean})],be.prototype,"inert",void 0);var ae=class extends be{propertyChangedCallback(e,t,o,r){switch(super.propertyChangedCallback(e,t,o,r),e){case"transformMatrix":this.setAsDirty(I.Transform);break;case"translateZ":case"translateX":case"translateY":this.offset={x:this.translateX,y:this.translateY,z:this.translateZ};break;case"scaleX":case"scaleY":case"scaleZ":this.scale={x:this.scaleX,y:this.scaleY,z:this.scaleZ};break;case"scale":case"offset":case"rotate":this._computeTransformMatrix();break}}_computeTransformMatrix(){let e=De.LinearAlgebra.Matrix3D,t=De.LinearAlgebra.Vector3D,o=De.LinearAlgebra.Quaternion,r=this.scale??t.from(1,1,1),i=e.scale(e.identity(),r);if(!Ge.isNull(this.rotate)){let a=o.toRotationMatrix(this.rotate);i=e.multiply(i,a)}let s=this.offset??t.from(0,0,0);i=e.translate(i,s),this.transformMatrix=i}};S([k({emit:!1,converter:Do})],ae.prototype,"rotate",void 0);S([k({emit:!1,converter:Vr})],ae.prototype,"scale",void 0);S([k({emit:!1,converter:Vr})],ae.prototype,"offset",void 0);S([k({emit:!1})],ae.prototype,"transformMatrix",void 0);S([k({emit:!1,converter:J.Number})],ae.prototype,"scaleX",void 0);S([k({emit:!1,converter:J.Number})],ae.prototype,"scaleY",void 0);S([k({emit:!1,converter:J.Number})],ae.prototype,"scaleZ",void 0);S([k({emit:!1,converter:J.Number})],ae.prototype,"translateX",void 0);S([k({emit:!1,converter:J.Number})],ae.prototype,"translateY",void 0);S([k({emit:!1,converter:J.Number})],ae.prototype,"translateZ",void 0);var Ze=class extends ae{validate(e){return e instanceof be}#e=[];get childRenderables(){return this.#e}propertyChangedCallback(e,t,o,r){switch(super.propertyChangedCallback(e,t,o,r),e){case"items":case"datasource":this.#e=o||[],this.setAsDirty(I.Children);break}}};S([k({emit:!1})],Ze.prototype,"datasource",void 0);Ze=S([zt({tagName:Xe.GROUP_SELECTOR})],Ze);var ke=class extends ae{propertyChangedCallback(e,t,o,r){switch(super.propertyChangedCallback(e,t,o,r),e){case"geometry":this.setAsDirty(I.Geometry);break;case"material":case"backMaterial":this.setAsDirty(I.Material);break}}};S([k({emit:!1,converter:J.Json})],ke.prototype,"geometry",void 0);S([k({emit:!1,converter:J.Json})],ke.prototype,"material",void 0);S([k({emit:!1,converter:J.Json})],ke.prototype,"backMaterial",void 0);ke=S([zt({tagName:Xe.MESH_SELECTOR})],ke);var Fe=class extends ae{propertyChangedCallback(e,t,o,r){super.propertyChangedCallback(e,t,o,r),(e==="content"||e==="type")&&this.setAsDirty(I.Geometry,I.Material)}};S([k({emit:!1})],Fe.prototype,"content",void 0);S([k({emit:!1,converter:J.String})],Fe.prototype,"type",void 0);Fe=S([zt({tagName:Xe.OBJECT_SELECTOR})],Fe);var Ie=class extends be{constructor(){super(...arguments),this.intensity=.85,this.target=Xe.DEFAULT_COORDS,this.color="#fff",this.type="omni"}propertyChangedCallback(e,t,o,r){switch(super.propertyChangedCallback(e,t,o,r),e){case"type":case"color":case"intensity":case"target":this.setAsDirty(I.Light);break}}};S([k({emit:!1,converter:J.Number})],Ie.prototype,"intensity",void 0);S([k({emit:!1,converter:$e})],Ie.prototype,"target",void 0);S([k({emit:!1,converter:J.String})],Ie.prototype,"color",void 0);S([k({emit:!1,converter:J.String})],Ie.prototype,"type",void 0);Ie=S([zt({tagName:Xe.LIGHT_SELECTOR})],Ie);var Ce=class extends be{constructor(){super(...arguments),this.near=.1,this.far=1e3,this.up=De.LinearAlgebra.Vector3D.j(),this.lookAt=Xe.DEFAULT_COORDS}#e;_resetBoundingSphere(){let e=this.#e,t=this.position,o=this.lookAt,r=Ge.isNullOrEmpty(t)||Ge.isNullOrEmpty(o)?0:De.LinearAlgebra.Vector3D.mag(De.LinearAlgebra.Vector3D.subtract(t,o)),i=this.#e={center:o,radius:r};this.dispatchEvent(new Yn({currentValue:i,propertyName:"boundingSphere",oldValue:e}))}get boundingSphere(){return this.#e}propertyChangedCallback(e,t,o,r){switch(super.propertyChangedCallback(e,t,o,r),e){case"lookAt":case"position":this._resetBoundingSphere();case"near":case"far":case"up":this.setAsDirty(I.Camera);break}}};S([k({emit:!1,converter:J.Number})],Ce.prototype,"near",void 0);S([k({emit:!1,converter:J.Number})],Ce.prototype,"far",void 0);S([k({emit:!1,converter:$e})],Ce.prototype,"up",void 0);S([k({emit:!1,converter:$e})],Ce.prototype,"lookAt",void 0);var qe=class extends Ce{constructor(){super(...arguments),this.fov=45,this.aspect=1}get type(){return"perspective"}get aspectRatio(){return this.aspect}propertyChangedCallback(e,t,o,r){switch(super.propertyChangedCallback(e,t,o,r),e){case"fov":case"aspect":this.setAsDirty(I.Camera);break}}};S([k({emit:!1,converter:J.Number})],qe.prototype,"fov",void 0);S([k({emit:!1,converter:J.Number})],qe.prototype,"aspect",void 0);qe=S([zt({tagName:Xe.PERSPECTIVE_CAMERA_SELECTOR})],qe);var Be=class extends Ce{constructor(){super(...arguments),this.top=1,this.left=-1,this.bottom=-1,this.right=1}get type(){return"orthographic"}propertyChangedCallback(e,t,o,r){switch(super.propertyChangedCallback(e,t,o,r),e){case"top":case"left":case"bottom":case"right":this.setAsDirty(I.Camera);break}}};S([k({emit:!1,converter:J.Number})],Be.prototype,"top",void 0);S([k({emit:!1,converter:J.Number})],Be.prototype,"left",void 0);S([k({emit:!1,converter:J.Number})],Be.prototype,"bottom",void 0);S([k({emit:!1,converter:J.Number})],Be.prototype,"right",void 0);Be=S([zt({tagName:Xe.ORTHO_CAMERA_SELECTOR})],Be);var Je=class extends Wn{};var Vo=class{constructor(){this._detected={supported:!1,info:{}};let e=document.createElement("canvas"),t=["webgl","experimental-webgl","moz-webgl","webkit-3d"],o,r=function(a){if(a)return o.getParameter(a)},i=(a,c,l)=>{let u=this._detected;var p=u.info[a]=u.info[a]||{};c=c.replace(/[^\w]+/g,""),c=c.substring(0,1).toLowerCase()+c.substring(1),p[c]=l};if(navigator.userAgent.indexOf("MSIE")>=0)try{o=window.WebGLHelper.CreateGLContext(e,"canvas")}catch{}else for(var s=0;s<t.length;s++)try{if(o=e.getContext(t[s]),o){i("main","Context Name",t[s]);break}}catch{}this._detected.supported=!!o,i("main","Platform",navigator.platform),i("main","Agent",navigator.userAgent),o&&(i("main","Vendor",r(o.VENDOR)),i("main","Version",r(o.VERSION)),i("main","Renderer",r(o.RENDERER)),i("main","Shading Language Version",r(o.SHADING_LANGUAGE_VERSION)),i("bits","Rgba Bits",r(o.RED_BITS)+", "+r(o.GREEN_BITS)+", "+r(o.BLUE_BITS)+", "+r(o.ALPHA_BITS)),i("bits","Depth Bits",r(o.DEPTH_BITS)),i("shader","Max Vertex Attribs",r(o.MAX_VERTEX_ATTRIBS)),i("shader","Max Vertex Texture Image Units",r(o.MAX_VERTEX_TEXTURE_IMAGE_UNITS)),i("shader","Max Varying Vectors",r(o.MAX_VARYING_VECTORS)),i("shader","Max Uniform Vectors",r(o.MAX_VERTEX_UNIFORM_VECTORS)),i("tex","Max Combined Texture Image Units",r(o.MAX_COMBINED_TEXTURE_IMAGE_UNITS)),i("tex","Max Texture Size",r(o.MAX_TEXTURE_SIZE)),i("tex","Max Cube Map Texture Size",r(o.MAX_CUBE_MAP_TEXTURE_SIZE)),i("tex","Num. Compressed Texture Formats",r(o.COMPRESSED_TEXTURE_FORMATS)),i("misc","Max Render Buffer Size",r(o.MAX_RENDERBUFFER_SIZE)),i("misc","Max Viewport Dimensions",r(o.MAX_VIEWPORT_DIMS)),i("misc","Aliased Line Width Range",r(o.ALIASED_LINE_WIDTH_RANGE)),i("misc","Aliased Point Size Range",r(o.ALIASED_POINT_SIZE_RANGE)),i("misc","Supported Extensions",o.getSupportedExtensions()||[]))}get info(){return this._detected.info}get supported(){return this._detected.supported}};import{PacemEventTarget as Jn,Utils as lr,Watch as Xt,PropertyConverters as ur,PCSS as Kn}from"@pacem/pacem-core";import{Imaging as Qn}from"@pacem/pacem-foundation";var Ft=function(n,e,t,o){var r=arguments.length,i=r<3?e:o===null?o=Object.getOwnPropertyDescriptor(e,t):o,s;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")i=Reflect.decorate(n,e,t,o);else for(var a=n.length-1;a>=0;a--)(s=n[a])&&(i=(r<3?s(i):r>3?s(e,t,i):s(e,t))||i);return r>3&&i&&Object.defineProperty(e,t,i),i},U;(function(n){n.Basic="basic",n.Lambert="lambert",n.Phong="phong",n.Standard="standard",n.Line="line",n.Custom="custom"})(U||(U={}));function Ne(n){return"shader"in n}function Fr(n){return Ne(n)&&n.shader===U.Basic}function Ke(n){return Ne(n)&&n.shader===U.Line}function Xr(n){return Ne(n)&&n.shader===U.Lambert}function Hr(n){return Ne(n)&&n.shader===U.Phong}function jr(n){return Ne(n)&&n.shader===U.Standard}function Yi(n){return Ne(n)&&n.shader===U.Custom}var Q=class extends Jn{constructor(e){super(),this.#e=e}#e;get shader(){return this.#e}async _loadMap(e,t=this.material?.texture){if(lr.isNull(t)||t.close(),lr.isNullOrEmpty(e))return null;let o=await Qn.loadImage(e);return lr.isNull(o)?null:await createImageBitmap(o)}propertyChangedCallback(e,t,o,r){if(super.propertyChangedCallback(e,t,o,r),!r)switch(e){case"map":case"opacity":case"wireframe":case"color":case"hide":this.updateMaterial();break}}viewActivatedCallback(){super.viewActivatedCallback(),this.updateMaterial()}updateMaterial(){this.createMaterial().then(e=>{this.material=lr.extend(e,{flags:[I.Material]})})}async createMaterial(){return{opacity:this.opacity??1,wireframe:this.wireframe??!1,color:this.color||lr.Css.getVariableValue(`--${Kn}-color-primary`),visible:!(this.hide??!1),map:this.map,texture:await this._loadMap(this.map),shader:this.shader,flags:[]}}};Ft([Xt()],Q.prototype,"material",void 0);Ft([Xt({emit:!1,converter:ur.Number})],Q.prototype,"opacity",void 0);Ft([Xt({emit:!1,converter:ur.Boolean})],Q.prototype,"wireframe",void 0);Ft([Xt({emit:!1,converter:ur.String})],Q.prototype,"color",void 0);Ft([Xt({emit:!1,converter:ur.Boolean})],Q.prototype,"hide",void 0);Ft([Xt({emit:!1,converter:ur.String})],Q.prototype,"map",void 0);import{CustomElement as ts,P as rs}from"@pacem/pacem-core";var es=function(n,e,t,o){var r=arguments.length,i=r<3?e:o===null?o=Object.getOwnPropertyDescriptor(e,t):o,s;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")i=Reflect.decorate(n,e,t,o);else for(var a=n.length-1;a>=0;a--)(s=n[a])&&(i=(r<3?s(i):r>3?s(e,t,i):s(e,t))||i);return r>3&&i&&Object.defineProperty(e,t,i),i},$o=class extends Q{constructor(){super(U.Basic)}};$o=es([ts({tagName:`${rs}-${"3d"}-material-basic`})],$o);import{CustomElement as os,P as is,Watch as zo,PropertyConverters as Uo,Utils as ns}from"@pacem/pacem-core";var Wr=function(n,e,t,o){var r=arguments.length,i=r<3?e:o===null?o=Object.getOwnPropertyDescriptor(e,t):o,s;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")i=Reflect.decorate(n,e,t,o);else for(var a=n.length-1;a>=0;a--)(s=n[a])&&(i=(r<3?s(i):r>3?s(e,t,i):s(e,t))||i);return r>3&&i&&Object.defineProperty(e,t,i),i},Ht=class extends Q{constructor(){super(U.Lambert)}async createMaterial(){return ns.extend({emissiveColor:this.emissiveColor||"#000",reflectivity:this.reflectivity??0,refractionRatio:this.refractionRatio??0},await super.createMaterial())}propertyChangedCallback(e,t,o,r){if(super.propertyChangedCallback(e,t,o,r),!r)switch(e){case"emissiveColor":case"reflectivity":case"refractionRatio":this.updateMaterial();break}}};Wr([zo({emit:!1,converter:Uo.String})],Ht.prototype,"emissiveColor",void 0);Wr([zo({emit:!1,converter:Uo.Number})],Ht.prototype,"reflectivity",void 0);Wr([zo({emit:!1,converter:Uo.Number})],Ht.prototype,"refractionRatio",void 0);Ht=Wr([os({tagName:`${is}-${"3d"}-material-lambert`})],Ht);import{CustomElement as ss,P as as,Watch as Yr,PropertyConverters as ko,Utils as cs}from"@pacem/pacem-core";var pr=function(n,e,t,o){var r=arguments.length,i=r<3?e:o===null?o=Object.getOwnPropertyDescriptor(e,t):o,s;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")i=Reflect.decorate(n,e,t,o);else for(var a=n.length-1;a>=0;a--)(s=n[a])&&(i=(r<3?s(i):r>3?s(e,t,i):s(e,t))||i);return r>3&&i&&Object.defineProperty(e,t,i),i},yt=class extends Q{constructor(){super(U.Line)}propertyChangedCallback(e,t,o,r){if(super.propertyChangedCallback(e,t,o,r),!r)switch(e){case"lineWidth":case"lineJoin":case"lineCap":case"dashArray":this.updateMaterial();break}}async createMaterial(){return cs.extend({lineWidth:this.lineWidth??1,lineJoin:this.lineJoin??"round",lineCap:this.lineCap??"round",dashArray:this.dashArray},await super.createMaterial())}};pr([Yr({emit:!1,converter:ko.Number})],yt.prototype,"lineWidth",void 0);pr([Yr({emit:!1,converter:ko.String})],yt.prototype,"lineJoin",void 0);pr([Yr({emit:!1,converter:ko.String})],yt.prototype,"lineCap",void 0);pr([Yr({emit:!1,converter:{convert:n=>n?.split(",").map(e=>parseInt(e)).filter(e=>!Number.isNaN(e)),convertBack:n=>n?.join(",")}})],yt.prototype,"dashArray",void 0);yt=pr([ss({tagName:`${as}-${"3d"}-material-line`})],yt);import{CustomElement as ls,P as us,Watch as jt,PropertyConverters as Wt,Utils as ps}from"@pacem/pacem-core";var xt=function(n,e,t,o){var r=arguments.length,i=r<3?e:o===null?o=Object.getOwnPropertyDescriptor(e,t):o,s;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")i=Reflect.decorate(n,e,t,o);else for(var a=n.length-1;a>=0;a--)(s=n[a])&&(i=(r<3?s(i):r>3?s(e,t,i):s(e,t))||i);return r>3&&i&&Object.defineProperty(e,t,i),i},He=class extends Q{constructor(){super(U.Phong)}async createMaterial(){return ps.extend({emissiveColor:this.emissiveColor||"#000",reflectivity:this.reflectivity??0,refractionRatio:this.refractionRatio??0,specularColor:this.specularColor||"#000",shininess:this.shininess??0,flatShading:this.flatShading??!0},await super.createMaterial())}propertyChangedCallback(e,t,o,r){if(super.propertyChangedCallback(e,t,o,r),!r)switch(e){case"emissiveColor":case"reflectivity":case"refractionRatio":case"specularColor":case"shininess":case"flatShading":this.updateMaterial();break}}};xt([jt({emit:!1,converter:Wt.String})],He.prototype,"emissiveColor",void 0);xt([jt({emit:!1,converter:Wt.Number})],He.prototype,"reflectivity",void 0);xt([jt({emit:!1,converter:Wt.Number})],He.prototype,"refractionRatio",void 0);xt([jt({emit:!1,converter:Wt.String})],He.prototype,"specularColor",void 0);xt([jt({emit:!1,converter:Wt.Number})],He.prototype,"shininess",void 0);xt([jt({emit:!1,converter:Wt.Boolean})],He.prototype,"flatShading",void 0);He=xt([ls({tagName:`${us}-${"3d"}-material-phong`})],He);import{CustomElement as fs,P as hs,Watch as fr,PropertyConverters as hr,Utils as ds}from"@pacem/pacem-core";var Yt=function(n,e,t,o){var r=arguments.length,i=r<3?e:o===null?o=Object.getOwnPropertyDescriptor(e,t):o,s;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")i=Reflect.decorate(n,e,t,o);else for(var a=n.length-1;a>=0;a--)(s=n[a])&&(i=(r<3?s(i):r>3?s(e,t,i):s(e,t))||i);return r>3&&i&&Object.defineProperty(e,t,i),i},Qe=class extends Q{constructor(){super(U.Standard)}async createMaterial(){return ds.extend({emissiveColor:this.emissiveColor||"#000",refractionRatio:this.refractionRatio??0,metalness:this.metalness??0,roughness:this.roughness??0,flatShading:this.flatShading??!1},await super.createMaterial())}propertyChangedCallback(e,t,o,r){if(super.propertyChangedCallback(e,t,o,r),!r)switch(e){case"emissiveColor":case"roughness":case"metalness":case"refractionRatio":case"flatShading":this.updateMaterial();break}}};Yt([fr({emit:!1,converter:hr.String})],Qe.prototype,"emissiveColor",void 0);Yt([fr({emit:!1,converter:hr.Number})],Qe.prototype,"refractionRatio",void 0);Yt([fr({emit:!1,converter:hr.Number})],Qe.prototype,"roughness",void 0);Yt([fr({emit:!1,converter:hr.Number})],Qe.prototype,"metalness",void 0);Yt([fr({emit:!1,converter:hr.Boolean})],Qe.prototype,"flatShading",void 0);Qe=Yt([fs({tagName:`${hs}-${"3d"}-material-standard`})],Qe);import{PacemEventTarget as gs,Watch as _s,PropertyConverters as vs,Utils as ys}from"@pacem/pacem-core";var ms=function(n,e,t,o){var r=arguments.length,i=r<3?e:o===null?o=Object.getOwnPropertyDescriptor(e,t):o,s;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")i=Reflect.decorate(n,e,t,o);else for(var a=n.length-1;a>=0;a--)(s=n[a])&&(i=(r<3?s(i):r>3?s(e,t,i):s(e,t))||i);return r>3&&i&&Object.defineProperty(e,t,i),i},ee=class extends gs{viewActivatedCallback(){super.viewActivatedCallback(),ys.isNull(this.geometry)&&(this.geometry=this.createDefaultGeometry())}};ms([_s({converter:vs.Json})],ee.prototype,"geometry",void 0);import{CustomElement as bs,P as Es,Watch as qt,PropertyConverters as Jt}from"@pacem/pacem-core";import{Utils as Zi}from"@pacem/pacem-core";import{Utils as xs}from"@pacem/pacem-core";function bt(n){return(e,t,o)=>{let r=`_${t}_${xs.uniqueCode()}_backingField`;function i(){return this[r]}function s(a){if(a!==this[r]){let c=this[r];this[r]=a,n.call(this,t,c,a)}}Object.defineProperty(e,t,{get:function(){return i.call(this)},set:function(a){s.call(this,a)},enumerable:!0,configurable:!1})}}var dr=function(n,e,t,o){var r=arguments.length,i=r<3?e:o===null?o=Object.getOwnPropertyDescriptor(e,t):o,s;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")i=Reflect.decorate(n,e,t,o);else for(var a=n.length-1;a>=0;a--)(s=n[a])&&(i=(r<3?s(i):r>3?s(e,t,i):s(e,t))||i);return r>3&&i&&Object.defineProperty(e,t,i),i},Et=class{constructor(e=[]){this.positions=e}static barycenter(e){var t={x:0,y:0,z:0};if(!Zi.isNullOrEmpty(e)){for(var o=e.length,r=0;r<e.length;r++){var i=e[r];t.x+=i.x,t.y+=i.y,t.z+=i.z}var s=1*o;t.x/=s,t.y/=s,t.z/=s}return t}static boundingBox(e){let t={minX:1/0,minY:1/0,minZ:1/0,maxX:-1/0,maxY:-1/0,maxZ:-1/0};if(!Zi.isNullOrEmpty(e))for(var o=0;o<e.length;o++){var r=e[o];t.minX=Math.min(t.minX,r.x),t.minY=Math.min(t.minY,r.y),t.minZ=Math.min(t.minZ,r.z),t.maxX=Math.max(t.maxX,r.x),t.maxY=Math.max(t.maxY,r.y),t.maxZ=Math.max(t.maxZ,r.z)}return t}setAsDirty(){Zt.call(this)}};function Zt(){let n=this;n.flags=[I.Geometry]}var et=class extends Et{};dr([bt(Zt)],et.prototype,"positions",void 0);var W=class extends Et{#e;#t;#r;get barycenter(){return this.#r??=Et.barycenter(this.positions)}set barycenter(e){this.#r=e}get boundingBox(){return this.#e??=Et.boundingBox(this.positions)}set boundingBox(e){this.#e=e}get boundingSphere(){return this.#t}set boundingSphere(e){this.#t=e}constructor(e,t,o=[],r=[]){super(e),this.triangleIndices=t,this.textureCoordinates=o,this.normals=r}};dr([bt(Zt)],W.prototype,"positions",void 0);dr([bt(Zt)],W.prototype,"triangleIndices",void 0);dr([bt(Zt)],W.prototype,"textureCoordinates",void 0);dr([bt(Zt)],W.prototype,"normals",void 0);var wt=function(n,e,t,o){var r=arguments.length,i=r<3?e:o===null?o=Object.getOwnPropertyDescriptor(e,t):o,s;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")i=Reflect.decorate(n,e,t,o);else for(var a=n.length-1;a>=0;a--)(s=n[a])&&(i=(r<3?s(i):r>3?s(e,t,i):s(e,t))||i);return r>3&&i&&Object.defineProperty(e,t,i),i},Zr,Ae=Zr=class extends ee{static createMeshGeometry(e,t,o,r,i,s){let a=e||1,c=t||1,l=o||1,u=r||1,p=i||1,f=s||1,h=[],b=[],C=[];for(var x=0;x<=p;x++)for(var d=c/2-c*(1*x)/(1*p),_=0;_<=f;_++)for(var T=-l/2+l*(1*_)/(1*f),N=0;N<=u;N++){var E=-a/2+a*(1*N)/(1*u);(N==0||N==u||_==0||_==f||x==0||x==p)&&h.push({x:E,y:d,z:T})}for(var v=function(se,ue,re){for(var Y=1e-5,de=0;de<h.length;de++){var me=h[de];if(Math.abs(me.x-se)<Y&&Math.abs(me.y-ue)<Y&&Math.abs(me.z-re)<Y)return de}return-1},A=function(se,ue,re,Y,de,me,Le,Oe){C.push(se),C.push(ue),C.push(re),C.push(se),C.push(re),C.push(Y),b.push({x:de,y:Oe}),b.push({x:Le,y:Oe}),b.push({x:Le,y:me}),b.push({x:de,y:Oe}),b.push({x:Le,y:me}),b.push({x:de,y:me})},_=0;_<f;_++)for(var d=c/2,T=-l/2+l*(1*_)/(1*f),L=-l/2+l*(1*(_+1))/(1*f),N=0;N<u;N++){var E=-a/2+1*N*a/(1*u),P=-a/2+1*(N+1)*a/(1*u),G=v(E,d,L),R=v(P,d,L),m=v(P,d,T),g=v(E,d,T),y=1*(N+1)/(1*u),w=1*N/(1*u),M=1-1*(_+1)/(1*f),O=1-1*_/(1*f);A(G,R,m,g,w,O,y,M)}for(var x=0;x<p;x++)for(var d=c/2-1*x*c/(1*p),D=c/2-(x+1)*c/(1*p),T=-l/2,N=0;N<u;N++){var E=a/2-1*N*a/(1*u),P=a/2-(N+1)*a/(1*u),G=v(E,D,T),R=v(P,D,T),m=v(P,d,T),g=v(E,d,T),y=(N+1)/(1*u),w=1*N/(1*u),M=1-(x+1)/(1*p),O=1-1*x/(1*p);A(G,R,m,g,w,O,y,M)}for(var x=0;x<p;x++)for(var d=c/2-1*x*c/(1*p),D=c/2-(x+1)*c/(1*p),E=-a/2,_=0;_<f;_++){var T=-l/2+_*l/(1*f),L=-l/2+(_+1)*l/(1*f),G=v(E,D,T),R=v(E,D,L),m=v(E,d,L),g=v(E,d,T),y=(_+1)/(1*f),w=1*_/(1*f),M=1-(x+1)/(1*p),O=1-x/(1*p);A(G,R,m,g,w,O,y,M)}for(var x=0;x<p;x++)for(var d=c/2-x*c/(1*p),D=c/2-(x+1)*c/(1*p),T=l/2,N=0;N<u;N++){var E=-a/2+N*a/(1*u),P=-a/2+(N+1)*a/(1*u),G=v(E,D,T),R=v(P,D,T),m=v(P,d,T),g=v(E,d,T),y=(N+1)/(1*u),w=1*N/(1*u),M=1-(x+1)/(1*p),O=1-1*x/(1*p);A(G,R,m,g,w,O,y,M)}for(var x=0;x<p;x++)for(var d=c/2-x*c/(1*p),D=c/2-(x+1)*c/(1*p),E=a/2,_=0;_<f;_++){var T=l/2-_*l/(1*f),L=l/2-(_+1)*l/(1*f),G=v(E,D,T),R=v(E,D,L),m=v(E,d,L),g=v(E,d,T),y=(_+1)/(1*f),w=1*_/(1*f),M=1-(x+1)/(1*p),O=1-1*x/(1*p);A(G,R,m,g,w,O,y,M)}for(var _=0;_<f;_++)for(var d=-c/2,T=l/2-l*_/(1*f),L=l/2-l*(_+1)/(1*f),N=0;N<u;N++){var E=-a/2+N*a/(1*u),P=-a/2+(N+1)*a/(1*u),G=v(E,d,L),R=v(P,d,L),m=v(P,d,T),g=v(E,d,T),y=(N+1)/(1*u),w=1*N/(1*u),M=1-(_+1)/(1*f),O=1-1*_/(1*f);A(G,R,m,g,w,O,y,M)}let X=new W(h,C,b);X.key=`box_${e}x${t}x${o}_w${r}_h${i}_d${s}`,ce(X);let H={x:0,y:0,z:0},K=e/2,ie=t/2,he=o/2;return X.barycenter=H,X.boundingBox={maxX:K,maxY:ie,maxZ:he,minX:-K,minY:-ie,minZ:-he},X.boundingSphere={center:H,radius:Math.sqrt(Math.pow(K,2)+Math.pow(ie,2)+Math.pow(he,2))},X}createDefaultGeometry(){return Zr.createMeshGeometry()}propertyChangedCallback(e,t,o,r){switch(super.propertyChangedCallback(e,t,o,r),e){case"width":case"height":case"depth":case"widthSegments":case"heightSegments":case"depthSegments":this.geometry=Zr.createMeshGeometry(this.width,this.height,this.depth,this.widthSegments,this.heightSegments,this.depthSegments);break}}};wt([qt({emit:!1,converter:Jt.Number})],Ae.prototype,"width",void 0);wt([qt({emit:!1,converter:Jt.Number})],Ae.prototype,"height",void 0);wt([qt({emit:!1,converter:Jt.Number})],Ae.prototype,"depth",void 0);wt([qt({emit:!1,converter:Jt.Number})],Ae.prototype,"widthSegments",void 0);wt([qt({emit:!1,converter:Jt.Number})],Ae.prototype,"heightSegments",void 0);wt([qt({emit:!1,converter:Jt.Number})],Ae.prototype,"depthSegments",void 0);Ae=Zr=wt([bs({tagName:Es+"-"+"3d"+"-primitive-box"})],Ae);import{CustomElement as ws,P as Cs,Watch as mr,PropertyConverters as gr}from"@pacem/pacem-core";var Kt=function(n,e,t,o){var r=arguments.length,i=r<3?e:o===null?o=Object.getOwnPropertyDescriptor(e,t):o,s;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")i=Reflect.decorate(n,e,t,o);else for(var a=n.length-1;a>=0;a--)(s=n[a])&&(i=(r<3?s(i):r>3?s(e,t,i):s(e,t))||i);return r>3&&i&&Object.defineProperty(e,t,i),i},qr,tt=qr=class extends ee{static createMeshGeometry(e=1,t=1,o=18,r=5,i=1){let s=e,a=[],c=[],l=[],u=ze*(360/o),p=s/t,f=t/r,h=1/o;a.push({x:0,y:t,z:0});for(let d=1;d<=r;d++){let _=t-f*d,T=_/t,N=(t-_)*p,v=(_+f)/t;for(let A=0;A<o;A++){let L=u*A,P=Math.cos(L)*N,G=-Math.sin(L)*N;a.push({x:P,y:_,z:G});let R=1+o*(d-1)+A,m=A==0?R+o-1:R-1,g=A*h,y=A==0?1-h:h*(A-1);if(d==1){l.push(0,m,R),c.push({x:g,y:1},{x:y,y:T},{x:g,y:T});continue}let w=1+o*(d-2)+A,O=A==0?w+o-1:w-1,D=m,X=R,H=w;l.push(X,O,D),l.push(X,H,O);let K={x:y,y:v},ie={x:y,y:T},he={x:g,y:T},se={x:g,y:v};c.push(he,K,ie),c.push(he,se,K)}}let b=1+(r-1)*o;a.push({x:0,y:0,z:0});let C=b+o;for(let d=1;d<=i;d++){let _=d/i,T=e*_,N=(d-1)/i;for(let E=0;E<o;E++){let v=u*E,A=Math.cos(v),L=Math.sin(v),P=v-u,G=Math.cos(P),R=Math.sin(P),m=.5*(1+A*_),g=.5*(1+L*_),y=.5*(1+G*_),w=.5*(1+R*_),M,O;if(d!=i){let Gt=Math.cos(v)*T,dt=-Math.sin(v)*T;a.push({x:Gt,y:0,z:dt}),M=C+1+(d-1)*o+E,O=E==0?M+o-1:M-1}else M=b+E,O=E==0?b+o-1:M-1;if(d==1){l.push(C,M,O),c.push({x:.5,y:.5},{x:m,y:g},{x:y,y:w});continue}let D=.5*(1+A*N),X=.5*(1+L*N),H=.5*(1+G*N),K=.5*(1+R*N),ie=C+1+(d-2)*o+E,se=E==0?ie+o-1:ie-1,ue=O,re=M,Y=ie;l.push(se,Y,ue),l.push(ue,Y,re);let de={x:H,y:K},me={x:y,y:w},Le={x:m,y:g},Oe={x:D,y:X};c.push(de,Oe,me),c.push(me,Oe,Le)}}let x=new W(a,l,c);return x.key=`cone_${e}x${t}_s${o}_h${r}_c${i}`,ce(x),x}createDefaultGeometry(){return qr.createMeshGeometry()}propertyChangedCallback(e,t,o,r){switch(super.propertyChangedCallback(e,t,o,r),e){case"radius":case"height":case"sides":case"heightSegments":case"capSegments":this.geometry=qr.createMeshGeometry(this.radius,this.height,this.sides,this.heightSegments,this.capSegments);break}}};Kt([mr({emit:!1,converter:gr.Number})],tt.prototype,"radius",void 0);Kt([mr({emit:!1,converter:gr.Number})],tt.prototype,"height",void 0);Kt([mr({emit:!1,converter:gr.Number})],tt.prototype,"sides",void 0);Kt([mr({emit:!1,converter:gr.Number})],tt.prototype,"heightSegments",void 0);Kt([mr({emit:!1,converter:gr.Number})],tt.prototype,"capSegments",void 0);tt=qr=Kt([ws({tagName:Cs+"-"+"3d"+"-primitive-cone"})],tt);import{CustomElement as Ns,P as Rs,Watch as _r,PropertyConverters as vr}from"@pacem/pacem-core";var Qt=function(n,e,t,o){var r=arguments.length,i=r<3?e:o===null?o=Object.getOwnPropertyDescriptor(e,t):o,s;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")i=Reflect.decorate(n,e,t,o);else for(var a=n.length-1;a>=0;a--)(s=n[a])&&(i=(r<3?s(i):r>3?s(e,t,i):s(e,t))||i);return r>3&&i&&Object.defineProperty(e,t,i),i},Jr,rt=Jr=class extends ee{static createMeshGeometry(e=1,t=1,o=18,r=5,i=1){let s=e,a=[],c=[],l=[],u=ze*(360/o);a.push({x:0,y:t,z:0}),a.push({x:0,y:0,z:0});let p=s/i;for(let v=1;v<=i;v++)for(var f=p*v,h=0;h<o;h++){let A=2+2*o*(v-1),L=h==0?A+2*(o-1):A+2*(h-1),P=A+2*h,G=Math.cos(u*h),R=-Math.sin(u*h),m=Math.cos(u*(h-1)),g=-Math.sin(u*(h-1)),y=f*G,w=f*R,M={x:y,y:t,z:w},O={x:y,y:0,z:w};a.push(M),a.push(O);let D=.5*f/s,X=G*D,H=R*D,K=m*D,ie=g*D;if(v==1){let he=[0,L,P],se=[1,P+1,L+1],ue=[{x:.5,y:.5},{x:.5+K,y:.5-ie},{x:.5+X,y:.5-H}],re=[{x:.5,y:.5},{x:.5+X,y:.5+H},{x:.5+K,y:.5+ie}];l.push(...he),l.push(...se);for(let Y=0;Y<ue.length;Y++)c.push(ue[Y]);for(let Y=0;Y<re.length;Y++)c.push(re[Y])}else{let he=2+2*o*(v-2),se=h==0?he+2*(o-1):he+2*(h-1),ue=he+2*h,re=.5*((v-1)/i),Y=G*re,de=R*re,me=m*re,Le=g*re,Oe={x:.5+K,y:.5-ie},Gt={x:.5+X,y:.5-H},dt={x:.5+Y,y:.5-de},$i={x:.5+me,y:.5-Le},zi={x:.5+K,y:.5+ie},$n={x:.5+X,y:.5+H},Ui={x:.5+Y,y:.5+de},zn={x:.5+me,y:.5+Le};l.push(L),l.push(P),l.push(se),l.push(se),l.push(P),l.push(ue),l.push(ue+1),l.push(P+1),l.push(L+1),l.push(ue+1),l.push(L+1),l.push(se+1),c.push(Oe),c.push(Gt),c.push($i),c.push($i),c.push(Gt),c.push(dt),c.push(Ui),c.push($n),c.push(zi),c.push(Ui),c.push(zi),c.push(zn)}}let b=2+2*o*i,C=2+2*o*(i-1),x=1/o,d=1/r;for(let v=1;v<=r;v++)for(let A=0;A<o;A++){if(v!=r){var _=s*Math.cos(u*A),T=-s*Math.sin(u*A),N=t*v/r;a.push({x:_,y:N,z:T})}let L=A==0?o-1:A-1,P=v==1?C+2*L+1:b+o*(v-2)+L,G=v==1?C+2*A+1:b+o*(v-2)+A,R=v==r?C+2*A:b+o*(v-1)+A,m=v==r?C+2*L:b+o*(v-1)+L,g=L*x,y=(v-1)*d,w=A==0?1:A*x,M=v*d,O={x:g,y},D={x:w,y},X={x:w,y:M},H={x:g,y:M};l.push(P),l.push(G),l.push(R),l.push(P),l.push(R),l.push(m),c.push(O),c.push(D),c.push(X),c.push(O),c.push(X),c.push(H)}let E=new W(a,l,c);return E.key=`cylinder_${e}x${t}_s${o}_h${r}_c${i}`,ce(E),E}createDefaultGeometry(){return Jr.createMeshGeometry()}propertyChangedCallback(e,t,o,r){switch(super.propertyChangedCallback(e,t,o,r),e){case"radius":case"height":case"sides":case"heightSegments":case"capSegments":this.geometry=Jr.createMeshGeometry(this.radius,this.height,this.sides,this.heightSegments,this.capSegments);break}}};Qt([_r({emit:!1,converter:vr.Number})],rt.prototype,"radius",void 0);Qt([_r({emit:!1,converter:vr.Number})],rt.prototype,"height",void 0);Qt([_r({emit:!1,converter:vr.Number})],rt.prototype,"sides",void 0);Qt([_r({emit:!1,converter:vr.Number})],rt.prototype,"heightSegments",void 0);Qt([_r({emit:!1,converter:vr.Number})],rt.prototype,"capSegments",void 0);rt=Jr=Qt([Ns({tagName:Rs+"-"+"3d"+"-primitive-cylinder"})],rt);import{CustomElement as Ts,P as Ms,Watch as Is,PropertyConverters as As}from"@pacem/pacem-core";var qi=function(n,e,t,o){var r=arguments.length,i=r<3?e:o===null?o=Object.getOwnPropertyDescriptor(e,t):o,s;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")i=Reflect.decorate(n,e,t,o);else for(var a=n.length-1;a>=0;a--)(s=n[a])&&(i=(r<3?s(i):r>3?s(e,t,i):s(e,t))||i);return r>3&&i&&Object.defineProperty(e,t,i),i},Kr,Ps=[{x:0,y:0,z:0},{x:0,y:1,z:0}],Qr=Kr=class extends ee{static createLineGeometry(e){return new et(e||Ps)}createDefaultGeometry(){return Kr.createLineGeometry()}propertyChangedCallback(e,t,o,r){super.propertyChangedCallback(e,t,o,r),e==="positions"&&(this.geometry=Kr.createLineGeometry(o))}};qi([Is({emit:!1,converter:As.Json})],Qr.prototype,"positions",void 0);Qr=Kr=qi([Ts({tagName:Ms+"-"+"3d"+"-primitive-line"})],Qr);import{CustomElement as Ls,P as Os,Watch as to,PropertyConverters as ro}from"@pacem/pacem-core";import{Geometry as Ds}from"@pacem/pacem-numerical";var yr=function(n,e,t,o){var r=arguments.length,i=r<3?e:o===null?o=Object.getOwnPropertyDescriptor(e,t):o,s;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")i=Reflect.decorate(n,e,t,o);else for(var a=n.length-1;a>=0;a--)(s=n[a])&&(i=(r<3?s(i):r>3?s(e,t,i):s(e,t))||i);return r>3&&i&&Object.defineProperty(e,t,i),i},eo,Ct=eo=class extends ee{static createMeshGeometry(e,t,o,r){e||=1,t||=1,o||=4,r||=4;let i=e*.5,s=t*.5,a=[],c=[],l=[],u=[],p=Ds.LinearAlgebra.Vector3D.from(0,0,1);for(let h=0;h<=r;h++)for(let b=0;b<=o;b++){let C=-i+b*e/(1*o),x=0,d=-s+h*t/(1*r);if(a.push({x:C,y:x,z:d}),h<r&&b<o){let _=o+1,T=(b+1)/(1*o),N=1*b/(1*o),E=1-(h+1)/(1*r),v=1-1*h/(1*r);l.push((h+1)*_+b),l.push((h+1)*_+b+1),l.push(h*_+b+1),l.push((h+1)*_+b),l.push(h*_+b+1),l.push(h*_+b),c.push({x:N,y:E}),c.push({x:T,y:E}),c.push({x:T,y:v}),c.push({x:N,y:E}),c.push({x:T,y:v}),c.push({x:N,y:v}),u.push(p,p,p,p,p,p)}}let f=new W(a,l,c,u);return f.key=`plane_${e}x${t}_w${o}_l${r}`,f}createDefaultGeometry(){return eo.createMeshGeometry()}propertyChangedCallback(e,t,o,r){switch(super.propertyChangedCallback(e,t,o,r),e){case"width":case"length":case"widthSegments":case"lengthSegments":this.geometry=eo.createMeshGeometry(this.width,this.length,this.widthSegments,this.lengthSegments);break}}};yr([to({emit:!1,converter:ro.Number})],Ct.prototype,"width",void 0);yr([to({emit:!1,converter:ro.Number})],Ct.prototype,"length",void 0);yr([to({emit:!1,converter:ro.Number})],Ct.prototype,"widthSegments",void 0);yr([to({emit:!1,converter:ro.Number})],Ct.prototype,"lengthSegments",void 0);Ct=eo=yr([Ls({tagName:Os+"-"+"3d"+"-primitive-plane"})],Ct);import{CustomElement as xr,P as br,Watch as Gs,PropertyConverters as Bs}from"@pacem/pacem-core";import{Geometry as Ss}from"@pacem/pacem-numerical";var er=function(n,e,t,o){var r=arguments.length,i=r<3?e:o===null?o=Object.getOwnPropertyDescriptor(e,t):o,s;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")i=Reflect.decorate(n,e,t,o);else for(var a=n.length-1;a>=0;a--)(s=n[a])&&(i=(r<3?s(i):r>3?s(e,t,i):s(e,t))||i);return r>3&&i&&Object.defineProperty(e,t,i),i},Fo,Xo,Ho,jo,Wo,Nt={parseFloats:function(n){let e=/([\d.-]+)/i;var t=e.exec(n);let o=[];for(;t!=null;){let r=t[0],i=parseFloat(r);o.push(i),n=n.replace(r,""),t=e.exec(n)}return o}},Z=Ss.LinearAlgebra.Vector3D,je=class extends ee{propertyChangedCallback(e,t,o,r){super.propertyChangedCallback(e,t,o,r),e==="radius"&&this._assignMeshGeometry(o)}_assignMeshGeometry(e){this.geometry=this.createMeshGeometry(e>0?e:1)}createDefaultGeometry(){return this.createMeshGeometry(1)}};er([Gs({emit:!1,converter:Bs.Number})],je.prototype,"radius",void 0);var Yo=Fo=class extends je{static createMeshGeometry(e){e||=1;let o="0 0.5774 -0.8165, 0 0.5774 0.8165, 0.8165 -0.5774 0, -0.8165 -0.5774 0".split(","),r=[];for(let p=0;p<o.length;p++){let f=o[p],h=Nt.parseFloats(f);r.push({x:h[0]*e,y:h[1]*e,z:h[2]*e})}let i=[1,2,0,2,3,0,3,1,0,3,2,1],a="0.5 0.9995, 0.5 0.0004995, 0.0004995 0.5, 0.9995 0.5, 0.5 0.0004995, 0.9995 0.5, 0.5 0.9995, 0.0004995 0.5, 0.9995 0.5, 0.5 0.9995, 0.0004995 0.5, 0.5 0.0004995".split(","),c=[4,5,6,7,8,9,10,11,0,3,2,1],l=[];for(let p=0;p<c.length;p++){let f=c[p],h=Nt.parseFloats(a[f]);l.push({x:h[0],y:h[1]})}let u=new W(r,i,l);return u.key=`tetrahedron_${e}`,ce(u),u.boundingSphere={center:Z.zero(),radius:e},u}createMeshGeometry(e=this.radius){return Fo.createMeshGeometry(e)}};Yo=Fo=er([xr({tagName:br+"-"+"3d"+"-primitive-tetrahedron"})],Yo);var Zo=Xo=class extends je{static createMeshGeometry(e){e||=1;let t="0 0.7071 -0.7071, 0 0.7071 0.7071, 1 0 0, 0 -0.7071 -0.7071, -1 0 0, 0 -0.7071 0.7071",o=[1,2,0,2,3,0,3,4,0,4,1,0,4,5,1,5,2,1,2,5,3,4,3,5],r="0.5 0.9995, 0.5 0.9995, 0.0004995 0.5, 0.5 0.9995, 0.9995 0.5, 0.5 0.0004995, 0.5 0.0004995, 0.9995 0.5, 0.5 0.9995, 0.0004995 0.5, 0.5 0.0004995, 0.5 0.9995, 0.5 0.0004995, 0.9995 0.5, 0.5 0.9995, 0.0004995 0.5, 0.5 0.0004995, 0.0004995 0.5, 0.5 0.0004995, 0.5 0.9995, 0.5 0.0004995, 0.9995 0.5, 0.5 0.0004995, 0.5 0.9995",i=[6,7,8,9,10,11,12,13,14,15,16,0,17,18,19,20,21,1,2,22,23,4,3,5],s=t.split(","),a=[];for(let p=0;p<s.length;p++){let f=s[p],h=Nt.parseFloats(f);a.push({x:h[0]*e,y:h[1]*e,z:h[2]*e})}let c=r.split(","),l=[];for(let p=0;p<i.length;p++){let f=i[p],h=Nt.parseFloats(c[f]);l.push({x:h[0],y:h[1]})}let u=new W(a,o,l);return u.key=`octahedron_${e}`,ce(u),u.boundingSphere={center:Z.zero(),radius:e},u}createMeshGeometry(e=this.radius){return Xo.createMeshGeometry(e)}};Zo=Xo=er([xr({tagName:br+"-"+"3d"+"-primitive-octahedron"})],Zo);var qo=Ho=class extends je{static createMeshGeometry(e){e||=1;let t=1/Math.sqrt(3),o=2*e*t,r=Ae.createMeshGeometry(o,o,o);return r.key=`hexahedron_${e}`,r}createMeshGeometry(e=this.radius){return Ho.createMeshGeometry(e)}};qo=Ho=er([xr({tagName:br+"-"+"3d"+"-primitive-hexahedron"})],qo);var Jo=jo=class extends je{static createMeshGeometry(e){e||=1;let t="0 0.850651 -0.525731, 0 0.850651 0.525731, 0.850651 0.525731 0, 0.525731 0 -0.850651, -0.525731 0 -0.850651, -0.850651 0.525731 0, -0.525731 0 0.850651, 0.525731 0 0.850651, 0.850651 -0.525731 0, 0 -0.850651 0.525731, 0 -0.850651 -0.525731, -0.850651 -0.525731 0",o=[1,2,0,2,3,0,3,4,0,4,5,0,5,1,0,5,6,1,6,7,1,7,2,1,2,8,3,2,7,8,6,9,7,9,8,7,8,10,3,8,9,10,6,11,9,11,10,9,10,4,3,10,11,4,6,5,11,5,4,11],r="0.5 0.808708, 0.5 0.999501, 0.5 0.808708, 0.191292 0.5, 0.000499547 0.5, 0.5 0.808708, 0.9995 0.5, 0.808708 0.5,0.000499487 0.5, 0.5 0.191292, 0.5 0.000499487, 0.5 0.191292,0.5 0.191292, 0.999501 0.5, 0.5 0.808708, 0.5 0.808708,0.9995 0.5, 0.808708 0.999501, 0.191292 0.5, 0.808708 0.5,0.5 0.999501, 0.808708 0.5, 0.999501 0.808708, 0.5 0.999501,0.000499487 0.5, 0.5 0.191292, 0.5 0.808708, 0.9995 0.5,0.808708 0.999501, 0.191292 0.5, 0.808708 0.5, 0.5 0.999501,0.808708 0.5, 0.999501 0.808708, 0.5 0.808708, 0.5 0.191292,0.9995 0.5, 0.000499547 0.5, 0.5 0.191292, 0.191292 0.5,0.5 0.000499487, 0.808708 0.5, 0.5 0.000499487, 0.999501 0.191292,0.5 0.191292, 0.808708 0.000499487, 0.9995 0.5, 0.5 0.191292,0.5 0.808708, 0.9995 0.5, 0.5 0.191292, 0.808708 0.000499487,0.999501 0.5, 0.5 0.808708, 0.5 0.000499487, 0.808708 0.5,0.999501 0.191292, 0.808708 0.5, 0.5 0.808708, 0.5 0.191292",i=[12,13,14,15,16,17,18,19,20,21,22,23,24,25,0,26,27,28,29,30,31,32,33,1,34,35,36,2,37,38,39,40,41,42,43,7,44,45,46,8,47,48,49,50,51,52,53,9,54,55,3,10,56,57,6,58,59,5,4,11],s=t.split(","),a=[];for(let p=0;p<s.length;p++){let f=s[p],h=Nt.parseFloats(f);a.push({x:h[0]*e,y:h[1]*e,z:h[2]*e})}let c=r.split(","),l=[];for(let p=0;p<i.length;p++){let f=i[p],h=Nt.parseFloats(c[f]);l.push({x:h[0],y:h[1]})}let u=new W(a,o,l);return u.key=`icosahedron_${e}`,ce(u),u.boundingSphere={center:Z.zero(),radius:e},u}createMeshGeometry(e=this.radius){return jo.createMeshGeometry(e)}};Jo=jo=er([xr({tagName:br+"-"+"3d"+"-primitive-icosahedron"})],Jo);var Ko=Wo=class extends je{static createMeshGeometry(e){e||=1;let t=Z.from(.356822*e,.934172*e,0*e),o=Z.from(-.356822*e,.934172*e,0*e),r=Z.from(.57735*e,.57735*e,-.57735*e),i=Z.from(0*e,.356822*e,-.934172*e),s=Z.from(-.57735*e,.57735*e,-.57735*e),a=Z.from(-.57735*e,.57735*e,.57735*e),c=Z.from(0*e,.356822*e,.934172*e),l=Z.from(.57735*e,.57735*e,.57735*e),u=Z.from(.934172*e,0*e,-.356822*e),p=Z.from(.934172*e,0*e,.356822*e),f=Z.from(0*e,-.356822*e,.934172*e),h=Z.from(.57735*e,-.57735*e,.57735*e),b=Z.from(.57735*e,-.57735*e,-.57735*e),C=Z.from(.356822*e,-.934172*e,0*e),x=Z.from(-.57735*e,-.57735*e,.57735*e),d=Z.from(-.356822*e,-.934172*e,0*e),_=Z.from(0*e,-.356822*e,-.934172*e),T=Z.from(-.57735*e,-.57735*e,-.57735*e),N=Z.from(-.934172*e,0*e,.356822*e),E=Z.from(-.934172*e,0*e,-.356822*e),v=[t,o,r,i,s,a,c,l,u,p,f,h,b,C,x,d,_,T,N,E],A=[0,2,3,0,3,4,0,4,1,1,5,6,1,6,7,1,7,0,7,9,8,7,8,2,7,2,0,7,6,10,7,10,11,7,11,9,11,13,12,11,12,8,11,8,9,11,10,14,11,14,15,11,15,13,15,17,16,15,16,12,15,12,13,15,14,18,15,18,19,15,19,17,19,4,3,19,3,16,19,16,17,19,18,5,19,5,1,19,1,4,18,14,10,18,10,6,18,6,5,3,2,8,3,8,12,3,12,16],L=`0.5 0.999501, 0.5 0.999501, 0.191292 0.808708, 0.5 0.690792,
|
|
2
|
+
0.191292 0.808708, 0.191292 0.808708, 0.5 0.690792,
|
|
3
|
+
0.808708 0.808708, 0.000499517 0.5, 0.309208 0.5, 0.5 0.309208,
|
|
4
|
+
0.191292 0.191292, 0.191292 0.191292, 0.309208 0.5,
|
|
5
|
+
0.191292 0.191292, 0.5 0.000499517, 0.5 0.309208, 0.808708 0.191292,
|
|
6
|
+
0.000499517 0.5, 0.309208 0.5, 0.690792 0.5, 0.808708 0.808708,
|
|
7
|
+
0.5 0.999501, 0.690792 0.5, 0.5 0.999501, 0.191292 0.808708,
|
|
8
|
+
0.690792 0.5, 0.191292 0.808708, 0.309208 0.5, 0.309208 0.5,
|
|
9
|
+
0.191292 0.191292, 0.5 0.000499517, 0.309208 0.5, 0.5 0.000499517,
|
|
10
|
+
0.808708 0.191292, 0.309208 0.5, 0.808708 0.191292,
|
|
11
|
+
0.690792 0.5, 0.191292 0.808708, 0.309208 0.5, 0.690792 0.5,
|
|
12
|
+
0.191292 0.808708, 0.690792 0.5, 0.808708 0.808708,
|
|
13
|
+
0.191292 0.808708, 0.808708 0.808708, 0.808708 0.808708,
|
|
14
|
+
0.5 0.690792, 0.5 0.309208, 0.808708 0.808708, 0.5 0.309208,
|
|
15
|
+
0.808708 0.191292, 0.808708 0.191292, 0.9995 0.5, 0.191292 0.191292,
|
|
16
|
+
0.5 0.000499517, 0.808708 0.191292, 0.191292 0.191292,
|
|
17
|
+
0.808708 0.191292, 0.690792 0.5, 0.191292 0.191292,
|
|
18
|
+
0.690792 0.5, 0.191292 0.191292, 0.5 0.000499517, 0.808708 0.191292,
|
|
19
|
+
0.191292 0.191292, 0.808708 0.191292, 0.690792 0.5,
|
|
20
|
+
0.690792 0.5, 0.309208 0.5, 0.690792 0.5, 0.808708 0.808708,
|
|
21
|
+
0.5 0.999501, 0.690792 0.5, 0.5 0.999501, 0.191292 0.808708,
|
|
22
|
+
0.690792 0.5, 0.191292 0.808708, 0.5 0.000499517, 0.808708 0.191292,
|
|
23
|
+
0.690792 0.5, 0.5 0.000499517, 0.690792 0.5, 0.309208 0.5,
|
|
24
|
+
0.309208 0.5, 0.191292 0.191292, 0.9995 0.5, 0.808708 0.808708,
|
|
25
|
+
0.5 0.690792, 0.9995 0.5, 0.5 0.690792, 0.5 0.309208,
|
|
26
|
+
0.9995 0.5, 0.5 0.309208, 0.309208 0.5, 0.690792 0.5,
|
|
27
|
+
0.808708 0.808708, 0.309208 0.5, 0.808708 0.808708,
|
|
28
|
+
0.5 0.999501, 0.000499517 0.5, 0.5 0.309208, 0.000499517 0.5,
|
|
29
|
+
0.5 0.690792, 0.5 0.690792, 0.000499517 0.5, 0.5 0.690792,
|
|
30
|
+
0.191292 0.191292`,P=[20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,0,46,47,48,49,50,51,7,52,53,54,55,56,57,58,59,60,61,9,62,63,64,65,66,67,11,68,69,70,71,72,73,74,75,76,77,13,78,79,80,81,82,83,15,84,85,86,87,88,89,90,91,92,93,17,94,95,96,97,98,99,19,1,4,100,14,101,102,10,103,18,6,5,104,2,105,106,8,107,3,12,16],G=L.split(","),R=[];for(let g=0;g<P.length;g++){let y=P[g],w=Nt.parseFloats(G[y]);R.push({x:w[0],y:w[1]})}let m=new W(v,A,R);return m.key=`dodecahedron_${e}`,ce(m),m.boundingSphere={center:Z.zero(),radius:e},m}createMeshGeometry(e=this.radius){return Wo.createMeshGeometry(e)}};Ko=Wo=er([xr({tagName:br+"-"+"3d"+"-primitive-dodecahedron"})],Ko);import{CustomElement as Vs,P as $s,Watch as Ji,PropertyConverters as Ki}from"@pacem/pacem-core";var Qo=function(n,e,t,o){var r=arguments.length,i=r<3?e:o===null?o=Object.getOwnPropertyDescriptor(e,t):o,s;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")i=Reflect.decorate(n,e,t,o);else for(var a=n.length-1;a>=0;a--)(s=n[a])&&(i=(r<3?s(i):r>3?s(e,t,i):s(e,t))||i);return r>3&&i&&Object.defineProperty(e,t,i),i},oo,Er=oo=class extends ee{static createMeshGeometry(e=1,t=8){let o=[],r=[],i=[],s=e,a=t,c=ze*(360/a),l=a%2==0?a/2:(a-1)/2;o.push({x:0,y:s,z:0});for(let f=1;f<l;f++){let h=c*f,b=Math.cos(h),C=Math.sin(h),x=1-1*f/l;for(let d=0;d<a;d++){let _=c*d-Math.PI/2,T=Math.cos(_),N=Math.sin(_),E=s*C*T,v=s*b,A=s*C*N;o.push({x:E,y:v,z:A});let L=d==0?a-1:d-1,P=d==0?0:1-1*d/a,G=1-1*L/a;if(f==1)i.push(1+d),i.push(1+L),i.push(0),r.push({x:P,y:x}),r.push({x:G,y:x}),r.push({x:.5,y:1});else{i.push((f-1)*a+d+1),i.push((f-1)*a+L+1),i.push((f-2)*a+L+1),i.push((f-1)*a+d+1),i.push((f-2)*a+L+1),i.push((f-2)*a+d+1);let R=1-(f-1)/l;r.push({x:P,y:x}),r.push({x:G,y:x}),r.push({x:G,y:R}),r.push({x:P,y:x}),r.push({x:G,y:R}),r.push({x:P,y:R})}}}o.push({x:0,y:-s,z:0});let u=o.length-1;for(let f=0;f<a;f++){let h=l-2,b=f==0?a-1:f-1,C=f==0?0:1-1*f/a,x=1-1*b/a,d=1-(h+1)/l;i.push(u),i.push(h*a+1+b),i.push(h*a+1+f),r.push({x:.5,y:0}),r.push({x,y:d}),r.push({x:C,y:d})}let p=new W(o,i,r);return p.key=`sphere_${e}_s${t}`,ce(p),p}createDefaultGeometry(){return oo.createMeshGeometry()}propertyChangedCallback(e,t,o,r){switch(super.propertyChangedCallback(e,t,o,r),e){case"radius":case"segments":this.geometry=oo.createMeshGeometry(this.radius,this.segments);break}}};Qo([Ji({emit:!1,converter:Ki.Number})],Er.prototype,"radius",void 0);Qo([Ji({emit:!1,converter:Ki.Number})],Er.prototype,"segments",void 0);Er=oo=Qo([Vs({tagName:$s+"-"+"3d"+"-primitive-sphere"})],Er);import{CustomElement as zs,P as Us,Watch as no,PropertyConverters as so}from"@pacem/pacem-core";var wr=function(n,e,t,o){var r=arguments.length,i=r<3?e:o===null?o=Object.getOwnPropertyDescriptor(e,t):o,s;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")i=Reflect.decorate(n,e,t,o);else for(var a=n.length-1;a>=0;a--)(s=n[a])&&(i=(r<3?s(i):r>3?s(e,t,i):s(e,t))||i);return r>3&&i&&Object.defineProperty(e,t,i),i},io,Rt=io=class extends ee{static createMeshGeometry(e=1,t=.25,o=24,r=12){let i=[],s=[],a=[],c=ze*(360/o),l=ze*(360/r),u=e,p=t;for(let h=0;h<o;h++){let b=c*h-Math.PI/2,C=Math.sin(b),x=Math.cos(b);for(let d=0;d<r;d++){let _=l*d+Math.PI,T=Math.cos(_),N=u*x+p*T*x,E=p*Math.sin(_),v=u*C+p*T*C;i.push({x:N,y:E,z:v});let A=h>0?h-1:o-1,L=d>0?d-1:r-1,P=h==0?0:1-1*h/o,G=d>0?1*d/r:1,R=h>0?1-(h-1)/o:1/o,m=d>0?(d-1)/r:1-1/r;a.push(h*r+L),a.push(A*r+L),a.push(A*r+d),a.push(h*r+L),a.push(A*r+d),a.push(h*r+d),s.push({x:P,y:m}),s.push({x:R,y:m}),s.push({x:R,y:G}),s.push({x:P,y:m}),s.push({x:R,y:G}),s.push({x:P,y:G})}}let f=new W(i,a,s);return f.key=`torus_${e}x${t}_t${o}_s${r}`,ce(f),f}createDefaultGeometry(){return io.createMeshGeometry()}propertyChangedCallback(e,t,o,r){switch(super.propertyChangedCallback(e,t,o,r),e){case"radius":case"innerRadius":case"segments":case"sides":this.geometry=io.createMeshGeometry(this.radius,this.innerRadius,this.segments,this.sides);break}}};wr([no({emit:!1,converter:so.Number})],Rt.prototype,"radius",void 0);wr([no({emit:!1,converter:so.Number})],Rt.prototype,"innerRadius",void 0);wr([no({emit:!1,converter:so.Number})],Rt.prototype,"segments",void 0);wr([no({emit:!1,converter:so.Number})],Rt.prototype,"sides",void 0);Rt=io=wr([zs({tagName:Us+"-"+"3d"+"-primitive-torus"})],Rt);import{CustomEventUtils as ks,Utils as ei}from"@pacem/pacem-core";import{Point as Fs}from"@pacem/pacem-foundation";function Xs(n,e){let t,o;if(Fs.isPoint(n))t=n.x,o=n.y;else{let{page:s}=ks.getEventCoordinates(n),a={x:s.x-e.x,y:s.y-e.y};t=a.x,o=a.y}let r=t/e.width*2-1,i=o/e.height*-2+1;return{x:r,y:i}}var We=class n{static isMeshGeometry(e){return"positions"in e&&ei.isArray(e.positions)&&"triangleIndices"in e&&ei.isArray(e.triangleIndices)}static isVector3D(e){return"x"in e&&typeof e.x=="number"&&"y"in e&&typeof e.y=="number"&&"z"in e&&typeof e.z=="number"}static isRgba(e){return"r"in e&&typeof e.r=="number"&&"g"in e&&typeof e.g=="number"&&"b"in e&&typeof e.b=="number"}static flattenVectorArray(e){let t=[];for(let o of e)n.isVector3D(o)?t.push(o.x,o.y,o.z):n.isRgba(o)?t.push(o.r,o.g,o.b,o.a??1):t.push(o.x,o.y);return t}static findCamera(e){return(e||[]).find(t=>pe(t)&&!t.hide)}clipPixel(e,t){return t instanceof HTMLElement&&(t=ei.offsetRect(t)),Xs(e,t)}};import{CustomElement as Hs,P as js,Watch as Ws,PropertyConverters as Ys,Utils as V,CustomElementUtils as ti}from"@pacem/pacem-core";import{Colors as ri}from"@pacem/pacem-foundation";import{Geometry as Qi}from"@pacem/pacem-numerical";var nn=function(n,e,t,o){var r=arguments.length,i=r<3?e:o===null?o=Object.getOwnPropertyDescriptor(e,t):o,s;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")i=Reflect.decorate(n,e,t,o);else for(var a=n.length-1;a>=0;a--)(s=n[a])&&(i=(r<3?s(i):r>3?s(e,t,i):s(e,t))||i);return r>3&&i&&Object.defineProperty(e,t,i),i};function ao(n){return We.flattenVectorArray(n)}var en="0.152.2",Zs="0.147.0",co={VERSION:en,API_URI:`https://unpkg.com/three@${en}/build/three.min.js`,ORBIT_URI:`https://unpkg.com/three@${Zs}/examples/js/controls/OrbitControls.js`,LOADERS:[],DEFAULT_MATERIAL:function(){return new THREE.MeshStandardMaterial({color:"#069",flatShading:!0})}};function qs(n,e,t,o=1.333){let r=new THREE.Box3;for(let h of t)r.expandByObject(h);let i=r.getSize(new THREE.Vector3),s=r.getCenter(new THREE.Vector3),c=Math.max(i.x,i.y,i.z)/(2*Math.atan(Math.PI*n.fov/360)),l=c/n.aspect,u=o*Math.max(c,l),p=!V.isNull(e);var f;p&&(f=e.target.clone().sub(n.position).normalize().multiplyScalar(u),e.maxDistance=u*10,e.target.copy(s)),n.near=u/100,n.far=u*100,n.updateProjectionMatrix(),p&&(n.position.copy(e.target).sub(f),e.update())}function Js(n){return[n.m11,n.m21,n.m31,n.offsetX,n.m12,n.m22,n.m32,n.offsetY,n.m13,n.m23,n.m33,n.offsetZ,n.m14,n.m24,n.m34,n.m44]}function Ks(n){let e=new THREE.BufferGeometry,t=ao(n.positions);if(e.setAttribute("position",new THREE.Float32BufferAttribute(t,3)),n instanceof W){V.isNullOrEmpty(n.triangleIndices)||e.setIndex(n.triangleIndices);let o=ao(n.positions);e.setAttribute("position",new THREE.Float32BufferAttribute(o,3));let r=ao(n.textureCoordinates);if(e.setAttribute("uv",new THREE.Float32BufferAttribute(r,2)),V.isNullOrEmpty(n.normals))e.computeVertexNormals();else{let i=ao(n.normals);e.setAttribute("normal",new THREE.Float32BufferAttribute(i,3))}}return e}function Qs(n){var e;if(n.type==="spot"){let t=new THREE.SpotLight;t.target.position.set(n.target.x,n.target.y,n.target.z),e=t}else e=new THREE.PointLight;return e}function tn(n){if(V.isNull(n))return null;let e={color:typeof n.color=="string"?n.color:ri.stringify(n.color),opacity:n.opacity??1,transparent:!0,wireframe:n.wireframe??!1,visible:n.visible??!0},t=V.extend({},e,{wireframe:n.wireframe??!1}),o=r=>(n.map&&(r.map=new THREE.TextureLoader().load(n.map,i=>{r.needsUpdate=!0})),r);if(jr(n))return o(new THREE.MeshStandardMaterial(V.extend(t,{roughness:n.roughness,metalness:n.metalness,emissive:n.emissiveColor,flatShading:n.flatShading,refractionRatio:n.refractionRatio})));if(Hr(n))return o(new THREE.MeshPhongMaterial(V.extend(t,{shininess:n.shininess,emissive:n.emissiveColor,flatShading:n.flatShading,specular:n.specularColor,reflectivity:n.reflectivity,refractionRatio:n.refractionRatio})));if(Xr(n))return o(new THREE.MeshLambertMaterial(V.extend(t,{emissive:n.emissiveColor,reflectivity:n.reflectivity,refractionRatio:n.refractionRatio})));if(Ke(n)){let r=n.dashArray&&n.dashArray[0]||null,i=n.dashArray&&n.dashArray.length>1&&n.dashArray[1]||r,s=V.extend(e,{linecap:n.lineCap??"round",linejoin:n.lineJoin??"round",linewidth:n.lineWidth??1});return V.isNullOrEmpty(n.dashArray)?new THREE.LineBasicMaterial(s):new THREE.LineDashedMaterial(V.extend({dashSize:r,gapSize:i},s))}else return Ne(n)?o(new THREE.MeshBasicMaterial(t)):null}function ea(n,e,t){let o=t,r=[],i=tn(n);if(V.isNull(i)||(i.side=THREE.FrontSide,r.push(i)),!V.isNull(e))if(e==n)i.side=THREE.DoubleSide;else{let s=tn(e);V.isNull(s)||(s.side=THREE.BackSide,r.push(s))}return o&&r.length>1?r:i}function rn(n){if(V.isNullOrEmpty(n.content))throw new Error("Missing content.");return n.type?.toLowerCase()==="obj"?new THREE.OBJLoader().parse(n.content):new THREE.ObjectLoader().parse(n.content)}function ta(n){return n instanceof et?THREE.Line:THREE.Mesh}function on(n){if(V.isNullOrEmpty(n.geometry))return null;let e=ta(n.geometry);return new e}function Cr(){return"THREE"in window}async function ra(...n){let e=Date.now();var t=!1;do{t=Cr();for(let o of n)t&&=o();t||await new Promise(o=>setTimeout(o,500))}while(!t&&Date.now()-e<3e4);if(!t)throw new Error("The wait for THREE adapter initialization timed out.")}var lo=class extends Je{constructor(){super(...arguments),this._renderer=null,this._camera=null,this._scene=null,this._orbitCtrls=null,this._objects=new WeakMap,this._dict={},this._orbitControlsDelegate=e=>{},this._ensureAndRefresh=(e,t,o)=>{if(t.matrixAutoUpdate=!1,t.visible=!e.hide){if(Ee(e)){let i=t;if(e.flags.indexOf(I.Geometry)>=0){i.geometry.dispose();let s=on(e);s.constructor.name!==i.constructor.name&&(o.remove(t),delete this._dict[t.id],t=i=s),i.geometry=Ks(e.geometry)}if(e.flags.indexOf(I.Material)>=0){if(V.isArray(i.material))for(let s of i.material)s.dispose();else i.material.dispose();i.material=ea(e.material)||co.DEFAULT_MATERIAL()}}else if(e instanceof Fe&&(e.flags.indexOf(I.Material)>=0||e.flags.indexOf(I.Geometry)>=0))t.parent&&t.parent.remove(t),t=rn(e);else if(e instanceof Ze){if(e.flags.indexOf(I.Children)>=0){for(let i=t.children.length-1;i>=0;i--){let s=t.children[i];t.remove(s)}for(let i of e.items)this._addOrUpdateItem(i,t)}}else if(e instanceof Ie){let i=t;e.flags.indexOf(I.Light)>=0&&(i.color=new THREE.Color(e.color),i.intensity=e.intensity)}let r=e.position;if(Ut(e)&&!V.isNull(e.transformMatrix)&&(e.flags.indexOf(I.Position)>=0||e.flags.indexOf(I.Transform)>=0)){let i=Qi.LinearAlgebra.Matrix3D.from(1,0,0,0,0,1,0,0,0,0,1,0,r.x,r.y,r.z,1),s=Qi.LinearAlgebra.Matrix3D.multiply(e.transformMatrix,i);THREE.Matrix4.prototype.set.apply(t.matrix,Js(s))}else e.flags.indexOf(I.Position)>=0&&(t.position.set(r.x,r.y,r.z),t.updateMatrix())}return t.userData=e.tag,V.isNull(o.getObjectById(t.id))&&(o.add(t),this._dict[t.id]=e),e.flags.splice(0),t}}_assertMonoStage(e){if(e!=this._3d&&!V.isNull(this._3d))throw new Error("Stage mismatch.")}dispose(e){}snapshot(e,t,o,r){if(e!=this._3d)return Promise.resolve(null);let i=!V.isNullOrEmpty(t),s=o??(i?"image/jpeg":null),a=r??(i?.9:null);return new Promise((c,l)=>{this.render(),V.snapshotElement(this._stage,t,s,a).then(c)})}project(e,t){if(this._assertMonoStage(e),V.isNull(this._camera)||V.isNull(this._stage))return null;let o=this._stage,r=new THREE.Vector3(t.x,t.y,t.z),i=o.width,s=o.height,a=i/2,c=s/2,l=r.project(this._camera),u=l.x*a+a,p=-(l.y*c)+c;return{x:u,y:p}}zoomFit(e,...t){return this._assertMonoStage(e),new Promise((o,r)=>{let i=this._camera,s=this._objects,a=t.filter(c=>s.has(c)).map(c=>s.get(c));(V.isNull(i)||V.isNullOrEmpty(a))&&o(),qs(i,this._orbitCtrls,a),o()})}getScene(e){return this._assertMonoStage(e),this._scene}raycast(e,t,o,r){if(this._assertMonoStage(e),Cr()&&!V.isNull(this._camera)){let i=this._camera,s=new THREE.Vector2(t.x/o.width*2-1,-(t.y/o.height)*2+1),a=new THREE.Raycaster;a.setFromCamera(s,i);let c=a.intersectObjects(this._scene.children,!0),l,u,p=0;for(;c.length>p&&(u=c[p++])&&(l=u.object);){if(this._dict[l.id].inert)continue;let h=u.point,b=h.x,C=h.y,x=h.z,d={x:b,y:C,z:x};r({object:this._dict[l.id],point:d});return}}r(null)}async initialize(e){if(!V.isNull(this._stage))return this._stage;this._3d=e;let t=e.stage,o=this._stage=document.createElement("canvas");t.innerHTML="",t.appendChild(o),Cr()||(await ti.importjs(co.API_URI),await ra(),await Promise.all([ti.importjs(co.ORBIT_URI)].concat(co.LOADERS.map(a=>ti.importjs(a))))),this._scene=new THREE.Scene,this.invalidateSize(e);let r=this._stage.width,i=this._stage.height,s={canvas:o,antialias:!0,stencil:!1,alpha:e.transparent??!0};if(this._renderer=new THREE.WebGLRenderer(s),this._renderer.setSize(r,i),e.background&&!e.transparent){let a=e.background;typeof a=="string"&&(a=ri.parse(a));let c=new THREE.Color(a.r,a.g,a.b);this._renderer.setClearColor(c,a.a)}return this.orbit=e.orbit,o}_setCamera(e){this._camera=e,this.invalidateSize(this._3d),this._disposeOrbitControls(),this.orbit&&this._initOrbitControls()}propertyChangedCallback(e,t,o,r){super.propertyChangedCallback(e,t,o,r),e==="orbit"&&(o===!0?this._initOrbitControls():this._disposeOrbitControls())}_initOrbitControls(){let e=this._camera;if(V.isNull(this._3d)||V.isNull(e))return;(this._orbitCtrls=new THREE.OrbitControls(e,this._3d.stage)).addEventListener("change",this._orbitControlsDelegate)}_disposeOrbitControls(){let e=this._orbitCtrls;V.isNull(e)||(e.removeEventListener("change",this._orbitControlsDelegate),e.dispose())}_updateRenderer(e,t=this._renderer){if(e.transparent)t.setClearAlpha(0);else if(e.background){let o=e.background;typeof o=="string"&&(o=ri.parse(o));let r=new THREE.Color(o.r,o.g,o.b);t.setClearColor(r,o.a)}else t.setClearColor(null)}invalidateSize(e,t=e.size){if(this._assertMonoStage(e),!Cr()||V.isNull(t))return;let o=t.width,r=t.height;this._stage.width=o,this._stage.height=r;let i=this._camera;i instanceof THREE.PerspectiveCamera&&(i.aspect=o/r,i.updateProjectionMatrix()),this._renderer&&(this._renderer.setSize(o,r),this._updateRenderer(e))}removeItem(e,t){this._assertMonoStage(e);let o=this._objects,r=o.get(t);V.isNull(r)||(this._scene.remove(r),delete this._dict[r.id],o.delete(t))}updateItem(e,t){this._assertMonoStage(e);let o=this._objects;if(!V.isNull(t.parent)&&o.has(t.parent)){let r=o.get(t.parent);this._addOrUpdateItem(t,r)}else this._addOrUpdateItem(t)}addItem(e,t){this._assertMonoStage(e),this._addOrUpdateItem(t)}_addOrUpdateItem(e,t=this._scene){if(!(!Cr()||V.isNull(t)))if(e instanceof Ce)if(e instanceof qe){var o;if(this._camera instanceof THREE.PerspectiveCamera)var o=this._camera;else o=new THREE.PerspectiveCamera;let i=new THREE.Vector3(e.lookAt.x,e.lookAt.y,e.lookAt.z);o.lookAt(i),o.position.set(e.position.x,e.position.y,e.position.z),o.fov=e.fov,o.aspect=e.aspect,o.near=e.near,o.far=e.far,this._setCamera(o);let s=this._orbitCtrls;!V.isNull(s)&&s.object===o&&(s.target=i,s.update())}else if(e instanceof Be){var r;if(this._camera instanceof THREE.OrthographicCamera)var r=this._camera;else r=new THREE.OrthographicCamera;let i=new THREE.Vector3(e.lookAt.x,e.lookAt.y,e.lookAt.z);r.lookAt(i),r.position.set(e.position.x,e.position.y,e.position.z),r.left=e.left,r.right=e.right,r.top=e.top,r.bottom=e.bottom,r.near=e.near,r.far=e.far,this._setCamera(r);let s=this._orbitCtrls;!V.isNull(s)&&s.object===r&&(s.target=i,s.update())}else throw new Error(`Camera ${e} not supported.`);else if(this._objects.has(e)){let i=this._objects.get(e),s=this._ensureAndRefresh(e,i,t);s!=i&&this._objects.set(e,s)}else{let i=s=>{s&&(s=this._ensureAndRefresh(e,s,t),this._objects.set(e,s))};if(e instanceof Fe){let s=rn(e);i(s)}else if(e instanceof ke){let s=on(e);i(s)}else if(e instanceof Ie){let s=Qs(e);i(s)}else if(e instanceof Ze){let s=new THREE.Group;i(s)}}}render(){this._camera&&this._renderer.render(this._scene,this._camera)}};nn([Ws({emit:!1,converter:Ys.Boolean})],lo.prototype,"orbit",void 0);lo=nn([Hs({tagName:js+"-3d-three-adapter"})],lo);import{CustomElementUtils as Mo,CustomElement as Dn,P as Gn,Watch as Io,PropertyConverters as Di,PropertyChangeEvent as Oi,PropertyChangeEventName as An,Debounce as wa,Utils as pt,Logging as Ca,Components as Na}from"@pacem/pacem-core";import{Strings as Ra}from"@pacem/pacem-foundation";import{Utils as te,P as _a,Logging as va}from"@pacem/pacem-core";import{Colors as ya}from"@pacem/pacem-foundation";import{Geometry as xa}from"@pacem/pacem-numerical";var j="pacem-3d-";var Tt="color",po="ambient",Nr="lighting",Ve="VertexInput",_e="VertexOutput",ot="InteractionData",ye;(function(n){n[n.COPY_SRC=4]="COPY_SRC",n[n.COPY_DST=8]="COPY_DST",n[n.INDEX=16]="INDEX",n[n.INDIRECT=256]="INDIRECT",n[n.MAP_READ=1]="MAP_READ",n[n.MAP_WRITE=2]="MAP_WRITE",n[n.QUERY_RESOLVE=512]="QUERY_RESOLVE",n[n.STORAGE=128]="STORAGE",n[n.UNIFORM=64]="UNIFORM",n[n.VERTEX=32]="VERTEX"})(ye||(ye={}));var Re;(function(n){n[n.COPY_SRC=1]="COPY_SRC",n[n.COPY_DST=2]="COPY_DST",n[n.RENDER_ATTACHMENT=16]="RENDER_ATTACHMENT",n[n.STORAGE_BINDING=8]="STORAGE_BINDING",n[n.TEXTURE_BINDING=4]="TEXTURE_BINDING"})(Re||(Re={}));var oe;(function(n){n[n.VERTEX=1]="VERTEX",n[n.FRAGMENT=2]="FRAGMENT",n[n.COMPUTE=4]="COMPUTE"})(oe||(oe={}));var uo;(function(n){n[n.READ=1]="READ",n[n.WRITE=2]="WRITE"})(uo||(uo={}));import{Utils as z}from"@pacem/pacem-core";var ve;(function(n){n.Mesh="mesh",n.Camera="camera",n.Texture="texture",n.Light="light",n.Interaction="interaction"})(ve||(ve={}));var ne=class{static create(e,t,o=""){let r=e.createBuffer({size:t.byteLength,label:o,usage:ye.VERTEX|ye.COPY_DST,mappedAtCreation:!0});return new Float32Array(r.getMappedRange()).set(t),r.unmap(),r}static createUniform(e,t,o=""){return e.createBuffer({size:t.byteLength,label:o,usage:ye.UNIFORM|ye.COPY_DST})}static createStorage(e,t,o=""){return e.createBuffer({size:t.byteLength,label:o,usage:ye.STORAGE|ye.COPY_DST})}static createIndexed(e,t,o=""){let r=e.createBuffer({size:t.byteLength,label:o,usage:ye.INDEX|ye.COPY_DST,mappedAtCreation:!0});return new Uint16Array(r.getMappedRange()).set(t),r.unmap(),r}},Mt=class{static createVertex(e=0,t=3,...o){let r=[],i=0,s=0;for(let a of[t].concat(o))r.push({shaderLocation:e+s,offset:i*Float32Array.BYTES_PER_ELEMENT,format:`float32x${a}`}),i+=a,s++;return{arrayStride:i*Float32Array.BYTES_PER_ELEMENT,attributes:r,stepMode:"vertex"}}};import{Utils as li}from"@pacem/pacem-core";import{Colors as aa}from"@pacem/pacem-foundation";import{Utils as oa}from"@pacem/pacem-core";var sn={outputNormalLocation:0,outputVertexLocation:1,outputUvLocation:2,outputVertexIndexLocation:3,outputRayIndexLocation:4,outputInstanceIndexLocation:5,storageMaterialGroupIndex:2,storageMaterialBindingIndex:0};function an(n=[]){return n.join(`\r
|
|
31
|
+
`)}function ia(n=[]){let e="";for(let t of n){let o=t.trim();o.endsWith(";")?e+=o+`\r
|
|
32
|
+
`:e+=`${Tt} = ${o};\r
|
|
33
|
+
`}return e}function cn(n={},e=sn){let t=oa.extend({},sn,e),o=an(n.definitions),r=an(n.bindings),i=ia(n.modifiers),s=Tt,a=Nr,c=po;return`// definitions
|
|
34
|
+
|
|
35
|
+
${o}
|
|
36
|
+
|
|
37
|
+
// bindings
|
|
38
|
+
@group(${t.storageMaterialGroupIndex}) @binding(${t.storageMaterialBindingIndex}) var<storage, read> diffuseColor: vec4f;
|
|
39
|
+
${r}
|
|
40
|
+
|
|
41
|
+
const empty = vec4f(0,0,0,0);
|
|
42
|
+
const white = vec4f(1,1,1,1);
|
|
43
|
+
|
|
44
|
+
@fragment fn main (
|
|
45
|
+
@builtin(position) position: vec4f, // clip-space position
|
|
46
|
+
@location(${t.outputNormalLocation}) normal: vec3f, // world-space normal
|
|
47
|
+
@location(${t.outputVertexLocation}) vertex: vec3f, // world-space position
|
|
48
|
+
@location(${t.outputUvLocation}) uv: vec2f,
|
|
49
|
+
@location(${t.outputVertexIndexLocation}) @interpolate(flat) index: u32, // vertex index,
|
|
50
|
+
@location(${t.outputRayIndexLocation}) ray: vec3f, // ray (eye-to-vertex) vector
|
|
51
|
+
@location(${t.outputInstanceIndexLocation}) @interpolate(flat) instance : u32, // instance index
|
|
52
|
+
) -> @location(0) vec4f {
|
|
53
|
+
var ${s} = diffuseColor;
|
|
54
|
+
var ${c}: vec4f = empty;
|
|
55
|
+
var ${a}: vec4f = empty;
|
|
56
|
+
|
|
57
|
+
// modifiers
|
|
58
|
+
${i}
|
|
59
|
+
|
|
60
|
+
${a} = select(white, ${a}, ${a}.a > 0);
|
|
61
|
+
return ${s} * ${a} + ${c};
|
|
62
|
+
}`}import{Utils as na}from"@pacem/pacem-core";var ln={outputInstanceIndexLocation:0,outputVertexIndexLocation:1,storageMaterialGroupIndex:3,storageMaterialBindingIndex:0};function un(n=[]){return n.join(`\r
|
|
63
|
+
`)}function sa(n=[]){let e="";for(let t of n){let o=t.trim();o.endsWith(";")?e+=o+`\r
|
|
64
|
+
`:e+=`output = ${o};\r
|
|
65
|
+
`}return e}function pn(n={},e=ln){let t=na.extend({},ln,e),o=un(n.definitions),r=un(n.bindings),i=sa(n.modifiers);return`// definitions
|
|
66
|
+
${o}
|
|
67
|
+
|
|
68
|
+
// bindings
|
|
69
|
+
@group(${e.storageMaterialGroupIndex}) @binding(${e.storageMaterialBindingIndex}) var<storage, read> vertexColors: array<vec4f>;
|
|
70
|
+
${r}
|
|
71
|
+
|
|
72
|
+
fn getVertexColor(index: u32) -> vec4f {
|
|
73
|
+
let numColors = arrayLength(&vertexColors);
|
|
74
|
+
let vertexColorIndex = index % numColors;
|
|
75
|
+
return vertexColors[vertexColorIndex];
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
@fragment fn main (
|
|
79
|
+
@builtin(position) position: vec4f, // clip-space position
|
|
80
|
+
@location(${t.outputInstanceIndexLocation}) @interpolate(flat) instance: u32, // instance index
|
|
81
|
+
@location(${t.outputVertexIndexLocation}) @interpolate(flat) index: u32 // vertex index
|
|
82
|
+
) -> @location(0) vec4f {
|
|
83
|
+
var output = getVertexColor(index);
|
|
84
|
+
|
|
85
|
+
// modifiers
|
|
86
|
+
${i}
|
|
87
|
+
|
|
88
|
+
return output;
|
|
89
|
+
}`}var fo=class{static create(e){if(Fr(e))return new Tr(e);if(Ke(e))return new Mr(e);throw new TypeError(`Material type '${e.shader}' not supported.`)}},ca={},ho=class{constructor(e){if(li.isNull(this.#e=e))throw new ReferenceError("Null material provided.")}#e;get material(){return this.#e}get wgsl(){return ca}buffer({device:e},t=j+"material-"+this.shader+"-buffer"){let{r:o,g:r,b:i,a:s}=this._diffuseColor(),a=new Float32Array([o,r,i,s]);return{buffer:ne.createStorage(e,a,t),value:a,version:performance.now()}}_diffuseColor(){let{visible:e,opacity:t,color:o}=this.material;if(!(e??!0))return{r:0,g:0,b:0,a:0};let r=typeof o=="string"?aa.parse(o):o??{r:1,g:1,b:1,a:1};return t>=0&&t<=1?li.extend(r,{a:r.a*t}):r}},Tr=class extends ho{get shader(){return U.Basic}constructor(e){if(super(e),e.shader!=this.shader)throw new TypeError("Basic material expected.")}texture({device:e},t="texture"){let o=this.material;if(t==="texture"&&!li.isNull(o.texture)){let r=o.texture;return{texture:e.createTexture({format:"rgba8unorm",usage:Re.TEXTURE_BINDING|Re.RENDER_ATTACHMENT|Re.COPY_DST,size:[r.width,r.height]}),source:r}}return null}static{this.fragment=cn}},Mr=class extends ho{get shader(){return U.Line}constructor(e){if(super(e),e.shader!=this.shader)throw new TypeError("Line material expected.")}buffer(e,t){if(t==="line"){let{device:o,canvas:r}=e,i=this.material,s=new Float32Array([r.clientWidth,r.clientHeight,i.lineWidth/2]);return{buffer:ne.createUniform(o,s,j+"line-"+this.shader+"-buffer"),value:s,version:performance.now()}}else return super.buffer(e)}texture(e){return null}static{this.fragment=pn}};import{Utils as mo}from"@pacem/pacem-core";var la=["input","data"];function ui(n){typeof n!="string"&&(n=n(...la));let e=new RegExp(`fn\\s+(\\w+)\\s*\\(([^)]*)\\)\\s*->\\s*(${Ve}|${_e})\\s*{((.|\\n)+)}\\s*$`),t=n.match(e);if(t){let o=t[1],r=t[2].split(",").map(s=>{let a=s.split(":");return{name:a[0].trim(),type:a[1].trim()}});if(r.length!==2||r[0].type!==t[3]||r[1].type!==ot)throw new Error(`Invalid modifier function. Invalid signature types (arg1: ${r[0]?.type}, arg2: ${r[1]?.type})`);let i=t[4].trim();return{name:o,args:r.map(s=>s.name),body:i}}else throw new Error(`Invalid modifier function. Must be a valid WGSL function with the signature: fn name(arg1: ${Ve}|${_e}, arg2: ${ot}) -> ${Ve}|${_e}`)}var go={outputNormalLocation:0,outputVertexLocation:1,outputUvLocation:2,outputVertexIndexLocation:3,outputInstanceIndexLocation:5,outputRayLocation:4,inputPositionLocation:0,inputNormalLocation:1,inputUvLocation:2,uniformViewBindingIndex:0,uniformViewGroupIndex:0,uniformWorldBindingIndex:0,uniformWorldGroupIndex:1,uniformInteractionBindingIndex:1,uniformInteractionGroupIndex:0};function fn(n=go){n!=go&&(n=mo.extend({},go,n));let e=n.inputModifier,t="vertexInput",o="";if(!mo.isNullOrEmpty(e)){let{name:c,args:[l,u],body:p}=ui(e);t=`${c}(vertexInput, interaction)`,o=`fn ${c} (${l}: ${Ve}, ${u}: ${ot}) -> ${Ve} {
|
|
90
|
+
${p}
|
|
91
|
+
}`}let r=n.outputModifier,i="output",s="";if(!mo.isNullOrEmpty(r)){let{name:c,args:[l,u],body:p}=ui(r);i=`${c}(output, interaction)`,s=`fn ${c} (${l}: ${Ve}, ${u}: ${ot}) -> ${_e} {
|
|
92
|
+
${p}
|
|
93
|
+
}`}let a=mo.extend({},go,n);return`struct ${_e} {
|
|
94
|
+
@builtin(position) position : vec4f, // clip space position
|
|
95
|
+
@location(${a.outputNormalLocation}) normal: vec3f, // world space normal
|
|
96
|
+
@location(${a.outputVertexLocation}) vertex : vec3f, // world space position
|
|
97
|
+
@location(${a.outputUvLocation}) uv : vec2f, // texture coordinates
|
|
98
|
+
@location(${a.outputVertexIndexLocation}) @interpolate(flat) index : u32, // vertex index
|
|
99
|
+
@location(${a.outputRayLocation}) ray : vec3f, // eye-to-point vector in world space
|
|
100
|
+
@location(${a.outputInstanceIndexLocation}) @interpolate(flat) instance : u32, // instance index
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
struct ${Ve} {
|
|
104
|
+
@location(${a.inputPositionLocation}) position: vec3f,
|
|
105
|
+
@location(${a.inputNormalLocation}) normal: vec3f,
|
|
106
|
+
@location(${a.inputUvLocation}) uv: vec2f,
|
|
107
|
+
@builtin(vertex_index) index: u32,
|
|
108
|
+
@builtin(instance_index) instance: u32,
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
struct Transforms {
|
|
112
|
+
world: mat4x4f,
|
|
113
|
+
normal: mat3x3f,
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
struct Camera {
|
|
117
|
+
view: mat4x4f,
|
|
118
|
+
projection: mat4x4f,
|
|
119
|
+
position: vec3f,
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
struct ${ot} {
|
|
123
|
+
// mouse coordinatges in NDC space ([-1,1], [-1,1])
|
|
124
|
+
cursor: vec2f,
|
|
125
|
+
// canvas size in pixels
|
|
126
|
+
resolution: vec2f,
|
|
127
|
+
// some phase timer (e.g. time since mouse down, or time since last click, etc.)
|
|
128
|
+
time: f32,
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
${o}
|
|
132
|
+
|
|
133
|
+
${s}
|
|
134
|
+
|
|
135
|
+
@group(${a.uniformWorldGroupIndex}) @binding(${a.uniformWorldBindingIndex}) var<uniform> transforms: Transforms;
|
|
136
|
+
@group(${a.uniformViewGroupIndex}) @binding(${a.uniformViewBindingIndex}) var<uniform> camera: Camera;
|
|
137
|
+
@group(${a.uniformInteractionGroupIndex}) @binding(${a.uniformInteractionBindingIndex}) var<uniform> interaction: ${ot};
|
|
138
|
+
|
|
139
|
+
@vertex fn main(vertexInput: ${Ve}) -> ${_e} {
|
|
140
|
+
let input = ${t};
|
|
141
|
+
let position4 = vec4f(input.position, 1.0);
|
|
142
|
+
let worldTransform = transforms.world;
|
|
143
|
+
let viewProjectionTransform = camera.projection;
|
|
144
|
+
let worldViewProjectionTransform = viewProjectionTransform * worldTransform;
|
|
145
|
+
let worldPosition = (worldTransform * position4).xyz;
|
|
146
|
+
let output = ${_e}(
|
|
147
|
+
worldViewProjectionTransform * position4,
|
|
148
|
+
transforms.normal * input.normal,
|
|
149
|
+
worldPosition,
|
|
150
|
+
input.uv,
|
|
151
|
+
input.index,
|
|
152
|
+
normalize(worldPosition - camera.position),
|
|
153
|
+
input.instance
|
|
154
|
+
);
|
|
155
|
+
return ${i};
|
|
156
|
+
}`}import{Utils as hn}from"@pacem/pacem-core";var xo={inputPositionLocation:0,outputInstanceIndexLocation:0,outputVertexIndexLocation:1,storagePositionsGroupIndex:2,storagePositionsBindingIndex:0,uniformDimensionsGroupIndex:2,uniformDimensionsBindingIndex:1,uniformViewGroupIndex:0,uniformViewBindingIndex:0,uniformWorldGroupIndex:1,uniformWorldBindingIndex:0};function dn(n){return`struct ${_e} {
|
|
157
|
+
@builtin(position) position : vec4f, // clip space position
|
|
158
|
+
@location(${n.outputInstanceIndexLocation}) @interpolate(flat) instance : u32, // instance index
|
|
159
|
+
@location(${n.outputVertexIndexLocation}) @interpolate(flat) index : u32, // vertex index
|
|
160
|
+
}`}function mn(n=xo){let e=hn.extend({},xo,n);return`${dn(e)}
|
|
161
|
+
|
|
162
|
+
struct Transforms {
|
|
163
|
+
world: mat4x4f,
|
|
164
|
+
normal: mat3x3f,
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
struct Camera {
|
|
168
|
+
view: mat4x4f,
|
|
169
|
+
projection: mat4x4f,
|
|
170
|
+
position: vec3f
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
@group(${e.uniformWorldGroupIndex}) @binding(${e.uniformWorldBindingIndex}) var<uniform> transforms: Transforms;
|
|
174
|
+
@group(${e.uniformViewGroupIndex}) @binding(${e.uniformViewBindingIndex}) var<uniform> camera: Camera;
|
|
175
|
+
@group(${e.storagePositionsGroupIndex}) @binding(${e.storagePositionsBindingIndex}) var<storage, read> positions: array<f32>;
|
|
176
|
+
|
|
177
|
+
@vertex fn main(@builtin(instance_index) instance: u32,
|
|
178
|
+
@builtin(vertex_index) index: u32) -> ${_e} {
|
|
179
|
+
|
|
180
|
+
let x = positions[3u * index + 0u];
|
|
181
|
+
let y = positions[3u * index + 1u];
|
|
182
|
+
let z = positions[3u * index + 2u];
|
|
183
|
+
let position4 = vec4f(x, y, z, 1.0);
|
|
184
|
+
let worldTransform = transforms.world;
|
|
185
|
+
let viewProjectionTransform = camera.projection;
|
|
186
|
+
let worldViewProjectionTransform = viewProjectionTransform * worldTransform;
|
|
187
|
+
let worldPosition = (worldTransform * position4).xyz;
|
|
188
|
+
return ${_e}(
|
|
189
|
+
worldViewProjectionTransform * position4,
|
|
190
|
+
instance,
|
|
191
|
+
index);
|
|
192
|
+
}`}function gn(n=xo){let e=hn.extend({},xo,n);return`${dn(e)}
|
|
193
|
+
|
|
194
|
+
struct Transforms {
|
|
195
|
+
world: mat4x4f,
|
|
196
|
+
normal: mat3x3f,
|
|
197
|
+
}
|
|
198
|
+
|
|
199
|
+
struct Camera {
|
|
200
|
+
view: mat4x4f,
|
|
201
|
+
projection: mat4x4f,
|
|
202
|
+
position: vec3f
|
|
203
|
+
}
|
|
204
|
+
|
|
205
|
+
struct Pixels {
|
|
206
|
+
viewportWidth: f32,
|
|
207
|
+
viewportHeight: f32,
|
|
208
|
+
halfLineWidth: f32
|
|
209
|
+
}
|
|
210
|
+
|
|
211
|
+
@group(${e.uniformWorldGroupIndex}) @binding(${e.uniformWorldBindingIndex}) var<uniform> transforms: Transforms;
|
|
212
|
+
@group(${e.uniformViewGroupIndex}) @binding(${e.uniformViewBindingIndex}) var<uniform> camera: Camera;
|
|
213
|
+
@group(${e.storagePositionsGroupIndex}) @binding(${e.storagePositionsBindingIndex}) var<storage, read> positions: array<f32>;
|
|
214
|
+
@group(${e.uniformDimensionsGroupIndex}) @binding(${e.uniformDimensionsBindingIndex}) var<uniform> dimensions: Pixels;
|
|
215
|
+
|
|
216
|
+
fn computeClipPosition(index: u32) -> vec4f {
|
|
217
|
+
let x = positions[3u * index + 0u];
|
|
218
|
+
let y = positions[3u * index + 1u];
|
|
219
|
+
let z = positions[3u * index + 2u];
|
|
220
|
+
let position4 = vec4f(x, y, z, 1.0);
|
|
221
|
+
let worldTransform = transforms.world;
|
|
222
|
+
let viewProjectionTransform = camera.projection;
|
|
223
|
+
let worldViewProjectionTransform = viewProjectionTransform * worldTransform;
|
|
224
|
+
return worldViewProjectionTransform * position4;
|
|
225
|
+
}
|
|
226
|
+
|
|
227
|
+
fn computeOffsetPosition(p0: vec4f, p1: vec4f, index: u32) -> vec4f {
|
|
228
|
+
|
|
229
|
+
let viewportSize = vec2f(dimensions.viewportWidth, dimensions.viewportHeight);
|
|
230
|
+
let normalizedSize = normalize(viewportSize);
|
|
231
|
+
let halfThickness = dimensions.halfLineWidth / dimensions.viewportWidth;
|
|
232
|
+
let p0ndc = p0.xyz / p0.w;
|
|
233
|
+
let p1ndc = p1.xyz / p1.w;
|
|
234
|
+
let dir = normalize((p1ndc - p0ndc).xy);
|
|
235
|
+
let offsetX = halfThickness * 2.0 / normalizedSize.x;
|
|
236
|
+
let offsetY = halfThickness * 2.0 / normalizedSize.y;
|
|
237
|
+
|
|
238
|
+
// perp
|
|
239
|
+
let perp0 = vec2f(-dir.y * offsetX, dir.x * offsetY);
|
|
240
|
+
let perp1 = perp0;
|
|
241
|
+
|
|
242
|
+
/*
|
|
243
|
+
|
|
244
|
+
position0-0 -----*----- position0-1
|
|
245
|
+
|\\ |
|
|
246
|
+
| \\ |
|
|
247
|
+
| \\ |
|
|
248
|
+
| \\ |
|
|
249
|
+
| \\ |
|
|
250
|
+
| \\ |
|
|
251
|
+
| \\ |
|
|
252
|
+
| \\|
|
|
253
|
+
position1-0 -----*----- position1-1
|
|
254
|
+
|
|
255
|
+
indexes:
|
|
256
|
+
------------
|
|
257
|
+
p0-0 -> 0, 3
|
|
258
|
+
p0-1 -> 5
|
|
259
|
+
p1-0 -> 1
|
|
260
|
+
p1-1 -> 2, 4
|
|
261
|
+
*/
|
|
262
|
+
|
|
263
|
+
var outPos: vec2f;
|
|
264
|
+
var w = p0.w;
|
|
265
|
+
var z = p0.z;
|
|
266
|
+
if (index == 0 || index == 3){
|
|
267
|
+
outPos = p0ndc.xy - perp0;
|
|
268
|
+
}
|
|
269
|
+
else if (index == 1){
|
|
270
|
+
outPos = p1ndc.xy - perp1;
|
|
271
|
+
w = p1.w;
|
|
272
|
+
z = p1.z;
|
|
273
|
+
}
|
|
274
|
+
else if (index == 5){
|
|
275
|
+
outPos = p0ndc.xy + perp0;
|
|
276
|
+
}
|
|
277
|
+
else { //if (index == 2 || index == 4)
|
|
278
|
+
outPos = p1ndc.xy + perp1;
|
|
279
|
+
w = p1.w;
|
|
280
|
+
z = p1.z;
|
|
281
|
+
}
|
|
282
|
+
|
|
283
|
+
// return vec4f(outPos , 0, 1.0);
|
|
284
|
+
return vec4f(outPos * w, z, w);
|
|
285
|
+
}
|
|
286
|
+
|
|
287
|
+
@vertex fn main(@builtin(instance_index) instance: u32,
|
|
288
|
+
@builtin(vertex_index) index: u32) -> ${_e} {
|
|
289
|
+
|
|
290
|
+
// vertex index starting at 1
|
|
291
|
+
let position0 = computeClipPosition(instance);
|
|
292
|
+
let position1 = computeClipPosition(instance + 1);
|
|
293
|
+
|
|
294
|
+
// apply offset
|
|
295
|
+
let position = computeOffsetPosition(position0, position1, index);
|
|
296
|
+
|
|
297
|
+
return ${_e}(
|
|
298
|
+
position,
|
|
299
|
+
instance,
|
|
300
|
+
index
|
|
301
|
+
);
|
|
302
|
+
}`}function fi(n=2){return`struct ColorPicker {
|
|
303
|
+
id: u32,
|
|
304
|
+
};
|
|
305
|
+
|
|
306
|
+
@group(${n}) @binding(0) var<uniform> colorPicker: ColorPicker;
|
|
307
|
+
|
|
308
|
+
@fragment
|
|
309
|
+
fn main(@builtin(position) position: vec4f) -> @location(0) u32 {
|
|
310
|
+
return colorPicker.id;
|
|
311
|
+
}
|
|
312
|
+
`}import{Utils as hi}from"@pacem/pacem-core";var _n={uv:"uv"};function vn(n=_n,e,t=1){let o=hi.uniqueCode(),r=`sampler_${o}`,i=`tex_${o}`,s=hi.extend({},_n,n),a=s.inputColor,c=s.outputColors;if(hi.isNullOrEmpty(a))throw new Error("Must provide either input and output vertex color parameter names.");let l=c?c.map((u,p)=>p===0?`${u} = textureSample(${i}, ${r}, ${s.uv}) * ${a};`:`${u} = ${c[0]};`):[`textureSample(${i}, ${r}, ${s.uv}) * ${a}`];return{bindings:[`@group(${e}) @binding(${t}) var ${r}: sampler;`,`@group(${e}) @binding(${t+1}) var ${i}: texture_2d<f32>;`],modifiers:l}}import{Utils as di}from"@pacem/pacem-core";var ua={normal:"normal",inputColor:"white"};function yn(n,e,t){let r=`directional_${di.uniqueCode()}`,i=di.extend({},ua,n),s=i.inputColor,a=i.outputColor,c=i.normal??"normal";if(di.isNullOrEmpty(s))throw new Error("Must provide input vertex color parameter name.");return{definitions:[`struct DirectionalLight {
|
|
313
|
+
color: vec4f,
|
|
314
|
+
direction: vec3f,
|
|
315
|
+
intensity: f32
|
|
316
|
+
}`,`fn computeDirectional(normal: vec3f, color: vec4f, light: DirectionalLight) -> vec4f {
|
|
317
|
+
let n = normalize(normal);
|
|
318
|
+
let d = normalize(light.direction);
|
|
319
|
+
let factor = light.intensity * .5 * (1.0 + dot(n, -d));
|
|
320
|
+
let output = color.rgb * light.color.rgb * factor;
|
|
321
|
+
return vec4f(output, color.a);
|
|
322
|
+
}`],bindings:[`@group(${e}) @binding(${t}) var<uniform> ${r}: DirectionalLight;`],modifiers:a?[`${a} += computeDirectional(${c}, ${s}, ${r});`]:[`computeDirectional(${c}, ${s}, ${r})`]}}import{Utils as mi}from"@pacem/pacem-core";var pa={normal:"normal",position:"vertex",ray:"ray",inputColor:"white",specularColor:"empty",shininess:"0"};function xn(n,e,t){let r=`omni_${mi.uniqueCode()}`,i=mi.extend({},pa,n),s=i.inputColor,a=i.outputColor,c=i.normal,l=i.ray,u=i.position,p=i.shininess,f=i.specularColor;if(mi.isNullOrEmpty(s))throw new Error("Must provide input vertex color parameter name.");return{definitions:[`struct OmniLight {
|
|
323
|
+
color: vec4f,
|
|
324
|
+
position: vec3f,
|
|
325
|
+
intensity: f32
|
|
326
|
+
}`,`fn computeOmni(position: vec3f, normal: vec3f, ray: vec3f, color: vec4f, specularColor: vec4f, shininess: f32, light: OmniLight) -> vec4f {
|
|
327
|
+
|
|
328
|
+
// color
|
|
329
|
+
let n = normalize(normal);
|
|
330
|
+
let d = normalize(position - light.position);
|
|
331
|
+
let factor = light.intensity * .5 * (1.0 + dot(n, -d));
|
|
332
|
+
|
|
333
|
+
// specular
|
|
334
|
+
let r = normalize(ray);
|
|
335
|
+
let halfVector = normalize(d + r);
|
|
336
|
+
let specular = specularColor.rgb * shininess * dot(n, -halfVector);
|
|
337
|
+
|
|
338
|
+
let output = color.rgb * light.color.rgb * factor + specular;
|
|
339
|
+
return vec4f(output, color.a);
|
|
340
|
+
}`],bindings:[`@group(${e}) @binding(${t}) var<uniform> ${r}: OmniLight;`],modifiers:a?[`${a} += computeOmni(${u}, ${c}, ${l}, ${s}, ${f}, ${p}, ${r});`]:[`computeOmni(${u}, ${c}, ${l}, ${s}, ${f}, ${p}, ${r})`]}}import{Utils as gi}from"@pacem/pacem-core";function bn(n,e,t){let r=`ambient_${gi.uniqueCode()}`,i=n.inputColor,s=n.outputColor;if(gi.isNullOrEmpty(i)||gi.isNullOrEmpty(s))throw new Error("Must provide either input and output vertex color parameter names.");return{definitions:[`struct AmbientLight {
|
|
341
|
+
color: vec4f,
|
|
342
|
+
intensity: f32
|
|
343
|
+
}`,`fn computeAmbient(color: vec4f, light: AmbientLight) -> vec4f {
|
|
344
|
+
return vec4f(light.intensity * color.rgb * light.color.rgb, color.a);
|
|
345
|
+
}`],bindings:[`@group(${e}) @binding(${t}) var<uniform> ${r}: AmbientLight;`],modifiers:[`${s} = computeAmbient(${i}, ${r});`]}}import{Utils as $}from"@pacem/pacem-core";import{Colors as xi}from"@pacem/pacem-foundation";import{Geometry as Rn}from"@pacem/pacem-numerical";import{Geometry as En}from"@pacem/pacem-numerical";var Te=En.LinearAlgebra.Vector3D,yi=En.LinearAlgebra.Matrix3D,wn={width:1,height:1},Eo=class{static create(e){if(zr(e))return new vi(e);if(Ur(e))return new _i(e);throw new TypeError(`Camera type '${e.type}' not supported.`)}};function Cn(n,e,t){let o=Te.subtract(e,n),r=Te.cross(t,o),i=Te.cross(o,r);Te.normalize(r),Te.normalize(o),Te.normalize(i);let s=-Te.dot(r,n),a=-Te.dot(i,n),c=-Te.dot(o,n);return yi.from(r.x,i.x,o.x,0,r.y,i.y,o.y,0,r.z,i.z,o.z,0,s,a,c,1)}function Nn(n,e){if(n<=0)throw new RangeError("Near plane distance must be positive.");if(e<=n)throw new RangeError("Far plane distance must be greater than near plane distance.")}function fa(n=120,e=1,t=.1,o=1e3){Nn(t,o);let r=Math.tan(.5*Math.PI*(1-n/180)),i=r/e,s=Number.isFinite(o),a=s?o/(t-o):-1,c=s?o*t/(t-o):-t;return yi.from(i,0,0,0,0,r,0,0,0,0,a,-1,0,0,c,0)}function ha(n,e,t,o,r=.1,i=1e3){return Nn(r,i),yi.from(2/(e-n),0,0,0,0,2/(t-o),0,0,0,0,1/(r-i),0,(n+e)/(n-e),(t+o)/(o-t),r/(r-i),1)}var _i=class n{constructor(e){this._camera=e}static view(e){return Cn(e.position,e.lookAt,e.up)}static projection(e,t=wn){let o=e.position,r=e.lookAt,i=Te.subtract(r,o);Te.normalize(i);let s=Te.dot(i,o),{height:a,width:c}=t,l=c/a,u=.5*s,p=u*l,f=u,h=e.top*f,b=e.bottom*f,C=e.right*p,x=e.left*p;return ha(x,C,h,b,e.near,e.far)}view(){return n.view(this._camera)}projection(e){return n.projection(this._camera,e)}},vi=class n{constructor(e){this._camera=e}static view(e){return Cn(e.position,e.lookAt,e.up)}static projection(e,t=wn){let o=t.width/t.height/e.aspectRatio;return fa(e.fov,o,e.near,e.far)}view(){return n.view(this._camera)}projection(e){return n.projection(this._camera,e)}};var bi=Rn.LinearAlgebra.Vector3D,we=Rn.LinearAlgebra.Matrix3D;function ir(n,e){throw typeof e=="function"&&(e=e.name),new RangeError(`Buffer '${n}' not available for ${e}.`)}function Tn(n,e,...t){if(n.stage??=e?.item.stage,vt(n))return n.key??="group_"+$.uniqueCode(),new Ei(n,e,...t);if(Ee(n))return n.key??="mesh_"+$.uniqueCode(),new Ni(n,e,...t);if(pe(n))return n.key??="camera_"+$.uniqueCode(),new wi(n);if(Se(n))return n.key??="light_"+n.type+"_"+$.uniqueCode(),new Ri(n);throw new Error("Renderable is not supported.")}var wo=class{constructor(e){this._set=e}get items(){return this._set}loop(e){let{meshes:t,cameras:o,groups:r,lights:i}=this._set,s=o[0],a=!1,c=!1;for(let l of t)l.disposed||!e(l,s,i)||(q.clearFlags(l),a||(q.clearFlags(s),a=!0),c||(i.forEach(p=>q.clearFlags(p)),c=!0));for(let l of r)q.clearFlags(l)}},tr=class{static create(e){if(cr(e))return e.key??="geometry_"+$.uniqueCode(),new Ar(e);if(Ne(e))return new Pr(e);if(kr(e))return new Ci(e);throw new Error("Object is not supported.")}},q=class n{static create(e,...t){return Tn(e,null,...t)}static clearFlags(e,t=!1){if(e.item.flags.splice(0),t){let o=e;$.isNull(o.parent)||n.clearFlags(o.parent,!0)}}static allFlags(e){let t=e,o=t.parent,r=$.isNull(o)?[]:n.allFlags(o);return t.item.flags.union(r)}},rr=class{#e;constructor(e){this.#e=e}get item(){return this.#e}#t=!1;lock(){this.#t=!0}unlock(){this.#t=!1;let e=this.#r;for(;e.length>0;){let t=e.shift();this._destroyUnsafe(t)}}#r=[];_destroyUnsafe(e){"texture"in e?e.texture.destroy():"buffer"in e&&e.buffer.destroy()}destroySafely(...e){for(let t of Array.from(e).concat(...this.#r.splice(0)))t&&(this.#t?this.#r.push(t):this._destroyUnsafe(t))}#o=!1;destroy(){this.dispose(),this.#o=!0}get disposed(){return this.#o}},or=class extends rr{constructor(e,t){super(e),this.#t=t,this.#e=$.uniqueId()%4294967295}#e;#t;#r=new Map;get parent(){return this.#t}get id(){return this.#e}allFlags(){let e=this.parent;return this.item.flags.union(e?.allFlags()??[])}buildParentWorldTransform(){let e=we.identity(),t=this;for(;!$.isNull(t.parent);){let o=t.parent.item,r=we.translate(o.transformMatrix??we.identity(),o.position??bi.zero());e=we.multiply(e,r),t=t.parent}return e}buildWorldTransform(){let e=we.translate(this.item.transformMatrix??we.identity(),this.item.position??bi.zero()),t=this.buildParentWorldTransform();return we.multiply(e,t)}#o=new Map;version(e){return this.#o.get(e)??0}buffer(e,t){if(t==="u32id"){let r=this.#r,{pipeline:i,device:s}=e;if(r.has(i))return $.extend({fresh:!1},r.get(i));let a=new Uint32Array([this.id]),c=ne.createUniform(s,a,j+"u32id-buffer"),l=$.extend({buffer:c,value:a,version:performance.now()},{fresh:!0});return this.#r.set(i,l),l}let o=this.specificBuffer(e,t);return this.#o.set(t,o.version),o}},ma={shader:U.Basic,color:"#c0c0c0",flags:[]},Ei=class extends or{#e;constructor(e,t,...o){super(e,t),this.#e=e.childRenderables.map(r=>Tn(r,this,...o))}get children(){return this.#e}specificBuffer(e,t){return null}texture(e){throw new Error("Method not implemented.")}dispose(){this.#e.forEach(e=>e.destroy())}},wi=class n extends or{#e=new Map;#t;constructor(e){super(e)}texture(e){throw new Error("Method not implemented.")}specificBuffer(e,t){let o=!1;(this.allFlags().length>0||$.isNull(this.#t))&&(o=!0,this.#e.clear(),this._rebuildMatrices(e));let{pipeline:r}=e;if(this.#e.has(r)||(o=!0,this.#e.set(r,this.#t)),q.clearFlags(this),t==="cameraViewTransform")return $.extend(this.#t,{fresh:o});ir(t,n)}_rebuildMatrices({device:e,canvas:t}){let o=this.item,r=Eo.create(o),{x:i,y:s,z:a}=o.position,c=r.view(),l=r.projection(t),u=we.multiply(c,l),p=new Float32Array(36);if(p.set(we.toArray(c),0),p.set(we.toArray(u),16),p.set([i,s,a],32),$.isNull(this.#t)){let f=ne.createUniform(e,p,j+"view-buffer");this.#t={buffer:f,value:p,version:performance.now().roundoff()}}else this.#t.value=p,this.#t.version=performance.now().roundoff()}_destroyView(){this.#e.clear();let e=this.#t;this.#t=null,this.destroySafely(e)}dispose(){this._destroyView()}},Ar=class n extends rr{#e={};#t={positions:!0,normals:!0,uv:!0,packed:!0};#r;constructor(e){super(e),e.flags??=[]}buffer(e,t){let o=this.item.flags??[];($.isNull(this.#r)||o.includes(I.Geometry))&&(o.splice(0),this.#e={},this._rebuildGeometryBuffers(e));let r=this.#t,i=this.#r,{pipeline:s}=e,a=this.#e[t]??=new Map,c=!a.has(s),l=u=>(c&&a.set(s,u),u);switch(t){case"geometryPositions":let{positions:u}=i,p=r.positions;return r.positions=!1,$.extend(l(u),{fresh:p||c});case"geometryNormals":let{normals:f}=i,h=r.normals;return r.normals=!1,$.extend(l(f),{fresh:h||c});case"geometryTexCoords":let{uv:b}=i,C=r.uv;return r.uv=!1,$.extend({fresh:C||c},l(b));case"geometry":let{packed:x}=i,d=r.packed;return r.packed=!1,$.extend(l(x),{fresh:d||c});default:ir(t,n)}}texture(e){throw new Error("Method not implemented.")}_rebuildGeometryBuffers({device:e}){this._destroyBuffers();let t=performance.now(),o=this.item,r=o.key;if(kt(o)){let i=o,a=!$.isNullOrEmpty(i.triangleIndices)?i.triangleIndices.map(_=>i.positions[_]):i.positions,c=a.length*2,l=c+a.length,u=new Float32Array(l),p=new Float32Array(l),f=new Float32Array(c),h=new Float32Array(2*l+c);for(let _=0;_<a.length;_++){let T=2*_,N=3*_,{x:E,y:v,z:A}=a[_],{x:L,y:P,z:G}=i.normals[_],{x:R,y:m}=i.textureCoordinates[_];u.set([E,v,A],N),p.set([L,P,G],N),f.set([R,m],T),h.set([E,v,A,L,P,G,R,m],N*2+T)}let b=ne.create(e,u,j+"meshgeometry-"+r+"-positions-buffer"),C=ne.create(e,p,j+"meshgeometry-"+r+"-normals-buffer"),x=ne.create(e,f,j+"meshgeometry-"+r+"-uvmap-buffer"),d=ne.create(e,h,j+"meshgeometry-"+r+"-buffer");this.#r={packed:{buffer:d,value:h,version:t},positions:{buffer:b,value:u,version:t},normals:{buffer:C,value:p,version:t},uv:{buffer:x,value:f,version:t}},this.#t={positions:!0,normals:!0,uv:!0,packed:!0}}else{let i=new Float32Array(We.flattenVectorArray(o.positions)),s=ne.createStorage(e,i,j+"nodegeometry-"+r+"-positions-buffer");this.#r={positions:{buffer:s,value:i,version:t},packed:{buffer:s,value:i,version:t}},this.#t={positions:!0,packed:!0}}}_destroyBuffers(){this.#e={};let e=this.#r;$.isNull(e)||this.destroySafely(e.positions,e.normals,e.uv)}dispose(){this._destroyBuffers()}},Pr=class n extends rr{#e={};#t={};#r;#o=new Map;#i=new Map;constructor(e){super(e),e.flags??=[],e.flags.indexOf(I.Material)===-1&&e.flags.push(I.Material)}buffer(e,t){let o=this.item.flags??[],r=$.isNull(this.#r);o.includes(I.Material)&&(this.#e={},o.splice(0),r=!0,this.#i.clear(),this._resetMaterialBuffers());let{pipeline:i}=e,s=this.#e[t]??=new Map;switch(t){case"material":case"line":let a=this._ensureMaterialBuffer(e,t);return a?(s.has(i)||(r=!0,s.set(i,a)),$.extend(a,{fresh:r})):null;default:ir(t,n)}}_ensureMaterialBuffer(e,t="material"){let o=this.#o,r=o.get(t);return r||(o.has(t)?null:(r=this.#r?.buffer(e,t),r&&o.set(t,r),r))}_resetMaterialBuffers(){this.#r=fo.create(this.item),this._destroyBuffers()}texture(e,t="texture"){let o=this.#i,r=o.get(t),i=!1;if(!r){if(r=this.#r?.texture(e,t),!r)return null;o.set(t,r),i=!0,this.#t={}}let{pipeline:s}=e,a=this.#t[t]??=new Map;return a.has(s)||(i=!0,a.set(s,r)),$.extend(r,{fresh:i})}dispose(){this._destroyBuffers()}_destroyBuffers(){this.#e={},this.#t={};let e=this.#o.values();this.#o.clear(),this.destroySafely(...e);let t=this.#i.values();this.#i.clear(),t.forEach(o=>o.texture.destroy())}},Ci=class n extends rr{#e={time:0,cursor:{x:0,y:0},resolution:{width:0,height:0}};#t;#r=new Map;constructor(e){super(e),$.extend(this.#e,e)}buffer(e,t){if(t==="interaction")return this._ensureInteractionBuffer(e);ir(t,n)}texture(e){throw new Error("Method not implemented.")}_ensureInteractionBuffer(e,t="interaction"){let o=this.#e,r=this.item,i=!this.#t||r.time!==o.time||r.resolution?.width!==o.resolution.width||r.resolution?.height!==o.resolution.height;if(!i&&!$.isNull(r.cursor)&&(i=r.cursor.x!==o.cursor.x||r.cursor.y!==o.cursor.y),i){let c=new Float32Array([r.cursor?.x??0,r.cursor?.y??0,r.resolution.width,r.resolution.height,r.time,0]),l=ne.createUniform(e.device,c,j+"interaction-buffer");this.#t={buffer:l,value:c,version:performance.now()},this.#r.clear()}let{pipeline:s}=e,a=this.#r;return a.has(s)||(i=!0,a.set(s,this.#t)),$.extend(this.#t,{fresh:i})}_destroyBuffers(){this.#r.clear();let e=this.#t;$.isNull(e)||this.destroySafely(e)}dispose(){this._destroyBuffers()}},Ni=class n extends or{#e;#t;#r;#o;#i;#s={geometry:!0,material:!0,transform:!0};#n=new Map;constructor(e,t,o,r){super(e,t),e.flags??=[],e.flags.indexOf(I.Geometry)===-1&&e.flags.push(I.Geometry),e.flags.indexOf(I.Material)===-1&&e.flags.push(I.Material),e.flags.indexOf(I.Position)===-1&&e.flags.indexOf(I.Transform)===-1&&e.flags.push(I.Transform),this.#e=o,this.#r=r}texture(e,t){return this.#o?.texture(e,t)}specificBuffer(e,t){let o=this.#s,r=this.allFlags();($.isNull(this.#i)||r.includes(I.Position)||r.includes(I.Transform))&&(this.#n.clear(),o.transform=!0,this._rebuildWorldMatrices(e)),($.isNull(this.#t)||r.includes(I.Geometry))&&(o.geometry=!0,this._ensureGeometryBuffer()),($.isNull(this.#o)||r.includes(I.Material))&&(o.material=!0,this._ensureMaterialBuffer()),q.clearFlags(this);let i=this.#t,s=this.#o;switch(t){case"geometryPositions":case"geometryNormals":case"geometryTexCoords":case"geometry":return i.buffer(e,t);case"material":case"line":return s.buffer(e,t);case"objectWorldTransform":let a=this.#i,c=o.transform;o.transform=!1;let l=this.#n,{pipeline:u}=e,p=!l.has(u);return p&&l.set(u,a),$.extend(a,{fresh:c||p});default:ir(t,n)}}_ensureGeometryBuffer(){let e=this.#t,t=this.#e,r=this.item.geometry;if($.isNull(t))e?.destroy(),this.#t=new Ar(r);else{let i=t?.get(r);i?.disposed!==!1&&(i=new Ar(r),t.set(r,i)),this.#t=i}}_ensureMaterialBuffer(){let e=this.#o,t=this.#r,r=this.item.material??ma;if($.isNull(t))e?.destroy(),this.#o=new Pr(r);else{let i=t?.get(r);i?.disposed!==!1&&(i=new Pr(r),t.set(r,i)),this.#o=i}}_rebuildWorldMatrices({device:e}){let t=this.item,o=this.buildWorldTransform(),r=we.transpose(we.invert(o)),i=new Float32Array(28);if(i.set(we.toArray(o),0),i.set([r.m11,r.m12,r.m13,0,r.m21,r.m22,r.m23,0,r.m31,r.m32,r.m33,0],16),$.isNull(this.#i)){let s=ne.createUniform(e,i,j+"mesh-"+t.key+"-worldmatrix-buffer");this.#i={buffer:s,value:i,version:performance.now().roundoff()}}else this.#i.value=i,this.#i.version=performance.now().roundoff()}dispose(){this.#n.clear();let e=this.#i;this.#i=null,this.destroySafely(e);let t=this.#o;this.#o=null,t?.destroy();let o=this.#t;this.#t=null,o?.destroy()}},Ri=class n extends or{#e;#t=new Map;constructor(e){super(e),e.flags.push(I.Light)}_rebuildAmbientLightBuffer({device:e}){let t=this.item,o=4,r=1,i=0,s=4,a=24,c=new Float32Array(a),{r:l,g:u,b:p,a:f}=xi.parse(t.color??"#fff");c.set([l,u,p,f],i),c.set([t.intensity],s),this.#e={value:c,buffer:ne.createUniform(e,c,j+"ambient-light-buffer"),version:performance.now()}}_rebuildDirectionalLightBuffer({device:e}){let t=this.item,o=1,r=4,i=3,s=0,a=4,c=7,l=c+o,u=new Float32Array(l),{r:p,g:f,b:h,a:b}=xi.parse(t.color??"#fff");u.set([p,f,h,b],s),u.set([t.intensity],c);let C=bi.subtract(t.position,t.target);u.set([C.x,C.y,C.z],a),this.#e={value:u,buffer:ne.createUniform(e,u,j+"directional-light-buffer"),version:performance.now()}}_rebuildOmniLightBuffer({device:e}){let t=this.item,o=1,r=4,i=3,s=0,a=4,c=7,l=c+o,u=new Float32Array(l),{r:p,g:f,b:h,a:b}=xi.parse(t.color??"#fff");u.set([p,f,h,b],s),u.set([t.intensity],c),u.set([t.position.x,t.position.y,t.position.z],a),this.#e={value:u,buffer:ne.createUniform(e,u,j+"omni-light-buffer"),version:performance.now()}}_rebuildLight(e){this.destroySafely(this.#e);let t=this.item;switch(t.type){case"direction":this._rebuildDirectionalLightBuffer(e);break;case"omni":this._rebuildOmniLightBuffer(e);break;case"ambient":this._rebuildAmbientLightBuffer(e);break;default:throw new Error(`Light '${t.type}' is not supported.`)}}texture(e){throw new Error("Method not implemented.")}specificBuffer(e,t){let o=this.#t,r=$.isNull(this.#e)||this.allFlags().length>0;r&&(o.clear(),this._rebuildLight(e)),q.clearFlags(this);let{pipeline:i}=e;if(o.has(i)||(r=!0,o.set(i,this.#e)),t==="light")return $.extend(this.#e,{fresh:r});ir(t,n)}dispose(){this.#t.clear();let e=this.#e;this.#e=null,this.destroySafely(e)}};var F=j,In={multisample:!0,packedVertices:!0,primitive:{topology:"triangle-list",frontFace:"ccw",cullMode:"back"}},fe=n=>{},It=class n{static{this._memoizer=new WeakMap}static dispose(e){let t=this._memoizer,o=t.get(e);z.isNull(o)||(o.clear(),t.delete(e))}static createColorPicking(e,t){let o=n.create(e,t);return o instanceof No||o instanceof Ro?{frame:o.raycast}:null}static create(e,[t,o,...r],i){let s=n._memoizer,a=s.get(e);if(z.isNull(a)&&s.set(e,a=new Map),z.isNull(t))throw new Error("Pipeline not implemented, given the provided arguments.");if(Ee(t.item)){let c=kt(t.item.geometry),l=!c&&Ke(t.item.material);if(!c&&!l)throw new Error("Pipeline not implemented, given the provided mesh argument.");let u=c?new Ti(t,o,...r):new Mi(t,o),p=u.key+(i?.modifiers?.version??""),f=a.get(p);if(f)return f;let h=c?new No(e,u):new Ro(e,u);h.build(i);let b=h;return z.extend(b,{id:p+"-"+e.canvas.width+"x"+e.canvas.height+"-"+z.Dates.now().toISOString()}),a.set(p,b),b}else throw new ReferenceError("Pipeline not implemented, given thst the first argument is not a mesh.")}},Co=class{constructor(){this.#e=new Map}#e;ensureBindGroup({device:e},t,o,r,i,s,a=()=>{}){let c=this.#e,l=typeof t=="string"?t:t.key,u=c.get(l);if(z.isNull(u)&&c.set(l,u=new Map),r||!u.has(s)){let p=o.map((b,C)=>({binding:C,resource:{buffer:b}})),f={label:s,layout:i,entries:p};a(f);let h=e.createBindGroup(f);return u.set(s,h),h}else return u.get(s)}},Ti=class n{#e=[];#t;#r;#o=new Map;#i={shader:"basic",lights:""};constructor(...e){this.add(...e)}reset(){this.#e.splice(0),this.#t=null,this.#o.clear(),this.#i={shader:"basic",lights:""}}add(...e){for(let t of e??[])if(Ee(t.item))if(z.isNull(this.#t)){this.#t=t;let o=t.item.material??{shader:U.Basic};this.#i.shader=o.shader+"-"+(o.map?"map":"nomap")}else throw new Error("Mesh already added.");else if(Se(t.item))this.#e.push(t),this.#i.lights+="-"+t.item.type;else if(pe(t.item))this.#r??=t;else throw new Error("Unknown object type.")}build(e){let t=this._computeBasicData(),o=this.key,r=this.vertex({inputModifier:e?.vertexInput,outputModifier:e?.vertexOutput}),i=this.fragment(t,{modifier:e?.fragment}),s=(...c)=>n.prototype.bindgroup.apply(this,c),a={lightCount:this.#e.length,mapCount:this.#t.item.material?.map?1:0};return{vertex:r,fragment:i,key:o,bindings:s,metadata:a}}get key(){let{shader:e,lights:t}=this.#i;return"mesh-"+e+t}bindgroup(e,t,o){let i=this.#o.get(e);if(z.isNull(i))return null;if(z.isNullOrEmpty(t))return i;let s=i.filter(a=>a.key===t);return isNaN(o)?s:o>=0&&o<i.length?s[o]:s}vertex(e){return fn(e)}_computeBasicData(){let e=this.#t.item,t=this.#e,o=e.material,r=!z.isNull(o?.texture),i=!z.isNullOrEmpty(t),s=z.isNull(e)?U.Basic:e.material?.shader??U.Basic;return{hasTexture:r,hasLighting:i,shader:s,materialBindGroupIndex:2,lightingBindGroupIndex:3}}_computeBindGroupsAndReferences(e=this._computeBasicData()){let{hasTexture:t,materialBindGroupIndex:o,lightingBindGroupIndex:r}=e,i=this.#o,s=this.#e,a={key:"objectWorldTransform",group:1,binding:0,type:"buffer"},c={key:"material",group:o,binding:0,type:"buffer"};t?i.set(ve.Mesh,[a,c,{key:"texture",group:o,type:"texture"}]):i.set(ve.Mesh,[a,c]),i.set(ve.Camera,[{key:"cameraViewTransform",group:0,binding:0,type:"buffer"}]);let l=s.map((u,p)=>({key:"light",group:r,binding:p,type:"buffer"}));l.push(...l),i.set(ve.Interaction,[{key:"interaction",group:0,type:"buffer",binding:1}])}fragment(e=this._computeBasicData(),t){this._computeBindGroupsAndReferences(e);let o={definitions:[],bindings:[],modifiers:[]},r=i=>{for(let s of i.definitions??[])o.definitions.indexOf(s)===-1&&o.definitions.push(s);z.isNullOrEmpty(i.bindings)||o.bindings.push(...i.bindings),z.isNullOrEmpty(i.modifiers)||o.modifiers.push(...i.modifiers)};switch(e.shader){case U.Basic:if(e.hasTexture){let a=e.materialBindGroupIndex,c=vn({inputColor:Tt,outputColors:[Tt],uv:"uv"},a);r(c)}let i=0,s=this.#e;for(let a of s){switch(a.item.type){case"direction":let l=yn({outputColor:Nr,normal:"normal"},e.lightingBindGroupIndex,i);r(l);break;case"omni":let u=xn({outputColor:Nr,normal:"normal",position:"vertex"},e.lightingBindGroupIndex,i);r(u);break;case"ambient":let p=bn({inputColor:Tt,outputColor:po},e.lightingBindGroupIndex,i);r(p);break}i++}return Tr.fragment(o,t)}}},Me={writeBufferConditionally:(n,e)=>{e.fresh&&n.queue.writeBuffer(e.buffer,0,e.value)}},No=class{constructor(e,t,o=new Co){this._context=e,this._builder=t,this._cache=o,this._ensureU32idBindGroup=(r,i,s)=>this._cache.ensureBindGroup(this._context,r,[i],s,this._pickBindGroupLayout,F+"mesh-colorpick-bind-group"),this._ensureMaterialBindGroup=(r,i,s,a,c=2)=>{let l=this._bindGroupLayouts[c],u=F+"material-bind-group";if(l.label!==F+"material-bind-group-layout")throw new Error("BindGroupLayout mismatch!");return this._cache.ensureBindGroup(this._context,r,[i],a,l,u,p=>{let{device:f}=this.context,h=p.entries;s&&h.push({binding:1,resource:f.createSampler({addressModeU:"repeat",addressModeV:"repeat",magFilter:"linear",minFilter:"linear"})},{binding:2,resource:s.createView()})})},this._ensureWorldTransformBindGroup=(r,i,s,a=1,c=!1)=>{let l=this._bindGroupLayouts[a];if(l.label!==F+"mesh-transforms-bind-group-layout")throw new Error("BindGroupLayout mismatch!");let u=r.key+"-"+(c?1:0),p=`${F}${c?"colorpick":"mesh"}-transforms-bind-group`;return this._cache.ensureBindGroup(this._context,u,[i],s,l,p)},this._ensureCameraProjectionAndInteractionDataBindGroup=(r,i,s,a,c=0,l=!1)=>{let u=this._bindGroupLayouts[c],p=r.key+"-"+(l?1:0),f=`${F}${l?"colorpick":"mesh"}-view-bind-group`;return this._cache.ensureBindGroup(this._context,p,[i,s],a,u,f)},this._ensureLightingBindGroup=(r,i,s=3)=>{let a=this._bindGroupLayouts[s],c=r.map(u=>u.id).join(":"),l=r.map(u=>u.buffer.buffer);return this._cache.ensureBindGroup(this._context,c,l,i,a,F+"mesh-lighting-bind-group")},this._bindGroupLayouts=[],this._bindVertex=fe,this._bindPicker=fe,this._bindWorldTransform=fe,this._bindRaycastWorldTransform=fe,this._bindCameraProjectionAndInteractionData=fe,this._bindRaycastCameraProjectionAndInteractionData=fe,this._bindLighting=fe,this._bindMaterial=fe,this.set=r=>{throw new Error("Deprecated.")},this.bind=(r,...i)=>{throw new Error("Deprecated.")},this.draw=(r,...i)=>{throw new Error("Deprecated.")},this.frame=(r,i,s,a,...c)=>{r.setPipeline(this._pipeline);try{this._bindVertex(r,s),this._bindWorldTransform(r,s),this._bindMaterial(r,s),this._bindCameraProjectionAndInteractionData(r,a,i),this._bindLighting(r,...c);let l=s.item,u=l.geometry;r.draw(u.triangleIndices?.length||u.positions.length)}catch(l){console.error("Pacem.Drawing3D.FrameException",l)}},this.raycast=(r,i,s,a)=>{r.setPipeline(this._pickPipeline);try{this._bindVertex(r,s),this._bindRaycastWorldTransform(r,s),this._bindRaycastCameraProjectionAndInteractionData(r,a,i),this._bindPicker(r,s);let c=s.item,l=c.geometry;r.draw(l.triangleIndices.length)}catch{}},this._key=t.key}get context(){return this._context}get key(){return this._key}build(e){let t=z.extend({},In,e??{}),o=this._builder,r=o.build(t.modifiers),i=z.extend({pipeline:this},this._context),s=i.device,a={module:s.createShaderModule({code:r.vertex}),buffers:t.packedVertices?[Mt.createVertex(0,3,3,2)]:[Mt.createVertex(0,3),Mt.createVertex(1,3),Mt.createVertex(2,2)]},c=s.createBindGroupLayout({entries:[{binding:0,visibility:oe.VERTEX|oe.FRAGMENT,buffer:{type:"uniform"}},{binding:1,visibility:oe.VERTEX|oe.FRAGMENT,buffer:{type:"uniform"}}],label:F+"mesh-view-bind-group-layout"}),l=s.createBindGroupLayout({entries:[{binding:0,visibility:oe.VERTEX,buffer:{type:"uniform"}}],label:F+"mesh-transforms-bind-group-layout"}),u=[c,l],p={module:s.createShaderModule({code:r.fragment}),targets:[{format:i.format,blend:{color:{srcFactor:"src-alpha",dstFactor:"one-minus-src-alpha"},alpha:{}}}]},f=u.length,h=[{binding:0,visibility:oe.FRAGMENT,buffer:{type:"read-only-storage"}}],{mapCount:b}=r.metadata,C=b>0;C&&h.push({visibility:oe.FRAGMENT,binding:1,sampler:{}},...Array(b).keys().map(m=>({visibility:oe.FRAGMENT,binding:2+m,texture:{}})));let x={label:F+"material-bind-group-layout",entries:h},d=s.createBindGroupLayout(x);u.push(d);let _=u.length,{lightCount:T}=r.metadata,N=T>0;if(N){let m=s.createBindGroupLayout({entries:[...Array(T).keys()].map((g,y)=>({visibility:oe.FRAGMENT,binding:y,buffer:{type:"uniform"}})),label:F+"lighting-bind-group-layout"});u.push(m)}let E={label:F+"mesh-render-pipeline",vertex:a,fragment:p,layout:s.createPipelineLayout({label:F+"mesh-render-pipeline-layout",bindGroupLayouts:this._bindGroupLayouts=u}),primitive:t.primitive};t.multisample&&(E.multisample={count:4},E.depthStencil={depthCompare:"less",format:"depth24plus",depthWriteEnabled:!0}),this._pipeline=s.createRenderPipeline(E);let v=this._pickBindGroupLayout=s.createBindGroupLayout({label:F+"mesh-colorpick-bind-group-layout",entries:[{visibility:oe.FRAGMENT,binding:0,buffer:{type:"uniform"}}]}),A={label:F+"mesh-colorpick-pipeline",vertex:a,fragment:{module:s.createShaderModule({code:fi(2)}),targets:[{format:"r32uint"}]},layout:s.createPipelineLayout({label:F+"mesh-colorpick-pipeline-layout",bindGroupLayouts:[c,l,v]}),primitive:t.primitive,depthStencil:{depthWriteEnabled:!0,depthCompare:"less",format:"depth24plus"}};this._pickPipeline=s.createRenderPipeline(A);let L=(m,...g)=>{let y=g.at(0);if(z.isNull(y))throw new ReferenceError(`Null ${q.name} bringing vertex buffers was provided.`);let{buffer:w}=y.buffer(i,"geometryPositions"),{buffer:M}=y.buffer(i,"geometryNormals"),{buffer:O}=y.buffer(i,"geometryTexCoords");m.setVertexBuffer(0,w),m.setVertexBuffer(1,M),m.setVertexBuffer(2,O)},P=(m,...g)=>{let y=g.at(0);if(z.isNull(y))throw new ReferenceError(`Null ${q.name} bringing vertex buffers was provided.`);let{buffer:w}=y.buffer(i,"geometry");m.setVertexBuffer(0,w)};this._bindVertex=t.packedVertices?P:L;let G=(m,g,y)=>{if(z.isNull(g))throw new ReferenceError(`Null ${q.name} bringing world transform buffer was provided.`);let w=g.buffer(i,"objectWorldTransform"),M=w.buffer;Me.writeBufferConditionally(s,w);let{group:O}=r.bindings(ve.Mesh,"objectWorldTransform",0),D=this._ensureWorldTransformBindGroup(g.item,M,w.fresh,O,y);m.setBindGroup(O,D)};this._bindWorldTransform=(m,...g)=>{let y=g.at(0);G(m,y,!1)},this._bindRaycastWorldTransform=(m,...g)=>{let y=g.at(0);G(m,y,!0)};let R=(m,g,y,w)=>{if(z.isNull(g))throw new ReferenceError(`Null ${q.name} bringing view projection buffers was provided.`);let M=g.buffer(i,"cameraViewTransform"),O=M.buffer;if(Me.writeBufferConditionally(s,M),z.isNull(y))throw new ReferenceError(`Null ${q.name} bringing interaction buffers was provided.`);let D=y.buffer(i,"interaction"),X=D.buffer;Me.writeBufferConditionally(s,D);let{group:H}=r.bindings(ve.Camera,"cameraViewTransform",0),{group:K}=r.bindings(ve.Interaction,"interaction",0);if(H!==K)throw new ReferenceError(`Layout bind group mismatch: ${H} vs ${K}.`);let ie=this._ensureCameraProjectionAndInteractionDataBindGroup(g.item,O,X,M.fresh||D.fresh,H,w);m.setBindGroup(H,ie)};this._bindCameraProjectionAndInteractionData=(m,...g)=>{let y=g.at(0),w=g.at(1);R(m,y,w,!1)},this._bindRaycastCameraProjectionAndInteractionData=(m,...g)=>{let y=g.at(0),w=g.at(1);R(m,y,w,!0)},this._bindMaterial=(m,...g)=>{let y=g.at(0);if(z.isNull(y))throw new ReferenceError(`Null ${q.name} bringing vertex colors was provided.`);let w=y.buffer(i,"material"),M=w.buffer;Me.writeBufferConditionally(s,w);let O=y.texture(i),D=O?.texture,X=this._ensureMaterialBindGroup(y.item,M,D,w.fresh,f);m.setBindGroup(f,X),C&&s.queue.copyExternalImageToTexture({source:O.source,flipY:!0},{texture:D},{width:D.width,height:D.height})},this._bindLighting=(m,...g)=>{if(N){let w=Array.from(g).map(D=>({buffer:D.buffer(i,"light"),id:D.item.key})),M=w.some(D=>D.buffer.fresh),O=this._ensureLightingBindGroup(w,M,_);for(let D of w)Me.writeBufferConditionally(s,D.buffer);m.setBindGroup(_,O)}},this._bindPicker=(m,...g)=>{let y=g.at(0);if(z.isNull(y))throw new ReferenceError(`Null ${q.name} bringing world transform buffer was provided.`);let w=y.buffer(i,"u32id"),M=w.buffer;Me.writeBufferConditionally(s,w);let O=2,D=w.fresh,X=this._ensureU32idBindGroup(y.item,M,D);m.setBindGroup(O,X)}}},Mi=class n{#e;#t;#r=new Map;constructor(...e){this.add(...e)}reset(){this.#e=null,this.#r.clear()}add(...e){for(let t of e??[])if(Ee(t.item))if(z.isNull(this.#e))this.#e=t;else throw new Error("Line already added.");else if(pe(t.item))this.#t??=t;else if(!Se(t.item))throw new Error("Unknown object type.")}build(){let e=this._computeBasicData(),t=this.key,o=this.vertex(e),r=this.fragment(e);return{vertex:o,fragment:r,key:t,bindings:(...s)=>n.prototype.bindgroup.apply(this,s),metadata:{thickness:e.thickness,dashPattern:e.dashPattern}}}get key(){let e=(this.#e?.item).material?.lineWidth>1;return U.Line+(e?"-fat":"")}bindgroup(e,t,o){let i=this.#r.get(e);if(z.isNull(i))return null;if(z.isNullOrEmpty(t))return i;let s=i.filter(a=>a.key===t);return isNaN(o)?s:o>=0&&o<i.length?s[o]:s}vertex(e=this._computeBasicData()){return e.thickness>1?gn():mn()}_computeBasicData(){let e=this.#e.item,t=z.isNull(e)?U.Line:e.material?.shader??U.Line,o=e.material,r=o?.lineWidth??1,i=o?.dashArray;return{shader:t,thickness:r,dashPattern:i}}_computeBindGroupsAndReferences(e=this._computeBasicData()){let t=this.#r,o={key:"objectWorldTransform",group:1,binding:0,type:"buffer"},r={key:"material",group:3,binding:0,type:"buffer"},i={key:"geometryPositions",group:2,binding:0,type:"buffer"},s={key:"line",group:2,binding:1,type:"buffer"};t.set(ve.Mesh,[o,r,i,s]),t.set(ve.Camera,[{key:"cameraViewTransform",group:0,binding:0,type:"buffer"}])}fragment(e=this._computeBasicData()){this._computeBindGroupsAndReferences(e);let t={definitions:[],bindings:[],modifiers:[]};if(e.shader===U.Line)return Mr.fragment(t)}},Ro=class{#e;constructor(e,t,o=new Co){this._lineBuilder=t,this._cache=o,this._ensureLineU32idBindGroup=(r,i,s)=>{let a=this.context;return this._cache.ensureBindGroup(a,r,[i],s,this._pickLineBindGroupLayout,F+"line-colorpick-bind-group")},this._ensureLineMaterialBindGroup=(r,i,s,a=2)=>{let c=this._bindLineGroupLayouts[a];if(c.label!==F+"line-material-bind-group-layout")throw new Error("BindGroupLayout mismatch!");let l=this.context;return this._cache.ensureBindGroup(l,r,[i],s,c,F+"line-material-bind-group")},this._ensureLinePositionsBindGroup=(r,i,s,a)=>{let c=this._bindLineGroupLayouts[a];if(c.label!==F+"line-positions-bind-group-layout")throw new Error("BindGroupLayout mismatch!");let l=this.context;return this._cache.ensureBindGroup(l,r,i,s,c,F+"line-positions-bind-group")},this._ensureLineWorldTransformBindGroup=(r,i,s,a=1,c=!1)=>{let l=this._bindLineGroupLayouts[a];if(l.label!==F+"line-transforms-bind-group-layout")throw new Error("BindGroupLayout mismatch!");let u=r.key+"-line-"+(c?1:0),p=`${F}${c?"colorpick":""}-line-transforms-bind-group`,f=this.context;return this._cache.ensureBindGroup(f,u,[i],s,l,p)},this._ensureLineCameraProjectionBindGroup=(r,i,s,a=0,c=!1)=>{let l=this._bindLineGroupLayouts[a],u=r.key+"-line-"+(c?1:0),p=`${F}${c?"colorpick":""}-line-view-bind-group`,f=this.context;return this._cache.ensureBindGroup(f,u,[i],s,l,p)},this._bindLineGroupLayouts=[],this._bindLinePositions=fe,this._bindLinePicker=fe,this._bindLineWorldTransform=fe,this._bindLineRaycastWorldTransform=fe,this._bindLineCameraProjection=fe,this._bindLineRaycastCameraProjection=fe,this._bindLineMaterial=fe,this._drawLine=fe,this.set=r=>{throw new Error("Deprecated.")},this.bind=(r,...i)=>{throw new Error("Deprecated.")},this.draw=(r,...i)=>{throw new Error("Deprecated.")},this.frame=(r,i,s)=>{r.setPipeline(this._linePipeline);try{this._bindLineWorldTransform(r,i),this._bindLineCameraProjection(r,s),this._bindLinePositions(r,i),this._bindLineMaterial(r,i),this._drawLine(r,i)}catch(a){console.error("Pacem.Drawing3D.FrameException",a)}},this.raycast=(r,i,s)=>{r.setPipeline(this._pickLinePipeline);try{this._bindLineRaycastWorldTransform(r,i),this._bindLineRaycastCameraProjection(r,s),this._bindLinePositions(r,i),this._bindLinePicker(r,i),this._drawLine(r,i)}catch{}},this.#e=e,this._lineKey=t.key}get context(){return this.#e}get key(){return this._lineKey}build(e){let t=z.extend({},In,e??{}),o=this._lineBuilder,r=o.build(),i=z.extend({pipeline:this},this.#e),s=i.device,a=r.metadata.thickness>1,c={module:s.createShaderModule({code:r.vertex}),buffers:[]},l=s.createBindGroupLayout({entries:[{binding:0,visibility:oe.VERTEX,buffer:{type:"uniform"}}],label:F+"line-transforms-bind-group-layout"}),u=s.createBindGroupLayout({entries:[{binding:0,visibility:oe.VERTEX,buffer:{type:"uniform"}}],label:F+"line-view-bind-group-layout"}),p=[{binding:0,visibility:oe.VERTEX,buffer:{type:"read-only-storage"}}];a&&p.push({binding:1,visibility:oe.VERTEX,buffer:{type:"uniform"}});let f=s.createBindGroupLayout({entries:p,label:F+"line-positions-bind-group-layout"}),h=[l,u,f],b=h.length,C=h.slice(),x={module:s.createShaderModule({code:r.fragment}),targets:[{format:i.format,blend:{color:{srcFactor:"src-alpha",dstFactor:"one-minus-src-alpha"},alpha:{}}}]},d=C.length,_=[{binding:0,visibility:oe.FRAGMENT,buffer:{type:"read-only-storage"}}],T={label:F+"line-material-bind-group-layout",entries:_},N=s.createBindGroupLayout(T);C.push(N);let E=a?t.primitive.topology:"line-list",v={label:F+"line-render-pipeline",vertex:c,fragment:x,layout:s.createPipelineLayout({label:F+"line-render-pipeline-layout",bindGroupLayouts:this._bindLineGroupLayouts=C}),primitive:z.extend({},t.primitive,{topology:E})};t.multisample&&(v.multisample={count:4},v.depthStencil={depthCompare:"less",format:"depth24plus",depthWriteEnabled:!0}),this._linePipeline=s.createRenderPipeline(v);let A=this._pickLineBindGroupLayout=s.createBindGroupLayout({label:F+"line-colorpick-bind-group-layout",entries:[{visibility:oe.FRAGMENT,binding:0,buffer:{type:"uniform"}}]}),L={label:F+"line-colorpick-pipeline",vertex:c,fragment:{module:s.createShaderModule({code:fi(b)}),targets:[{format:"r32uint"}]},layout:s.createPipelineLayout({label:F+"line-colorpick-pipeline-layout",bindGroupLayouts:h.concat(A)}),primitive:z.extend({},t.primitive,{topology:E}),depthStencil:{depthWriteEnabled:!0,depthCompare:"less",format:"depth24plus"}};this._pickLinePipeline=s.createRenderPipeline(L);let P=(R,m,g)=>{if(z.isNull(m))throw new ReferenceError(`Null ${q.name} bringing world transform buffer was provided.`);let y=m.buffer(i,"objectWorldTransform"),w=y.buffer;Me.writeBufferConditionally(s,y);let{group:M}=r.bindings(ve.Mesh,"objectWorldTransform",0),O=this._ensureLineWorldTransformBindGroup(m.item,w,!1,M,g);R.setBindGroup(M,O)};this._bindLineWorldTransform=(R,...m)=>{let g=m.at(0);P(R,g,!1)},this._bindLineRaycastWorldTransform=(R,...m)=>{let g=m.at(0);P(R,g,!0)};let G=(R,m,g)=>{if(z.isNull(m))throw new ReferenceError(`Null ${q.name} bringing view projection buffers was provided.`);let y=m.buffer(i,"cameraViewTransform"),w=y.buffer;Me.writeBufferConditionally(s,y);let{group:M}=r.bindings(ve.Camera,"cameraViewTransform",0),O=this._ensureLineCameraProjectionBindGroup(m.item,w,!1,M,g);R.setBindGroup(M,O)};this._bindLineCameraProjection=(R,...m)=>{let g=m.at(0);G(R,g,!1)},this._bindLineRaycastCameraProjection=(R,...m)=>{let g=m.at(0);G(R,g,!0)},this._bindLinePositions=(R,...m)=>{let g=m.at(0);if(z.isNull(g))throw new ReferenceError(`Null ${q.name} bringing vertex buffers was provided as index 0.`);let y=g.buffer(i,"geometryPositions"),w=y.buffer,M=y.fresh,O=[w];if(Me.writeBufferConditionally(s,y),a){let H=g.buffer(i,"line"),K=H.buffer;M||=H.fresh,O.push(K),Me.writeBufferConditionally(s,H)}let{group:D}=r.bindings(ve.Mesh,"line",0),X=this._ensureLinePositionsBindGroup(g.item,O,M,D);R.setBindGroup(D,X)},this._bindLineMaterial=(R,...m)=>{let g=m.at(0);if(z.isNull(g))throw new ReferenceError(`Null ${q.name} bringing vertex colors was provided.`);let y=g.buffer(i,"material"),w=y.buffer;Me.writeBufferConditionally(s,y);let M=this._ensureLineMaterialBindGroup(g.item,w,y.fresh,d);R.setBindGroup(d,M)},this._bindLinePicker=(R,...m)=>{let g=m.at(0);if(z.isNull(g))throw new ReferenceError(`Null ${q.name} bringing world transform buffer was provided.`);let y=g.buffer(i,"u32id"),w=y.buffer,M=y.value;Me.writeBufferConditionally(s,y);let O=this._ensureLineU32idBindGroup(g.item,w,!1);R.setBindGroup(b,O)},this._drawLine=(R,...m)=>{let y=m.at(0).item,w=y.geometry;a?R.draw(6,w.positions.length-1,0,0):R.draw(w.positions.length)}}};import{Utils as At}from"@pacem/pacem-core";var Or=class{static{this._memoizer=new WeakMap}static dispose(e){let t=this._memoizer;if(t.has(e)){let o=t.get(e);for(let r of o.values())r.destroy();o.clear(),t.delete(e)}}static createColorPicking(e){let t=this._memoizer;t.has(e)||t.set(e,new Map);let o=t.get(e),r="colorpick";if(o.has(r))return o.get(r);let i=new Ii(e);return o.set(r,i),i}},Lr=1,Ii=class{constructor(e){this._context=e,this._objects=new Map,this.frame=(t,...o)=>{if(At.isNull(this._encoder))throw new Error("Null encoder. Maybe you missed to call the 'begin' method first.");let r=Array.from(o);It.createColorPicking(this._context,r)?.frame(this._pass,t,...o);for(let s of r)s.item.inert||this._objects.set(s.id,s)},this.end=t=>{if(!At.isNull(this._handle))return this._handle;let o=this._pass,r=this._encoder,{device:i}=this._context,{render:s}=this._textures,a=s.texture,c=this._ensureBuffer();o.end(),r.copyTextureToBuffer({texture:a,origin:{x:t.x,y:t.y}},{buffer:c,bytesPerRow:(Lr*4+255|0)*256,rowsPerImage:1},{width:Lr}),i.queue.submit([r.finish()]),this._encoder=null;let l=this,u=l._objects,p=()=>{l._handle=null};return this._handle=new Promise((f,h)=>{c.mapAsync(uo.READ,0,4*Lr).then(b=>{let x=new Uint32Array(c.getMappedRange(0,4*Lr))[0];c.unmap(),p();let d=u.get(x);f(d?[d.item]:[])})})}}_createTexture(e){let{device:t,canvas:o}=this._context,r=Math.min(t.limits.maxTextureDimension2D,o.clientWidth),i=Math.min(t.limits.maxTextureDimension2D,o.clientHeight);return t.createTexture({size:[r,i,1],format:e,usage:Re.COPY_SRC|Re.RENDER_ATTACHMENT})}_ensureBuffer(){let e=this._buffer;if(!At.isNull(e))return e;let{device:t}=this._context;return this._buffer=t.createBuffer({label:j+"colorpick-output-buffer",size:Lr*4,usage:ye.MAP_READ|ye.COPY_DST})}_ensureTextures(){let e=this._textures;if(!At.isNull(e))return e;let t=this._createTexture("r32uint"),o=this._createTexture("depth24plus"),r={texture:t,view:t.createView()},i={texture:o,view:o.createView()};return this._textures={render:r,depth:i}}_destroyTexture(e){At.isNull(e)||e.texture?.destroy()}destroy(){let e=this._textures,t=this._buffer;if(!At.isNullOrEmpty(e)){let{render:o,depth:r}=e;this._destroyTexture(o),this._destroyTexture(r),this._textures=null}At.isNull(t)||(t.destroy(),this._buffer=null)}begin(){let{device:e}=this._context;this._encoder=e.createCommandEncoder({label:j+"colorpick-raycaster"});let{render:t,depth:o}=this._ensureTextures(),r={label:j+"colorpick-raycaster-pass",colorAttachments:[{view:t.view,clearValue:{r:0,g:0,b:0,a:0},loadOp:"clear",storeOp:"store"}],depthStencilAttachment:{view:o.view,depthClearValue:1,depthLoadOp:"clear",depthStoreOp:"store"}};this._pass=this._encoder.beginRenderPass(r),this._objects.clear()}};var Ai=xa.LinearAlgebra.Vector3D,nr;(function(n){n[n.NotSupported=0]="NotSupported",n[n.Disabled=1]="Disabled"})(nr||(nr={}));var To=class{static create(e,t){return new Promise((o,r)=>{if(navigator.gpu){let i=new Pi(e);i.init(t).then(s=>o(i),s=>{let c={message:typeof s=="string"?s:s.message,cause:nr.Disabled};r(c)})}else{let s={message:"WebGPU not supported.",cause:nr.NotSupported};r(s)}})}};function ba(n){return{bottom:-1,top:1,left:-1,right:1,near:.1,far:200,lookAt:Ai.from(0,0,0),up:Ai.j(),position:Ai.from(0,0,1),type:"orthographic",flags:[],stage:n}}function Ea(...n){for(let e of n||[])e?.destroy()}var Pi=class{#e;#t;#r;#o;#i;#s;#n;#l;#a;#p;#f;#h;constructor(e){this.#o=new WeakMap,this.#i=new WeakMap,this.#s=new WeakMap,this.#a={enableValidation:!1},this.#p=!1,this._logError=r=>{let i=this.#e,s=i.logger;if(!te.isNull(s)){let a="error"in r?r.error:r;s.log(va.LogLevel.Error,a.message,"WebGPU")}},this.#c=!0,this.#u=!1;let t=(this.#e=e).stage,o=document.createElement("canvas");o.id=_a+"_3d_stage_"+te.uniqueCode(),t.innerHTML="",t.appendChild(this.#t=o),this.#f=tr.create(this.#h={time:performance.now(),cursor:{x:0,y:0},resolution:{width:0,height:0}})}_buildPassDescriptor({multisample:e,format:t}){let{context:o,device:r}=this.#r,i=o.getCurrentTexture(),s=this.#l;if(te.isNull(s)){if(s={},e){let b=r.createTexture({label:j+"render-texture",format:t??i.format,usage:Re.RENDER_ATTACHMENT,size:[i.width,i.height],sampleCount:4});s.render={texture:b,view:b.createView({label:j+"render-texture-view"})};let C=r.createTexture({label:j+"depth-texture",format:"depth24plus",usage:Re.RENDER_ATTACHMENT,size:[i.width,i.height],sampleCount:4});s.depth={texture:C,view:C.createView({label:j+"depth-texture-view"})}}this.#l=s}let{transparent:a,background:c}=this.#e,l=a?{r:0,g:0,b:0,a:0}:c?typeof c=="string"?ya.parse(c):c:{r:0,g:0,b:0,a:1},u=We.flattenVectorArray([l]),p=i.createView({label:j+"canvas-texture-view"}),f={view:p,clearValue:u,loadOp:"clear",storeOp:"store"},h={colorAttachments:[f]};if(e){let b=s.render.view,C=s.depth.view;h.depthStencilAttachment={view:C,depthClearValue:1,depthLoadOp:"clear",depthStoreOp:"store",stencilClearValue:0,stencilReadOnly:!0},f.view=b,f.resolveTarget=p}return h}_buildContext(e=this.#t,t=this.#e.size){t??=e;let o=t.width,r=t.height,i=1;e.width=o*i,e.height=r*i;let s=e.getContext("webgpu"),a=navigator.gpu.getPreferredCanvasFormat();return{context:s,textureFormat:a}}_buildUpContext(e,t,o,r){let{transparent:i}=this.#e;o.configure({alphaMode:i?"premultiplied":"opaque",device:e,format:r}),this.#r={device:e,adapter:t,canvas:this.#t,context:o,format:r},this.#c=!1}async init(e){this.#a=e;let t=await navigator.gpu.requestAdapter();if(te.isNull(t))throw new Error("WebGPU adapter unavalable or disabled.");let o=await t.requestDevice();if(te.isNull(t))throw new Error("WebGPU device unavalable or disabled.");o.addEventListener("uncapturederror",this._logError),this.#u=!te.isNull(e.modifiers?.version)&&!te.isNull(e.modifiers)&&(!te.isNull(e.modifiers.vertexInput)||!te.isNull(e.modifiers.vertexOutput)||!te.isNull(e.modifiers.fragment));let{context:r,textureFormat:i}=this._buildContext();this._buildUpContext(o,t,r,i)}#c;#u;render(e){if(this.#c||te.isNull(this.#n)||!(this.#t.width>0)||!(this.#t.height>0))return;let t=this.#r,o=t.device,r=this.#n,i=this.#a?.enableValidation??!1;this.#u&&te.extend(this.#h,e);let a=this._buildPassDescriptor({multisample:!0}),c=o.createCommandEncoder({label:j+"renderer"}),l=c.beginRenderPass(a);r.loop((u,p,f)=>{if(u.item.hide)return!1;i&&o.pushErrorScope("validation");let h=[u,p,...f];return It.create(t,h,{multisample:!0,modifiers:this.#a.modifiers}).frame(l,this.#f,...h),i&&o.popErrorScope().then(C=>{C&&this._logError(C)}),!0}),l.end(),o.queue.submit([c.finish()])}set disabled(e){this.#p=e}get disabled(){return this.#p}raycast(e){if(this.#c||te.isNull(this.#n))return Promise.resolve([]);let t=this.#r,o=t.device,r=this.#n,i=this.#a?.enableValidation??!1,s=Or.createColorPicking(t);return s.begin(),r.loop((a,c)=>a.item.hide?!1:(i&&o.pushErrorScope("validation"),s.frame(this.#f,a,c),i&&o.popErrorScope().then(l=>{l&&this._logError(l)}),!0)),s.end(e)}_disposeRenderableJustInCase(e){let t=this.#o;t.has(e)&&(t.get(e)?.destroy(),t.delete(e))}_createOrYieldRenderable(e,t=this.#i,o=this.#s){e.stage??=this.#e;let r=this.#o,i=r.get(e);return te.isNull(i)&&r.set(e,i=q.create(e,t)),i}_createOrYieldGeometry(e){let t=this.#i,o=t.get(e);return te.isNull(o)&&t.set(e,o=tr.create(e)),o}_createOrYieldMaterial(e){let t=this.#s,o=t.get(e);return te.isNull(o)&&t.set(e,o=tr.create(e)),o}_unwrapBuffers(e,t){t??={meshes:[],lights:[],cameras:[],groups:[]};for(let o of e.children)o.item.stage??=this.#e,Ee(o.item)&&t.meshes.push(o),pe(o.item)&&t.cameras.push(o),Se(o.item)&&t.lights.push(o),vt(o.item)&&(t.groups.push(o),this._unwrapBuffers(o,t));return t}_update(e){let t=[],o=[],r=[],i=l=>this._createOrYieldRenderable(l),s;for(let l of e){if(l.hide){this._disposeRenderableJustInCase(l);continue}if(l.stage??=this.#e,vt(l)){let u=l;u.flags.includes(I.Children)&&this.#o.delete(u),t.push(i(u))}Ee(l)&&l.geometry&&(this._createOrYieldGeometry(l.geometry),te.isNull(l.material)||this._createOrYieldMaterial(l.material),o.push(i(l))),Se(l)&&r.push(i(l)),pe(l)&&(s??=l)}s??=ba(this.#e);let a=i(s),c={meshes:o,lights:r,cameras:[a],groups:t};for(let l of t)c=this._unwrapBuffers(l,c);this.#n?.items.meshes.forEach(l=>{o.includes(l)||l.destroy()}),this.#n=new wo(c)}update(...e){this._update(Array.from(e))}dispose(){if(this.#n=null,this._disposeContext()){let{device:e}=this.#r;e.removeEventListener("uncapturederror",this._logError),e.destroy}}_disposeContext(){let e=this.#r;if(te.isNull(e))return!1;Or.dispose(e),It.dispose(e);let t=this.#l;if(this.#l=null,!te.isNull(t)){let{render:o,depth:r}=t;Ea(o?.texture,r?.texture)}return e.context.unconfigure(),!0}resize(e){if(this.#c=!0,this._disposeContext()){let{device:t,adapter:o}=this.#r,{context:r,textureFormat:i}=this._buildContext(this.canvas,e);this._buildUpContext(t,o,r,i),this.#u&&te.extend(this.#h,{resolution:e})}}get canvas(){return this.#t}};var Lt=function(n,e,t,o){var r=arguments.length,i=r<3?e:o===null?o=Object.getOwnPropertyDescriptor(e,t):o,s;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")i=Reflect.decorate(n,e,t,o);else for(var a=n.length-1;a>=0;a--)(s=n[a])&&(i=(r<3?s(i):r>3?s(e,t,i):s(e,t))||i);return r>3&&i&&Object.defineProperty(e,t,i),i},Pn="WebGPURaycastCallback",Li="WebGPURaycastPixel",Ln=Mo.getAttachedPropertyValue,On=Mo.setAttachedPropertyValue,Ta=Mo.deleteAttachedPropertyValue,sr=class extends Na.PacemItemElement{findContainer(){return Mo.findAncestor(this,e=>e instanceof Pt)}#e="";get version(){return this.#e}#t=new MutationObserver(()=>{this.wgsl=this.textContent});viewActivatedCallback(){super.viewActivatedCallback(),this.wgsl=this.textContent,this.#t.observe(this,{characterData:!0})}propertyChangedCallback(e,t,o,r){super.propertyChangedCallback(e,t,o,r),e==="wgsl"&&this._computeVersion(o)}_computeVersion(e=this.wgsl){Ra.hash(e).then(t=>{if(t!==this.#e){let o=this.#e,r=t;this.#e=r;let i=new Oi({propertyName:"version",oldValue:o,currentValue:r,firstChange:pt.isNullOrEmpty(o)});this.dispatchEvent(i)}})}disconnectedCallback(){this.#t.disconnect(),super.disconnectedCallback()}};Lt([Io({emit:!1,converter:Di.String})],sr.prototype,"type",void 0);Lt([Io({emit:!1,converter:Di.String})],sr.prototype,"wgsl",void 0);sr=Lt([Dn({tagName:Gn+"-3d-wgsl-script"})],sr);var Pt=class extends Je{constructor(){super(...arguments),this.#e=[],this._scriptVersionChangeHandler=e=>{let{propertyName:t}=e.detail;t==="version"&&this._parseWgslModifiers(e.detail.currentValue)},this.#t=new Set,this.#r=new Map,this.#o=!0,this.#i=!0,this.#s=new WeakMap}invalidateSize(e,t=e.size){this._ensureRenderer(e)?.resize(t)}#e;get items(){return this.#e}register(e){let t=this.#e;return e instanceof sr&&!t.includes(e)?(e.addEventListener(An,this._scriptVersionChangeHandler,!1),t.push(e),this._parseWgslModifiers(this.modifiers?.version),!0):!1}unregister(e){let t=this.#e,o=t.indexOf(e);return o>=0?(e.removeEventListener(An,this._scriptVersionChangeHandler,!1),t.splice(o,1),this._parseWgslModifiers(this.modifiers?.version),!0):!1}#t;#r;#o;#i;get supported(){return this.#o}get active(){return this.#i}_webGPUNotSupported(e){this.#o&&e.cause===nr.NotSupported&&(this.#o=!1,this.dispatchEvent(new Oi({propertyName:"supported",oldValue:null,currentValue:!1}))),this.#i&&(this.#i=!1,this.dispatchEvent(new Oi({propertyName:"active",oldValue:null,currentValue:!1})))}initialize(e){let t=this.#r,o=this.#t;return o.has(e)||o.add(e),To.create(e,{enableValidation:this.enableValidation??!1,modifiers:this.modifiers}).then(r=>(t.get(e)?.update(),t.set(e,r),this._updatePipeline(e),r.canvas),r=>(this.log(Ca.LogLevel.Error,r.message),this._webGPUNotSupported(r),null))}_parseWgslModifiers(e){let t=this.#e,o=t.find(l=>l.type=="vertex-input"),r=t.find(l=>l.type=="vertex-output"),i=t.find(l=>l.type=="fragment"),s=o?.wgsl,a=r?.wgsl,c=i?.wgsl;this.modifiers={vertexInput:s,vertexOutput:a,fragment:c,version:e}}propertyChangedCallback(e,t,o,r){if(super.propertyChangedCallback(e,t,o,r),!r)switch(e){case"modifiers":case"enableValidation":this._reinitialize();break}}disconnectedCallback(){let e=this.#r;for(let[t,o]of e)o?.dispose();e.clear(),this.#t.clear(),super.disconnectedCallback()}dispose(e){let t=this.#r,o=this.#t;t.has(e)&&(t.get(e)?.dispose(),t.delete(e)),o.has(e)&&o.delete(e)}_reinitialize(){for(let e of this.#t.values())this.initialize(e)}_ensureRenderer(e){return this.#r.get(e)}_updatePipeline(e){this._ensureRenderer(e)?.update(...e.datasource)}#s;render(e){let t=e.size?.width,o=e.size?.height;if(!(t>0)||!(o>0))return;let r=this._ensureRenderer(e);if(pt.isNull(r))return;this.#s.has(e)&&(this.#s.delete(e),this._itemsChangedExec(e));let i=Ln(e,Li);if(r.render({cursor:i,time:performance.now(),resolution:{width:t,height:o}}),!e.interactive)return;let s=Ln(e,Pn);if(!pt.isNullOrEmpty(s)){if(pt.isNullOrEmpty(i)){s(null);return}r.raycast(i).then(a=>{if(pt.isNullOrEmpty(a))s(null);else{let c={object:a[0],point:null};s(c)}})}}snapshot(e,t,o,r){let i=this.#r;if(!i.has(e))return Promise.resolve(null);let{canvas:s}=i.get(e),a=!pt.isNullOrEmpty(t),c=o??(a?"image/jpeg":null),l=r??(a?.9:null);return new Promise((u,p)=>{this.render(e),pt.snapshotElement(s,t,c,l).then(u)})}raycast(e,t,o,r){On(e,Pn,r),t.x<0||t.y<0||t.x>=o.width||t.y>=o.height?Ta(e,Li):On(e,Li,t)}_itemsChangedExec(e){this._updatePipeline(e)}_itemsChanged(e,t){this.#s.set(e,!0)}addItem(e,t){this._itemsChanged(e,t)}removeItem(e,t){this._itemsChanged(e,t)}updateItem(e,t){(pt.isNull(t)||t.flags.indexOf(I.Visibility)>=0||t.flags.indexOf(I.Children)>=0)&&this._itemsChanged(e,t)}zoomFit(e,...t){return Promise.resolve()}project(e,t){return{x:0,y:0}}getScene(e){return e}};Lt([wa(100)],Pt.prototype,"_parseWgslModifiers",null);Lt([Io({emit:!1})],Pt.prototype,"modifiers",void 0);Lt([Io({emit:!1,converter:Di.Boolean})],Pt.prototype,"enableValidation",void 0);Pt=Lt([Dn({tagName:Gn+"-3d-webgpu-adapter"})],Pt);import{CustomElement as Ma,P as Ia,Watch as ht,PropertyConverters as Dt,Utils as Ot,CustomEventUtils as Gi,avoidHandler as Dr,Behaviors as Aa,PropertyChangeEventName as Bn}from"@pacem/pacem-core";import{Geometry as Lo}from"@pacem/pacem-numerical";var Ye=function(n,e,t,o){var r=arguments.length,i=r<3?e:o===null?o=Object.getOwnPropertyDescriptor(e,t):o,s;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")i=Reflect.decorate(n,e,t,o);else for(var a=n.length-1;a>=0;a--)(s=n[a])&&(i=(r<3?s(i):r>3?s(e,t,i):s(e,t))||i);return r>3&&i&&Object.defineProperty(e,t,i),i},le=Lo.LinearAlgebra.Vector3D,ft=Lo.LinearAlgebra.Matrix3D,Ao=Lo.LinearAlgebra.Quaternion,Kp=Lo.LinearAlgebra.Spherical;function Pa(n){return pe(n)?n.stage:null}var La=1,Oa=1,Da=.05,Gr=.001,Br={maxAzimuth:180,minAzimuth:-180,inertia:!1,maxPolar:1/0,minPolar:-1/0,zoom:{enabled:!0},pan:{enabled:!0,button:2},rotation:{enabled:!0,button:0}},Po=class n{constructor(e,t){this._config=t,this._input={rho:0,theta:0,phi:0,x:0,y:0},this._progress={rho:0,theta:0,phi:0,x:0,y:0},this._startHandler=i=>{let{rotation:s,pan:a}=this._config,c=i.pointerType==="mouse",l=s.enabled&&c&&i.button===s.button&&Gi.matchModifiers(i,s.modifiers),u=a.enabled&&c&&i.button===a.button&&Gi.matchModifiers(i,a.modifiers);!l&&!u||(this.#t=l,(this.#e=u)&&(this._currentState=n._buildState(this._camera),Ot.extend(this._input,le.zero()),this._progress.x=this._progress.y=0),Dr(i),window.addEventListener("pointerup",this._endHandler,!1),window.addEventListener("pointermove",this._moveHandler,!1),window.addEventListener("contextmenu",this._avoidHandler,!1))},this._avoidHandler=i=>Dr(i),this._endHandler=i=>{Dr(i),window.setTimeout(()=>{window.removeEventListener("pointerup",this._endHandler),window.removeEventListener("pointermove",this._moveHandler),window.removeEventListener("contextmenu",this._avoidHandler)},20)},this._zoomHandler=i=>{let{zoom:s}=this._config;if(!(s.enabled&&Gi.matchModifiers(i,s.modifiers)))return;Dr(i);let c=this._input;c.rho-=Math.sign(i.deltaY)},this._moveHandler=i=>{Dr(i);let{height:s,width:a}=this._scene.size,c=this._input,l=Math.min(s,a);if(this.#t){let u=-La*360/l,{phi:p,theta:f}=c,{maxPolar:h,minPolar:b,maxAzimuth:C,minAzimuth:x}=this._config;c.phi=(p+i.movementX*u).clamp(b,h),c.theta=(f+i.movementY*u).clamp(x,C)}else if(this.#e){let u=this._currentState.radius/l;c.x+=-i.movementX*u,c.y+=i.movementY*u}},this._renderHandler=i=>{this._update()};let o=this._scene=(this._camera=e).stage;this._initialState=this._currentState=n._buildState(e);let r=this._canvas=o.stage;r.addEventListener("pointerdown",this._startHandler,!1),r.addEventListener("wheel",this._zoomHandler,{passive:!1}),o.addEventListener("render",this._renderHandler,!1)}static _buildState(e){let t=le.subtract(e.position,e.lookAt),o=le.mag(t);return{target:e.lookAt,versor:le.unit(t),up:e.up,radius:o,position:e.position}}static tryAttach(e,t){t??=Br;let o=Pa(e)?.stage;if(Ot.isNull(o))return null;{let{position:r,lookAt:i}=e;return Ot.isNull(r)||Ot.isNull(i)||le.areClose(r,i)?null:new n(e,t)}}get configuration(){return this._config}set configuration(e){this._config=e}#e;#t;_getSafeAzimuth({theta:e}){return n._modAngle(e)}_getSafePolar({phi:e}){return n._modAngle(e)}static _modAngle(e){for(;e<0;)e+=360;return e%360}static _getViewXYZ(e){let{versor:t,up:o}=e,r=le.cross(t,o),i=le.cross(r,t);return le.normalize(r),le.normalize(i),{right:r,up:i,versor:t}}#r;_update(){if(this.#r)return;this.#r=!0;let e=this._camera,{radius:t,versor:o,target:r,up:i}=this._initialState,{target:s}=this._currentState,{theta:a,phi:c,rho:l,x:u,y:p}=this._input,f=this._progress,{theta:h,phi:b,rho:C,x,y:d}=f,_=Math.abs(b-c)>Gr||Math.abs(h-a)>Gr,T=Math.abs(C-l)>Gr,N=Math.abs(u-x)>Gr||Math.abs(p-d)>Gr;if(T||_||N){let E=typeof this._config.inertia=="boolean"?this._config.inertia?Da:0:this._config.inertia,v=E>0&&E<1,{right:A,up:L}=n._getViewXYZ(this._initialState),P=r,G=i,R=s,m=C;v?m+=(l-C)*E:m=l,f.rho=m;let g=Math.pow(.95,m*Oa),y=le.scale(o,-g*t);P=le.add(P,y);let w=b,M=h;v?(w+=(c-b)*E,M+=(a-h)*E):(w=c,M=a);let O=this._getSafePolar({phi:f.phi=w}),D=this._getSafeAzimuth({theta:f.theta=M}),X=le.negate(r),H=ft.translate(ft.identity(),X),K=Ao.fromAxisAngle(L,O),ie=Ao.fromAxisAngle(A,D),he=ft.multiply(Ao.toRotationMatrix(ie),Ao.toRotationMatrix(K));H=ft.multiply(H,he),H=ft.translate(H,le.negate(X)),P=ft.transform(P,H),G=ft.transform(G,ft.clone(H,dt=>{dt.offsetX=dt.offsetY=dt.offsetZ=0}));let se=x,ue=d,re=se,Y=ue;v?(re+=(u-se)*E,Y+=(p-ue)*E):(re=u,Y=p),f.x=re,f.y=Y;let{right:de,up:me}=n._getViewXYZ(this._currentState),Le=le.scale(de,re),Oe=le.scale(me,Y),Gt=le.add(Le,Oe);R=le.add(s,Gt),e.lookAt=R,e.position=P,e.up=G,e.flags.push(I.Camera)}this.#r=!1}dispose(){let e=this._canvas,t=this._scene;Ot.isNull(e)||(e.removeEventListener("pointerdown",this._startHandler),e.removeEventListener("wheel",this._zoomHandler)),t.removeEventListener("render",this._renderHandler,!1)}},Pe=class extends Aa.PacemBehavior{constructor(){super(...arguments),this.#e=new Map,this._readyHandler=e=>{if(e.detail.propertyName==="isReady"&&e.detail.currentValue===!0){let t=e.currentTarget;t.removeEventListener(Bn,this._readyHandler),this._decorateCore(t)}}}#e;propertyChangedCallback(e,t,o,r){switch(super.propertyChangedCallback(e,t,o,r),e){case"maxAzimuth":case"minAzimuth":case"inertia":case"zoomControl":case"panControl":case"rotationControl":let i=this._buildConfig(),s=this.#e;for(let a of s.values())a.configuration=i;break}}disconnectedCallback(){let e=this.#e;for(let t of e.values())t.dispose();e.clear(),super.disconnectedCallback()}_buildConfig(){return Ot.extend({},Br,{maxAzimuth:this.maxAzimuth??1/0,minAzimuth:this.minAzimuth??-1/0,minPolar:this.minPolar??-1/0,maxPolar:this.maxPolar??1/0,inertia:this.inertia??!1,zoom:this.zoomControl??Br.zoom,pan:this.panControl??Br.pan,rotation:this.rotationControl??Br.rotation})}_decorateCore(e){let t=Po.tryAttach(e,this._buildConfig());Ot.isNull(t)||this.#e.set(e,t)}decorate(e){e.isConnected?this._decorateCore(e):e.addEventListener(Bn,this._readyHandler,!1)}undecorate(e){let t=this.#e;t.has(e)&&(t.get(e).dispose(),t.delete(e))}};Ye([ht({emit:!1,converter:Dt.Number})],Pe.prototype,"maxAzimuth",void 0);Ye([ht({emit:!1,converter:Dt.Number})],Pe.prototype,"maxPolar",void 0);Ye([ht({emit:!1,converter:Dt.Number})],Pe.prototype,"minAzimuth",void 0);Ye([ht({emit:!1,converter:Dt.Number})],Pe.prototype,"minPolar",void 0);Ye([ht({emit:!1,converter:Dt.Number})],Pe.prototype,"zoomControl",void 0);Ye([ht({emit:!1,converter:Dt.Number})],Pe.prototype,"rotationControl",void 0);Ye([ht({emit:!1,converter:Dt.Number})],Pe.prototype,"panControl",void 0);Ye([ht({emit:!1,converter:Go})],Pe.prototype,"inertia",void 0);Pe=Ye([Ma({tagName:Ia+"-"+"3d"+"-orbit-camera"})],Pe);var Vn={};Oo(Vn,{BooleanOrNumberConverter:()=>Go,DragEvent:()=>mt,KnownShader:()=>U,LineGeometry:()=>et,MaterialElement:()=>Q,MeshGeometry:()=>W,NodeGeometry:()=>Et,NotifyChange:()=>bt,Pacem3DAdapterElement:()=>Je,Pacem3DCameraElement:()=>Ce,Pacem3DGroupElement:()=>Ze,Pacem3DLightElement:()=>Ie,Pacem3DMeshElement:()=>ke,Pacem3DObjectElement:()=>Fe,Pacem3DOrthographicCameraElement:()=>Be,Pacem3DPerspectiveCameraElement:()=>qe,Point3DConverter:()=>$e,Point3DOrNumberConverter:()=>Vr,QuaternionConverter:()=>Do,RenderableElement:()=>be,RenderableEvent:()=>gt,StalePropertyFlag:()=>I,UI3DEvent:()=>$t,Ui3DElement:()=>ae,computePlaneNormal:()=>So,computeSharpVertexNormals:()=>ce,isBasicMaterial:()=>Fr,isCamera:()=>pe,isGeometry:()=>cr,isGroup:()=>vt,isInteraction:()=>kr,isLambertMaterial:()=>Xr,isLight:()=>Se,isLineMaterial:()=>Ke,isMaterial:()=>Ne,isMesh:()=>Ee,isMeshGeometry:()=>kt,isOrthographicCamera:()=>Ur,isPerspectiveCamera:()=>zr,isPhongMaterial:()=>Hr,isRenderable:()=>ar,isShaderMaterial:()=>Yi,isStage:()=>Bo,isStandardMaterial:()=>jr,isUi3DObject:()=>Ut});import{Transformer as Ba}from"@pacem/pacem-core";import{Point as Sa}from"@pacem/pacem-foundation";var Ga=function(n,e,t,o){var r=arguments.length,i=r<3?e:o===null?o=Object.getOwnPropertyDescriptor(e,t):o,s;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")i=Reflect.decorate(n,e,t,o);else for(var a=n.length-1;a>=0;a--)(s=n[a])&&(i=(r<3?s(i):r>3?s(e,t,i):s(e,t))||i);return r>3&&i&&Object.defineProperty(e,t,i),i},Si=class{static parse(e){let t=[],o=/^v((\s+-?[\d\.]+){3})/gm,r=o.exec(e);for(;r&&r.length;)t.push($e.convert(r[1])),r=o.exec(e);let i=[],s=/^vt((\s+-?[\d\.]+){2})/gm;for(r=s.exec(e);r&&r.length;)i.push(Sa.parse(r[1])),r=s.exec(e);let a=[],c=/^vn((\s+-?[\d\.]+){3})/gm;for(r=c.exec(e);r&&r.length;)a.push($e.convert(r[1])),r=c.exec(e);let l=[],u=[],p=[],f=/^f((\s+([\d]+\/[\d]+\/[\d]+)){3,})/gm;for(r=f.exec(e);r&&r.length;){let T=/([\d]+)\/([\d]+)\/([\d]+)/g,N=r[1],E=T.exec(N),v=0;for(var h,b,C,x,d,_;E&&E.length;)v>2&&(p.push(h),u.push(i[b]),l.push(a[C]),p.push(x),u.push(i[d]),l.push(a[_])),x=parseInt(E[1])-1,d=parseInt(E[2])-1,_=parseInt(E[3])-1,p.push(x),u.push(i[d]),l.push(a[_]),v===0&&(h=x,b=d,C=_),v++,E=T.exec(N);r=f.exec(e)}return new W(t,p,u,l)}},Vi=class{static parseGeometry(e,t){if(t.toLowerCase()==="obj")return Si.parse(e);throw new Error(`Type '${t}' is not supported.`)}};Ga([Ba("parse3D")],Vi,"parseGeometry",null);export{Sn as Components,Vn as Drawing3D};
|