158 lines
5.4 KiB
JavaScript
158 lines
5.4 KiB
JavaScript
|
/**
|
||
|
* @license
|
||
|
* Cesium - https://github.com/CesiumGS/cesium
|
||
|
* Version 1.117
|
||
|
*
|
||
|
* 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.
|
||
|
*/
|
||
|
|
||
|
import {
|
||
|
Intersect_default
|
||
|
} from "./chunk-NI2R52QD.js";
|
||
|
import {
|
||
|
Cartesian3_default
|
||
|
} from "./chunk-C5CE4OG6.js";
|
||
|
import {
|
||
|
defaultValue_default
|
||
|
} from "./chunk-UCPPWV64.js";
|
||
|
import {
|
||
|
Check_default
|
||
|
} from "./chunk-U4IMCOF5.js";
|
||
|
import {
|
||
|
defined_default
|
||
|
} from "./chunk-BDUJXBVF.js";
|
||
|
|
||
|
// packages/engine/Source/Core/AxisAlignedBoundingBox.js
|
||
|
function AxisAlignedBoundingBox(minimum, maximum, center) {
|
||
|
this.minimum = Cartesian3_default.clone(defaultValue_default(minimum, Cartesian3_default.ZERO));
|
||
|
this.maximum = Cartesian3_default.clone(defaultValue_default(maximum, Cartesian3_default.ZERO));
|
||
|
if (!defined_default(center)) {
|
||
|
center = Cartesian3_default.midpoint(this.minimum, this.maximum, new Cartesian3_default());
|
||
|
} else {
|
||
|
center = Cartesian3_default.clone(center);
|
||
|
}
|
||
|
this.center = center;
|
||
|
}
|
||
|
AxisAlignedBoundingBox.fromCorners = function(minimum, maximum, result) {
|
||
|
Check_default.defined("minimum", minimum);
|
||
|
Check_default.defined("maximum", maximum);
|
||
|
if (!defined_default(result)) {
|
||
|
result = new AxisAlignedBoundingBox();
|
||
|
}
|
||
|
result.minimum = Cartesian3_default.clone(minimum, result.minimum);
|
||
|
result.maximum = Cartesian3_default.clone(maximum, result.maximum);
|
||
|
result.center = Cartesian3_default.midpoint(minimum, maximum, result.center);
|
||
|
return result;
|
||
|
};
|
||
|
AxisAlignedBoundingBox.fromPoints = function(positions, result) {
|
||
|
if (!defined_default(result)) {
|
||
|
result = new AxisAlignedBoundingBox();
|
||
|
}
|
||
|
if (!defined_default(positions) || positions.length === 0) {
|
||
|
result.minimum = Cartesian3_default.clone(Cartesian3_default.ZERO, result.minimum);
|
||
|
result.maximum = Cartesian3_default.clone(Cartesian3_default.ZERO, result.maximum);
|
||
|
result.center = Cartesian3_default.clone(Cartesian3_default.ZERO, result.center);
|
||
|
return result;
|
||
|
}
|
||
|
let minimumX = positions[0].x;
|
||
|
let minimumY = positions[0].y;
|
||
|
let minimumZ = positions[0].z;
|
||
|
let maximumX = positions[0].x;
|
||
|
let maximumY = positions[0].y;
|
||
|
let maximumZ = positions[0].z;
|
||
|
const length = positions.length;
|
||
|
for (let i = 1; i < length; i++) {
|
||
|
const p = positions[i];
|
||
|
const x = p.x;
|
||
|
const y = p.y;
|
||
|
const z = p.z;
|
||
|
minimumX = Math.min(x, minimumX);
|
||
|
maximumX = Math.max(x, maximumX);
|
||
|
minimumY = Math.min(y, minimumY);
|
||
|
maximumY = Math.max(y, maximumY);
|
||
|
minimumZ = Math.min(z, minimumZ);
|
||
|
maximumZ = Math.max(z, maximumZ);
|
||
|
}
|
||
|
const minimum = result.minimum;
|
||
|
minimum.x = minimumX;
|
||
|
minimum.y = minimumY;
|
||
|
minimum.z = minimumZ;
|
||
|
const maximum = result.maximum;
|
||
|
maximum.x = maximumX;
|
||
|
maximum.y = maximumY;
|
||
|
maximum.z = maximumZ;
|
||
|
result.center = Cartesian3_default.midpoint(minimum, maximum, result.center);
|
||
|
return result;
|
||
|
};
|
||
|
AxisAlignedBoundingBox.clone = function(box, result) {
|
||
|
if (!defined_default(box)) {
|
||
|
return void 0;
|
||
|
}
|
||
|
if (!defined_default(result)) {
|
||
|
return new AxisAlignedBoundingBox(box.minimum, box.maximum, box.center);
|
||
|
}
|
||
|
result.minimum = Cartesian3_default.clone(box.minimum, result.minimum);
|
||
|
result.maximum = Cartesian3_default.clone(box.maximum, result.maximum);
|
||
|
result.center = Cartesian3_default.clone(box.center, result.center);
|
||
|
return result;
|
||
|
};
|
||
|
AxisAlignedBoundingBox.equals = function(left, right) {
|
||
|
return left === right || defined_default(left) && defined_default(right) && Cartesian3_default.equals(left.center, right.center) && Cartesian3_default.equals(left.minimum, right.minimum) && Cartesian3_default.equals(left.maximum, right.maximum);
|
||
|
};
|
||
|
var intersectScratch = new Cartesian3_default();
|
||
|
AxisAlignedBoundingBox.intersectPlane = function(box, plane) {
|
||
|
Check_default.defined("box", box);
|
||
|
Check_default.defined("plane", plane);
|
||
|
intersectScratch = Cartesian3_default.subtract(
|
||
|
box.maximum,
|
||
|
box.minimum,
|
||
|
intersectScratch
|
||
|
);
|
||
|
const h = Cartesian3_default.multiplyByScalar(
|
||
|
intersectScratch,
|
||
|
0.5,
|
||
|
intersectScratch
|
||
|
);
|
||
|
const normal = plane.normal;
|
||
|
const e = h.x * Math.abs(normal.x) + h.y * Math.abs(normal.y) + h.z * Math.abs(normal.z);
|
||
|
const s = Cartesian3_default.dot(box.center, normal) + plane.distance;
|
||
|
if (s - e > 0) {
|
||
|
return Intersect_default.INSIDE;
|
||
|
}
|
||
|
if (s + e < 0) {
|
||
|
return Intersect_default.OUTSIDE;
|
||
|
}
|
||
|
return Intersect_default.INTERSECTING;
|
||
|
};
|
||
|
AxisAlignedBoundingBox.prototype.clone = function(result) {
|
||
|
return AxisAlignedBoundingBox.clone(this, result);
|
||
|
};
|
||
|
AxisAlignedBoundingBox.prototype.intersectPlane = function(plane) {
|
||
|
return AxisAlignedBoundingBox.intersectPlane(this, plane);
|
||
|
};
|
||
|
AxisAlignedBoundingBox.prototype.equals = function(right) {
|
||
|
return AxisAlignedBoundingBox.equals(this, right);
|
||
|
};
|
||
|
var AxisAlignedBoundingBox_default = AxisAlignedBoundingBox;
|
||
|
|
||
|
export {
|
||
|
AxisAlignedBoundingBox_default
|
||
|
};
|