gl-draw 0.16.0-beta.14 → 0.16.0-beta.15
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,7 +1,7 @@
|
|
|
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=(
|
|
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,L=(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},R=(n,e)=>me(n,ve(e));var ie=(n,e)=>{var t={};for(var i in n)H.call(n,i)&&e.indexOf(i)<0&&(t[i]=n[i]);if(n!=null&&W)for(var i of W(n))e.indexOf(i)<0&&ee.call(n,i)&&(t[i]=n[i]);return t};var re=(n,e,t)=>new Promise((i,r)=>{var o=c=>{try{s(t.next(c))}catch(l){r(l)}},u=c=>{try{s(t.throw(c))}catch(l){r(l)}},s=c=>c.done?i(c.value):Promise.resolve(c.value).then(o,u);s((t=t.apply(n,e)).next())});const a=require("three"),be=require("three/examples/jsm/renderers/CSS2DRenderer"),ne=require("three/examples/jsm/renderers/CSS3DRenderer"),E=require("d3-geo");require("d3-geo-projection");const Q=require("./polar2Cartesian.js"),z=require("d3-array"),X=require("earcut"),ye=require("@turf/boolean-clockwise"),ge=require("delaunator"),Me=require("@turf/boolean-point-in-polygon"),xe=require("d3-geo-voronoi"),se=require("d3-scale"),Se=require("three/examples/jsm/lines/LineSegmentsGeometry"),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 a.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 a.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 a.Object3D){const t=e;this.track(t.geometry),this.track(t.material),this.track(t.children)}else if(e instanceof a.Material){for(const i of Object.values(e))i instanceof a.Texture&&this.track(i);const t=e;if(t.uniforms){for(const i of Object.values(t.uniforms))if(i){const r=i.value;(r instanceof a.Texture||Array.isArray(r))&&this.track(r)}}}else this.disposeVideo&&e.isVideoTexture&&e.source.data&&this.resources.add(e.source.data);return e}dispose(){const e=[];for(const t of this.resources)t instanceof a.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 Be=(n,e=1)=>{const t=new a.BufferGeometry;t.setAttribute("position",new a.Float32BufferAttribute(new Array(e*3).fill(0),3)),t.setAttribute("scaleAtt",new a.Float32BufferAttribute(new Array(e).fill(1),1));const i=n.material,r=new a.PointsMaterial({size:10,map:i.map,alphaMap:i.alphaMap,color:i.color,blending:i.blending,depthTest:i.depthTest,depthWrite:!1,opacity:i.opacity,transparent:!0,alphaTest:i.alphaTest,sizeAttenuation:!1});return r.onBeforeCompile=o=>{o.vertexShader=`
|
|
2
2
|
attribute float scaleAtt;
|
|
3
|
-
${
|
|
4
|
-
`},new o.Points(t,r)},Pe=(s,e)=>{const t=new o.Object3D;e.forEach((i,r)=>{const a=Q.parseVector3(i.position),u=Q.parseVector3(i.scale||[1,1,1]);t.position.copy(a),t.scale.copy(u),t.updateMatrix();const n=t.matrix.clone();if(s instanceof o.InstancedMesh||s.isInstantiate)s.setMatrixAt(r,n);else if(s instanceof o.Points||s.type==="Points"){const l=s.geometry,f=l.attributes.position.array,h=l.attributes.scaleAtt.array,p=new o.Vector3,d=new o.Vector3,v=new o.Quaternion,m=r*3,b=r*1;n.decompose(p,v,d),f[m]=p.x,f[m+1]=p.y,f[m+2]=p.z,h[b]=Math.max(d.x,d.y,d.z),l.attributes.position.needsUpdate=!0,l.attributes.scaleAtt.needsUpdate=!0}})};class De{constructor(){this.onPointerIndex=[]}onPointerEvent(e,t){const i=this.lead.handlePick([this],e,t);this.onPointerIndex.push(i)}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 Ie extends De{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(i=>{const r=i.userData;i.userData={};const a=i.clone();return i.userData=r,a});{const i=t.userData;t.userData={};const r=t.clone();return t.userData=i,r}}setMaterialList(e,t){const i=this.object3d;if(!i||!i.material)return;this.materialList.origin||(this.materialList.origin=i.material);const r=t==="clone"?this.cloneMaterial():Array.isArray(t)?t.slice():t;return this.materialList[e]=r,r}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 i=this.mList.get(e);if(!i)return;const r=this.object3d;Array.isArray(r.material)&&t!==void 0?r.material[t]=i:r.material=i}useMListByName(e,t){if(!this.mList)return;const i=this.mList.getKeyByName(e);i&&this.useMListById(i,t)}dispose(){super.dispose(),this.mList.rmBaseObjectMap(this,void 0,this.disposeMaterialIfNotUsed)}}class Y extends Ie{constructor(){super(...arguments),this.objectType="BaseObject",this.userData={},this.isPrefab=!1,this.isInstantiate=!1,this.isBloom=!1,this.isBaseObject=!0,this.disposeTrack=!0}get key(){return this._key}set key(e){this.lead&&this.lead.updateBaseObjectKey(this,e)}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 i;this.lead.objMap.get(t)?(i=this.lead.objMap.get(t))==null||i.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.isBloom&&this.enableBloom(),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 be.CSS2DObject(e),this}createCSS3DObject(e){return this.object3d=new se.CSS3DObject(e),this}createCSS3DSprite(e){return this.object3d=new se.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 re(this,null,function*(){var c,l;const t=(c=e==null?void 0:e.recursive)!=null?c:!0,i=(l=e==null?void 0:e.cloneMaterial)!=null?l:!1,{objectType:r,objectOptions:a}=this;let u=e==null?void 0:e.create,n;return this.objectType==="BaseObject"?n=this.lead.createBaseObject(this.object3d.clone(!1),{target:this.parent===this.lead.prefabGroup?this.lead.group:this.parent}):(u===void 0&&(u=f=>{var h;if(this.object3d){if((h=e==null?void 0:e.instancedAttr)!=null&&h.length){const p=e.instancedAttr.length;if(this.object3d instanceof o.Sprite)f.object3d=Be(this.object3d,p);else{const d=this.object3d,v=i?this.cloneMaterial():d.material;f.object3d=new o.InstancedMesh(d.geometry,v,p)}Pe(f.object3d,e==null?void 0:e.instancedAttr)}else f.object3d=this.object3d.clone(!1),i&&f.object3d.material&&(f.object3d.material=this.cloneMaterial());f.object3d.userData.prefab&&delete f.object3d.userData.prefab}}),n=yield this.lead.draw(r,R(L({},a||{}),{create:u,key:(e==null?void 0:e.key)||(a==null?void 0:a.key),target:this.parent===this.lead.prefabGroup?this.lead.group:this.parent}))),this.isBloom&&n.enableBloom(),t&&(yield Promise.all(this.children.map(f=>f.instantiate({cloneMaterial:i})))),n.isInstantiate=!0,n})}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()}}}function Ve(s,e){return s.map(t=>{const i=[];let r;return t.forEach(a=>{if(r){const u=E.geoDistance(a,r)*180/Math.PI;if(u>e){const n=E.geoInterpolate(r,a),c=1/Math.ceil(u/e);let l=c;for(;l<1;)i.push(n(l)),l+=c}}i.push(r=a)}),i})}function Te(s,{minLng:e,maxLng:t,minLat:i,maxLat:r}={}){const a=Math.round(te(360/s,2)/Math.PI),u=(1+Math.sqrt(5))/2,n=d=>d/u*360%360-180,c=d=>Math.acos(2*d/a-1)/Math.PI*180-90,l=d=>a*(Math.cos((d+90)*Math.PI/180)+1)/2,f=[r!==void 0?Math.ceil(l(r)):0,i!==void 0?Math.floor(l(i)):a-1],h=e===void 0&&t===void 0?()=>!0:e===void 0?d=>d<=t:t===void 0?d=>d>=e:t>=e?d=>d>=e&&d<=t:d=>d>=e||d<=t,p=[];for(let d=f[0];d<=f[1];d++){const v=n(d);h(v)&&p.push([v,c(d)])}return p}function Z(s,e,t=!1){return t?E.geoContains(e,s):Me(s,e)}function Oe(s,e){const t={type:"Polygon",coordinates:s},[[i,r],[a,u]]=E.geoBounds(t);if(Math.min(Math.abs(a-i),Math.abs(u-r))<e)return[];const n=i>a||u>=89||r<=-89;return Te(e,{minLng:i,maxLng:a,minLat:r,maxLat:u}).filter(c=>Z(c,t,n))}function _e(s,{resolution:e=1/0,bbox:t,projection:i}={}){const r=Ve(s,e),a=z.merge(r),u=Oe(s,e),n=[...a,...u],c={type:"Polygon",coordinates:s},[[l,f],[h,p]]=E.geoBounds(c),d=l>h||p>=89||f<=-89;let v=[];if(d){const y=xe.geoVoronoi(n).triangles(),S=new Map(n.map(([C,B],O)=>[`${C}-${B}`,O]));y.features.forEach(C=>{const B=C.geometry.coordinates[0].slice(0,3).reverse(),O=[];if(B.forEach(([P,q])=>{const k=`${P}-${q}`;S.has(k)&&O.push(S.get(k))}),O.length===3){if(O.some(P=>P<a.length)){const P=C.properties.circumcenter;if(!Z(P,c,d))return}v.push(...O)}})}else if(u.length){const y=ge.from(n);for(let S=0,C=y.triangles.length;S<C;S+=3){const B=[2,1,0].map(P=>y.triangles[S+P]),O=B.map(P=>n[P]);if(B.some(P=>P<a.length)){const P=[0,1].map(q=>z.mean(O,k=>k[q]));if(!Z(P,c,d))continue}v.push(...B)}}else{const{vertices:y,holes:S=[]}=X.flatten(r);v=X(y,S,2)}let m=t?[t[0],t[2]]:z.extent(n,y=>y[0]),b=t?[t[1],t[3]]:z.extent(n,y=>y[1]);if(i){const[y,S]=i([m[0],b[0]]),[C,B]=i([m[1],b[1]]);m=[y,C],b=[-S,-B]}const w=ne.scaleLinear(m,[0,1]),j=ne.scaleLinear(b,[0,1]),D=n.map(([y,S])=>{if(i){const[C,B]=i([y,S]);return[w(C),j(-B)]}else return[w(y),j(S)]});return{contour:r,triangles:{points:n,indices:v,uvs:D}}}const oe=new o.BufferGeometry().setAttribute?"setAttribute":"addAttribute";function G(s,e,t,i){const r=s.map(a=>a.map(([u,n])=>{if(i){const[c,l]=i([u,n]);return[c,-l,e]}return t?Q.polar2Cartesian(u,n,e):[u,n,e]}));return X.flatten(r)}function ze(s,e,t,i,r){const{vertices:a,holes:u}=G(s,e,i,r),{vertices:n}=G(s,t,i,r),c=z.merge([n,a]),l=Math.round(n.length/3),f=new Set(u);let h=0;const p=[];for(let v=0;v<l;v++){let m=v+1;if(m===l)m=h;else if(f.has(m)){const b=m;m=h,h=b}p.push(v,v+l,m+l),p.push(m+l,m,v)}const d=[];for(let v=1;v>=0;v--)for(let m=0;m<l;m+=1)d.push(m/(l-1),v);return{indices:p,vertices:c,uvs:d,topVerts:n}}function ae(s,e,t,i,r,a){return{indices:i?s.indices:s.indices.slice().reverse(),vertices:G([s.points],e,r,a).vertices,uvs:t}}const he=({polygonGeoJson:s,startHeight:e,endHeight:t,curvatureResolution:i=1,cartesian:r=!0,hasSide:a=!0,hasBottom:u=!1,hasTop:n=!1,projection:c,bbox:l})=>{s.forEach(w=>{ye(w)||w.reverse()});const{contour:f,triangles:h}=_e(s,{resolution:i,bbox:l,projection:c});let p={},d;a&&(p=ze(f,e!=null?e:t,t!=null?t:e,r,c),d=p.topVerts);let v=[];(u||n)&&(v=z.merge(h.uvs));let m={};u&&(m=ae(h,e,v,!1,r,c));let b={};return n&&(b=ae(h,t,v,!0,r,c)),{contour:f,triangles:h,sideTorso:p,bottomCap:m,topCap:b,topVerts:d}};class Le extends o.BufferGeometry{constructor(e,t={}){super(),this.type="PolygonBufferGeometry",this.parameters=L({polygonGeoJson:e,startHeight:0,endHeight:1,hasTop:!0,topFirst:!1,hasBottom:!0,hasSide:!0,curvatureResolution:1,cartesian:!0,userDataRsoOffset:0},t);const{endHeight:i,hasTop:r,topFirst:a,hasBottom:u,hasSide:n,cartesian:c,userDataRsoOffset:l,projection:f}=this.parameters,{contour:h,sideTorso:p,topVerts:d,bottomCap:v,topCap:m}=he(L({},this.parameters));let b=[],w=[],j=[],D=0;const A=y=>{const S=Math.round(b.length/3),C=j.length;b=b.concat(y.vertices),w=w.concat(y.uvs),j=j.concat(S?y.indices.map(B=>B+S):y.indices),this.addGroup(C,j.length-C,D++)};r&&a&&A(m),n&&(A(p),this.userData.topVerts=l?G(h,i+l,c,f).vertices:d),u&&A(v),r&&!a&&A(m),this.setIndex(j),this[oe]("position",new o.Float32BufferAttribute(b,3)),this[oe]("uv",new o.Float32BufferAttribute(w,2)),this.computeVertexNormals()}}const Ee=`
|
|
3
|
+
${o.vertexShader.replace("gl_PointSize = size;","gl_PointSize = size * scaleAtt;")}
|
|
4
|
+
`},new a.Points(t,r)},Pe=(n,e)=>{const t=new a.Object3D;e.forEach((i,r)=>{const o=Q.parseVector3(i.position),u=Q.parseVector3(i.scale||[1,1,1]);t.position.copy(o),t.scale.copy(u),t.updateMatrix();const s=t.matrix.clone();if(n instanceof a.InstancedMesh||n.isInstantiate)n.setMatrixAt(r,s);else if(n instanceof a.Points||n.type==="Points"){const l=n.geometry,f=l.attributes.position.array,h=l.attributes.scaleAtt.array,p=new a.Vector3,d=new a.Vector3,v=new a.Quaternion,m=r*3,b=r*1;s.decompose(p,v,d),f[m]=p.x,f[m+1]=p.y,f[m+2]=p.z,h[b]=Math.max(d.x,d.y,d.z),l.attributes.position.needsUpdate=!0,l.attributes.scaleAtt.needsUpdate=!0}})};class De{constructor(){this.onPointerIndex=[]}onPointerEvent(e,t){const i=this.lead.handlePick([this],e,t);this.onPointerIndex.push(i)}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 Ie extends De{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(i=>{const r=i.userData;i.userData={};const o=i.clone();return i.userData=r,o});{const i=t.userData;t.userData={};const r=t.clone();return t.userData=i,r}}setMaterialList(e,t){const i=this.object3d;if(!i||!i.material)return;this.materialList.origin||(this.materialList.origin=i.material);const r=t==="clone"?this.cloneMaterial():Array.isArray(t)?t.slice():t;return this.materialList[e]=r,r}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 i=this.mList.get(e);if(!i)return;const r=this.object3d;Array.isArray(r.material)&&t!==void 0?r.material[t]=i:r.material=i}useMListByName(e,t){if(!this.mList)return;const i=this.mList.getKeyByName(e);i&&this.useMListById(i,t)}dispose(){super.dispose(),this.mList.rmBaseObjectMap(this,void 0,this.disposeMaterialIfNotUsed)}}class Y extends Ie{constructor(){super(...arguments),this.objectType="BaseObject",this.userData={},this.isPrefab=!1,this.isInstantiate=!1,this.isBloom=!1,this.isBaseObject=!0,this.disposeTrack=!0}get key(){return this._key}set key(e){this.lead&&this.lead.updateBaseObjectKey(this,e)}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 i;this.lead.objMap.get(t)?(i=this.lead.objMap.get(t))==null||i.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.isBloom&&this.enableBloom(),this}hide(){return this.object3d.visible=!1,this.object3d.layers.set(Ae),this}createGroup(){return this.object3d=new a.Group,this}createMesh(...e){return this.object3d=new a.Mesh(...e),this}createPoints(...e){return this.object3d=new a.Points(...e),this}createCSS2DObject(e){return this.object3d=new be.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 a.Sprite(e),this}attach(...e){return[...e].forEach(t=>{this.object3d.attach(t.object3d)}),this}getSize(){const e=new a.Box3().setFromObject(this.object3d);return{min:e.min,max:e.max,size:e.getSize(new a.Vector3),center:e.getCenter(new a.Vector3)}}setTop(e){this.object3d&&(this.object3d.renderOrder=e)}traverse(e){e(this),this.children.forEach(t=>{t.traverse(e)})}instantiate(e){return re(this,null,function*(){var c,l;const t=(c=e==null?void 0:e.recursive)!=null?c:!0,i=(l=e==null?void 0:e.cloneMaterial)!=null?l:!1,{objectType:r,objectOptions:o}=this;let u=e==null?void 0:e.create,s;return this.objectType==="BaseObject"?s=this.lead.createBaseObject(this.object3d.clone(!1),{target:e==null?void 0:e.target}):(u===void 0&&(u=f=>{var h;if(this.object3d){if((h=e==null?void 0:e.instancedAttr)!=null&&h.length){const p=e.instancedAttr.length;if(this.object3d instanceof a.Sprite)f.object3d=Be(this.object3d,p);else{const d=this.object3d,v=i?this.cloneMaterial():d.material;f.object3d=new a.InstancedMesh(d.geometry,v,p)}Pe(f.object3d,e==null?void 0:e.instancedAttr)}else f.object3d=this.object3d.clone(!1),i&&f.object3d.material&&(f.object3d.material=this.cloneMaterial());f.object3d.userData.prefab&&delete f.object3d.userData.prefab}}),s=yield this.lead.draw(r,R(L({},o||{}),{create:u,prefab:!1,key:(e==null?void 0:e.key)||(o==null?void 0:o.key),target:(e==null?void 0:e.target)||(o==null?void 0:o.target)}))),this.isBloom&&s.enableBloom(),t&&(yield Promise.all(this.children.map(f=>f.instantiate({cloneMaterial:i,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()}}}function Ve(n,e){return n.map(t=>{const i=[];let r;return t.forEach(o=>{if(r){const u=E.geoDistance(o,r)*180/Math.PI;if(u>e){const s=E.geoInterpolate(r,o),c=1/Math.ceil(u/e);let l=c;for(;l<1;)i.push(s(l)),l+=c}}i.push(r=o)}),i})}function Te(n,{minLng:e,maxLng:t,minLat:i,maxLat:r}={}){const o=Math.round(te(360/n,2)/Math.PI),u=(1+Math.sqrt(5))/2,s=d=>d/u*360%360-180,c=d=>Math.acos(2*d/o-1)/Math.PI*180-90,l=d=>o*(Math.cos((d+90)*Math.PI/180)+1)/2,f=[r!==void 0?Math.ceil(l(r)):0,i!==void 0?Math.floor(l(i)):o-1],h=e===void 0&&t===void 0?()=>!0:e===void 0?d=>d<=t:t===void 0?d=>d>=e:t>=e?d=>d>=e&&d<=t:d=>d>=e||d<=t,p=[];for(let d=f[0];d<=f[1];d++){const v=s(d);h(v)&&p.push([v,c(d)])}return p}function Z(n,e,t=!1){return t?E.geoContains(e,n):Me(n,e)}function Oe(n,e){const t={type:"Polygon",coordinates:n},[[i,r],[o,u]]=E.geoBounds(t);if(Math.min(Math.abs(o-i),Math.abs(u-r))<e)return[];const s=i>o||u>=89||r<=-89;return Te(e,{minLng:i,maxLng:o,minLat:r,maxLat:u}).filter(c=>Z(c,t,s))}function _e(n,{resolution:e=1/0,bbox:t,projection:i}={}){const r=Ve(n,e),o=z.merge(r),u=Oe(n,e),s=[...o,...u],c={type:"Polygon",coordinates:n},[[l,f],[h,p]]=E.geoBounds(c),d=l>h||p>=89||f<=-89;let v=[];if(d){const y=xe.geoVoronoi(s).triangles(),S=new Map(s.map(([C,B],O)=>[`${C}-${B}`,O]));y.features.forEach(C=>{const B=C.geometry.coordinates[0].slice(0,3).reverse(),O=[];if(B.forEach(([P,q])=>{const k=`${P}-${q}`;S.has(k)&&O.push(S.get(k))}),O.length===3){if(O.some(P=>P<o.length)){const P=C.properties.circumcenter;if(!Z(P,c,d))return}v.push(...O)}})}else if(u.length){const y=ge.from(s);for(let S=0,C=y.triangles.length;S<C;S+=3){const B=[2,1,0].map(P=>y.triangles[S+P]),O=B.map(P=>s[P]);if(B.some(P=>P<o.length)){const P=[0,1].map(q=>z.mean(O,k=>k[q]));if(!Z(P,c,d))continue}v.push(...B)}}else{const{vertices:y,holes:S=[]}=X.flatten(r);v=X(y,S,2)}let m=t?[t[0],t[2]]:z.extent(s,y=>y[0]),b=t?[t[1],t[3]]:z.extent(s,y=>y[1]);if(i){const[y,S]=i([m[0],b[0]]),[C,B]=i([m[1],b[1]]);m=[y,C],b=[-S,-B]}const w=se.scaleLinear(m,[0,1]),j=se.scaleLinear(b,[0,1]),D=s.map(([y,S])=>{if(i){const[C,B]=i([y,S]);return[w(C),j(-B)]}else return[w(y),j(S)]});return{contour:r,triangles:{points:s,indices:v,uvs:D}}}const oe=new a.BufferGeometry().setAttribute?"setAttribute":"addAttribute";function G(n,e,t,i){const r=n.map(o=>o.map(([u,s])=>{if(i){const[c,l]=i([u,s]);return[c,-l,e]}return t?Q.polar2Cartesian(u,s,e):[u,s,e]}));return X.flatten(r)}function ze(n,e,t,i,r){const{vertices:o,holes:u}=G(n,e,i,r),{vertices:s}=G(n,t,i,r),c=z.merge([s,o]),l=Math.round(s.length/3),f=new Set(u);let h=0;const p=[];for(let v=0;v<l;v++){let m=v+1;if(m===l)m=h;else if(f.has(m)){const b=m;m=h,h=b}p.push(v,v+l,m+l),p.push(m+l,m,v)}const d=[];for(let v=1;v>=0;v--)for(let m=0;m<l;m+=1)d.push(m/(l-1),v);return{indices:p,vertices:c,uvs:d,topVerts:s}}function ae(n,e,t,i,r,o){return{indices:i?n.indices:n.indices.slice().reverse(),vertices:G([n.points],e,r,o).vertices,uvs:t}}const he=({polygonGeoJson:n,startHeight:e,endHeight:t,curvatureResolution:i=1,cartesian:r=!0,hasSide:o=!0,hasBottom:u=!1,hasTop:s=!1,projection:c,bbox:l})=>{n.forEach(w=>{ye(w)||w.reverse()});const{contour:f,triangles:h}=_e(n,{resolution:i,bbox:l,projection:c});let p={},d;o&&(p=ze(f,e!=null?e:t,t!=null?t:e,r,c),d=p.topVerts);let v=[];(u||s)&&(v=z.merge(h.uvs));let m={};u&&(m=ae(h,e,v,!1,r,c));let b={};return s&&(b=ae(h,t,v,!0,r,c)),{contour:f,triangles:h,sideTorso:p,bottomCap:m,topCap:b,topVerts:d}};class Le extends a.BufferGeometry{constructor(e,t={}){super(),this.type="PolygonBufferGeometry",this.parameters=L({polygonGeoJson:e,startHeight:0,endHeight:1,hasTop:!0,topFirst:!1,hasBottom:!0,hasSide:!0,curvatureResolution:1,cartesian:!0,userDataRsoOffset:0},t);const{endHeight:i,hasTop:r,topFirst:o,hasBottom:u,hasSide:s,cartesian:c,userDataRsoOffset:l,projection:f}=this.parameters,{contour:h,sideTorso:p,topVerts:d,bottomCap:v,topCap:m}=he(L({},this.parameters));let b=[],w=[],j=[],D=0;const A=y=>{const S=Math.round(b.length/3),C=j.length;b=b.concat(y.vertices),w=w.concat(y.uvs),j=j.concat(S?y.indices.map(B=>B+S):y.indices),this.addGroup(C,j.length-C,D++)};r&&o&&A(m),s&&(A(p),this.userData.topVerts=l?G(h,i+l,c,f).vertices:d),u&&A(v),r&&!o&&A(m),this.setIndex(j),this[oe]("position",new a.Float32BufferAttribute(b,3)),this[oe]("uv",new a.Float32BufferAttribute(w,2)),this.computeVertexNormals()}}const Ee=`
|
|
5
5
|
#include <fog_pars_fragment>
|
|
6
6
|
#include <logdepthbuf_pars_fragment>
|
|
7
7
|
|
|
@@ -137,4 +137,4 @@ void main() {
|
|
|
137
137
|
#include <logdepthbuf_vertex>
|
|
138
138
|
#include <fog_vertex>
|
|
139
139
|
}
|
|
140
|
-
`;class We extends
|
|
140
|
+
`;class We extends a.ShaderMaterial{constructor(e={}){const j=e,{lineWidth:t=1,color:i="#ffffff",opacity:r=1,map:o=null,dashOffset:u=0,dashArray:s=0,dashRatio:c=0,sizeAttenuation:l=!0,offsetLoop:f=!0,offset:h=new a.Vector2(0,0),scaleDown:p=0,alphaMap:d=void 0,alphaTest:v=0,repeat:m=new a.Vector2(1,1),resolution:b=new a.Vector2(1,1)}=j,w=ie(j,["lineWidth","color","opacity","map","dashOffset","dashArray","dashRatio","sizeAttenuation","offsetLoop","offset","scaleDown","alphaMap","alphaTest","repeat","resolution"]);super(R(L({},w),{uniforms:{lineWidth:{value:t},color:{value:new a.Color(i)},opacity:{value:r},map:{value:o},useMap:{value:o?1:0},resolution:{value:b},sizeAttenuation:{value:l?1:0},offset:{value:h},offsetLoop:{value:f?1:0},dashArray:{value:s},dashOffset:{value:u},dashRatio:{value:c},useDash:{value:s>0?1:0},scaleDown:{value:p/10},alphaTest:{value:v},alphaMap:{value:d},useAlphaMap:{value:d?1:0},repeat:{value:m}},vertexShader:ke,fragmentShader:Ee})),this.type="MeshLineMaterial"}get color(){return this.uniforms.color.value}set color(e){this.uniforms.color.value=new a.Color(e)}get opacity(){var e;return((e=this.uniforms)==null?void 0:e.opacity.value)||1}set opacity(e){this.uniforms&&(this.uniforms.opacity.value=e)}get alphaTest(){return this.uniforms.alphaTest.value}set alphaTest(e){this.uniforms&&(this.uniforms.alphaTest.value=e)}get map(){return this.uniforms.map.value}set map(e){this.uniforms.map.value=e,this.uniforms.useMap.value=e?1:0}get repeat(){return this.uniforms.repeat.value}set repeat(e){this.uniforms.repeat.value.copy(e)}get lineWidth(){return this.uniforms.lineWidth.value}set lineWidth(e){this.uniforms.lineWidth.value=e}get sizeAttenuation(){return this.uniforms.sizeAttenuation.value===1}set sizeAttenuation(e){this.uniforms.sizeAttenuation.value=e?1:0}}const F=new a.Vector4,ce=new a.Vector3,le=new a.Vector3,g=new a.Vector4,M=new a.Vector4,I=new a.Vector4,$=new a.Vector3,K=new a.Matrix4,x=new a.Line3,ue=new a.Vector3,N=new a.Box3,U=new a.Sphere,V=new a.Vector4;let T,_;function de(n,e,t){return V.set(0,0,-e,1).applyMatrix4(n.projectionMatrix),V.multiplyScalar(1/V.w),V.x=_/t.width,V.y=_/t.height,V.applyMatrix4(n.projectionMatrixInverse),V.multiplyScalar(1/V.w),Math.abs(Math.max(V.x,V.y))}function Ne(n,e){const t=n.matrixWorld,i=n.geometry,r=i.attributes.instanceStart,o=i.attributes.instanceEnd,u=Math.min(i.instanceCount,r.count);for(let s=0,c=u;s<c;s++){x.start.fromBufferAttribute(r,s),x.end.fromBufferAttribute(o,s),x.applyMatrix4(t);const l=new a.Vector3,f=new a.Vector3;T.distanceSqToSegment(x.start,x.end,f,l),f.distanceTo(l)<_*.5&&e.push({point:f,pointOnLine:l,distance:T.origin.distanceTo(f),object:n,face:null,faceIndex:s,uv:null,uv1:null})}}function Ue(n,e,t){const i=e.projectionMatrix,o=n.material.resolution,u=n.matrixWorld,s=n.geometry,c=s.attributes.instanceStart,l=s.attributes.instanceEnd,f=Math.min(s.instanceCount,c.count),h=-e.near;T.at(1,I),I.w=1,I.applyMatrix4(e.matrixWorldInverse),I.applyMatrix4(i),I.multiplyScalar(1/I.w),I.x*=o.x/2,I.y*=o.y/2,I.z=0,$.copy(I),K.multiplyMatrices(e.matrixWorldInverse,u);for(let p=0,d=f;p<d;p++){if(g.fromBufferAttribute(c,p),M.fromBufferAttribute(l,p),g.w=1,M.w=1,g.applyMatrix4(K),M.applyMatrix4(K),g.z>h&&M.z>h)continue;if(g.z>h){const D=g.z-M.z,A=(g.z-h)/D;g.lerp(M,A)}else if(M.z>h){const D=M.z-g.z,A=(M.z-h)/D;M.lerp(g,A)}g.applyMatrix4(i),M.applyMatrix4(i),g.multiplyScalar(1/g.w),M.multiplyScalar(1/M.w),g.x*=o.x/2,g.y*=o.y/2,M.x*=o.x/2,M.y*=o.y/2,x.start.copy(g),x.start.z=0,x.end.copy(M),x.end.z=0;const m=x.closestPointToPointParameter($,!0);x.at(m,ue);const b=a.MathUtils.lerp(g.z,M.z,m),w=b>=-1&&b<=1,j=$.distanceTo(ue)<_*.5;if(w&&j){x.start.fromBufferAttribute(c,p),x.end.fromBufferAttribute(l,p),x.start.applyMatrix4(u),x.end.applyMatrix4(u);const D=new a.Vector3,A=new a.Vector3;T.distanceSqToSegment(x.start,x.end,A,D),t.push({point:A,pointOnLine:D,distance:T.origin.distanceTo(A),object:n,face:null,faceIndex:p,uv:null,uv1:null})}}}class Ge extends a.Mesh{constructor(e=new Se.LineSegmentsGeometry,t){super(e,t),this.isLineSegments2=!0,this.type="LineSegments2"}computeLineDistances(){const e=this.geometry,t=e.attributes.instanceStart,i=e.attributes.instanceEnd,r=new Float32Array(2*t.count);for(let u=0,s=0,c=t.count;u<c;u++,s+=2)ce.fromBufferAttribute(t,u),le.fromBufferAttribute(i,u),r[s]=s===0?0:r[s-1],r[s+1]=r[s]+ce.distanceTo(le);const o=new a.InstancedInterleavedBuffer(r,2,1);return e.setAttribute("instanceDistanceStart",new a.InterleavedBufferAttribute(o,1,0)),e.setAttribute("instanceDistanceEnd",new a.InterleavedBufferAttribute(o,1,1)),this}raycast(e,t){const i=this.material.worldUnits,r=e.camera;r===null&&!i&&console.error('LineSegments2: "Raycaster.camera" needs to be set in order to raycast against LineSegments2 while worldUnits is set to false.');const o=e.params.Line2!==void 0&&e.params.Line2.threshold||0;T=e.ray;const u=this.matrixWorld,s=this.geometry,c=this.material;_=c.linewidth+o,s.boundingSphere===null&&s.computeBoundingSphere(),U.copy(s.boundingSphere).applyMatrix4(u);let l;if(i)l=_*.5;else{const h=Math.max(r.near,U.distanceToPoint(T.origin));l=de(r,h,c.resolution)}if(U.radius+=l,T.intersectsSphere(U)===!1)return;s.boundingBox===null&&s.computeBoundingBox(),N.copy(s.boundingBox).applyMatrix4(u);let f;if(i)f=_*.5;else{const h=Math.max(r.near,N.distanceToPoint(T.origin));f=de(r,h,c.resolution)}N.expandByScalar(f),T.intersectsBox(N)!==!1&&(i?Ne(this,t):Ue(this,r,t))}onBeforeRender(e){const t=this.material.uniforms;t&&t.resolution&&(e.getViewport(F),this.material.uniforms.resolution.value.set(F.z,F.w))}}exports.BLOOM_SCENE=je;exports.BaseObject=Y;exports.IS_DEV=Ce;exports.LineSegments2=Ge;exports.MeshLineMaterial=We;exports.PolygonGeometry=Le;exports.ResourceTracker=fe;exports.getMetas=he;
|
|
@@ -2,7 +2,7 @@ var Ct = Object.defineProperty, Pt = Object.defineProperties;
|
|
|
2
2
|
var Bt = Object.getOwnPropertyDescriptors;
|
|
3
3
|
var V = Object.getOwnPropertySymbols;
|
|
4
4
|
var et = Object.prototype.hasOwnProperty, it = Object.prototype.propertyIsEnumerable;
|
|
5
|
-
var st = Math.pow, tt = (n, t, e) => t in n ? Ct(n, t, { enumerable: !0, configurable: !0, writable: !0, value: e }) : n[t] = e,
|
|
5
|
+
var st = Math.pow, tt = (n, t, e) => t in n ? Ct(n, t, { enumerable: !0, configurable: !0, writable: !0, value: e }) : n[t] = e, L = (n, t) => {
|
|
6
6
|
for (var e in t || (t = {}))
|
|
7
7
|
et.call(t, e) && tt(n, e, t[e]);
|
|
8
8
|
if (V)
|
|
@@ -35,13 +35,13 @@ var rt = (n, t, e) => new Promise((i, s) => {
|
|
|
35
35
|
}, r = (o) => o.done ? i(o.value) : Promise.resolve(o.value).then(a, l);
|
|
36
36
|
r((e = e.apply(n, t)).next());
|
|
37
37
|
});
|
|
38
|
-
import { Material as at, Object3D as N, Texture as ot, BufferGeometry as Z, Float32BufferAttribute as R, PointsMaterial as It, Points as J, InstancedMesh as xt, Vector3 as B, Quaternion as Dt, Group as Tt, Mesh as wt, Sprite as ct, Box3 as St, ShaderMaterial as zt, Vector2 as q, Color as lt, Vector4 as
|
|
38
|
+
import { Material as at, Object3D as N, Texture as ot, BufferGeometry as Z, Float32BufferAttribute as R, PointsMaterial as It, Points as J, InstancedMesh as xt, Vector3 as B, Quaternion as Dt, Group as Tt, Mesh as wt, Sprite as ct, Box3 as St, ShaderMaterial as zt, Vector2 as q, Color as lt, Vector4 as O, Matrix4 as _t, Line3 as Et, Sphere as Lt, InstancedInterleavedBuffer as Ot, InterleavedBufferAttribute as ut, MathUtils as kt } from "three";
|
|
39
39
|
import { CSS2DObject as Vt } from "three/examples/jsm/renderers/CSS2DRenderer";
|
|
40
40
|
import { CSS3DObject as Wt, CSS3DSprite as Ut } from "three/examples/jsm/renderers/CSS3DRenderer";
|
|
41
41
|
import { geoBounds as jt, geoContains as Nt, geoDistance as Rt, geoInterpolate as Gt } from "d3-geo";
|
|
42
42
|
import "d3-geo-projection";
|
|
43
|
-
import { p as
|
|
44
|
-
import { merge as H, mean as $t, extent as
|
|
43
|
+
import { p as ft, a as Ft } from "./polar2Cartesian.module.js";
|
|
44
|
+
import { merge as H, mean as $t, extent as dt } from "d3-array";
|
|
45
45
|
import qt, { flatten as At } from "earcut";
|
|
46
46
|
import Kt from "@turf/boolean-clockwise";
|
|
47
47
|
import Qt from "delaunator";
|
|
@@ -125,14 +125,14 @@ const ee = (n, t = 1) => {
|
|
|
125
125
|
}, ie = (n, t) => {
|
|
126
126
|
const e = new N();
|
|
127
127
|
t.forEach((i, s) => {
|
|
128
|
-
const a =
|
|
128
|
+
const a = ft(i.position), l = ft(i.scale || [1, 1, 1]);
|
|
129
129
|
e.position.copy(a), e.scale.copy(l), e.updateMatrix();
|
|
130
130
|
const r = e.matrix.clone();
|
|
131
131
|
if (n instanceof xt || n.isInstantiate)
|
|
132
132
|
n.setMatrixAt(s, r);
|
|
133
133
|
else if (n instanceof J || n.type === "Points") {
|
|
134
|
-
const c = n.geometry,
|
|
135
|
-
r.decompose(h, m, u),
|
|
134
|
+
const c = n.geometry, f = c.attributes.position.array, d = c.attributes.scaleAtt.array, h = new B(), u = new B(), m = new Dt(), p = s * 3, v = s * 1;
|
|
135
|
+
r.decompose(h, m, u), f[p] = h.x, f[p + 1] = h.y, f[p + 2] = h.z, d[v] = Math.max(u.x, u.y, u.z), c.attributes.position.needsUpdate = !0, c.attributes.scaleAtt.needsUpdate = !0;
|
|
136
136
|
}
|
|
137
137
|
});
|
|
138
138
|
};
|
|
@@ -344,35 +344,37 @@ class pt extends ne {
|
|
|
344
344
|
const e = (o = t == null ? void 0 : t.recursive) != null ? o : !0, i = (c = t == null ? void 0 : t.cloneMaterial) != null ? c : !1, { objectType: s, objectOptions: a } = this;
|
|
345
345
|
let l = t == null ? void 0 : t.create, r;
|
|
346
346
|
return this.objectType === "BaseObject" ? r = this.lead.createBaseObject(this.object3d.clone(!1), {
|
|
347
|
-
target:
|
|
348
|
-
}) : (l === void 0 && (l = (
|
|
349
|
-
var
|
|
347
|
+
target: t == null ? void 0 : t.target
|
|
348
|
+
}) : (l === void 0 && (l = (f) => {
|
|
349
|
+
var d;
|
|
350
350
|
if (this.object3d) {
|
|
351
|
-
if ((
|
|
351
|
+
if ((d = t == null ? void 0 : t.instancedAttr) != null && d.length) {
|
|
352
352
|
const h = t.instancedAttr.length;
|
|
353
353
|
if (this.object3d instanceof ct)
|
|
354
|
-
|
|
354
|
+
f.object3d = ee(this.object3d, h);
|
|
355
355
|
else {
|
|
356
356
|
const u = this.object3d, m = i ? this.cloneMaterial() : u.material;
|
|
357
|
-
|
|
357
|
+
f.object3d = new xt(
|
|
358
358
|
u.geometry,
|
|
359
359
|
m,
|
|
360
360
|
h
|
|
361
361
|
);
|
|
362
362
|
}
|
|
363
|
-
ie(
|
|
363
|
+
ie(f.object3d, t == null ? void 0 : t.instancedAttr);
|
|
364
364
|
} else
|
|
365
|
-
|
|
366
|
-
|
|
365
|
+
f.object3d = this.object3d.clone(!1), i && f.object3d.material && (f.object3d.material = this.cloneMaterial());
|
|
366
|
+
f.object3d.userData.prefab && delete f.object3d.userData.prefab;
|
|
367
367
|
}
|
|
368
|
-
}), r = yield this.lead.draw(s, $(
|
|
368
|
+
}), r = yield this.lead.draw(s, $(L({}, a || {}), {
|
|
369
369
|
create: l,
|
|
370
|
+
prefab: !1,
|
|
370
371
|
key: (t == null ? void 0 : t.key) || (a == null ? void 0 : a.key),
|
|
371
|
-
target:
|
|
372
|
+
target: (t == null ? void 0 : t.target) || (a == null ? void 0 : a.target)
|
|
372
373
|
}))), this.isBloom && r.enableBloom(), e && (yield Promise.all(
|
|
373
374
|
this.children.map(
|
|
374
|
-
(
|
|
375
|
-
cloneMaterial: i
|
|
375
|
+
(f) => f.instantiate({
|
|
376
|
+
cloneMaterial: i,
|
|
377
|
+
target: r
|
|
376
378
|
})
|
|
377
379
|
)
|
|
378
380
|
)), r.isInstantiate = !0, r;
|
|
@@ -418,13 +420,13 @@ function re(n, t) {
|
|
|
418
420
|
});
|
|
419
421
|
}
|
|
420
422
|
function ae(n, { minLng: t, maxLng: e, minLat: i, maxLat: s } = {}) {
|
|
421
|
-
const a = Math.round(st(360 / n, 2) / Math.PI), l = (1 + Math.sqrt(5)) / 2, r = (u) => u / l * 360 % 360 - 180, o = (u) => Math.acos(2 * u / a - 1) / Math.PI * 180 - 90, c = (u) => a * (Math.cos((u + 90) * Math.PI / 180) + 1) / 2,
|
|
423
|
+
const a = Math.round(st(360 / n, 2) / Math.PI), l = (1 + Math.sqrt(5)) / 2, r = (u) => u / l * 360 % 360 - 180, o = (u) => Math.acos(2 * u / a - 1) / Math.PI * 180 - 90, c = (u) => a * (Math.cos((u + 90) * Math.PI / 180) + 1) / 2, f = [
|
|
422
424
|
s !== void 0 ? Math.ceil(c(s)) : 0,
|
|
423
425
|
i !== void 0 ? Math.floor(c(i)) : a - 1
|
|
424
|
-
],
|
|
425
|
-
for (let u =
|
|
426
|
+
], d = t === void 0 && e === void 0 ? () => !0 : t === void 0 ? (u) => u <= e : e === void 0 ? (u) => u >= t : e >= t ? (u) => u >= t && u <= e : (u) => u >= t || u <= e, h = [];
|
|
427
|
+
for (let u = f[0]; u <= f[1]; u++) {
|
|
426
428
|
const m = r(u);
|
|
427
|
-
|
|
429
|
+
d(m) && h.push([m, o(u)]);
|
|
428
430
|
}
|
|
429
431
|
return h;
|
|
430
432
|
}
|
|
@@ -446,9 +448,9 @@ function oe(n, t) {
|
|
|
446
448
|
);
|
|
447
449
|
}
|
|
448
450
|
function ce(n, { resolution: t = 1 / 0, bbox: e, projection: i } = {}) {
|
|
449
|
-
const s = re(n, t), a = H(s), l = oe(n, t), r = [...a, ...l], o = { type: "Polygon", coordinates: n }, [[c,
|
|
451
|
+
const s = re(n, t), a = H(s), l = oe(n, t), r = [...a, ...l], o = { type: "Polygon", coordinates: n }, [[c, f], [d, h]] = jt(o), u = c > d || // crosses antimeridian
|
|
450
452
|
h >= 89 || // crosses north pole
|
|
451
|
-
|
|
453
|
+
f <= -89;
|
|
452
454
|
let m = [];
|
|
453
455
|
if (u) {
|
|
454
456
|
const b = Yt(r).triangles(), x = new Map(
|
|
@@ -493,7 +495,7 @@ function ce(n, { resolution: t = 1 / 0, bbox: e, projection: i } = {}) {
|
|
|
493
495
|
const { vertices: b, holes: x = [] } = At(s);
|
|
494
496
|
m = qt(b, x, 2);
|
|
495
497
|
}
|
|
496
|
-
let p = e ? [e[0], e[2]] :
|
|
498
|
+
let p = e ? [e[0], e[2]] : dt(r, (b) => b[0]), v = e ? [e[1], e[3]] : dt(r, (b) => b[1]);
|
|
497
499
|
if (i) {
|
|
498
500
|
const [b, x] = i([p[0], v[0]]), [A, C] = i([p[1], v[1]]);
|
|
499
501
|
p = [b, A], v = [-x, -C];
|
|
@@ -531,16 +533,16 @@ function le(n, t, e, i, s) {
|
|
|
531
533
|
e,
|
|
532
534
|
i,
|
|
533
535
|
s
|
|
534
|
-
), o = H([r, a]), c = Math.round(r.length / 3),
|
|
535
|
-
let
|
|
536
|
+
), o = H([r, a]), c = Math.round(r.length / 3), f = new Set(l);
|
|
537
|
+
let d = 0;
|
|
536
538
|
const h = [];
|
|
537
539
|
for (let m = 0; m < c; m++) {
|
|
538
540
|
let p = m + 1;
|
|
539
541
|
if (p === c)
|
|
540
|
-
p =
|
|
541
|
-
else if (
|
|
542
|
+
p = d;
|
|
543
|
+
else if (f.has(p)) {
|
|
542
544
|
const v = p;
|
|
543
|
-
p =
|
|
545
|
+
p = d, d = v;
|
|
544
546
|
}
|
|
545
547
|
h.push(m, m + c, p + c), h.push(p + c, p, m);
|
|
546
548
|
}
|
|
@@ -576,24 +578,24 @@ const ue = ({
|
|
|
576
578
|
n.forEach((w) => {
|
|
577
579
|
Kt(w) || w.reverse();
|
|
578
580
|
});
|
|
579
|
-
const { contour:
|
|
581
|
+
const { contour: f, triangles: d } = ce(n, {
|
|
580
582
|
resolution: i,
|
|
581
583
|
bbox: c,
|
|
582
584
|
projection: o
|
|
583
585
|
});
|
|
584
586
|
let h = {}, u;
|
|
585
587
|
a && (h = le(
|
|
586
|
-
|
|
588
|
+
f,
|
|
587
589
|
t != null ? t : e,
|
|
588
590
|
e != null ? e : t,
|
|
589
591
|
s,
|
|
590
592
|
o
|
|
591
593
|
), u = h.topVerts);
|
|
592
594
|
let m = [];
|
|
593
|
-
(l || r) && (m = H(
|
|
595
|
+
(l || r) && (m = H(d.uvs));
|
|
594
596
|
let p = {};
|
|
595
597
|
l && (p = vt(
|
|
596
|
-
|
|
598
|
+
d,
|
|
597
599
|
t,
|
|
598
600
|
m,
|
|
599
601
|
!1,
|
|
@@ -602,17 +604,17 @@ const ue = ({
|
|
|
602
604
|
));
|
|
603
605
|
let v = {};
|
|
604
606
|
return r && (v = vt(
|
|
605
|
-
|
|
607
|
+
d,
|
|
606
608
|
e,
|
|
607
609
|
m,
|
|
608
610
|
!0,
|
|
609
611
|
s,
|
|
610
612
|
o
|
|
611
|
-
)), { contour:
|
|
613
|
+
)), { contour: f, triangles: d, sideTorso: h, bottomCap: p, topCap: v, topVerts: u };
|
|
612
614
|
};
|
|
613
615
|
class ze extends Z {
|
|
614
616
|
constructor(t, e = {}) {
|
|
615
|
-
super(), this.type = "PolygonBufferGeometry", this.parameters =
|
|
617
|
+
super(), this.type = "PolygonBufferGeometry", this.parameters = L({
|
|
616
618
|
polygonGeoJson: t,
|
|
617
619
|
startHeight: 0,
|
|
618
620
|
endHeight: 1,
|
|
@@ -632,8 +634,8 @@ class ze extends Z {
|
|
|
632
634
|
hasSide: r,
|
|
633
635
|
cartesian: o,
|
|
634
636
|
userDataRsoOffset: c,
|
|
635
|
-
projection:
|
|
636
|
-
} = this.parameters, { contour:
|
|
637
|
+
projection: f
|
|
638
|
+
} = this.parameters, { contour: d, sideTorso: h, topVerts: u, bottomCap: m, topCap: p } = ue(L({}, this.parameters));
|
|
637
639
|
let v = [], w = [], S = [], I = 0;
|
|
638
640
|
const j = (b) => {
|
|
639
641
|
const x = Math.round(v.length / 3), A = S.length;
|
|
@@ -642,14 +644,14 @@ class ze extends Z {
|
|
|
642
644
|
), this.addGroup(A, S.length - A, I++);
|
|
643
645
|
};
|
|
644
646
|
s && a && j(p), r && (j(h), this.userData.topVerts = c ? G(
|
|
645
|
-
|
|
647
|
+
d,
|
|
646
648
|
i + c,
|
|
647
649
|
o,
|
|
648
|
-
|
|
650
|
+
f
|
|
649
651
|
).vertices : u), l && j(m), s && !a && j(p), this.setIndex(S), this[mt]("position", new R(v, 3)), this[mt]("uv", new R(w, 2)), this.computeVertexNormals();
|
|
650
652
|
}
|
|
651
653
|
}
|
|
652
|
-
const
|
|
654
|
+
const fe = `
|
|
653
655
|
#include <fog_pars_fragment>
|
|
654
656
|
#include <logdepthbuf_pars_fragment>
|
|
655
657
|
|
|
@@ -693,7 +695,7 @@ void main() {
|
|
|
693
695
|
#include <tonemapping_fragment>
|
|
694
696
|
#include <colorspace_fragment>
|
|
695
697
|
}
|
|
696
|
-
`,
|
|
698
|
+
`, de = `
|
|
697
699
|
#include <common>
|
|
698
700
|
#include <logdepthbuf_pars_vertex>
|
|
699
701
|
#include <fog_pars_vertex>
|
|
@@ -797,8 +799,8 @@ class _e extends zt {
|
|
|
797
799
|
dashArray: r = 0,
|
|
798
800
|
dashRatio: o = 0,
|
|
799
801
|
sizeAttenuation: c = !0,
|
|
800
|
-
offsetLoop:
|
|
801
|
-
offset:
|
|
802
|
+
offsetLoop: f = !0,
|
|
803
|
+
offset: d = new q(0, 0),
|
|
802
804
|
scaleDown: h = 0,
|
|
803
805
|
alphaMap: u = void 0,
|
|
804
806
|
alphaTest: m = 0,
|
|
@@ -821,7 +823,7 @@ class _e extends zt {
|
|
|
821
823
|
"repeat",
|
|
822
824
|
"resolution"
|
|
823
825
|
]);
|
|
824
|
-
super($(
|
|
826
|
+
super($(L({}, w), {
|
|
825
827
|
uniforms: {
|
|
826
828
|
lineWidth: { value: e },
|
|
827
829
|
color: { value: new lt(i) },
|
|
@@ -830,8 +832,8 @@ class _e extends zt {
|
|
|
830
832
|
useMap: { value: a ? 1 : 0 },
|
|
831
833
|
resolution: { value: v },
|
|
832
834
|
sizeAttenuation: { value: c ? 1 : 0 },
|
|
833
|
-
offset: { value:
|
|
834
|
-
offsetLoop: { value:
|
|
835
|
+
offset: { value: d },
|
|
836
|
+
offsetLoop: { value: f ? 1 : 0 },
|
|
835
837
|
dashArray: { value: r },
|
|
836
838
|
dashOffset: { value: l },
|
|
837
839
|
dashRatio: { value: o },
|
|
@@ -842,8 +844,8 @@ class _e extends zt {
|
|
|
842
844
|
useAlphaMap: { value: u ? 1 : 0 },
|
|
843
845
|
repeat: { value: p }
|
|
844
846
|
},
|
|
845
|
-
vertexShader:
|
|
846
|
-
fragmentShader:
|
|
847
|
+
vertexShader: de,
|
|
848
|
+
fragmentShader: fe
|
|
847
849
|
})), this.type = "MeshLineMaterial";
|
|
848
850
|
}
|
|
849
851
|
// Getter and setter for color
|
|
@@ -894,20 +896,20 @@ class _e extends zt {
|
|
|
894
896
|
this.uniforms.sizeAttenuation.value = t ? 1 : 0;
|
|
895
897
|
}
|
|
896
898
|
}
|
|
897
|
-
const K = new
|
|
898
|
-
let z,
|
|
899
|
+
const K = new O(), bt = new B(), yt = new B(), y = new O(), g = new O(), D = new O(), Q = new B(), X = new _t(), M = new Et(), gt = new B(), W = new St(), U = new Lt(), T = new O();
|
|
900
|
+
let z, E;
|
|
899
901
|
function Mt(n, t, e) {
|
|
900
|
-
return T.set(0, 0, -t, 1).applyMatrix4(n.projectionMatrix), T.multiplyScalar(1 / T.w), T.x =
|
|
902
|
+
return T.set(0, 0, -t, 1).applyMatrix4(n.projectionMatrix), T.multiplyScalar(1 / T.w), T.x = E / e.width, T.y = E / e.height, T.applyMatrix4(n.projectionMatrixInverse), T.multiplyScalar(1 / T.w), Math.abs(Math.max(T.x, T.y));
|
|
901
903
|
}
|
|
902
904
|
function he(n, t) {
|
|
903
905
|
const e = n.matrixWorld, i = n.geometry, s = i.attributes.instanceStart, a = i.attributes.instanceEnd, l = Math.min(i.instanceCount, s.count);
|
|
904
906
|
for (let r = 0, o = l; r < o; r++) {
|
|
905
907
|
M.start.fromBufferAttribute(s, r), M.end.fromBufferAttribute(a, r), M.applyMatrix4(e);
|
|
906
|
-
const c = new B(),
|
|
907
|
-
z.distanceSqToSegment(M.start, M.end,
|
|
908
|
-
point:
|
|
908
|
+
const c = new B(), f = new B();
|
|
909
|
+
z.distanceSqToSegment(M.start, M.end, f, c), f.distanceTo(c) < E * 0.5 && t.push({
|
|
910
|
+
point: f,
|
|
909
911
|
pointOnLine: c,
|
|
910
|
-
distance: z.origin.distanceTo(
|
|
912
|
+
distance: z.origin.distanceTo(f),
|
|
911
913
|
object: n,
|
|
912
914
|
face: null,
|
|
913
915
|
faceIndex: r,
|
|
@@ -917,22 +919,22 @@ function he(n, t) {
|
|
|
917
919
|
}
|
|
918
920
|
}
|
|
919
921
|
function pe(n, t, e) {
|
|
920
|
-
const i = t.projectionMatrix, a = n.material.resolution, l = n.matrixWorld, r = n.geometry, o = r.attributes.instanceStart, c = r.attributes.instanceEnd,
|
|
922
|
+
const i = t.projectionMatrix, a = n.material.resolution, l = n.matrixWorld, r = n.geometry, o = r.attributes.instanceStart, c = r.attributes.instanceEnd, f = Math.min(r.instanceCount, o.count), d = -t.near;
|
|
921
923
|
z.at(1, D), D.w = 1, D.applyMatrix4(t.matrixWorldInverse), D.applyMatrix4(i), D.multiplyScalar(1 / D.w), D.x *= a.x / 2, D.y *= a.y / 2, D.z = 0, Q.copy(D), X.multiplyMatrices(t.matrixWorldInverse, l);
|
|
922
|
-
for (let h = 0, u =
|
|
923
|
-
if (y.fromBufferAttribute(o, h), g.fromBufferAttribute(c, h), y.w = 1, g.w = 1, y.applyMatrix4(X), g.applyMatrix4(X), y.z >
|
|
924
|
+
for (let h = 0, u = f; h < u; h++) {
|
|
925
|
+
if (y.fromBufferAttribute(o, h), g.fromBufferAttribute(c, h), y.w = 1, g.w = 1, y.applyMatrix4(X), g.applyMatrix4(X), y.z > d && g.z > d)
|
|
924
926
|
continue;
|
|
925
|
-
if (y.z >
|
|
926
|
-
const I = y.z - g.z, j = (y.z -
|
|
927
|
+
if (y.z > d) {
|
|
928
|
+
const I = y.z - g.z, j = (y.z - d) / I;
|
|
927
929
|
y.lerp(g, j);
|
|
928
|
-
} else if (g.z >
|
|
929
|
-
const I = g.z - y.z, j = (g.z -
|
|
930
|
+
} else if (g.z > d) {
|
|
931
|
+
const I = g.z - y.z, j = (g.z - d) / I;
|
|
930
932
|
g.lerp(y, j);
|
|
931
933
|
}
|
|
932
934
|
y.applyMatrix4(i), g.applyMatrix4(i), y.multiplyScalar(1 / y.w), g.multiplyScalar(1 / g.w), y.x *= a.x / 2, y.y *= a.y / 2, g.x *= a.x / 2, g.y *= a.y / 2, M.start.copy(y), M.start.z = 0, M.end.copy(g), M.end.z = 0;
|
|
933
935
|
const p = M.closestPointToPointParameter(Q, !0);
|
|
934
936
|
M.at(p, gt);
|
|
935
|
-
const v = kt.lerp(y.z, g.z, p), w = v >= -1 && v <= 1, S = Q.distanceTo(gt) <
|
|
937
|
+
const v = kt.lerp(y.z, g.z, p), w = v >= -1 && v <= 1, S = Q.distanceTo(gt) < E * 0.5;
|
|
936
938
|
if (w && S) {
|
|
937
939
|
M.start.fromBufferAttribute(o, h), M.end.fromBufferAttribute(c, h), M.start.applyMatrix4(l), M.end.applyMatrix4(l);
|
|
938
940
|
const I = new B(), j = new B();
|
|
@@ -949,7 +951,7 @@ function pe(n, t, e) {
|
|
|
949
951
|
}
|
|
950
952
|
}
|
|
951
953
|
}
|
|
952
|
-
class
|
|
954
|
+
class Ee extends wt {
|
|
953
955
|
constructor(t = new Zt(), e) {
|
|
954
956
|
super(t, e), this.isLineSegments2 = !0, this.type = "LineSegments2";
|
|
955
957
|
}
|
|
@@ -958,7 +960,7 @@ class Oe extends wt {
|
|
|
958
960
|
const t = this.geometry, e = t.attributes.instanceStart, i = t.attributes.instanceEnd, s = new Float32Array(2 * e.count);
|
|
959
961
|
for (let l = 0, r = 0, o = e.count; l < o; l++, r += 2)
|
|
960
962
|
bt.fromBufferAttribute(e, l), yt.fromBufferAttribute(i, l), s[r] = r === 0 ? 0 : s[r - 1], s[r + 1] = s[r] + bt.distanceTo(yt);
|
|
961
|
-
const a = new
|
|
963
|
+
const a = new Ot(
|
|
962
964
|
s,
|
|
963
965
|
2,
|
|
964
966
|
1
|
|
@@ -979,39 +981,39 @@ class Oe extends wt {
|
|
|
979
981
|
const a = t.params.Line2 !== void 0 && t.params.Line2.threshold || 0;
|
|
980
982
|
z = t.ray;
|
|
981
983
|
const l = this.matrixWorld, r = this.geometry, o = this.material;
|
|
982
|
-
|
|
984
|
+
E = o.linewidth + a, r.boundingSphere === null && r.computeBoundingSphere(), U.copy(r.boundingSphere).applyMatrix4(l);
|
|
983
985
|
let c;
|
|
984
986
|
if (i)
|
|
985
|
-
c =
|
|
987
|
+
c = E * 0.5;
|
|
986
988
|
else {
|
|
987
|
-
const
|
|
989
|
+
const d = Math.max(
|
|
988
990
|
s.near,
|
|
989
991
|
U.distanceToPoint(z.origin)
|
|
990
992
|
);
|
|
991
993
|
c = Mt(
|
|
992
994
|
s,
|
|
993
|
-
|
|
995
|
+
d,
|
|
994
996
|
o.resolution
|
|
995
997
|
);
|
|
996
998
|
}
|
|
997
999
|
if (U.radius += c, z.intersectsSphere(U) === !1)
|
|
998
1000
|
return;
|
|
999
1001
|
r.boundingBox === null && r.computeBoundingBox(), W.copy(r.boundingBox).applyMatrix4(l);
|
|
1000
|
-
let
|
|
1002
|
+
let f;
|
|
1001
1003
|
if (i)
|
|
1002
|
-
|
|
1004
|
+
f = E * 0.5;
|
|
1003
1005
|
else {
|
|
1004
|
-
const
|
|
1006
|
+
const d = Math.max(
|
|
1005
1007
|
s.near,
|
|
1006
1008
|
W.distanceToPoint(z.origin)
|
|
1007
1009
|
);
|
|
1008
|
-
|
|
1010
|
+
f = Mt(
|
|
1009
1011
|
s,
|
|
1010
|
-
|
|
1012
|
+
d,
|
|
1011
1013
|
o.resolution
|
|
1012
1014
|
);
|
|
1013
1015
|
}
|
|
1014
|
-
W.expandByScalar(
|
|
1016
|
+
W.expandByScalar(f), z.intersectsBox(W) !== !1 && (i ? he(this, e) : pe(this, s, e));
|
|
1015
1017
|
}
|
|
1016
1018
|
onBeforeRender(t) {
|
|
1017
1019
|
const e = this.material.uniforms;
|
|
@@ -1021,7 +1023,7 @@ class Oe extends wt {
|
|
|
1021
1023
|
export {
|
|
1022
1024
|
De as B,
|
|
1023
1025
|
Te as I,
|
|
1024
|
-
|
|
1026
|
+
Ee as L,
|
|
1025
1027
|
_e as M,
|
|
1026
1028
|
ze as P,
|
|
1027
1029
|
te as R,
|