gl-draw 0.13.7 → 0.13.8
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 +1 -1
- package/dist/index.module.js +1 -1
- package/package.json +1 -1
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},be=1,pe=!1,ps=new T.MeshBasicMaterial({color:"black"}),ms=new T.PointsMaterial({color:"black",sizeAttenuation:!1}),us=new T.PointsMaterial({color:"black",sizeAttenuation:!0}),fs=new T.SpriteMaterial({color:"black",sizeAttenuation:!0}),_s=new T.SpriteMaterial({color:"black",sizeAttenuation:!1}),gs=new _e.MeshLineMaterial({color:"black",sizeAttenuation:0,lineWidth:0}),vs={kernelRadius:8,minDistance:.005,maxDistance:.1},ys={threshold:0,strength:.4,radius:.1,bloomAlphaType:0},Cs={multisampling:4,premultiplieAlpha:!1};class Es{constructor(e){this.bloomComposerActive=!1,this.active=!0,this.bloomSelection=new Set,this.bloomLayer=new T.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:h}=o.capabilities,p=o.getDrawingBufferSize(new T.Vector2),g=new T.WebGLRenderTarget(p.width,p.height,{samples:Math.min(a,h),type:T.HalfFloatType}),f=new Re.EffectComposer(o,g),E=this.getSize();f.setSize(E.width,E.height);const v=new At.RenderPass(s.scene,i.camera);f.addPass(v),this.scene=s.scene,this.camera=i.camera,this.finalComposer=f,this.renderPass=v,i.event.on("pageChange",d=>{this.changeCamera(d)}),s.event.on("pageChange",d=>{this.changeScene(d)})}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 cs;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 T.Vector2),o=r.width,a=r.height,h=new Mt.SSAOPass(t,s,o,a);h.kernelRadius=e.kernelRadius,h.minDistance=e.minDistance,h.maxDistance=e.maxDistance,this.ssaoPass=h,this.finalComposer.addPass(h)}addBloomPass(e){const{renderer:t}=this,{threshold:s,strength:i,radius:r,bloomAlphaType:o}=e,a=new zt.UnrealBloomPass(new T.Vector2(window.innerWidth,window.innerHeight),i,r,s);this.bloomPass=a;const h=new Re.EffectComposer(t);h.renderToScreen=!1,h.addPass(this.renderPass),h.addPass(a),this.bloomComposer=h;const p=ds(h);p.uniforms.bloomAlphaType.value=o,this.bloomComposer=h,this.finalComposer.addPass(p),this.mixPass=p,this.bloomLayer.set(be)}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(be)})):(this.bloomSelection.delete(s),s.traverse(r=>{r.layers.disable(be)})),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)}),e.forEach(s=>{this.bloomVisible[s.uuid]=s.visible,s.visible=!1}),t.forEach(s=>{s.traverse(i=>{const r=i,o=i,a=i;r.material&&this.bloomLayer.test(r.layers)===!1&&(this.bloomMaterials[r.uuid]=r.material,o.isSprite?o.material.sizeAttenuation?o.material=fs:o.material=_s:r.material instanceof _e.MeshLineMaterial?r.material=gs:a.isPoints?a.material.sizeAttenuation?a.material=us:a.material=ms:r.material=ps)})})}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 T.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(q(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 Je extends T.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 T.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 T.VideoTexture(o)):r=new T.Texture;const a=new T.FileLoader(this.manager);return a.setResponseType("blob"),a.setRequestHeader(this.requestHeader),a.setPath(this.path),a.setWithCredentials(this.withCredentials),a.load(e,h=>{let p=h;const g=e.split(".").pop(),f=this.options.type==="image"?`image/${g||"png"}`:`video/${g||"mp4"}`;p=p.slice(0,h.size,f);const E=()=>{o.removeEventListener("load",v,!1),o.removeEventListener("error",d,!1)},v=()=>{E(),r.needsUpdate=!0,t&&t(r)},d=u=>{E(),i&&i(u),this.manager.itemError(e),this.manager.itemEnd(e)};o.addEventListener("load",v,!1),o.addEventListener("error",d,!1);const c=window.URL.createObjectURL(p);o.src=c},s,i),r}}class Os extends T.Loader{constructor(e){super(e)}load(e,t,s,i){const r=new T.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,h=new DecompressionStream("gzip"),p=a.stream().pipeThrough(h);new Response(p).json().then(f=>{t==null||t(f)}).catch(f=>{i==null||i(f)})},s,i)}}const Ts={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 xs{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 T.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 T.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(Ts))if(r.includes(t))return i}getLoader(e,t){if(e==="images")return this.textureLoader||(this.textureLoader=new Je(this.loadingManager),this.options.prefix&&this.textureLoader.setPath(this.options.prefix)),this.textureLoader;if(e==="media")return this.videoTextureLoader||(this.videoTextureLoader=new Je(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 Ft.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 It.LottieLoader(this.loadingManager),this.options.prefix&&this.lottieLoader.setPath(this.options.prefix)),this.lottieLoader;if(e==="gzipJson")return this.gzipJsonLoader||(this.gzipJsonLoader=new Os(this.loadingManager),this.options.prefix&&this.gzipJsonLoader.setPath(this.options.prefix)),this.gzipJsonLoader;if(e==="json")return this.jsonLoader||(this.jsonLoader=new T.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 kt.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 T.Texture||t instanceof T.DataTexture||t instanceof T.VideoTexture)&&e.set(s,t)}),e}loadAll(){return B(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 B(this,null,function*(){var a,h;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=Pe.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 p=yield o.loadAsync(e);if(this.assets.set(e,p),r.resolve(p),s==="images"||s==="media"||s==="exr"||s==="lottie"){(t==null?void 0:t.colorCorrection)!==!1&&Le.colorCorrection({texture:p});const g=(h=t==null?void 0:t.anisotropy)!=null?h:this.options.anisotropy;p.anisotropy=g}return p}catch(p){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(h=>{[h.map,h.emissiveMap,h.normalMap,h.roughnessMap,h.metalnessMap,h.aoMap].forEach(p=>{if(p){const g=this.getSrcByAsset(p,s);g&&t.add(g)}})})});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 ws={prefix:""};class bs extends oe{get loader(){return this.controller}constructor(e){super(),this.options=e}addLoader(e,t){const{loaderParams:s}=this.options,i=new xs(q(z({},s),{scene:e}));return this.addController(i,t)}removePage(e){super.removePage(e,t=>{t.dispose()})}}function et(l){let e=!1;return function(...t){e||(e=!0,requestAnimationFrame(()=>{e=!1,l(...t)}))}}class Ps{constructor(e,t){this.objMap=new Map,this.targetNullMap=new Map,this.objects=new Map,this.groupMap=new Map,this.prefabGroupMap=new Map,this.objectNamesToFactories=new Map,this.pickFunctionsMapIndex=-1,this.pickFunctionsMap={},this.pickListener={move:!1,down:!1},this.enabled=!0,this.pickNodeFunctionsMapIndex=-1,this.pickNodeFunctionsMap={},this.pencil=e,this.init(t),this.objectNamesToFactories.set("@Group",class{create(){return new _e.Group}})}get group(){return this.groupMap.get(this.scene)}get prefabGroup(){return this.prefabGroupMap.get(this.scene)}get scene(){return this.pencil.scene}get objectsPromise(){const e=[];return this.objects.forEach(t=>{e.push(t.pm.promise)}),e}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}instantiate(s){return B(this,arguments,function*(e,{create:t}={}){const{objectType:i,objectOptions:r}=e,[,o]=i.split("#"),a=yield this.draw(o,q(z({},r||{}),{create:t,prefab:!1}));return a.isInstantiate=!0,a})}initGroup(){return B(this,null,function*(){if(!this.group){const e=yield this.draw("@Group",{target:this.scene});this.groupMap.set(this.scene,e)}if(!this.prefabGroup){const e=yield this.draw("@Group",{key:"Prefab",target:this.scene});this.prefabGroupMap.set(this.scene,e)}})}draw(e,t,s){return B(this,null,function*(){var r,o,a,h;const i=this.objectNamesToFactories.get(e);if(i){t||(t={}),t.target===void 0&&(t.target=s);const{key:p}=t;let g=`${e}${p?`#${p}`:""}`;this.objects.has(g)&&(g.includes("#")?g+=`-${Pe.generateUUID()}`:g+=`#${Pe.generateUUID()}`);const f=t.target,E=(r=t.onTop)!=null?r:0,v=(o=t.prefab)!=null?o:!1,d=(a=t.create)!=null?a:!0,c=new i().create(t);let u;return f===null?u=null:typeof f=="string"?u=this.objects.get(f):(h=f==null?void 0:f.objectType)!=null&&h.startsWith("BaseObject")||f?u=f:v&&this.prefabGroup?u=this.prefabGroup:!v&&this.group?u=this.group:u=this.scene,d===!1?c.create=()=>{}:d!==!0&&(c.create=()=>{d(c)}),c.pencil=this.pencil,c.drawController=this,c.key=g,c.prefab=v,c.objectType=`BaseObject#${e}`,c.objectOptions=t,this.objects.set(g,c),yield this.addBaseObject(c,u,E),c}throw new Error(`Unrecognized:${e}`)})}addBaseObject(e,t,s){return B(this,null,function*(){yield e.create(),e.object3d&&(s&&e.setTop(s),t!==null?(t.add(e.object3d),this.objMap.set(e.object3d,e)):this.targetNullMap.set(e.object3d,e)),e.render(),e.pm.resolve()})}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=>{const o=r.object3d&&this.targetNullMap.get(r.object3d);this.removeBaseObject(r,e),o&&this.removeBaseObject(o,e)})})}removeBaseObject(e,t=!0){e.object3d&&(e.object3d.removeFromParent(),e.object3d.traverse(s=>{const i=this.objMap.get(s);i?(i!==e&&i.objectType==="BaseObject#Node"&&i.object3d.removeFromParent(),t?i.dispose():i.disposeWithOutMaterial(),this.objects.delete(i.key),i.object3d&&(this.objMap.delete(i.object3d),this.targetNullMap.delete(i.object3d))):tt.disposeMesh(s,t)}))}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))}addPickListener(e){var r;let t;const s=o=>{if(!this.enabled)return;o.preventDefault();const h=Object.values(this.pickFunctionsMap).map(d=>q(z({},d),{objArr:d.objArr instanceof Function?d.objArr():d.objArr})).filter(d=>{if(e==="move")return d.type==="move"||d.type==="enter"||d.type==="leave";if(e==="down")return d.type==="down"||d.type==="downOutside"||d.type==="click"}).reduce((d,c)=>d.concat(c.objArr.map(u=>({obj:u,type:c.type,cb:c.cb})).filter(({obj:u})=>u.object3d&&u.visibleWithAncestors)),[]).reduce((d,c)=>{const u=d.find(n=>n.obj===c.obj&&n.type===c.type);return u?u.cb.push(c.cb):d.push({obj:c.obj,type:c.type,cb:[c.cb]}),d},[]).sort((d,c)=>d.obj.object3d.getObjectById(c.obj.object3d.id)?1:c.obj.object3d.getObjectById(d.obj.object3d.id)?-1:0);if(h.length===0)return;const p=h.map(({obj:d})=>d.object3d);let g=this.pencil.pick(o,p,!1),f=g==null?void 0:g.object;const E=h.filter(d=>d.type==="leave"),v=h.filter(d=>d.type==="downOutside");if(!f){const d=h.filter(c=>{var u;return(u=c.obj.object3d)==null?void 0:u.isGroup});if(d.length&&(g=this.pencil.pick(o,d.map(({obj:c})=>c.object3d),!0),g!=null&&g.object)){const c=d.find(u=>u.obj.object3d.getObjectById(g.object.id));c&&(f=c.obj.object3d)}}if(f){const d=g.index;h.filter(({obj:c})=>c.object3d===f).forEach(c=>{if(e==="move")E.forEach(u=>{(c==null?void 0:c.obj)!==u.obj&&t===u.obj&&u.cb.forEach(n=>{n(u.obj,o)})}),(c==null?void 0:c.type)==="enter"?t!==c.obj&&c.cb.forEach(u=>{u(c.obj,o,d)}):(c==null?void 0:c.type)==="move"&&c.cb.forEach(u=>{u(c.obj,o,d)}),t=c==null?void 0:c.obj;else if(v.forEach(u=>{var n;if((c==null?void 0:c.obj)!==u.obj){if(((n=u.obj.object3d)==null?void 0:n.isGroup)&&u.obj.object3d.getObjectById(f.id))return;u.cb.forEach(C=>{C(u.obj,o)})}}),c)if(c.type==="click"){const u=n=>{n.preventDefault();const _=5;Math.abs(n.clientX-o.clientX)<=_&&Math.abs(n.clientY-o.clientY)<=_&&c.cb.forEach(C=>{C(c.obj,o,d)}),i.removeEventListener("pointerup",u,!1)};i.addEventListener("pointerup",u,!1)}else c.type!=="downOutside"&&c.cb.forEach(u=>{u(c.obj,o,d)})})}else e==="move"?(E.forEach(d=>{t===d.obj&&d.cb.forEach(c=>{c(d.obj,o)})}),t=void 0):v.forEach(d=>{d.cb.forEach(c=>{c(d.obj,o)})})},i=((r=this.pencil.options.controls)==null?void 0:r.domElement)||this.pencil.options.container;i.addEventListener(`pointer${e}`,et(s),!1)}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[r]={objArr:e,type:i,cb:s},this.pickListener.move||Object.values(this.pickFunctionsMap).some(a=>a.type==="move"||a.type==="enter"||a.type==="leave")&&(this.pickListener.move=!0,this.addPickListener("move")),this.pickListener.down||Object.values(this.pickFunctionsMap).some(a=>a.type==="down"||a.type==="downOutside"||a.type==="click")&&(this.pickListener.down=!0,this.addPickListener("down")),r}removePick(e){delete this.pickFunctionsMap[e]}handlePickNode(e,t,s){if(t==="downOutside")return console.warn("handlePickNode:err:不支持 downOutside"),-1;this.pickNodeFunctionsMapIndex+=1;const i=this.pickNodeFunctionsMapIndex;return(e instanceof Function?e():e).forEach(o=>{const a=o;a.element.style.pointerEvents="auto";const h=p=>{this.enabled&&(p.preventDefault(),s(a,p))};a.element.addEventListener(`pointer${t}`,et(h),!1),this.pickNodeFunctionsMap[i]||(this.pickNodeFunctionsMap[i]=[]),this.pickNodeFunctionsMap[i].push({arr:a,type:`pointer${t}`,listener:h})}),i}removePickNode(e){const t=this.pickNodeFunctionsMap[e];t&&(t.forEach(s=>{s.arr.element.style.pointerEvents="none",s.arr.element.removeEventListener(s.type,s.listener,!1)}),delete this.pickNodeFunctionsMap[e])}dispose(){this.objects.forEach((e,t)=>{e.erase(),e.pm.reject(`stop draw:${t}`)}),this.objects.clear(),this.objMap.clear(),this.targetNullMap.clear(),this.objectNamesToFactories.clear(),this.pickFunctionsMap={},this.pickNodeFunctionsMap={},this.groupMap.clear(),this.prefabGroupMap.clear()}}class Ls extends oe{get lead(){return this.controller}constructor(e){super(),this.options=e}addLead(e,t){const{leadParams:s,pencil:i}=this.options,r=new Ps(i,{});return this.addController(r,t)}removePage(e){super.removePage(e,t=>{t.dispose()})}setPageActive(e){super.setPageActive(e,(t,s)=>{t.enabled=s})}}const fe=class fe{constructor(e){this.raycaster=new T.Raycaster,this.maxBackufferArea=5760*5760,this.installPlugins=new Map,this._cameraPositon=new T.Vector3,this._cameraTarget=new T.Vector3,this.event=new ve.EventEmitter,this.timer=new Ot.Timer,this.userData={},this.pageActiveIndex=-1,this.pageCountIndex=-1,this.userSetDprCache=1,this.event.setMaxListeners(1/0),this.timer.connect(document),this.options=xt(fe.options,e,{isMergeableObject:Le.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 r=new wt({horizontal:!1});r.dom.style.position="absolute",r.init(this.renderer),t.appendChild(r.dom),this.stats=r}this.initResizeObserver()}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}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({},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.pageActiveIndex===e&&this.showPage(0),this.pageCountIndex===e&&(this.pageCountIndex-=1)}showPage(e){e!==this.pageActiveIndex&&(this.sceneController.setPageActive(e),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:h,height:p}=this.getSize(),g=t?new Xt({width:h,height:p,renderer:t.WebGPURenderer,rendererParams:Kt}):new Gt({width:h,height:p,rendererParams:q(z({},r),{antialias:!1})}),f=new Qt({width:h,height:p}),E=new es({}),v=new ss({controlsParams:{domElement:(n=o==null?void 0:o.domElement)!=null?n:g.renderer.domElement}}),d=new bs({loaderParams:z({anisotropy:g.renderer.capabilities.getMaxAnisotropy()},a)}),c=new Ls({pencil:this});this.sceneController=E,this.cameraController=f,this.controlsController=v,this.rendererController=g,this.loaderController=d,this.leadController=c;const u=this.addPage({sceneOptions:this.options.scene,cameraOptions:this.options.camera});if(this.showPage(u),s){const _=new ts({container:e,sceneController:E,cameraController:f});_.add(E.scene),this.helperController=_,i&&_.addViewHelper()}e.appendChild(g.renderer.domElement)}initComposer(){const{bloom:e,bloomParams:t,ssao:s,ssaoParams:i,composer:r}=this.options,o=new Es({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 ls(e);t&&o.addRenderer("css2d",i),s&&o.addRenderer("css3d",r),this.cssRendererController=o}}initTransformControls(){const e=new is({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}=this,h=this.renderer.getSize(new T.Vector2);h.x===e&&h.y===t||(r==null||r.setSize(e,t),i==null||i.setSize(e,t),o==null||o.setSize(e,t),a==null||a.setSize(e,t),this.installPlugins.forEach(p=>{var g;(g=p.setSize)==null||g.call(p,e,t)}),this.render(),s&&this.event.emit("resize",{width:e,height:t}))}setDevicePixelRatio(e){var a;this.userSetDprCache=e;const t=this.renderer.getPixelRatio();if(e===t)return;const{width:s,height:i}=this.getSize();let r=Math.sqrt(this.maxBackufferArea/(s*i));r=(r*100|0)/100;const o=Math.min(e,r);o!==e&&console.warn("maxBackufferArea:",this.maxBackufferArea," the pixel ratio is set to",o),this.rendererController.setPixelRatio(o),(a=this.composerController)==null||a.setPixelRatio(o)}pick(e,t,s=!0){const{raycaster:i,options:r}=this,{container:o}=r,a=new T.Vector2,h=o.getBoundingClientRect();if(a.x=(e.clientX-h.left)/(h.right-h.left)*2-1,a.y=-((e.clientY-h.top)/(h.bottom-h.top))*2+1,this.camera&&this.scene){i.setFromCamera(a,this.camera);const p=i.intersectObjects(t||this.scene.children,s);if(p.length)return{object:p[0].object,index:p[0].index,intersects:p}}}render(){var o,a,h,p,g,f,E;const{scene:e,camera:t,timer:s}=this;s.update(),ze.update();const i=s.getDelta(),r=s.getElapsed();(o=this.controlsController)==null||o.update(i),this.installPlugins.forEach(v=>{var d;(d=v.update)==null||d.call(v,i,r)}),(a=this.helperController)==null||a.update(i,this.controlsController,this.cameraTarget),(h=this.composerController)!=null&&h.active?this.composerController.render():(p=this.rendererController)==null||p.render(this.scene,this.camera),(g=this.helperController)==null||g.renderViewHelper(this.renderer),(f=this.cssRendererController)==null||f.render(e,t),(E=this.stats)==null||E.update(),this.event.emit("render",{delta:i,elapsed:r})}start(){this.renderer.setAnimationLoop(this.render.bind(this)),this.event.emit("start")}stop(){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,h,p,g,f,E,v;this.stop(),this.timer.dispose(),ze.removeAll(),this.event.removeAllListeners(),(e=this.resizeObserver)==null||e.unobserve(this.options.container),this.installPlugins.forEach(d=>{var c;(c=d.dispose)==null||c.call(d)}),(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(),(h=this.composerController)==null||h.dispose(),(p=this.rendererController)==null||p.dispose(),(g=this.loaderController)==null||g.dispose(),(f=this.leadController)==null||f.dispose(),this.cssRendererController=void 0,this.installPlugins.clear(),(E=this.stats)==null||E.dom.remove(),(v=this.renderer)==null||v.domElement.remove()}};fe.options={stats:pe,helper:pe,viewHelper:pe,controls:!0,transformControls:pe,renderer:Wt,composer:Cs,scene:Jt,camera:pt,bloom:!1,bloomParams:ys,ssao:!1,loader:ws,ssaoParams:vs,css2DRenderer:!1,css2DRendererParams:z({},Qe),css3DRenderer:!1,css3DRendererParams:z({},Qe)};let ue=fe;const Ss=J.ACTION;exports.BaseObject=_e.BaseObject;exports.Pencil=ue;exports.cameraControlsAction=Ss;exports.default=ue;
|
|
94
|
+
`,defines:{}}),"baseTexture");return e.needsSwap=!0,e},be=1,pe=!1,ps=new T.MeshBasicMaterial({color:"black"}),ms=new T.PointsMaterial({color:"black",sizeAttenuation:!1}),us=new T.PointsMaterial({color:"black",sizeAttenuation:!0}),fs=new T.SpriteMaterial({color:"black",sizeAttenuation:!0}),_s=new T.SpriteMaterial({color:"black",sizeAttenuation:!1}),gs=new _e.MeshLineMaterial({color:"black",sizeAttenuation:0,lineWidth:0}),vs={kernelRadius:8,minDistance:.005,maxDistance:.1},ys={threshold:0,strength:.4,radius:.1,bloomAlphaType:0},Cs={multisampling:4,premultiplieAlpha:!1};class Es{constructor(e){this.bloomComposerActive=!1,this.active=!0,this.bloomSelection=new Set,this.bloomLayer=new T.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:h}=o.capabilities,p=o.getDrawingBufferSize(new T.Vector2),g=new T.WebGLRenderTarget(p.width,p.height,{samples:Math.min(a,h),type:T.HalfFloatType}),f=new Re.EffectComposer(o,g),E=this.getSize();f.setSize(E.width,E.height);const v=new At.RenderPass(s.scene,i.camera);f.addPass(v),this.scene=s.scene,this.camera=i.camera,this.finalComposer=f,this.renderPass=v,i.event.on("pageChange",d=>{this.changeCamera(d)}),s.event.on("pageChange",d=>{this.changeScene(d)})}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 cs;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 T.Vector2),o=r.width,a=r.height,h=new Mt.SSAOPass(t,s,o,a);h.kernelRadius=e.kernelRadius,h.minDistance=e.minDistance,h.maxDistance=e.maxDistance,this.ssaoPass=h,this.finalComposer.addPass(h)}addBloomPass(e){const{renderer:t}=this,{threshold:s,strength:i,radius:r,bloomAlphaType:o}=e,a=new zt.UnrealBloomPass(new T.Vector2(window.innerWidth,window.innerHeight),i,r,s);this.bloomPass=a;const h=new Re.EffectComposer(t);h.renderToScreen=!1,h.addPass(this.renderPass),h.addPass(a),this.bloomComposer=h;const p=ds(h);p.uniforms.bloomAlphaType.value=o,this.bloomComposer=h,this.finalComposer.addPass(p),this.mixPass=p,this.bloomLayer.set(be)}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(be)})):(this.bloomSelection.delete(s),s.traverse(r=>{r.layers.disable(be)})),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)}),e.forEach(s=>{this.bloomVisible[s.uuid]=s.visible,s.visible=!1}),t.forEach(s=>{s.traverse(i=>{const r=i,o=i,a=i;r.material&&this.bloomLayer.test(r.layers)===!1&&(this.bloomMaterials[r.uuid]=r.material,o.isSprite?o.material.sizeAttenuation?o.material=fs:o.material=_s:r.material instanceof _e.MeshLineMaterial?r.material=gs:a.isPoints?a.material.sizeAttenuation?a.material=us:a.material=ms:r.material=ps)})})}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 T.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(q(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 Je extends T.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 T.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 T.VideoTexture(o)):r=new T.Texture;const a=new T.FileLoader(this.manager);return a.setResponseType("blob"),a.setRequestHeader(this.requestHeader),a.setPath(this.path),a.setWithCredentials(this.withCredentials),a.load(e,h=>{let p=h;const g=e.split(".").pop(),f=this.options.type==="image"?`image/${g||"png"}`:`video/${g||"mp4"}`;p=p.slice(0,h.size,f);const E=()=>{o.removeEventListener("load",v,!1),o.removeEventListener("error",d,!1)},v=()=>{E(),r.needsUpdate=!0,t&&t(r)},d=u=>{E(),i&&i(u),this.manager.itemError(e),this.manager.itemEnd(e)};o.addEventListener("load",v,!1),o.addEventListener("error",d,!1);const c=window.URL.createObjectURL(p);o.src=c},s,i),r}}class Os extends T.Loader{constructor(e){super(e)}load(e,t,s,i){const r=new T.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,h=new DecompressionStream("gzip"),p=a.stream().pipeThrough(h);new Response(p).json().then(f=>{t==null||t(f)}).catch(f=>{i==null||i(f)})},s,i)}}const Ts={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 xs{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 T.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 T.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(Ts))if(r.includes(t))return i}getLoader(e,t){if(e==="images")return this.textureLoader||(this.textureLoader=new Je(this.loadingManager),this.options.prefix&&this.textureLoader.setPath(this.options.prefix)),this.textureLoader;if(e==="media")return this.videoTextureLoader||(this.videoTextureLoader=new Je(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 Ft.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 It.LottieLoader(this.loadingManager),this.options.prefix&&this.lottieLoader.setPath(this.options.prefix)),this.lottieLoader;if(e==="gzipJson")return this.gzipJsonLoader||(this.gzipJsonLoader=new Os(this.loadingManager),this.options.prefix&&this.gzipJsonLoader.setPath(this.options.prefix)),this.gzipJsonLoader;if(e==="json")return this.jsonLoader||(this.jsonLoader=new T.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 kt.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 T.Texture||t instanceof T.DataTexture||t instanceof T.VideoTexture)&&e.set(s,t)}),e}loadAll(){return B(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 B(this,null,function*(){var a,h;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=Pe.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 p=yield o.loadAsync(e);if(this.assets.set(e,p),r.resolve(p),s==="images"||s==="media"||s==="exr"||s==="lottie"){(t==null?void 0:t.colorCorrection)!==!1&&Le.colorCorrection({texture:p});const g=(h=t==null?void 0:t.anisotropy)!=null?h:this.options.anisotropy;p.anisotropy=g}return p}catch(p){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(h=>{[h.map,h.emissiveMap,h.normalMap,h.roughnessMap,h.metalnessMap,h.aoMap].forEach(p=>{if(p){const g=this.getSrcByAsset(p,s);g&&t.add(g)}})})});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 ws={prefix:""};class bs extends oe{get loader(){return this.controller}constructor(e){super(),this.options=e}addLoader(e,t){const{loaderParams:s}=this.options,i=new xs(q(z({},s),{scene:e}));return this.addController(i,t)}removePage(e){super.removePage(e,t=>{t.dispose()})}}function et(l){let e=!1;return function(...t){e||(e=!0,requestAnimationFrame(()=>{e=!1,l(...t)}))}}class Ps{constructor(e,t){this.objMap=new Map,this.targetNullMap=new Map,this.objects=new Map,this.groupMap=new Map,this.prefabGroupMap=new Map,this.objectNamesToFactories=new Map,this.pickFunctionsMapIndex=-1,this.pickFunctionsMap={},this.pickListener={move:!1,down:!1},this.enabled=!0,this.pickNodeFunctionsMapIndex=-1,this.pickNodeFunctionsMap={},this.pencil=e,this.init(t),this.objectNamesToFactories.set("@Group",class{create(){return new _e.Group}})}get group(){return this.groupMap.get(this.scene)}get prefabGroup(){return this.prefabGroupMap.get(this.scene)}get scene(){return this.pencil.scene}get objectsPromise(){const e=[];return this.objects.forEach(t=>{e.push(t.pm.promise)}),e}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}instantiate(s){return B(this,arguments,function*(e,{create:t}={}){const{objectType:i,objectOptions:r}=e,[,o]=i.split("#"),a=yield this.draw(o,q(z({},r||{}),{create:t,prefab:!1}));return a.isInstantiate=!0,a})}initGroup(){return B(this,null,function*(){if(!this.group){const e=yield this.draw("@Group",{target:this.scene});this.groupMap.set(this.scene,e)}if(!this.prefabGroup){const e=yield this.draw("@Group",{key:"Prefab",target:this.scene});this.prefabGroupMap.set(this.scene,e)}})}draw(e,t,s){return B(this,null,function*(){var r,o,a,h;const i=this.objectNamesToFactories.get(e);if(i){t||(t={}),t.target===void 0&&(t.target=s);const{key:p}=t;let g=`${e}${p?`#${p}`:""}`;this.objects.has(g)&&(g.includes("#")?g+=`-${Pe.generateUUID()}`:g+=`#${Pe.generateUUID()}`);const f=t.target,E=(r=t.onTop)!=null?r:0,v=(o=t.prefab)!=null?o:!1,d=(a=t.create)!=null?a:!0,c=new i().create(t);let u;return f===null?u=null:typeof f=="string"?u=this.objects.get(f):(h=f==null?void 0:f.objectType)!=null&&h.startsWith("BaseObject")||f?u=f:v&&this.prefabGroup?u=this.prefabGroup:!v&&this.group?u=this.group:u=this.scene,d===!1?c.create=()=>{}:d!==!0&&(c.create=()=>{d(c)}),c.pencil=this.pencil,c.drawController=this,c.key=g,c.prefab=v,c.objectType=`BaseObject#${e}`,c.objectOptions=t,this.objects.set(g,c),yield this.addBaseObject(c,u,E),c}throw new Error(`Unrecognized:${e}`)})}addBaseObject(e,t,s){return B(this,null,function*(){yield e.create(),e.object3d&&(s&&e.setTop(s),t!==null?(t.add(e.object3d),this.objMap.set(e.object3d,e)):this.targetNullMap.set(e.object3d,e)),e.render(),e.pm.resolve()})}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=>{const o=r.object3d&&this.targetNullMap.get(r.object3d);this.removeBaseObject(r,e),o&&this.removeBaseObject(o,e)})})}removeBaseObject(e,t=!0){e.object3d&&(e.object3d.removeFromParent(),e.object3d.traverse(s=>{const i=this.objMap.get(s);i?(i!==e&&i.objectType==="BaseObject#Node"&&i.object3d.removeFromParent(),t?i.dispose():i.disposeWithOutMaterial(),this.objects.delete(i.key),i.object3d&&(this.objMap.delete(i.object3d),this.targetNullMap.delete(i.object3d))):tt.disposeMesh(s,t)}))}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))}addPickListener(e){var r;let t;const s=o=>{if(!this.enabled)return;o.preventDefault();const h=Object.values(this.pickFunctionsMap).map(d=>q(z({},d),{objArr:d.objArr instanceof Function?d.objArr():d.objArr})).filter(d=>{if(e==="move")return d.type==="move"||d.type==="enter"||d.type==="leave";if(e==="down")return d.type==="down"||d.type==="downOutside"||d.type==="click"}).reduce((d,c)=>d.concat(c.objArr.map(u=>({obj:u,type:c.type,cb:c.cb})).filter(({obj:u})=>u.object3d&&u.visibleWithAncestors)),[]).reduce((d,c)=>{const u=d.find(n=>n.obj===c.obj&&n.type===c.type);return u?u.cb.push(c.cb):d.push({obj:c.obj,type:c.type,cb:[c.cb]}),d},[]).sort((d,c)=>d.obj.object3d.getObjectById(c.obj.object3d.id)?1:c.obj.object3d.getObjectById(d.obj.object3d.id)?-1:0);if(h.length===0)return;const p=h.map(({obj:d})=>d.object3d);let g=this.pencil.pick(o,p,!1),f=g==null?void 0:g.object;const E=h.filter(d=>d.type==="leave"),v=h.filter(d=>d.type==="downOutside");if(!f){const d=h.filter(c=>{var u;return(u=c.obj.object3d)==null?void 0:u.isGroup});if(d.length&&(g=this.pencil.pick(o,d.map(({obj:c})=>c.object3d),!0),g!=null&&g.object)){const c=d.find(u=>u.obj.object3d.getObjectById(g.object.id));c&&(f=c.obj.object3d)}}if(f){const d=g.index;h.filter(({obj:c})=>c.object3d===f).forEach(c=>{if(e==="move")E.forEach(u=>{(c==null?void 0:c.obj)!==u.obj&&t===u.obj&&u.cb.forEach(n=>{n(u.obj,o)})}),(c==null?void 0:c.type)==="enter"?t!==c.obj&&c.cb.forEach(u=>{u(c.obj,o,d)}):(c==null?void 0:c.type)==="move"&&c.cb.forEach(u=>{u(c.obj,o,d)}),t=c==null?void 0:c.obj;else if(v.forEach(u=>{var n;if((c==null?void 0:c.obj)!==u.obj){if(((n=u.obj.object3d)==null?void 0:n.isGroup)&&u.obj.object3d.getObjectById(f.id))return;u.cb.forEach(C=>{C(u.obj,o)})}}),c)if(c.type==="click"){const u=n=>{n.preventDefault();const _=5;Math.abs(n.clientX-o.clientX)<=_&&Math.abs(n.clientY-o.clientY)<=_&&c.cb.forEach(C=>{C(c.obj,o,d)}),i.removeEventListener("pointerup",u,!1)};i.addEventListener("pointerup",u,!1)}else c.type!=="downOutside"&&c.cb.forEach(u=>{u(c.obj,o,d)})})}else e==="move"?(E.forEach(d=>{t===d.obj&&d.cb.forEach(c=>{c(d.obj,o)})}),t=void 0):v.forEach(d=>{d.cb.forEach(c=>{c(d.obj,o)})})},i=((r=this.pencil.options.controls)==null?void 0:r.domElement)||this.pencil.options.container;i.addEventListener(`pointer${e}`,et(s),!1)}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[r]={objArr:e,type:i,cb:s},this.pickListener.move||Object.values(this.pickFunctionsMap).some(a=>a.type==="move"||a.type==="enter"||a.type==="leave")&&(this.pickListener.move=!0,this.addPickListener("move")),this.pickListener.down||Object.values(this.pickFunctionsMap).some(a=>a.type==="down"||a.type==="downOutside"||a.type==="click")&&(this.pickListener.down=!0,this.addPickListener("down")),r}removePick(e){delete this.pickFunctionsMap[e]}handlePickNode(e,t,s){if(t==="downOutside")return console.warn("handlePickNode:err:不支持 downOutside"),-1;this.pickNodeFunctionsMapIndex+=1;const i=this.pickNodeFunctionsMapIndex;return(e instanceof Function?e():e).forEach(o=>{const a=o;a.element.style.pointerEvents="auto";const h=p=>{this.enabled&&(p.preventDefault(),s(a,p))};a.element.addEventListener(`pointer${t}`,et(h),!1),this.pickNodeFunctionsMap[i]||(this.pickNodeFunctionsMap[i]=[]),this.pickNodeFunctionsMap[i].push({arr:a,type:`pointer${t}`,listener:h})}),i}removePickNode(e){const t=this.pickNodeFunctionsMap[e];t&&(t.forEach(s=>{s.arr.element.style.pointerEvents="none",s.arr.element.removeEventListener(s.type,s.listener,!1)}),delete this.pickNodeFunctionsMap[e])}dispose(){this.objects.forEach((e,t)=>{e.erase(),e.pm.reject(`stop draw:${t}`)}),this.objects.clear(),this.objMap.clear(),this.targetNullMap.clear(),this.objectNamesToFactories.clear(),this.pickFunctionsMap={},this.pickNodeFunctionsMap={},this.groupMap.clear(),this.prefabGroupMap.clear()}}class Ls extends oe{get lead(){return this.controller}constructor(e){super(),this.options=e}addLead(e,t){const{leadParams:s,pencil:i}=this.options,r=new Ps(i,{});return this.addController(r,t)}removePage(e){super.removePage(e,t=>{t.dispose()})}setPageActive(e){super.setPageActive(e,(t,s)=>{t.enabled=s})}}const fe=class fe{constructor(e){this.raycaster=new T.Raycaster,this.maxBackufferArea=5760*5760,this.installPlugins=new Map,this._cameraPositon=new T.Vector3,this._cameraTarget=new T.Vector3,this.event=new ve.EventEmitter,this.timer=new Ot.Timer,this.userData={},this.pageActiveIndex=-1,this.pageCountIndex=-1,this.userSetDprCache=1,this.event.setMaxListeners(1/0),this.timer.connect(document),this.options=xt(fe.options,e,{isMergeableObject:Le.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 r=new wt({horizontal:!1});r.dom.style.position="absolute",r.init(this.renderer),t.appendChild(r.dom),this.stats=r}this.initResizeObserver()}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}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({},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.pageActiveIndex===e&&this.showPage(0),this.pageCountIndex===e&&(this.pageCountIndex-=1)}showPage(e){e!==this.pageActiveIndex&&(this.sceneController.setPageActive(e),this.pageActiveIndex!==-1&&this.render(),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:h,height:p}=this.getSize(),g=t?new Xt({width:h,height:p,renderer:t.WebGPURenderer,rendererParams:Kt}):new Gt({width:h,height:p,rendererParams:q(z({},r),{antialias:!1})}),f=new Qt({width:h,height:p}),E=new es({}),v=new ss({controlsParams:{domElement:(n=o==null?void 0:o.domElement)!=null?n:g.renderer.domElement}}),d=new bs({loaderParams:z({anisotropy:g.renderer.capabilities.getMaxAnisotropy()},a)}),c=new Ls({pencil:this});this.sceneController=E,this.cameraController=f,this.controlsController=v,this.rendererController=g,this.loaderController=d,this.leadController=c;const u=this.addPage({sceneOptions:this.options.scene,cameraOptions:this.options.camera});if(this.showPage(u),s){const _=new ts({container:e,sceneController:E,cameraController:f});_.add(E.scene),this.helperController=_,i&&_.addViewHelper()}e.appendChild(g.renderer.domElement)}initComposer(){const{bloom:e,bloomParams:t,ssao:s,ssaoParams:i,composer:r}=this.options,o=new Es({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 ls(e);t&&o.addRenderer("css2d",i),s&&o.addRenderer("css3d",r),this.cssRendererController=o}}initTransformControls(){const e=new is({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}=this,h=this.renderer.getSize(new T.Vector2);h.x===e&&h.y===t||(r==null||r.setSize(e,t),i==null||i.setSize(e,t),o==null||o.setSize(e,t),a==null||a.setSize(e,t),this.installPlugins.forEach(p=>{var g;(g=p.setSize)==null||g.call(p,e,t)}),this.render(),s&&this.event.emit("resize",{width:e,height:t}))}setDevicePixelRatio(e){var a;this.userSetDprCache=e;const t=this.renderer.getPixelRatio();if(e===t)return;const{width:s,height:i}=this.getSize();let r=Math.sqrt(this.maxBackufferArea/(s*i));r=(r*100|0)/100;const o=Math.min(e,r);o!==e&&console.warn("maxBackufferArea:",this.maxBackufferArea," the pixel ratio is set to",o),this.rendererController.setPixelRatio(o),(a=this.composerController)==null||a.setPixelRatio(o)}pick(e,t,s=!0){const{raycaster:i,options:r}=this,{container:o}=r,a=new T.Vector2,h=o.getBoundingClientRect();if(a.x=(e.clientX-h.left)/(h.right-h.left)*2-1,a.y=-((e.clientY-h.top)/(h.bottom-h.top))*2+1,this.camera&&this.scene){i.setFromCamera(a,this.camera);const p=i.intersectObjects(t||this.scene.children,s);if(p.length)return{object:p[0].object,index:p[0].index,intersects:p}}}render(){var o,a,h,p,g,f,E;const{scene:e,camera:t,timer:s}=this;s.update(),ze.update();const i=s.getDelta(),r=s.getElapsed();(o=this.controlsController)==null||o.update(i),this.installPlugins.forEach(v=>{var d;(d=v.update)==null||d.call(v,i,r)}),(a=this.helperController)==null||a.update(i,this.controlsController,this.cameraTarget),(h=this.composerController)!=null&&h.active?this.composerController.render():(p=this.rendererController)==null||p.render(this.scene,this.camera),(g=this.helperController)==null||g.renderViewHelper(this.renderer),(f=this.cssRendererController)==null||f.render(e,t),(E=this.stats)==null||E.update(),this.event.emit("render",{delta:i,elapsed:r})}start(){this.renderer.setAnimationLoop(this.render.bind(this)),this.event.emit("start")}stop(){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,h,p,g,f,E,v;this.stop(),this.timer.dispose(),ze.removeAll(),this.event.removeAllListeners(),(e=this.resizeObserver)==null||e.unobserve(this.options.container),this.installPlugins.forEach(d=>{var c;(c=d.dispose)==null||c.call(d)}),(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(),(h=this.composerController)==null||h.dispose(),(p=this.rendererController)==null||p.dispose(),(g=this.loaderController)==null||g.dispose(),(f=this.leadController)==null||f.dispose(),this.cssRendererController=void 0,this.installPlugins.clear(),(E=this.stats)==null||E.dom.remove(),(v=this.renderer)==null||v.domElement.remove()}};fe.options={stats:pe,helper:pe,viewHelper:pe,controls:!0,transformControls:pe,renderer:Wt,composer:Cs,scene:Jt,camera:pt,bloom:!1,bloomParams:ys,ssao:!1,loader:ws,ssaoParams:vs,css2DRenderer:!1,css2DRendererParams:z({},Qe),css3DRenderer:!1,css3DRendererParams:z({},Qe)};let ue=fe;const Ss=J.ACTION;exports.BaseObject=_e.BaseObject;exports.Pencil=ue;exports.cameraControlsAction=Ss;exports.default=ue;
|
package/dist/index.module.js
CHANGED
|
@@ -3479,7 +3479,7 @@ const ue = class ue {
|
|
|
3479
3479
|
this.cameraController.removePage(e), this.sceneController.removePage(e), this.controlsController.removePage(e), this.loaderController.removePage(e), this.leadController.removePage(e), this.pageActiveIndex === e && this.showPage(0), this.pageCountIndex === e && (this.pageCountIndex -= 1);
|
|
3480
3480
|
}
|
|
3481
3481
|
showPage(e) {
|
|
3482
|
-
e !== this.pageActiveIndex && (this.sceneController.setPageActive(e), this.cameraController.setPageActive(e), this.controlsController.setPageActive(e), this.loaderController.setPageActive(e), this.leadController.setPageActive(e), this.pageActiveIndex = e);
|
|
3482
|
+
e !== this.pageActiveIndex && (this.sceneController.setPageActive(e), this.pageActiveIndex !== -1 && this.render(), this.cameraController.setPageActive(e), this.controlsController.setPageActive(e), this.loaderController.setPageActive(e), this.leadController.setPageActive(e), this.pageActiveIndex = e);
|
|
3483
3483
|
}
|
|
3484
3484
|
init() {
|
|
3485
3485
|
var n;
|