gl-draw 0.14.23 → 0.14.24

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -91,4 +91,4 @@
91
91
  gl_FragColor = ( base_color + vec4( 1.0 ) * bloom_color );
92
92
  }
93
93
  }
94
- `,defines:{}}),"baseTexture");return e.needsSwap=!0,e},Pe=1,me=!1,hs=new O.MeshBasicMaterial({color:"black"}),cs=new O.PointsMaterial({color:"black",sizeAttenuation:!1}),ds=new O.PointsMaterial({color:"black",sizeAttenuation:!0}),ps=new O.SpriteMaterial({color:"black",sizeAttenuation:!0}),ms=new O.SpriteMaterial({color:"black",sizeAttenuation:!1}),us=new B.MeshLineMaterial({color:"black",sizeAttenuation:0,lineWidth:0}),fs={kernelRadius:8,minDistance:.005,maxDistance:.1},_s={threshold:0,strength:.4,radius:.1,bloomAlphaType:0},gs={multisampling:4,premultiplieAlpha:!1};class vs{constructor(e){this.bloomComposerActive=!1,this.active=!0,this.bloomSelection=new Set,this.bloomLayer=new O.Layers,this.bloomMaterials={},this.bloomVisible={},this.pipViewportState=null,this.options=e;const{rendererController:t,sceneController:s,cameraController:i,composerParams:r}=e,{renderer:o}=t;this.renderer=o;const{multisampling:a}=r,{maxSamples:l}=o.capabilities,d=o.getDrawingBufferSize(new O.Vector2),f=new O.WebGLRenderTarget(d.width,d.height,{samples:Math.min(a,l),type:O.HalfFloatType}),p=new De.EffectComposer(o,f),C=this.getSize();p.setSize(C.width,C.height);const v=new Pt.RenderPass(s.scene,i.camera);p.addPass(v),this.scene=s.scene,this.camera=i.camera,this.finalComposer=p,this.renderPass=v,i.event.on("pageChange",m=>{this.changeCamera(m)}),s.event.on("pageChange",m=>{this.changeScene(m)})}changeCamera(e){this.renderPass.camera=e,this.camera=e}changeScene(e){this.renderPass.scene=e,this.ssaoPass&&(this.ssaoPass.scene=e),this.scene=e}addOutputPass(){const{premultiplieAlpha:e}=this.options.composerParams,t=new as;this.outputPass=t,this.setPremultiplieAlpha(e),this.finalComposer.addPass(t)}setPremultiplieAlpha(e){this.outputPass&&(this.outputPass.uniforms.premultiplieAlpha.value=e?1:0)}addSSAOPass(e){const{scene:t,camera:s,renderer:i}=this,r=i.getSize(new O.Vector2),o=r.width,a=r.height,l=new Lt.SSAOPass(t,s,o,a);l.kernelRadius=e.kernelRadius,l.minDistance=e.minDistance,l.maxDistance=e.maxDistance,this.ssaoPass=l,this.finalComposer.addPass(l)}addBloomPass(e){const{renderer:t}=this,{threshold:s,strength:i,radius:r,bloomAlphaType:o}=e,a=new Rt.UnrealBloomPass(new O.Vector2(window.innerWidth,window.innerHeight),i,r,s);this.bloomPass=a;const l=new De.EffectComposer(t);l.renderToScreen=!1,l.addPass(this.renderPass),l.addPass(a),this.bloomComposer=l;const d=ls(l);d.uniforms.bloomAlphaType.value=o,this.bloomComposer=l,this.finalComposer.addPass(d),this.mixPass=d,this.bloomLayer.set(Pe)}toggleBloomSelection(e,t){if(!this.bloomComposer){console.warn("err:pencil.options.bloom");return}const{object3d:s}=e;if(!s)return;let i=t;t===void 0&&(i=!this.bloomSelection.has(s)),i?(this.bloomSelection.add(s),s.traverse(r=>{r.layers.enable(Pe)})):(this.bloomSelection.delete(s),s.traverse(r=>{r.layers.disable(Pe)})),this.bloomSelection.size===0?this.bloomComposerActive=!1:this.bloomComposerActive=!0}enable(){this.active||(this.active=!0)}disable(){this.active&&(this.active=!1)}setSize(e,t){var s;(s=this.bloomComposer)==null||s.setSize(e,t),this.finalComposer.setSize(e,t)}setPixelRatio(e){var t;(t=this.bloomComposer)==null||t.setPixelRatio(e),this.finalComposer.setPixelRatio(e)}darkenNonBloomed(){const e=[],t=[];this.scene.children.forEach(s=>{s.isTransformControls||s.isTransformControlsRoot||s.type==="RectAreaLightHelper"?e.push(s):t.push(s)}),t.forEach(s=>{s.traverse(i=>{var l;const r=i,o=i,a=i;(l=r.material)!=null&&l.isShadowMaterial?e.push(r):r.material&&this.bloomLayer.test(r.layers)===!1&&(this.bloomMaterials[r.uuid]=r.material,o.isSprite?o.material.sizeAttenuation?o.material=ps:o.material=ms:r.material instanceof B.MeshLineMaterial?r.material=us:a.isPoints?a.material.sizeAttenuation?a.material=ds:a.material=cs:r.material=hs)})}),e.forEach(s=>{this.bloomVisible[s.uuid]=s.visible,s.visible=!1})}restoreNonBloomed(){this.scene.traverse(e=>{const t=e;this.bloomMaterials[t.uuid]?(t.material=this.bloomMaterials[t.uuid],delete this.bloomMaterials[t.uuid]):this.bloomVisible[t.uuid]!==void 0&&(t.visible=this.bloomVisible[t.uuid],delete this.bloomVisible[t.uuid])})}finalComposerRender(){this.bloomComposerActive&&this.bloomComposer?(this.mixPass.enabled=!0,this.darkenNonBloomed(),this.bloomComposer.render(),this.restoreNonBloomed()):this.mixPass&&(this.mixPass.enabled=!1),this.finalComposer.render()}getSize(){return this.renderer.getSize(new O.Vector2)}render(){if(!this.active)return;const{cameraController:e,rendererController:t,sceneController:s}=this.options;if(this.pipViewportState){e.setPageActive(s.activeIndex);const i=this.getSize();t.setViewport({x:0,y:0,width:i.width,height:i.height,scissor:!0,scissorTest:!1}),this.finalComposerRender(),e.setPageActive(31),t.setViewport(ee(z({},this.pipViewportState),{scissor:!0,scissorTest:!0})),this.finalComposerRender()}else this.finalComposerRender()}dispose(){var e;this.bloomMaterials={},this.bloomVisible={},this.bloomSelection.clear(),this.finalComposer.dispose(),(e=this.bloomComposer)==null||e.dispose()}}class Qe extends O.Loader{constructor(e){super(e),this.options={type:"image"}}setOptions(e){return this.options=e,this}load(e,t,s,i){let r,o;this.options.type==="image"?(o=document.createElement("img"),r=new O.Texture(o)):this.options.type==="video"?(o=document.createElement("video"),o.preload="auto",o.autoplay=!1,o.loop=!1,o.muted=!0,o.setAttribute("webkit-playsinline","webkit-playsinline"),o.setAttribute("playsinline",""),r=new O.VideoTexture(o)):r=new O.Texture;const a=new O.FileLoader(this.manager);return a.setResponseType("blob"),a.setRequestHeader(this.requestHeader),a.setPath(this.path),a.setWithCredentials(this.withCredentials),a.load(e,l=>{let d=l;const f=e.split(".").pop(),p=this.options.type==="image"?`image/${f||"png"}`:`video/${f||"mp4"}`;d=d.slice(0,l.size,p);const C=()=>{o.removeEventListener("load",v,!1),o.removeEventListener("error",m,!1)},v=()=>{C(),r.needsUpdate=!0,t&&t(r)},m=g=>{C(),i&&i(g),this.manager.itemError(e),this.manager.itemEnd(e)};o.addEventListener("load",v,!1),o.addEventListener("error",m,!1);const u=window.URL.createObjectURL(d);o.src=u},s,i),r}}class ys extends O.Loader{constructor(e){super(e)}load(e,t,s,i){const r=new O.FileLoader(this.manager);r.setResponseType("blob"),r.setRequestHeader(this.requestHeader),r.setPath(this.path),r.setWithCredentials(this.withCredentials),r.load(e,o=>{const a=o,l=new DecompressionStream("gzip"),d=a.stream().pipeThrough(l);new Response(d).json().then(p=>{t==null||t(p)}).catch(p=>{i==null||i(p)})},s,i)}}const Cs={images:["png","jpg","jpeg","ico","webp","avif"],media:["mp4","webm","ogg"],gltf:["gltf","glb"],json:["json","geojson"],gzipJson:["json.gzip"],exr:["exr"],lottie:["lottie.json"]};class Es{constructor(e){this.loadObj=[],this.delLoadArr=[],this.assets=new Map,this.event=new ve.EventEmitter,this.options=z({simpleTexture4deleted:!1,prefix:""},e),this.loadingManager=new O.LoadingManager(()=>{},(t,s,i)=>{this.emit("progress",s,i)},t=>{console.warn(`Failed to load ${t}`)})}emit(e,...t){this.event.emit(e,...t)}on(e,t){this.event.on(e,t)}getAsset(e){const t=this.getAssetType(e);if(!t)return;const s=this.assets.get(e);if(!s){if((t==="images"||t==="media"||t==="exr")&&this.options.simpleTexture4deleted&&this.delLoadArr.includes(e))return new O.Texture;console.warn(`Asset ${e} not found`)}return s}getAssetType(e){var s;const t=(s=e.split(".").pop())==null?void 0:s.toLowerCase();if(t){if(e.endsWith("lottie.json"))return"lottie";if(e.endsWith("json.gzip"))return"gzipJson"}else return;for(const[i,r]of Object.entries(Cs))if(r.includes(t))return i}getLoader(e,t){if(e==="images")return this.textureLoader||(this.textureLoader=new Qe(this.loadingManager),this.options.prefix&&this.textureLoader.setPath(this.options.prefix)),this.textureLoader;if(e==="media")return this.videoTextureLoader||(this.videoTextureLoader=new Qe(this.loadingManager),this.videoTextureLoader.setOptions({type:"video"}),this.options.prefix&&this.videoTextureLoader.setPath(this.options.prefix)),this.videoTextureLoader;if(e==="gltf"&&(t!=null&&t.dracoPath))return this.dracoGltfLoader||(this.dracoGltfLoader=new Ue.GLTFLoader(this.loadingManager),this.dracoLoader=new Dt.DRACOLoader,this.dracoLoader.setDecoderPath(t==null?void 0:t.dracoPath),this.dracoGltfLoader.setDRACOLoader(this.dracoLoader),this.options.prefix&&this.dracoGltfLoader.setPath(this.options.prefix)),this.dracoGltfLoader;if(e==="gltf")return this.gltfLoader||(this.gltfLoader=new Ue.GLTFLoader(this.loadingManager),this.options.prefix&&this.gltfLoader.setPath(this.options.prefix)),this.gltfLoader;if(e==="lottie")return this.lottieLoader||(this.lottieLoader=new zt.LottieLoader(this.loadingManager),this.options.prefix&&this.lottieLoader.setPath(this.options.prefix)),this.lottieLoader;if(e==="gzipJson")return this.gzipJsonLoader||(this.gzipJsonLoader=new ys(this.loadingManager),this.options.prefix&&this.gzipJsonLoader.setPath(this.options.prefix)),this.gzipJsonLoader;if(e==="json")return this.jsonLoader||(this.jsonLoader=new O.FileLoader(this.loadingManager),this.jsonLoader.setResponseType("json"),this.options.prefix&&this.jsonLoader.setPath(this.options.prefix)),this.jsonLoader;if(e==="exr")return this.exrLoader||(this.exrLoader=new Ut.EXRLoader(this.loadingManager),this.options.prefix&&this.exrLoader.setPath(this.options.prefix)),this.exrLoader}add(e,t){typeof e=="string"&&(e=[e]),e.forEach(s=>{const i=z({src:s},t);this.loadObj.push(i)})}getSrcByAsset(e,t=this.assets){let s;return t.forEach((i,r)=>{i===e&&(s=r)}),s}get textureAssets(){const e=new Map;return this.assets.forEach((t,s)=>{(t instanceof O.Texture||t instanceof O.DataTexture||t instanceof O.VideoTexture)&&e.set(s,t)}),e}loadAll(){return te(this,null,function*(){const e=this.loadObj.filter(t=>!this.delLoadArr.includes(t.src));return yield Promise.all(e.map(t=>this.load(t.src,t)))})}load(e,t){return te(this,null,function*(){var a,l;const s=(a=t==null?void 0:t.type)!=null?a:this.getAssetType(e);if(!s)return;const i=(t==null?void 0:t.cache)!==!1,r=Le.makePromiseCreator();if(i){if(this.assets.has(e))return this.assets.get(e);this.assets.set(e,r.promise)}const o=this.getLoader(s,t);try{const d=yield o.loadAsync(e);if(this.assets.set(e,d),r.resolve(d),s==="images"||s==="media"||s==="exr"||s==="lottie"){(t==null?void 0:t.colorCorrection)!==!1&&Se.colorCorrection({texture:d});const f=(l=t==null?void 0:t.anisotropy)!=null?l:this.options.anisotropy;d.anisotropy=f}return d}catch(d){r.reject(`Failed to load ${e}`);return}})}getUnusedAssets(){const{scene:e}=this.options;if(!e)return[...this.delLoadArr];const t=new Set,s=this.textureAssets;e.traverse(r=>{const o=r;o.material&&(Array.isArray(o.material)?o.material:[o.material]).forEach(l=>{[l.map,l.emissiveMap,l.normalMap,l.roughnessMap,l.metalnessMap,l.aoMap].forEach(d=>{if(d){const f=this.getSrcByAsset(d,s);f&&t.add(f)}})})});const i=new Set(this.textureAssets.keys());return t.forEach(r=>{i.delete(r)}),[...i,...this.delLoadArr]}dispose(){var e;this.assets.clear(),(e=this.dracoLoader)==null||e.dispose(),this.event.removeAllListeners(),this.delLoadArr.length=0,this.loadObj.length=0}}const Os={prefix:""};class Ts extends ae{get loader(){return this.controller}constructor(e){super(),this.options=e}addLoader(e,t){const{loaderParams:s}=this.options,i=new Es(ee(z({},s),{scene:e}));return this.addController(i,t)}removePage(e){super.removePage(e,t=>{t.dispose()})}}class xs extends B.BaseObject{constructor(e){super(),this.options=z({},e)}create(){var e;this.object3d=(e=this.options.scene)!=null?e:new O.Scene}}function Je(h){let e=!1,t=[];return function(...s){t=s,e||(e=!0,requestAnimationFrame(()=>{e=!1,h(...t)}))}}class bs{constructor(e){var t;this.enabled=!0,this.pickFunctionsMap=new Map,this.pickNodeFunctionsMap=new Map,this.pickFunctionsMapIndex=-1,this.pickNodeFunctionsMapIndex=-1,this.activeObjects=new Set,this.prevActiveObjects=new Set,this.objCallbackMap=new Map,this.pickListener={move:!1,down:!1},this.pencil=e,this.domElement=((t=e.options.controls)==null?void 0:t.domElement)||e.options.container}addPickListener(e){const t=new Set(["move","enter","leave"]),s=new Set(["down","downOutside","click"]),i=r=>{var v;if(!this.enabled)return;r.preventDefault();const o=e==="move"?t:s,a=[];if(this.pickFunctionsMap.forEach(m=>{o.has(m.type)&&a.push(ee(z({},m),{objArr:m.objArr instanceof Function?m.objArr():m.objArr}))}),a.length===0)return;this.activeObjects.clear(),this.objCallbackMap.clear();const l=this.objCallbackMap,d=[];for(const m of a)for(const u of m.objArr){if(!u.object3d||!u.visibleWithAncestors)continue;l.has(u)||(l.set(u,new Map),d.push(u));const g=l.get(u);g.has(m.type)||g.set(m.type,[]),g.get(m.type).push(m.cb)}if(d.length===0)return;const f=d.map(m=>m.object3d);f.forEach(m=>{m.isGroup&&m.traverse(u=>{u instanceof O.Mesh&&f.push(u)})});const p=(v=this.pencil.pick(r,f,!1))==null?void 0:v.intersects;if(!p||p.length===0)e==="down"?this.handleDownOutside(r):e==="move"&&this.handleLeaveEvents(r);else{this.sortIntersections(p);const m=p[0];this.processIntersection(m,r,e)}const C=this.prevActiveObjects;this.prevActiveObjects=this.activeObjects,this.activeObjects=C,this.activeObjects.clear()};this.domElement.addEventListener(`pointer${e}`,Je(i),{passive:!1})}sortIntersections(e){e.sort((t,s)=>t.distance===s.distance?t.object.getObjectById(s.object.id)?1:s.object.getObjectById(t.object.id)?-1:0:t.distance-s.distance)}processIntersection(e,t,s){const i=this.objCallbackMap,r=e.index||-1;let o=e.object;for(;o;){const a=this.pencil.lead.objMap.get(o);a&&i.has(a)&&this.activeObjects.add(a),o=o.parent}s==="move"?this.handleLeaveEvents(t):s==="down"&&this.handleDownOutside(t),this.processObjectHierarchy(t,s,r)}processObjectHierarchy(e,t,s){const i=this.objCallbackMap;let r=!1;const o=()=>{r=!0};for(const a of this.activeObjects){if(r)break;const l=i.get(a);if(l)if(t==="move"){const d=l.get("enter");if(d&&!this.prevActiveObjects.has(a))for(const p of d)p({baseObject:a,mouseEvent:e,sp:o,intersectionIndex:s});const f=l.get("move");if(f)for(const p of f)p({baseObject:a,mouseEvent:e,sp:o,intersectionIndex:s})}else{const d=l.get("down");if(d)for(const p of d)p({baseObject:a,mouseEvent:e,sp:o,intersectionIndex:s});const f=l.get("click");if(f){const p=C=>{C.preventDefault();const v=5;if(!r&&Math.abs(C.clientX-e.clientX)<=v&&Math.abs(C.clientY-e.clientY)<=v)for(const m of f)m({baseObject:a,mouseEvent:e,sp:o,intersectionIndex:s});this.domElement.removeEventListener("pointerup",p)};this.domElement.addEventListener("pointerup",p)}}}}handleLeaveEvents(e){this.objCallbackMap.forEach((s,i)=>{const r=s.get("leave");if(r&&this.prevActiveObjects.has(i)&&!this.activeObjects.has(i))for(const o of r)o({baseObject:i,mouseEvent:e})})}handleDownOutside(e){this.objCallbackMap.forEach((s,i)=>{const r=s.get("downOutside");if(r&&!this.activeObjects.has(i))for(const o of r)o({baseObject:i,mouseEvent:e})})}handlePick(e,t,s){let i=t;i==="mousemove"?i="move":i==="mouseenter"?i="enter":i==="mouseleave"&&(i="leave"),this.pickFunctionsMapIndex+=1;const r=this.pickFunctionsMapIndex;return this.pickFunctionsMap.set(r,{objArr:e,type:i,cb:s}),this.pickListener.move||Array.from(this.pickFunctionsMap.values()).some(a=>["move","enter","leave"].includes(a.type))&&(this.pickListener.move=!0,this.addPickListener("move")),this.pickListener.down||Array.from(this.pickFunctionsMap.values()).some(a=>["down","downOutside","click"].includes(a.type))&&(this.pickListener.down=!0,this.addPickListener("down")),r}removePick(e){this.pickFunctionsMap.delete(e)}handlePickNode(e,t,s){if(t==="downOutside")return console.warn("handlePickNode:err:不支持 downOutside"),-1;this.pickNodeFunctionsMapIndex+=1;const i=this.pickNodeFunctionsMapIndex,r=e instanceof Function?e():e,o=[];for(const a of r){const l=a;l.element.style.pointerEvents="auto";const d=p=>{this.enabled&&(p.preventDefault(),s({baseObject:l,mouseEvent:p}))},f=`pointer${t}`;l.element.addEventListener(f,Je(d),!1),o.push({arr:l,type:f,listener:d})}return this.pickNodeFunctionsMap.set(i,o),i}removePickNode(e){const t=this.pickNodeFunctionsMap.get(e);if(t){for(const s of t)s.arr.element.style.pointerEvents="none",s.arr.element.removeEventListener(s.type,s.listener,!1);this.pickNodeFunctionsMap.delete(e)}}dispose(){this.pickFunctionsMap.clear(),this.pickNodeFunctionsMap.clear(),this.activeObjects.clear(),this.prevActiveObjects.clear(),this.objCallbackMap.clear()}}class ws extends bs{constructor(e,t){super(e),this.objMap=new Map,this.objects=new Map,this.objectsPm=new Map,this.objectNamesToFactories=new Map,this.scene=new xs({scene:t.scene}),this.scene.create(),this.scene.lead=this,this.scene.pencil=e,this.scene.key="Scene",this.group=new B.Group,this.group.create(),this.group.lead=this,this.group.pencil=e,this.group.key="@Group",this.prefabGroup=new B.Group,this.prefabGroup.create(),this.prefabGroup.lead=this,this.prefabGroup.pencil=e,this.prefabGroup.key="@PrefabGroup",this.scene.add(this.group.object3d,this.prefabGroup.object3d),this.objects.set("@Scene",this.scene),this.objects.set("@Group",this.group),this.objects.set("@PrefabGroup",this.prefabGroup),this.objMap.set(this.scene.object3d,this.scene),this.objMap.set(this.group.object3d,this.group),this.objMap.set(this.prefabGroup.object3d,this.prefabGroup)}get objectsPromise(){return this.objectsPm.values()}init(e){return Object.keys(e).forEach(t=>{const s=class{create(r={}){return new e[t](r)}};this.objectNamesToFactories.set(t,s)}),this}getObject(e,t){e.includes("#")&&console.warn("getObject:err:不支持 #",e);const{key:s}=t||{},i=`${e}${s?`#${s}`:""}`;return this.objects.get(i)}getAllObject(e,t){e.includes("#")&&console.warn("getAllObject:err:不支持 #",e);const{key:s}=t||{},i=`${e}${s?`#${s}`:""}`,r=[];return this.objects.forEach((o,a)=>{(a.startsWith(s?i:`${i}#`)||a===i)&&r.push(o)}),r}draw(e,t,s){return te(this,null,function*(){var r,o,a,l;const i=this.objectNamesToFactories.get(e);if(i){t||(t={}),t.target===void 0&&(t.target=s);const d=t.target,f=(r=t.onTop)!=null?r:0,p=(o=t.prefab)!=null?o:!1,C=(a=t.create)!=null?a:!0,v=new i().create(t);let m;return d===null?m=null:typeof d=="string"?m=this.objects.get(d):(l=d==null?void 0:d.objectType)!=null&&l.startsWith("BaseObject")||d?m=d:p?m=this.prefabGroup:m=this.group,C===!1?v.create=()=>{}:C!==!0&&(v.create=()=>{C(v)}),v.pencil=this.pencil,v.lead=this,v.prefab=p,v.objectType=`BaseObject#${e}`,v.objectOptions=t,this.setBaseObjectKey(v,t.key?`$t:#${t.key}`:"$t:",m==null?void 0:m.key),this.objectsPm.set(v.key,this.addBaseObject(v,m,f)),yield this.objectsPm.get(v.key),this.objectsPm.delete(v.key),v}throw new Error(`Unrecognized:${e}`)})}setBaseObjectKey(e,t,s){const i=e.objectType,[,r]=i.split("#");let o=r;return o=t.replace("$t:",r),s&&(o=t.replace("$P:",s)),this.objects.has(o)&&(o.includes("#")?o+=`-${Le.generateUUID()}`:o+=`#${Le.generateUUID()}`),e.key=o,this.objects.set(o,e),o}updateBaseObjectKey(e,t){var r;let s;for(const[o,a]of this.objects.entries())if(a===e){s=o;break}const i=(r=e.parent)==null?void 0:r.key;return s?(this.objects.delete(s),this.setBaseObjectKey(e,t,i)):this.setBaseObjectKey(e,t,i)}addBaseObject(e,t,s){return te(this,null,function*(){yield e.create(),e.object3d&&(s&&e.setTop(s),t!==null&&(t.add(e.object3d),this.objMap.set(e.object3d,e))),e.render()})}erase(...e){this.handleErase(!0,...e)}eraseWithoutMaterial(...e){this.handleErase(!1,...e)}handleErase(e,...t){[...t].forEach(s=>{const i=[];if(typeof s=="string"){const[r,o]=s.split("#");i.push(...this.getAllObject(r,{key:o}))}else i.push(s);i.forEach(r=>{e?r.dispose():r.disposeWithOutMaterial()})})}update(e,t){this.objects.forEach(s=>{s.update(e,t)})}setSize(e,t){this.objects.forEach(s=>{s.resize(e,t)})}eraseAll(){this.group&&(this.objects.forEach(e=>{e.key.startsWith("Node")&&this.erase(e)}),this.erase(this.group))}dispose(){super.dispose(),this.scene.erase(),this.objects.forEach(e=>{e.erase()}),this.objects.clear(),this.objectsPm.clear(),this.objMap.clear(),this.objectNamesToFactories.clear()}}class Ps extends ae{get lead(){return this.controller}constructor(e){super(),this.options=e}addLead(e,t){const{pencil:s}=this.options,i=new ws(s,{scene:e});return this.addController(i,t)}removePage(e){super.removePage(e,t=>{t.dispose()})}setPageActive(e){super.setPageActive(e,(t,s)=>{t.enabled=s})}setSize(e,t){this.controllerMap.forEach((s,i)=>{i.setSize(e,t)})}}const _e=class _e{constructor(e){var r,o;this.raycaster=new O.Raycaster,this.maxBackufferArea=5760*5760,this.installPlugins=new Map,this._cameraPositon=new O.Vector3,this._cameraTarget=new O.Vector3,this.event=new ve.EventEmitter,this.timer=new Ct.Timer,this.userData={},this.pageActiveIndex=0,this.pageCountIndex=0,this.userSetDprCache=1,this.event.setMaxListeners(1/0),(o=(r=this.timer).connect)==null||o.call(r,document),this.options=Ot(_e.options,e,{isMergeableObject:Se.isPlainObject}),this.userSetDprCache=this.options.renderer.devicePixelRatio;const{container:t,stats:s,transformControls:i}=this.options;if(this.init(),this.options.WebGPUTHREE||this.initComposer(),this.initCSSRenderer(),i&&this.initTransformControls(),s){const a=new Tt({horizontal:!1});a.dom.style.position="absolute",a.init(this.renderer),t.appendChild(a.dom),this.stats=a}this.initResizeObserver(),this.tweenUpdateRaf()}getPlugin(e){return this.installPlugins.get(e)}get renderer(){return this.rendererController.renderer}get maxAnisotropy(){return this.options.WebGPUTHREE?0:this.renderer.capabilities.getMaxAnisotropy()}get controls(){return this.controlsController.cameraControls}get cameraPositon(){return this.controls.getPosition(this._cameraPositon,!1)}get cameraTarget(){return this.controls.getTarget(this._cameraTarget,!1)}get camera(){return this.cameraController.camera}get scene(){return this.sceneController.scene}get loader(){return this.loaderController.loader}get lead(){return this.leadController.lead}tweenUpdateRaf(){Ce.update(),this.TweenRaf=requestAnimationFrame(this.tweenUpdateRaf.bind(this))}use(e,...t){this.installPlugins.has(e.pluginName)?console.log("plugin already installed"):typeof e.install=="function"&&(e.install(this,...t),this.installPlugins.set(e.pluginName,e))}addPage({sceneOptions:e,cameraOptions:t}={}){const s=this.pageCountIndex+1,i=this.cameraController.addPerspectiveCamera(t,s),r=this.sceneController.addScene(e,s);return r.add(i),this.controlsController.addCameraControls(i,s),this.loaderController.addLoader(r,s),this.leadController.addLead(r,s),this.pageCountIndex=s,s}removePage(e){this.cameraController.removePage(e),this.sceneController.removePage(e),this.controlsController.removePage(e),this.loaderController.removePage(e),this.leadController.removePage(e),this.pageCountIndex===e&&(this.pageCountIndex-=1),this.pageActiveIndex===e&&(this.render(),this.showPage(0))}showPage(e){var s;if(e===this.pageActiveIndex)return;const t=this.scene;this.sceneController.setPageActive(e),t&&((s=this.cssRendererController)==null||s.render(t,this.camera)),this.cameraController.setPageActive(e),this.controlsController.setPageActive(e),this.loaderController.setPageActive(e),this.leadController.setPageActive(e),this.pageActiveIndex=e}init(){var n;const{container:e,WebGPUTHREE:t,helper:s,viewHelper:i,renderer:r,controls:o,loader:a}=this.options,{width:l,height:d}=this.getSize(),f=t?new Wt({width:l,height:d,renderer:t.WebGPURenderer,rendererParams:qt}):new Zt({width:l,height:d,rendererParams:ee(z({},r),{antialias:!1})}),p=new Kt({width:l,height:d}),C=new $t({}),v=new Jt({controlsParams:{domElement:(n=o==null?void 0:o.domElement)!=null?n:f.renderer.domElement}}),m=new Ts({loaderParams:z({anisotropy:f.renderer.capabilities.getMaxAnisotropy()},a)}),u=new Ps({pencil:this});this.sceneController=C,this.cameraController=p,this.controlsController=v,this.rendererController=f,this.loaderController=m,this.leadController=u;const g=this.addPage({sceneOptions:this.options.scene,cameraOptions:this.options.camera});if(this.showPage(g),s){const _=new Qt({container:e,sceneController:C,cameraController:p});_.add(C.scene),this.helperController=_,i&&_.addViewHelper()}e.appendChild(f.renderer.domElement)}initComposer(){const{bloom:e,bloomParams:t,ssao:s,ssaoParams:i,composer:r}=this.options,o=new vs({rendererController:this.rendererController,sceneController:this.sceneController,cameraController:this.cameraController,composerParams:r});this.composerController=o,e&&o.addBloomPass(z({},t)),s&&o.addSSAOPass(z({},i)),o.addOutputPass()}initCSSRenderer(){const{container:e,css2DRenderer:t,css3DRenderer:s,css2DRendererParams:i,css3DRendererParams:r}=this.options;if(t||s){const o=new os(e);t&&o.addRenderer("css2d",i),s&&o.addRenderer("css3d",r),this.cssRendererController=o}}initTransformControls(){const e=new es({camera:this.camera,renderer:this.renderer,scene:this.scene});e.event.on("mouseDown",()=>{var t;(t=this.controlsController)==null||t.disable()}),e.event.on("mouseUp",()=>{var t;(t=this.controlsController)==null||t.enable()}),this.transformController=e}getSize(){const{container:e}=this.options;return{width:e.offsetWidth,height:e.offsetHeight}}initResizeObserver(){const{container:e}=this.options;if(this.resizeObserver)return;const t=new ResizeObserver(s=>{for(const i of s){const r=i.contentRect;this.handeleResize(r.width,r.height),this.setDevicePixelRatio(this.userSetDprCache)}});t.observe(e),this.resizeObserver=t}handeleResize(e,t,s=!0){const{rendererController:i,cameraController:r,composerController:o,cssRendererController:a,leadController:l}=this,d=this.renderer.getSize(new O.Vector2);d.x===e&&d.y===t||(r.setSize(e,t),i.setSize(e,t),o==null||o.setSize(e,t),a==null||a.setSize(e,t),l.setSize(e,t),this.installPlugins.forEach(f=>{var p;(p=f.setSize)==null||p.call(f,e,t)}),this.render(),s&&this.event.emit("resize",{width:e,height:t}))}setDevicePixelRatio(e){var a;this.userSetDprCache=e;const{width:t,height:s}=this.getSize();let i=Math.sqrt(this.maxBackufferArea/(t*s));i=(i*100|0)/100;const r=Math.min(e,i);r!==e&&console.warn("maxBackufferArea:",this.maxBackufferArea," the pixel ratio is set to",r);const o=this.renderer.getPixelRatio();r!==o&&(this.rendererController.setPixelRatio(r),(a=this.composerController)==null||a.setPixelRatio(r))}pick(e,t,s=!0){const{raycaster:i,options:r}=this,{container:o}=r,a=new O.Vector2,l=o.getBoundingClientRect();if(a.x=(e.clientX-l.left)/(l.right-l.left)*2-1,a.y=-((e.clientY-l.top)/(l.bottom-l.top))*2+1,this.camera&&this.scene){i.setFromCamera(a,this.camera);const d=i.intersectObjects(t||this.scene.children,s);if(d.length)return{object:d[0].object,index:d[0].index,intersects:d}}}render(){var s,i,r,o,a,l;if(!this.camera||!this.scene)return;this.timer.update(),Ce.update();const e=this.timer.getDelta(),t=this.timer.getElapsed();this.controlsController.update(e,t),this.leadController.update(e,t),this.installPlugins.forEach(d=>{var f;(f=d.update)==null||f.call(d,e,t)}),(s=this.helperController)==null||s.update(e,this.controlsController,this.cameraTarget),(i=this.composerController)!=null&&i.active?this.composerController.render():(r=this.rendererController)==null||r.render(this.scene,this.camera),(o=this.helperController)==null||o.renderViewHelper(this.renderer),(a=this.cssRendererController)==null||a.render(this.scene,this.camera),(l=this.stats)==null||l.update(),this.event.emit("render",{delta:e,elapsed:t})}start(){window.cancelAnimationFrame(this.TweenRaf),this.renderer.setAnimationLoop(this.render.bind(this)),this.event.emit("start")}stop(){this.tweenUpdateRaf(),this.renderer.setAnimationLoop(null),this.event.emit("stop")}autoRotate(e){this.controlsController.autoRotateSpeed=e}showPipViewport(e){this.composerController.pipViewportState=e;let t=this.pipCameraControls;if(e){const{width:s,height:i}=this.getSize(),r=new DOMRect(e.x/s,(i-e.y-e.height)/i,e.width/s,e.height/i);if(t)t.enabled=!0,t.camera.position.copy(this.camera.position);else{const o=this.cameraController.cloneCamera(31);o.aspect=e.width/e.height,o.updateProjectionMatrix(),t=this.controlsController.addCameraControls(o,this.sceneController.activeIndex),t.addEventListener("update",()=>{this.controls.enabled=!1}),t.addEventListener("sleep",()=>{this.controls.enabled=!0}),this.pipCameraControls=t}t.interactiveArea=r}else if(t){this.cameraController.setPageActive(this.sceneController.activeIndex);const s=this.getSize();this.rendererController.setViewport({x:0,y:0,width:s.width,height:s.height,scissor:!0,scissorTest:!1});const i=s.width/s.height;this.cameraController.camera.aspect!==i&&(this.cameraController.camera.aspect=i,this.cameraController.camera.updateProjectionMatrix()),t.enabled=!1}}dispose(){var e,t,s,i,r,o,a,l,d,f,p,C,v;this.stop(),this.timer.dispose(),Ce.removeAll(),this.event.removeAllListeners(),(e=this.resizeObserver)==null||e.unobserve(this.options.container),this.installPlugins.forEach(m=>{var u;(u=m.dispose)==null||u.call(m)}),(t=this.controlsController)==null||t.dispose(),(s=this.transformController)==null||s.dispose(),(i=this.cssRendererController)==null||i.dispose(),(r=this.sceneController)==null||r.dispose(),(o=this.cameraController)==null||o.dispose(),(a=this.helperController)==null||a.dispose(),(l=this.composerController)==null||l.dispose(),(d=this.rendererController)==null||d.dispose(),(f=this.loaderController)==null||f.dispose(),(p=this.leadController)==null||p.dispose(),this.cssRendererController=void 0,this.installPlugins.clear(),(C=this.stats)==null||C.dom.remove(),(v=this.renderer)==null||v.domElement.remove()}};_e.options={stats:me,helper:me,viewHelper:me,controls:!0,transformControls:me,renderer:Yt,composer:gs,scene:Xt,camera:ct,bloom:!1,bloomParams:_s,ssao:!1,loader:Os,ssaoParams:fs,css2DRenderer:!1,css2DRendererParams:z({},$e),css3DRenderer:!1,css3DRendererParams:z({},$e)};let fe=_e;const Ls=J.ACTION;exports.BaseObject=B.BaseObject;exports.ResourceTracker=B.ResourceTracker;exports.Pencil=fe;exports.cameraControlsAction=Ls;exports.default=fe;
94
+ `,defines:{}}),"baseTexture");return e.needsSwap=!0,e},Pe=1,me=!1,hs=new O.MeshBasicMaterial({color:"black"}),cs=new O.PointsMaterial({color:"black",sizeAttenuation:!1}),ds=new O.PointsMaterial({color:"black",sizeAttenuation:!0}),ps=new O.SpriteMaterial({color:"black",sizeAttenuation:!0}),ms=new O.SpriteMaterial({color:"black",sizeAttenuation:!1}),us=new B.MeshLineMaterial({color:"black",sizeAttenuation:0,lineWidth:0}),fs={kernelRadius:8,minDistance:.005,maxDistance:.1},_s={threshold:0,strength:.4,radius:.1,bloomAlphaType:0},gs={multisampling:4,premultiplieAlpha:!1};class vs{constructor(e){this.bloomComposerActive=!1,this.active=!0,this.bloomSelection=new Set,this.bloomLayer=new O.Layers,this.bloomMaterials={},this.bloomVisible={},this.pipViewportState=null,this.options=e;const{rendererController:t,sceneController:s,cameraController:i,composerParams:r}=e,{renderer:o}=t;this.renderer=o;const{multisampling:a}=r,{maxSamples:l}=o.capabilities,d=o.getDrawingBufferSize(new O.Vector2),f=new O.WebGLRenderTarget(d.width,d.height,{samples:Math.min(a,l),type:O.HalfFloatType}),p=new De.EffectComposer(o,f),C=this.getSize();p.setSize(C.width,C.height);const v=new Pt.RenderPass(s.scene,i.camera);p.addPass(v),this.scene=s.scene,this.camera=i.camera,this.finalComposer=p,this.renderPass=v,i.event.on("pageChange",m=>{this.changeCamera(m)}),s.event.on("pageChange",m=>{this.changeScene(m)})}changeCamera(e){this.renderPass.camera=e,this.camera=e}changeScene(e){this.renderPass.scene=e,this.ssaoPass&&(this.ssaoPass.scene=e),this.scene=e}addOutputPass(){const{premultiplieAlpha:e}=this.options.composerParams,t=new as;this.outputPass=t,this.setPremultiplieAlpha(e),this.finalComposer.addPass(t)}setPremultiplieAlpha(e){this.outputPass&&(this.outputPass.uniforms.premultiplieAlpha.value=e?1:0)}addSSAOPass(e){const{scene:t,camera:s,renderer:i}=this,r=i.getSize(new O.Vector2),o=r.width,a=r.height,l=new Lt.SSAOPass(t,s,o,a);l.kernelRadius=e.kernelRadius,l.minDistance=e.minDistance,l.maxDistance=e.maxDistance,this.ssaoPass=l,this.finalComposer.addPass(l)}addBloomPass(e){const{renderer:t}=this,{threshold:s,strength:i,radius:r,bloomAlphaType:o}=e,a=new Rt.UnrealBloomPass(new O.Vector2(window.innerWidth,window.innerHeight),i,r,s);this.bloomPass=a;const l=new De.EffectComposer(t);l.renderToScreen=!1,l.addPass(this.renderPass),l.addPass(a),this.bloomComposer=l;const d=ls(l);d.uniforms.bloomAlphaType.value=o,this.bloomComposer=l,this.finalComposer.addPass(d),this.mixPass=d,this.bloomLayer.set(Pe)}toggleBloomSelection(e,t){if(!this.bloomComposer){console.warn("err:pencil.options.bloom");return}const{object3d:s}=e;if(!s)return;let i=t;t===void 0&&(i=!this.bloomSelection.has(s)),i?(this.bloomSelection.add(s),s.traverse(r=>{r.layers.enable(Pe)})):(this.bloomSelection.delete(s),s.traverse(r=>{r.layers.disable(Pe)})),this.bloomSelection.size===0?this.bloomComposerActive=!1:this.bloomComposerActive=!0}enable(){this.active||(this.active=!0)}disable(){this.active&&(this.active=!1)}setSize(e,t){var s;(s=this.bloomComposer)==null||s.setSize(e,t),this.finalComposer.setSize(e,t)}setPixelRatio(e){var t;(t=this.bloomComposer)==null||t.setPixelRatio(e),this.finalComposer.setPixelRatio(e)}darkenNonBloomed(){const e=[],t=[];this.scene.children.forEach(s=>{s.isTransformControls||s.isTransformControlsRoot||s.type==="RectAreaLightHelper"?e.push(s):t.push(s)}),t.forEach(s=>{s.traverse(i=>{var l;const r=i,o=i,a=i;(l=r.material)!=null&&l.isShadowMaterial?e.push(r):r.material&&this.bloomLayer.test(r.layers)===!1&&(this.bloomMaterials[r.uuid]=r.material,o.isSprite?o.material.sizeAttenuation?o.material=ps:o.material=ms:r.material instanceof B.MeshLineMaterial?r.material=us:a.isPoints?a.material.sizeAttenuation?a.material=ds:a.material=cs:r.material=hs)})}),e.forEach(s=>{this.bloomVisible[s.uuid]=s.visible,s.visible=!1})}restoreNonBloomed(){this.scene.traverse(e=>{const t=e;this.bloomMaterials[t.uuid]?(t.material=this.bloomMaterials[t.uuid],delete this.bloomMaterials[t.uuid]):this.bloomVisible[t.uuid]!==void 0&&(t.visible=this.bloomVisible[t.uuid],delete this.bloomVisible[t.uuid])})}finalComposerRender(){this.bloomComposerActive&&this.bloomComposer?(this.mixPass.enabled=!0,this.darkenNonBloomed(),this.bloomComposer.render(),this.restoreNonBloomed()):this.mixPass&&(this.mixPass.enabled=!1),this.finalComposer.render()}getSize(){return this.renderer.getSize(new O.Vector2)}render(){if(!this.active)return;const{cameraController:e,rendererController:t,sceneController:s}=this.options;if(this.pipViewportState){e.setPageActive(s.activeIndex);const i=this.getSize();t.setViewport({x:0,y:0,width:i.width,height:i.height,scissor:!0,scissorTest:!1}),this.finalComposerRender(),e.setPageActive(31),t.setViewport(ee(z({},this.pipViewportState),{scissor:!0,scissorTest:!0})),this.finalComposerRender()}else this.finalComposerRender()}dispose(){var e;this.bloomMaterials={},this.bloomVisible={},this.bloomSelection.clear(),this.finalComposer.dispose(),(e=this.bloomComposer)==null||e.dispose()}}class Qe extends O.Loader{constructor(e){super(e),this.options={type:"image"}}setOptions(e){return this.options=e,this}load(e,t,s,i){let r,o;this.options.type==="image"?(o=document.createElement("img"),r=new O.Texture(o)):this.options.type==="video"?(o=document.createElement("video"),o.preload="auto",o.autoplay=!1,o.loop=!1,o.muted=!0,o.setAttribute("webkit-playsinline","webkit-playsinline"),o.setAttribute("playsinline",""),r=new O.VideoTexture(o)):r=new O.Texture;const a=new O.FileLoader(this.manager);return a.setResponseType("blob"),a.setRequestHeader(this.requestHeader),a.setPath(this.path),a.setWithCredentials(this.withCredentials),a.load(e,l=>{let d=l;const f=e.split(".").pop(),p=this.options.type==="image"?`image/${f||"png"}`:`video/${f||"mp4"}`;d=d.slice(0,l.size,p);const C=()=>{o.removeEventListener("load",v,!1),o.removeEventListener("error",m,!1)},v=()=>{C(),r.needsUpdate=!0,t&&t(r)},m=g=>{C(),i&&i(g),this.manager.itemError(e),this.manager.itemEnd(e)};o.addEventListener("load",v,!1),o.addEventListener("error",m,!1);const u=window.URL.createObjectURL(d);o.src=u},s,i),r}}class ys extends O.Loader{constructor(e){super(e)}load(e,t,s,i){const r=new O.FileLoader(this.manager);r.setResponseType("blob"),r.setRequestHeader(this.requestHeader),r.setPath(this.path),r.setWithCredentials(this.withCredentials),r.load(e,o=>{const a=o,l=new DecompressionStream("gzip"),d=a.stream().pipeThrough(l);new Response(d).json().then(p=>{t==null||t(p)}).catch(p=>{i==null||i(p)})},s,i)}}const Cs={images:["png","jpg","jpeg","ico","webp","avif"],media:["mp4","webm","ogg"],gltf:["gltf","glb"],json:["json","geojson"],gzipJson:["json.gzip"],exr:["exr"],lottie:["lottie.json"]};class Es{constructor(e){this.loadObj=[],this.delLoadArr=[],this.assets=new Map,this.event=new ve.EventEmitter,this.options=z({simpleTexture4deleted:!1,prefix:""},e),this.loadingManager=new O.LoadingManager(()=>{},(t,s,i)=>{this.emit("progress",s,i)},t=>{console.warn(`Failed to load ${t}`)})}emit(e,...t){this.event.emit(e,...t)}on(e,t){this.event.on(e,t)}getAsset(e){const t=this.getAssetType(e);if(!t)return;const s=this.assets.get(e);if(!s){if((t==="images"||t==="media"||t==="exr")&&this.options.simpleTexture4deleted&&this.delLoadArr.includes(e))return new O.Texture;console.warn(`Asset ${e} not found`)}return s}getAssetType(e){var s;const t=(s=e.split(".").pop())==null?void 0:s.toLowerCase();if(t){if(e.endsWith("lottie.json"))return"lottie";if(e.endsWith("json.gzip"))return"gzipJson"}else return;for(const[i,r]of Object.entries(Cs))if(r.includes(t))return i}getLoader(e,t){if(e==="images")return this.textureLoader||(this.textureLoader=new Qe(this.loadingManager),this.options.prefix&&this.textureLoader.setPath(this.options.prefix)),this.textureLoader;if(e==="media")return this.videoTextureLoader||(this.videoTextureLoader=new Qe(this.loadingManager),this.videoTextureLoader.setOptions({type:"video"}),this.options.prefix&&this.videoTextureLoader.setPath(this.options.prefix)),this.videoTextureLoader;if(e==="gltf"&&(t!=null&&t.dracoPath))return this.dracoGltfLoader||(this.dracoGltfLoader=new Ue.GLTFLoader(this.loadingManager),this.dracoLoader=new Dt.DRACOLoader,this.dracoLoader.setDecoderPath(t==null?void 0:t.dracoPath),this.dracoGltfLoader.setDRACOLoader(this.dracoLoader),this.options.prefix&&this.dracoGltfLoader.setPath(this.options.prefix)),this.dracoGltfLoader;if(e==="gltf")return this.gltfLoader||(this.gltfLoader=new Ue.GLTFLoader(this.loadingManager),this.options.prefix&&this.gltfLoader.setPath(this.options.prefix)),this.gltfLoader;if(e==="lottie")return this.lottieLoader||(this.lottieLoader=new zt.LottieLoader(this.loadingManager),this.options.prefix&&this.lottieLoader.setPath(this.options.prefix)),this.lottieLoader;if(e==="gzipJson")return this.gzipJsonLoader||(this.gzipJsonLoader=new ys(this.loadingManager),this.options.prefix&&this.gzipJsonLoader.setPath(this.options.prefix)),this.gzipJsonLoader;if(e==="json")return this.jsonLoader||(this.jsonLoader=new O.FileLoader(this.loadingManager),this.jsonLoader.setResponseType("json"),this.options.prefix&&this.jsonLoader.setPath(this.options.prefix)),this.jsonLoader;if(e==="exr")return this.exrLoader||(this.exrLoader=new Ut.EXRLoader(this.loadingManager),this.options.prefix&&this.exrLoader.setPath(this.options.prefix)),this.exrLoader}add(e,t){typeof e=="string"&&(e=[e]),e.forEach(s=>{const i=z({src:s},t);this.loadObj.push(i)})}getSrcByAsset(e,t=this.assets){let s;return t.forEach((i,r)=>{i===e&&(s=r)}),s}get textureAssets(){const e=new Map;return this.assets.forEach((t,s)=>{(t instanceof O.Texture||t instanceof O.DataTexture||t instanceof O.VideoTexture)&&e.set(s,t)}),e}loadAll(){return te(this,null,function*(){const e=this.loadObj.filter(t=>!this.delLoadArr.includes(t.src));return yield Promise.all(e.map(t=>this.load(t.src,t)))})}load(e,t){return te(this,null,function*(){var a,l;const s=(a=t==null?void 0:t.type)!=null?a:this.getAssetType(e);if(!s)return;const i=(t==null?void 0:t.cache)!==!1,r=Le.makePromiseCreator();if(i){if(this.assets.has(e))return this.assets.get(e);this.assets.set(e,r.promise)}const o=this.getLoader(s,t);try{const d=yield o.loadAsync(e);if(this.assets.set(e,d),r.resolve(d),s==="images"||s==="media"||s==="exr"||s==="lottie"){(t==null?void 0:t.colorCorrection)!==!1&&Se.colorCorrection({texture:d});const f=(l=t==null?void 0:t.anisotropy)!=null?l:this.options.anisotropy;d.anisotropy=f}return d}catch(d){r.reject(`Failed to load ${e}`);return}})}getUnusedAssets(){const{scene:e}=this.options;if(!e)return[...this.delLoadArr];const t=new Set,s=this.textureAssets;e.traverse(r=>{const o=r;o.material&&(Array.isArray(o.material)?o.material:[o.material]).forEach(l=>{[l.map,l.emissiveMap,l.normalMap,l.roughnessMap,l.metalnessMap,l.aoMap].forEach(d=>{if(d){const f=this.getSrcByAsset(d,s);f&&t.add(f)}})})});const i=new Set(this.textureAssets.keys());return t.forEach(r=>{i.delete(r)}),[...i,...this.delLoadArr]}dispose(){var e;this.assets.clear(),(e=this.dracoLoader)==null||e.dispose(),this.event.removeAllListeners(),this.delLoadArr.length=0,this.loadObj.length=0}}const Os={prefix:""};class Ts extends ae{get loader(){return this.controller}constructor(e){super(),this.options=e}addLoader(e,t){const{loaderParams:s}=this.options,i=new Es(ee(z({},s),{scene:e}));return this.addController(i,t)}removePage(e){super.removePage(e,t=>{t.dispose()})}}class xs extends B.BaseObject{constructor(e){super(),this.options=z({},e)}create(){var e;this.object3d=(e=this.options.scene)!=null?e:new O.Scene}}function Je(h){let e=!1,t=[];return function(...s){t=s,e||(e=!0,requestAnimationFrame(()=>{e=!1,h(...t)}))}}class bs{constructor(e){var t;this.enabled=!0,this.pickFunctionsMap=new Map,this.pickNodeFunctionsMap=new Map,this.pickFunctionsMapIndex=-1,this.pickNodeFunctionsMapIndex=-1,this.activeObjects=new Set,this.prevActiveObjects=new Set,this.objCallbackMap=new Map,this.pickListener={move:!1,down:!1},this.pencil=e,this.domElement=((t=e.options.controls)==null?void 0:t.domElement)||e.options.container}addPickListener(e){const t=new Set(["move","enter","leave"]),s=new Set(["down","downOutside","click"]),i=r=>{var v;if(!this.enabled)return;r.preventDefault();const o=e==="move"?t:s,a=[];if(this.pickFunctionsMap.forEach(m=>{o.has(m.type)&&a.push(ee(z({},m),{objArr:m.objArr instanceof Function?m.objArr():m.objArr}))}),a.length===0)return;this.activeObjects.clear(),this.objCallbackMap.clear();const l=this.objCallbackMap,d=[];for(const m of a)for(const u of m.objArr){if(!u.object3d||!u.visibleWithAncestors)continue;l.has(u)||(l.set(u,new Map),d.push(u));const g=l.get(u);g.has(m.type)||g.set(m.type,[]),g.get(m.type).push(m.cb)}if(d.length===0)return;const f=d.map(m=>m.object3d);f.forEach(m=>{m.isGroup&&m.traverse(u=>{u instanceof O.Mesh&&f.push(u)})});const p=(v=this.pencil.pick(r,f,!1))==null?void 0:v.intersects;if(!p||p.length===0)e==="down"?this.handleDownOutside(r):e==="move"&&this.handleLeaveEvents(r);else{this.sortIntersections(p);const m=p[0];this.processIntersection(m,r,e)}const C=this.prevActiveObjects;this.prevActiveObjects=this.activeObjects,this.activeObjects=C,this.activeObjects.clear()};this.domElement.addEventListener(`pointer${e}`,Je(i),{passive:!1})}sortIntersections(e){e.sort((t,s)=>t.distance===s.distance?t.object.getObjectById(s.object.id)?1:s.object.getObjectById(t.object.id)?-1:0:t.distance-s.distance)}processIntersection(e,t,s){const i=this.objCallbackMap,r=e.index||-1;let o=e.object;for(;o;){const a=this.pencil.lead.objMap.get(o);a&&i.has(a)&&this.activeObjects.add(a),o=o.parent}s==="move"?this.handleLeaveEvents(t):s==="down"&&this.handleDownOutside(t),this.processObjectHierarchy(t,s,r)}processObjectHierarchy(e,t,s){const i=this.objCallbackMap;let r=!1;const o=()=>{r=!0};for(const a of this.activeObjects){if(r)break;const l=i.get(a);if(l)if(t==="move"){const d=l.get("enter");if(d&&!this.prevActiveObjects.has(a))for(const p of d)p({baseObject:a,mouseEvent:e,sp:o,intersectionIndex:s});const f=l.get("move");if(f)for(const p of f)p({baseObject:a,mouseEvent:e,sp:o,intersectionIndex:s})}else{const d=l.get("down");if(d)for(const p of d)p({baseObject:a,mouseEvent:e,sp:o,intersectionIndex:s});const f=l.get("click");if(f){const p=C=>{C.preventDefault();const v=5;if(!r&&Math.abs(C.clientX-e.clientX)<=v&&Math.abs(C.clientY-e.clientY)<=v)for(const m of f)m({baseObject:a,mouseEvent:e,sp:o,intersectionIndex:s});this.domElement.removeEventListener("pointerup",p)};this.domElement.addEventListener("pointerup",p)}}}}handleLeaveEvents(e){this.objCallbackMap.forEach((s,i)=>{const r=s.get("leave");if(r&&this.prevActiveObjects.has(i)&&!this.activeObjects.has(i))for(const o of r)o({baseObject:i,mouseEvent:e})})}handleDownOutside(e){this.objCallbackMap.forEach((s,i)=>{const r=s.get("downOutside");if(r&&!this.activeObjects.has(i))for(const o of r)o({baseObject:i,mouseEvent:e})})}handlePick(e,t,s){let i=t;i==="mousemove"?i="move":i==="mouseenter"?i="enter":i==="mouseleave"&&(i="leave"),this.pickFunctionsMapIndex+=1;const r=this.pickFunctionsMapIndex;return this.pickFunctionsMap.set(r,{objArr:e,type:i,cb:s}),this.pickListener.move||Array.from(this.pickFunctionsMap.values()).some(a=>["move","enter","leave"].includes(a.type))&&(this.pickListener.move=!0,this.addPickListener("move")),this.pickListener.down||Array.from(this.pickFunctionsMap.values()).some(a=>["down","downOutside","click"].includes(a.type))&&(this.pickListener.down=!0,this.addPickListener("down")),r}removePick(e){this.pickFunctionsMap.delete(e)}handlePickNode(e,t,s){if(t==="downOutside")return console.warn("handlePickNode:err:不支持 downOutside"),-1;this.pickNodeFunctionsMapIndex+=1;const i=this.pickNodeFunctionsMapIndex,r=e instanceof Function?e():e,o=[];for(const a of r){const l=a;l.element.style.pointerEvents="auto";const d=p=>{this.enabled&&(p.preventDefault(),s({baseObject:l,mouseEvent:p}))},f=`pointer${t}`;l.element.addEventListener(f,Je(d),!1),o.push({arr:l,type:f,listener:d})}return this.pickNodeFunctionsMap.set(i,o),i}removePickNode(e){const t=this.pickNodeFunctionsMap.get(e);if(t){for(const s of t)s.arr.element.style.pointerEvents="none",s.arr.element.removeEventListener(s.type,s.listener,!1);this.pickNodeFunctionsMap.delete(e)}}dispose(){this.pickFunctionsMap.clear(),this.pickNodeFunctionsMap.clear(),this.activeObjects.clear(),this.prevActiveObjects.clear(),this.objCallbackMap.clear()}}class ws extends bs{constructor(e,t){super(e),this.objMap=new Map,this.objects=new Map,this.objectsPm=new Map,this.objectNamesToFactories=new Map,this.scene=new xs({scene:t.scene}),this.scene.create(),this.scene.lead=this,this.scene.pencil=e,this.scene.key="Scene",this.group=new B.Group,this.group.create(),this.group.lead=this,this.group.pencil=e,this.group.key="@Group",this.prefabGroup=new B.Group,this.prefabGroup.create(),this.prefabGroup.lead=this,this.prefabGroup.pencil=e,this.prefabGroup.key="@PrefabGroup",this.scene.add(this.group.object3d,this.prefabGroup.object3d),this.objects.set("@Scene",this.scene),this.objects.set("@Group",this.group),this.objects.set("@PrefabGroup",this.prefabGroup),this.objMap.set(this.scene.object3d,this.scene),this.objMap.set(this.group.object3d,this.group),this.objMap.set(this.prefabGroup.object3d,this.prefabGroup)}get objectsPromise(){return this.objectsPm.values()}init(e){return Object.keys(e).forEach(t=>{const s=class{create(r={}){return new e[t](r)}};this.objectNamesToFactories.set(t,s)}),this}getObject(e,t){e.includes("#")&&console.warn("getObject:err:不支持 #",e);const{key:s}=t||{},i=`${e}${s?`#${s}`:""}`;return this.objects.get(i)}getAllObject(e,t){e.includes("#")&&console.warn("getAllObject:err:不支持 #",e);const{key:s}=t||{},i=`${e}${s?`#${s}`:""}`,r=[];return this.objects.forEach((o,a)=>{(a.startsWith(s?i:`${i}#`)||a===i)&&r.push(o)}),r}draw(e,t,s){return te(this,null,function*(){var r,o,a,l;const i=this.objectNamesToFactories.get(e);if(i){t||(t={}),t.target===void 0&&(t.target=s);const d=t.target,f=(r=t.onTop)!=null?r:0,p=(o=t.prefab)!=null?o:!1,C=(a=t.create)!=null?a:!0,v=new i().create(t);let m;return d===null?m=null:typeof d=="string"?m=this.objects.get(d):(l=d==null?void 0:d.objectType)!=null&&l.startsWith("BaseObject")||d?m=d:p?m=this.prefabGroup:m=this.group,C===!1?v.create=()=>{}:C!==!0&&(v.create=()=>{C(v)}),v.pencil=this.pencil,v.lead=this,v.prefab=p,v.objectType=`BaseObject#${e}`,v.objectOptions=t,this.setBaseObjectKey(v,t.key?`$t:#${t.key}`:"$t:",m==null?void 0:m.key),this.objectsPm.set(v.key,this.addBaseObject(v,m,f)),yield this.objectsPm.get(v.key),this.objectsPm.delete(v.key),v}throw new Error(`Unrecognized:${e}`)})}setBaseObjectKey(e,t,s){const i=e.objectType,[,r]=i.split("#");let o=t.replace("$t:",r);return s&&(o=t.replace("$p:",s)),this.objects.has(o)&&(o.includes("#")?o+=`-${Le.generateUUID()}`:o+=`#${Le.generateUUID()}`),e.key=o,this.objects.set(o,e),o}updateBaseObjectKey(e,t){var r;let s;for(const[o,a]of this.objects.entries())if(a===e){s=o;break}const i=(r=e.parent)==null?void 0:r.key;return s?(this.objects.delete(s),this.setBaseObjectKey(e,t,i)):this.setBaseObjectKey(e,t,i)}addBaseObject(e,t,s){return te(this,null,function*(){yield e.create(),e.object3d&&(s&&e.setTop(s),t!==null&&(t.add(e.object3d),this.objMap.set(e.object3d,e))),e.render()})}erase(...e){this.handleErase(!0,...e)}eraseWithoutMaterial(...e){this.handleErase(!1,...e)}handleErase(e,...t){[...t].forEach(s=>{const i=[];if(typeof s=="string"){const[r,o]=s.split("#");i.push(...this.getAllObject(r,{key:o}))}else i.push(s);i.forEach(r=>{e?r.dispose():r.disposeWithOutMaterial()})})}update(e,t){this.objects.forEach(s=>{s.update(e,t)})}setSize(e,t){this.objects.forEach(s=>{s.resize(e,t)})}eraseAll(){this.group&&(this.objects.forEach(e=>{e.key.startsWith("Node")&&this.erase(e)}),this.erase(this.group))}dispose(){super.dispose(),this.scene.erase(),this.objects.forEach(e=>{e.erase()}),this.objects.clear(),this.objectsPm.clear(),this.objMap.clear(),this.objectNamesToFactories.clear()}}class Ps extends ae{get lead(){return this.controller}constructor(e){super(),this.options=e}addLead(e,t){const{pencil:s}=this.options,i=new ws(s,{scene:e});return this.addController(i,t)}removePage(e){super.removePage(e,t=>{t.dispose()})}setPageActive(e){super.setPageActive(e,(t,s)=>{t.enabled=s})}setSize(e,t){this.controllerMap.forEach((s,i)=>{i.setSize(e,t)})}}const _e=class _e{constructor(e){var r,o;this.raycaster=new O.Raycaster,this.maxBackufferArea=5760*5760,this.installPlugins=new Map,this._cameraPositon=new O.Vector3,this._cameraTarget=new O.Vector3,this.event=new ve.EventEmitter,this.timer=new Ct.Timer,this.userData={},this.pageActiveIndex=0,this.pageCountIndex=0,this.userSetDprCache=1,this.event.setMaxListeners(1/0),(o=(r=this.timer).connect)==null||o.call(r,document),this.options=Ot(_e.options,e,{isMergeableObject:Se.isPlainObject}),this.userSetDprCache=this.options.renderer.devicePixelRatio;const{container:t,stats:s,transformControls:i}=this.options;if(this.init(),this.options.WebGPUTHREE||this.initComposer(),this.initCSSRenderer(),i&&this.initTransformControls(),s){const a=new Tt({horizontal:!1});a.dom.style.position="absolute",a.init(this.renderer),t.appendChild(a.dom),this.stats=a}this.initResizeObserver(),this.tweenUpdateRaf()}getPlugin(e){return this.installPlugins.get(e)}get renderer(){return this.rendererController.renderer}get maxAnisotropy(){return this.options.WebGPUTHREE?0:this.renderer.capabilities.getMaxAnisotropy()}get controls(){return this.controlsController.cameraControls}get cameraPositon(){return this.controls.getPosition(this._cameraPositon,!1)}get cameraTarget(){return this.controls.getTarget(this._cameraTarget,!1)}get camera(){return this.cameraController.camera}get scene(){return this.sceneController.scene}get loader(){return this.loaderController.loader}get lead(){return this.leadController.lead}tweenUpdateRaf(){Ce.update(),this.TweenRaf=requestAnimationFrame(this.tweenUpdateRaf.bind(this))}use(e,...t){this.installPlugins.has(e.pluginName)?console.log("plugin already installed"):typeof e.install=="function"&&(e.install(this,...t),this.installPlugins.set(e.pluginName,e))}addPage({sceneOptions:e,cameraOptions:t}={}){const s=this.pageCountIndex+1,i=this.cameraController.addPerspectiveCamera(t,s),r=this.sceneController.addScene(e,s);return r.add(i),this.controlsController.addCameraControls(i,s),this.loaderController.addLoader(r,s),this.leadController.addLead(r,s),this.pageCountIndex=s,s}removePage(e){this.cameraController.removePage(e),this.sceneController.removePage(e),this.controlsController.removePage(e),this.loaderController.removePage(e),this.leadController.removePage(e),this.pageCountIndex===e&&(this.pageCountIndex-=1),this.pageActiveIndex===e&&(this.render(),this.showPage(0))}showPage(e){var s;if(e===this.pageActiveIndex)return;const t=this.scene;this.sceneController.setPageActive(e),t&&((s=this.cssRendererController)==null||s.render(t,this.camera)),this.cameraController.setPageActive(e),this.controlsController.setPageActive(e),this.loaderController.setPageActive(e),this.leadController.setPageActive(e),this.pageActiveIndex=e}init(){var n;const{container:e,WebGPUTHREE:t,helper:s,viewHelper:i,renderer:r,controls:o,loader:a}=this.options,{width:l,height:d}=this.getSize(),f=t?new Wt({width:l,height:d,renderer:t.WebGPURenderer,rendererParams:qt}):new Zt({width:l,height:d,rendererParams:ee(z({},r),{antialias:!1})}),p=new Kt({width:l,height:d}),C=new $t({}),v=new Jt({controlsParams:{domElement:(n=o==null?void 0:o.domElement)!=null?n:f.renderer.domElement}}),m=new Ts({loaderParams:z({anisotropy:f.renderer.capabilities.getMaxAnisotropy()},a)}),u=new Ps({pencil:this});this.sceneController=C,this.cameraController=p,this.controlsController=v,this.rendererController=f,this.loaderController=m,this.leadController=u;const g=this.addPage({sceneOptions:this.options.scene,cameraOptions:this.options.camera});if(this.showPage(g),s){const _=new Qt({container:e,sceneController:C,cameraController:p});_.add(C.scene),this.helperController=_,i&&_.addViewHelper()}e.appendChild(f.renderer.domElement)}initComposer(){const{bloom:e,bloomParams:t,ssao:s,ssaoParams:i,composer:r}=this.options,o=new vs({rendererController:this.rendererController,sceneController:this.sceneController,cameraController:this.cameraController,composerParams:r});this.composerController=o,e&&o.addBloomPass(z({},t)),s&&o.addSSAOPass(z({},i)),o.addOutputPass()}initCSSRenderer(){const{container:e,css2DRenderer:t,css3DRenderer:s,css2DRendererParams:i,css3DRendererParams:r}=this.options;if(t||s){const o=new os(e);t&&o.addRenderer("css2d",i),s&&o.addRenderer("css3d",r),this.cssRendererController=o}}initTransformControls(){const e=new es({camera:this.camera,renderer:this.renderer,scene:this.scene});e.event.on("mouseDown",()=>{var t;(t=this.controlsController)==null||t.disable()}),e.event.on("mouseUp",()=>{var t;(t=this.controlsController)==null||t.enable()}),this.transformController=e}getSize(){const{container:e}=this.options;return{width:e.offsetWidth,height:e.offsetHeight}}initResizeObserver(){const{container:e}=this.options;if(this.resizeObserver)return;const t=new ResizeObserver(s=>{for(const i of s){const r=i.contentRect;this.handeleResize(r.width,r.height),this.setDevicePixelRatio(this.userSetDprCache)}});t.observe(e),this.resizeObserver=t}handeleResize(e,t,s=!0){const{rendererController:i,cameraController:r,composerController:o,cssRendererController:a,leadController:l}=this,d=this.renderer.getSize(new O.Vector2);d.x===e&&d.y===t||(r.setSize(e,t),i.setSize(e,t),o==null||o.setSize(e,t),a==null||a.setSize(e,t),l.setSize(e,t),this.installPlugins.forEach(f=>{var p;(p=f.setSize)==null||p.call(f,e,t)}),this.render(),s&&this.event.emit("resize",{width:e,height:t}))}setDevicePixelRatio(e){var a;this.userSetDprCache=e;const{width:t,height:s}=this.getSize();let i=Math.sqrt(this.maxBackufferArea/(t*s));i=(i*100|0)/100;const r=Math.min(e,i);r!==e&&console.warn("maxBackufferArea:",this.maxBackufferArea," the pixel ratio is set to",r);const o=this.renderer.getPixelRatio();r!==o&&(this.rendererController.setPixelRatio(r),(a=this.composerController)==null||a.setPixelRatio(r))}pick(e,t,s=!0){const{raycaster:i,options:r}=this,{container:o}=r,a=new O.Vector2,l=o.getBoundingClientRect();if(a.x=(e.clientX-l.left)/(l.right-l.left)*2-1,a.y=-((e.clientY-l.top)/(l.bottom-l.top))*2+1,this.camera&&this.scene){i.setFromCamera(a,this.camera);const d=i.intersectObjects(t||this.scene.children,s);if(d.length)return{object:d[0].object,index:d[0].index,intersects:d}}}render(){var s,i,r,o,a,l;if(!this.camera||!this.scene)return;this.timer.update(),Ce.update();const e=this.timer.getDelta(),t=this.timer.getElapsed();this.controlsController.update(e,t),this.leadController.update(e,t),this.installPlugins.forEach(d=>{var f;(f=d.update)==null||f.call(d,e,t)}),(s=this.helperController)==null||s.update(e,this.controlsController,this.cameraTarget),(i=this.composerController)!=null&&i.active?this.composerController.render():(r=this.rendererController)==null||r.render(this.scene,this.camera),(o=this.helperController)==null||o.renderViewHelper(this.renderer),(a=this.cssRendererController)==null||a.render(this.scene,this.camera),(l=this.stats)==null||l.update(),this.event.emit("render",{delta:e,elapsed:t})}start(){window.cancelAnimationFrame(this.TweenRaf),this.renderer.setAnimationLoop(this.render.bind(this)),this.event.emit("start")}stop(){this.tweenUpdateRaf(),this.renderer.setAnimationLoop(null),this.event.emit("stop")}autoRotate(e){this.controlsController.autoRotateSpeed=e}showPipViewport(e){this.composerController.pipViewportState=e;let t=this.pipCameraControls;if(e){const{width:s,height:i}=this.getSize(),r=new DOMRect(e.x/s,(i-e.y-e.height)/i,e.width/s,e.height/i);if(t)t.enabled=!0,t.camera.position.copy(this.camera.position);else{const o=this.cameraController.cloneCamera(31);o.aspect=e.width/e.height,o.updateProjectionMatrix(),t=this.controlsController.addCameraControls(o,this.sceneController.activeIndex),t.addEventListener("update",()=>{this.controls.enabled=!1}),t.addEventListener("sleep",()=>{this.controls.enabled=!0}),this.pipCameraControls=t}t.interactiveArea=r}else if(t){this.cameraController.setPageActive(this.sceneController.activeIndex);const s=this.getSize();this.rendererController.setViewport({x:0,y:0,width:s.width,height:s.height,scissor:!0,scissorTest:!1});const i=s.width/s.height;this.cameraController.camera.aspect!==i&&(this.cameraController.camera.aspect=i,this.cameraController.camera.updateProjectionMatrix()),t.enabled=!1}}dispose(){var e,t,s,i,r,o,a,l,d,f,p,C,v;this.stop(),this.timer.dispose(),Ce.removeAll(),this.event.removeAllListeners(),(e=this.resizeObserver)==null||e.unobserve(this.options.container),this.installPlugins.forEach(m=>{var u;(u=m.dispose)==null||u.call(m)}),(t=this.controlsController)==null||t.dispose(),(s=this.transformController)==null||s.dispose(),(i=this.cssRendererController)==null||i.dispose(),(r=this.sceneController)==null||r.dispose(),(o=this.cameraController)==null||o.dispose(),(a=this.helperController)==null||a.dispose(),(l=this.composerController)==null||l.dispose(),(d=this.rendererController)==null||d.dispose(),(f=this.loaderController)==null||f.dispose(),(p=this.leadController)==null||p.dispose(),this.cssRendererController=void 0,this.installPlugins.clear(),(C=this.stats)==null||C.dom.remove(),(v=this.renderer)==null||v.domElement.remove()}};_e.options={stats:me,helper:me,viewHelper:me,controls:!0,transformControls:me,renderer:Yt,composer:gs,scene:Xt,camera:ct,bloom:!1,bloomParams:_s,ssao:!1,loader:Os,ssaoParams:fs,css2DRenderer:!1,css2DRendererParams:z({},$e),css3DRenderer:!1,css3DRendererParams:z({},$e)};let fe=_e;const Ls=J.ACTION;exports.BaseObject=B.BaseObject;exports.ResourceTracker=B.ResourceTracker;exports.Pencil=fe;exports.cameraControlsAction=Ls;exports.default=fe;
@@ -3379,8 +3379,8 @@ class Us extends Rs {
3379
3379
  }
3380
3380
  setBaseObjectKey(e, t, s) {
3381
3381
  const i = e.objectType, [, r] = i.split("#");
3382
- let o = r;
3383
- return o = t.replace("$t:", r), s && (o = t.replace("$P:", s)), this.objects.has(o) && (o.includes("#") ? o += `-${Re()}` : o += `#${Re()}`), e.key = o, this.objects.set(o, e), o;
3382
+ let o = t.replace("$t:", r);
3383
+ return s && (o = t.replace("$p:", s)), this.objects.has(o) && (o.includes("#") ? o += `-${Re()}` : o += `#${Re()}`), e.key = o, this.objects.set(o, e), o;
3384
3384
  }
3385
3385
  updateBaseObjectKey(e, t) {
3386
3386
  var r;