createPolylineGeometry.js 6.4 KB

1
  1. define(["./when-229515d6","./Matrix2-f2da41d4","./ArcType-1da7fdca","./arrayRemoveDuplicates-bb548aa3","./Transforms-7cd3197b","./Color-d2414093","./ComponentDatatype-17b06483","./RuntimeError-ffe03243","./GeometryAttribute-80036e07","./GeometryAttributes-b253752a","./IndexDatatype-b10faa0b","./PolylinePipeline-a3ba6f24","./VertexFormat-565d6a6c","./combine-8ce3f24b","./WebGLConstants-4e26b85a","./EllipsoidGeodesic-43ba18de","./EllipsoidRhumbLine-afd6cd20","./IntersectionTests-1b8a3cb9","./Plane-0421a8be"],(function(e,t,r,a,o,n,i,l,s,p,d,c,u,y,m,f,h,v,C){"use strict";var g=[];function b(e,t,r,a,o){var i,l=g;l.length=o;var s=r.red,p=r.green,d=r.blue,c=r.alpha,u=a.red,y=a.green,m=a.blue,f=a.alpha;if(n.Color.equals(r,a)){for(i=0;i<o;i++)l[i]=n.Color.clone(r);return l}var h=(u-s)/o,v=(y-p)/o,C=(m-d)/o,b=(f-c)/o;for(i=0;i<o;i++)l[i]=new n.Color(s+i*h,p+i*v,d+i*C,c+i*b);return l}function _(a){var o=(a=e.defaultValue(a,e.defaultValue.EMPTY_OBJECT)).positions,l=a.colors,s=e.defaultValue(a.width,1),p=e.defaultValue(a.colorsPerVertex,!1);this._positions=o,this._colors=l,this._width=s,this._colorsPerVertex=p,this._vertexFormat=u.VertexFormat.clone(e.defaultValue(a.vertexFormat,u.VertexFormat.DEFAULT)),this._arcType=e.defaultValue(a.arcType,r.ArcType.GEODESIC),this._granularity=e.defaultValue(a.granularity,i.CesiumMath.RADIANS_PER_DEGREE),this._ellipsoid=t.Ellipsoid.clone(e.defaultValue(a.ellipsoid,t.Ellipsoid.WGS84)),this._workerName="createPolylineGeometry";var d=1+o.length*t.Cartesian3.packedLength;d+=e.defined(l)?1+l.length*n.Color.packedLength:1,this.packedLength=d+t.Ellipsoid.packedLength+u.VertexFormat.packedLength+4}_.pack=function(r,a,o){var i;o=e.defaultValue(o,0);var l=r._positions,s=l.length;for(a[o++]=s,i=0;i<s;++i,o+=t.Cartesian3.packedLength)t.Cartesian3.pack(l[i],a,o);var p=r._colors;for(s=e.defined(p)?p.length:0,a[o++]=s,i=0;i<s;++i,o+=n.Color.packedLength)n.Color.pack(p[i],a,o);return t.Ellipsoid.pack(r._ellipsoid,a,o),o+=t.Ellipsoid.packedLength,u.VertexFormat.pack(r._vertexFormat,a,o),o+=u.VertexFormat.packedLength,a[o++]=r._width,a[o++]=r._colorsPerVertex?1:0,a[o++]=r._arcType,a[o]=r._granularity,a};var A=t.Ellipsoid.clone(t.Ellipsoid.UNIT_SPHERE),E=new u.VertexFormat,P={positions:void 0,colors:void 0,ellipsoid:A,vertexFormat:E,width:void 0,colorsPerVertex:void 0,arcType:void 0,granularity:void 0};_.unpack=function(r,a,o){var i;a=e.defaultValue(a,0);var l=r[a++],s=new Array(l);for(i=0;i<l;++i,a+=t.Cartesian3.packedLength)s[i]=t.Cartesian3.unpack(r,a);var p=(l=r[a++])>0?new Array(l):void 0;for(i=0;i<l;++i,a+=n.Color.packedLength)p[i]=n.Color.unpack(r,a);var d=t.Ellipsoid.unpack(r,a,A);a+=t.Ellipsoid.packedLength;var c=u.VertexFormat.unpack(r,a,E);a+=u.VertexFormat.packedLength;var y=r[a++],m=1===r[a++],f=r[a++],h=r[a];return e.defined(o)?(o._positions=s,o._colors=p,o._ellipsoid=t.Ellipsoid.clone(d,o._ellipsoid),o._vertexFormat=u.VertexFormat.clone(c,o._vertexFormat),o._width=y,o._colorsPerVertex=m,o._arcType=f,o._granularity=h,o):(P.positions=s,P.colors=p,P.width=y,P.colorsPerVertex=m,P.arcType=f,P.granularity=h,new _(P))};var w=new t.Cartesian3,x=new t.Cartesian3,T=new t.Cartesian3,D=new t.Cartesian3;return _.createGeometry=function(l){var u,y,m,f=l._width,h=l._vertexFormat,v=l._colors,C=l._colorsPerVertex,_=l._arcType,A=l._granularity,E=l._ellipsoid,P=[],k=a.arrayRemoveDuplicates(l._positions,t.Cartesian3.equalsEpsilon,!1,P);if(e.defined(v)&&P.length>0){var V=0,L=P[0];v=v.filter((function(e,t){return!(C?t===L||0===t&&1===L:t+1===L)||(V++,L=P[V],!1)}))}var F=k.length;if(!(F<2||f<=0)){if(_===r.ArcType.GEODESIC||_===r.ArcType.RHUMB){var G,O;_===r.ArcType.GEODESIC?(G=i.CesiumMath.chordLength(A,E.maximumRadius),O=c.PolylinePipeline.numberOfPoints):(G=A,O=c.PolylinePipeline.numberOfPointsRhumbLine);var R=c.PolylinePipeline.extractHeights(k,E);if(e.defined(v)){var I=1;for(u=0;u<F-1;++u)I+=O(k[u],k[u+1],G);var S=new Array(I),B=0;for(u=0;u<F-1;++u){var U=k[u],N=k[u+1],M=v[u],H=O(U,N,G);if(C&&u<I){var W=b(0,0,M,v[u+1],H),Y=W.length;for(y=0;y<Y;++y)S[B++]=W[y]}else for(y=0;y<H;++y)S[B++]=n.Color.clone(M)}S[B]=n.Color.clone(v[v.length-1]),v=S,g.length=0}k=_===r.ArcType.GEODESIC?c.PolylinePipeline.generateCartesianArc({positions:k,minDistance:G,ellipsoid:E,height:R}):c.PolylinePipeline.generateCartesianRhumbArc({positions:k,granularity:G,ellipsoid:E,height:R})}var q,z=4*(F=k.length)-4,J=new Float64Array(3*z),j=new Float64Array(3*z),K=new Float64Array(3*z),Q=new Float32Array(2*z),X=h.st?new Float32Array(2*z):void 0,Z=e.defined(v)?new Uint8Array(4*z):void 0,$=0,ee=0,te=0,re=0;for(y=0;y<F;++y){var ae,oe;0===y?(q=w,t.Cartesian3.subtract(k[0],k[1],q),t.Cartesian3.add(k[0],q,q)):q=k[y-1],t.Cartesian3.clone(q,T),t.Cartesian3.clone(k[y],x),y===F-1?(q=w,t.Cartesian3.subtract(k[F-1],k[F-2],q),t.Cartesian3.add(k[F-1],q,q)):q=k[y+1],t.Cartesian3.clone(q,D),e.defined(Z)&&(ae=0===y||C?v[y]:v[y-1],y!==F-1&&(oe=v[y]));var ne=y===F-1?2:4;for(m=0===y?2:0;m<ne;++m){t.Cartesian3.pack(x,J,$),t.Cartesian3.pack(T,j,$),t.Cartesian3.pack(D,K,$),$+=3;var ie=m-2<0?-1:1;if(Q[ee++]=m%2*2-1,Q[ee++]=ie*f,h.st&&(X[te++]=y/(F-1),X[te++]=Math.max(Q[ee-2],0)),e.defined(Z)){var le=m<2?ae:oe;Z[re++]=n.Color.floatToByte(le.red),Z[re++]=n.Color.floatToByte(le.green),Z[re++]=n.Color.floatToByte(le.blue),Z[re++]=n.Color.floatToByte(le.alpha)}}}var se=new p.GeometryAttributes;se.position=new s.GeometryAttribute({componentDatatype:i.ComponentDatatype.DOUBLE,componentsPerAttribute:3,values:J}),se.prevPosition=new s.GeometryAttribute({componentDatatype:i.ComponentDatatype.DOUBLE,componentsPerAttribute:3,values:j}),se.nextPosition=new s.GeometryAttribute({componentDatatype:i.ComponentDatatype.DOUBLE,componentsPerAttribute:3,values:K}),se.expandAndWidth=new s.GeometryAttribute({componentDatatype:i.ComponentDatatype.FLOAT,componentsPerAttribute:2,values:Q}),h.st&&(se.st=new s.GeometryAttribute({componentDatatype:i.ComponentDatatype.FLOAT,componentsPerAttribute:2,values:X})),e.defined(Z)&&(se.color=new s.GeometryAttribute({componentDatatype:i.ComponentDatatype.UNSIGNED_BYTE,componentsPerAttribute:4,values:Z,normalize:!0}));var pe=d.IndexDatatype.createTypedArray(z,6*F-6),de=0,ce=0,ue=F-1;for(y=0;y<ue;++y)pe[ce++]=de,pe[ce++]=de+2,pe[ce++]=de+1,pe[ce++]=de+1,pe[ce++]=de+2,pe[ce++]=de+3,de+=4;return new s.Geometry({attributes:se,indices:pe,primitiveType:s.PrimitiveType.TRIANGLES,boundingSphere:o.BoundingSphere.fromPoints(k),geometryType:s.GeometryType.POLYLINES})}},function(r,a){return e.defined(a)&&(r=_.unpack(r,a)),r._ellipsoid=t.Ellipsoid.clone(r._ellipsoid),_.createGeometry(r)}}));