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.
130 lines
4.0 KiB
130 lines
4.0 KiB
9 months ago
|
define([
|
||
|
'exports',
|
||
|
'./AxisAlignedBoundingBox-1feb0c48',
|
||
|
'./Matrix2-f2da41d4',
|
||
|
'./RuntimeError-ffe03243',
|
||
|
'./when-229515d6',
|
||
|
'./IntersectionTests-1b8a3cb9',
|
||
|
'./Plane-0421a8be',
|
||
|
'./Transforms-7cd3197b',
|
||
|
], function (e, t, n, i, r, a, o, s) {
|
||
|
'use strict';
|
||
|
var l = new n.Cartesian4();
|
||
|
function d(e, t) {
|
||
|
e = (t = r.defaultValue(t, n.Ellipsoid.WGS84)).scaleToGeodeticSurface(e);
|
||
|
var i = s.Transforms.eastNorthUpToFixedFrame(e, t);
|
||
|
(this._ellipsoid = t),
|
||
|
(this._origin = e),
|
||
|
(this._xAxis = n.Cartesian3.fromCartesian4(n.Matrix4.getColumn(i, 0, l))),
|
||
|
(this._yAxis = n.Cartesian3.fromCartesian4(n.Matrix4.getColumn(i, 1, l)));
|
||
|
var a = n.Cartesian3.fromCartesian4(n.Matrix4.getColumn(i, 2, l));
|
||
|
this._plane = o.Plane.fromPointNormal(e, a);
|
||
|
}
|
||
|
Object.defineProperties(d.prototype, {
|
||
|
ellipsoid: {
|
||
|
get: function () {
|
||
|
return this._ellipsoid;
|
||
|
},
|
||
|
},
|
||
|
origin: {
|
||
|
get: function () {
|
||
|
return this._origin;
|
||
|
},
|
||
|
},
|
||
|
plane: {
|
||
|
get: function () {
|
||
|
return this._plane;
|
||
|
},
|
||
|
},
|
||
|
xAxis: {
|
||
|
get: function () {
|
||
|
return this._xAxis;
|
||
|
},
|
||
|
},
|
||
|
yAxis: {
|
||
|
get: function () {
|
||
|
return this._yAxis;
|
||
|
},
|
||
|
},
|
||
|
zAxis: {
|
||
|
get: function () {
|
||
|
return this._plane.normal;
|
||
|
},
|
||
|
},
|
||
|
});
|
||
|
var c = new t.AxisAlignedBoundingBox();
|
||
|
d.fromPoints = function (e, n) {
|
||
|
return new d(t.AxisAlignedBoundingBox.fromPoints(e, c).center, n);
|
||
|
};
|
||
|
var f = new a.Ray(),
|
||
|
p = new n.Cartesian3();
|
||
|
(d.prototype.projectPointOntoPlane = function (e, t) {
|
||
|
var i = f;
|
||
|
(i.origin = e), n.Cartesian3.normalize(e, i.direction);
|
||
|
var o = a.IntersectionTests.rayPlane(i, this._plane, p);
|
||
|
if (
|
||
|
(r.defined(o) ||
|
||
|
(n.Cartesian3.negate(i.direction, i.direction),
|
||
|
(o = a.IntersectionTests.rayPlane(i, this._plane, p))),
|
||
|
r.defined(o))
|
||
|
) {
|
||
|
var s = n.Cartesian3.subtract(o, this._origin, o),
|
||
|
l = n.Cartesian3.dot(this._xAxis, s),
|
||
|
d = n.Cartesian3.dot(this._yAxis, s);
|
||
|
return r.defined(t) ? ((t.x = l), (t.y = d), t) : new n.Cartesian2(l, d);
|
||
|
}
|
||
|
}),
|
||
|
(d.prototype.projectPointsOntoPlane = function (e, t) {
|
||
|
r.defined(t) || (t = []);
|
||
|
for (var n = 0, i = e.length, a = 0; a < i; a++) {
|
||
|
var o = this.projectPointOntoPlane(e[a], t[n]);
|
||
|
r.defined(o) && ((t[n] = o), n++);
|
||
|
}
|
||
|
return (t.length = n), t;
|
||
|
}),
|
||
|
(d.prototype.projectPointToNearestOnPlane = function (e, t) {
|
||
|
r.defined(t) || (t = new n.Cartesian2());
|
||
|
var i = f;
|
||
|
(i.origin = e), n.Cartesian3.clone(this._plane.normal, i.direction);
|
||
|
var o = a.IntersectionTests.rayPlane(i, this._plane, p);
|
||
|
r.defined(o) ||
|
||
|
(n.Cartesian3.negate(i.direction, i.direction),
|
||
|
(o = a.IntersectionTests.rayPlane(i, this._plane, p)));
|
||
|
var s = n.Cartesian3.subtract(o, this._origin, o),
|
||
|
l = n.Cartesian3.dot(this._xAxis, s),
|
||
|
d = n.Cartesian3.dot(this._yAxis, s);
|
||
|
return (t.x = l), (t.y = d), t;
|
||
|
}),
|
||
|
(d.prototype.projectPointsToNearestOnPlane = function (e, t) {
|
||
|
r.defined(t) || (t = []);
|
||
|
var n = e.length;
|
||
|
t.length = n;
|
||
|
for (var i = 0; i < n; i++) t[i] = this.projectPointToNearestOnPlane(e[i], t[i]);
|
||
|
return t;
|
||
|
});
|
||
|
var u = new n.Cartesian3();
|
||
|
(d.prototype.projectPointOntoEllipsoid = function (e, t) {
|
||
|
r.defined(t) || (t = new n.Cartesian3());
|
||
|
var i = this._ellipsoid,
|
||
|
a = this._origin,
|
||
|
o = this._xAxis,
|
||
|
s = this._yAxis,
|
||
|
l = u;
|
||
|
return (
|
||
|
n.Cartesian3.multiplyByScalar(o, e.x, l),
|
||
|
(t = n.Cartesian3.add(a, l, t)),
|
||
|
n.Cartesian3.multiplyByScalar(s, e.y, l),
|
||
|
n.Cartesian3.add(t, l, t),
|
||
|
i.scaleToGeocentricSurface(t, t),
|
||
|
t
|
||
|
);
|
||
|
}),
|
||
|
(d.prototype.projectPointsOntoEllipsoid = function (e, t) {
|
||
|
var n = e.length;
|
||
|
r.defined(t) ? (t.length = n) : (t = new Array(n));
|
||
|
for (var i = 0; i < n; ++i) t[i] = this.projectPointOntoEllipsoid(e[i], t[i]);
|
||
|
return t;
|
||
|
}),
|
||
|
(e.EllipsoidTangentPlane = d);
|
||
|
});
|