PolylineVolumeGeometryLibrary-1cf0ae31.js 8.2 KB

1
  1. define(["exports","./Matrix2-e3fb4559","./Cartesian3-7e9cc2ff","./Matrix4-d34187af","./defaultValue-81eec7ed","./EllipsoidTangentPlane-f566b6b5","./Math-5f585871","./PolylinePipeline-e0b963d6","./Transforms-99272364"],(function(e,a,t,n,r,i,s,o,l){"use strict";var c=Object.freeze({ROUNDED:0,MITERED:1,BEVELED:2});const C=[new t.Cartesian3,new t.Cartesian3],u=new t.Cartesian3,f=new t.Cartesian3,y=new t.Cartesian3,m=new t.Cartesian3,d=new t.Cartesian3,w=new t.Cartesian3,p=new t.Cartesian3,x=new t.Cartesian3,g=new t.Cartesian3,h=new t.Cartesian3,M=new t.Cartesian3,T={};let P=new a.Cartographic;function E(e,a,n,r){const i=e[0],s=e[1],o=t.Cartesian3.angleBetween(i,s),l=Math.ceil(o/r),c=new Array(l);let C;if(a===n){for(C=0;C<l;C++)c[C]=a;return c.push(n),c}const u=(n-a)/l;for(C=1;C<l;C++){const e=a+C*u;c[C]=e}return c[0]=a,c.push(n),c}const B=new t.Cartesian3,z=new t.Cartesian3;const b=new t.Cartesian3(-1,0,0);let A=new n.Matrix4;const D=new n.Matrix4;let S=new n.Matrix3;const I=n.Matrix3.IDENTITY.clone(),N=new t.Cartesian3,O=new n.Cartesian4,V=new t.Cartesian3;function F(e,s,o,c,C,u,f,y,m,d,w,p){let x=O;if(A=l.Transforms.eastNorthUpToFixedFrame(e,C,A),r.defined(d)||(d=new t.Cartesian3),0===d.z){let r=N;r=n.Matrix4.multiplyByPointAsVector(A,b,r),r=t.Cartesian3.normalize(r,r);const o=function(e,n,r,s){const o=new i.EllipsoidTangentPlane(r,s),l=o.projectPointOntoPlane(t.Cartesian3.add(r,e,B),B),c=o.projectPointOntoPlane(t.Cartesian3.add(r,n,z),z),C=a.Cartesian2.angleBetween(l,c);return c.x*l.y-c.y*l.x>=0?-C:C}(r,s,e,C);S=n.Matrix3.fromRotationZ(o)}else{let e=t.Cartesian3.subtract(m[1],m[0],new t.Cartesian3);e=t.Cartesian3.normalize(e,e);const a=new t.Cartesian3(0,0,-1);let r=new t.Cartesian3;t.Cartesian3.cross(a,e,r);t.Cartesian3.magnitude(r)<1e-5&&(r=a),t.Cartesian3.normalize(r,r);const i=t.Cartesian3.angleBetween(a,e),s=l.Quaternion.fromAxisAngle(r,i);S=n.Matrix3.fromQuaternion(s)}V.z=u,A=n.Matrix4.multiplyTransformation(A,n.Matrix4.fromRotationTranslation(S,V,D),A);const g=I;g[0]=f;for(let e=0;e<y;e++)for(let e=0;e<o.length;e+=3)x=t.Cartesian3.fromArray(o,e,x),x=n.Matrix3.multiplyByVector(g,x,x),x=n.Matrix4.multiplyByPoint(A,x,x),1===w&&(x=n.Matrix4.multiplyByPoint(p,x,x)),c.push(x.x,x.y,x.z);return c}const G=new t.Cartesian3;function _(e,a,n,r,i,s,o,l,c,C,u){for(let f=0;f<e.length;f+=3){r=F(t.Cartesian3.fromArray(e,f,G),a,n,r,i,s[f/3],o,1,l,c,C,u)}return r}function L(e,a,n){const i=e.length,s=new Array(3*i);let o=0;const l=a.x+a.width/2,c=a.y+a.height/2;if(r.defined(n)||(n=new t.Cartesian3),0===n.z)for(let a=0;a<i;a++)s[o++]=e[a].x-l,s[o++]=0,s[o++]=e[a].y-c;else for(let a=0;a<i;a++)s[o++]=e[a].x-l,s[o++]=e[a].y-c,s[o++]=0;return s}const Q=new l.Quaternion,R=new t.Cartesian3,v=new n.Matrix3;function j(e,a,r,i,o,C,u,f,y,m){const d=t.Cartesian3.angleBetween(t.Cartesian3.subtract(a,e,h),t.Cartesian3.subtract(r,e,M)),w=i===c.BEVELED?0:Math.ceil(d/s.CesiumMath.toRadians(5));let p,x,g;if(p=o?n.Matrix3.fromQuaternion(l.Quaternion.fromAxisAngle(t.Cartesian3.negate(e,h),d/(w+1),Q),v):n.Matrix3.fromQuaternion(l.Quaternion.fromAxisAngle(e,d/(w+1),Q),v),a=t.Cartesian3.clone(a,R),w>0){const r=m?2:1;for(let i=0;i<w;i++)a=n.Matrix3.multiplyByVector(p,a,a),x=t.Cartesian3.subtract(a,e,h),x=t.Cartesian3.normalize(x,x),o||(x=t.Cartesian3.negate(x,x)),g=C.scaleToGeodeticSurface(a,M),u=F(g,x,f,u,C,y,1,r,0,n.Matrix4.IDENTITY)}else x=t.Cartesian3.subtract(a,e,h),x=t.Cartesian3.normalize(x,x),o||(x=t.Cartesian3.negate(x,x)),g=C.scaleToGeodeticSurface(a,M),u=F(g,x,f,u,C,y,1,1,0,n.Matrix4.IDENTITY),r=t.Cartesian3.clone(r,R),x=t.Cartesian3.subtract(r,e,h),x=t.Cartesian3.normalize(x,x),o||(x=t.Cartesian3.negate(x,x)),g=C.scaleToGeodeticSurface(r,M),u=F(g,x,f,u,C,y,1,1,0,n.Matrix4.IDENTITY);return u}T.removeDuplicatesFromShape=function(e){const t=e.length,n=[];for(let r=t-1,i=0;i<t;r=i++){const t=e[r],s=e[i];a.Cartesian2.equals(t,s)||n.push(s)}return n},T.angleIsGreaterThanPi=function(e,a,n,r){const s=new i.EllipsoidTangentPlane(n,r),o=s.projectPointOntoPlane(t.Cartesian3.add(n,e,B),B),l=s.projectPointOntoPlane(t.Cartesian3.add(n,a,z),z);return l.x*o.y-l.y*o.x>=0};const q=new t.Cartesian3,Y=new t.Cartesian3;T.computePositions=function(e,a,i,l,M){const B=l._ellipsoid,z=e.slice(0),b=[],A=new t.Cartesian3,D=new t.Cartesian3;t.Cartesian3.clone(z[0],A),t.Cartesian3.clone(z[1],D);const S=new n.Matrix4;(void 0===l._rootTransform||l._rootTransform.equals(new n.Matrix4))&&(l._rootTransform=n.Matrix4.IDENTITY),n.Matrix4.inverse(l._rootTransform,S),n.Matrix4.multiplyByPoint(S,A,A),n.Matrix4.multiplyByPoint(S,D,D),b.push(A),b.push(D);const I=function(e,a){const t=new Array(e.length);for(let n=0;n<e.length;n++){const r=e[n];P=a.cartesianToCartographic(r,P),t[n]=P.height,e[n]=a.scaleToGeodeticSurface(r,r)}return t}(e,B),N=I[0].toFixed(2),O=I[1].toFixed(2),V=new t.Cartesian3(0,0,1*(1*N-1*O).toFixed(2)),G=l._granularity,Q=l._cornerType,R=M?function(e,a,n){const i=e.length,s=new Array(6*i);let o=0;const l=a.x+a.width/2,c=a.y+a.height/2;if(r.defined(n)||(n=new t.Cartesian3),0===n.z){let a=e[0];s[o++]=a.x-l,s[o++]=0,s[o++]=a.y-c;for(let t=1;t<i;t++){a=e[t];const n=a.x-l,r=a.y-c;s[o++]=n,s[o++]=0,s[o++]=r,s[o++]=n,s[o++]=0,s[o++]=r}a=e[0],s[o++]=a.x-l,s[o++]=0,s[o++]=a.y-c}else{let a=e[0];s[o++]=a.x-l,s[o++]=a.y-c,s[o++]=0;for(let t=1;t<i;t++){a=e[t];const n=a.x-l,r=a.y-c;s[o++]=n,s[o++]=r,s[o++]=0,s[o++]=n,s[o++]=r,s[o++]=0}a=e[0],s[o++]=a.x-l,s[o++]=a.y-c,s[o++]=0}return s}(a,i,V):L(a,i,V),v=M?L(a,i,V):void 0;let U=0;U=i.height/2;const Z=i.width/2;let k=e.length,H=[],J=M?[]:void 0,K=u,W=f,X=y,$=m,ee=d,ae=w,te=p,ne=x,re=g,ie=e[0],se=e[1];const oe=l._isFromGLP;$=B.geodeticSurfaceNormal(ie,$),K=t.Cartesian3.subtract(se,ie,K),K.equals(new t.Cartesian3(0,0,0))&&(K=new t.Cartesian3(0,-1,0)),K=t.Cartesian3.normalize(K,K),ne=t.Cartesian3.cross($,K,ne),ne=t.Cartesian3.normalize(ne,ne);let le,ce,Ce=I[0],ue=I[1];M&&(J=F(ie,ne,v,J,B,Ce+U,1,1,b,V,oe,S)),re=t.Cartesian3.clone(ie,re),ie=se,W=t.Cartesian3.negate(K,W);for(let a=1;a<k-1;a++){const n=M?2:1;se=e[a+1],K=t.Cartesian3.subtract(se,ie,K),K=t.Cartesian3.normalize(K,K),X=t.Cartesian3.add(K,W,X),X=t.Cartesian3.normalize(X,X),$=B.geodeticSurfaceNormal(ie,$);const r=t.Cartesian3.multiplyByScalar($,t.Cartesian3.dot(K,$),q);t.Cartesian3.subtract(K,r,r),t.Cartesian3.normalize(r,r);const i=t.Cartesian3.multiplyByScalar($,t.Cartesian3.dot(W,$),Y);t.Cartesian3.subtract(W,i,i),t.Cartesian3.normalize(i,i);if(!s.CesiumMath.equalsEpsilon(Math.abs(t.Cartesian3.dot(r,i)),1,s.CesiumMath.EPSILON7)){X=t.Cartesian3.cross(X,$,X),X=t.Cartesian3.cross($,X,X),X=t.Cartesian3.normalize(X,X);const e=1/Math.max(.25,t.Cartesian3.magnitude(t.Cartesian3.cross(X,W,h))),a=T.angleIsGreaterThanPi(K,W,ie,B);a?(ee=t.Cartesian3.add(ie,t.Cartesian3.multiplyByScalar(X,e*Z,X),ee),ae=t.Cartesian3.add(ee,t.Cartesian3.multiplyByScalar(ne,Z,ae),ae),C[0]=t.Cartesian3.clone(re,C[0]),C[1]=t.Cartesian3.clone(ae,C[1]),le=E(C,Ce+U,ue+U,G),ce=o.PolylinePipeline.generateArc({positions:C,granularity:G,ellipsoid:B}),H=_(ce,ne,R,H,B,le,1,b,V,oe,S),ne=t.Cartesian3.cross($,K,ne),ne=t.Cartesian3.normalize(ne,ne),te=t.Cartesian3.add(ee,t.Cartesian3.multiplyByScalar(ne,Z,te),te),Q===c.ROUNDED||Q===c.BEVELED?j(ee,ae,te,Q,a,B,H,R,ue+U,M):(X=t.Cartesian3.negate(X,X),H=F(ie,X,R,H,B,ue+U,e,n,oe,S)),re=t.Cartesian3.clone(te,re)):(ee=t.Cartesian3.add(ie,t.Cartesian3.multiplyByScalar(X,e*Z,X),ee),ae=t.Cartesian3.add(ee,t.Cartesian3.multiplyByScalar(ne,-Z,ae),ae),C[0]=t.Cartesian3.clone(re,C[0]),C[1]=t.Cartesian3.clone(ae,C[1]),le=E(C,Ce+U,ue+U,G),ce=o.PolylinePipeline.generateArc({positions:C,granularity:G,ellipsoid:B}),H=_(ce,ne,R,H,B,le,1,b,V,oe,S),ne=t.Cartesian3.cross($,K,ne),ne=t.Cartesian3.normalize(ne,ne),te=t.Cartesian3.add(ee,t.Cartesian3.multiplyByScalar(ne,-Z,te),te),Q===c.ROUNDED||Q===c.BEVELED?j(ee,ae,te,Q,a,B,H,R,ue+U,M):H=F(ie,X,R,H,B,ue+U,e,n,oe,S),re=t.Cartesian3.clone(te,re)),W=t.Cartesian3.negate(K,W)}else H=F(re,ne,R,H,B,Ce+U,1,1,oe,S),re=ie;Ce=ue,ue=I[a+1],ie=se}C[0]=t.Cartesian3.clone(re,C[0]),C[1]=t.Cartesian3.clone(ie,C[1]),le=E(C,Ce+U,ue+U,G),ce=o.PolylinePipeline.generateArc({positions:C,granularity:G,ellipsoid:B}),C[0].equals(C[1])&&3===ce.length&&ce.push(ce[0],ce[1],ce[2]),H=_(ce,ne,R,H,B,le,1,b,V,oe,S),M&&(J=F(ie,ne,v,J,B,ue+U,1,1,b,V,oe,S)),k=H.length;const fe=M?k+J.length:k,ye=new Float64Array(fe);return ye.set(H),M&&ye.set(J,k),ye},e.CornerType=c,e.PolylineVolumeGeometryLibrary=T}));