/** * @license * Cesium - https://github.com/CesiumGS/cesium * Version 1.96.6 * * Copyright 2011-2022 Cesium Contributors * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * * Columbus View (Pat. Pend.) * * Portions licensed separately. * See https://github.com/CesiumGS/cesium/blob/main/LICENSE.md for full licensing details. */ define(["exports","./Matrix2-4706dd70","./defaultValue-028a8a27","./RuntimeError-a977b8e0","./EllipsoidGeodesic-0454f1c2","./EllipsoidRhumbLine-248c8a1e","./IntersectionTests-54d7f8a4","./ComponentDatatype-438cad2a","./Plane-f4cd36d8"],(function(e,t,n,a,i,r,o,s,c){"use strict";const l={numberOfPoints:function(e,n,a){const i=t.Cartesian3.distance(e,n);return Math.ceil(i/a)},numberOfPointsRhumbLine:function(e,t,n){const a=Math.pow(e.longitude-t.longitude,2)+Math.pow(e.latitude-t.latitude,2);return Math.max(1,Math.ceil(Math.sqrt(a/(n*n))))}},u=new t.Cartographic;l.extractHeights=function(e,t){const n=e.length,a=new Array(n);for(let i=0;i<n;i++){const n=e[i];a[i]=t.cartesianToCartographic(n,u).height}return a};const h=new t.Matrix4,f=new t.Cartesian3,d=new t.Cartesian3,p=new c.Plane(t.Cartesian3.UNIT_X,0),g=new t.Cartesian3,C=new c.Plane(t.Cartesian3.UNIT_X,0),m=new t.Cartesian3,w=new t.Cartesian3,P=[];function T(e,t,n){const a=P;let i;if(a.length=e,t===n){for(i=0;i<e;i++)a[i]=t;return a}const r=(n-t)/e;for(i=0;i<e;i++){const e=t+i*r;a[i]=e}return a}const y=new t.Cartographic,E=new t.Cartographic,A=new t.Cartesian3,R=new t.Cartesian3,b=new t.Cartesian3,D=new i.EllipsoidGeodesic;let M=new r.EllipsoidRhumbLine;function S(e,n,a,i,r,o,s,c){const u=i.scaleToGeodeticSurface(e,R),h=i.scaleToGeodeticSurface(n,b),f=l.numberOfPoints(e,n,a),d=i.cartesianToCartographic(u,y),p=i.cartesianToCartographic(h,E),g=T(f,r,o);D.setEndPoints(d,p);const C=D.surfaceDistance/f;let m=c;d.height=r;let w=i.cartographicToCartesian(d,A);t.Cartesian3.pack(w,s,m),m+=3;for(let l=1;l<f;l++){const e=D.interpolateUsingSurfaceDistance(l*C,E);e.height=g[l],w=i.cartographicToCartesian(e,A),t.Cartesian3.pack(w,s,m),m+=3}return m}function x(e,n,a,i,o,s,c,u){const h=i.cartesianToCartographic(e,y),f=i.cartesianToCartographic(n,E),d=l.numberOfPointsRhumbLine(h,f,a);h.height=0,f.height=0;const p=T(d,o,s);M.ellipsoid.equals(i)||(M=new r.EllipsoidRhumbLine(void 0,void 0,i)),M.setEndPoints(h,f);const g=M.surfaceDistance/d;let C=u;h.height=o;let m=i.cartographicToCartesian(h,A);t.Cartesian3.pack(m,c,C),C+=3;for(let r=1;r<d;r++){const e=M.interpolateUsingSurfaceDistance(r*g,E);e.height=p[r],m=i.cartographicToCartesian(e,A),t.Cartesian3.pack(m,c,C),C+=3}return C}l.wrapLongitude=function(e,a){const i=[],r=[];if(n.defined(e)&&e.length>0){a=n.defaultValue(a,t.Matrix4.IDENTITY);const s=t.Matrix4.inverseTransformation(a,h),l=t.Matrix4.multiplyByPoint(s,t.Cartesian3.ZERO,f),u=t.Cartesian3.normalize(t.Matrix4.multiplyByPointAsVector(s,t.Cartesian3.UNIT_Y,d),d),P=c.Plane.fromPointNormal(l,u,p),T=t.Cartesian3.normalize(t.Matrix4.multiplyByPointAsVector(s,t.Cartesian3.UNIT_X,g),g),y=c.Plane.fromPointNormal(l,T,C);let E=1;i.push(t.Cartesian3.clone(e[0]));let A=i[0];const R=e.length;for(let a=1;a<R;++a){const s=e[a];if(c.Plane.getPointDistance(y,A)<0||c.Plane.getPointDistance(y,s)<0){const e=o.IntersectionTests.lineSegmentPlane(A,s,P,m);if(n.defined(e)){const n=t.Cartesian3.multiplyByScalar(u,5e-9,w);c.Plane.getPointDistance(P,A)<0&&t.Cartesian3.negate(n,n),i.push(t.Cartesian3.add(e,n,new t.Cartesian3)),r.push(E+1),t.Cartesian3.negate(n,n),i.push(t.Cartesian3.add(e,n,new t.Cartesian3)),E=1}}i.push(t.Cartesian3.clone(e[a])),E++,A=s}r.push(E)}return{positions:i,lengths:r}},l.generateArc=function(e){n.defined(e)||(e={});const i=e.positions;if(!n.defined(i))throw new a.DeveloperError("options.positions is required.");const r=i.length,o=n.defaultValue(e.ellipsoid,t.Ellipsoid.WGS84);let c=n.defaultValue(e.height,0);const u=Array.isArray(c);if(r<1)return[];if(1===r){const e=o.scaleToGeodeticSurface(i[0],R);if(c=u?c[0]:c,0!==c){const n=o.geodeticSurfaceNormal(e,A);t.Cartesian3.multiplyByScalar(n,c,n),t.Cartesian3.add(e,n,e)}return[e.x,e.y,e.z]}let h=e.minDistance;if(!n.defined(h)){const t=n.defaultValue(e.granularity,s.CesiumMath.RADIANS_PER_DEGREE);h=s.CesiumMath.chordLength(t,o.maximumRadius)}let f,d=0;for(f=0;f<r-1;f++)d+=l.numberOfPoints(i[f],i[f+1],h);const p=3*(d+1),g=new Array(p);let C=0;for(f=0;f<r-1;f++){const e=i[f],t=i[f+1],n=u?c[f]:c,a=u?c[f+1]:c;C=S(e,t,h,o,n,a,g,C)}P.length=0;const m=i[r-1],w=o.cartesianToCartographic(m,y);w.height=u?c[r-1]:c;const T=o.cartographicToCartesian(w,A);return t.Cartesian3.pack(T,g,p-3),g};const N=new t.Cartographic,G=new t.Cartographic;l.generateRhumbArc=function(e){n.defined(e)||(e={});const i=e.positions;if(!n.defined(i))throw new a.DeveloperError("options.positions is required.");const r=i.length,o=n.defaultValue(e.ellipsoid,t.Ellipsoid.WGS84);let c=n.defaultValue(e.height,0);const u=Array.isArray(c);if(r<1)return[];if(1===r){const e=o.scaleToGeodeticSurface(i[0],R);if(c=u?c[0]:c,0!==c){const n=o.geodeticSurfaceNormal(e,A);t.Cartesian3.multiplyByScalar(n,c,n),t.Cartesian3.add(e,n,e)}return[e.x,e.y,e.z]}const h=n.defaultValue(e.granularity,s.CesiumMath.RADIANS_PER_DEGREE);let f,d,p=0,g=o.cartesianToCartographic(i[0],N);for(f=0;f<r-1;f++)d=o.cartesianToCartographic(i[f+1],G),p+=l.numberOfPointsRhumbLine(g,d,h),g=t.Cartographic.clone(d,N);const C=3*(p+1),m=new Array(C);let w=0;for(f=0;f<r-1;f++){const e=i[f],t=i[f+1],n=u?c[f]:c,a=u?c[f+1]:c;w=x(e,t,h,o,n,a,m,w)}P.length=0;const T=i[r-1],E=o.cartesianToCartographic(T,y);E.height=u?c[r-1]:c;const b=o.cartographicToCartesian(E,A);return t.Cartesian3.pack(b,m,C-3),m},l.generateCartesianArc=function(e){const n=l.generateArc(e),a=n.length/3,i=new Array(a);for(let r=0;r<a;r++)i[r]=t.Cartesian3.unpack(n,3*r);return i},l.generateCartesianRhumbArc=function(e){const n=l.generateRhumbArc(e),a=n.length/3,i=new Array(a);for(let r=0;r<a;r++)i[r]=t.Cartesian3.unpack(n,3*r);return i},e.PolylinePipeline=l}));