You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
317 lines
11 KiB
317 lines
11 KiB
define([
|
|
'exports',
|
|
'./Matrix2-f2da41d4',
|
|
'./EllipsoidTangentPlane-b27cd2f7',
|
|
'./ComponentDatatype-17b06483',
|
|
'./PolylinePipeline-a3ba6f24',
|
|
'./Transforms-7cd3197b',
|
|
'./when-229515d6',
|
|
'./RuntimeError-ffe03243',
|
|
], function (e, a, r, n, t, i, s, o) {
|
|
'use strict';
|
|
var l = Object.freeze({ ROUNDED: 0, MITERED: 1, BEVELED: 2 }),
|
|
C = {};
|
|
function c(e, a) {
|
|
s.defined(C[e]) || ((C[e] = !0), console.warn(s.defaultValue(a, e)));
|
|
}
|
|
(c.geometryOutlines =
|
|
'Entity geometry outlines are unsupported on terrain. Outlines will be disabled. To enable outlines, disable geometry terrain clamping by explicitly setting height to 0.'),
|
|
(c.geometryZIndex =
|
|
'Entity geometry with zIndex are unsupported when height or extrudedHeight are defined. zIndex will be ignored'),
|
|
(c.geometryHeightReference =
|
|
'Entity corridor, ellipse, polygon or rectangle with heightReference must also have a defined height. heightReference will be ignored'),
|
|
(c.geometryExtrudedHeightReference =
|
|
'Entity corridor, ellipse, polygon or rectangle with extrudedHeightReference must also have a defined extrudedHeight. extrudedHeightReference will be ignored');
|
|
var u = [new a.Cartesian3(), new a.Cartesian3()],
|
|
d = new a.Cartesian3(),
|
|
g = new a.Cartesian3(),
|
|
y = new a.Cartesian3(),
|
|
f = new a.Cartesian3(),
|
|
m = new a.Cartesian3(),
|
|
h = new a.Cartesian3(),
|
|
p = new a.Cartesian3(),
|
|
w = new a.Cartesian3(),
|
|
v = new a.Cartesian3(),
|
|
x = new a.Cartesian3(),
|
|
E = new a.Cartesian3(),
|
|
P = {},
|
|
b = new a.Cartographic();
|
|
function M(e, r, n, t) {
|
|
var i,
|
|
s = e[0],
|
|
o = e[1],
|
|
l = a.Cartesian3.angleBetween(s, o),
|
|
C = Math.ceil(l / t),
|
|
c = new Array(C);
|
|
if (r === n) {
|
|
for (i = 0; i < C; i++) c[i] = r;
|
|
return c.push(n), c;
|
|
}
|
|
var u = (n - r) / C;
|
|
for (i = 1; i < C; i++) {
|
|
var d = r + i * u;
|
|
c[i] = d;
|
|
}
|
|
return (c[0] = r), c.push(n), c;
|
|
}
|
|
var T = new a.Cartesian3(),
|
|
B = new a.Cartesian3();
|
|
var z = new a.Cartesian3(-1, 0, 0),
|
|
S = new a.Matrix4(),
|
|
A = new a.Matrix4(),
|
|
D = new a.Matrix3(),
|
|
R = a.Matrix3.IDENTITY.clone(),
|
|
O = new a.Cartesian3(),
|
|
I = new a.Cartesian4(),
|
|
V = new a.Cartesian3();
|
|
function N(e, n, t, s, o, l, C, c) {
|
|
var u = O,
|
|
d = I;
|
|
(S = i.Transforms.eastNorthUpToFixedFrame(e, o, S)),
|
|
(u = a.Matrix4.multiplyByPointAsVector(S, z, u));
|
|
var g = (function (e, n, t, i) {
|
|
var s = new r.EllipsoidTangentPlane(t, i),
|
|
o = s.projectPointOntoPlane(a.Cartesian3.add(t, e, T), T),
|
|
l = s.projectPointOntoPlane(a.Cartesian3.add(t, n, B), B),
|
|
C = a.Cartesian2.angleBetween(o, l);
|
|
return l.x * o.y - l.y * o.x >= 0 ? -C : C;
|
|
})((u = a.Cartesian3.normalize(u, u)), n, e, o);
|
|
(D = a.Matrix3.fromRotationZ(g, D)),
|
|
(V.z = l),
|
|
(S = a.Matrix4.multiplyTransformation(S, a.Matrix4.fromRotationTranslation(D, V, A), S));
|
|
var y = R;
|
|
y[0] = C;
|
|
for (var f = 0; f < c; f++)
|
|
for (var m = 0; m < t.length; m += 3)
|
|
(d = a.Cartesian3.fromArray(t, m, d)),
|
|
(d = a.Matrix3.multiplyByVector(y, d, d)),
|
|
(d = a.Matrix4.multiplyByPoint(S, d, d)),
|
|
s.push(d.x, d.y, d.z);
|
|
return s;
|
|
}
|
|
var G = new a.Cartesian3();
|
|
function H(e, r, n, t, i, s, o) {
|
|
for (var l = 0; l < e.length; l += 3) {
|
|
t = N(a.Cartesian3.fromArray(e, l, G), r, n, t, i, s[l / 3], o, 1);
|
|
}
|
|
return t;
|
|
}
|
|
function L(e, a) {
|
|
for (
|
|
var r = e.length,
|
|
n = new Array(3 * r),
|
|
t = 0,
|
|
i = a.x + a.width / 2,
|
|
s = a.y + a.height / 2,
|
|
o = 0;
|
|
o < r;
|
|
o++
|
|
)
|
|
(n[t++] = e[o].x - i), (n[t++] = 0), (n[t++] = e[o].y - s);
|
|
return n;
|
|
}
|
|
var j = new i.Quaternion(),
|
|
Q = new a.Cartesian3(),
|
|
q = new a.Matrix3();
|
|
function F(e, r, t, s, o, C, c, u, d, g) {
|
|
var y,
|
|
f,
|
|
m = a.Cartesian3.angleBetween(a.Cartesian3.subtract(r, e, x), a.Cartesian3.subtract(t, e, E)),
|
|
h = s === l.BEVELED ? 0 : Math.ceil(m / n.CesiumMath.toRadians(5));
|
|
if (
|
|
((y = o
|
|
? a.Matrix3.fromQuaternion(
|
|
i.Quaternion.fromAxisAngle(a.Cartesian3.negate(e, x), m / (h + 1), j),
|
|
q
|
|
)
|
|
: a.Matrix3.fromQuaternion(i.Quaternion.fromAxisAngle(e, m / (h + 1), j), q)),
|
|
(r = a.Cartesian3.clone(r, Q)),
|
|
h > 0)
|
|
)
|
|
for (var p = g ? 2 : 1, w = 0; w < h; w++)
|
|
(r = a.Matrix3.multiplyByVector(y, r, r)),
|
|
(f = a.Cartesian3.subtract(r, e, x)),
|
|
(f = a.Cartesian3.normalize(f, f)),
|
|
o || (f = a.Cartesian3.negate(f, f)),
|
|
(c = N(C.scaleToGeodeticSurface(r, E), f, u, c, C, d, 1, p));
|
|
else
|
|
(f = a.Cartesian3.subtract(r, e, x)),
|
|
(f = a.Cartesian3.normalize(f, f)),
|
|
o || (f = a.Cartesian3.negate(f, f)),
|
|
(c = N(C.scaleToGeodeticSurface(r, E), f, u, c, C, d, 1, 1)),
|
|
(t = a.Cartesian3.clone(t, Q)),
|
|
(f = a.Cartesian3.subtract(t, e, x)),
|
|
(f = a.Cartesian3.normalize(f, f)),
|
|
o || (f = a.Cartesian3.negate(f, f)),
|
|
(c = N(C.scaleToGeodeticSurface(t, E), f, u, c, C, d, 1, 1));
|
|
return c;
|
|
}
|
|
(P.removeDuplicatesFromShape = function (e) {
|
|
for (var r = e.length, n = [], t = r - 1, i = 0; i < r; t = i++) {
|
|
var s = e[t],
|
|
o = e[i];
|
|
a.Cartesian2.equals(s, o) || n.push(o);
|
|
}
|
|
return n;
|
|
}),
|
|
(P.angleIsGreaterThanPi = function (e, n, t, i) {
|
|
var s = new r.EllipsoidTangentPlane(t, i),
|
|
o = s.projectPointOntoPlane(a.Cartesian3.add(t, e, T), T),
|
|
l = s.projectPointOntoPlane(a.Cartesian3.add(t, n, B), B);
|
|
return l.x * o.y - l.y * o.x >= 0;
|
|
});
|
|
var U = new a.Cartesian3(),
|
|
_ = new a.Cartesian3();
|
|
(P.computePositions = function (e, r, i, s, o) {
|
|
var C = s._ellipsoid,
|
|
E = (function (e, a) {
|
|
for (var r = new Array(e.length), n = 0; n < e.length; n++) {
|
|
var t = e[n];
|
|
(b = a.cartesianToCartographic(t, b)),
|
|
(r[n] = b.height),
|
|
(e[n] = a.scaleToGeodeticSurface(t, t));
|
|
}
|
|
return r;
|
|
})(e, C),
|
|
T = s._granularity,
|
|
B = s._cornerType,
|
|
z = o
|
|
? (function (e, a) {
|
|
var r = e.length,
|
|
n = new Array(6 * r),
|
|
t = 0,
|
|
i = a.x + a.width / 2,
|
|
s = a.y + a.height / 2,
|
|
o = e[0];
|
|
(n[t++] = o.x - i), (n[t++] = 0), (n[t++] = o.y - s);
|
|
for (var l = 1; l < r; l++) {
|
|
var C = (o = e[l]).x - i,
|
|
c = o.y - s;
|
|
(n[t++] = C), (n[t++] = 0), (n[t++] = c), (n[t++] = C), (n[t++] = 0), (n[t++] = c);
|
|
}
|
|
return (o = e[0]), (n[t++] = o.x - i), (n[t++] = 0), (n[t++] = o.y - s), n;
|
|
})(r, i)
|
|
: L(r, i),
|
|
S = o ? L(r, i) : void 0,
|
|
A = i.height / 2,
|
|
D = i.width / 2,
|
|
R = e.length,
|
|
O = [],
|
|
I = o ? [] : void 0,
|
|
V = d,
|
|
G = g,
|
|
j = y,
|
|
Q = f,
|
|
q = m,
|
|
Z = h,
|
|
W = p,
|
|
Y = w,
|
|
k = v,
|
|
J = e[0],
|
|
K = e[1];
|
|
(Q = C.geodeticSurfaceNormal(J, Q)),
|
|
(V = a.Cartesian3.subtract(K, J, V)),
|
|
(V = a.Cartesian3.normalize(V, V)),
|
|
(Y = a.Cartesian3.cross(Q, V, Y)),
|
|
(Y = a.Cartesian3.normalize(Y, Y));
|
|
var X,
|
|
$ = E[0],
|
|
ee = E[1];
|
|
o && (I = N(J, Y, S, I, C, $ + A, 1, 1)),
|
|
(k = a.Cartesian3.clone(J, k)),
|
|
(J = K),
|
|
(G = a.Cartesian3.negate(V, G));
|
|
for (var ae = 1; ae < R - 1; ae++) {
|
|
var re = o ? 2 : 1;
|
|
if (((K = e[ae + 1]), J.equals(K)))
|
|
c('Positions are too close and are considered equivalent with rounding error.');
|
|
else {
|
|
(V = a.Cartesian3.subtract(K, J, V)),
|
|
(V = a.Cartesian3.normalize(V, V)),
|
|
(j = a.Cartesian3.add(V, G, j)),
|
|
(j = a.Cartesian3.normalize(j, j)),
|
|
(Q = C.geodeticSurfaceNormal(J, Q));
|
|
var ne = a.Cartesian3.multiplyByScalar(Q, a.Cartesian3.dot(V, Q), U);
|
|
a.Cartesian3.subtract(V, ne, ne), a.Cartesian3.normalize(ne, ne);
|
|
var te = a.Cartesian3.multiplyByScalar(Q, a.Cartesian3.dot(G, Q), _);
|
|
if (
|
|
(a.Cartesian3.subtract(G, te, te),
|
|
a.Cartesian3.normalize(te, te),
|
|
!n.CesiumMath.equalsEpsilon(Math.abs(a.Cartesian3.dot(ne, te)), 1, n.CesiumMath.EPSILON7))
|
|
) {
|
|
(j = a.Cartesian3.cross(j, Q, j)),
|
|
(j = a.Cartesian3.cross(Q, j, j)),
|
|
(j = a.Cartesian3.normalize(j, j));
|
|
var ie = 1 / Math.max(0.25, a.Cartesian3.magnitude(a.Cartesian3.cross(j, G, x))),
|
|
se = P.angleIsGreaterThanPi(V, G, J, C);
|
|
se
|
|
? ((q = a.Cartesian3.add(J, a.Cartesian3.multiplyByScalar(j, ie * D, j), q)),
|
|
(Z = a.Cartesian3.add(q, a.Cartesian3.multiplyByScalar(Y, D, Z), Z)),
|
|
(u[0] = a.Cartesian3.clone(k, u[0])),
|
|
(u[1] = a.Cartesian3.clone(Z, u[1])),
|
|
(X = M(u, $ + A, ee + A, T)),
|
|
(O = H(
|
|
t.PolylinePipeline.generateArc({ positions: u, granularity: T, ellipsoid: C }),
|
|
Y,
|
|
z,
|
|
O,
|
|
C,
|
|
X,
|
|
1
|
|
)),
|
|
(Y = a.Cartesian3.cross(Q, V, Y)),
|
|
(Y = a.Cartesian3.normalize(Y, Y)),
|
|
(W = a.Cartesian3.add(q, a.Cartesian3.multiplyByScalar(Y, D, W), W)),
|
|
B === l.ROUNDED || B === l.BEVELED
|
|
? F(q, Z, W, B, se, C, O, z, ee + A, o)
|
|
: (O = N(J, (j = a.Cartesian3.negate(j, j)), z, O, C, ee + A, ie, re)),
|
|
(k = a.Cartesian3.clone(W, k)))
|
|
: ((q = a.Cartesian3.add(J, a.Cartesian3.multiplyByScalar(j, ie * D, j), q)),
|
|
(Z = a.Cartesian3.add(q, a.Cartesian3.multiplyByScalar(Y, -D, Z), Z)),
|
|
(u[0] = a.Cartesian3.clone(k, u[0])),
|
|
(u[1] = a.Cartesian3.clone(Z, u[1])),
|
|
(X = M(u, $ + A, ee + A, T)),
|
|
(O = H(
|
|
t.PolylinePipeline.generateArc({ positions: u, granularity: T, ellipsoid: C }),
|
|
Y,
|
|
z,
|
|
O,
|
|
C,
|
|
X,
|
|
1
|
|
)),
|
|
(Y = a.Cartesian3.cross(Q, V, Y)),
|
|
(Y = a.Cartesian3.normalize(Y, Y)),
|
|
(W = a.Cartesian3.add(q, a.Cartesian3.multiplyByScalar(Y, -D, W), W)),
|
|
B === l.ROUNDED || B === l.BEVELED
|
|
? F(q, Z, W, B, se, C, O, z, ee + A, o)
|
|
: (O = N(J, j, z, O, C, ee + A, ie, re)),
|
|
(k = a.Cartesian3.clone(W, k))),
|
|
(G = a.Cartesian3.negate(V, G));
|
|
} else (O = N(k, Y, z, O, C, $ + A, 1, 1)), (k = J);
|
|
($ = ee), (ee = E[ae + 1]), (J = K);
|
|
}
|
|
}
|
|
(u[0] = a.Cartesian3.clone(k, u[0])),
|
|
(u[1] = a.Cartesian3.clone(J, u[1])),
|
|
(X = M(u, $ + A, ee + A, T)),
|
|
(O = H(
|
|
t.PolylinePipeline.generateArc({ positions: u, granularity: T, ellipsoid: C }),
|
|
Y,
|
|
z,
|
|
O,
|
|
C,
|
|
X,
|
|
1
|
|
)),
|
|
o && (I = N(J, Y, S, I, C, ee + A, 1, 1)),
|
|
(R = O.length);
|
|
var oe = o ? R + I.length : R,
|
|
le = new Float64Array(oe);
|
|
return le.set(O), o && le.set(I, R), le;
|
|
}),
|
|
(e.CornerType = l),
|
|
(e.PolylineVolumeGeometryLibrary = P),
|
|
(e.oneTimeWarning = c);
|
|
});
|