gl-draw 0.16.0-beta.2 → 0.16.0-beta.4

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 +1 @@
1
- "use strict";var ke=Object.defineProperty,Fe=Object.defineProperties;var Ye=Object.getOwnPropertyDescriptors;var ce=Object.getOwnPropertySymbols;var Be=Object.prototype.hasOwnProperty,Pe=Object.prototype.propertyIsEnumerable;var je=(u,e,t)=>e in u?ke(u,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):u[e]=t,B=(u,e)=>{for(var t in e||(e={}))Be.call(e,t)&&je(u,t,e[t]);if(ce)for(var t of ce(e))Pe.call(e,t)&&je(u,t,e[t]);return u},le=(u,e)=>Fe(u,Ye(e));var pe=(u,e)=>{var t={};for(var n in u)Be.call(u,n)&&e.indexOf(n)<0&&(t[n]=u[n]);if(u!=null&&ce)for(var n of ce(u))e.indexOf(n)<0&&Pe.call(u,n)&&(t[n]=u[n]);return t};var se=(u,e,t)=>new Promise((n,s)=>{var o=r=>{try{p(t.next(r))}catch(f){s(f)}},a=r=>{try{p(t.throw(r))}catch(f){s(f)}},p=r=>r.done?n(r.value):Promise.resolve(r.value).then(o,a);p((t=t.apply(u,e)).next())});Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const Ue=require("three/examples/jsm/lines/LineMaterial"),Re=require("three/examples/jsm/lines/LineSegmentsGeometry"),P=require("../WebGPULineSegments2.js"),c=require("three"),me=require("three/examples/jsm/utils/BufferGeometryUtils"),Ve=require("../uvGenerator.js"),he=require("three-bvh-csg"),Ze=require("three/examples/jsm/lights/RectAreaLightUniformsLib"),$e=require("@tweenjs/tween.js"),Je=require("three/examples/jsm/lines/LineSegments2");function Qe(u){const e=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(u){for(const t in u)if(t!=="default"){const n=Object.getOwnPropertyDescriptor(u,t);Object.defineProperty(e,t,n.get?n:{enumerable:!0,get:()=>u[t]})}}return e.default=u,Object.freeze(e)}const ee=Qe($e);function D(u,e=0){const t=u[0].index!==null,n=new Set(Object.keys(u[0].attributes)),s=new Set(Object.keys(u[0].morphAttributes)),o={},a={},p=u[0].morphTargetsRelative,r=new c.BufferGeometry;let f=0;for(let i=0;i<u.length;++i){const l=u[i];let y=0;if(t!==(l.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 d in l.attributes){if(!n.has(d))return console.error("THREE.BufferGeometryUtils: .mergeGeometries() failed with geometry at index "+i+'. All geometries must have compatible attributes; make sure "'+d+'" attribute exists among all geometries, or in none of them.'),null;o[d]===void 0&&(o[d]=[]),o[d].push(l.attributes[d]),y++}if(y!==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!==l.morphTargetsRelative)return console.error("THREE.BufferGeometryUtils: .mergeGeometries() failed with geometry at index "+i+". .morphTargetsRelative must be consistent throughout all geometries."),null;for(const d in l.morphAttributes){if(!s.has(d))return console.error("THREE.BufferGeometryUtils: .mergeGeometries() failed with geometry at index "+i+". .morphAttributes must be consistent throughout all geometries."),null;a[d]===void 0&&(a[d]=[]),a[d].push(l.morphAttributes[d])}if(e){let d;if(t)d=l.index.count;else if(l.attributes.position!==void 0)d=l.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(f,d,i);else if(e===2&&l.groups.length>0)for(let b of l.groups){let T=b.materialIndex;r.addGroup(f+b.start,Math.min(b.count,d),T)}f+=d}}if(t){let i=0;const l=[];for(let y=0;y<u.length;++y){const d=u[y].index;for(let b=0;b<d.count;++b)l.push(d.getX(b)+i);i+=u[y].attributes.position.count}r.setIndex(l)}for(const i in o){const l=me.mergeAttributes(o[i]);if(!l)return console.error("THREE.BufferGeometryUtils: .mergeGeometries() failed while trying to merge the "+i+" attribute."),null;r.setAttribute(i,l)}for(const i in a){const l=a[i][0].length;if(l===0)break;r.morphAttributes=r.morphAttributes||{},r.morphAttributes[i]=[];for(let y=0;y<l;++y){const d=[];for(let T=0;T<a[i].length;++T)d.push(a[i][T][y]);const b=me.mergeAttributes(d);if(!b)return console.error("THREE.BufferGeometryUtils: .mergeGeometries() failed while trying to merge the "+i+" morphAttribute."),null;r.morphAttributes[i].push(b)}}return e===2?me.mergeGroups(r):r}const _e=u=>{const p=u,{coordinate:e,startHeight:t,height:n}=p,s=pe(p,["coordinate","startHeight","height"]);let o=t||0;return typeof t!="undefined"&&typeof n!="undefined"&&(o=t+n),new P.PolygonGeometry([e],le(B({},s),{startHeight:t,endHeight:o}))};class Ke extends P.BaseObject{constructor(e){super(),this.options=B({},e)}create(){const r=this.options,{geometry:e,coordinateArr:t,coordinate:n,material:s,useGroups:o}=r,a=pe(r,["geometry","coordinateArr","coordinate","material","useGroups"]);let p=e;if(!p&&n)p=_e(B({coordinate:n},a));else if(!p&&t){const f=t.map(i=>_e(B({coordinate:i},a)));p=D(f,o!=null?o:0)}this.createMesh(p,s)}}const et={ArcCurve:c.ArcCurve,CatmullRomCurve3:c.CatmullRomCurve3,CubicBezierCurve:c.CubicBezierCurve,CubicBezierCurve3:c.CubicBezierCurve3,EllipseCurve:c.EllipseCurve,LineCurve:c.LineCurve,LineCurve3:c.LineCurve3,QuadraticBezierCurve:c.QuadraticBezierCurve,QuadraticBezierCurve3:c.QuadraticBezierCurve3,SplineCurve:c.SplineCurve};class J extends c.BufferGeometry{constructor(e=new c.Shape([new c.Vector2(.5,.5),new c.Vector2(-.5,.5),new c.Vector2(-.5,-.5),new c.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 f=e[p];a(f)}this.setAttribute("position",new c.Float32BufferAttribute(s,3)),this.setAttribute("uv",new c.Float32BufferAttribute(o,2)),this.computeVertexNormals();function a(p){var Se,Ae,Me;const r=[],f=t.curveSegments!==void 0?t.curveSegments:12,i=t.steps!==void 0?t.steps:1,l=t.depth!==void 0?t.depth:1;let y=t.bevelEnabled!==void 0?t.bevelEnabled:!0,d=t.bevelThickness!==void 0?t.bevelThickness:.2,b=t.bevelSize!==void 0?t.bevelSize:d-.1,T=t.bevelOffset!==void 0?t.bevelOffset:0,A=t.bevelSegments!==void 0?t.bevelSegments:3;const M=t.extrudePath,j=t.UVGenerator!==void 0?t.UVGenerator:tt,S=(Se=t.hasTop)!=null?Se:!0,V=(Ae=t.hasBottom)!=null?Ae:!0,Q=(Me=t.hasSide)!=null?Me:!0;let H,Y=!1,U,te,ne,N;M&&(H=M.getSpacedPoints(i),Y=!0,y=!1,U=M.computeFrenetFrames(i,!1),te=new c.Vector3,ne=new c.Vector3,N=new c.Vector3),y||(A=0,d=0,b=0,T=0);const ye=p.extractPoints(f);let I=ye.shape;const _=ye.holes;if(!c.ShapeUtils.isClockWise(I)){I=I.reverse();for(let h=0,m=_.length;h<m;h++){const g=_[h];c.ShapeUtils.isClockWise(g)&&(_[h]=g.reverse())}}function be(h){const g=10000000000000001e-36;let w=h[0];for(let x=1;x<=h.length;x++){const L=x%h.length,v=h[L],C=v.x-w.x,G=v.y-w.y,E=C*C+G*G,z=Math.max(Math.abs(v.x),Math.abs(v.y),Math.abs(w.x),Math.abs(w.y)),$=g*z*z;if(E<=$){h.splice(L,1),x--;continue}w=v}}be(I),_.forEach(be);const fe=_.length,R=I;for(let h=0;h<fe;h++){const m=_[h];I=I.concat(m)}function K(h,m,g){return m||console.error("THREE.ExtrudeGeometry: vec does not exist"),h.clone().addScaledVector(m,g)}const W=I.length;function xe(h,m,g){let w,x,L;const v=h.x-m.x,C=h.y-m.y,G=g.x-h.x,E=g.y-h.y,z=v*v+C*C,$=v*E-C*G;if(Math.abs($)>Number.EPSILON){const O=Math.sqrt(z),Le=Math.sqrt(G*G+E*E),Te=m.x-C/O,Ce=m.y+v/O,Xe=g.x-E/Le,qe=g.y+G/Le,Ge=((Xe-Te)*E-(qe-Ce)*G)/(v*E-C*G);w=Te+v*Ge-h.x,x=Ce+C*Ge-h.y;const Ee=w*w+x*x;if(Ee<=2)return new c.Vector2(w,x);L=Math.sqrt(Ee/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(E)&&(O=!0),O?(w=-C,x=v,L=Math.sqrt(z)):(w=v,x=C,L=Math.sqrt(z/2))}return new c.Vector2(w/L,x/L)}const ie=[];for(let h=0,m=R.length,g=m-1,w=h+1;h<m;h++,g++,w++)g===m&&(g=0),w===m&&(w=0),ie[h]=xe(R[h],R[g],R[w]);const de=[];let F,oe=ie.concat();for(let h=0,m=fe;h<m;h++){const g=_[h];F=[];for(let w=0,x=g.length,L=x-1,v=w+1;w<x;w++,L++,v++)L===x&&(L=0),v===x&&(v=0),F[w]=xe(g[w],g[L],g[v]);de.push(F),oe=oe.concat(F)}let Z;if(A===0)Z=c.ShapeUtils.triangulateShape(R,_);else{const h=[],m=[];for(let g=0;g<A;g++){const w=g/A,x=d*Math.cos(w*Math.PI/2),L=b*Math.sin(w*Math.PI/2)+T;for(let v=0,C=R.length;v<C;v++){const G=K(R[v],ie[v],L);X(G.x,G.y,-x),w===0&&h.push(G)}for(let v=0,C=fe;v<C;v++){const G=_[v];F=de[v];const E=[];for(let z=0,$=G.length;z<$;z++){const O=K(G[z],F[z],L);X(O.x,O.y,-x),w===0&&E.push(O)}w===0&&m.push(E)}}Z=c.ShapeUtils.triangulateShape(h,m)}const re=Z.length,we=b+T;for(let h=0;h<W;h++){const m=y?K(I[h],oe[h],we):I[h];Y?(ne.copy(U.normals[0]).multiplyScalar(m.x),te.copy(U.binormals[0]).multiplyScalar(m.y),N.copy(H[0]).add(ne).add(te),X(N.x,N.y,N.z)):X(m.x,m.y,0)}for(let h=1;h<=i;h++)for(let m=0;m<W;m++){const g=y?K(I[m],oe[m],we):I[m];Y?(ne.copy(U.normals[h]).multiplyScalar(g.x),te.copy(U.binormals[h]).multiplyScalar(g.y),N.copy(H[h]).add(ne).add(te),X(N.x,N.y,N.z)):X(g.x,g.y,l/i*h)}for(let h=A-1;h>=0;h--){const m=h/A,g=d*Math.cos(m*Math.PI/2),w=b*Math.sin(m*Math.PI/2)+T;for(let x=0,L=R.length;x<L;x++){const v=K(R[x],ie[x],w);X(v.x,v.y,l+g)}for(let x=0,L=_.length;x<L;x++){const v=_[x];F=de[x];for(let C=0,G=v.length;C<G;C++){const E=K(v[C],F[C],w);Y?X(E.x,E.y+H[i-1].y,H[i-1].x+g):X(E.x,E.y,l+g)}}}He(),Q&&Ne();function He(){const h=s.length/3;if(y){let m=0,g=W*m;if(V)for(let w=0;w<re;w++){const x=Z[w];ae(x[2]+g,x[1]+g,x[0]+g)}if(m=i+A*2,g=W*m,S)for(let w=0;w<re;w++){const x=Z[w];ae(x[0]+g,x[1]+g,x[2]+g)}}else{if(V)for(let m=0;m<re;m++){const g=Z[m];ae(g[2],g[1],g[0])}if(S)for(let m=0;m<re;m++){const g=Z[m];ae(g[0]+W*i,g[1]+W*i,g[2]+W*i)}}n.addGroup(h,s.length/3-h,0)}function Ne(){const h=s.length/3;let m=0;ve(R,m),m+=R.length;for(let g=0,w=_.length;g<w;g++){const x=_[g];ve(x,m),m+=x.length}n.addGroup(h,s.length/3-h,1)}function ve(h,m){let g=h.length;for(;--g>=0;){const w=g;let x=g-1;x<0&&(x=h.length-1);for(let L=0,v=i+A*2;L<v;L++){const C=W*L,G=W*(L+1),E=m+w+C,z=m+x+C,$=m+x+G,O=m+w+G;We(E,z,$,O)}}}function X(h,m,g){r.push(h),r.push(m),r.push(g)}function ae(h,m,g){q(h),q(m),q(g);const w=s.length/3,x=j.generateTopUV(n,s,w-3,w-2,w-1);k(x[0]),k(x[1]),k(x[2])}function We(h,m,g,w){q(h),q(m),q(w),q(m),q(g),q(w);const x=s.length/3,L=j.generateSideWallUV(n,s,x-6,x-3,x-2,x-1);k(L[0]),k(L[1]),k(L[3]),k(L[1]),k(L[2]),k(L[3])}function q(h){s.push(r[h*3+0]),s.push(r[h*3+1]),s.push(r[h*3+2])}function k(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 nt(t,n,e)}static fromJSON(e,t){const n=[];for(let o=0,a=e.shapes.length;o<a;o++){const p=t[e.shapes[o]];n.push(p)}const s=e.options.extrudePath;return s!==void 0&&(e.options.extrudePath=new et[`${s.type}`]().fromJSON(s)),new J(n,e.options)}}const tt={generateTopUV:function(u,e,t,n,s){const o=e[t*3],a=e[t*3+1],p=e[n*3],r=e[n*3+1],f=e[s*3],i=e[s*3+1];return[new c.Vector2(o,a),new c.Vector2(p,r),new c.Vector2(f,i)]},generateSideWallUV:function(u,e,t,n,s,o){const a=e[t*3],p=e[t*3+1],r=e[t*3+2],f=e[n*3],i=e[n*3+1],l=e[n*3+2],y=e[s*3],d=e[s*3+1],b=e[s*3+2],T=e[o*3],A=e[o*3+1],M=e[o*3+2];return Math.abs(p-i)<Math.abs(a-f)?[new c.Vector2(a,1-r),new c.Vector2(f,1-l),new c.Vector2(y,1-b),new c.Vector2(T,1-M)]:[new c.Vector2(p,1-r),new c.Vector2(i,1-l),new c.Vector2(d,1-b),new c.Vector2(A,1-M)]}};function nt(u,e,t){if(t.shapes=[],Array.isArray(u))for(let n=0,s=u.length;n<s;n++){const o=u[n];t.shapes.push(o.uuid)}else t.shapes.push(u.uuid);return t.options=Object.assign({},e),e.extrudePath!==void 0&&(t.options.extrudePath=e.extrudePath.toJSON()),t}class st extends J{constructor(e,t){super(e,t);const n=new he.Brush(new J(e,le(B({},t),{hasTop:!0,hasSide:!0,hasBottom:!1})));n.updateMatrixWorld();const s=new c.Box3().setFromObject(n),o=new c.Vector3;s.getSize(o);const a=new c.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 c.Vector3;r.getSize(M);const j=Math.max(o.x/M.x,o.y/M.y);p=Math.ceil(t.topSegments*j)}if(p<4)return this;const f=new c.PlaneGeometry(o.x,o.y,p,p),i=new he.Brush(f);i.position.set(a.x,a.y,a.z),i.updateMatrixWorld();const y=new he.Evaluator().evaluate(i,n,he.INTERSECTION),d=y.geometry.getAttribute("position"),b=new c.Float32BufferAttribute(d.count*2,2);for(let M=0;M<d.count;M++){const j=d.getZ(M);d.setZ(M,t.depth+j)}if(r){const M=r.min,j=r.max,S=new c.Vector3().subVectors(j,M);for(let V=0;V<d.count;V++){const Q=d.getX(V),H=d.getY(V),Y=(Q-M.x)/S.x,U=(H-M.y)/S.y;b.setXY(V,Y,U)}y.geometry.setAttribute("uv",b)}d.needsUpdate=!0;const T=new J(e,le(B({},t),{hasTop:!1})),A=D([y.geometry,T],2);this.copy(A.toNonIndexed())}}const ze=u=>{const{split:e,depth:t,points:n,box3:s,hasTop:o,hasBottom:a,hasSide:p,sideRepeat:r,topSegments:f}=u,i=f?st:J,l=new i(new c.Shape(n),{depth:t,bevelEnabled:!1,box3:s,UVGenerator:Ve.getUVGenerator({split:e,box3:s,sideRepeat:r}),hasTop:o,hasBottom:a,hasSide:p,topSegments:f});return Ve.claerUVGenerator(),l};class it extends P.BaseObject{constructor(e){super(),this.options=B({depth:1},e)}create(){return se(this,null,function*(){const{points:e,pointsArr:t,useGroups:n,depth:s,geometry:o,geometryArr:a,material:p,box3:r,split:f,hasTop:i,hasBottom:l,hasSide:y}=this.options,d=Array.isArray(s)?s:[s],b=Array.isArray(r)?r:[r],T=p;let A=o;T||console.log("material is null"),!A&&e?A=ze({points:e,depth:d[0],box3:b[0],split:f,hasTop:i,hasBottom:l,hasSide:y}):!A&&t?A=D(t.map((M,j)=>{var S,V;return ze({points:M,depth:(S=d[j])!=null?S:d[0],box3:(V=b[j])!=null?V:b[0],split:f,hasTop:i,hasBottom:l,hasSide:y})}),n!=null?n:0):!A&&a&&a.length>1?A=D(a,n!=null?n:0):!A&&a&&a.length===1&&([A]=a),this.createMesh(A,T)})}addGeometries(e){const t=this.object3d,n=D([t.geometry,...e]);t.geometry=n}setTextureAnisotropic(e,t){e.anisotropy=t||this.pencil.renderer.capabilities.getMaxAnisotropy()}}const ot=u=>{const{topColor:e,sideColor:t,sideMap:n,createCanvasObjectURL:s,split:o,maxAnisotropy:a}=u;return new Promise(p=>{const r=n?document.createElement("img"):{src:"",onload:()=>{},width:128,height:128};r.onload=()=>{const f=o,i=document.createElement("canvas"),l=i.getContext("2d");i.height=r.height/(1-f),i.width=r.width,f&&e&&(l.fillStyle=e,l.fillRect(0,0,r.width,i.height*f)),n&&r instanceof HTMLImageElement?l.drawImage(r,0,i.height*f,r.width,r.height):t&&(l.fillStyle=t,l.fillRect(0,i.height*f,r.width,r.height)),s&&i.toBlob(d=>{console.log(URL.createObjectURL(d))});const y=new c.CanvasTexture(i);p(y)},n?r.src=n:r instanceof HTMLImageElement||r.onload()})};class rt extends P.BaseObject{create(){this.createGroup()}}class at extends P.BaseObject{constructor(e){super(),this.rectAreaLightUniformsLibInit=!1,this.options=e}create(){var t,n,s,o,a,p,r,f,i,l,y,d,b,T,A,M,j;const e=this.options;if(e.type==="AmbientLight"){const S=new c.AmbientLight(e.color);S.name="环境光",this.object3d=S}else if(e.type==="DirectionalLight"){const S=new c.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 c.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 c.SpotLight((a=e.color)!=null?a:16777215,(p=e.intensity)!=null?p:1,(r=e.distance)!=null?r:0,(f=e.angle)!=null?f:Math.PI/3,(i=e.penumbra)!=null?i:1,(l=e.decay)!=null?l:2);S.name="聚光灯",this.object3d=S,this.spotLight=S,S.target.name="聚光灯目标"}else if(e.type==="HemisphereLight"){const S=new c.HemisphereLight((y=e.color)!=null?y:16777215,(d=e.groundColor)!=null?d:16777215,(b=e.intensity)!=null?b:1);S.name="半球光",this.object3d=S,this.hemisphereLight=S}else if(e.type==="RectAreaLight"){this.rectAreaLightUniformsLibInit||(Ze.RectAreaLightUniformsLib.init(),this.rectAreaLightUniformsLibInit=!0);const S=new c.RectAreaLight((T=e.color)!=null?T:16777215,(A=e.intensity)!=null?A:1,(M=e.width)!=null?M:10,(j=e.height)!=null?j: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()}}class De extends c.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 c.Matrix4,this.shape=t,n&&(this.shapeFunction=n),e.length>0&&this.setPoints(e)}convertToVector3Array(e){if(typeof e[0]=="number"){const t=[],n=e;for(let s=0;s<n.length;s+=3)t.push(new c.Vector3(n[s],n[s+1],n[s+2]));return t}else return e.map(t=>{if(t instanceof c.Vector2)return new c.Vector3(t.x,t.y,0);if(t instanceof c.Vector3)return t;if(Array.isArray(t)&&t.length===2)return new c.Vector3(t[0],t[1],0);if(Array.isArray(t)&&t.length===3)return new c.Vector3(t[0],t[1],t[2])}).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=new c.BufferAttribute(new Float32Array(this.pointCount*6),3),t=new c.BufferAttribute(new Float32Array(this.pointCount*6),3),n=new c.BufferAttribute(new Float32Array(this.pointCount*6),3),s=new c.BufferAttribute(new Float32Array(this.pointCount*2),1),o=new c.BufferAttribute(new Float32Array(this.pointCount*2),1),a=new c.BufferAttribute(new Float32Array(this.pointCount*2),1),p=new c.BufferAttribute(new Float32Array(this.pointCount*4),2),r=new c.BufferAttribute(new Uint16Array((this.pointCount-1)*6),1);this.shape==="taper"&&(this.shapeFunction=f=>1*Math.pow(4*f*(1-f),1));for(let f=0,i=0,l=0;f<this.pointCount;f+=1,i+=2,l+=6){s.setX(i,f/this.pointCount),s.setX(i+1,f/this.pointCount),o.setX(i,1),o.setX(i+1,-1);const y=this.shape==="none"?1:this.shapeFunction(f/(this.pointCount-1));a.setX(i,y),a.setX(i+1,y);const d=f/(this.pointCount-1);if(p.setXY(i,d,0),p.setXY(i+1,d,1),f<this.pointCount-1){const b=f*2;r.setX(l+0,b+0),r.setX(l+1,b+1),r.setX(l+2,b+2),r.setX(l+3,b+2),r.setX(l+4,b+1),r.setX(l+5,b+3)}}this.setAttribute("position",e),this.setAttribute("previous",t),this.setAttribute("next",n),this.setAttribute("counters",s),this.setAttribute("side",o),this.setAttribute("width",a),this.setAttribute("uv",p),this.setIndex(r)}updateGeometry(){if(!this._points[0])return;const e=this.getAttribute("position"),t=this.getAttribute("previous"),n=this.getAttribute("next");let s=0,o=0,a=0;const p=this._points[0];t.setXYZ(o,p.x,p.y,p.z),o+=1,t.setXYZ(o,p.x,p.y,p.z),o+=1;for(let f=0;f<this.pointCount;f++){const i=this._points[f];e.setXYZ(s,i.x,i.y,i.z),s+=1,e.setXYZ(s,i.x,i.y,i.z),s+=1,f<this.pointCount-1&&(t.setXYZ(o,i.x,i.y,i.z),o+=1,t.setXYZ(o,i.x,i.y,i.z),o+=1),f>0&&f+1<=this.pointCount&&(n.setXYZ(a,i.x,i.y,i.z),a+=1,n.setXYZ(a,i.x,i.y,i.z),a+=1)}const r=this._points[this.pointCount-1];n.setXYZ(a,r.x,r.y,r.z),a+=1,n.setXYZ(a,r.x,r.y,r.z),a+=1,e.needsUpdate=!0,t.needsUpdate=!0,n.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())}}function ct(u,e){const t=new c.Matrix4,n=new c.Ray,s=new c.Sphere,o=new c.Vector3,a=this.geometry;if(s.copy(a.boundingSphere),s.applyMatrix4(this.matrixWorld),!u.ray.intersectSphere(s,o))return;t.copy(this.matrixWorld).invert(),n.copy(u.ray).applyMatrix4(t);const p=new c.Vector3,r=new c.Vector3,f=new c.Vector3,i=this instanceof c.LineSegments?2:1,l=a.index,y=a.attributes;if(l!==null){const d=l.array,b=y.position.array,T=y.width.array;for(let A=0,M=d.length-1;A<M;A+=i){const j=d[A],S=d[A+1];p.fromArray(b,j*3),r.fromArray(b,S*3);const V=T[Math.floor(A/3)]!==void 0?T[Math.floor(A/3)]:1,Q=u.params.Line.threshold+this.material.lineWidth*V/2,H=Q*Q;if(n.distanceSqToSegment(p,r,o,f)>H)continue;o.applyMatrix4(this.matrixWorld);const U=u.ray.origin.distanceTo(o);U<u.near||U>u.far||(e.push({distance:U,point:f.clone().applyMatrix4(this.matrixWorld),index:A,face:null,faceIndex:void 0,object:this}),A=M)}}}const ge=u=>{const{setPointWidth:e,nodes:t}=u,n=new De;return n.setPoints(t,e),n},Oe=new WeakMap,ue=new Map;let lt=class extends P.BaseObject{constructor(e={}){super(),this.options=B({},e)}get material(){var e;return(e=this.object3d)==null?void 0:e.material}create(){return se(this,null,function*(){const{nodes:e,nodesArr:t,geometry:n,geometryArr:s,material:o,useGroups:a,setPointWidth:p,lineWidthArr:r,materialParameters:f}=this.options;let i=o,l=n;!i&&f&&(i=this.getMaterial(f)),!l&&e?l=ge({nodes:e,setPointWidth:p}):!l&&t?l=D(t.map((y,d)=>{let b=p;return!b&&r&&(b=()=>{var T;return(T=r[d])!=null?T:r[0]}),ge({nodes:y,setPointWidth:b})}),a!=null?a:0):!l&&s&&s.length>1?l=D(s,a!=null?a:0):!l&&s&&s.length===1&&([l]=s),this.createMesh(l,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 P.MeshLineMaterial(B({color:new c.Color("#ffffff")},e));return s.uniforms.resolution.value.set(t,n),s}addGeometries(e){const t=this.object3d,n=D([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:a,onComplete:p,startShow:r}={}){const{offset:f,offsetLoop:i}=this.material.uniforms,l=this.pencil.userData.debugLine?ue:Oe;if(l.get(this.material)&&this.stopAnimation(),e===0)return;const y=s!=null?s:!0;f.value.x=1,i.value=y&&r?1:0;let d=0;const b=new ee.Tween(f.value).to({x:-1},e).delay(t).repeat(n).onUpdate(({x:T})=>{y&&T<=0&&i.value===0&&(i.value=1),a==null||a(T)}).onRepeat(()=>{d+=1,o==null||o(d)}).onComplete(()=>{p==null||p()}).start();l.set(this.material,b),this.material.addEventListener("dispose",()=>{this.stopAnimation()}),this.pencil.userData.debugLine&&console.log("animate",ue.size)}stopAnimation(){const e=this.pencil.userData.debugLine?ue:Oe,t=e.get(this.material);t&&(t.stop(),ee.remove(t),e.delete(this.material),this.material.uniforms.offset.value.x=0,this.material.uniforms.offsetLoop.value=1),this.pencil.userData.debugLine&&console.log("stopAnimation",ue.size)}render(){const{width:e,height:t}=this.pencil.getSize();this.resize(e,t)}};const Ie=u=>{const{points:e}=u,t=e.reduce((s,o,a)=>(a<e.length-1&&s.push(o,e[a+1]),s),[]);return new c.BufferGeometry().setFromPoints(t)};class ht extends P.BaseObject{constructor(e={}){super(),this.options=B({},e)}get material(){var e;return(e=this.object3d)==null?void 0:e.material}create(){return se(this,null,function*(){const{points:e,pointsArr:t,geometry:n,geometryArr:s,material:o,useGroups:a,setPointWidth:p,lineWidthArr:r,materialParameters:f,instanceCount:i}=this.options;let l=o,y=n;!l&&f&&(l=this.getMaterial(f)),!y&&e?y=Ie({points:e}):!y&&t?y=D(t.map(b=>Ie({points:b})),a!=null?a:0):!y&&s&&s.length>1?y=D(s,a!=null?a:0):!y&&s&&s.length===1&&([y]=s);const d=new Re.LineSegmentsGeometry().fromLineSegments(new c.LineSegments(y));if(this.pencil.options.WebGPUTHREE){i&&(d.instanceCount=i);const b=new P.LineSegments2(d,l);b.computeLineDistances(),this.object3d=b}else{const b=new Je.LineSegments2(d,l);b.computeLineDistances(),this.object3d=b}})}getMaterial(e){return new Ue.LineMaterial(B({color:new c.Color("#ffffff")},e))}}class ut extends P.BaseObject{constructor(e){super(),this.objectType="BaseObject#Node",this.onNodePointerIndex=[],this.options=B({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,a=0;t.left<0?o=-t.left:t.right>n&&(o=n-t.right),t.top<0?a=-t.top:t.bottom>s&&(a=s-t.bottom),t.left+o<0&&(o=-t.left),t.top+a<0&&(a=-t.top),(o!==0||a!==0)&&(e.style.transform=`translate(${o}px, ${a}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 ft extends P.BaseObject{constructor(e){super(),this.options=B({maxDepth:10,percentDepth:!1,innerRadius:25,outRadius:42,activeIndex:-1},e)}create(){return se(this,null,function*(){this.createGroup();const{data:e,maxDepth:t,colors:n,material:s,percentDepth:o,activeIndex:a}=this.options,p=Math.max(...e),r=e.reduce((i,l)=>i+l,0);let f=Math.PI/2;e.forEach((i,l)=>{if(i===0)return;const y=Math.PI*2*(i/r),d=n[l],b=o?t*(i/p):t,T=this.createGeometry(b,y),A=s?s.clone():new c.MeshBasicMaterial({color:d});s&&A.color.set(d);const M=new c.Mesh(T,A);M.userData.depth=b,M.userData.index=l,M.rotateZ(f),f+=y,this.add(M)}),a!==-1&&this.setActive(a)})}createGeometry(e,t){const{outRadius:n,innerRadius:s}=this.options,o=new c.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 J(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 ee.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 ee.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 ee.Tween(this.object3d.scale).to({z:1},1e3).easing(ee.Easing.Sinusoidal.InOut).start()}}Object.defineProperty(exports,"Line2Material",{enumerable:!0,get:()=>Ue.LineMaterial});Object.defineProperty(exports,"LineSegmentsGeometry",{enumerable:!0,get:()=>Re.LineSegmentsGeometry});exports.MeshLineMaterial=P.MeshLineMaterial;exports.getConicPolygonGeometry=P.PolygonGeometry;exports.getConicPolygonGeometryMetas=P.getMetas;exports.ConicPolygon=Ke;exports.ExtrudePolygon=it;exports.Group=rt;exports.Light=at;exports.Line=lt;exports.Line2=ht;exports.MeshLineGeometry=De;exports.MeshLineRaycast=ct;exports.Node=ut;exports.Pie=ft;exports.getSplitTexture=ot;
1
+ "use strict";var ke=Object.defineProperty,Fe=Object.defineProperties;var Ye=Object.getOwnPropertyDescriptors;var ce=Object.getOwnPropertySymbols;var Be=Object.prototype.hasOwnProperty,Pe=Object.prototype.propertyIsEnumerable;var je=(u,e,t)=>e in u?ke(u,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):u[e]=t,B=(u,e)=>{for(var t in e||(e={}))Be.call(e,t)&&je(u,t,e[t]);if(ce)for(var t of ce(e))Pe.call(e,t)&&je(u,t,e[t]);return u},le=(u,e)=>Fe(u,Ye(e));var pe=(u,e)=>{var t={};for(var n in u)Be.call(u,n)&&e.indexOf(n)<0&&(t[n]=u[n]);if(u!=null&&ce)for(var n of ce(u))e.indexOf(n)<0&&Pe.call(u,n)&&(t[n]=u[n]);return t};var se=(u,e,t)=>new Promise((n,s)=>{var o=r=>{try{p(t.next(r))}catch(f){s(f)}},a=r=>{try{p(t.throw(r))}catch(f){s(f)}},p=r=>r.done?n(r.value):Promise.resolve(r.value).then(o,a);p((t=t.apply(u,e)).next())});Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const Ue=require("three/examples/jsm/lines/LineMaterial"),Re=require("three/examples/jsm/lines/LineSegmentsGeometry"),P=require("../WebGPULineSegments2.js"),c=require("three"),me=require("three/examples/jsm/utils/BufferGeometryUtils"),Ve=require("../uvGenerator.js"),he=require("three-bvh-csg"),Ze=require("three/examples/jsm/lights/RectAreaLightUniformsLib"),$e=require("@tweenjs/tween.js"),Je=require("three/examples/jsm/lines/LineSegments2");function Qe(u){const e=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(u){for(const t in u)if(t!=="default"){const n=Object.getOwnPropertyDescriptor(u,t);Object.defineProperty(e,t,n.get?n:{enumerable:!0,get:()=>u[t]})}}return e.default=u,Object.freeze(e)}const ee=Qe($e);function D(u,e=0){const t=u[0].index!==null,n=new Set(Object.keys(u[0].attributes)),s=new Set(Object.keys(u[0].morphAttributes)),o={},a={},p=u[0].morphTargetsRelative,r=new c.BufferGeometry;let f=0;for(let i=0;i<u.length;++i){const l=u[i];let y=0;if(t!==(l.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 d in l.attributes){if(!n.has(d))return console.error("THREE.BufferGeometryUtils: .mergeGeometries() failed with geometry at index "+i+'. All geometries must have compatible attributes; make sure "'+d+'" attribute exists among all geometries, or in none of them.'),null;o[d]===void 0&&(o[d]=[]),o[d].push(l.attributes[d]),y++}if(y!==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!==l.morphTargetsRelative)return console.error("THREE.BufferGeometryUtils: .mergeGeometries() failed with geometry at index "+i+". .morphTargetsRelative must be consistent throughout all geometries."),null;for(const d in l.morphAttributes){if(!s.has(d))return console.error("THREE.BufferGeometryUtils: .mergeGeometries() failed with geometry at index "+i+". .morphAttributes must be consistent throughout all geometries."),null;a[d]===void 0&&(a[d]=[]),a[d].push(l.morphAttributes[d])}if(e){let d;if(t)d=l.index.count;else if(l.attributes.position!==void 0)d=l.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(f,d,i);else if(e===2&&l.groups.length>0)for(let b of l.groups){let T=b.materialIndex;r.addGroup(f+b.start,Math.min(b.count,d),T)}f+=d}}if(t){let i=0;const l=[];for(let y=0;y<u.length;++y){const d=u[y].index;for(let b=0;b<d.count;++b)l.push(d.getX(b)+i);i+=u[y].attributes.position.count}r.setIndex(l)}for(const i in o){const l=me.mergeAttributes(o[i]);if(!l)return console.error("THREE.BufferGeometryUtils: .mergeGeometries() failed while trying to merge the "+i+" attribute."),null;r.setAttribute(i,l)}for(const i in a){const l=a[i][0].length;if(l===0)break;r.morphAttributes=r.morphAttributes||{},r.morphAttributes[i]=[];for(let y=0;y<l;++y){const d=[];for(let T=0;T<a[i].length;++T)d.push(a[i][T][y]);const b=me.mergeAttributes(d);if(!b)return console.error("THREE.BufferGeometryUtils: .mergeGeometries() failed while trying to merge the "+i+" morphAttribute."),null;r.morphAttributes[i].push(b)}}return e===2?me.mergeGroups(r):r}const _e=u=>{const p=u,{coordinate:e,startHeight:t,height:n}=p,s=pe(p,["coordinate","startHeight","height"]);let o=t||0;return typeof t!="undefined"&&typeof n!="undefined"&&(o=t+n),new P.PolygonGeometry([e],le(B({},s),{startHeight:t,endHeight:o}))};class Ke extends P.BaseObject{constructor(e){super(),this.options=B({},e)}create(){const r=this.options,{geometry:e,coordinateArr:t,coordinate:n,material:s,useGroups:o}=r,a=pe(r,["geometry","coordinateArr","coordinate","material","useGroups"]);let p=e;if(!p&&n)p=_e(B({coordinate:n},a));else if(!p&&t){const f=t.map(i=>_e(B({coordinate:i},a)));p=D(f,o!=null?o:0)}this.createMesh(p,s)}}const et={ArcCurve:c.ArcCurve,CatmullRomCurve3:c.CatmullRomCurve3,CubicBezierCurve:c.CubicBezierCurve,CubicBezierCurve3:c.CubicBezierCurve3,EllipseCurve:c.EllipseCurve,LineCurve:c.LineCurve,LineCurve3:c.LineCurve3,QuadraticBezierCurve:c.QuadraticBezierCurve,QuadraticBezierCurve3:c.QuadraticBezierCurve3,SplineCurve:c.SplineCurve};class J extends c.BufferGeometry{constructor(e=new c.Shape([new c.Vector2(.5,.5),new c.Vector2(-.5,.5),new c.Vector2(-.5,-.5),new c.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 f=e[p];a(f)}this.setAttribute("position",new c.Float32BufferAttribute(s,3)),this.setAttribute("uv",new c.Float32BufferAttribute(o,2)),this.computeVertexNormals();function a(p){var Se,Ae,Me;const r=[],f=t.curveSegments!==void 0?t.curveSegments:12,i=t.steps!==void 0?t.steps:1,l=t.depth!==void 0?t.depth:1;let y=t.bevelEnabled!==void 0?t.bevelEnabled:!0,d=t.bevelThickness!==void 0?t.bevelThickness:.2,b=t.bevelSize!==void 0?t.bevelSize:d-.1,T=t.bevelOffset!==void 0?t.bevelOffset:0,A=t.bevelSegments!==void 0?t.bevelSegments:3;const M=t.extrudePath,j=t.UVGenerator!==void 0?t.UVGenerator:tt,S=(Se=t.hasTop)!=null?Se:!0,V=(Ae=t.hasBottom)!=null?Ae:!0,Q=(Me=t.hasSide)!=null?Me:!0;let H,Y=!1,U,te,ne,N;M&&(H=M.getSpacedPoints(i),Y=!0,y=!1,U=M.computeFrenetFrames(i,!1),te=new c.Vector3,ne=new c.Vector3,N=new c.Vector3),y||(A=0,d=0,b=0,T=0);const ye=p.extractPoints(f);let I=ye.shape;const _=ye.holes;if(!c.ShapeUtils.isClockWise(I)){I=I.reverse();for(let h=0,m=_.length;h<m;h++){const g=_[h];c.ShapeUtils.isClockWise(g)&&(_[h]=g.reverse())}}function be(h){const g=10000000000000001e-36;let w=h[0];for(let x=1;x<=h.length;x++){const L=x%h.length,v=h[L],C=v.x-w.x,G=v.y-w.y,E=C*C+G*G,z=Math.max(Math.abs(v.x),Math.abs(v.y),Math.abs(w.x),Math.abs(w.y)),$=g*z*z;if(E<=$){h.splice(L,1),x--;continue}w=v}}be(I),_.forEach(be);const fe=_.length,R=I;for(let h=0;h<fe;h++){const m=_[h];I=I.concat(m)}function K(h,m,g){return m||console.error("THREE.ExtrudeGeometry: vec does not exist"),h.clone().addScaledVector(m,g)}const W=I.length;function xe(h,m,g){let w,x,L;const v=h.x-m.x,C=h.y-m.y,G=g.x-h.x,E=g.y-h.y,z=v*v+C*C,$=v*E-C*G;if(Math.abs($)>Number.EPSILON){const O=Math.sqrt(z),Le=Math.sqrt(G*G+E*E),Te=m.x-C/O,Ce=m.y+v/O,Xe=g.x-E/Le,qe=g.y+G/Le,Ge=((Xe-Te)*E-(qe-Ce)*G)/(v*E-C*G);w=Te+v*Ge-h.x,x=Ce+C*Ge-h.y;const Ee=w*w+x*x;if(Ee<=2)return new c.Vector2(w,x);L=Math.sqrt(Ee/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(E)&&(O=!0),O?(w=-C,x=v,L=Math.sqrt(z)):(w=v,x=C,L=Math.sqrt(z/2))}return new c.Vector2(w/L,x/L)}const ie=[];for(let h=0,m=R.length,g=m-1,w=h+1;h<m;h++,g++,w++)g===m&&(g=0),w===m&&(w=0),ie[h]=xe(R[h],R[g],R[w]);const de=[];let F,oe=ie.concat();for(let h=0,m=fe;h<m;h++){const g=_[h];F=[];for(let w=0,x=g.length,L=x-1,v=w+1;w<x;w++,L++,v++)L===x&&(L=0),v===x&&(v=0),F[w]=xe(g[w],g[L],g[v]);de.push(F),oe=oe.concat(F)}let Z;if(A===0)Z=c.ShapeUtils.triangulateShape(R,_);else{const h=[],m=[];for(let g=0;g<A;g++){const w=g/A,x=d*Math.cos(w*Math.PI/2),L=b*Math.sin(w*Math.PI/2)+T;for(let v=0,C=R.length;v<C;v++){const G=K(R[v],ie[v],L);X(G.x,G.y,-x),w===0&&h.push(G)}for(let v=0,C=fe;v<C;v++){const G=_[v];F=de[v];const E=[];for(let z=0,$=G.length;z<$;z++){const O=K(G[z],F[z],L);X(O.x,O.y,-x),w===0&&E.push(O)}w===0&&m.push(E)}}Z=c.ShapeUtils.triangulateShape(h,m)}const re=Z.length,we=b+T;for(let h=0;h<W;h++){const m=y?K(I[h],oe[h],we):I[h];Y?(ne.copy(U.normals[0]).multiplyScalar(m.x),te.copy(U.binormals[0]).multiplyScalar(m.y),N.copy(H[0]).add(ne).add(te),X(N.x,N.y,N.z)):X(m.x,m.y,0)}for(let h=1;h<=i;h++)for(let m=0;m<W;m++){const g=y?K(I[m],oe[m],we):I[m];Y?(ne.copy(U.normals[h]).multiplyScalar(g.x),te.copy(U.binormals[h]).multiplyScalar(g.y),N.copy(H[h]).add(ne).add(te),X(N.x,N.y,N.z)):X(g.x,g.y,l/i*h)}for(let h=A-1;h>=0;h--){const m=h/A,g=d*Math.cos(m*Math.PI/2),w=b*Math.sin(m*Math.PI/2)+T;for(let x=0,L=R.length;x<L;x++){const v=K(R[x],ie[x],w);X(v.x,v.y,l+g)}for(let x=0,L=_.length;x<L;x++){const v=_[x];F=de[x];for(let C=0,G=v.length;C<G;C++){const E=K(v[C],F[C],w);Y?X(E.x,E.y+H[i-1].y,H[i-1].x+g):X(E.x,E.y,l+g)}}}He(),Q&&Ne();function He(){const h=s.length/3;if(y){let m=0,g=W*m;if(V)for(let w=0;w<re;w++){const x=Z[w];ae(x[2]+g,x[1]+g,x[0]+g)}if(m=i+A*2,g=W*m,S)for(let w=0;w<re;w++){const x=Z[w];ae(x[0]+g,x[1]+g,x[2]+g)}}else{if(V)for(let m=0;m<re;m++){const g=Z[m];ae(g[2],g[1],g[0])}if(S)for(let m=0;m<re;m++){const g=Z[m];ae(g[0]+W*i,g[1]+W*i,g[2]+W*i)}}n.addGroup(h,s.length/3-h,0)}function Ne(){const h=s.length/3;let m=0;ve(R,m),m+=R.length;for(let g=0,w=_.length;g<w;g++){const x=_[g];ve(x,m),m+=x.length}n.addGroup(h,s.length/3-h,1)}function ve(h,m){let g=h.length;for(;--g>=0;){const w=g;let x=g-1;x<0&&(x=h.length-1);for(let L=0,v=i+A*2;L<v;L++){const C=W*L,G=W*(L+1),E=m+w+C,z=m+x+C,$=m+x+G,O=m+w+G;We(E,z,$,O)}}}function X(h,m,g){r.push(h),r.push(m),r.push(g)}function ae(h,m,g){q(h),q(m),q(g);const w=s.length/3,x=j.generateTopUV(n,s,w-3,w-2,w-1);k(x[0]),k(x[1]),k(x[2])}function We(h,m,g,w){q(h),q(m),q(w),q(m),q(g),q(w);const x=s.length/3,L=j.generateSideWallUV(n,s,x-6,x-3,x-2,x-1);k(L[0]),k(L[1]),k(L[3]),k(L[1]),k(L[2]),k(L[3])}function q(h){s.push(r[h*3+0]),s.push(r[h*3+1]),s.push(r[h*3+2])}function k(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 nt(t,n,e)}static fromJSON(e,t){const n=[];for(let o=0,a=e.shapes.length;o<a;o++){const p=t[e.shapes[o]];n.push(p)}const s=e.options.extrudePath;return s!==void 0&&(e.options.extrudePath=new et[`${s.type}`]().fromJSON(s)),new J(n,e.options)}}const tt={generateTopUV:function(u,e,t,n,s){const o=e[t*3],a=e[t*3+1],p=e[n*3],r=e[n*3+1],f=e[s*3],i=e[s*3+1];return[new c.Vector2(o,a),new c.Vector2(p,r),new c.Vector2(f,i)]},generateSideWallUV:function(u,e,t,n,s,o){const a=e[t*3],p=e[t*3+1],r=e[t*3+2],f=e[n*3],i=e[n*3+1],l=e[n*3+2],y=e[s*3],d=e[s*3+1],b=e[s*3+2],T=e[o*3],A=e[o*3+1],M=e[o*3+2];return Math.abs(p-i)<Math.abs(a-f)?[new c.Vector2(a,1-r),new c.Vector2(f,1-l),new c.Vector2(y,1-b),new c.Vector2(T,1-M)]:[new c.Vector2(p,1-r),new c.Vector2(i,1-l),new c.Vector2(d,1-b),new c.Vector2(A,1-M)]}};function nt(u,e,t){if(t.shapes=[],Array.isArray(u))for(let n=0,s=u.length;n<s;n++){const o=u[n];t.shapes.push(o.uuid)}else t.shapes.push(u.uuid);return t.options=Object.assign({},e),e.extrudePath!==void 0&&(t.options.extrudePath=e.extrudePath.toJSON()),t}class st extends J{constructor(e,t){super(e,t);const n=new he.Brush(new J(e,le(B({},t),{hasTop:!0,hasSide:!0,hasBottom:!1})));n.updateMatrixWorld();const s=new c.Box3().setFromObject(n),o=new c.Vector3;s.getSize(o);const a=new c.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 c.Vector3;r.getSize(M);const j=Math.max(o.x/M.x,o.y/M.y);p=Math.ceil(t.topSegments*j)}if(p<4)return this;const f=new c.PlaneGeometry(o.x,o.y,p,p),i=new he.Brush(f);i.position.set(a.x,a.y,a.z),i.updateMatrixWorld();const y=new he.Evaluator().evaluate(i,n,he.INTERSECTION),d=y.geometry.getAttribute("position"),b=new c.Float32BufferAttribute(d.count*2,2);for(let M=0;M<d.count;M++){const j=d.getZ(M);d.setZ(M,t.depth+j)}if(r){const M=r.min,j=r.max,S=new c.Vector3().subVectors(j,M);for(let V=0;V<d.count;V++){const Q=d.getX(V),H=d.getY(V),Y=(Q-M.x)/S.x,U=(H-M.y)/S.y;b.setXY(V,Y,U)}y.geometry.setAttribute("uv",b)}d.needsUpdate=!0;const T=new J(e,le(B({},t),{hasTop:!1})),A=D([y.geometry,T],2);this.copy(A.toNonIndexed())}}const ze=u=>{const{split:e,depth:t,points:n,box3:s,hasTop:o,hasBottom:a,hasSide:p,sideRepeat:r,topSegments:f}=u,i=f?st:J,l=new i(new c.Shape(n),{depth:t,bevelEnabled:!1,box3:s,UVGenerator:Ve.getUVGenerator({split:e,box3:s,sideRepeat:r}),hasTop:o,hasBottom:a,hasSide:p,topSegments:f});return Ve.claerUVGenerator(),l};class it extends P.BaseObject{constructor(e){super(),this.options=B({depth:1},e)}create(){return se(this,null,function*(){const{points:e,pointsArr:t,useGroups:n,depth:s,geometry:o,geometryArr:a,material:p,box3:r,split:f,hasTop:i,hasBottom:l,hasSide:y}=this.options,d=Array.isArray(s)?s:[s],b=Array.isArray(r)?r:[r],T=p;let A=o;T||console.log("material is null"),!A&&e?A=ze({points:e,depth:d[0],box3:b[0],split:f,hasTop:i,hasBottom:l,hasSide:y}):!A&&t?A=D(t.map((M,j)=>{var S,V;return ze({points:M,depth:(S=d[j])!=null?S:d[0],box3:(V=b[j])!=null?V:b[0],split:f,hasTop:i,hasBottom:l,hasSide:y})}),n!=null?n:0):!A&&a&&a.length>1?A=D(a,n!=null?n:0):!A&&a&&a.length===1&&([A]=a),this.createMesh(A,T)})}addGeometries(e){const t=this.object3d,n=D([t.geometry,...e]);t.geometry=n}setTextureAnisotropic(e,t){e.anisotropy=t||this.pencil.renderer.capabilities.getMaxAnisotropy()}}const ot=u=>{const{topColor:e,sideColor:t,sideMap:n,createCanvasObjectURL:s,split:o,maxAnisotropy:a}=u;return new Promise(p=>{const r=n?document.createElement("img"):{src:"",onload:()=>{},width:128,height:128};r.onload=()=>{const f=o,i=document.createElement("canvas"),l=i.getContext("2d");i.height=r.height/(1-f),i.width=r.width,f&&e&&(l.fillStyle=e,l.fillRect(0,0,r.width,i.height*f)),n&&r instanceof HTMLImageElement?l.drawImage(r,0,i.height*f,r.width,r.height):t&&(l.fillStyle=t,l.fillRect(0,i.height*f,r.width,r.height)),s&&i.toBlob(d=>{console.log(URL.createObjectURL(d))});const y=new c.CanvasTexture(i);p(y)},n?r.src=n:r instanceof HTMLImageElement||r.onload()})};class rt extends P.BaseObject{create(){this.createGroup()}}class at extends P.BaseObject{constructor(e){super(),this.rectAreaLightUniformsLibInit=!1,this.options=e}create(){var t,n,s,o,a,p,r,f,i,l,y,d,b,T,A,M,j;const e=this.options;if(e.type==="AmbientLight"){const S=new c.AmbientLight(e.color);S.name="环境光",this.object3d=S}else if(e.type==="DirectionalLight"){const S=new c.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 c.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 c.SpotLight((a=e.color)!=null?a:16777215,(p=e.intensity)!=null?p:1,(r=e.distance)!=null?r:0,(f=e.angle)!=null?f:Math.PI/3,(i=e.penumbra)!=null?i:1,(l=e.decay)!=null?l:2);S.name="聚光灯",this.object3d=S,this.spotLight=S,S.target.name="聚光灯目标"}else if(e.type==="HemisphereLight"){const S=new c.HemisphereLight((y=e.color)!=null?y:16777215,(d=e.groundColor)!=null?d:16777215,(b=e.intensity)!=null?b:1);S.name="半球光",this.object3d=S,this.hemisphereLight=S}else if(e.type==="RectAreaLight"){this.rectAreaLightUniformsLibInit||(Ze.RectAreaLightUniformsLib.init(),this.rectAreaLightUniformsLibInit=!0);const S=new c.RectAreaLight((T=e.color)!=null?T:16777215,(A=e.intensity)!=null?A:1,(M=e.width)!=null?M:10,(j=e.height)!=null?j: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()}}class De extends c.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 c.Matrix4,this.shape=t,n&&(this.shapeFunction=n),e.length>0&&this.setPoints(e)}convertToVector3Array(e){if(typeof e[0]=="number"){const t=[],n=e;for(let s=0;s<n.length;s+=3)t.push(new c.Vector3(n[s],n[s+1],n[s+2]));return t}else return e.map(t=>{if(t instanceof c.Vector2)return new c.Vector3(t.x,t.y,0);if(t instanceof c.Vector3)return t;if(Array.isArray(t)&&t.length===2)return new c.Vector3(t[0],t[1],0);if(Array.isArray(t)&&t.length===3)return new c.Vector3(t[0],t[1],t[2])}).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=new c.BufferAttribute(new Float32Array(this.pointCount*6),3),t=new c.BufferAttribute(new Float32Array(this.pointCount*6),3),n=new c.BufferAttribute(new Float32Array(this.pointCount*6),3),s=new c.BufferAttribute(new Float32Array(this.pointCount*2),1),o=new c.BufferAttribute(new Float32Array(this.pointCount*2),1),a=new c.BufferAttribute(new Float32Array(this.pointCount*2),1),p=new c.BufferAttribute(new Float32Array(this.pointCount*4),2),r=new c.BufferAttribute(new Uint16Array((this.pointCount-1)*6),1);this.shape==="taper"&&(this.shapeFunction=f=>1*Math.pow(4*f*(1-f),1));for(let f=0,i=0,l=0;f<this.pointCount;f+=1,i+=2,l+=6){s.setX(i,f/this.pointCount),s.setX(i+1,f/this.pointCount),o.setX(i,1),o.setX(i+1,-1);const y=this.shape==="none"?1:this.shapeFunction(f/(this.pointCount-1));a.setX(i,y),a.setX(i+1,y);const d=f/(this.pointCount-1);if(p.setXY(i,d,0),p.setXY(i+1,d,1),f<this.pointCount-1){const b=f*2;r.setX(l+0,b+0),r.setX(l+1,b+1),r.setX(l+2,b+2),r.setX(l+3,b+2),r.setX(l+4,b+1),r.setX(l+5,b+3)}}this.setAttribute("position",e),this.setAttribute("previous",t),this.setAttribute("next",n),this.setAttribute("counters",s),this.setAttribute("side",o),this.setAttribute("width",a),this.setAttribute("uv",p),this.setIndex(r)}updateGeometry(){if(!this._points[0])return;const e=this.getAttribute("position"),t=this.getAttribute("previous"),n=this.getAttribute("next");let s=0,o=0,a=0;const p=this._points[0];t.setXYZ(o,p.x,p.y,p.z),o+=1,t.setXYZ(o,p.x,p.y,p.z),o+=1;for(let f=0;f<this.pointCount;f++){const i=this._points[f];e.setXYZ(s,i.x,i.y,i.z),s+=1,e.setXYZ(s,i.x,i.y,i.z),s+=1,f<this.pointCount-1&&(t.setXYZ(o,i.x,i.y,i.z),o+=1,t.setXYZ(o,i.x,i.y,i.z),o+=1),f>0&&f+1<=this.pointCount&&(n.setXYZ(a,i.x,i.y,i.z),a+=1,n.setXYZ(a,i.x,i.y,i.z),a+=1)}const r=this._points[this.pointCount-1];n.setXYZ(a,r.x,r.y,r.z),a+=1,n.setXYZ(a,r.x,r.y,r.z),a+=1,e.needsUpdate=!0,t.needsUpdate=!0,n.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())}}function ct(u,e){const t=new c.Matrix4,n=new c.Ray,s=new c.Sphere,o=new c.Vector3,a=this.geometry;if(s.copy(a.boundingSphere),s.applyMatrix4(this.matrixWorld),!u.ray.intersectSphere(s,o))return;t.copy(this.matrixWorld).invert(),n.copy(u.ray).applyMatrix4(t);const p=new c.Vector3,r=new c.Vector3,f=new c.Vector3,i=this instanceof c.LineSegments?2:1,l=a.index,y=a.attributes;if(l!==null){const d=l.array,b=y.position.array,T=y.width.array;for(let A=0,M=d.length-1;A<M;A+=i){const j=d[A],S=d[A+1];p.fromArray(b,j*3),r.fromArray(b,S*3);const V=T[Math.floor(A/3)]!==void 0?T[Math.floor(A/3)]:1,Q=u.params.Line.threshold+this.material.lineWidth*V/2,H=Q*Q;if(n.distanceSqToSegment(p,r,o,f)>H)continue;o.applyMatrix4(this.matrixWorld);const U=u.ray.origin.distanceTo(o);U<u.near||U>u.far||(e.push({distance:U,point:f.clone().applyMatrix4(this.matrixWorld),index:A,face:null,faceIndex:void 0,object:this}),A=M)}}}const ge=u=>{const{setPointWidth:e,nodes:t}=u,n=new De;return n.setPoints(t,e),n},Oe=new WeakMap,ue=new Map;let lt=class extends P.BaseObject{constructor(e={}){super(),this.options=B({},e)}get material(){var e;return(e=this.object3d)==null?void 0:e.material}create(){return se(this,null,function*(){const{nodes:e,nodesArr:t,geometry:n,geometryArr:s,material:o,useGroups:a,setPointWidth:p,lineWidthArr:r,materialParameters:f}=this.options;let i=o,l=n;!i&&f&&(i=this.getMaterial(f)),!l&&e?l=ge({nodes:e,setPointWidth:p}):!l&&t?l=D(t.map((y,d)=>{let b=p;return!b&&r&&(b=()=>{var T;return(T=r[d])!=null?T:r[0]}),ge({nodes:y,setPointWidth:b})}),a!=null?a:0):!l&&s&&s.length>1?l=D(s,a!=null?a:0):!l&&s&&s.length===1&&([l]=s),this.createMesh(l,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 P.MeshLineMaterial(B({color:new c.Color("#ffffff")},e));return s.uniforms.resolution.value.set(t,n),s}addGeometries(e){const t=this.object3d,n=D([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:a,onComplete:p,startShow:r}={}){const{offset:f,offsetLoop:i}=this.material.uniforms,l=this.pencil.userData.debugLine?ue:Oe;if(l.get(this.material)&&this.stopAnimation(),e===0)return;const y=s!=null?s:!0;f.value.x=1,i.value=y&&r?1:0;let d=0;const b=new ee.Tween(f.value).to({x:-1},e).delay(t).repeat(n).onUpdate(({x:T})=>{y&&T<=0&&i.value===0&&(i.value=1),a==null||a(T)}).onRepeat(()=>{d+=1,o==null||o(d)}).onComplete(()=>{p==null||p()}).start();l.set(this.material,b),this.material.addEventListener("dispose",()=>{this.stopAnimation()}),this.pencil.userData.debugLine&&console.log("animate",ue.size)}stopAnimation(){const e=this.pencil.userData.debugLine?ue:Oe,t=e.get(this.material);t&&(t.stop(),ee.remove(t),e.delete(this.material),this.material.uniforms.offset.value.x=0,this.material.uniforms.offsetLoop.value=1),this.pencil.userData.debugLine&&console.log("stopAnimation",ue.size)}render(){const{width:e,height:t}=this.pencil.getSize();this.resize(e,t)}};const Ie=u=>{const{points:e}=u,t=e.reduce((s,o,a)=>(a<e.length-1&&s.push(o,e[a+1]),s),[]);return new c.BufferGeometry().setFromPoints(t)};class ht extends P.BaseObject{constructor(e={}){super(),this.options=B({},e)}get material(){var e;return(e=this.object3d)==null?void 0:e.material}create(){return se(this,null,function*(){const{points:e,pointsArr:t,geometry:n,geometryArr:s,material:o,useGroups:a,setPointWidth:p,lineWidthArr:r,materialParameters:f,instanceCount:i}=this.options;let l=o,y=n;!l&&f&&(l=this.getMaterial(f)),!y&&e?y=Ie({points:e}):!y&&t?y=D(t.map(b=>Ie({points:b})),a!=null?a:0):!y&&s&&s.length>1?y=D(s,a!=null?a:0):!y&&s&&s.length===1&&([y]=s);const d=new Re.LineSegmentsGeometry().fromLineSegments(new c.LineSegments(y));if(this.pencil.options.WebGPUTHREE){i&&(d.instanceCount=i);const b=new P.LineSegments2(d,l);b.computeLineDistances(),this.object3d=b}else{const b=new Je.LineSegments2(d,l);b.computeLineDistances(),this.object3d=b}})}getMaterial(e){return new Ue.LineMaterial(B({color:new c.Color("#ffffff")},e))}}class ut extends P.BaseObject{constructor(e){super(),this.objectType="Node",this.onNodePointerIndex=[],this.options=B({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,a=0;t.left<0?o=-t.left:t.right>n&&(o=n-t.right),t.top<0?a=-t.top:t.bottom>s&&(a=s-t.bottom),t.left+o<0&&(o=-t.left),t.top+a<0&&(a=-t.top),(o!==0||a!==0)&&(e.style.transform=`translate(${o}px, ${a}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 ft extends P.BaseObject{constructor(e){super(),this.options=B({maxDepth:10,percentDepth:!1,innerRadius:25,outRadius:42,activeIndex:-1},e)}create(){return se(this,null,function*(){this.createGroup();const{data:e,maxDepth:t,colors:n,material:s,percentDepth:o,activeIndex:a}=this.options,p=Math.max(...e),r=e.reduce((i,l)=>i+l,0);let f=Math.PI/2;e.forEach((i,l)=>{if(i===0)return;const y=Math.PI*2*(i/r),d=n[l],b=o?t*(i/p):t,T=this.createGeometry(b,y),A=s?s.clone():new c.MeshBasicMaterial({color:d});s&&A.color.set(d);const M=new c.Mesh(T,A);M.userData.depth=b,M.userData.index=l,M.rotateZ(f),f+=y,this.add(M)}),a!==-1&&this.setActive(a)})}createGeometry(e,t){const{outRadius:n,innerRadius:s}=this.options,o=new c.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 J(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 ee.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 ee.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 ee.Tween(this.object3d.scale).to({z:1},1e3).easing(ee.Easing.Sinusoidal.InOut).start()}}Object.defineProperty(exports,"Line2Material",{enumerable:!0,get:()=>Ue.LineMaterial});Object.defineProperty(exports,"LineSegmentsGeometry",{enumerable:!0,get:()=>Re.LineSegmentsGeometry});exports.MeshLineMaterial=P.MeshLineMaterial;exports.getConicPolygonGeometry=P.PolygonGeometry;exports.getConicPolygonGeometryMetas=P.getMetas;exports.ConicPolygon=Ke;exports.ExtrudePolygon=it;exports.Group=rt;exports.Light=at;exports.Line=lt;exports.Line2=ht;exports.MeshLineGeometry=De;exports.MeshLineRaycast=ct;exports.Node=ut;exports.Pie=ft;exports.getSplitTexture=ot;
@@ -2,7 +2,7 @@ var Je = Object.defineProperty, Qe = Object.defineProperties;
2
2
  var Ke = Object.getOwnPropertyDescriptors;
3
3
  var he = Object.getOwnPropertySymbols;
4
4
  var Be = Object.prototype.hasOwnProperty, Oe = Object.prototype.propertyIsEnumerable;
5
- var Ie = (p, e, t) => e in p ? Je(p, e, { enumerable: !0, configurable: !0, writable: !0, value: t }) : p[e] = t, j = (p, e) => {
5
+ var Ie = (p, e, t) => e in p ? Je(p, e, { enumerable: !0, configurable: !0, writable: !0, value: t }) : p[e] = t, z = (p, e) => {
6
6
  for (var t in e || (e = {}))
7
7
  Be.call(e, t) && Ie(p, t, e[t]);
8
8
  if (he)
@@ -44,8 +44,8 @@ import { g as pn } from "../WebGPULineSegments2.module.js";
44
44
  import { BufferGeometry as me, Float32BufferAttribute as xe, Vector3 as _, ShapeUtils as fe, Shape as we, Vector2 as P, ArcCurve as ot, CatmullRomCurve3 as rt, CubicBezierCurve as at, CubicBezierCurve3 as ct, EllipseCurve as lt, LineCurve as ht, LineCurve3 as ut, QuadraticBezierCurve as ft, QuadraticBezierCurve3 as dt, SplineCurve as mt, Box3 as pt, PlaneGeometry as gt, CanvasTexture as yt, AmbientLight as bt, DirectionalLight as xt, PointLight as wt, SpotLight as vt, HemisphereLight as St, RectAreaLight as At, Matrix4 as Ne, BufferAttribute as Y, Ray as Mt, Sphere as Lt, LineSegments as We, Color as ke, MeshBasicMaterial as Tt, Mesh as Et } from "three";
45
45
  import { mergeAttributes as Re, mergeGroups as Gt } from "three/examples/jsm/utils/BufferGeometryUtils";
46
46
  import { g as Pt, c as Ct } from "../uvGenerator.module.js";
47
- import { Brush as Ue, Evaluator as _t, INTERSECTION as jt } from "three-bvh-csg";
48
- import { RectAreaLightUniformsLib as zt } from "three/examples/jsm/lights/RectAreaLightUniformsLib";
47
+ import { Brush as Ue, Evaluator as _t, INTERSECTION as zt } from "three-bvh-csg";
48
+ import { RectAreaLightUniformsLib as jt } from "three/examples/jsm/lights/RectAreaLightUniformsLib";
49
49
  import * as ne from "@tweenjs/tween.js";
50
50
  import { LineSegments2 as It } from "three/examples/jsm/lines/LineSegments2";
51
51
  function H(p, e = 0) {
@@ -146,14 +146,14 @@ function H(p, e = 0) {
146
146
  const De = (p) => {
147
147
  const f = p, { coordinate: e, startHeight: t, height: n } = f, s = ye(f, ["coordinate", "startHeight", "height"]);
148
148
  let o = t || 0;
149
- return typeof t != "undefined" && typeof n != "undefined" && (o = t + n), new nt([e], ue(j({}, s), {
149
+ return typeof t != "undefined" && typeof n != "undefined" && (o = t + n), new nt([e], ue(z({}, s), {
150
150
  startHeight: t,
151
151
  endHeight: o
152
152
  }));
153
153
  };
154
154
  class Jt extends Z {
155
155
  constructor(e) {
156
- super(), this.options = j({}, e);
156
+ super(), this.options = z({}, e);
157
157
  }
158
158
  create() {
159
159
  const r = this.options, {
@@ -171,12 +171,12 @@ class Jt extends Z {
171
171
  ]);
172
172
  let f = e;
173
173
  if (!f && n)
174
- f = De(j({
174
+ f = De(z({
175
175
  coordinate: n
176
176
  }, a));
177
177
  else if (!f && t) {
178
178
  const h = t.map(
179
- (i) => De(j({
179
+ (i) => De(z({
180
180
  coordinate: i
181
181
  }, a))
182
182
  );
@@ -224,7 +224,7 @@ class K extends me {
224
224
  var Te, Ee, Ge;
225
225
  const r = [], h = t.curveSegments !== void 0 ? t.curveSegments : 12, i = t.steps !== void 0 ? t.steps : 1, c = t.depth !== void 0 ? t.depth : 1;
226
226
  let g = t.bevelEnabled !== void 0 ? t.bevelEnabled : !0, u = t.bevelThickness !== void 0 ? t.bevelThickness : 0.2, y = t.bevelSize !== void 0 ? t.bevelSize : u - 0.1, L = t.bevelOffset !== void 0 ? t.bevelOffset : 0, S = t.bevelSegments !== void 0 ? t.bevelSegments : 3;
227
- const A = t.extrudePath, C = t.UVGenerator !== void 0 ? t.UVGenerator : Ot, v = (Te = t.hasTop) != null ? Te : !0, z = (Ee = t.hasBottom) != null ? Ee : !0, ee = (Ge = t.hasSide) != null ? Ge : !0;
227
+ const A = t.extrudePath, C = t.UVGenerator !== void 0 ? t.UVGenerator : Ot, v = (Te = t.hasTop) != null ? Te : !0, j = (Ee = t.hasBottom) != null ? Ee : !0, ee = (Ge = t.hasSide) != null ? Ge : !0;
228
228
  let V, $ = !1, U, se, ie, X;
229
229
  A && (V = A.getSpacedPoints(i), $ = !0, g = !1, U = A.computeFrenetFrames(i, !1), se = new _(), ie = new _(), X = new _()), g || (S = 0, u = 0, y = 0, L = 0);
230
230
  const ve = f.extractPoints(h);
@@ -270,12 +270,12 @@ class K extends me {
270
270
  if (Math.abs(Q) > Number.EPSILON) {
271
271
  const O = Math.sqrt(B), Pe = Math.sqrt(
272
272
  E * E + G * G
273
- ), Ce = d.x - T / O, _e = d.y + w / O, Ze = m.x - G / Pe, $e = m.y + E / Pe, je = ((Ze - Ce) * G - ($e - _e) * E) / (w * G - T * E);
274
- x = Ce + w * je - l.x, b = _e + T * je - l.y;
275
- const ze = x * x + b * b;
276
- if (ze <= 2)
273
+ ), Ce = d.x - T / O, _e = d.y + w / O, Ze = m.x - G / Pe, $e = m.y + E / Pe, ze = ((Ze - Ce) * G - ($e - _e) * E) / (w * G - T * E);
274
+ x = Ce + w * ze - l.x, b = _e + T * ze - l.y;
275
+ const je = x * x + b * b;
276
+ if (je <= 2)
277
277
  return new P(x, b);
278
- M = Math.sqrt(ze / 2);
278
+ M = Math.sqrt(je / 2);
279
279
  } else {
280
280
  let O = !1;
281
281
  w > Number.EPSILON ? E > Number.EPSILON && (O = !0) : w < -Number.EPSILON ? E < -Number.EPSILON && (O = !0) : Math.sign(T) === Math.sign(G) && (O = !0), O ? (x = -T, b = w, M = Math.sqrt(B)) : (x = w, b = T, M = Math.sqrt(B / 2));
@@ -355,7 +355,7 @@ class K extends me {
355
355
  const l = s.length / 3;
356
356
  if (g) {
357
357
  let d = 0, m = N * d;
358
- if (z)
358
+ if (j)
359
359
  for (let x = 0; x < ce; x++) {
360
360
  const b = J[x];
361
361
  le(b[2] + m, b[1] + m, b[0] + m);
@@ -366,7 +366,7 @@ class K extends me {
366
366
  le(b[0] + m, b[1] + m, b[2] + m);
367
367
  }
368
368
  } else {
369
- if (z)
369
+ if (j)
370
370
  for (let d = 0; d < ce; d++) {
371
371
  const m = J[d];
372
372
  le(m[2], m[1], m[0]);
@@ -504,7 +504,7 @@ class Ut extends K {
504
504
  constructor(e, t) {
505
505
  super(e, t);
506
506
  const n = new Ue(
507
- new K(e, ue(j({}, t), {
507
+ new K(e, ue(z({}, t), {
508
508
  hasTop: !0,
509
509
  hasSide: !0,
510
510
  hasBottom: !1
@@ -538,7 +538,7 @@ class Ut extends K {
538
538
  f
539
539
  ), i = new Ue(h);
540
540
  i.position.set(a.x, a.y, a.z), i.updateMatrixWorld();
541
- const g = new _t().evaluate(i, n, jt), u = g.geometry.getAttribute("position"), y = new xe(
541
+ const g = new _t().evaluate(i, n, zt), u = g.geometry.getAttribute("position"), y = new xe(
542
542
  u.count * 2,
543
543
  2
544
544
  );
@@ -548,14 +548,14 @@ class Ut extends K {
548
548
  }
549
549
  if (r) {
550
550
  const A = r.min, C = r.max, v = new _().subVectors(C, A);
551
- for (let z = 0; z < u.count; z++) {
552
- const ee = u.getX(z), V = u.getY(z), $ = (ee - A.x) / v.x, U = (V - A.y) / v.y;
553
- y.setXY(z, $, U);
551
+ for (let j = 0; j < u.count; j++) {
552
+ const ee = u.getX(j), V = u.getY(j), $ = (ee - A.x) / v.x, U = (V - A.y) / v.y;
553
+ y.setXY(j, $, U);
554
554
  }
555
555
  g.geometry.setAttribute("uv", y);
556
556
  }
557
557
  u.needsUpdate = !0;
558
- const L = new K(e, ue(j({}, t), {
558
+ const L = new K(e, ue(z({}, t), {
559
559
  hasTop: !1
560
560
  })), S = H([g.geometry, L], 2);
561
561
  this.copy(S.toNonIndexed());
@@ -590,7 +590,7 @@ const He = (p) => {
590
590
  };
591
591
  class Qt extends Z {
592
592
  constructor(e) {
593
- super(), this.options = j({
593
+ super(), this.options = z({
594
594
  depth: 1
595
595
  }, e);
596
596
  }
@@ -622,11 +622,11 @@ class Qt extends Z {
622
622
  }) : !S && t ? S = H(
623
623
  t.map(
624
624
  (A, C) => {
625
- var v, z;
625
+ var v, j;
626
626
  return He({
627
627
  points: A,
628
628
  depth: (v = u[C]) != null ? v : u[0],
629
- box3: (z = y[C]) != null ? z : y[0],
629
+ box3: (j = y[C]) != null ? j : y[0],
630
630
  split: h,
631
631
  hasTop: i,
632
632
  hasBottom: c,
@@ -717,7 +717,7 @@ class tn extends Z {
717
717
  );
718
718
  v.name = "半球光", this.object3d = v, this.hemisphereLight = v;
719
719
  } else if (e.type === "RectAreaLight") {
720
- this.rectAreaLightUniformsLibInit || (zt.init(), this.rectAreaLightUniformsLibInit = !0);
720
+ this.rectAreaLightUniformsLibInit || (jt.init(), this.rectAreaLightUniformsLibInit = !0);
721
721
  const v = new At(
722
722
  (L = e.color) != null ? L : 16777215,
723
723
  (S = e.intensity) != null ? S : 1,
@@ -839,7 +839,7 @@ function nn(p, e) {
839
839
  for (let S = 0, A = u.length - 1; S < A; S += i) {
840
840
  const C = u[S], v = u[S + 1];
841
841
  f.fromArray(y, C * 3), r.fromArray(y, v * 3);
842
- const z = L[Math.floor(S / 3)] !== void 0 ? L[Math.floor(S / 3)] : 1, ee = p.params.Line.threshold + this.material.lineWidth * z / 2, V = ee * ee;
842
+ const j = L[Math.floor(S / 3)] !== void 0 ? L[Math.floor(S / 3)] : 1, ee = p.params.Line.threshold + this.material.lineWidth * j / 2, V = ee * ee;
843
843
  if (n.distanceSqToSegment(
844
844
  f,
845
845
  r,
@@ -867,7 +867,7 @@ const be = (p) => {
867
867
  }, Ve = /* @__PURE__ */ new WeakMap(), de = /* @__PURE__ */ new Map();
868
868
  let sn = class extends Z {
869
869
  constructor(e = {}) {
870
- super(), this.options = j({}, e);
870
+ super(), this.options = z({}, e);
871
871
  }
872
872
  get material() {
873
873
  var e;
@@ -913,7 +913,7 @@ let sn = class extends Z {
913
913
  s.geometry = n, o.dispose();
914
914
  }
915
915
  getMaterial(e) {
916
- const { width: t, height: n } = this.pencil.getSize(), s = new st(j({
916
+ const { width: t, height: n } = this.pencil.getSize(), s = new st(z({
917
917
  color: new ke("#ffffff")
918
918
  }, e));
919
919
  return s.uniforms.resolution.value.set(t, n), s;
@@ -973,7 +973,7 @@ const Xe = (p) => {
973
973
  };
974
974
  class rn extends Z {
975
975
  constructor(e = {}) {
976
- super(), this.options = j({}, e);
976
+ super(), this.options = z({}, e);
977
977
  }
978
978
  get material() {
979
979
  var e;
@@ -1016,14 +1016,14 @@ class rn extends Z {
1016
1016
  });
1017
1017
  }
1018
1018
  getMaterial(e) {
1019
- return new et(j({
1019
+ return new et(z({
1020
1020
  color: new ke("#ffffff")
1021
1021
  }, e));
1022
1022
  }
1023
1023
  }
1024
1024
  class an extends Z {
1025
1025
  constructor(e) {
1026
- super(), this.objectType = "BaseObject#Node", this.onNodePointerIndex = [], this.options = j({
1026
+ super(), this.objectType = "Node", this.onNodePointerIndex = [], this.options = z({
1027
1027
  type: "2d"
1028
1028
  }, e);
1029
1029
  }
@@ -1070,7 +1070,7 @@ class an extends Z {
1070
1070
  }
1071
1071
  class cn extends Z {
1072
1072
  constructor(e) {
1073
- super(), this.options = j({
1073
+ super(), this.options = z({
1074
1074
  maxDepth: 10,
1075
1075
  percentDepth: !1,
1076
1076
  innerRadius: 25,
@@ -1,7 +1,7 @@
1
1
  import { Sprite, Vector3 } from 'three';
2
+ import { CSS2DObject } from 'three/examples/jsm/renderers/CSS2DRenderer';
2
3
  import BaseObject from "../../core/BaseObject";
3
4
  import type { PickFunctionsItem } from "../../core/Lead/Pick";
4
- import { CSS2DObject } from 'three/examples/jsm/renderers/CSS2DRenderer';
5
5
  interface Options {
6
6
  children?: HTMLElement;
7
7
  position?: Vector3;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "gl-draw",
3
- "version": "0.16.0-beta.2",
3
+ "version": "0.16.0-beta.4",
4
4
  "author": "gitplus <hstits@gmail.com>",
5
5
  "scripts": {
6
6
  "start": "bundler-dev",