gl-draw 0.15.0-beta.36 → 0.15.0-beta.38

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.
@@ -1,4 +1,4 @@
1
- import { Mesh, type Object3D, Points, type SpriteMaterial, Vector3 } from 'three';
1
+ import { Material, Mesh, type Object3D, Points, type SpriteMaterial, Vector3 } from 'three';
2
2
  import type Lead from "../Lead/Lead";
3
3
  import type MList from "../MList/MList";
4
4
  import type Pencil from "../Pencil";
@@ -63,6 +63,7 @@ export default class BaseObject extends UseMaterial {
63
63
  }[];
64
64
  }): Promise<this>;
65
65
  erase(): void;
66
+ handleMaterialChange(mat: Material | null): void;
66
67
  enableBloom(): void;
67
68
  disableBloom(): void;
68
69
  disposeTrack: boolean;
package/dist/index.js CHANGED
@@ -95,4 +95,4 @@
95
95
 
96
96
  #endif
97
97
 
98
- }`};class Zt extends wt.OutputPass{constructor(){super();const e=Yt;this.uniforms=v.UniformsUtils.clone(e.uniforms),this.material=new v.RawShaderMaterial({name:e.name,uniforms:this.uniforms,vertexShader:e.vertexShader,fragmentShader:e.fragmentShader}),this.fsQuad?this.fsQuad=new Me.FullScreenQuad(this.material):this._fsQuad&&(this._fsQuad=new Me.FullScreenQuad(this.material))}}const Wt=new v.MeshBasicMaterial({color:"black"}),qt=new v.PointsMaterial({color:"black",sizeAttenuation:!1}),Kt=new v.PointsMaterial({color:"black",sizeAttenuation:!0}),Gt=new v.SpriteMaterial({color:"black",sizeAttenuation:!0}),$t=new v.SpriteMaterial({color:"black",sizeAttenuation:!1}),Xt=new U.MeshLineMaterial({color:"black",sizeAttenuation:!1,lineWidth:0}),Qt={kernelRadius:8,minDistance:.005,maxDistance:.1},Jt={threshold:0,strength:.4,radius:.1,bloomAlphaType:0},es={multisampling:4,premultiplieAlpha:!1};class ts{constructor(e){this.bloomComposerActive=!1,this.active=!0,this.bloomSelection=new Set,this.bloomLayer=new v.Layers,this.bloomMaterials={},this.bloomVisible={},this.bloomComposerRenderIng=!1,this.pipViewportState=null,this.options=e;const{rendererController:t,sceneController:s,cameraController:i,composerParams:r}=e,{renderer:o}=t;this.renderer=o;const{multisampling:n}=r,{maxSamples:a}=o.capabilities,c=o.getDrawingBufferSize(new v.Vector2),f=new v.WebGLRenderTarget(c.width,c.height,{samples:Math.min(n,a),type:v.HalfFloatType}),p=new Ae.EffectComposer(o,f),C=this.getSize();p.setSize(C.width,C.height);const m=new Ot.RenderPass(s.scene,i.camera);p.addPass(m),this.scene=s.scene,this.camera=i.camera,this.finalComposer=p,this.renderPass=m,i.event.on("pageChange",u=>{this.changeCamera(u)}),s.event.on("pageChange",u=>{this.changeScene(u)})}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 Zt;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 v.Vector2),o=r.width,n=r.height,a=new Et.SSAOPass(t,s,o,n);a.kernelRadius=e.kernelRadius,a.minDistance=e.minDistance,a.maxDistance=e.maxDistance,this.ssaoPass=a,this.finalComposer.addPass(a)}addBloomPass(e){const{renderer:t}=this,{threshold:s,strength:i,radius:r,bloomAlphaType:o}=e,n=new Tt.UnrealBloomPass(new v.Vector2(window.innerWidth,window.innerHeight),i,r,s);this.bloomPass=n;const a=new Ae.EffectComposer(t);a.renderToScreen=!1,a.addPass(this.renderPass),a.addPass(n),this.bloomComposer=a;const c=Vt(a);c.uniforms.bloomAlphaType.value=o,this.bloomComposer=a,this.finalComposer.addPass(c),this.mixPass=c,this.bloomLayer.set(U.BLOOM_SCENE)}setBloomSelection(e,t){if(!this.bloomComposer){console.warn("err:pencil.options.bloom");return}e.traverse(s=>{const{object3d:i}=s;i&&(t?(this.bloomSelection.add(s),i.layers.enable(U.BLOOM_SCENE)):(this.bloomSelection.delete(s),i.layers.disable(U.BLOOM_SCENE)))}),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 a;const r=i,o=i,n=i;(a=r.material)!=null&&a.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=Gt:o.material=$t:r.material instanceof U.MeshLineMaterial?r.material=Xt:n.isPoints?n.material.sizeAttenuation?n.material=Kt:n.material=qt:r.material=Wt)})}),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.bloomComposerRenderIng=!0,this.mixPass.enabled=!0,this.darkenNonBloomed(),this.bloomComposer.render(),this.restoreNonBloomed(),this.bloomComposerRenderIng=!1):this.mixPass&&(this.mixPass.enabled=!1),this.finalComposer.render()}getSize(){return this.renderer.getSize(new v.Vector2)}render(){if(!this.active)return;const{cameraController:e,rendererController:t,sceneController:s}=this.options;if(this.finalComposerRender(),this.pipViewportState){e.setPageActive(31),e.setAspect(this.pipViewportState.width/this.pipViewportState.height),t.setViewport(ee(k({},this.pipViewportState),{scissor:!0,scissorTest:!0})),this.finalComposerRender(),e.setPageActive(s.activeIndex);const i=this.getSize();t.setViewport({x:0,y:0,width:i.width,height:i.height,scissor:!0,scissorTest:!1})}}dispose(){var e;this.bloomMaterials={},this.bloomVisible={},this.bloomSelection.clear(),this.finalComposer.dispose(),(e=this.bloomComposer)==null||e.dispose()}}class ss extends J{constructor(e){super(),this.autoRotateSpeed=0,this.options=e;const t={Vector2:v.Vector2,Vector3:v.Vector3,Vector4:v.Vector4,Quaternion:v.Quaternion,Matrix4:v.Matrix4,Spherical:v.Spherical,Box3:v.Box3,Sphere:v.Sphere,Raycaster:v.Raycaster};Q.install({THREE:t})}get cameraControls(){return this.controller}addCameraControls(e,t){const{domElement:s}=this.options.controlsParams,i=new Q(e,s);return i.setLookAt(0,0,400,0,0,0,!1),this.addController(i,t)}setPageActive(e){super.setPageActive(e,(t,s)=>{t.enabled=s})}removePage(e){super.removePage(e,t=>{t.dispose()})}enable(){this.activeControllerSet.forEach(e=>{e.enabled=!0})}disable(){this.activeControllerSet.forEach(e=>{e.enabled=!1})}update(e,t){super.update(e,t),this.autoRotateSpeed&&this.cameraControls&&(this.cameraControls.azimuthAngle+=this.autoRotateSpeed*e*v.MathUtils.DEG2RAD)}}const Ve=new v.Vector3,is=new v.Quaternion,Ye=new v.Vector3,H=new v.Matrix4,rs=new v.Matrix4;class os{constructor(e={}){const t=this;let s,i,r,o;const n={camera:{style:""},objects:new WeakMap},a=e.element!==void 0?e.element:document.createElement("div");a.style.overflow="hidden",this.domElement=a;const c=document.createElement("div");c.style.transformOrigin="0 0",c.style.pointerEvents="none",a.appendChild(c);const f=document.createElement("div");f.style.transformStyle="preserve-3d",c.appendChild(f),this.getSize=function(){return{width:s,height:i}},this.render=function(y,l){const _=l.projectionMatrix.elements[5]*o;l.view&&l.view.enabled?(c.style.transform=`translate( ${-l.view.offsetX*(s/l.view.width)}px, ${-l.view.offsetY*(i/l.view.height)}px )`,c.style.transform+=`scale( ${l.view.fullWidth/l.view.width}, ${l.view.fullHeight/l.view.height} )`):c.style.transform="",y.matrixWorldAutoUpdate===!0&&y.updateMatrixWorld(),l.parent===null&&l.matrixWorldAutoUpdate===!0&&l.updateMatrixWorld();let E,O;l.isOrthographicCamera&&(E=-(l.right+l.left)/2,O=(l.top+l.bottom)/2);const w=l.view&&l.view.enabled?l.view.height/l.view.fullHeight:1,T=l.isOrthographicCamera?`scale( ${w} )scale(`+_+")translate("+p(E)+"px,"+p(O)+"px)"+C(l.matrixWorldInverse):`scale( ${w} )translateZ(`+_+"px)"+C(l.matrixWorldInverse),D=(l.isPerspectiveCamera?"perspective("+_+"px) ":"")+T+"translate("+r+"px,"+o+"px)";n.camera.style!==D&&(f.style.transform=D,n.camera.style=D),g(y,y,l)},this.setSize=function(y,l){s=y,i=l,r=s/2,o=i/2,a.style.width=y+"px",a.style.height=l+"px",c.style.width=y+"px",c.style.height=l+"px",f.style.width=y+"px",f.style.height=l+"px"};function p(y){return Math.abs(y)<1e-10?0:y}function C(y){const l=y.elements;return"matrix3d("+p(l[0])+","+p(-l[1])+","+p(l[2])+","+p(l[3])+","+p(l[4])+","+p(-l[5])+","+p(l[6])+","+p(l[7])+","+p(l[8])+","+p(-l[9])+","+p(l[10])+","+p(l[11])+","+p(l[12])+","+p(-l[13])+","+p(l[14])+","+p(l[15])+")"}function m(y){const l=y.elements;return"translate(-50%,-50%)"+("matrix3d("+p(l[0])+","+p(l[1])+","+p(l[2])+","+p(l[3])+","+p(-l[4])+","+p(-l[5])+","+p(-l[6])+","+p(-l[7])+","+p(l[8])+","+p(l[9])+","+p(l[10])+","+p(l[11])+","+p(l[12])+","+p(l[13])+","+p(l[14])+","+p(l[15])+")")}function u(y){y.isCSS3DObject&&(y.element.style.display="none");for(let l=0,_=y.children.length;l<_;l++)u(y.children[l])}function g(y,l,_,E){if(y.visible===!1){u(y);return}if(y.isCSS3DObject){const O=y.layers.test(_.layers)===!0,w=y.element;if(w.style.display=O===!0?"":"none",O===!0){y.onBeforeRender(t,l,_);let T;y.isCSS3DSprite?(H.copy(_.matrixWorldInverse),H.transpose(),y.rotation2D!==0&&H.multiply(rs.makeRotationZ(y.rotation2D)),y.matrixWorld.decompose(Ve,is,Ye),H.setPosition(Ve),H.scale(Ye),H.elements[3]=0,H.elements[7]=0,H.elements[11]=0,H.elements[15]=1,T=m(H)):T=m(y.matrixWorld);const L=n.objects.get(y);if(L===void 0||L.style!==T){w.style.transform=T;const D={style:T};n.objects.set(y,D)}w.parentNode!==f&&f.appendChild(w),y.onAfterRender(t,l,_)}}for(let O=0,w=y.children.length;O<w;O++)g(y.children[O],l,_)}}}const $=new v.Vector3,Ze=new v.Matrix4,We=new v.Matrix4,qe=new v.Vector3,Ke=new v.Vector3;class ns{constructor(e={}){const t=this;let s,i,r,o;const n={objects:new WeakMap},a=e.element!==void 0?e.element:document.createElement("div");a.style.overflow="hidden",this.domElement=a,this.getSize=function(){return{width:s,height:i}},this.render=function(u,g){u.matrixWorldAutoUpdate===!0&&u.updateMatrixWorld(),g.parent===null&&g.matrixWorldAutoUpdate===!0&&g.updateMatrixWorld(),Ze.copy(g.matrixWorldInverse),We.multiplyMatrices(g.projectionMatrix,Ze),f(u,u,g),m(u)},this.setSize=function(u,g){s=u,i=g,r=s/2,o=i/2,a.style.width=u+"px",a.style.height=g+"px"};function c(u){u.isCSS2DObject&&(u.element.style.display="none");for(let g=0,y=u.children.length;g<y;g++)c(u.children[g])}function f(u,g,y){if(u.visible===!1){c(u);return}if(u.isCSS2DObject){$.setFromMatrixPosition(u.matrixWorld),$.applyMatrix4(We);const l=$.z>=-1&&$.z<=1&&u.layers.test(y.layers)===!0,_=u.element;_.style.display=l===!0?"":"none",l===!0&&(u.onBeforeRender(t,g,y),_.style.transform="translate("+-100*u.center.x+"%,"+-100*u.center.y+"%)translate("+($.x*r+r)+"px,"+(-$.y*o+o)+"px)",_.parentNode!==a&&a.appendChild(_),u.onAfterRender(t,g,y));const E={distanceToCameraSquared:p(y,u)};n.objects.set(u,E)}for(let l=0,_=u.children.length;l<_;l++)f(u.children[l],g,y)}function p(u,g){return qe.setFromMatrixPosition(u.matrixWorld),Ke.setFromMatrixPosition(g.matrixWorld),qe.distanceToSquared(Ke)}function C(u){const g=[];return u.traverseVisible(function(y){y.isCSS2DObject&&g.push(y)}),g}function m(u){const g=C(u).sort(function(l,_){if(l.renderOrder!==_.renderOrder)return _.renderOrder-l.renderOrder;const E=n.objects.get(l).distanceToCameraSquared,O=n.objects.get(_).distanceToCameraSquared;return E-O}),y=g.length;for(let l=0,_=g.length;l<_;l++)g[l].element.style.zIndex=y-l}}}const Ge={zIndex:"auto"};class as{constructor(e){this.container=e}addRenderer(e,t){const s=t.container||this.container,i=s.offsetWidth,r=s.offsetHeight,o=e==="css2d"?new ns:new os;o.domElement.style.position="absolute",o.domElement.style.top="0",o.domElement.style.pointerEvents="none",o.domElement.style.zIndex=t.zIndex,o.setSize(i,r),s.appendChild(o.domElement),e==="css2d"?this.css2Drenderer=o:e==="css3d"&&(this.css3Drenderer=o)}setSize(e,t){var s,i;(s=this.css2Drenderer)==null||s.setSize(e,t),(i=this.css3Drenderer)==null||i.setSize(e,t)}render(e,t){var s,i;(s=this.css2Drenderer)==null||s.render(e,t),(i=this.css3Drenderer)==null||i.render(e,t)}dispose(){var e,t;(e=this.css2Drenderer)==null||e.domElement.remove(),(t=this.css3Drenderer)==null||t.domElement.remove(),this.css2Drenderer=void 0,this.css3Drenderer=void 0}}class ls{constructor(e){this.helpers={},this.options=e}add(e){const t=e.uuid,{sceneController:s}=this.options;let i=this.helpers[t];if(i===void 0){if(e.isScene)i=new v.AxesHelper(100);else if(e.isCamera)i=new v.CameraHelper(e);else if(e.isPointLight)i=new v.PointLightHelper(e,1);else if(e.isDirectionalLight)i=new v.DirectionalLightHelper(e,1);else if(e.isSpotLight)i=new v.SpotLightHelper(e);else if(e.isHemisphereLight)i=new v.HemisphereLightHelper(e,10);else if(e.isRectAreaLight)i=new xt.RectAreaLightHelper(e);else{const r=new v.Box3;if(r.setFromObject(e,!0),r.isEmpty()===!1){i=new v.Box3Helper(r);const o=i.material;o.userData.object=e,o.depthTest=!1,o.transparent=!0}else return}s.scene.add(i),this.helpers[t]=i}}addViewHelper(){const{cameraController:e,container:t}=this.options,s=new Lt.ViewHelper(e.camera,t);t.addEventListener("pointerdown",i=>{i.preventDefault(),s.handleClick(i)}),this.viewHelper=s}remove(e){var i;const t=e.uuid,{sceneController:s}=this.options;if(this.helpers[t]!==void 0){const r=this.helpers[t];s.scene.remove(r),delete this.helpers[t],(i=r.dispose)==null||i.call(r)}}removeAll(){Object.keys(this.helpers).forEach(e=>{this.remove({uuid:e})}),this.helpers={}}removeAllExcludeScene(){Object.keys(this.helpers).forEach(e=>{this.helpers[e]instanceof v.AxesHelper||this.remove({uuid:e})})}update(e,t,s){var r,o;const{cameraController:i}=this.options;Object.values(this.helpers).forEach(n=>{if(n.update&&n.update(),n instanceof v.Box3Helper){const a=n.material,{object:c}=a.userData;c&&n.box.setFromObject(c,!0)}}),((r=this.viewHelper)==null?void 0:r.animating)===!0&&(this.viewHelper.update(e),(o=t.cameraControls)==null||o.setPosition(...i.camera.position.toArray()),this.viewHelper.center.copy(s))}renderViewHelper(e){if(!this.viewHelper)return;const t=e.autoClear;e.autoClear=!1,this.viewHelper.render(e),e.autoClear=t}dispose(){var e;this.helpers={},(e=this.viewHelper)==null||e.dispose()}}function $e(h){let e=!1,t=[];return function(...s){t=s,e||(e=!0,requestAnimationFrame(()=>{e=!1,h(...t)}))}}class hs{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.activeObject=null,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 C;if(!this.enabled)return;r.preventDefault();const o=e==="move"?t:s,n=[];if(this.pickFunctionsMap.forEach(m=>{o.has(m.type)&&n.push(ee(k({},m),{objArr:m.objArr instanceof Function?m.objArr():m.objArr}))}),n.length===0)return;this.activeObjects.clear(),this.objCallbackMap.clear(),this.activeObject=null;const a=this.objCallbackMap;for(const m of n)for(const u of m.objArr){if(!u.object3d||!u.visibleWithAncestors)continue;a.has(u)||a.set(u,new Map);const g=a.get(u);g.has(m.type)||g.set(m.type,[]),g.get(m.type).push(m.cb)}if(a.size===0)return;const c=[...a.keys()].map(m=>m.object3d),f=(C=this.pencil.pick(r,c,!0))==null?void 0:C.intersects;if(!f||f.length===0)e==="down"?this.handleDownOutside(r):e==="move"&&this.handleLeaveEvents(r);else{const m=f[0];this.processIntersection(m,r,e)}const p=this.prevActiveObjects;this.prevActiveObjects=this.activeObjects,this.activeObjects=p,this.activeObjects.clear()};this.domElement.addEventListener(`pointer${e}`,$e(i),{passive:!1})}processIntersection(e,t,s){const i=this.objCallbackMap,r=e.index||-1;let o=e.object;for(;o;){const n=this.pencil.lead.objMap.get(o);n&&n.visible&&(this.activeObject||(this.activeObject=n),i.has(n)&&this.activeObjects.add(n)),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 n of this.activeObjects){if(r)break;const a=i.get(n);if(a)if(t==="move"){const c=a.get("enter");if(c&&!this.prevActiveObjects.has(n))for(const p of c)p({baseObject:n,realBaseObject:this.activeObject,mouseEvent:e,sp:o,intersectionIndex:s});const f=a.get("move");if(f)for(const p of f)p({baseObject:n,realBaseObject:this.activeObject,mouseEvent:e,sp:o,intersectionIndex:s})}else{const c=a.get("down");if(c)for(const p of c)p({baseObject:n,realBaseObject:this.activeObject,mouseEvent:e,sp:o,intersectionIndex:s});const f=a.get("click");if(f){const p=C=>{C.preventDefault();const m=5;if(!r&&Math.abs(C.clientX-e.clientX)<=m&&Math.abs(C.clientY-e.clientY)<=m)for(const u of f)u({baseObject:n,realBaseObject:this.activeObject,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(n=>["move","enter","leave"].includes(n.type))&&(this.pickListener.move=!0,this.addPickListener("move")),this.pickListener.down||Array.from(this.pickFunctionsMap.values()).some(n=>["down","downOutside","click"].includes(n.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 n of r){const a=n;a.element.style.pointerEvents="auto";const c=p=>{this.enabled&&(p.preventDefault(),s({baseObject:a,mouseEvent:p}))},f=`pointer${t}`;a.element.addEventListener(f,$e(c),!1),o.push({arr:a,type:f,listener:c})}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 cs extends hs{constructor(e,t){super(e),this.objMap=new Map,this.objects=new Map,this.objectsPm=new Map,this.objectWrapChindIdMap=new Map,this.objectNamesToFactories=new Map,this.mList=t.mList,this.scene=this.createBaseObject(t.scene||new v.Scene,{key:"@Scene",name:"场景",mList:!1}),this.group=this.createBaseObject(new v.Group,{key:"@Group",name:"物体组",target:this.scene,mList:!1}),this.prefabGroup=this.createBaseObject(new v.Group,{key:"@PrefabGroup",name:"预制组",target:this.scene,mList:!1})}get objectsPromise(){return this.objectsPm.values()}createBaseObject(e,t={}){const s=k({mList:!0},t),i=new U.BaseObject;if(i.object3d=e,i.pencil=this.pencil,i.lead=this,i.mList=this.mList,s.key)i.key=s.key;else if(s.target){const r=s.target.key;if(r==="@Scene"&&e instanceof v.Camera)i.key="@Camera";else{const o=this.objectWrapChindIdMap.get(s.target)?this.objectWrapChindIdMap.get(s.target)+1:0;this.objectWrapChindIdMap.set(s.target,o),i.key=`${r}__c__${o}`}}return s.name&&(e.name=s.name),s.target&&!s.target.object3d.getObjectById(e.id)&&s.target.object3d.add(e),this.objects.set(i.key,i),this.objMap.set(i.object3d,i),s.mList&&(this.mList.proxyBaseObject(i),this.mList.addBaseObjectMap(i)),e.children&&e.children.forEach(r=>{this.createBaseObject(r,{target:i,mList:s.mList})}),i}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,n)=>{(n.startsWith(s?i:`${i}#`)||n===i)&&r.push(o)}),r}draw(e,t,s){return te(this,null,function*(){var r,o,n,a;const i=this.objectNamesToFactories.get(e);if(i){t||(t={}),t.target===void 0&&(t.target=s);const c=t.target,f=(r=t.onTop)!=null?r:0,p=(o=t.prefab)!=null?o:!1,C=(n=t.create)!=null?n:!0,m=new i().create(t);let u;return c===null?u=null:typeof c=="string"?u=this.objects.get(c):(a=c==null?void 0:c.objectType)!=null&&a.startsWith("BaseObject")||c?u=c:p?u=this.prefabGroup:u=this.group,C===!1?m.create=()=>{}:C!==!0&&(m.create=()=>{C(m)}),m.pencil=this.pencil,m.lead=this,m.mList=this.mList,m.prefab=p,m.objectType=`BaseObject#${e}`,m.objectOptions=t,this.setBaseObjectKey(m,t.key?`$t:#${t.key}`:"$t:",u==null?void 0:u.key),this.objectsPm.set(m,this.addBaseObject(m,u,f)),yield this.objectsPm.get(m),this.objectsPm.delete(m),m}throw new Error(`Unrecognized:${e}`)})}setBaseObjectKey(e,t,s){const i=e.objectType,[,r]=i.split("#");let o=t.replace("$t:",r);if(s){const[,n]=s.split("#");o=o.replace("$p:",n)}return this.objects.has(o)&&(o.includes("#")?o+=`-${we.generateUUID()}`:o+=`#${we.generateUUID()}`),e.key=o,this.objects.set(o,e),o}updateBaseObjectKey(e,t){var o;let s;for(const[n,a]of this.objects.entries())if(a===e){s=n;break}const i=(o=e.parent)==null?void 0:o.key,r=this.setBaseObjectKey(e,t,i);return s&&this.objects.delete(s),this.pencil.event.emit("lead.updateKey",{baseObject:e,key:r,oldKey:s}),e.children.forEach((n,a)=>{n.key.includes("__c__")&&this.updateBaseObjectKey(n,`${r}__c__${a}`)}),r}addBaseObject(e,t,s){return te(this,null,function*(){if(yield e.create(),e.object3d){const i=e.object3d;i.material&&Array.isArray(i.material)&&(i.material=i.material.slice()),this.mList.proxyBaseObject(e),this.mList.addBaseObjectMap(e),s&&e.setTop(s),t!==null&&t.object3d.add(e.object3d),this.objMap.set(e.object3d,e),i.children.forEach(r=>{this.objMap.get(r)||this.createBaseObject(r,{target:e})})}e.render(),this.pencil.event.emit("lead.draw",{baseObject:e})})}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=>{r.disposeMaterialIfNotUsed=e,r.dispose()})}),this.pencil.event.emit("lead.erase")}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.objectWrapChindIdMap.clear(),this.objectNamesToFactories.clear()}}class ds extends J{get lead(){return this.controller}constructor(e){super(),this.options=e}addLead(e,t,s){const{pencil:i}=this.options,r=new cs(i,{scene:e,mList:t});return this.addController(r,s)}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)})}}class Xe extends v.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 v.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 v.VideoTexture(o)):r=new v.Texture;const n=new v.FileLoader(this.manager);return n.setResponseType("blob"),n.setRequestHeader(this.requestHeader),n.setPath(this.path),n.setWithCredentials(this.withCredentials),n.load(e,a=>{let c=a;const f=e.split(".").pop(),p=this.options.type==="image"?`image/${f||"png"}`:`video/${f||"mp4"}`;c=c.slice(0,a.size,p);const C=()=>{o.removeEventListener("load",m,!1),o.removeEventListener("error",u,!1)},m=()=>{C(),r.needsUpdate=!0,t&&t(r)},u=y=>{C(),i&&i(y),this.manager.itemError(e),this.manager.itemEnd(e)};o.addEventListener("load",m,!1),o.addEventListener("error",u,!1);const g=window.URL.createObjectURL(c);o.src=g},s,i),r}}class ps extends v.Loader{constructor(e){super(e)}load(e,t,s,i){const r=new v.FileLoader(this.manager);r.setResponseType("blob"),r.setRequestHeader(this.requestHeader),r.setPath(this.path),r.setWithCredentials(this.withCredentials),r.load(e,o=>{const n=o,a=new DecompressionStream("gzip"),c=n.stream().pipeThrough(a);new Response(c).json().then(p=>{t==null||t(p)}).catch(p=>{i==null||i(p)})},s,i)}}const ms={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 us{constructor(e){this.loadObj=[],this.delLoadArr=[],this.assets=new Map,this.event=new _e.EventEmitter,this.options=k({simpleTexture4deleted:!1,prefix:""},e),this.loadingManager=new v.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 v.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(ms))if(r.includes(t))return i}getLoader(e,t){if(e==="images")return this.textureLoader||(this.textureLoader=new Xe(this.loadingManager),this.options.prefix&&this.textureLoader.setPath(this.options.prefix)),this.textureLoader;if(e==="media")return this.videoTextureLoader||(this.videoTextureLoader=new Xe(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 Re.GLTFLoader(this.loadingManager),this.dracoLoader=new Pt.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 Re.GLTFLoader(this.loadingManager),this.options.prefix&&this.gltfLoader.setPath(this.options.prefix)),this.gltfLoader;if(e==="lottie")return this.lottieLoader||(this.lottieLoader=new At.LottieLoader(this.loadingManager),this.options.prefix&&this.lottieLoader.setPath(this.options.prefix)),this.lottieLoader;if(e==="gzipJson")return this.gzipJsonLoader||(this.gzipJsonLoader=new ps(this.loadingManager),this.options.prefix&&this.gzipJsonLoader.setPath(this.options.prefix)),this.gzipJsonLoader;if(e==="json")return this.jsonLoader||(this.jsonLoader=new v.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 St.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=k({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 v.Texture||t instanceof v.DataTexture||t instanceof v.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 n,a;const s=(n=t==null?void 0:t.type)!=null?n:this.getAssetType(e);if(!s)return;const i=(t==null?void 0:t.cache)!==!1,r=we.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 c=yield o.loadAsync(e);if(this.assets.set(e,c),r.resolve(c),s==="images"||s==="media"||s==="exr"||s==="lottie"){(t==null?void 0:t.colorCorrection)!==!1&&xe.colorCorrection({texture:c});const f=(a=t==null?void 0:t.anisotropy)!=null?a:this.options.anisotropy;c.anisotropy=f}return c}catch(c){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(a=>{[a.map,a.emissiveMap,a.normalMap,a.roughnessMap,a.metalnessMap,a.aoMap].forEach(c=>{if(c){const f=this.getSrcByAsset(c,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 fs={prefix:""};class _s extends J{get loader(){return this.controller}constructor(e){super(),this.options=e}addLoader(e,t){const{loaderParams:s}=this.options,i=new us(ee(k({},s),{scene:e}));return this.addController(i,t)}removePage(e){super.removePage(e,t=>{t.dispose()})}}class gs{constructor(e){this.materials=new Map,this.fixBaseObjects=new Map,this.materialBaseObjectMap=new Map,this.pencil=e}add(e,t){this.materials.set(e,t);const s={object3d:new Proxy({material:t},{set:(i,r,o)=>{var n;if(r==="material"&&!((n=this.pencil.composerController)!=null&&n.bloomComposerRenderIng)){const a=i.material;return i.material=o,this.materials.set(e,o),this.disposeMaterial(a),this.syncChangeMaterial(a,o),!0}return i[r]=o,!0}})};this.fixBaseObjects.set(e,s),this.pencil.event.emit("mList.add",{key:e,material:t,baseObject:s})}get(e){const t=this.materials.get(e);return t||console.warn(`Material with key "${e}" not found.`),t}getByName(e){for(const[t,s]of this.materials.entries())if(s.name===e)return s;console.warn(`Material with name "${e}" not found.`)}getKey(e){for(const[t,s]of this.materials.entries())if(s===e)return t}getKeyByName(e){for(const[t,s]of this.materials.entries())if(s.name===e)return t;console.warn(`Material key with name "${e}" not found.`)}addMultiple(e,t){for(const[s,i]of Object.entries(t)){const r=`${e}#${s}`;i&&this.add(r,i)}}getMultiple(e){const t={},s=`${e}#`;let i=!1;for(const[r,o]of this.materials.entries())if(r.startsWith(s)){const n=r.substring(s.length);t[n]=o,i=!0}return i?t:null}copy(e,t,s={}){const i=this.get(e);if(!i)return console.warn(`Material with key "${e}" not found.`),null;const r=i.clone();return s.name&&(r.name=s.name),this.add(t,r),r}copyMultiple(e,t){const s={},i=`${e}#`;for(const[r,o]of this.materials.entries())if(r.startsWith(i)){const n=r.substring(i.length),a=o.clone();s[n]=a;const c=`${t}#${n}`;this.add(c,a)}return s}disposeMaterial(e){if(!e)return;const t=new U.ResourceTracker;t.track(Array.isArray(e)?e:[e]),t.dispose()}remove(e){const t=this.materials.get(e);t&&this.disposeMaterial(t),this.materials.delete(e),this.fixBaseObjects.delete(e),this.pencil.event.emit("mList.remove",{key:e,material:t})}removeByMaterial(e){[...this.materials.entries()].some(([t,s])=>s===e?(this.remove(t),!0):!1)}proxyBaseObject(e){const t=e.object3d;if(!t.material)return;const s=o=>{if(o.hasOwnProperty("__isProxy"))return o;const n=new Proxy(o,{set:(a,c,f)=>{if(typeof c=="string"&&!isNaN(Number(c))){const p=Number(c);if(p>=0&&p<a.length){const C=a[p];return this.rmBaseObjectMap(e,C),a[p]=f,f&&this.addBaseObjectMap(e),!0}}return a[c]=f,!0}});return Object.defineProperty(n,"__isProxy",{value:!0,enumerable:!1}),n};e.materialList&&(e.materialList=new Proxy(e.materialList,{set:(o,n,a)=>{if(typeof n=="string"){const c=o[n];return this.rmBaseObjectMap(e,c),o[n]=a,a&&this.addBaseObjectMap(e),!0}return o[n]=a,!0},get:(o,n)=>{if(typeof n=="string"&&o[n]){const a=o[n];if(Array.isArray(a)){const c=s(a);return c!==a&&(o[n]=c),c}return a}return o[n]},deleteProperty:(o,n)=>{if(typeof n=="string"&&o[n]){const a=o[n];this.rmBaseObjectMap(e,a)}return delete o[n],!0}}));const i=t.material,r="_enhancedMaterial";t[r]=i,Object.defineProperty(t,"material",{get:()=>{var n;const o=t[r];if(!((n=this.pencil.composerController)!=null&&n.bloomComposerRenderIng)&&Array.isArray(o)){const a=s(o);return a!==o&&(t[r]=a),a}return o},set:o=>{var n;if((n=this.pencil.composerController)!=null&&n.bloomComposerRenderIng)t[r]=o;else{if(e.materialList&&Object.values(e.materialList).includes(o)){t[r]=o;return}this.rmBaseObjectMap(e),t[r]=o,this.addBaseObjectMap(e)}},enumerable:!0,configurable:!0})}material2array(e){return Array.isArray(e)?e:[e]}addBaseObjectMap(e){const t=e.object3d;t.material&&([...Object.values(e.materialList),t.material].forEach(s=>{s&&this.material2array(s).forEach(r=>{const o=this.materialBaseObjectMap.get(r);o?o.add(e):this.materialBaseObjectMap.set(r,new Set([e]))})}),this.pencil.event.emit("mList.addBaseObjectMap"))}rmBaseObjectMap(e,t,s=!0){const i=t&&this.material2array(t);this.materialBaseObjectMap.forEach((r,o)=>{i&&!i.includes(o)||r.has(e)&&(r.delete(e),r.size===0&&s&&(this.materialBaseObjectMap.delete(o),this.disposeMaterial(o)))}),this.pencil.event.emit("mList.rmBaseObjectMap")}getBaseObjectMap(e){return this.materialBaseObjectMap.get(e)||new Set}syncChangeMaterial(e,t){const s=this.materialBaseObjectMap.get(e);s&&s.forEach(i=>{const r=i.object3d,o=r.material;if(Array.isArray(o)){const n=o.indexOf(e);n!==-1&&(o[n]=t)}else o===e&&(r.material=t);i.materialList&&Object.keys(i.materialList).forEach(n=>{const a=i.materialList[n];if(Array.isArray(a)){const c=a.indexOf(e);c!==-1&&(a[c]=t)}else a===e&&(i.materialList[n]=t)})})}dispose(){const e=new U.ResourceTracker;e.track([...this.materials.values()]),e.dispose(),this.materials.clear(),this.fixBaseObjects.clear(),this.materialBaseObjectMap.clear()}}class ys extends J{get mList(){return this.controller}constructor(e){super(),this.options=e}addMList(e,t){const{pencil:s}=this.options,i=new gs(s);return this.addController(i,t)}removePage(e){super.removePage(e,t=>{t.dispose()})}}const vs={antialias:!1,devicePixelRatio:window.devicePixelRatio,powerPreference:"high-performance",toneMappingExposure:1,alpha:!1,outputColorSpace:xe.ColorSpace.sRGB,logarithmicDepthBuffer:!1,preserveDrawingBuffer:!1,stencil:!1,depth:!1};class Cs{constructor(e){this.options=e;const{width:t,height:s,rendererParams:i}=e,{alpha:r,devicePixelRatio:o,antialias:n,powerPreference:a,toneMappingExposure:c,outputColorSpace:f,logarithmicDepthBuffer:p,preserveDrawingBuffer:C,stencil:m,depth:u}=i,g=new v.WebGLRenderer({alpha:r,antialias:n,powerPreference:a,logarithmicDepthBuffer:p,preserveDrawingBuffer:C,stencil:m,depth:u});g.setSize(t,s),g.setPixelRatio(o),g.toneMappingExposure=c,g.outputColorSpace=f,this.renderer=g}setSize(e,t){this.renderer.setSize(e,t)}setPixelRatio(e){this.renderer.setPixelRatio(e)}render(e,t){this.renderer.render(e,t)}setViewport(e){var a,c;const{x:t,y:s,width:i,height:r}=e,o=(a=e.scissor)!=null?a:!1,n=(c=e.scissorTest)!=null?c:!1;this.renderer.setViewport(t,s,i,r),o&&(this.renderer.setScissor(t,s,i,r),this.renderer.setScissorTest(n))}dispose(){var e,t;this.setSize(1,1),(e=this.renderer)==null||e.clear(),(t=this.renderer)==null||t.dispose()}}const Os={background:null};class Es extends J{get scene(){return this.controller}constructor(e){super(),this.options=e}addScene(e,t){const s=new v.Scene;return e!=null&&e.background&&(s.background=e.background),this.addController(s,t)}removePage(e){super.removePage(e,t=>{const s=new U.ResourceTracker;s.track(t),s.dispose()})}setPageActive(e){super.setPageActive(e,(t,s)=>{t.visible=s})}}class Ts{constructor(e){this.event=new _e.EventEmitter;const{renderer:t,scene:s,camera:i}=e,r=new Mt.TransformControls(i,t.domElement);if(r.getHelper){const o=r.getHelper();if(s.add(o),+v.REVISION<170){const n=r._root;n.dispose=()=>{n.traverse(a=>{a.geometry&&a.geometry.dispose(),a.material&&a.material.dispose()})},r.dispose=()=>{r.disconnect(),n.dispose()}}}else r instanceof v.Object3D&&s.add(r);this.controls=r,this.addEvent()}get detach(){return this.controls.detach.bind(this.controls)}get attach(){return this.controls.attach.bind(this.controls)}addEvent(){let e=null,t=null,s=null;const i=this.controls;i.addEventListener("change",()=>{const r=i.object;r!==void 0&&this.event.emit("change",r)}),i.addEventListener("mouseDown",()=>{const r=i.object;e=r.position.clone(),t=r.rotation.clone(),s=r.scale.clone(),this.event.emit("mouseDown",r)}),i.addEventListener("mouseUp",()=>{const r=i.object;if(r!==void 0)switch(i.getMode()){case"translate":e.equals(r.position)||this.event.emit("translate",r,r.position,e);break;case"rotate":t.equals(r.rotation)||this.event.emit("rotate",r,r.rotation,t);break;case"scale":s.equals(r.scale)||this.event.emit("scale",r,r.scale,s);break}this.event.emit("mouseUp")})}dispose(){var e;this.event.removeAllListeners(),(e=this.controls)==null||e.dispose()}}const bs={antialias:!0,devicePixelRatio:window.devicePixelRatio};class ws{constructor(e){this.options=e;const{width:t,height:s,rendererParams:i,renderer:r}=e,{devicePixelRatio:o,antialias:n}=i,a=new r({antialias:n});a.setSize(t,s),a.setPixelRatio(o),this.renderer=a}setSize(e,t){this.renderer.setSize(e,t)}render(e,t){this.renderer.render(e,t)}dispose(){var e,t;this.setSize(1,1),(e=this.renderer)==null||e.clear(),(t=this.renderer)==null||t.dispose()}}const ue=class ue{constructor(e){var r,o;this.raycaster=new v.Raycaster,this.maxBackufferArea=5760*5760,this.installPlugins=new Map,this._cameraPositon=new v.Vector3,this._cameraTarget=new v.Vector3,this.event=new _e.EventEmitter,this.timer=new Ct.Timer,this.userData={},this.pageActiveIndex=0,this.pageCountIndex=0,this.userSetDprCache=1,this.viewPadding=[0,0,0,0],this.event.setMaxListeners(1/0),(o=(r=this.timer).connect)==null||o.call(r,document),this.options=yt(ue.options,e,{isMergeableObject:xe.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 n=new vt({horizontal:!1});n.dom.style.position="absolute",n.init(this.renderer),t.appendChild(n.dom),this.stats=n}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}get mList(){return this.mListController.mList}tweenUpdateRaf(){ye.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);r.add(i),this.controlsController.addCameraControls(i,s),this.loaderController.addLoader(r,s);const o=this.mListController.addMList(null,s);return this.leadController.addLead(r,o,s),this.pageCountIndex=s,s}removePage(e){this.cameraController.removePage(e),this.sceneController.removePage(e),this.controlsController.removePage(e),this.loaderController.removePage(e),this.mListController.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.mListController.setPageActive(e),this.leadController.setPageActive(e),this.pageActiveIndex=e}init(){var _;const{container:e,WebGPUTHREE:t,helper:s,viewHelper:i,renderer:r,controls:o,loader:n}=this.options,{width:a,height:c}=this.getSize(),f=t?new ws({width:a,height:c,renderer:t.WebGPURenderer,rendererParams:bs}):new Cs({width:a,height:c,rendererParams:ee(k({},r),{antialias:!1})}),p=new Bt({width:a,height:c}),C=new Es({}),m=new ss({controlsParams:{domElement:(_=o==null?void 0:o.domElement)!=null?_:f.renderer.domElement}}),u=new _s({loaderParams:k({anisotropy:f.renderer.capabilities.getMaxAnisotropy()},n)}),g=new ys({pencil:this}),y=new ds({pencil:this});this.sceneController=C,this.cameraController=p,this.controlsController=m,this.rendererController=f,this.loaderController=u,this.mListController=g,this.leadController=y;const l=this.addPage({sceneOptions:this.options.scene,cameraOptions:this.options.camera});if(this.showPage(l),s){const E=new ls({container:e,sceneController:C,cameraController:p});E.add(C.scene),this.helperController=E,i&&E.addViewHelper()}e.appendChild(f.renderer.domElement)}initComposer(){const{bloom:e,bloomParams:t,ssao:s,ssaoParams:i,composer:r}=this.options,o=new ts({rendererController:this.rendererController,sceneController:this.sceneController,cameraController:this.cameraController,composerParams:r});this.composerController=o,e&&o.addBloomPass(k({},t)),s&&o.addSSAOPass(k({},i)),o.addOutputPass()}initCSSRenderer(){const{container:e,css2DRenderer:t,css3DRenderer:s,css2DRendererParams:i,css3DRendererParams:r}=this.options;if(t||s){const o=new as(e);t&&o.addRenderer("css2d",i),s&&o.addRenderer("css3d",r),this.cssRendererController=o}}initTransformControls(){const e=new Ts({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:n,leadController:a}=this,c=this.renderer.getSize(new v.Vector2);c.x===e&&c.y===t||(r.setSize(e,t),i.setSize(e,t),o==null||o.setSize(e,t),n==null||n.setSize(e,t),a.setSize(e,t),this.installPlugins.forEach(f=>{var p;(p=f.setSize)==null||p.call(f,e,t)}),this.viewPadding.some(f=>f!==0)&&this.setViewPadding(...this.viewPadding),this.render(),s&&this.event.emit("resize",{width:e,height:t}))}setDevicePixelRatio(e){var n;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),(n=this.composerController)==null||n.setPixelRatio(r),this.viewPadding.some(a=>a!==0)&&this.setViewPadding(...this.viewPadding))}setViewPadding(e=0,t=0,s=0,i=0){const{width:r,height:o}=this.renderer.getSize(new v.Vector2),n={x:i,y:s,width:r-i-t,height:o-e-s};this.rendererController.setViewport(n),this.cameraController.setAspect(n.width/n.height),this.viewPadding=[e,t,s,i]}pick(e,t,s=!0){const{raycaster:i,options:r}=this,{container:o}=r,n=new v.Vector2,a=o.getBoundingClientRect();if(n.x=(e.clientX-a.left)/(a.right-a.left)*2-1,n.y=-((e.clientY-a.top)/(a.bottom-a.top))*2+1,this.camera&&this.scene){i.setFromCamera(n,this.camera);const c=i.intersectObjects(t||this.scene.children,s);if(c.length)return{object:c[0].object,index:c[0].index,intersects:c}}}render(){var s,i,r,o,n,a;if(!this.camera||!this.scene)return;this.event.emit("beforeRender"),this.timer.update(),ye.update();const e=this.timer.getDelta(),t=this.timer.getElapsed();this.controlsController.update(e,t),this.leadController.update(e,t),this.installPlugins.forEach(c=>{var f;(f=c.update)==null||f.call(c,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),(n=this.cssRendererController)==null||n.render(this.scene,this.camera),(a=this.stats)==null||a.update(),this.event.emit("render",{delta:e,elapsed:t})}start(){var e;window.cancelAnimationFrame(this.TweenRaf),(e=this.renderer)==null||e.setAnimationLoop(this.render.bind(this)),this.event.emit("start")}stop(){var e;this.tweenUpdateRaf(),(e=this.renderer)==null||e.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}}dispose(){var e,t,s,i,r,o,n,a,c,f,p,C,m,u;this.stop(),this.timer.dispose(),ye.removeAll(),this.event.removeAllListeners(),(e=this.resizeObserver)==null||e.unobserve(this.options.container),this.installPlugins.forEach(g=>{var y;(y=g.dispose)==null||y.call(g)}),(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(),(n=this.helperController)==null||n.dispose(),(a=this.composerController)==null||a.dispose(),(c=this.rendererController)==null||c.dispose(),(f=this.loaderController)==null||f.dispose(),(p=this.leadController)==null||p.dispose(),(C=this.mListController)==null||C.dispose(),this.cssRendererController=void 0,this.installPlugins.clear(),(m=this.stats)==null||m.dom.remove(),(u=this.renderer)==null||u.domElement.remove()}};ue.options={stats:U.IS_DEV,helper:U.IS_DEV,viewHelper:U.IS_DEV,controls:!0,transformControls:U.IS_DEV,renderer:vs,composer:es,scene:Os,camera:at,bloom:!1,bloomParams:Jt,ssao:!1,loader:fs,ssaoParams:Qt,css2DRenderer:!1,css2DRendererParams:k({},Ge),css3DRenderer:!1,css3DRendererParams:k({},Ge)};let me=ue;const xs=Q.ACTION;exports.BaseObject=U.BaseObject;exports.ResourceTracker=U.ResourceTracker;exports.Pencil=me;exports.cameraControlsAction=xs;exports.default=me;
98
+ }`};class Zt extends wt.OutputPass{constructor(){super();const e=Yt;this.uniforms=v.UniformsUtils.clone(e.uniforms),this.material=new v.RawShaderMaterial({name:e.name,uniforms:this.uniforms,vertexShader:e.vertexShader,fragmentShader:e.fragmentShader}),this.fsQuad?this.fsQuad=new Me.FullScreenQuad(this.material):this._fsQuad&&(this._fsQuad=new Me.FullScreenQuad(this.material))}}const Wt=new v.MeshBasicMaterial({color:"black"}),qt=new v.PointsMaterial({color:"black",sizeAttenuation:!1}),Kt=new v.PointsMaterial({color:"black",sizeAttenuation:!0}),Gt=new v.SpriteMaterial({color:"black",sizeAttenuation:!0}),$t=new v.SpriteMaterial({color:"black",sizeAttenuation:!1}),Xt=new U.MeshLineMaterial({color:"black",sizeAttenuation:!1,lineWidth:0}),Qt={kernelRadius:8,minDistance:.005,maxDistance:.1},Jt={threshold:0,strength:.4,radius:.1,bloomAlphaType:0},es={multisampling:4,premultiplieAlpha:!1};class ts{constructor(e){this.bloomComposerActive=!1,this.active=!0,this.bloomSelection=new Set,this.bloomLayer=new v.Layers,this.bloomMaterials={},this.bloomVisible={},this.bloomComposerRenderIng=!1,this.pipViewportState=null,this.options=e;const{rendererController:t,sceneController:s,cameraController:i,composerParams:r}=e,{renderer:o}=t;this.renderer=o;const{multisampling:n}=r,{maxSamples:a}=o.capabilities,c=o.getDrawingBufferSize(new v.Vector2),f=new v.WebGLRenderTarget(c.width,c.height,{samples:Math.min(n,a),type:v.HalfFloatType}),p=new Ae.EffectComposer(o,f),C=this.getSize();p.setSize(C.width,C.height);const m=new Ot.RenderPass(s.scene,i.camera);p.addPass(m),this.scene=s.scene,this.camera=i.camera,this.finalComposer=p,this.renderPass=m,i.event.on("pageChange",u=>{this.changeCamera(u)}),s.event.on("pageChange",u=>{this.changeScene(u)})}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 Zt;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 v.Vector2),o=r.width,n=r.height,a=new Et.SSAOPass(t,s,o,n);a.kernelRadius=e.kernelRadius,a.minDistance=e.minDistance,a.maxDistance=e.maxDistance,this.ssaoPass=a,this.finalComposer.addPass(a)}addBloomPass(e){const{renderer:t}=this,{threshold:s,strength:i,radius:r,bloomAlphaType:o}=e,n=new Tt.UnrealBloomPass(new v.Vector2(window.innerWidth,window.innerHeight),i,r,s);this.bloomPass=n;const a=new Ae.EffectComposer(t);a.renderToScreen=!1,a.addPass(this.renderPass),a.addPass(n),this.bloomComposer=a;const c=Vt(a);c.uniforms.bloomAlphaType.value=o,this.bloomComposer=a,this.finalComposer.addPass(c),this.mixPass=c,this.bloomLayer.set(U.BLOOM_SCENE)}setBloomSelection(e,t){if(!this.bloomComposer){console.warn("err:pencil.options.bloom");return}e.traverse(s=>{const{object3d:i}=s;i&&(t?(this.bloomSelection.add(s),i.layers.enable(U.BLOOM_SCENE)):(this.bloomSelection.delete(s),i.layers.disable(U.BLOOM_SCENE)))}),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 a;const r=i,o=i,n=i;(a=r.material)!=null&&a.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=Gt:o.material=$t:r.material instanceof U.MeshLineMaterial?r.material=Xt:n.isPoints?n.material.sizeAttenuation?n.material=Kt:n.material=qt:r.material=Wt)})}),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.bloomComposerRenderIng=!0,this.mixPass.enabled=!0,this.darkenNonBloomed(),this.bloomComposer.render(),this.restoreNonBloomed(),this.bloomComposerRenderIng=!1):this.mixPass&&(this.mixPass.enabled=!1),this.finalComposer.render()}getSize(){return this.renderer.getSize(new v.Vector2)}render(){if(!this.active)return;const{cameraController:e,rendererController:t,sceneController:s}=this.options;if(this.finalComposerRender(),this.pipViewportState){e.setPageActive(31),e.setAspect(this.pipViewportState.width/this.pipViewportState.height),t.setViewport(ee(k({},this.pipViewportState),{scissor:!0,scissorTest:!0})),this.finalComposerRender(),e.setPageActive(s.activeIndex);const i=this.getSize();t.setViewport({x:0,y:0,width:i.width,height:i.height,scissor:!0,scissorTest:!1})}}dispose(){var e;this.bloomMaterials={},this.bloomVisible={},this.bloomSelection.clear(),this.finalComposer.dispose(),(e=this.bloomComposer)==null||e.dispose()}}class ss extends J{constructor(e){super(),this.autoRotateSpeed=0,this.options=e;const t={Vector2:v.Vector2,Vector3:v.Vector3,Vector4:v.Vector4,Quaternion:v.Quaternion,Matrix4:v.Matrix4,Spherical:v.Spherical,Box3:v.Box3,Sphere:v.Sphere,Raycaster:v.Raycaster};Q.install({THREE:t})}get cameraControls(){return this.controller}addCameraControls(e,t){const{domElement:s}=this.options.controlsParams,i=new Q(e,s);return i.setLookAt(0,0,400,0,0,0,!1),this.addController(i,t)}setPageActive(e){super.setPageActive(e,(t,s)=>{t.enabled=s})}removePage(e){super.removePage(e,t=>{t.dispose()})}enable(){this.activeControllerSet.forEach(e=>{e.enabled=!0})}disable(){this.activeControllerSet.forEach(e=>{e.enabled=!1})}update(e,t){super.update(e,t),this.autoRotateSpeed&&this.cameraControls&&(this.cameraControls.azimuthAngle+=this.autoRotateSpeed*e*v.MathUtils.DEG2RAD)}}const Ve=new v.Vector3,is=new v.Quaternion,Ye=new v.Vector3,H=new v.Matrix4,rs=new v.Matrix4;class os{constructor(e={}){const t=this;let s,i,r,o;const n={camera:{style:""},objects:new WeakMap},a=e.element!==void 0?e.element:document.createElement("div");a.style.overflow="hidden",this.domElement=a;const c=document.createElement("div");c.style.transformOrigin="0 0",c.style.pointerEvents="none",a.appendChild(c);const f=document.createElement("div");f.style.transformStyle="preserve-3d",c.appendChild(f),this.getSize=function(){return{width:s,height:i}},this.render=function(y,l){const _=l.projectionMatrix.elements[5]*o;l.view&&l.view.enabled?(c.style.transform=`translate( ${-l.view.offsetX*(s/l.view.width)}px, ${-l.view.offsetY*(i/l.view.height)}px )`,c.style.transform+=`scale( ${l.view.fullWidth/l.view.width}, ${l.view.fullHeight/l.view.height} )`):c.style.transform="",y.matrixWorldAutoUpdate===!0&&y.updateMatrixWorld(),l.parent===null&&l.matrixWorldAutoUpdate===!0&&l.updateMatrixWorld();let E,O;l.isOrthographicCamera&&(E=-(l.right+l.left)/2,O=(l.top+l.bottom)/2);const w=l.view&&l.view.enabled?l.view.height/l.view.fullHeight:1,T=l.isOrthographicCamera?`scale( ${w} )scale(`+_+")translate("+p(E)+"px,"+p(O)+"px)"+C(l.matrixWorldInverse):`scale( ${w} )translateZ(`+_+"px)"+C(l.matrixWorldInverse),D=(l.isPerspectiveCamera?"perspective("+_+"px) ":"")+T+"translate("+r+"px,"+o+"px)";n.camera.style!==D&&(f.style.transform=D,n.camera.style=D),g(y,y,l)},this.setSize=function(y,l){s=y,i=l,r=s/2,o=i/2,a.style.width=y+"px",a.style.height=l+"px",c.style.width=y+"px",c.style.height=l+"px",f.style.width=y+"px",f.style.height=l+"px"};function p(y){return Math.abs(y)<1e-10?0:y}function C(y){const l=y.elements;return"matrix3d("+p(l[0])+","+p(-l[1])+","+p(l[2])+","+p(l[3])+","+p(l[4])+","+p(-l[5])+","+p(l[6])+","+p(l[7])+","+p(l[8])+","+p(-l[9])+","+p(l[10])+","+p(l[11])+","+p(l[12])+","+p(-l[13])+","+p(l[14])+","+p(l[15])+")"}function m(y){const l=y.elements;return"translate(-50%,-50%)"+("matrix3d("+p(l[0])+","+p(l[1])+","+p(l[2])+","+p(l[3])+","+p(-l[4])+","+p(-l[5])+","+p(-l[6])+","+p(-l[7])+","+p(l[8])+","+p(l[9])+","+p(l[10])+","+p(l[11])+","+p(l[12])+","+p(l[13])+","+p(l[14])+","+p(l[15])+")")}function u(y){y.isCSS3DObject&&(y.element.style.display="none");for(let l=0,_=y.children.length;l<_;l++)u(y.children[l])}function g(y,l,_,E){if(y.visible===!1){u(y);return}if(y.isCSS3DObject){const O=y.layers.test(_.layers)===!0,w=y.element;if(w.style.display=O===!0?"":"none",O===!0){y.onBeforeRender(t,l,_);let T;y.isCSS3DSprite?(H.copy(_.matrixWorldInverse),H.transpose(),y.rotation2D!==0&&H.multiply(rs.makeRotationZ(y.rotation2D)),y.matrixWorld.decompose(Ve,is,Ye),H.setPosition(Ve),H.scale(Ye),H.elements[3]=0,H.elements[7]=0,H.elements[11]=0,H.elements[15]=1,T=m(H)):T=m(y.matrixWorld);const L=n.objects.get(y);if(L===void 0||L.style!==T){w.style.transform=T;const D={style:T};n.objects.set(y,D)}w.parentNode!==f&&f.appendChild(w),y.onAfterRender(t,l,_)}}for(let O=0,w=y.children.length;O<w;O++)g(y.children[O],l,_)}}}const $=new v.Vector3,Ze=new v.Matrix4,We=new v.Matrix4,qe=new v.Vector3,Ke=new v.Vector3;class ns{constructor(e={}){const t=this;let s,i,r,o;const n={objects:new WeakMap},a=e.element!==void 0?e.element:document.createElement("div");a.style.overflow="hidden",this.domElement=a,this.getSize=function(){return{width:s,height:i}},this.render=function(u,g){u.matrixWorldAutoUpdate===!0&&u.updateMatrixWorld(),g.parent===null&&g.matrixWorldAutoUpdate===!0&&g.updateMatrixWorld(),Ze.copy(g.matrixWorldInverse),We.multiplyMatrices(g.projectionMatrix,Ze),f(u,u,g),m(u)},this.setSize=function(u,g){s=u,i=g,r=s/2,o=i/2,a.style.width=u+"px",a.style.height=g+"px"};function c(u){u.isCSS2DObject&&(u.element.style.display="none");for(let g=0,y=u.children.length;g<y;g++)c(u.children[g])}function f(u,g,y){if(u.visible===!1){c(u);return}if(u.isCSS2DObject){$.setFromMatrixPosition(u.matrixWorld),$.applyMatrix4(We);const l=$.z>=-1&&$.z<=1&&u.layers.test(y.layers)===!0,_=u.element;_.style.display=l===!0?"":"none",l===!0&&(u.onBeforeRender(t,g,y),_.style.transform="translate("+-100*u.center.x+"%,"+-100*u.center.y+"%)translate("+($.x*r+r)+"px,"+(-$.y*o+o)+"px)",_.parentNode!==a&&a.appendChild(_),u.onAfterRender(t,g,y));const E={distanceToCameraSquared:p(y,u)};n.objects.set(u,E)}for(let l=0,_=u.children.length;l<_;l++)f(u.children[l],g,y)}function p(u,g){return qe.setFromMatrixPosition(u.matrixWorld),Ke.setFromMatrixPosition(g.matrixWorld),qe.distanceToSquared(Ke)}function C(u){const g=[];return u.traverseVisible(function(y){y.isCSS2DObject&&g.push(y)}),g}function m(u){const g=C(u).sort(function(l,_){if(l.renderOrder!==_.renderOrder)return _.renderOrder-l.renderOrder;const E=n.objects.get(l).distanceToCameraSquared,O=n.objects.get(_).distanceToCameraSquared;return E-O}),y=g.length;for(let l=0,_=g.length;l<_;l++)g[l].element.style.zIndex=y-l}}}const Ge={zIndex:"auto"};class as{constructor(e){this.container=e}addRenderer(e,t){const s=t.container||this.container,i=s.offsetWidth,r=s.offsetHeight,o=e==="css2d"?new ns:new os;o.domElement.style.position="absolute",o.domElement.style.top="0",o.domElement.style.pointerEvents="none",o.domElement.style.zIndex=t.zIndex,o.setSize(i,r),s.appendChild(o.domElement),e==="css2d"?this.css2Drenderer=o:e==="css3d"&&(this.css3Drenderer=o)}setSize(e,t){var s,i;(s=this.css2Drenderer)==null||s.setSize(e,t),(i=this.css3Drenderer)==null||i.setSize(e,t)}render(e,t){var s,i;(s=this.css2Drenderer)==null||s.render(e,t),(i=this.css3Drenderer)==null||i.render(e,t)}dispose(){var e,t;(e=this.css2Drenderer)==null||e.domElement.remove(),(t=this.css3Drenderer)==null||t.domElement.remove(),this.css2Drenderer=void 0,this.css3Drenderer=void 0}}class ls{constructor(e){this.helpers={},this.options=e}add(e){const t=e.uuid,{sceneController:s}=this.options;let i=this.helpers[t];if(i===void 0){if(e.isScene)i=new v.AxesHelper(100);else if(e.isCamera)i=new v.CameraHelper(e);else if(e.isPointLight)i=new v.PointLightHelper(e,1);else if(e.isDirectionalLight)i=new v.DirectionalLightHelper(e,1);else if(e.isSpotLight)i=new v.SpotLightHelper(e);else if(e.isHemisphereLight)i=new v.HemisphereLightHelper(e,10);else if(e.isRectAreaLight)i=new xt.RectAreaLightHelper(e);else{const r=new v.Box3;if(r.setFromObject(e,!0),r.isEmpty()===!1){i=new v.Box3Helper(r);const o=i.material;o.userData.object=e,o.depthTest=!1,o.transparent=!0}else return}s.scene.add(i),this.helpers[t]=i}}addViewHelper(){const{cameraController:e,container:t}=this.options,s=new Lt.ViewHelper(e.camera,t);t.addEventListener("pointerdown",i=>{i.preventDefault(),s.handleClick(i)}),this.viewHelper=s}remove(e){var i;const t=e.uuid,{sceneController:s}=this.options;if(this.helpers[t]!==void 0){const r=this.helpers[t];s.scene.remove(r),delete this.helpers[t],(i=r.dispose)==null||i.call(r)}}removeAll(){Object.keys(this.helpers).forEach(e=>{this.remove({uuid:e})}),this.helpers={}}removeAllExcludeScene(){Object.keys(this.helpers).forEach(e=>{this.helpers[e]instanceof v.AxesHelper||this.remove({uuid:e})})}update(e,t,s){var r,o;const{cameraController:i}=this.options;Object.values(this.helpers).forEach(n=>{if(n.update&&n.update(),n instanceof v.Box3Helper){const a=n.material,{object:c}=a.userData;c&&n.box.setFromObject(c,!0)}}),((r=this.viewHelper)==null?void 0:r.animating)===!0&&(this.viewHelper.update(e),(o=t.cameraControls)==null||o.setPosition(...i.camera.position.toArray()),this.viewHelper.center.copy(s))}renderViewHelper(e){if(!this.viewHelper)return;const t=e.autoClear;e.autoClear=!1,this.viewHelper.render(e),e.autoClear=t}dispose(){var e;this.helpers={},(e=this.viewHelper)==null||e.dispose()}}function $e(h){let e=!1,t=[];return function(...s){t=s,e||(e=!0,requestAnimationFrame(()=>{e=!1,h(...t)}))}}class hs{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.activeObject=null,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 C;if(!this.enabled)return;r.preventDefault();const o=e==="move"?t:s,n=[];if(this.pickFunctionsMap.forEach(m=>{o.has(m.type)&&n.push(ee(k({},m),{objArr:m.objArr instanceof Function?m.objArr():m.objArr}))}),n.length===0)return;this.activeObjects.clear(),this.objCallbackMap.clear(),this.activeObject=null;const a=this.objCallbackMap;for(const m of n)for(const u of m.objArr){if(!u.object3d||!u.visibleWithAncestors)continue;a.has(u)||a.set(u,new Map);const g=a.get(u);g.has(m.type)||g.set(m.type,[]),g.get(m.type).push(m.cb)}if(a.size===0)return;const c=[...a.keys()].map(m=>m.object3d),f=(C=this.pencil.pick(r,c,!0))==null?void 0:C.intersects;if(!f||f.length===0)e==="down"?this.handleDownOutside(r):e==="move"&&this.handleLeaveEvents(r);else{const m=f[0];this.processIntersection(m,r,e)}const p=this.prevActiveObjects;this.prevActiveObjects=this.activeObjects,this.activeObjects=p,this.activeObjects.clear()};this.domElement.addEventListener(`pointer${e}`,$e(i),{passive:!1})}processIntersection(e,t,s){const i=this.objCallbackMap,r=e.index||-1;let o=e.object;for(;o;){const n=this.pencil.lead.objMap.get(o);n&&n.visible&&(this.activeObject||(this.activeObject=n),i.has(n)&&this.activeObjects.add(n)),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 n of this.activeObjects){if(r)break;const a=i.get(n);if(a)if(t==="move"){const c=a.get("enter");if(c&&!this.prevActiveObjects.has(n))for(const p of c)p({baseObject:n,realBaseObject:this.activeObject,mouseEvent:e,sp:o,intersectionIndex:s});const f=a.get("move");if(f)for(const p of f)p({baseObject:n,realBaseObject:this.activeObject,mouseEvent:e,sp:o,intersectionIndex:s})}else{const c=a.get("down");if(c)for(const p of c)p({baseObject:n,realBaseObject:this.activeObject,mouseEvent:e,sp:o,intersectionIndex:s});const f=a.get("click");if(f){const p=C=>{C.preventDefault();const m=5;if(!r&&Math.abs(C.clientX-e.clientX)<=m&&Math.abs(C.clientY-e.clientY)<=m)for(const u of f)u({baseObject:n,realBaseObject:this.activeObject,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(n=>["move","enter","leave"].includes(n.type))&&(this.pickListener.move=!0,this.addPickListener("move")),this.pickListener.down||Array.from(this.pickFunctionsMap.values()).some(n=>["down","downOutside","click"].includes(n.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 n of r){const a=n;a.element.style.pointerEvents="auto";const c=p=>{this.enabled&&(p.preventDefault(),s({baseObject:a,mouseEvent:p}))},f=`pointer${t}`;a.element.addEventListener(f,$e(c),!1),o.push({arr:a,type:f,listener:c})}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 cs extends hs{constructor(e,t){super(e),this.objMap=new Map,this.objects=new Map,this.objectsPm=new Map,this.objectWrapChindIdMap=new Map,this.objectNamesToFactories=new Map,this.mList=t.mList,this.scene=this.createBaseObject(t.scene||new v.Scene,{key:"@Scene",name:"场景",mList:!1}),this.group=this.createBaseObject(new v.Group,{key:"@Group",name:"物体组",target:this.scene,mList:!1}),this.prefabGroup=this.createBaseObject(new v.Group,{key:"@PrefabGroup",name:"预制组",target:this.scene,mList:!1})}get objectsPromise(){return this.objectsPm.values()}createBaseObject(e,t={}){const s=k({mList:!0},t),i=new U.BaseObject;if(i.object3d=e,i.pencil=this.pencil,i.lead=this,i.mList=this.mList,s.key)i.key=s.key;else if(s.target){const r=s.target.key;if(r==="@Scene"&&e instanceof v.Camera)i.key="@Camera";else{const o=this.objectWrapChindIdMap.get(s.target)?this.objectWrapChindIdMap.get(s.target)+1:0;this.objectWrapChindIdMap.set(s.target,o),i.key=`${r}__c__${o}`}}return s.name&&(e.name=s.name),s.target&&!s.target.object3d.getObjectById(e.id)&&s.target.object3d.add(e),this.objects.set(i.key,i),this.objMap.set(i.object3d,i),s.mList&&(this.mList.proxyBaseObject(i),this.mList.addBaseObjectMap(i)),e.children&&e.children.forEach(r=>{this.createBaseObject(r,{target:i,mList:s.mList})}),i}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,n)=>{(n.startsWith(s?i:`${i}#`)||n===i)&&r.push(o)}),r}draw(e,t,s){return te(this,null,function*(){var r,o,n,a;const i=this.objectNamesToFactories.get(e);if(i){t||(t={}),t.target===void 0&&(t.target=s);const c=t.target,f=(r=t.onTop)!=null?r:0,p=(o=t.prefab)!=null?o:!1,C=(n=t.create)!=null?n:!0,m=new i().create(t);let u;return c===null?u=null:typeof c=="string"?u=this.objects.get(c):(a=c==null?void 0:c.objectType)!=null&&a.startsWith("BaseObject")||c?u=c:p?u=this.prefabGroup:u=this.group,C===!1?m.create=()=>{}:C!==!0&&(m.create=()=>{C(m)}),m.pencil=this.pencil,m.lead=this,m.mList=this.mList,m.prefab=p,m.objectType=`BaseObject#${e}`,m.objectOptions=t,this.setBaseObjectKey(m,t.key?`$t:#${t.key}`:"$t:",u==null?void 0:u.key),this.objectsPm.set(m,this.addBaseObject(m,u,f)),yield this.objectsPm.get(m),this.objectsPm.delete(m),m}throw new Error(`Unrecognized:${e}`)})}setBaseObjectKey(e,t,s){const i=e.objectType,[,r]=i.split("#");let o=t.replace("$t:",r);if(s){const[,n]=s.split("#");o=o.replace("$p:",n)}return this.objects.has(o)&&(o.includes("#")?o+=`-${we.generateUUID()}`:o+=`#${we.generateUUID()}`),e.key=o,this.objects.set(o,e),o}updateBaseObjectKey(e,t){var o;let s;for(const[n,a]of this.objects.entries())if(a===e){s=n;break}const i=(o=e.parent)==null?void 0:o.key,r=this.setBaseObjectKey(e,t,i);return s&&this.objects.delete(s),this.pencil.event.emit("lead.updateKey",{baseObject:e,key:r,oldKey:s}),e.children.forEach((n,a)=>{n.key.includes("__c__")&&this.updateBaseObjectKey(n,`${r}__c__${a}`)}),r}addBaseObject(e,t,s){return te(this,null,function*(){if(yield e.create(),e.object3d){const i=e.object3d;i.material&&Array.isArray(i.material)&&(i.material=i.material.slice()),this.mList.proxyBaseObject(e),this.mList.addBaseObjectMap(e),s&&e.setTop(s),t!==null&&t.object3d.add(e.object3d),this.objMap.set(e.object3d,e),i.children.forEach(r=>{this.objMap.get(r)||this.createBaseObject(r,{target:e})})}e.render(),this.pencil.event.emit("lead.draw",{baseObject:e})})}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=>{r.disposeMaterialIfNotUsed=e,r.dispose()})}),this.pencil.event.emit("lead.erase")}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.objectWrapChindIdMap.clear(),this.objectNamesToFactories.clear()}}class ds extends J{get lead(){return this.controller}constructor(e){super(),this.options=e}addLead(e,t,s){const{pencil:i}=this.options,r=new cs(i,{scene:e,mList:t});return this.addController(r,s)}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)})}}class Xe extends v.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 v.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 v.VideoTexture(o)):r=new v.Texture;const n=new v.FileLoader(this.manager);return n.setResponseType("blob"),n.setRequestHeader(this.requestHeader),n.setPath(this.path),n.setWithCredentials(this.withCredentials),n.load(e,a=>{let c=a;const f=e.split(".").pop(),p=this.options.type==="image"?`image/${f||"png"}`:`video/${f||"mp4"}`;c=c.slice(0,a.size,p);const C=()=>{o.removeEventListener("load",m,!1),o.removeEventListener("error",u,!1)},m=()=>{C(),r.needsUpdate=!0,t&&t(r)},u=y=>{C(),i&&i(y),this.manager.itemError(e),this.manager.itemEnd(e)};o.addEventListener("load",m,!1),o.addEventListener("error",u,!1);const g=window.URL.createObjectURL(c);o.src=g},s,i),r}}class ps extends v.Loader{constructor(e){super(e)}load(e,t,s,i){const r=new v.FileLoader(this.manager);r.setResponseType("blob"),r.setRequestHeader(this.requestHeader),r.setPath(this.path),r.setWithCredentials(this.withCredentials),r.load(e,o=>{const n=o,a=new DecompressionStream("gzip"),c=n.stream().pipeThrough(a);new Response(c).json().then(p=>{t==null||t(p)}).catch(p=>{i==null||i(p)})},s,i)}}const ms={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 us{constructor(e){this.loadObj=[],this.delLoadArr=[],this.assets=new Map,this.event=new _e.EventEmitter,this.options=k({simpleTexture4deleted:!1,prefix:""},e),this.loadingManager=new v.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 v.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(ms))if(r.includes(t))return i}getLoader(e,t){if(e==="images")return this.textureLoader||(this.textureLoader=new Xe(this.loadingManager),this.options.prefix&&this.textureLoader.setPath(this.options.prefix)),this.textureLoader;if(e==="media")return this.videoTextureLoader||(this.videoTextureLoader=new Xe(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 Re.GLTFLoader(this.loadingManager),this.dracoLoader=new Pt.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 Re.GLTFLoader(this.loadingManager),this.options.prefix&&this.gltfLoader.setPath(this.options.prefix)),this.gltfLoader;if(e==="lottie")return this.lottieLoader||(this.lottieLoader=new At.LottieLoader(this.loadingManager),this.options.prefix&&this.lottieLoader.setPath(this.options.prefix)),this.lottieLoader;if(e==="gzipJson")return this.gzipJsonLoader||(this.gzipJsonLoader=new ps(this.loadingManager),this.options.prefix&&this.gzipJsonLoader.setPath(this.options.prefix)),this.gzipJsonLoader;if(e==="json")return this.jsonLoader||(this.jsonLoader=new v.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 St.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=k({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 v.Texture||t instanceof v.DataTexture||t instanceof v.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 n,a;const s=(n=t==null?void 0:t.type)!=null?n:this.getAssetType(e);if(!s)return;const i=(t==null?void 0:t.cache)!==!1,r=we.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 c=yield o.loadAsync(e);if(this.assets.set(e,c),r.resolve(c),s==="images"||s==="media"||s==="exr"||s==="lottie"){(t==null?void 0:t.colorCorrection)!==!1&&xe.colorCorrection({texture:c});const f=(a=t==null?void 0:t.anisotropy)!=null?a:this.options.anisotropy;c.anisotropy=f}return c}catch(c){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(a=>{[a.map,a.emissiveMap,a.normalMap,a.roughnessMap,a.metalnessMap,a.aoMap].forEach(c=>{if(c){const f=this.getSrcByAsset(c,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 fs={prefix:""};class _s extends J{get loader(){return this.controller}constructor(e){super(),this.options=e}addLoader(e,t){const{loaderParams:s}=this.options,i=new us(ee(k({},s),{scene:e}));return this.addController(i,t)}removePage(e){super.removePage(e,t=>{t.dispose()})}}class gs{constructor(e){this.materials=new Map,this.fixBaseObjects=new Map,this.materialBaseObjectMap=new Map,this.pencil=e}add(e,t){this.materials.set(e,t);const s={object3d:new Proxy({material:t},{set:(i,r,o)=>{var n;if(r==="material"&&!((n=this.pencil.composerController)!=null&&n.bloomComposerRenderIng)){const a=i.material;return i.material=o,this.materials.set(e,o),this.disposeMaterial(a),this.syncChangeMaterial(a,o),!0}return i[r]=o,!0}})};this.fixBaseObjects.set(e,s),this.pencil.event.emit("mList.add",{key:e,material:t,baseObject:s})}get(e){const t=this.materials.get(e);return t||console.warn(`Material with key "${e}" not found.`),t}getByName(e){for(const[t,s]of this.materials.entries())if(s.name===e)return s;console.warn(`Material with name "${e}" not found.`)}getKey(e){for(const[t,s]of this.materials.entries())if(s===e)return t}getKeyByName(e){for(const[t,s]of this.materials.entries())if(s.name===e)return t;console.warn(`Material key with name "${e}" not found.`)}addMultiple(e,t){for(const[s,i]of Object.entries(t)){const r=`${e}#${s}`;i&&this.add(r,i)}}getMultiple(e){const t={},s=`${e}#`;let i=!1;for(const[r,o]of this.materials.entries())if(r.startsWith(s)){const n=r.substring(s.length);t[n]=o,i=!0}return i?t:null}copy(e,t,s={}){const i=this.get(e);if(!i)return console.warn(`Material with key "${e}" not found.`),null;const r=i.clone();return s.name&&(r.name=s.name),this.add(t,r),r}copyMultiple(e,t){const s={},i=`${e}#`;for(const[r,o]of this.materials.entries())if(r.startsWith(i)){const n=r.substring(i.length),a=o.clone();s[n]=a;const c=`${t}#${n}`;this.add(c,a)}return s}disposeMaterial(e){if(!e)return;const t=new U.ResourceTracker;t.track(Array.isArray(e)?e:[e]),t.dispose()}remove(e){const t=this.materials.get(e);t&&this.disposeMaterial(t),this.materials.delete(e),this.fixBaseObjects.delete(e),this.pencil.event.emit("mList.remove",{key:e,material:t})}removeByMaterial(e){[...this.materials.entries()].some(([t,s])=>s===e?(this.remove(t),!0):!1)}proxyBaseObject(e){const t=e.object3d;if(!t.material)return;const s=o=>{if(o.hasOwnProperty("__isProxy"))return o;const n=new Proxy(o,{set:(a,c,f)=>{if(typeof c=="string"&&!isNaN(Number(c))){const p=Number(c);if(p>=0&&p<a.length){const C=a[p];return this.rmBaseObjectMap(e,C),a[p]=f,f&&this.addBaseObjectMap(e),!0}}return a[c]=f,!0}});return Object.defineProperty(n,"__isProxy",{value:!0,enumerable:!1}),n};e.materialList&&(e.materialList=new Proxy(e.materialList,{set:(o,n,a)=>{if(typeof n=="string"){const c=o[n];return this.rmBaseObjectMap(e,c),o[n]=a,a&&this.addBaseObjectMap(e),!0}return o[n]=a,!0},get:(o,n)=>{if(typeof n=="string"&&o[n]){const a=o[n];if(Array.isArray(a)){const c=s(a);return c!==a&&(o[n]=c),c}return a}return o[n]},deleteProperty:(o,n)=>{if(typeof n=="string"&&o[n]){const a=o[n];this.rmBaseObjectMap(e,a)}return delete o[n],!0}}));const i=t.material,r="_enhancedMaterial";t[r]=i,Object.defineProperty(t,"material",{get:()=>{var n;const o=t[r];if(!((n=this.pencil.composerController)!=null&&n.bloomComposerRenderIng)&&Array.isArray(o)){const a=s(o);return a!==o&&(t[r]=a),a}return o},set:o=>{var n;if((n=this.pencil.composerController)!=null&&n.bloomComposerRenderIng)t[r]=o;else{if(e.materialList&&Object.values(e.materialList).includes(o)){t[r]=o;return}this.rmBaseObjectMap(e),t[r]=o,this.addBaseObjectMap(e)}e.handleMaterialChange(o)},enumerable:!0,configurable:!0})}material2array(e){return Array.isArray(e)?e:[e]}addBaseObjectMap(e){const t=e.object3d;t.material&&([...Object.values(e.materialList),t.material].forEach(s=>{s&&this.material2array(s).forEach(r=>{const o=this.materialBaseObjectMap.get(r);o?o.add(e):this.materialBaseObjectMap.set(r,new Set([e]))})}),this.pencil.event.emit("mList.addBaseObjectMap"))}rmBaseObjectMap(e,t,s=!0){const i=t&&this.material2array(t);this.materialBaseObjectMap.forEach((r,o)=>{i&&!i.includes(o)||r.has(e)&&(r.delete(e),r.size===0&&s&&(this.materialBaseObjectMap.delete(o),this.disposeMaterial(o)))}),this.pencil.event.emit("mList.rmBaseObjectMap")}getBaseObjectMap(e){return this.materialBaseObjectMap.get(e)||new Set}syncChangeMaterial(e,t){const s=this.materialBaseObjectMap.get(e);s&&s.forEach(i=>{const r=i.object3d,o=r.material;if(Array.isArray(o)){const n=o.indexOf(e);n!==-1&&(o[n]=t)}else o===e&&(r.material=t);i.materialList&&Object.keys(i.materialList).forEach(n=>{const a=i.materialList[n];if(Array.isArray(a)){const c=a.indexOf(e);c!==-1&&(a[c]=t)}else a===e&&(i.materialList[n]=t)})})}dispose(){const e=new U.ResourceTracker;e.track([...this.materials.values()]),e.dispose(),this.materials.clear(),this.fixBaseObjects.clear(),this.materialBaseObjectMap.clear()}}class ys extends J{get mList(){return this.controller}constructor(e){super(),this.options=e}addMList(e,t){const{pencil:s}=this.options,i=new gs(s);return this.addController(i,t)}removePage(e){super.removePage(e,t=>{t.dispose()})}}const vs={antialias:!1,devicePixelRatio:window.devicePixelRatio,powerPreference:"high-performance",toneMappingExposure:1,alpha:!1,outputColorSpace:xe.ColorSpace.sRGB,logarithmicDepthBuffer:!1,preserveDrawingBuffer:!1,stencil:!1,depth:!1};class Cs{constructor(e){this.options=e;const{width:t,height:s,rendererParams:i}=e,{alpha:r,devicePixelRatio:o,antialias:n,powerPreference:a,toneMappingExposure:c,outputColorSpace:f,logarithmicDepthBuffer:p,preserveDrawingBuffer:C,stencil:m,depth:u}=i,g=new v.WebGLRenderer({alpha:r,antialias:n,powerPreference:a,logarithmicDepthBuffer:p,preserveDrawingBuffer:C,stencil:m,depth:u});g.setSize(t,s),g.setPixelRatio(o),g.toneMappingExposure=c,g.outputColorSpace=f,this.renderer=g}setSize(e,t){this.renderer.setSize(e,t)}setPixelRatio(e){this.renderer.setPixelRatio(e)}render(e,t){this.renderer.render(e,t)}setViewport(e){var a,c;const{x:t,y:s,width:i,height:r}=e,o=(a=e.scissor)!=null?a:!1,n=(c=e.scissorTest)!=null?c:!1;this.renderer.setViewport(t,s,i,r),o&&(this.renderer.setScissor(t,s,i,r),this.renderer.setScissorTest(n))}dispose(){var e,t;this.setSize(1,1),(e=this.renderer)==null||e.clear(),(t=this.renderer)==null||t.dispose()}}const Os={background:null};class Es extends J{get scene(){return this.controller}constructor(e){super(),this.options=e}addScene(e,t){const s=new v.Scene;return e!=null&&e.background&&(s.background=e.background),this.addController(s,t)}removePage(e){super.removePage(e,t=>{const s=new U.ResourceTracker;s.track(t),s.dispose()})}setPageActive(e){super.setPageActive(e,(t,s)=>{t.visible=s})}}class Ts{constructor(e){this.event=new _e.EventEmitter;const{renderer:t,scene:s,camera:i}=e,r=new Mt.TransformControls(i,t.domElement);if(r.getHelper){const o=r.getHelper();if(s.add(o),+v.REVISION<170){const n=r._root;n.dispose=()=>{n.traverse(a=>{a.geometry&&a.geometry.dispose(),a.material&&a.material.dispose()})},r.dispose=()=>{r.disconnect(),n.dispose()}}}else r instanceof v.Object3D&&s.add(r);this.controls=r,this.addEvent()}get detach(){return this.controls.detach.bind(this.controls)}get attach(){return this.controls.attach.bind(this.controls)}addEvent(){let e=null,t=null,s=null;const i=this.controls;i.addEventListener("change",()=>{const r=i.object;r!==void 0&&this.event.emit("change",r)}),i.addEventListener("mouseDown",()=>{const r=i.object;e=r.position.clone(),t=r.rotation.clone(),s=r.scale.clone(),this.event.emit("mouseDown",r)}),i.addEventListener("mouseUp",()=>{const r=i.object;if(r!==void 0)switch(i.getMode()){case"translate":e.equals(r.position)||this.event.emit("translate",r,r.position,e);break;case"rotate":t.equals(r.rotation)||this.event.emit("rotate",r,r.rotation,t);break;case"scale":s.equals(r.scale)||this.event.emit("scale",r,r.scale,s);break}this.event.emit("mouseUp")})}dispose(){var e;this.event.removeAllListeners(),(e=this.controls)==null||e.dispose()}}const bs={antialias:!0,devicePixelRatio:window.devicePixelRatio};class ws{constructor(e){this.options=e;const{width:t,height:s,rendererParams:i,renderer:r}=e,{devicePixelRatio:o,antialias:n}=i,a=new r({antialias:n});a.setSize(t,s),a.setPixelRatio(o),this.renderer=a}setSize(e,t){this.renderer.setSize(e,t)}render(e,t){this.renderer.render(e,t)}dispose(){var e,t;this.setSize(1,1),(e=this.renderer)==null||e.clear(),(t=this.renderer)==null||t.dispose()}}const ue=class ue{constructor(e){var r,o;this.raycaster=new v.Raycaster,this.maxBackufferArea=5760*5760,this.installPlugins=new Map,this._cameraPositon=new v.Vector3,this._cameraTarget=new v.Vector3,this.event=new _e.EventEmitter,this.timer=new Ct.Timer,this.userData={},this.pageActiveIndex=0,this.pageCountIndex=0,this.userSetDprCache=1,this.viewPadding=[0,0,0,0],this.event.setMaxListeners(1/0),(o=(r=this.timer).connect)==null||o.call(r,document),this.options=yt(ue.options,e,{isMergeableObject:xe.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 n=new vt({horizontal:!1});n.dom.style.position="absolute",n.init(this.renderer),t.appendChild(n.dom),this.stats=n}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}get mList(){return this.mListController.mList}tweenUpdateRaf(){ye.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);r.add(i),this.controlsController.addCameraControls(i,s),this.loaderController.addLoader(r,s);const o=this.mListController.addMList(null,s);return this.leadController.addLead(r,o,s),this.pageCountIndex=s,s}removePage(e){this.cameraController.removePage(e),this.sceneController.removePage(e),this.controlsController.removePage(e),this.loaderController.removePage(e),this.mListController.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.mListController.setPageActive(e),this.leadController.setPageActive(e),this.pageActiveIndex=e}init(){var _;const{container:e,WebGPUTHREE:t,helper:s,viewHelper:i,renderer:r,controls:o,loader:n}=this.options,{width:a,height:c}=this.getSize(),f=t?new ws({width:a,height:c,renderer:t.WebGPURenderer,rendererParams:bs}):new Cs({width:a,height:c,rendererParams:ee(k({},r),{antialias:!1})}),p=new Bt({width:a,height:c}),C=new Es({}),m=new ss({controlsParams:{domElement:(_=o==null?void 0:o.domElement)!=null?_:f.renderer.domElement}}),u=new _s({loaderParams:k({anisotropy:f.renderer.capabilities.getMaxAnisotropy()},n)}),g=new ys({pencil:this}),y=new ds({pencil:this});this.sceneController=C,this.cameraController=p,this.controlsController=m,this.rendererController=f,this.loaderController=u,this.mListController=g,this.leadController=y;const l=this.addPage({sceneOptions:this.options.scene,cameraOptions:this.options.camera});if(this.showPage(l),s){const E=new ls({container:e,sceneController:C,cameraController:p});E.add(C.scene),this.helperController=E,i&&E.addViewHelper()}e.appendChild(f.renderer.domElement)}initComposer(){const{bloom:e,bloomParams:t,ssao:s,ssaoParams:i,composer:r}=this.options,o=new ts({rendererController:this.rendererController,sceneController:this.sceneController,cameraController:this.cameraController,composerParams:r});this.composerController=o,e&&o.addBloomPass(k({},t)),s&&o.addSSAOPass(k({},i)),o.addOutputPass()}initCSSRenderer(){const{container:e,css2DRenderer:t,css3DRenderer:s,css2DRendererParams:i,css3DRendererParams:r}=this.options;if(t||s){const o=new as(e);t&&o.addRenderer("css2d",i),s&&o.addRenderer("css3d",r),this.cssRendererController=o}}initTransformControls(){const e=new Ts({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:n,leadController:a}=this,c=this.renderer.getSize(new v.Vector2);c.x===e&&c.y===t||(r.setSize(e,t),i.setSize(e,t),o==null||o.setSize(e,t),n==null||n.setSize(e,t),a.setSize(e,t),this.installPlugins.forEach(f=>{var p;(p=f.setSize)==null||p.call(f,e,t)}),this.viewPadding.some(f=>f!==0)&&this.setViewPadding(...this.viewPadding),this.render(),s&&this.event.emit("resize",{width:e,height:t}))}setDevicePixelRatio(e){var n;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),(n=this.composerController)==null||n.setPixelRatio(r),this.viewPadding.some(a=>a!==0)&&this.setViewPadding(...this.viewPadding))}setViewPadding(e=0,t=0,s=0,i=0){const{width:r,height:o}=this.renderer.getSize(new v.Vector2),n={x:i,y:s,width:r-i-t,height:o-e-s};this.rendererController.setViewport(n),this.cameraController.setAspect(n.width/n.height),this.viewPadding=[e,t,s,i]}pick(e,t,s=!0){const{raycaster:i,options:r}=this,{container:o}=r,n=new v.Vector2,a=o.getBoundingClientRect();if(n.x=(e.clientX-a.left)/(a.right-a.left)*2-1,n.y=-((e.clientY-a.top)/(a.bottom-a.top))*2+1,this.camera&&this.scene){i.setFromCamera(n,this.camera);const c=i.intersectObjects(t||this.scene.children,s);if(c.length)return{object:c[0].object,index:c[0].index,intersects:c}}}render(){var s,i,r,o,n,a;if(!this.camera||!this.scene)return;this.event.emit("beforeRender"),this.timer.update(),ye.update();const e=this.timer.getDelta(),t=this.timer.getElapsed();this.controlsController.update(e,t),this.leadController.update(e,t),this.installPlugins.forEach(c=>{var f;(f=c.update)==null||f.call(c,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),(n=this.cssRendererController)==null||n.render(this.scene,this.camera),(a=this.stats)==null||a.update(),this.event.emit("render",{delta:e,elapsed:t})}start(){var e;window.cancelAnimationFrame(this.TweenRaf),(e=this.renderer)==null||e.setAnimationLoop(this.render.bind(this)),this.event.emit("start")}stop(){var e;this.tweenUpdateRaf(),(e=this.renderer)==null||e.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}}dispose(){var e,t,s,i,r,o,n,a,c,f,p,C,m,u;this.stop(),this.timer.dispose(),ye.removeAll(),this.event.removeAllListeners(),(e=this.resizeObserver)==null||e.unobserve(this.options.container),this.installPlugins.forEach(g=>{var y;(y=g.dispose)==null||y.call(g)}),(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(),(n=this.helperController)==null||n.dispose(),(a=this.composerController)==null||a.dispose(),(c=this.rendererController)==null||c.dispose(),(f=this.loaderController)==null||f.dispose(),(p=this.leadController)==null||p.dispose(),(C=this.mListController)==null||C.dispose(),this.cssRendererController=void 0,this.installPlugins.clear(),(m=this.stats)==null||m.dom.remove(),(u=this.renderer)==null||u.domElement.remove()}};ue.options={stats:U.IS_DEV,helper:U.IS_DEV,viewHelper:U.IS_DEV,controls:!0,transformControls:U.IS_DEV,renderer:vs,composer:es,scene:Os,camera:at,bloom:!1,bloomParams:Jt,ssao:!1,loader:fs,ssaoParams:Qt,css2DRenderer:!1,css2DRendererParams:k({},Ge),css3DRenderer:!1,css3DRendererParams:k({},Ge)};let me=ue;const xs=Q.ACTION;exports.BaseObject=U.BaseObject;exports.ResourceTracker=U.ResourceTracker;exports.Pencil=me;exports.cameraControlsAction=xs;exports.default=me;
@@ -3475,6 +3475,7 @@ class ni {
3475
3475
  }
3476
3476
  this.rmBaseObjectMap(e), t[r] = o, this.addBaseObjectMap(e);
3477
3477
  }
3478
+ e.handleMaterialChange(o);
3478
3479
  },
3479
3480
  enumerable: !0,
3480
3481
  configurable: !0
@@ -372,6 +372,8 @@ class mt extends ae {
372
372
  erase() {
373
373
  this.lead.erase(this);
374
374
  }
375
+ handleMaterialChange(t) {
376
+ }
375
377
  enableBloom() {
376
378
  var t;
377
379
  (t = this.pencil.composerController) == null || t.setBloomSelection(this, !0), this.isBloom = !0;
@@ -388,9 +390,9 @@ class mt extends ae {
388
390
  }
389
391
  }
390
392
  }
391
- const Q = new O(), vt = new D(), yt = new D(), b = new O(), g = new O(), B = new O(), X = new D(), Y = new Et(), M = new Lt(), bt = new D(), N = new jt(), U = new Ot(), z = new O();
393
+ const Q = new O(), vt = new D(), yt = new D(), g = new O(), b = new O(), B = new O(), X = new D(), Y = new Et(), M = new Lt(), gt = new D(), N = new jt(), U = new Ot(), z = new O();
392
394
  let T, E;
393
- function gt(n, t, e) {
395
+ function bt(n, t, e) {
394
396
  return z.set(0, 0, -t, 1).applyMatrix4(n.projectionMatrix), z.multiplyScalar(1 / z.w), z.x = E / e.width, z.y = E / e.height, z.applyMatrix4(n.projectionMatrixInverse), z.multiplyScalar(1 / z.w), Math.abs(Math.max(z.x, z.y));
395
397
  }
396
398
  function ce(n, t) {
@@ -414,19 +416,19 @@ function le(n, t, e) {
414
416
  const i = t.projectionMatrix, a = n.material.resolution, l = n.matrixWorld, r = n.geometry, c = r.attributes.instanceStart, o = r.attributes.instanceEnd, h = Math.min(r.instanceCount, c.count), f = -t.near;
415
417
  T.at(1, B), B.w = 1, B.applyMatrix4(t.matrixWorldInverse), B.applyMatrix4(i), B.multiplyScalar(1 / B.w), B.x *= a.x / 2, B.y *= a.y / 2, B.z = 0, X.copy(B), Y.multiplyMatrices(t.matrixWorldInverse, l);
416
418
  for (let p = 0, u = h; p < u; p++) {
417
- if (b.fromBufferAttribute(c, p), g.fromBufferAttribute(o, p), b.w = 1, g.w = 1, b.applyMatrix4(Y), g.applyMatrix4(Y), b.z > f && g.z > f)
419
+ if (g.fromBufferAttribute(c, p), b.fromBufferAttribute(o, p), g.w = 1, b.w = 1, g.applyMatrix4(Y), b.applyMatrix4(Y), g.z > f && b.z > f)
418
420
  continue;
419
- if (b.z > f) {
420
- const S = b.z - g.z, j = (b.z - f) / S;
421
- b.lerp(g, j);
422
- } else if (g.z > f) {
421
+ if (g.z > f) {
423
422
  const S = g.z - b.z, j = (g.z - f) / S;
424
423
  g.lerp(b, j);
424
+ } else if (b.z > f) {
425
+ const S = b.z - g.z, j = (b.z - f) / S;
426
+ b.lerp(g, j);
425
427
  }
426
- b.applyMatrix4(i), g.applyMatrix4(i), b.multiplyScalar(1 / b.w), g.multiplyScalar(1 / g.w), b.x *= a.x / 2, b.y *= a.y / 2, g.x *= a.x / 2, g.y *= a.y / 2, M.start.copy(b), M.start.z = 0, M.end.copy(g), M.end.z = 0;
428
+ g.applyMatrix4(i), b.applyMatrix4(i), g.multiplyScalar(1 / g.w), b.multiplyScalar(1 / b.w), g.x *= a.x / 2, g.y *= a.y / 2, b.x *= a.x / 2, b.y *= a.y / 2, M.start.copy(g), M.start.z = 0, M.end.copy(b), M.end.z = 0;
427
429
  const d = M.closestPointToPointParameter(X, !0);
428
- M.at(d, bt);
429
- const v = kt.lerp(b.z, g.z, d), w = v >= -1 && v <= 1, I = X.distanceTo(bt) < E * 0.5;
430
+ M.at(d, gt);
431
+ const v = kt.lerp(g.z, b.z, d), w = v >= -1 && v <= 1, I = X.distanceTo(gt) < E * 0.5;
430
432
  if (w && I) {
431
433
  M.start.fromBufferAttribute(c, p), M.end.fromBufferAttribute(o, p), M.start.applyMatrix4(l), M.end.applyMatrix4(l);
432
434
  const S = new D(), j = new D();
@@ -482,7 +484,7 @@ class Le extends St {
482
484
  s.near,
483
485
  U.distanceToPoint(T.origin)
484
486
  );
485
- o = gt(
487
+ o = bt(
486
488
  s,
487
489
  f,
488
490
  c.resolution
@@ -499,7 +501,7 @@ class Le extends St {
499
501
  s.near,
500
502
  N.distanceToPoint(T.origin)
501
503
  );
502
- h = gt(
504
+ h = bt(
503
505
  s,
504
506
  f,
505
507
  c.resolution
@@ -599,7 +601,7 @@ void main() {
599
601
  vec2 prevScreen = intoScreen(prevNormed);
600
602
  vec2 nextScreen = intoScreen(nextNormed);
601
603
 
602
- float actualWidth = lineWidth * width *0.3;
604
+ float actualWidth = lineWidth * width;
603
605
 
604
606
  vec2 dir;
605
607
  if(nextScreen == currentScreen) {
package/dist/index2.js CHANGED
@@ -1,7 +1,7 @@
1
1
  "use strict";var pe=Object.defineProperty,me=Object.defineProperties;var ve=Object.getOwnPropertyDescriptors;var W=Object.getOwnPropertySymbols;var H=Object.prototype.hasOwnProperty,ee=Object.prototype.propertyIsEnumerable;var te=Math.pow,J=(n,e,t)=>e in n?pe(n,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):n[e]=t,_=(n,e)=>{for(var t in e||(e={}))H.call(e,t)&&J(n,t,e[t]);if(W)for(var t of W(e))ee.call(e,t)&&J(n,t,e[t]);return n},q=(n,e)=>me(n,ve(e));var re=(n,e)=>{var t={};for(var r in n)H.call(n,r)&&e.indexOf(r)<0&&(t[r]=n[r]);if(n!=null&&W)for(var r of W(n))e.indexOf(r)<0&&ee.call(n,r)&&(t[r]=n[r]);return t};var ie=(n,e,t)=>new Promise((r,i)=>{var c=l=>{try{s(t.next(l))}catch(a){i(a)}},u=l=>{try{s(t.throw(l))}catch(a){i(a)}},s=l=>l.done?r(l.value):Promise.resolve(l.value).then(c,u);s((t=t.apply(n,e)).next())});const o=require("three"),ye=require("three/examples/jsm/renderers/CSS2DRenderer"),ne=require("three/examples/jsm/renderers/CSS3DRenderer"),O=require("d3-geo");require("d3-geo-projection");const Q=require("./parseVector.js"),be=require("three/examples/jsm/lines/LineSegmentsGeometry"),L=require("d3-array"),X=require("earcut"),ge=require("@turf/boolean-clockwise"),Me=require("delaunator"),Se=require("@turf/boolean-point-in-polygon"),xe=require("d3-geo-voronoi"),se=require("d3-scale"),we=0,je=1,Ae=2,Ce=!1;class fe{constructor(){this.resources=new Set,this.disposeMaterial=!0,this.disposeVideo=!0}track(e){if(!e)return e;if(Array.isArray(e))return e.forEach(t=>this.track(t)),e;if(!this.disposeMaterial&&e instanceof o.Material)return e;if(e instanceof Y?(e.disposeTrack&&e.object3d?this.track(e.object3d):this.resources.add(e),Object.values(e.materialList).map(t=>this.track(t))):(e instanceof o.Object3D||Reflect.has(e,"dispose"))&&this.resources.add(e),e instanceof Y)e.children.forEach(t=>{t.disposeTrack=!1}),this.track(e.children);else if(e instanceof o.Object3D){const t=e;this.track(t.geometry),this.track(t.material),this.track(t.children)}else if(e instanceof o.Material){for(const r of Object.values(e))r instanceof o.Texture&&this.track(r);const t=e;if(t.uniforms){for(const r of Object.values(t.uniforms))if(r){const i=r.value;(i instanceof o.Texture||Array.isArray(i))&&this.track(i)}}}else this.disposeVideo&&e instanceof o.VideoTexture&&e.source.data&&this.resources.add(e.source.data);return e}dispose(){const e=[];for(const t of this.resources)t instanceof o.Object3D?e.push(t):t instanceof HTMLVideoElement&&t.pause(),Reflect.has(t,"dispose")&&t.dispose();e.forEach(t=>{t.removeFromParent()}),e.length=0,this.resources.clear()}}const Pe=(n,e=1)=>{const t=new o.BufferGeometry;t.setAttribute("position",new o.Float32BufferAttribute(new Array(e*3).fill(0),3)),t.setAttribute("scaleAtt",new o.Float32BufferAttribute(new Array(e).fill(1),1));const r=n.material,i=new o.PointsMaterial({size:10,map:r.map,alphaMap:r.alphaMap,color:r.color,blending:r.blending,depthTest:r.depthTest,depthWrite:!1,opacity:r.opacity,transparent:!0,alphaTest:r.alphaTest,sizeAttenuation:!1});return i.onBeforeCompile=c=>{c.vertexShader=`
2
2
  attribute float scaleAtt;
3
3
  ${c.vertexShader.replace("gl_PointSize = size;","gl_PointSize = size * scaleAtt;")}
4
- `},new o.Points(t,i)},Be=(n,e)=>{const t=new o.Object3D;e.forEach((r,i)=>{const c=Q.parseVector3(r.position),u=Q.parseVector3(r.scale||[1,1,1]);t.position.copy(c),t.scale.copy(u),t.updateMatrix();const s=t.matrix.clone();if(n instanceof o.InstancedMesh||n.isInstantiate)n.setMatrixAt(i,s);else if(n instanceof o.Points||n.type==="Points"){const a=n.geometry,p=a.attributes.position.array,f=a.attributes.scaleAtt.array,m=new o.Vector3,d=new o.Vector3,v=new o.Quaternion,h=i*3,y=i*1;s.decompose(m,v,d),p[h]=m.x,p[h+1]=m.y,p[h+2]=m.z,f[y]=Math.max(d.x,d.y,d.z),a.attributes.position.needsUpdate=!0,a.attributes.scaleAtt.needsUpdate=!0}})};class Ie{constructor(){this.onPointerIndex=[]}onPointerEvent(e,t){const r=this.lead.handlePick([this],e,t);this.onPointerIndex.push(r)}onClick(e){this.onPointerEvent("click",e)}onPointerEnter(e){this.onPointerEvent("enter",e)}onPointerLeave(e){this.onPointerEvent("leave",e)}onPointerMove(e){this.onPointerEvent("move",e)}onPointerDown(e){this.onPointerEvent("down",e)}dispose(){this.onPointerIndex.forEach(e=>{this.lead.removePick(e)})}}class De extends Ie{constructor(){super(...arguments),this.userData={},this.materialList={},this.useMaterialType="origin",this.disposeMaterialIfNotUsed=!0}cloneMaterial(){const e=this.object3d;if(!e||!e.material)return;const t=e.material;if(Array.isArray(t))return t.map(r=>{const i=r.userData;r.userData={};const c=r.clone();return r.userData=i,c});{const r=t.userData;t.userData={};const i=t.clone();return t.userData=r,i}}setMaterialList(e,t){const r=this.object3d;if(!r||!r.material)return;this.materialList.origin||(this.materialList.origin=r.material);const i=t==="clone"?this.cloneMaterial():Array.isArray(t)?t.slice():t;return this.materialList[e]=i,i}useMaterial(e){const t=this.object3d;!t||!t.material||this.useMaterialType===e||!this.materialList[e]||(this.useMaterialType=e,t.material=this.materialList[e])}useMListById(e,t){if(!this.mList)return;const r=this.mList.get(e);if(!r)return;const i=this.object3d;Array.isArray(i.material)&&t!==void 0?i.material[t]=r:i.material=r}useMListByName(e,t){if(!this.mList)return;const r=this.mList.getKeyByName(e);r&&this.useMListById(r,t)}dispose(){super.dispose(),this.mList.rmBaseObjectMap(this,void 0,this.disposeMaterialIfNotUsed)}}class Y extends De{constructor(){super(...arguments),this.objectType="BaseObject",this.userData={},this.prefab=!1,this.isInstantiate=!1,this.isBloom=!1,this.disposeTrack=!0}get parent(){const e=this.object3d.parent;return e&&this.lead.objMap.get(e)||null}get children(){return this.object3d.children.map(e=>this.lead.objMap.get(e)).filter(e=>!!e)}get position(){return this.object3d.position}get rotation(){return this.object3d.rotation}get scale(){return this.object3d.scale}get lookAt(){return this.object3d.lookAt}add(...e){[...e].forEach(t=>{this.lead.objMap.get(t)?this.object3d.add(t):this.lead.createBaseObject(t,{target:this})})}remove(...e){[...e].forEach(t=>{var r;this.lead.objMap.get(t)?(r=this.lead.objMap.get(t))==null||r.erase():this.object3d.remove(t)})}get visible(){return this.object3d.visible}get visibleWithAncestors(){if(this.visible){let e=this.parent;for(;e;){if(!e.visible)return!1;e=e.parent}return!0}else return!1}create(){this.createGroup()}render(){}update(e,t){}resize(e,t){}show(){return this.object3d.visible=!0,this.object3d.layers.set(we),this}hide(){return this.object3d.visible=!1,this.object3d.layers.set(Ae),this}createGroup(){return this.object3d=new o.Group,this}createMesh(...e){return this.object3d=new o.Mesh(...e),this}createPoints(...e){return this.object3d=new o.Points(...e),this}createCSS2DObject(e){return this.object3d=new ye.CSS2DObject(e),this}createCSS3DObject(e){return this.object3d=new ne.CSS3DObject(e),this}createCSS3DSprite(e){return this.object3d=new ne.CSS3DSprite(e),this}createSprite(e){return this.object3d=new o.Sprite(e),this}attach(...e){return[...e].forEach(t=>{this.object3d.attach(t.object3d)}),this}getSize(){const e=new o.Box3().setFromObject(this.object3d);return{min:e.min,max:e.max,size:e.getSize(new o.Vector3),center:e.getCenter(new o.Vector3)}}setTop(e){this.object3d&&(this.object3d.renderOrder=e)}traverse(e){e(this),this.children.forEach(t=>{t.traverse(e)})}instantiate(e){return ie(this,null,function*(){var l;const t=(l=e==null?void 0:e.recursive)!=null?l:!0,{objectType:r,objectOptions:i}=this,[,c]=r.split("#");let u=e==null?void 0:e.create;u===void 0&&(u=a=>{var p;if(this.object3d){if((p=e==null?void 0:e.instancedAttr)!=null&&p.length){const f=e.instancedAttr.length;if(this.object3d instanceof o.Sprite)a.object3d=Pe(this.object3d,f);else{const m=this.object3d,d=this.cloneMaterial();a.object3d=new o.InstancedMesh(m.geometry,d,f)}Be(a.object3d,e==null?void 0:e.instancedAttr)}else a.object3d=this.object3d.clone(!1),a.object3d.material&&(a.object3d.material=this.cloneMaterial());a.object3d.userData.prefab&&delete a.object3d.userData.prefab}});const s=yield this.lead.draw(c,q(_({},i||{}),{create:u,prefab:!1,key:(e==null?void 0:e.key)||(i==null?void 0:i.key),target:(e==null?void 0:e.target)||(i==null?void 0:i.target)}));return this.isBloom&&s.enableBloom(),t&&(yield Promise.all(this.children.map(a=>a.instantiate({target:s})))),s.isInstantiate=!0,s})}erase(){this.lead.erase(this)}enableBloom(){var e;(e=this.pencil.composerController)==null||e.setBloomSelection(this,!0),this.isBloom=!0}disableBloom(){var e;(e=this.pencil.composerController)==null||e.setBloomSelection(this,!1),this.isBloom=!1}dispose(){var e;if(super.dispose(),(e=this.pencil.composerController)==null||e.bloomSelection.delete(this),this.lead&&(this.lead.objects.delete(this.key),this.lead.objectWrapChindIdMap.delete(this),this.object3d&&this.lead.objMap.delete(this.object3d)),this.disposeTrack){const t=new fe;t.disposeMaterial=!1,t.track(this),t.dispose()}}}const F=new o.Vector4,oe=new o.Vector3,ae=new o.Vector3,g=new o.Vector4,M=new o.Vector4,D=new o.Vector4,$=new o.Vector3,K=new o.Matrix4,S=new o.Line3,ce=new o.Vector3,N=new o.Box3,U=new o.Sphere,V=new o.Vector4;let T,E;function le(n,e,t){return V.set(0,0,-e,1).applyMatrix4(n.projectionMatrix),V.multiplyScalar(1/V.w),V.x=E/t.width,V.y=E/t.height,V.applyMatrix4(n.projectionMatrixInverse),V.multiplyScalar(1/V.w),Math.abs(Math.max(V.x,V.y))}function Ve(n,e){const t=n.matrixWorld,r=n.geometry,i=r.attributes.instanceStart,c=r.attributes.instanceEnd,u=Math.min(r.instanceCount,i.count);for(let s=0,l=u;s<l;s++){S.start.fromBufferAttribute(i,s),S.end.fromBufferAttribute(c,s),S.applyMatrix4(t);const a=new o.Vector3,p=new o.Vector3;T.distanceSqToSegment(S.start,S.end,p,a),p.distanceTo(a)<E*.5&&e.push({point:p,pointOnLine:a,distance:T.origin.distanceTo(p),object:n,face:null,faceIndex:s,uv:null,uv1:null})}}function Te(n,e,t){const r=e.projectionMatrix,c=n.material.resolution,u=n.matrixWorld,s=n.geometry,l=s.attributes.instanceStart,a=s.attributes.instanceEnd,p=Math.min(s.instanceCount,l.count),f=-e.near;T.at(1,D),D.w=1,D.applyMatrix4(e.matrixWorldInverse),D.applyMatrix4(r),D.multiplyScalar(1/D.w),D.x*=c.x/2,D.y*=c.y/2,D.z=0,$.copy(D),K.multiplyMatrices(e.matrixWorldInverse,u);for(let m=0,d=p;m<d;m++){if(g.fromBufferAttribute(l,m),M.fromBufferAttribute(a,m),g.w=1,M.w=1,g.applyMatrix4(K),M.applyMatrix4(K),g.z>f&&M.z>f)continue;if(g.z>f){const j=g.z-M.z,A=(g.z-f)/j;g.lerp(M,A)}else if(M.z>f){const j=M.z-g.z,A=(M.z-f)/j;M.lerp(g,A)}g.applyMatrix4(r),M.applyMatrix4(r),g.multiplyScalar(1/g.w),M.multiplyScalar(1/M.w),g.x*=c.x/2,g.y*=c.y/2,M.x*=c.x/2,M.y*=c.y/2,S.start.copy(g),S.start.z=0,S.end.copy(M),S.end.z=0;const h=S.closestPointToPointParameter($,!0);S.at(h,ce);const y=o.MathUtils.lerp(g.z,M.z,h),w=y>=-1&&y<=1,I=$.distanceTo(ce)<E*.5;if(w&&I){S.start.fromBufferAttribute(l,m),S.end.fromBufferAttribute(a,m),S.start.applyMatrix4(u),S.end.applyMatrix4(u);const j=new o.Vector3,A=new o.Vector3;T.distanceSqToSegment(S.start,S.end,A,j),t.push({point:A,pointOnLine:j,distance:T.origin.distanceTo(A),object:n,face:null,faceIndex:m,uv:null,uv1:null})}}}class ze extends o.Mesh{constructor(e=new be.LineSegmentsGeometry,t){super(e,t),this.isLineSegments2=!0,this.type="LineSegments2"}computeLineDistances(){const e=this.geometry,t=e.attributes.instanceStart,r=e.attributes.instanceEnd,i=new Float32Array(2*t.count);for(let u=0,s=0,l=t.count;u<l;u++,s+=2)oe.fromBufferAttribute(t,u),ae.fromBufferAttribute(r,u),i[s]=s===0?0:i[s-1],i[s+1]=i[s]+oe.distanceTo(ae);const c=new o.InstancedInterleavedBuffer(i,2,1);return e.setAttribute("instanceDistanceStart",new o.InterleavedBufferAttribute(c,1,0)),e.setAttribute("instanceDistanceEnd",new o.InterleavedBufferAttribute(c,1,1)),this}raycast(e,t){const r=this.material.worldUnits,i=e.camera;i===null&&!r&&console.error('LineSegments2: "Raycaster.camera" needs to be set in order to raycast against LineSegments2 while worldUnits is set to false.');const c=e.params.Line2!==void 0&&e.params.Line2.threshold||0;T=e.ray;const u=this.matrixWorld,s=this.geometry,l=this.material;E=l.linewidth+c,s.boundingSphere===null&&s.computeBoundingSphere(),U.copy(s.boundingSphere).applyMatrix4(u);let a;if(r)a=E*.5;else{const f=Math.max(i.near,U.distanceToPoint(T.origin));a=le(i,f,l.resolution)}if(U.radius+=a,T.intersectsSphere(U)===!1)return;s.boundingBox===null&&s.computeBoundingBox(),N.copy(s.boundingBox).applyMatrix4(u);let p;if(r)p=E*.5;else{const f=Math.max(i.near,N.distanceToPoint(T.origin));p=le(i,f,l.resolution)}N.expandByScalar(p),T.intersectsBox(N)!==!1&&(r?Ve(this,t):Te(this,i,t))}onBeforeRender(e){const t=this.material.uniforms;t&&t.resolution&&(e.getViewport(F),this.material.uniforms.resolution.value.set(F.z,F.w))}}const Ee=`
4
+ `},new o.Points(t,i)},Be=(n,e)=>{const t=new o.Object3D;e.forEach((r,i)=>{const c=Q.parseVector3(r.position),u=Q.parseVector3(r.scale||[1,1,1]);t.position.copy(c),t.scale.copy(u),t.updateMatrix();const s=t.matrix.clone();if(n instanceof o.InstancedMesh||n.isInstantiate)n.setMatrixAt(i,s);else if(n instanceof o.Points||n.type==="Points"){const a=n.geometry,p=a.attributes.position.array,f=a.attributes.scaleAtt.array,m=new o.Vector3,d=new o.Vector3,v=new o.Quaternion,h=i*3,y=i*1;s.decompose(m,v,d),p[h]=m.x,p[h+1]=m.y,p[h+2]=m.z,f[y]=Math.max(d.x,d.y,d.z),a.attributes.position.needsUpdate=!0,a.attributes.scaleAtt.needsUpdate=!0}})};class Ie{constructor(){this.onPointerIndex=[]}onPointerEvent(e,t){const r=this.lead.handlePick([this],e,t);this.onPointerIndex.push(r)}onClick(e){this.onPointerEvent("click",e)}onPointerEnter(e){this.onPointerEvent("enter",e)}onPointerLeave(e){this.onPointerEvent("leave",e)}onPointerMove(e){this.onPointerEvent("move",e)}onPointerDown(e){this.onPointerEvent("down",e)}dispose(){this.onPointerIndex.forEach(e=>{this.lead.removePick(e)})}}class De extends Ie{constructor(){super(...arguments),this.userData={},this.materialList={},this.useMaterialType="origin",this.disposeMaterialIfNotUsed=!0}cloneMaterial(){const e=this.object3d;if(!e||!e.material)return;const t=e.material;if(Array.isArray(t))return t.map(r=>{const i=r.userData;r.userData={};const c=r.clone();return r.userData=i,c});{const r=t.userData;t.userData={};const i=t.clone();return t.userData=r,i}}setMaterialList(e,t){const r=this.object3d;if(!r||!r.material)return;this.materialList.origin||(this.materialList.origin=r.material);const i=t==="clone"?this.cloneMaterial():Array.isArray(t)?t.slice():t;return this.materialList[e]=i,i}useMaterial(e){const t=this.object3d;!t||!t.material||this.useMaterialType===e||!this.materialList[e]||(this.useMaterialType=e,t.material=this.materialList[e])}useMListById(e,t){if(!this.mList)return;const r=this.mList.get(e);if(!r)return;const i=this.object3d;Array.isArray(i.material)&&t!==void 0?i.material[t]=r:i.material=r}useMListByName(e,t){if(!this.mList)return;const r=this.mList.getKeyByName(e);r&&this.useMListById(r,t)}dispose(){super.dispose(),this.mList.rmBaseObjectMap(this,void 0,this.disposeMaterialIfNotUsed)}}class Y extends De{constructor(){super(...arguments),this.objectType="BaseObject",this.userData={},this.prefab=!1,this.isInstantiate=!1,this.isBloom=!1,this.disposeTrack=!0}get parent(){const e=this.object3d.parent;return e&&this.lead.objMap.get(e)||null}get children(){return this.object3d.children.map(e=>this.lead.objMap.get(e)).filter(e=>!!e)}get position(){return this.object3d.position}get rotation(){return this.object3d.rotation}get scale(){return this.object3d.scale}get lookAt(){return this.object3d.lookAt}add(...e){[...e].forEach(t=>{this.lead.objMap.get(t)?this.object3d.add(t):this.lead.createBaseObject(t,{target:this})})}remove(...e){[...e].forEach(t=>{var r;this.lead.objMap.get(t)?(r=this.lead.objMap.get(t))==null||r.erase():this.object3d.remove(t)})}get visible(){return this.object3d.visible}get visibleWithAncestors(){if(this.visible){let e=this.parent;for(;e;){if(!e.visible)return!1;e=e.parent}return!0}else return!1}create(){this.createGroup()}render(){}update(e,t){}resize(e,t){}show(){return this.object3d.visible=!0,this.object3d.layers.set(we),this}hide(){return this.object3d.visible=!1,this.object3d.layers.set(Ae),this}createGroup(){return this.object3d=new o.Group,this}createMesh(...e){return this.object3d=new o.Mesh(...e),this}createPoints(...e){return this.object3d=new o.Points(...e),this}createCSS2DObject(e){return this.object3d=new ye.CSS2DObject(e),this}createCSS3DObject(e){return this.object3d=new ne.CSS3DObject(e),this}createCSS3DSprite(e){return this.object3d=new ne.CSS3DSprite(e),this}createSprite(e){return this.object3d=new o.Sprite(e),this}attach(...e){return[...e].forEach(t=>{this.object3d.attach(t.object3d)}),this}getSize(){const e=new o.Box3().setFromObject(this.object3d);return{min:e.min,max:e.max,size:e.getSize(new o.Vector3),center:e.getCenter(new o.Vector3)}}setTop(e){this.object3d&&(this.object3d.renderOrder=e)}traverse(e){e(this),this.children.forEach(t=>{t.traverse(e)})}instantiate(e){return ie(this,null,function*(){var l;const t=(l=e==null?void 0:e.recursive)!=null?l:!0,{objectType:r,objectOptions:i}=this,[,c]=r.split("#");let u=e==null?void 0:e.create;u===void 0&&(u=a=>{var p;if(this.object3d){if((p=e==null?void 0:e.instancedAttr)!=null&&p.length){const f=e.instancedAttr.length;if(this.object3d instanceof o.Sprite)a.object3d=Pe(this.object3d,f);else{const m=this.object3d,d=this.cloneMaterial();a.object3d=new o.InstancedMesh(m.geometry,d,f)}Be(a.object3d,e==null?void 0:e.instancedAttr)}else a.object3d=this.object3d.clone(!1),a.object3d.material&&(a.object3d.material=this.cloneMaterial());a.object3d.userData.prefab&&delete a.object3d.userData.prefab}});const s=yield this.lead.draw(c,q(_({},i||{}),{create:u,prefab:!1,key:(e==null?void 0:e.key)||(i==null?void 0:i.key),target:(e==null?void 0:e.target)||(i==null?void 0:i.target)}));return this.isBloom&&s.enableBloom(),t&&(yield Promise.all(this.children.map(a=>a.instantiate({target:s})))),s.isInstantiate=!0,s})}erase(){this.lead.erase(this)}handleMaterialChange(e){}enableBloom(){var e;(e=this.pencil.composerController)==null||e.setBloomSelection(this,!0),this.isBloom=!0}disableBloom(){var e;(e=this.pencil.composerController)==null||e.setBloomSelection(this,!1),this.isBloom=!1}dispose(){var e;if(super.dispose(),(e=this.pencil.composerController)==null||e.bloomSelection.delete(this),this.lead&&(this.lead.objects.delete(this.key),this.lead.objectWrapChindIdMap.delete(this),this.object3d&&this.lead.objMap.delete(this.object3d)),this.disposeTrack){const t=new fe;t.disposeMaterial=!1,t.track(this),t.dispose()}}}const F=new o.Vector4,oe=new o.Vector3,ae=new o.Vector3,g=new o.Vector4,M=new o.Vector4,D=new o.Vector4,$=new o.Vector3,K=new o.Matrix4,S=new o.Line3,ce=new o.Vector3,N=new o.Box3,U=new o.Sphere,V=new o.Vector4;let T,E;function le(n,e,t){return V.set(0,0,-e,1).applyMatrix4(n.projectionMatrix),V.multiplyScalar(1/V.w),V.x=E/t.width,V.y=E/t.height,V.applyMatrix4(n.projectionMatrixInverse),V.multiplyScalar(1/V.w),Math.abs(Math.max(V.x,V.y))}function Ve(n,e){const t=n.matrixWorld,r=n.geometry,i=r.attributes.instanceStart,c=r.attributes.instanceEnd,u=Math.min(r.instanceCount,i.count);for(let s=0,l=u;s<l;s++){S.start.fromBufferAttribute(i,s),S.end.fromBufferAttribute(c,s),S.applyMatrix4(t);const a=new o.Vector3,p=new o.Vector3;T.distanceSqToSegment(S.start,S.end,p,a),p.distanceTo(a)<E*.5&&e.push({point:p,pointOnLine:a,distance:T.origin.distanceTo(p),object:n,face:null,faceIndex:s,uv:null,uv1:null})}}function Te(n,e,t){const r=e.projectionMatrix,c=n.material.resolution,u=n.matrixWorld,s=n.geometry,l=s.attributes.instanceStart,a=s.attributes.instanceEnd,p=Math.min(s.instanceCount,l.count),f=-e.near;T.at(1,D),D.w=1,D.applyMatrix4(e.matrixWorldInverse),D.applyMatrix4(r),D.multiplyScalar(1/D.w),D.x*=c.x/2,D.y*=c.y/2,D.z=0,$.copy(D),K.multiplyMatrices(e.matrixWorldInverse,u);for(let m=0,d=p;m<d;m++){if(g.fromBufferAttribute(l,m),M.fromBufferAttribute(a,m),g.w=1,M.w=1,g.applyMatrix4(K),M.applyMatrix4(K),g.z>f&&M.z>f)continue;if(g.z>f){const j=g.z-M.z,A=(g.z-f)/j;g.lerp(M,A)}else if(M.z>f){const j=M.z-g.z,A=(M.z-f)/j;M.lerp(g,A)}g.applyMatrix4(r),M.applyMatrix4(r),g.multiplyScalar(1/g.w),M.multiplyScalar(1/M.w),g.x*=c.x/2,g.y*=c.y/2,M.x*=c.x/2,M.y*=c.y/2,S.start.copy(g),S.start.z=0,S.end.copy(M),S.end.z=0;const h=S.closestPointToPointParameter($,!0);S.at(h,ce);const y=o.MathUtils.lerp(g.z,M.z,h),w=y>=-1&&y<=1,I=$.distanceTo(ce)<E*.5;if(w&&I){S.start.fromBufferAttribute(l,m),S.end.fromBufferAttribute(a,m),S.start.applyMatrix4(u),S.end.applyMatrix4(u);const j=new o.Vector3,A=new o.Vector3;T.distanceSqToSegment(S.start,S.end,A,j),t.push({point:A,pointOnLine:j,distance:T.origin.distanceTo(A),object:n,face:null,faceIndex:m,uv:null,uv1:null})}}}class ze extends o.Mesh{constructor(e=new be.LineSegmentsGeometry,t){super(e,t),this.isLineSegments2=!0,this.type="LineSegments2"}computeLineDistances(){const e=this.geometry,t=e.attributes.instanceStart,r=e.attributes.instanceEnd,i=new Float32Array(2*t.count);for(let u=0,s=0,l=t.count;u<l;u++,s+=2)oe.fromBufferAttribute(t,u),ae.fromBufferAttribute(r,u),i[s]=s===0?0:i[s-1],i[s+1]=i[s]+oe.distanceTo(ae);const c=new o.InstancedInterleavedBuffer(i,2,1);return e.setAttribute("instanceDistanceStart",new o.InterleavedBufferAttribute(c,1,0)),e.setAttribute("instanceDistanceEnd",new o.InterleavedBufferAttribute(c,1,1)),this}raycast(e,t){const r=this.material.worldUnits,i=e.camera;i===null&&!r&&console.error('LineSegments2: "Raycaster.camera" needs to be set in order to raycast against LineSegments2 while worldUnits is set to false.');const c=e.params.Line2!==void 0&&e.params.Line2.threshold||0;T=e.ray;const u=this.matrixWorld,s=this.geometry,l=this.material;E=l.linewidth+c,s.boundingSphere===null&&s.computeBoundingSphere(),U.copy(s.boundingSphere).applyMatrix4(u);let a;if(r)a=E*.5;else{const f=Math.max(i.near,U.distanceToPoint(T.origin));a=le(i,f,l.resolution)}if(U.radius+=a,T.intersectsSphere(U)===!1)return;s.boundingBox===null&&s.computeBoundingBox(),N.copy(s.boundingBox).applyMatrix4(u);let p;if(r)p=E*.5;else{const f=Math.max(i.near,N.distanceToPoint(T.origin));p=le(i,f,l.resolution)}N.expandByScalar(p),T.intersectsBox(N)!==!1&&(r?Ve(this,t):Te(this,i,t))}onBeforeRender(e){const t=this.material.uniforms;t&&t.resolution&&(e.getViewport(F),this.material.uniforms.resolution.value.set(F.z,F.w))}}const Ee=`
5
5
  #include <fog_pars_fragment>
6
6
  #include <logdepthbuf_pars_fragment>
7
7
 
@@ -88,7 +88,7 @@ void main() {
88
88
  vec2 prevScreen = intoScreen(prevNormed);
89
89
  vec2 nextScreen = intoScreen(nextNormed);
90
90
 
91
- float actualWidth = lineWidth * width *0.3;
91
+ float actualWidth = lineWidth * width;
92
92
 
93
93
  vec2 dir;
94
94
  if(nextScreen == currentScreen) {
@@ -1 +1 @@
1
- "use strict";var $e=Object.defineProperty,Xe=Object.defineProperties;var Ye=Object.getOwnPropertyDescriptors;var ce=Object.getOwnPropertySymbols;var Ee=Object.prototype.hasOwnProperty,_e=Object.prototype.propertyIsEnumerable;var Be=(a,e,t)=>e in a?$e(a,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):a[e]=t,E=(a,e)=>{for(var t in e||(e={}))Ee.call(e,t)&&Be(a,t,e[t]);if(ce)for(var t of ce(e))_e.call(e,t)&&Be(a,t,e[t]);return a},le=(a,e)=>Xe(a,Ye(e));var me=(a,e)=>{var t={};for(var n in a)Ee.call(a,n)&&e.indexOf(n)<0&&(t[n]=a[n]);if(a!=null&&ce)for(var n of ce(a))e.indexOf(n)<0&&_e.call(a,n)&&(t[n]=a[n]);return t};var ne=(a,e,t)=>new Promise((n,s)=>{var o=r=>{try{p(t.next(r))}catch(y){s(y)}},l=r=>{try{p(t.throw(r))}catch(y){s(y)}},p=r=>r.done?n(r.value):Promise.resolve(r.value).then(o,l);p((t=t.apply(a,e)).next())});Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const _=require("../index2.js"),u=require("three"),Ze=require("@tweenjs/tween.js"),Je=require("three/examples/jsm/lights/RectAreaLightUniformsLib"),pe=require("three/examples/jsm/utils/BufferGeometryUtils"),Qe=require("three/examples/jsm/lines/LineSegments2"),Re=require("three/examples/jsm/lines/LineSegmentsGeometry"),De=require("three/examples/jsm/lines/LineMaterial"),Pe=require("../uvGenerator.js"),he=require("three-bvh-csg");function Ke(a){const e=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(a){for(const t in a)if(t!=="default"){const n=Object.getOwnPropertyDescriptor(a,t);Object.defineProperty(e,t,n.get?n:{enumerable:!0,get:()=>a[t]})}}return e.default=a,Object.freeze(e)}const K=Ke(Ze);class et extends _.BaseObject{constructor(e){super(),this.objectType="BaseObject#Node",this.onNodePointerIndex=[],this.options=E({type:"2d"},e)}create(){const{position:e,children:t}=this.options,n=document.createElement("div");this.element=n,t&&n.appendChild(t),this.options.type==="3d"?this.createCSS3DObject(n):this.options.type==="3dSprite"?this.createCSS3DSprite(n):this.createCSS2DObject(n),e&&this.object3d.position.copy(e)}setChildren(e){this.options.children=e,this.element.innerHTML="",this.element.appendChild(e)}showAndEnsureVisible(){const e=this.options.children;e&&(e.style.visibility="hidden",this.show(),setTimeout(()=>{e.style.visibility="",this.ensureVisible()}))}moveElementToViewport(){const e=this.options.children;if(!e)return;const t=e.getBoundingClientRect(),n=window.innerWidth,s=window.innerHeight;let o=0,l=0;t.left<0?o=-t.left:t.right>n&&(o=n-t.right),t.top<0?l=-t.top:t.bottom>s&&(l=s-t.bottom),t.left+o<0&&(o=-t.left),t.top+l<0&&(l=-t.top),(o!==0||l!==0)&&(e.style.transform=`translate(${o}px, ${l}px)`)}ensureVisible(){const e=this.options.children;if(!e)return;e.style.transform&&(e.style.transform="");const t=new IntersectionObserver(n=>{n.forEach(s=>{s.isIntersecting&&(this.moveElementToViewport(),t.disconnect())})});t.observe(e)}onPointerEvent(e,t){const n=this.lead.handlePickNode([this],e,t);this.onNodePointerIndex.push(n)}dispose(){this.onNodePointerIndex.forEach(e=>{this.lead.removePickNode(e)}),super.dispose()}}class tt extends _.BaseObject{create(){this.createGroup()}}const nt={ArcCurve:u.ArcCurve,CatmullRomCurve3:u.CatmullRomCurve3,CubicBezierCurve:u.CubicBezierCurve,CubicBezierCurve3:u.CubicBezierCurve3,EllipseCurve:u.EllipseCurve,LineCurve:u.LineCurve,LineCurve3:u.LineCurve3,QuadraticBezierCurve:u.QuadraticBezierCurve,QuadraticBezierCurve3:u.QuadraticBezierCurve3,SplineCurve:u.SplineCurve};class Z extends u.BufferGeometry{constructor(e=new u.Shape([new u.Vector2(.5,.5),new u.Vector2(-.5,.5),new u.Vector2(-.5,-.5),new u.Vector2(.5,-.5)]),t={}){super(),this.type="ExtrudeGeometry",this.parameters={shapes:e,options:t},e=Array.isArray(e)?e:[e];const n=this,s=[],o=[];for(let p=0,r=e.length;p<r;p++){const y=e[p];l(y)}this.setAttribute("position",new u.Float32BufferAttribute(s,3)),this.setAttribute("uv",new u.Float32BufferAttribute(o,2)),this.computeVertexNormals();function l(p){var Se,Ae,Me;const r=[],y=t.curveSegments!==void 0?t.curveSegments:12,i=t.steps!==void 0?t.steps:1,c=t.depth!==void 0?t.depth:1;let x=t.bevelEnabled!==void 0?t.bevelEnabled:!0,f=t.bevelThickness!==void 0?t.bevelThickness:.2,w=t.bevelSize!==void 0?t.bevelSize:f-.1,T=t.bevelOffset!==void 0?t.bevelOffset:0,L=t.bevelSegments!==void 0?t.bevelSegments:3;const M=t.extrudePath,B=t.UVGenerator!==void 0?t.UVGenerator:st,S=(Se=t.hasTop)!=null?Se:!0,I=(Ae=t.hasBottom)!=null?Ae:!0,ue=(Me=t.hasSide)!=null?Me:!0;let F,J=!1,$,ee,te,D;M&&(F=M.getSpacedPoints(i),J=!0,x=!1,$=M.computeFrenetFrames(i,!1),ee=new u.Vector3,te=new u.Vector3,D=new u.Vector3),x||(L=0,f=0,w=0,T=0);const ye=p.extractPoints(y);let z=ye.shape;const P=ye.holes;if(!u.ShapeUtils.isClockWise(z)){z=z.reverse();for(let h=0,d=P.length;h<d;h++){const m=P[h];u.ShapeUtils.isClockWise(m)&&(P[h]=m.reverse())}}function be(h){const m=10000000000000001e-36;let b=h[0];for(let g=1;g<=h.length;g++){const A=g%h.length,v=h[A],C=v.x-b.x,G=v.y-b.y,j=C*C+G*G,V=Math.max(Math.abs(v.x),Math.abs(v.y),Math.abs(b.x),Math.abs(b.y)),Y=m*V*V;if(j<=Y){h.splice(A,1),g--;continue}b=v}}be(z),P.forEach(be);const fe=P.length,U=z;for(let h=0;h<fe;h++){const d=P[h];z=z.concat(d)}function Q(h,d,m){return d||console.error("THREE.ExtrudeGeometry: vec does not exist"),h.clone().addScaledVector(d,m)}const H=z.length;function xe(h,d,m){let b,g,A;const v=h.x-d.x,C=h.y-d.y,G=m.x-h.x,j=m.y-h.y,V=v*v+C*C,Y=v*j-C*G;if(Math.abs(Y)>Number.EPSILON){const O=Math.sqrt(V),Le=Math.sqrt(G*G+j*j),Te=d.x-C/O,Ce=d.y+v/O,ke=m.x-j/Le,Fe=m.y+G/Le,Ge=((ke-Te)*j-(Fe-Ce)*G)/(v*j-C*G);b=Te+v*Ge-h.x,g=Ce+C*Ge-h.y;const je=b*b+g*g;if(je<=2)return new u.Vector2(b,g);A=Math.sqrt(je/2)}else{let O=!1;v>Number.EPSILON?G>Number.EPSILON&&(O=!0):v<-Number.EPSILON?G<-Number.EPSILON&&(O=!0):Math.sign(C)===Math.sign(j)&&(O=!0),O?(b=-C,g=v,A=Math.sqrt(V)):(b=v,g=C,A=Math.sqrt(V/2))}return new u.Vector2(b/A,g/A)}const ie=[];for(let h=0,d=U.length,m=d-1,b=h+1;h<d;h++,m++,b++)m===d&&(m=0),b===d&&(b=0),ie[h]=xe(U[h],U[m],U[b]);const de=[];let k,oe=ie.concat();for(let h=0,d=fe;h<d;h++){const m=P[h];k=[];for(let b=0,g=m.length,A=g-1,v=b+1;b<g;b++,A++,v++)A===g&&(A=0),v===g&&(v=0),k[b]=xe(m[b],m[A],m[v]);de.push(k),oe=oe.concat(k)}let X;if(L===0)X=u.ShapeUtils.triangulateShape(U,P);else{const h=[],d=[];for(let m=0;m<L;m++){const b=m/L,g=f*Math.cos(b*Math.PI/2),A=w*Math.sin(b*Math.PI/2)+T;for(let v=0,C=U.length;v<C;v++){const G=Q(U[v],ie[v],A);N(G.x,G.y,-g),b===0&&h.push(G)}for(let v=0,C=fe;v<C;v++){const G=P[v];k=de[v];const j=[];for(let V=0,Y=G.length;V<Y;V++){const O=Q(G[V],k[V],A);N(O.x,O.y,-g),b===0&&j.push(O)}b===0&&d.push(j)}}X=u.ShapeUtils.triangulateShape(h,d)}const re=X.length,we=w+T;for(let h=0;h<H;h++){const d=x?Q(z[h],oe[h],we):z[h];J?(te.copy($.normals[0]).multiplyScalar(d.x),ee.copy($.binormals[0]).multiplyScalar(d.y),D.copy(F[0]).add(te).add(ee),N(D.x,D.y,D.z)):N(d.x,d.y,0)}for(let h=1;h<=i;h++)for(let d=0;d<H;d++){const m=x?Q(z[d],oe[d],we):z[d];J?(te.copy($.normals[h]).multiplyScalar(m.x),ee.copy($.binormals[h]).multiplyScalar(m.y),D.copy(F[h]).add(te).add(ee),N(D.x,D.y,D.z)):N(m.x,m.y,c/i*h)}for(let h=L-1;h>=0;h--){const d=h/L,m=f*Math.cos(d*Math.PI/2),b=w*Math.sin(d*Math.PI/2)+T;for(let g=0,A=U.length;g<A;g++){const v=Q(U[g],ie[g],b);N(v.x,v.y,c+m)}for(let g=0,A=P.length;g<A;g++){const v=P[g];k=de[g];for(let C=0,G=v.length;C<G;C++){const j=Q(v[C],k[C],b);J?N(j.x,j.y+F[i-1].y,F[i-1].x+m):N(j.x,j.y,c+m)}}}Ne(),ue&&We();function Ne(){const h=s.length/3;if(x){let d=0,m=H*d;if(I)for(let b=0;b<re;b++){const g=X[b];ae(g[2]+m,g[1]+m,g[0]+m)}if(d=i+L*2,m=H*d,S)for(let b=0;b<re;b++){const g=X[b];ae(g[0]+m,g[1]+m,g[2]+m)}}else{if(I)for(let d=0;d<re;d++){const m=X[d];ae(m[2],m[1],m[0])}if(S)for(let d=0;d<re;d++){const m=X[d];ae(m[0]+H*i,m[1]+H*i,m[2]+H*i)}}n.addGroup(h,s.length/3-h,0)}function We(){const h=s.length/3;let d=0;ve(U,d),d+=U.length;for(let m=0,b=P.length;m<b;m++){const g=P[m];ve(g,d),d+=g.length}n.addGroup(h,s.length/3-h,1)}function ve(h,d){let m=h.length;for(;--m>=0;){const b=m;let g=m-1;g<0&&(g=h.length-1);for(let A=0,v=i+L*2;A<v;A++){const C=H*A,G=H*(A+1),j=d+b+C,V=d+g+C,Y=d+g+G,O=d+b+G;qe(j,V,Y,O)}}}function N(h,d,m){r.push(h),r.push(d),r.push(m)}function ae(h,d,m){W(h),W(d),W(m);const b=s.length/3,g=B.generateTopUV(n,s,b-3,b-2,b-1);q(g[0]),q(g[1]),q(g[2])}function qe(h,d,m,b){W(h),W(d),W(b),W(d),W(m),W(b);const g=s.length/3,A=B.generateSideWallUV(n,s,g-6,g-3,g-2,g-1);q(A[0]),q(A[1]),q(A[3]),q(A[1]),q(A[2]),q(A[3])}function W(h){s.push(r[h*3+0]),s.push(r[h*3+1]),s.push(r[h*3+2])}function q(h){o.push(h.x),o.push(h.y)}}}copy(e){return super.copy(e),this.parameters=Object.assign({},e.parameters),this}toJSON(){const e=super.toJSON(),t=this.parameters.shapes,n=this.parameters.options;return it(t,n,e)}static fromJSON(e,t){const n=[];for(let o=0,l=e.shapes.length;o<l;o++){const p=t[e.shapes[o]];n.push(p)}const s=e.options.extrudePath;return s!==void 0&&(e.options.extrudePath=new nt[`${s.type}`]().fromJSON(s)),new Z(n,e.options)}}const st={generateTopUV:function(a,e,t,n,s){const o=e[t*3],l=e[t*3+1],p=e[n*3],r=e[n*3+1],y=e[s*3],i=e[s*3+1];return[new u.Vector2(o,l),new u.Vector2(p,r),new u.Vector2(y,i)]},generateSideWallUV:function(a,e,t,n,s,o){const l=e[t*3],p=e[t*3+1],r=e[t*3+2],y=e[n*3],i=e[n*3+1],c=e[n*3+2],x=e[s*3],f=e[s*3+1],w=e[s*3+2],T=e[o*3],L=e[o*3+1],M=e[o*3+2];return Math.abs(p-i)<Math.abs(l-y)?[new u.Vector2(l,1-r),new u.Vector2(y,1-c),new u.Vector2(x,1-w),new u.Vector2(T,1-M)]:[new u.Vector2(p,1-r),new u.Vector2(i,1-c),new u.Vector2(f,1-w),new u.Vector2(L,1-M)]}};function it(a,e,t){if(t.shapes=[],Array.isArray(a))for(let n=0,s=a.length;n<s;n++){const o=a[n];t.shapes.push(o.uuid)}else t.shapes.push(a.uuid);return t.options=Object.assign({},e),e.extrudePath!==void 0&&(t.options.extrudePath=e.extrudePath.toJSON()),t}class ot extends _.BaseObject{constructor(e){super(),this.options=E({maxDepth:10,percentDepth:!1,innerRadius:25,outRadius:42,activeIndex:-1},e)}create(){return ne(this,null,function*(){this.createGroup();const{data:e,maxDepth:t,colors:n,material:s,percentDepth:o,activeIndex:l}=this.options,p=Math.max(...e),r=e.reduce((i,c)=>i+c,0);let y=Math.PI/2;e.forEach((i,c)=>{if(i===0)return;const x=Math.PI*2*(i/r),f=n[c],w=o?t*(i/p):t,T=this.createGeometry(w,x),L=s?s.clone():new u.MeshBasicMaterial({color:f});s&&L.color.set(f);const M=new u.Mesh(T,L);M.userData.depth=w,M.userData.index=c,M.rotateZ(y),y+=x,this.add(M)}),l!==-1&&this.setActive(l)})}createGeometry(e,t){const{outRadius:n,innerRadius:s}=this.options,o=new u.Shape;return o.moveTo(n,0),o.lineTo(s,0),o.absarc(0,0,s,0,t,!1),o.absarc(0,0,n,t,0,!0),new Z(o,{curveSegments:48,depth:e,bevelEnabled:!1})}handlePick(e,t=1.3){const{object:n}=this.pencil.pick(e,this.object3d.children)||{},s=n?this.object3d.children.findIndex(o=>o===n):this.options.activeIndex;return this.setActive(s,t)}setActive(e,t=1.3){const n=this.object3d.children[e];if(this.object3d.children.forEach(s=>{if(!(n&&n===s)&&s.scale.z!==1){if(s.userData.levTween)return;s.userData.enTween&&(s.userData.enTween.stop(),s.userData.enTween=null);const o=new K.Tween(s.scale).to({z:1},100);s.userData.levTween=o,o.start()}}),n){if(n.userData.enTween)return;n.userData.levTween&&(n.userData.levTween.stop(),n.userData.levTween=null);const s=new K.Tween(n.scale).to({z:t},100);return n.userData.enTween=s,s.start(),n.userData.index}return-1}render(){this.object3d.scale.z=0,new K.Tween(this.object3d.scale).to({z:1},1e3).easing(K.Easing.Sinusoidal.InOut).start()}}class rt extends _.BaseObject{constructor(e){super(),this.rectAreaLightUniformsLibInit=!1,this.options=e}create(){var t,n,s,o,l,p,r,y,i,c,x,f,w,T,L,M,B;const e=this.options;if(e.type==="AmbientLight"){const S=new u.AmbientLight(e.color);S.name="环境光",this.object3d=S}else if(e.type==="DirectionalLight"){const S=new u.DirectionalLight(e.color,e.intensity);S.name="平行光",S.target.position.set(0,0,0),this.object3d=S,S.target.name="平行光目标",S.shadow.camera.name="平行光阴影相机",S.shadow.camera.userData.directionalLightShadow=!0,this.directionalLight=S}else if(e.type==="PointLight"){const S=new u.PointLight((t=e.color)!=null?t:16777215,(n=e.intensity)!=null?n:1,(s=e.distance)!=null?s:0,(o=e.decay)!=null?o:2);S.name="点光源",this.object3d=S,this.pointLight=S}else if(e.type==="SpotLight"){const S=new u.SpotLight((l=e.color)!=null?l:16777215,(p=e.intensity)!=null?p:1,(r=e.distance)!=null?r:0,(y=e.angle)!=null?y:Math.PI/3,(i=e.penumbra)!=null?i:1,(c=e.decay)!=null?c:2);S.name="聚光灯",this.object3d=S,this.spotLight=S,S.target.name="聚光灯目标"}else if(e.type==="HemisphereLight"){const S=new u.HemisphereLight((x=e.color)!=null?x:16777215,(f=e.groundColor)!=null?f:16777215,(w=e.intensity)!=null?w:1);S.name="半球光",this.object3d=S,this.hemisphereLight=S}else if(e.type==="RectAreaLight"){this.rectAreaLightUniformsLibInit||(Je.RectAreaLightUniformsLib.init(),this.rectAreaLightUniformsLibInit=!0);const S=new u.RectAreaLight((T=e.color)!=null?T:16777215,(L=e.intensity)!=null?L:1,(M=e.width)!=null?M:10,(B=e.height)!=null?B:10);S.name="矩形区域光",this.object3d=S,this.rectAreaLight=S}}render(){const e=this.object3d;e.target&&this.pencil.scene.add(e.target);const t=this.pencil.cameraTarget;if(this.spotLight||this.directionalLight){const n=this.spotLight||this.directionalLight;n.position.copy(t),n.target.position.copy(t)}else this.pointLight&&this.pointLight.position.copy(t)}dispose(){const e=this.object3d;e.target&&this.pencil.scene.remove(e.target),super.dispose()}}function R(a,e=0){const t=a[0].index!==null,n=new Set(Object.keys(a[0].attributes)),s=new Set(Object.keys(a[0].morphAttributes)),o={},l={},p=a[0].morphTargetsRelative,r=new u.BufferGeometry;let y=0;for(let i=0;i<a.length;++i){const c=a[i];let x=0;if(t!==(c.index!==null))return console.error("THREE.BufferGeometryUtils: .mergeGeometries() failed with geometry at index "+i+". All geometries must have compatible attributes; make sure index attribute exists among all geometries, or in none of them."),null;for(const f in c.attributes){if(!n.has(f))return console.error("THREE.BufferGeometryUtils: .mergeGeometries() failed with geometry at index "+i+'. All geometries must have compatible attributes; make sure "'+f+'" attribute exists among all geometries, or in none of them.'),null;o[f]===void 0&&(o[f]=[]),o[f].push(c.attributes[f]),x++}if(x!==n.size)return console.error("THREE.BufferGeometryUtils: .mergeGeometries() failed with geometry at index "+i+". Make sure all geometries have the same number of attributes."),null;if(p!==c.morphTargetsRelative)return console.error("THREE.BufferGeometryUtils: .mergeGeometries() failed with geometry at index "+i+". .morphTargetsRelative must be consistent throughout all geometries."),null;for(const f in c.morphAttributes){if(!s.has(f))return console.error("THREE.BufferGeometryUtils: .mergeGeometries() failed with geometry at index "+i+". .morphAttributes must be consistent throughout all geometries."),null;l[f]===void 0&&(l[f]=[]),l[f].push(c.morphAttributes[f])}if(e){let f;if(t)f=c.index.count;else if(c.attributes.position!==void 0)f=c.attributes.position.count;else return console.error("THREE.BufferGeometryUtils: .mergeGeometries() failed with geometry at index "+i+". The geometry must have either an index or a position attribute"),null;if(e===1)r.addGroup(y,f,i);else if(e===2&&c.groups.length>0)for(let w of c.groups){let T=w.materialIndex;r.addGroup(y+w.start,Math.min(w.count,f),T)}y+=f}}if(t){let i=0;const c=[];for(let x=0;x<a.length;++x){const f=a[x].index;for(let w=0;w<f.count;++w)c.push(f.getX(w)+i);i+=a[x].attributes.position.count}r.setIndex(c)}for(const i in o){const c=pe.mergeAttributes(o[i]);if(!c)return console.error("THREE.BufferGeometryUtils: .mergeGeometries() failed while trying to merge the "+i+" attribute."),null;r.setAttribute(i,c)}for(const i in l){const c=l[i][0].length;if(c===0)break;r.morphAttributes=r.morphAttributes||{},r.morphAttributes[i]=[];for(let x=0;x<c;++x){const f=[];for(let T=0;T<l[i].length;++T)f.push(l[i][T][x]);const w=pe.mergeAttributes(f);if(!w)return console.error("THREE.BufferGeometryUtils: .mergeGeometries() failed while trying to merge the "+i+" morphAttribute."),null;r.morphAttributes[i].push(w)}}return e===2?pe.mergeGroups(r):r}const Ve=a=>{const{points:e}=a,t=e.reduce((s,o,l)=>(l<e.length-1&&s.push(o,e[l+1]),s),[]);return new u.BufferGeometry().setFromPoints(t)};let at=class extends _.BaseObject{constructor(e={}){super(),this.options=E({},e)}get material(){var e;return(e=this.object3d)==null?void 0:e.material}create(){return ne(this,null,function*(){const{points:e,pointsArr:t,geometry:n,geometryArr:s,material:o,useGroups:l,setPointWidth:p,lineWidthArr:r,materialParameters:y,instanceCount:i}=this.options;let c=o,x=n;!c&&y&&(c=this.getMaterial(y)),!x&&e?x=Ve({points:e}):!x&&t?x=R(t.map(w=>Ve({points:w})),l!=null?l:0):!x&&s&&s.length>1?x=R(s,l!=null?l:0):!x&&s&&s.length===1&&([x]=s);const f=new Re.LineSegmentsGeometry().fromLineSegments(new u.LineSegments(x));if(this.pencil.options.WebGPUTHREE){i&&(f.instanceCount=i);const w=new _.LineSegments2(f,c);w.computeLineDistances(),this.object3d=w}else{const w=new Qe.LineSegments2(f,c);w.computeLineDistances(),this.object3d=w}})}getMaterial(e){return new De.LineMaterial(E({color:new u.Color("#ffffff")},e))}};const se=(a,e,t,n,s)=>{a[e+0]=t,a[e+1]=n,a[e+2]=s,a[e+3]=t,a[e+4]=n,a[e+5]=s},Oe=(a,e,t,n)=>{a[e+0]=t,a[e+1]=n},ze=(a,e,t,n,s)=>{a[e+0]=t,a[e+1]=n,a[e+2]=s},ct=(a,e,t,n,s,o)=>{a[e+0]=t,a[e+1]=n,a[e+2]=s,a[e+3]=o};class He extends u.BufferGeometry{constructor(e=[],t="none",n){super(),this.type="MeshLineGeometry",this.pointCount=0,this._points=[],this.shape="none",this.shapeFunction=s=>1,this.matrixWorld=new u.Matrix4,this.shape=t,n&&(this.shapeFunction=n),e.length>0&&this.setPoints(e)}convertToVector3Array(e){return e.map(t=>{var n;if(t instanceof u.Vector2)return new u.Vector3(t.x,t.y,0);if(t instanceof u.Vector3)return t;if(Array.isArray(t)&&t.length>=2)return new u.Vector3(t[0],t[1],(n=t[2])!=null?n:0)}).filter(Boolean)}setMatrixWorld(e){this.matrixWorld=e}setPoints(e,t){!e||e.length===0||(this._points=this.convertToVector3Array(e),this.pointCount=this._points.length,t&&(this.shapeFunction=t,this.shape="custom"),this.initializeGeometry(),this.updateGeometry())}initializeGeometry(){const e=[];let t=0;const n=[],s=[];let o=0;const l=[];let p=0;const r=[];let y=0;this.shape==="taper"&&(this.shapeFunction=i=>1*Math.pow(4*i*(1-i),1));for(let i=0;i<this.pointCount;i++){const c=i/this._points.length;e[t+0]=c,e[t+1]=c,t+=2,Oe(n,o,1,-1);const x=this.shape==="none"?1:this.shapeFunction(i/(this.pointCount-1));if(Oe(s,o,x,x),o+=2,ct(l,p,i/(this.pointCount-1),0,i/(this.pointCount-1),1),p+=4,i<this.pointCount-1){const f=i*2;ze(r,y,f+0,f+1,f+2),ze(r,y+3,f+2,f+1,f+3),y+=6}}this.setAttribute("position",new u.BufferAttribute(new Float32Array(this.pointCount*6),3)),this.setAttribute("previous",new u.BufferAttribute(new Float32Array(this.pointCount*6),3)),this.setAttribute("next",new u.BufferAttribute(new Float32Array(this.pointCount*6),3)),this.setAttribute("counters",new u.BufferAttribute(new Float32Array(e),1)),this.setAttribute("side",new u.BufferAttribute(new Float32Array(n),1)),this.setAttribute("width",new u.BufferAttribute(new Float32Array(s),1)),this.setAttribute("uv",new u.BufferAttribute(new Float32Array(l),2)),this.setIndex(new u.BufferAttribute(new Uint16Array(r),1))}updateGeometry(){if(!this._points[0])return;const e=[],t=[],n=[];let s=0,o=0,l=0;se(t,o,this._points[0].x,this._points[0].y,this._points[0].z),o+=6;for(let i=0;i<this.pointCount;i++){const c=this._points[i];se(e,s,c.x,c.y,c.z),s+=6,i<this.pointCount-1&&(se(t,o,c.x,c.y,c.z),o+=6),i>0&&i+1<=this.pointCount&&(se(n,l,c.x,c.y,c.z),l+=6)}se(n,l,this._points[this.pointCount-1].x,this._points[this.pointCount-1].y,this._points[this.pointCount-1].z);const p=this.getAttribute("position"),r=this.getAttribute("previous"),y=this.getAttribute("next");p.set(e),r.set(t),y.set(n),p.needsUpdate=!0,r.needsUpdate=!0,y.needsUpdate=!0,this.computeBoundingSphere(),this.computeBoundingBox()}get points(){return this._points}set points(e){this.setPoints(e)}updatePoints(e,t){const n=this.convertToVector3Array(e);if(n.length!==this.pointCount){console.warn("MeshLineGeometry: Cannot update points with different length. Use setPoints() instead.");return}this._points=n,t&&(this.shapeFunction=t,this.shape="custom",this.initializeGeometry()),this.updateGeometry()}setShape(e,t){this.shape=e,t&&(this.shapeFunction=t),this._points.length>0&&(this.initializeGeometry(),this.updateGeometry())}}const ge=a=>{const{setPointWidth:e,nodes:t}=a,n=new He;return n.setPoints(t,e),n};class lt extends _.BaseObject{constructor(e={}){super(),this.options=E({},e)}get material(){var e;return(e=this.object3d)==null?void 0:e.material}create(){return ne(this,null,function*(){const{nodes:e,nodesArr:t,geometry:n,geometryArr:s,material:o,useGroups:l,setPointWidth:p,lineWidthArr:r,materialParameters:y}=this.options;let i=o,c=n;!i&&y&&(i=this.getMaterial(y)),!c&&e?c=ge({nodes:e,setPointWidth:p}):!c&&t?c=R(t.map((x,f)=>{let w=p;return!w&&r&&(w=()=>{var T;return(T=r[f])!=null?T:r[0]}),ge({nodes:x,setPointWidth:w})}),l!=null?l:0):!c&&s&&s.length>1?c=R(s,l!=null?l:0):!c&&s&&s.length===1&&([c]=s),this.createMesh(c,i)})}setGeometry(e,t){const n=ge({nodes:e,setPointWidth:t}),s=this.object3d,o=s.geometry;s.geometry=n,o.dispose()}getMaterial(e){const{width:t,height:n}=this.pencil.getSize(),s=new _.MeshLineMaterial(E({color:new u.Color("#ffffff")},e));return s.uniforms.resolution.value.set(t,n),s}addGeometries(e){const t=this.object3d,n=R([t.geometry,...e]);t.geometry=n}resize(e,t){var n,s;(s=(n=this.material)==null?void 0:n.uniforms)==null||s.resolution.value.set(e,t)}useMaterial(e){super.useMaterial(e);const{width:t,height:n}=this.pencil.getSize();this.resize(t,n)}animate({duration:e=1e3,delay:t=0,repeat:n=0,lineLoop:s,onRepeat:o,onUpdate:l,onComplete:p,startShow:r}={}){const{offset:y,offsetLoop:i}=this.material.uniforms;if(this.material.userData.tween)return;const c=s!=null?s:!0;y.value.x=1,i.value=c&&r?1:0;let x=0;const f=new K.Tween(y.value).to({x:-1},e).delay(t).repeat(n).onUpdate(({x:w})=>{c&&w<=0&&i.value===0&&(i.value=1),l&&l(w)}).onRepeat(()=>{x+=1,o&&o(x)}).onComplete(()=>{p&&p()}).start();this.material.userData.tween=f}render(){const{width:e,height:t}=this.pencil.getSize();this.resize(e,t)}dispose(){this.material.userData.tween&&(this.material.userData.tween.stop(),K.remove(this.material.userData.tween)),super.dispose()}}const Ie=a=>{const p=a,{coordinate:e,startHeight:t,height:n}=p,s=me(p,["coordinate","startHeight","height"]);let o=t||0;return typeof t!="undefined"&&typeof n!="undefined"&&(o=t+n),new _.PolygonGeometry([e],le(E({},s),{startHeight:t,endHeight:o}))};class ht extends _.BaseObject{constructor(e){super(),this.options=E({},e)}create(){const r=this.options,{geometry:e,coordinateArr:t,coordinate:n,material:s,useGroups:o}=r,l=me(r,["geometry","coordinateArr","coordinate","material","useGroups"]);let p=e;if(!p&&n)p=Ie(E({coordinate:n},l));else if(!p&&t){const y=t.map(i=>Ie(E({coordinate:i},l)));p=R(y,o!=null?o:0)}this.createMesh(p,s)}}class ut extends Z{constructor(e,t){super(e,t);const n=new he.Brush(new Z(e,le(E({},t),{hasTop:!0,hasSide:!0,hasBottom:!1})));n.updateMatrixWorld();const s=new u.Box3().setFromObject(n),o=new u.Vector3;s.getSize(o);const l=new u.Vector3(s.min.x+o.x/2,s.min.y+o.y/2,0);let p=t.topSegments,r=t.box3;if(r){r=r.union(s);const M=new u.Vector3;r.getSize(M);const B=Math.max(o.x/M.x,o.y/M.y);p=Math.ceil(t.topSegments*B)}if(p<4)return this;const y=new u.PlaneGeometry(o.x,o.y,p,p),i=new he.Brush(y);i.position.set(l.x,l.y,l.z),i.updateMatrixWorld();const x=new he.Evaluator().evaluate(i,n,he.INTERSECTION),f=x.geometry.getAttribute("position"),w=new u.Float32BufferAttribute(f.count*2,2);for(let M=0;M<f.count;M++){const B=f.getZ(M);f.setZ(M,t.depth+B)}if(r){const M=r.min,B=r.max,S=new u.Vector3().subVectors(B,M);for(let I=0;I<f.count;I++){const ue=f.getX(I),F=f.getY(I),J=(ue-M.x)/S.x,$=(F-M.y)/S.y;w.setXY(I,J,$)}x.geometry.setAttribute("uv",w)}f.needsUpdate=!0;const T=new Z(e,le(E({},t),{hasTop:!1})),L=R([x.geometry,T],2);this.copy(L.toNonIndexed())}}const Ue=a=>{const{split:e,depth:t,points:n,box3:s,hasTop:o,hasBottom:l,hasSide:p,sideRepeat:r,topSegments:y}=a,i=y?ut:Z,c=new i(new u.Shape(n),{depth:t,bevelEnabled:!1,box3:s,UVGenerator:Pe.getUVGenerator({split:e,box3:s,sideRepeat:r}),hasTop:o,hasBottom:l,hasSide:p,topSegments:y});return Pe.claerUVGenerator(),c};class ft extends _.BaseObject{constructor(e){super(),this.options=E({depth:1},e)}create(){return ne(this,null,function*(){const{points:e,pointsArr:t,useGroups:n,depth:s,geometry:o,geometryArr:l,material:p,box3:r,split:y,hasTop:i,hasBottom:c,hasSide:x}=this.options,f=Array.isArray(s)?s:[s],w=Array.isArray(r)?r:[r],T=p;let L=o;T||console.log("material is null"),!L&&e?L=Ue({points:e,depth:f[0],box3:w[0],split:y,hasTop:i,hasBottom:c,hasSide:x}):!L&&t?L=R(t.map((M,B)=>{var S,I;return Ue({points:M,depth:(S=f[B])!=null?S:f[0],box3:(I=w[B])!=null?I:w[0],split:y,hasTop:i,hasBottom:c,hasSide:x})}),n!=null?n:0):!L&&l&&l.length>1?L=R(l,n!=null?n:0):!L&&l&&l.length===1&&([L]=l),this.createMesh(L,T)})}addGeometries(e){const t=this.object3d,n=R([t.geometry,...e]);t.geometry=n}setTextureAnisotropic(e,t){e.anisotropy=t||this.pencil.renderer.capabilities.getMaxAnisotropy()}}const dt=a=>{const{topColor:e,sideColor:t,sideMap:n,createCanvasObjectURL:s,split:o,maxAnisotropy:l}=a;return new Promise(p=>{const r=n?document.createElement("img"):{src:"",onload:()=>{},width:128,height:128};r.onload=()=>{const y=o,i=document.createElement("canvas"),c=i.getContext("2d");i.height=r.height/(1-y),i.width=r.width,y&&e&&(c.fillStyle=e,c.fillRect(0,0,r.width,i.height*y)),n&&r instanceof HTMLImageElement?c.drawImage(r,0,i.height*y,r.width,r.height):t&&(c.fillStyle=t,c.fillRect(0,i.height*y,r.width,r.height)),s&&i.toBlob(f=>{console.log(URL.createObjectURL(f))});const x=new u.CanvasTexture(i);p(x)},n?r.src=n:r instanceof HTMLImageElement||r.onload()})};exports.MeshLineMaterial=_.MeshLineMaterial;exports.getConicPolygonGeometry=_.PolygonGeometry;exports.getConicPolygonGeometryMetas=_.getMetas;Object.defineProperty(exports,"LineSegmentsGeometry",{enumerable:!0,get:()=>Re.LineSegmentsGeometry});Object.defineProperty(exports,"Line2Material",{enumerable:!0,get:()=>De.LineMaterial});exports.ConicPolygon=ht;exports.ExtrudePolygon=ft;exports.Group=tt;exports.Light=rt;exports.Line=lt;exports.Line2=at;exports.MeshLineGeometry=He;exports.Node=et;exports.Pie=ot;exports.getSplitTexture=dt;
1
+ "use strict";var $e=Object.defineProperty,Xe=Object.defineProperties;var Ye=Object.getOwnPropertyDescriptors;var ce=Object.getOwnPropertySymbols;var Ee=Object.prototype.hasOwnProperty,_e=Object.prototype.propertyIsEnumerable;var Be=(a,e,t)=>e in a?$e(a,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):a[e]=t,E=(a,e)=>{for(var t in e||(e={}))Ee.call(e,t)&&Be(a,t,e[t]);if(ce)for(var t of ce(e))_e.call(e,t)&&Be(a,t,e[t]);return a},le=(a,e)=>Xe(a,Ye(e));var me=(a,e)=>{var t={};for(var n in a)Ee.call(a,n)&&e.indexOf(n)<0&&(t[n]=a[n]);if(a!=null&&ce)for(var n of ce(a))e.indexOf(n)<0&&_e.call(a,n)&&(t[n]=a[n]);return t};var ne=(a,e,t)=>new Promise((n,s)=>{var o=r=>{try{p(t.next(r))}catch(y){s(y)}},l=r=>{try{p(t.throw(r))}catch(y){s(y)}},p=r=>r.done?n(r.value):Promise.resolve(r.value).then(o,l);p((t=t.apply(a,e)).next())});Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const _=require("../index2.js"),u=require("three"),Ze=require("@tweenjs/tween.js"),Je=require("three/examples/jsm/lights/RectAreaLightUniformsLib"),pe=require("three/examples/jsm/utils/BufferGeometryUtils"),Qe=require("three/examples/jsm/lines/LineSegments2"),Re=require("three/examples/jsm/lines/LineSegmentsGeometry"),De=require("three/examples/jsm/lines/LineMaterial"),Pe=require("../uvGenerator.js"),he=require("three-bvh-csg");function Ke(a){const e=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(a){for(const t in a)if(t!=="default"){const n=Object.getOwnPropertyDescriptor(a,t);Object.defineProperty(e,t,n.get?n:{enumerable:!0,get:()=>a[t]})}}return e.default=a,Object.freeze(e)}const K=Ke(Ze);class et extends _.BaseObject{constructor(e){super(),this.objectType="BaseObject#Node",this.onNodePointerIndex=[],this.options=E({type:"2d"},e)}create(){const{position:e,children:t}=this.options,n=document.createElement("div");this.element=n,t&&n.appendChild(t),this.options.type==="3d"?this.createCSS3DObject(n):this.options.type==="3dSprite"?this.createCSS3DSprite(n):this.createCSS2DObject(n),e&&this.object3d.position.copy(e)}setChildren(e){this.options.children=e,this.element.innerHTML="",this.element.appendChild(e)}showAndEnsureVisible(){const e=this.options.children;e&&(e.style.visibility="hidden",this.show(),setTimeout(()=>{e.style.visibility="",this.ensureVisible()}))}moveElementToViewport(){const e=this.options.children;if(!e)return;const t=e.getBoundingClientRect(),n=window.innerWidth,s=window.innerHeight;let o=0,l=0;t.left<0?o=-t.left:t.right>n&&(o=n-t.right),t.top<0?l=-t.top:t.bottom>s&&(l=s-t.bottom),t.left+o<0&&(o=-t.left),t.top+l<0&&(l=-t.top),(o!==0||l!==0)&&(e.style.transform=`translate(${o}px, ${l}px)`)}ensureVisible(){const e=this.options.children;if(!e)return;e.style.transform&&(e.style.transform="");const t=new IntersectionObserver(n=>{n.forEach(s=>{s.isIntersecting&&(this.moveElementToViewport(),t.disconnect())})});t.observe(e)}onPointerEvent(e,t){const n=this.lead.handlePickNode([this],e,t);this.onNodePointerIndex.push(n)}dispose(){this.onNodePointerIndex.forEach(e=>{this.lead.removePickNode(e)}),super.dispose()}}class tt extends _.BaseObject{create(){this.createGroup()}}const nt={ArcCurve:u.ArcCurve,CatmullRomCurve3:u.CatmullRomCurve3,CubicBezierCurve:u.CubicBezierCurve,CubicBezierCurve3:u.CubicBezierCurve3,EllipseCurve:u.EllipseCurve,LineCurve:u.LineCurve,LineCurve3:u.LineCurve3,QuadraticBezierCurve:u.QuadraticBezierCurve,QuadraticBezierCurve3:u.QuadraticBezierCurve3,SplineCurve:u.SplineCurve};class Z extends u.BufferGeometry{constructor(e=new u.Shape([new u.Vector2(.5,.5),new u.Vector2(-.5,.5),new u.Vector2(-.5,-.5),new u.Vector2(.5,-.5)]),t={}){super(),this.type="ExtrudeGeometry",this.parameters={shapes:e,options:t},e=Array.isArray(e)?e:[e];const n=this,s=[],o=[];for(let p=0,r=e.length;p<r;p++){const y=e[p];l(y)}this.setAttribute("position",new u.Float32BufferAttribute(s,3)),this.setAttribute("uv",new u.Float32BufferAttribute(o,2)),this.computeVertexNormals();function l(p){var Se,Ae,Me;const r=[],y=t.curveSegments!==void 0?t.curveSegments:12,i=t.steps!==void 0?t.steps:1,c=t.depth!==void 0?t.depth:1;let x=t.bevelEnabled!==void 0?t.bevelEnabled:!0,f=t.bevelThickness!==void 0?t.bevelThickness:.2,w=t.bevelSize!==void 0?t.bevelSize:f-.1,C=t.bevelOffset!==void 0?t.bevelOffset:0,L=t.bevelSegments!==void 0?t.bevelSegments:3;const M=t.extrudePath,B=t.UVGenerator!==void 0?t.UVGenerator:st,S=(Se=t.hasTop)!=null?Se:!0,I=(Ae=t.hasBottom)!=null?Ae:!0,ue=(Me=t.hasSide)!=null?Me:!0;let F,J=!1,$,ee,te,D;M&&(F=M.getSpacedPoints(i),J=!0,x=!1,$=M.computeFrenetFrames(i,!1),ee=new u.Vector3,te=new u.Vector3,D=new u.Vector3),x||(L=0,f=0,w=0,C=0);const ye=p.extractPoints(y);let z=ye.shape;const P=ye.holes;if(!u.ShapeUtils.isClockWise(z)){z=z.reverse();for(let h=0,d=P.length;h<d;h++){const m=P[h];u.ShapeUtils.isClockWise(m)&&(P[h]=m.reverse())}}function be(h){const m=10000000000000001e-36;let b=h[0];for(let g=1;g<=h.length;g++){const A=g%h.length,v=h[A],T=v.x-b.x,G=v.y-b.y,j=T*T+G*G,V=Math.max(Math.abs(v.x),Math.abs(v.y),Math.abs(b.x),Math.abs(b.y)),Y=m*V*V;if(j<=Y){h.splice(A,1),g--;continue}b=v}}be(z),P.forEach(be);const fe=P.length,U=z;for(let h=0;h<fe;h++){const d=P[h];z=z.concat(d)}function Q(h,d,m){return d||console.error("THREE.ExtrudeGeometry: vec does not exist"),h.clone().addScaledVector(d,m)}const H=z.length;function xe(h,d,m){let b,g,A;const v=h.x-d.x,T=h.y-d.y,G=m.x-h.x,j=m.y-h.y,V=v*v+T*T,Y=v*j-T*G;if(Math.abs(Y)>Number.EPSILON){const O=Math.sqrt(V),Le=Math.sqrt(G*G+j*j),Ce=d.x-T/O,Te=d.y+v/O,ke=m.x-j/Le,Fe=m.y+G/Le,Ge=((ke-Ce)*j-(Fe-Te)*G)/(v*j-T*G);b=Ce+v*Ge-h.x,g=Te+T*Ge-h.y;const je=b*b+g*g;if(je<=2)return new u.Vector2(b,g);A=Math.sqrt(je/2)}else{let O=!1;v>Number.EPSILON?G>Number.EPSILON&&(O=!0):v<-Number.EPSILON?G<-Number.EPSILON&&(O=!0):Math.sign(T)===Math.sign(j)&&(O=!0),O?(b=-T,g=v,A=Math.sqrt(V)):(b=v,g=T,A=Math.sqrt(V/2))}return new u.Vector2(b/A,g/A)}const ie=[];for(let h=0,d=U.length,m=d-1,b=h+1;h<d;h++,m++,b++)m===d&&(m=0),b===d&&(b=0),ie[h]=xe(U[h],U[m],U[b]);const de=[];let k,oe=ie.concat();for(let h=0,d=fe;h<d;h++){const m=P[h];k=[];for(let b=0,g=m.length,A=g-1,v=b+1;b<g;b++,A++,v++)A===g&&(A=0),v===g&&(v=0),k[b]=xe(m[b],m[A],m[v]);de.push(k),oe=oe.concat(k)}let X;if(L===0)X=u.ShapeUtils.triangulateShape(U,P);else{const h=[],d=[];for(let m=0;m<L;m++){const b=m/L,g=f*Math.cos(b*Math.PI/2),A=w*Math.sin(b*Math.PI/2)+C;for(let v=0,T=U.length;v<T;v++){const G=Q(U[v],ie[v],A);N(G.x,G.y,-g),b===0&&h.push(G)}for(let v=0,T=fe;v<T;v++){const G=P[v];k=de[v];const j=[];for(let V=0,Y=G.length;V<Y;V++){const O=Q(G[V],k[V],A);N(O.x,O.y,-g),b===0&&j.push(O)}b===0&&d.push(j)}}X=u.ShapeUtils.triangulateShape(h,d)}const re=X.length,we=w+C;for(let h=0;h<H;h++){const d=x?Q(z[h],oe[h],we):z[h];J?(te.copy($.normals[0]).multiplyScalar(d.x),ee.copy($.binormals[0]).multiplyScalar(d.y),D.copy(F[0]).add(te).add(ee),N(D.x,D.y,D.z)):N(d.x,d.y,0)}for(let h=1;h<=i;h++)for(let d=0;d<H;d++){const m=x?Q(z[d],oe[d],we):z[d];J?(te.copy($.normals[h]).multiplyScalar(m.x),ee.copy($.binormals[h]).multiplyScalar(m.y),D.copy(F[h]).add(te).add(ee),N(D.x,D.y,D.z)):N(m.x,m.y,c/i*h)}for(let h=L-1;h>=0;h--){const d=h/L,m=f*Math.cos(d*Math.PI/2),b=w*Math.sin(d*Math.PI/2)+C;for(let g=0,A=U.length;g<A;g++){const v=Q(U[g],ie[g],b);N(v.x,v.y,c+m)}for(let g=0,A=P.length;g<A;g++){const v=P[g];k=de[g];for(let T=0,G=v.length;T<G;T++){const j=Q(v[T],k[T],b);J?N(j.x,j.y+F[i-1].y,F[i-1].x+m):N(j.x,j.y,c+m)}}}Ne(),ue&&We();function Ne(){const h=s.length/3;if(x){let d=0,m=H*d;if(I)for(let b=0;b<re;b++){const g=X[b];ae(g[2]+m,g[1]+m,g[0]+m)}if(d=i+L*2,m=H*d,S)for(let b=0;b<re;b++){const g=X[b];ae(g[0]+m,g[1]+m,g[2]+m)}}else{if(I)for(let d=0;d<re;d++){const m=X[d];ae(m[2],m[1],m[0])}if(S)for(let d=0;d<re;d++){const m=X[d];ae(m[0]+H*i,m[1]+H*i,m[2]+H*i)}}n.addGroup(h,s.length/3-h,0)}function We(){const h=s.length/3;let d=0;ve(U,d),d+=U.length;for(let m=0,b=P.length;m<b;m++){const g=P[m];ve(g,d),d+=g.length}n.addGroup(h,s.length/3-h,1)}function ve(h,d){let m=h.length;for(;--m>=0;){const b=m;let g=m-1;g<0&&(g=h.length-1);for(let A=0,v=i+L*2;A<v;A++){const T=H*A,G=H*(A+1),j=d+b+T,V=d+g+T,Y=d+g+G,O=d+b+G;qe(j,V,Y,O)}}}function N(h,d,m){r.push(h),r.push(d),r.push(m)}function ae(h,d,m){W(h),W(d),W(m);const b=s.length/3,g=B.generateTopUV(n,s,b-3,b-2,b-1);q(g[0]),q(g[1]),q(g[2])}function qe(h,d,m,b){W(h),W(d),W(b),W(d),W(m),W(b);const g=s.length/3,A=B.generateSideWallUV(n,s,g-6,g-3,g-2,g-1);q(A[0]),q(A[1]),q(A[3]),q(A[1]),q(A[2]),q(A[3])}function W(h){s.push(r[h*3+0]),s.push(r[h*3+1]),s.push(r[h*3+2])}function q(h){o.push(h.x),o.push(h.y)}}}copy(e){return super.copy(e),this.parameters=Object.assign({},e.parameters),this}toJSON(){const e=super.toJSON(),t=this.parameters.shapes,n=this.parameters.options;return it(t,n,e)}static fromJSON(e,t){const n=[];for(let o=0,l=e.shapes.length;o<l;o++){const p=t[e.shapes[o]];n.push(p)}const s=e.options.extrudePath;return s!==void 0&&(e.options.extrudePath=new nt[`${s.type}`]().fromJSON(s)),new Z(n,e.options)}}const st={generateTopUV:function(a,e,t,n,s){const o=e[t*3],l=e[t*3+1],p=e[n*3],r=e[n*3+1],y=e[s*3],i=e[s*3+1];return[new u.Vector2(o,l),new u.Vector2(p,r),new u.Vector2(y,i)]},generateSideWallUV:function(a,e,t,n,s,o){const l=e[t*3],p=e[t*3+1],r=e[t*3+2],y=e[n*3],i=e[n*3+1],c=e[n*3+2],x=e[s*3],f=e[s*3+1],w=e[s*3+2],C=e[o*3],L=e[o*3+1],M=e[o*3+2];return Math.abs(p-i)<Math.abs(l-y)?[new u.Vector2(l,1-r),new u.Vector2(y,1-c),new u.Vector2(x,1-w),new u.Vector2(C,1-M)]:[new u.Vector2(p,1-r),new u.Vector2(i,1-c),new u.Vector2(f,1-w),new u.Vector2(L,1-M)]}};function it(a,e,t){if(t.shapes=[],Array.isArray(a))for(let n=0,s=a.length;n<s;n++){const o=a[n];t.shapes.push(o.uuid)}else t.shapes.push(a.uuid);return t.options=Object.assign({},e),e.extrudePath!==void 0&&(t.options.extrudePath=e.extrudePath.toJSON()),t}class ot extends _.BaseObject{constructor(e){super(),this.options=E({maxDepth:10,percentDepth:!1,innerRadius:25,outRadius:42,activeIndex:-1},e)}create(){return ne(this,null,function*(){this.createGroup();const{data:e,maxDepth:t,colors:n,material:s,percentDepth:o,activeIndex:l}=this.options,p=Math.max(...e),r=e.reduce((i,c)=>i+c,0);let y=Math.PI/2;e.forEach((i,c)=>{if(i===0)return;const x=Math.PI*2*(i/r),f=n[c],w=o?t*(i/p):t,C=this.createGeometry(w,x),L=s?s.clone():new u.MeshBasicMaterial({color:f});s&&L.color.set(f);const M=new u.Mesh(C,L);M.userData.depth=w,M.userData.index=c,M.rotateZ(y),y+=x,this.add(M)}),l!==-1&&this.setActive(l)})}createGeometry(e,t){const{outRadius:n,innerRadius:s}=this.options,o=new u.Shape;return o.moveTo(n,0),o.lineTo(s,0),o.absarc(0,0,s,0,t,!1),o.absarc(0,0,n,t,0,!0),new Z(o,{curveSegments:48,depth:e,bevelEnabled:!1})}handlePick(e,t=1.3){const{object:n}=this.pencil.pick(e,this.object3d.children)||{},s=n?this.object3d.children.findIndex(o=>o===n):this.options.activeIndex;return this.setActive(s,t)}setActive(e,t=1.3){const n=this.object3d.children[e];if(this.object3d.children.forEach(s=>{if(!(n&&n===s)&&s.scale.z!==1){if(s.userData.levTween)return;s.userData.enTween&&(s.userData.enTween.stop(),s.userData.enTween=null);const o=new K.Tween(s.scale).to({z:1},100);s.userData.levTween=o,o.start()}}),n){if(n.userData.enTween)return;n.userData.levTween&&(n.userData.levTween.stop(),n.userData.levTween=null);const s=new K.Tween(n.scale).to({z:t},100);return n.userData.enTween=s,s.start(),n.userData.index}return-1}render(){this.object3d.scale.z=0,new K.Tween(this.object3d.scale).to({z:1},1e3).easing(K.Easing.Sinusoidal.InOut).start()}}class rt extends _.BaseObject{constructor(e){super(),this.rectAreaLightUniformsLibInit=!1,this.options=e}create(){var t,n,s,o,l,p,r,y,i,c,x,f,w,C,L,M,B;const e=this.options;if(e.type==="AmbientLight"){const S=new u.AmbientLight(e.color);S.name="环境光",this.object3d=S}else if(e.type==="DirectionalLight"){const S=new u.DirectionalLight(e.color,e.intensity);S.name="平行光",S.target.position.set(0,0,0),this.object3d=S,S.target.name="平行光目标",S.shadow.camera.name="平行光阴影相机",S.shadow.camera.userData.directionalLightShadow=!0,this.directionalLight=S}else if(e.type==="PointLight"){const S=new u.PointLight((t=e.color)!=null?t:16777215,(n=e.intensity)!=null?n:1,(s=e.distance)!=null?s:0,(o=e.decay)!=null?o:2);S.name="点光源",this.object3d=S,this.pointLight=S}else if(e.type==="SpotLight"){const S=new u.SpotLight((l=e.color)!=null?l:16777215,(p=e.intensity)!=null?p:1,(r=e.distance)!=null?r:0,(y=e.angle)!=null?y:Math.PI/3,(i=e.penumbra)!=null?i:1,(c=e.decay)!=null?c:2);S.name="聚光灯",this.object3d=S,this.spotLight=S,S.target.name="聚光灯目标"}else if(e.type==="HemisphereLight"){const S=new u.HemisphereLight((x=e.color)!=null?x:16777215,(f=e.groundColor)!=null?f:16777215,(w=e.intensity)!=null?w:1);S.name="半球光",this.object3d=S,this.hemisphereLight=S}else if(e.type==="RectAreaLight"){this.rectAreaLightUniformsLibInit||(Je.RectAreaLightUniformsLib.init(),this.rectAreaLightUniformsLibInit=!0);const S=new u.RectAreaLight((C=e.color)!=null?C:16777215,(L=e.intensity)!=null?L:1,(M=e.width)!=null?M:10,(B=e.height)!=null?B:10);S.name="矩形区域光",this.object3d=S,this.rectAreaLight=S}}render(){const e=this.object3d;e.target&&this.pencil.scene.add(e.target);const t=this.pencil.cameraTarget;if(this.spotLight||this.directionalLight){const n=this.spotLight||this.directionalLight;n.position.copy(t),n.target.position.copy(t)}else this.pointLight&&this.pointLight.position.copy(t)}dispose(){const e=this.object3d;e.target&&this.pencil.scene.remove(e.target),super.dispose()}}function R(a,e=0){const t=a[0].index!==null,n=new Set(Object.keys(a[0].attributes)),s=new Set(Object.keys(a[0].morphAttributes)),o={},l={},p=a[0].morphTargetsRelative,r=new u.BufferGeometry;let y=0;for(let i=0;i<a.length;++i){const c=a[i];let x=0;if(t!==(c.index!==null))return console.error("THREE.BufferGeometryUtils: .mergeGeometries() failed with geometry at index "+i+". All geometries must have compatible attributes; make sure index attribute exists among all geometries, or in none of them."),null;for(const f in c.attributes){if(!n.has(f))return console.error("THREE.BufferGeometryUtils: .mergeGeometries() failed with geometry at index "+i+'. All geometries must have compatible attributes; make sure "'+f+'" attribute exists among all geometries, or in none of them.'),null;o[f]===void 0&&(o[f]=[]),o[f].push(c.attributes[f]),x++}if(x!==n.size)return console.error("THREE.BufferGeometryUtils: .mergeGeometries() failed with geometry at index "+i+". Make sure all geometries have the same number of attributes."),null;if(p!==c.morphTargetsRelative)return console.error("THREE.BufferGeometryUtils: .mergeGeometries() failed with geometry at index "+i+". .morphTargetsRelative must be consistent throughout all geometries."),null;for(const f in c.morphAttributes){if(!s.has(f))return console.error("THREE.BufferGeometryUtils: .mergeGeometries() failed with geometry at index "+i+". .morphAttributes must be consistent throughout all geometries."),null;l[f]===void 0&&(l[f]=[]),l[f].push(c.morphAttributes[f])}if(e){let f;if(t)f=c.index.count;else if(c.attributes.position!==void 0)f=c.attributes.position.count;else return console.error("THREE.BufferGeometryUtils: .mergeGeometries() failed with geometry at index "+i+". The geometry must have either an index or a position attribute"),null;if(e===1)r.addGroup(y,f,i);else if(e===2&&c.groups.length>0)for(let w of c.groups){let C=w.materialIndex;r.addGroup(y+w.start,Math.min(w.count,f),C)}y+=f}}if(t){let i=0;const c=[];for(let x=0;x<a.length;++x){const f=a[x].index;for(let w=0;w<f.count;++w)c.push(f.getX(w)+i);i+=a[x].attributes.position.count}r.setIndex(c)}for(const i in o){const c=pe.mergeAttributes(o[i]);if(!c)return console.error("THREE.BufferGeometryUtils: .mergeGeometries() failed while trying to merge the "+i+" attribute."),null;r.setAttribute(i,c)}for(const i in l){const c=l[i][0].length;if(c===0)break;r.morphAttributes=r.morphAttributes||{},r.morphAttributes[i]=[];for(let x=0;x<c;++x){const f=[];for(let C=0;C<l[i].length;++C)f.push(l[i][C][x]);const w=pe.mergeAttributes(f);if(!w)return console.error("THREE.BufferGeometryUtils: .mergeGeometries() failed while trying to merge the "+i+" morphAttribute."),null;r.morphAttributes[i].push(w)}}return e===2?pe.mergeGroups(r):r}const Ve=a=>{const{points:e}=a,t=e.reduce((s,o,l)=>(l<e.length-1&&s.push(o,e[l+1]),s),[]);return new u.BufferGeometry().setFromPoints(t)};let at=class extends _.BaseObject{constructor(e={}){super(),this.options=E({},e)}get material(){var e;return(e=this.object3d)==null?void 0:e.material}create(){return ne(this,null,function*(){const{points:e,pointsArr:t,geometry:n,geometryArr:s,material:o,useGroups:l,setPointWidth:p,lineWidthArr:r,materialParameters:y,instanceCount:i}=this.options;let c=o,x=n;!c&&y&&(c=this.getMaterial(y)),!x&&e?x=Ve({points:e}):!x&&t?x=R(t.map(w=>Ve({points:w})),l!=null?l:0):!x&&s&&s.length>1?x=R(s,l!=null?l:0):!x&&s&&s.length===1&&([x]=s);const f=new Re.LineSegmentsGeometry().fromLineSegments(new u.LineSegments(x));if(this.pencil.options.WebGPUTHREE){i&&(f.instanceCount=i);const w=new _.LineSegments2(f,c);w.computeLineDistances(),this.object3d=w}else{const w=new Qe.LineSegments2(f,c);w.computeLineDistances(),this.object3d=w}})}getMaterial(e){return new De.LineMaterial(E({color:new u.Color("#ffffff")},e))}};const se=(a,e,t,n,s)=>{a[e+0]=t,a[e+1]=n,a[e+2]=s,a[e+3]=t,a[e+4]=n,a[e+5]=s},Oe=(a,e,t,n)=>{a[e+0]=t,a[e+1]=n},ze=(a,e,t,n,s)=>{a[e+0]=t,a[e+1]=n,a[e+2]=s},ct=(a,e,t,n,s,o)=>{a[e+0]=t,a[e+1]=n,a[e+2]=s,a[e+3]=o};class He extends u.BufferGeometry{constructor(e=[],t="none",n){super(),this.type="MeshLineGeometry",this.pointCount=0,this._points=[],this.shape="none",this.shapeFunction=s=>1,this.matrixWorld=new u.Matrix4,this.shape=t,n&&(this.shapeFunction=n),e.length>0&&this.setPoints(e)}convertToVector3Array(e){return e.map(t=>{var n;if(t instanceof u.Vector2)return new u.Vector3(t.x,t.y,0);if(t instanceof u.Vector3)return t;if(Array.isArray(t)&&t.length>=2)return new u.Vector3(t[0],t[1],(n=t[2])!=null?n:0)}).filter(Boolean)}setMatrixWorld(e){this.matrixWorld=e}setPoints(e,t){!e||e.length===0||(this._points=this.convertToVector3Array(e),this.pointCount=this._points.length,t&&(this.shapeFunction=t,this.shape="custom"),this.initializeGeometry(),this.updateGeometry())}initializeGeometry(){const e=[];let t=0;const n=[],s=[];let o=0;const l=[];let p=0;const r=[];let y=0;this.shape==="taper"&&(this.shapeFunction=i=>1*Math.pow(4*i*(1-i),1));for(let i=0;i<this.pointCount;i++){const c=i/this._points.length;e[t+0]=c,e[t+1]=c,t+=2,Oe(n,o,1,-1);const x=this.shape==="none"?1:this.shapeFunction(i/(this.pointCount-1));if(Oe(s,o,x,x),o+=2,ct(l,p,i/(this.pointCount-1),0,i/(this.pointCount-1),1),p+=4,i<this.pointCount-1){const f=i*2;ze(r,y,f+0,f+1,f+2),ze(r,y+3,f+2,f+1,f+3),y+=6}}this.setAttribute("position",new u.BufferAttribute(new Float32Array(this.pointCount*6),3)),this.setAttribute("previous",new u.BufferAttribute(new Float32Array(this.pointCount*6),3)),this.setAttribute("next",new u.BufferAttribute(new Float32Array(this.pointCount*6),3)),this.setAttribute("counters",new u.BufferAttribute(new Float32Array(e),1)),this.setAttribute("side",new u.BufferAttribute(new Float32Array(n),1)),this.setAttribute("width",new u.BufferAttribute(new Float32Array(s),1)),this.setAttribute("uv",new u.BufferAttribute(new Float32Array(l),2)),this.setIndex(new u.BufferAttribute(new Uint16Array(r),1))}updateGeometry(){if(!this._points[0])return;const e=[],t=[],n=[];let s=0,o=0,l=0;se(t,o,this._points[0].x,this._points[0].y,this._points[0].z),o+=6;for(let i=0;i<this.pointCount;i++){const c=this._points[i];se(e,s,c.x,c.y,c.z),s+=6,i<this.pointCount-1&&(se(t,o,c.x,c.y,c.z),o+=6),i>0&&i+1<=this.pointCount&&(se(n,l,c.x,c.y,c.z),l+=6)}se(n,l,this._points[this.pointCount-1].x,this._points[this.pointCount-1].y,this._points[this.pointCount-1].z);const p=this.getAttribute("position"),r=this.getAttribute("previous"),y=this.getAttribute("next");p.set(e),r.set(t),y.set(n),p.needsUpdate=!0,r.needsUpdate=!0,y.needsUpdate=!0,this.computeBoundingSphere(),this.computeBoundingBox()}get points(){return this._points}set points(e){this.setPoints(e)}updatePoints(e,t){const n=this.convertToVector3Array(e);if(n.length!==this.pointCount){console.warn("MeshLineGeometry: Cannot update points with different length. Use setPoints() instead.");return}this._points=n,t&&(this.shapeFunction=t,this.shape="custom",this.initializeGeometry()),this.updateGeometry()}setShape(e,t){this.shape=e,t&&(this.shapeFunction=t),this._points.length>0&&(this.initializeGeometry(),this.updateGeometry())}}const ge=a=>{const{setPointWidth:e,nodes:t}=a,n=new He;return n.setPoints(t,e),n};class lt extends _.BaseObject{constructor(e={}){super(),this.options=E({},e)}get material(){var e;return(e=this.object3d)==null?void 0:e.material}create(){return ne(this,null,function*(){const{nodes:e,nodesArr:t,geometry:n,geometryArr:s,material:o,useGroups:l,setPointWidth:p,lineWidthArr:r,materialParameters:y}=this.options;let i=o,c=n;!i&&y&&(i=this.getMaterial(y)),!c&&e?c=ge({nodes:e,setPointWidth:p}):!c&&t?c=R(t.map((x,f)=>{let w=p;return!w&&r&&(w=()=>{var C;return(C=r[f])!=null?C:r[0]}),ge({nodes:x,setPointWidth:w})}),l!=null?l:0):!c&&s&&s.length>1?c=R(s,l!=null?l:0):!c&&s&&s.length===1&&([c]=s),this.createMesh(c,i)})}setGeometry(e,t){const n=ge({nodes:e,setPointWidth:t}),s=this.object3d,o=s.geometry;s.geometry=n,o.dispose()}getMaterial(e){const{width:t,height:n}=this.pencil.getSize(),s=new _.MeshLineMaterial(E({color:new u.Color("#ffffff")},e));return s.uniforms.resolution.value.set(t,n),s}addGeometries(e){const t=this.object3d,n=R([t.geometry,...e]);t.geometry=n}resize(e,t){var n,s;(s=(n=this.material)==null?void 0:n.uniforms)==null||s.resolution.value.set(e,t)}handleMaterialChange(e){if(e){const{width:t,height:n}=this.pencil.getSize();this.resize(t,n)}}animate({duration:e=1e3,delay:t=0,repeat:n=0,lineLoop:s,onRepeat:o,onUpdate:l,onComplete:p,startShow:r}={}){const{offset:y,offsetLoop:i}=this.material.uniforms;if(this.material.userData.tween)return;const c=s!=null?s:!0;y.value.x=1,i.value=c&&r?1:0;let x=0;const f=new K.Tween(y.value).to({x:-1},e).delay(t).repeat(n).onUpdate(({x:w})=>{c&&w<=0&&i.value===0&&(i.value=1),l&&l(w)}).onRepeat(()=>{x+=1,o&&o(x)}).onComplete(()=>{p&&p()}).start();this.material.userData.tween=f}render(){const{width:e,height:t}=this.pencil.getSize();this.resize(e,t)}dispose(){this.material.userData.tween&&(this.material.userData.tween.stop(),K.remove(this.material.userData.tween)),super.dispose()}}const Ie=a=>{const p=a,{coordinate:e,startHeight:t,height:n}=p,s=me(p,["coordinate","startHeight","height"]);let o=t||0;return typeof t!="undefined"&&typeof n!="undefined"&&(o=t+n),new _.PolygonGeometry([e],le(E({},s),{startHeight:t,endHeight:o}))};class ht extends _.BaseObject{constructor(e){super(),this.options=E({},e)}create(){const r=this.options,{geometry:e,coordinateArr:t,coordinate:n,material:s,useGroups:o}=r,l=me(r,["geometry","coordinateArr","coordinate","material","useGroups"]);let p=e;if(!p&&n)p=Ie(E({coordinate:n},l));else if(!p&&t){const y=t.map(i=>Ie(E({coordinate:i},l)));p=R(y,o!=null?o:0)}this.createMesh(p,s)}}class ut extends Z{constructor(e,t){super(e,t);const n=new he.Brush(new Z(e,le(E({},t),{hasTop:!0,hasSide:!0,hasBottom:!1})));n.updateMatrixWorld();const s=new u.Box3().setFromObject(n),o=new u.Vector3;s.getSize(o);const l=new u.Vector3(s.min.x+o.x/2,s.min.y+o.y/2,0);let p=t.topSegments,r=t.box3;if(r){r=r.union(s);const M=new u.Vector3;r.getSize(M);const B=Math.max(o.x/M.x,o.y/M.y);p=Math.ceil(t.topSegments*B)}if(p<4)return this;const y=new u.PlaneGeometry(o.x,o.y,p,p),i=new he.Brush(y);i.position.set(l.x,l.y,l.z),i.updateMatrixWorld();const x=new he.Evaluator().evaluate(i,n,he.INTERSECTION),f=x.geometry.getAttribute("position"),w=new u.Float32BufferAttribute(f.count*2,2);for(let M=0;M<f.count;M++){const B=f.getZ(M);f.setZ(M,t.depth+B)}if(r){const M=r.min,B=r.max,S=new u.Vector3().subVectors(B,M);for(let I=0;I<f.count;I++){const ue=f.getX(I),F=f.getY(I),J=(ue-M.x)/S.x,$=(F-M.y)/S.y;w.setXY(I,J,$)}x.geometry.setAttribute("uv",w)}f.needsUpdate=!0;const C=new Z(e,le(E({},t),{hasTop:!1})),L=R([x.geometry,C],2);this.copy(L.toNonIndexed())}}const Ue=a=>{const{split:e,depth:t,points:n,box3:s,hasTop:o,hasBottom:l,hasSide:p,sideRepeat:r,topSegments:y}=a,i=y?ut:Z,c=new i(new u.Shape(n),{depth:t,bevelEnabled:!1,box3:s,UVGenerator:Pe.getUVGenerator({split:e,box3:s,sideRepeat:r}),hasTop:o,hasBottom:l,hasSide:p,topSegments:y});return Pe.claerUVGenerator(),c};class ft extends _.BaseObject{constructor(e){super(),this.options=E({depth:1},e)}create(){return ne(this,null,function*(){const{points:e,pointsArr:t,useGroups:n,depth:s,geometry:o,geometryArr:l,material:p,box3:r,split:y,hasTop:i,hasBottom:c,hasSide:x}=this.options,f=Array.isArray(s)?s:[s],w=Array.isArray(r)?r:[r],C=p;let L=o;C||console.log("material is null"),!L&&e?L=Ue({points:e,depth:f[0],box3:w[0],split:y,hasTop:i,hasBottom:c,hasSide:x}):!L&&t?L=R(t.map((M,B)=>{var S,I;return Ue({points:M,depth:(S=f[B])!=null?S:f[0],box3:(I=w[B])!=null?I:w[0],split:y,hasTop:i,hasBottom:c,hasSide:x})}),n!=null?n:0):!L&&l&&l.length>1?L=R(l,n!=null?n:0):!L&&l&&l.length===1&&([L]=l),this.createMesh(L,C)})}addGeometries(e){const t=this.object3d,n=R([t.geometry,...e]);t.geometry=n}setTextureAnisotropic(e,t){e.anisotropy=t||this.pencil.renderer.capabilities.getMaxAnisotropy()}}const dt=a=>{const{topColor:e,sideColor:t,sideMap:n,createCanvasObjectURL:s,split:o,maxAnisotropy:l}=a;return new Promise(p=>{const r=n?document.createElement("img"):{src:"",onload:()=>{},width:128,height:128};r.onload=()=>{const y=o,i=document.createElement("canvas"),c=i.getContext("2d");i.height=r.height/(1-y),i.width=r.width,y&&e&&(c.fillStyle=e,c.fillRect(0,0,r.width,i.height*y)),n&&r instanceof HTMLImageElement?c.drawImage(r,0,i.height*y,r.width,r.height):t&&(c.fillStyle=t,c.fillRect(0,i.height*y,r.width,r.height)),s&&i.toBlob(f=>{console.log(URL.createObjectURL(f))});const x=new u.CanvasTexture(i);p(x)},n?r.src=n:r instanceof HTMLImageElement||r.onload()})};exports.MeshLineMaterial=_.MeshLineMaterial;exports.getConicPolygonGeometry=_.PolygonGeometry;exports.getConicPolygonGeometryMetas=_.getMetas;Object.defineProperty(exports,"LineSegmentsGeometry",{enumerable:!0,get:()=>Re.LineSegmentsGeometry});Object.defineProperty(exports,"Line2Material",{enumerable:!0,get:()=>De.LineMaterial});exports.ConicPolygon=ht;exports.ExtrudePolygon=ft;exports.Group=tt;exports.Light=rt;exports.Line=lt;exports.Line2=at;exports.MeshLineGeometry=He;exports.Node=et;exports.Pie=ot;exports.getSplitTexture=dt;