You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
280 lines
7.3 KiB
JavaScript
280 lines
7.3 KiB
JavaScript
import { Cartesian3 } from "../../Source/Cesium.js";
|
|
import { Ellipsoid } from "../../Source/Cesium.js";
|
|
import { Math as CesiumMath } from "../../Source/Cesium.js";
|
|
import { WallOutlineGeometry } from "../../Source/Cesium.js";
|
|
import createPackableSpecs from "../createPackableSpecs.js";
|
|
|
|
describe("Core/WallOutlineGeometry", function () {
|
|
var ellipsoid = Ellipsoid.WGS84;
|
|
|
|
it("throws with no positions", function () {
|
|
expect(function () {
|
|
return new WallOutlineGeometry();
|
|
}).toThrowDeveloperError();
|
|
});
|
|
|
|
it("throws when positions and minimumHeights length do not match", function () {
|
|
expect(function () {
|
|
return new WallOutlineGeometry({
|
|
positions: new Array(2),
|
|
minimumHeights: new Array(3),
|
|
});
|
|
}).toThrowDeveloperError();
|
|
});
|
|
|
|
it("throws when positions and maximumHeights length do not match", function () {
|
|
expect(function () {
|
|
return new WallOutlineGeometry({
|
|
positions: new Array(2),
|
|
maximumHeights: new Array(3),
|
|
});
|
|
}).toThrowDeveloperError();
|
|
});
|
|
|
|
it("returns undefined with less than 2 unique positions", function () {
|
|
var geometry = WallOutlineGeometry.createGeometry(
|
|
new WallOutlineGeometry({
|
|
positions: Cartesian3.fromDegreesArrayHeights([
|
|
49.0,
|
|
18.0,
|
|
1000.0,
|
|
49.0,
|
|
18.0,
|
|
5000.0,
|
|
49.0,
|
|
18.0,
|
|
1000.0,
|
|
]),
|
|
})
|
|
);
|
|
expect(geometry).toBeUndefined();
|
|
});
|
|
|
|
it("returns undefined with no heights", function () {
|
|
var geometry = WallOutlineGeometry.createGeometry(
|
|
new WallOutlineGeometry({
|
|
positions: Cartesian3.fromDegreesArray([
|
|
49.0,
|
|
18.0,
|
|
49.0,
|
|
18.0,
|
|
49.0,
|
|
18.0,
|
|
]),
|
|
})
|
|
);
|
|
expect(geometry).toBeUndefined();
|
|
|
|
geometry = WallOutlineGeometry.createGeometry(
|
|
new WallOutlineGeometry({
|
|
positions: Cartesian3.fromDegreesArray([
|
|
49.0,
|
|
18.0,
|
|
49.0,
|
|
18.0,
|
|
49.0,
|
|
18.0,
|
|
]),
|
|
maximumHeights: [0, 0, 0],
|
|
})
|
|
);
|
|
expect(geometry).toBeUndefined();
|
|
});
|
|
|
|
it("creates positions relative to ellipsoid", function () {
|
|
var w = WallOutlineGeometry.createGeometry(
|
|
new WallOutlineGeometry({
|
|
positions: Cartesian3.fromDegreesArrayHeights([
|
|
49.0,
|
|
18.0,
|
|
1000.0,
|
|
50.0,
|
|
18.0,
|
|
1000.0,
|
|
]),
|
|
granularity: Math.PI,
|
|
})
|
|
);
|
|
|
|
var positions = w.attributes.position.values;
|
|
expect(positions.length).toEqual(4 * 3);
|
|
expect(w.indices.length).toEqual(4 * 2);
|
|
|
|
var cartographic = ellipsoid.cartesianToCartographic(
|
|
Cartesian3.fromArray(positions, 0)
|
|
);
|
|
expect(cartographic.height).toEqualEpsilon(0.0, CesiumMath.EPSILON8);
|
|
|
|
cartographic = ellipsoid.cartesianToCartographic(
|
|
Cartesian3.fromArray(positions, 3)
|
|
);
|
|
expect(cartographic.height).toEqualEpsilon(1000.0, CesiumMath.EPSILON8);
|
|
});
|
|
|
|
it("creates positions with minimum and maximum heights", function () {
|
|
var w = WallOutlineGeometry.createGeometry(
|
|
new WallOutlineGeometry({
|
|
positions: Cartesian3.fromDegreesArrayHeights([
|
|
49.0,
|
|
18.0,
|
|
1000.0,
|
|
50.0,
|
|
18.0,
|
|
1000.0,
|
|
]),
|
|
minimumHeights: [1000.0, 2000.0],
|
|
maximumHeights: [3000.0, 4000.0],
|
|
granularity: Math.PI,
|
|
})
|
|
);
|
|
|
|
var positions = w.attributes.position.values;
|
|
expect(positions.length).toEqual(4 * 3);
|
|
expect(w.indices.length).toEqual(4 * 2);
|
|
|
|
var cartographic = ellipsoid.cartesianToCartographic(
|
|
Cartesian3.fromArray(positions, 0)
|
|
);
|
|
expect(cartographic.height).toEqualEpsilon(1000.0, CesiumMath.EPSILON8);
|
|
|
|
cartographic = ellipsoid.cartesianToCartographic(
|
|
Cartesian3.fromArray(positions, 3)
|
|
);
|
|
expect(cartographic.height).toEqualEpsilon(3000.0, CesiumMath.EPSILON8);
|
|
|
|
cartographic = ellipsoid.cartesianToCartographic(
|
|
Cartesian3.fromArray(positions, 6)
|
|
);
|
|
expect(cartographic.height).toEqualEpsilon(2000.0, CesiumMath.EPSILON8);
|
|
|
|
cartographic = ellipsoid.cartesianToCartographic(
|
|
Cartesian3.fromArray(positions, 9)
|
|
);
|
|
expect(cartographic.height).toEqualEpsilon(4000.0, CesiumMath.EPSILON8);
|
|
});
|
|
|
|
it("cleans positions with duplicates", function () {
|
|
var w = WallOutlineGeometry.createGeometry(
|
|
new WallOutlineGeometry({
|
|
positions: Cartesian3.fromDegreesArrayHeights([
|
|
49.0,
|
|
18.0,
|
|
1000.0,
|
|
49.0,
|
|
18.0,
|
|
2000.0,
|
|
50.0,
|
|
18.0,
|
|
1000.0,
|
|
50.0,
|
|
18.0,
|
|
1000.0,
|
|
50.0,
|
|
18.0,
|
|
1000.0,
|
|
51.0,
|
|
18.0,
|
|
1000.0,
|
|
51.0,
|
|
18.0,
|
|
1000.0,
|
|
]),
|
|
})
|
|
);
|
|
|
|
var positions = w.attributes.position.values;
|
|
expect(positions.length).toEqual(6 * 3);
|
|
expect(w.indices.length).toEqual(7 * 2); //3 vertical + 4 horizontal
|
|
|
|
var cartographic = ellipsoid.cartesianToCartographic(
|
|
Cartesian3.fromArray(positions, 0)
|
|
);
|
|
expect(cartographic.height).toEqualEpsilon(0.0, CesiumMath.EPSILON8);
|
|
|
|
cartographic = ellipsoid.cartesianToCartographic(
|
|
Cartesian3.fromArray(positions, 3)
|
|
);
|
|
expect(cartographic.height).toEqualEpsilon(2000.0, CesiumMath.EPSILON8);
|
|
});
|
|
|
|
it("fromConstantHeights throws without positions", function () {
|
|
expect(function () {
|
|
return WallOutlineGeometry.fromConstantHeights();
|
|
}).toThrowDeveloperError();
|
|
});
|
|
|
|
it("creates positions with constant minimum and maximum heights", function () {
|
|
var min = 1000.0;
|
|
var max = 2000.0;
|
|
|
|
var w = WallOutlineGeometry.createGeometry(
|
|
WallOutlineGeometry.fromConstantHeights({
|
|
positions: Cartesian3.fromDegreesArrayHeights([
|
|
49.0,
|
|
18.0,
|
|
1000.0,
|
|
50.0,
|
|
18.0,
|
|
1000.0,
|
|
]),
|
|
minimumHeight: min,
|
|
maximumHeight: max,
|
|
})
|
|
);
|
|
|
|
var positions = w.attributes.position.values;
|
|
expect(positions.length).toEqual(4 * 3);
|
|
expect(w.indices.length).toEqual(4 * 2);
|
|
|
|
var cartographic = ellipsoid.cartesianToCartographic(
|
|
Cartesian3.fromArray(positions, 0)
|
|
);
|
|
expect(cartographic.height).toEqualEpsilon(min, CesiumMath.EPSILON8);
|
|
|
|
cartographic = ellipsoid.cartesianToCartographic(
|
|
Cartesian3.fromArray(positions, 3)
|
|
);
|
|
expect(cartographic.height).toEqualEpsilon(max, CesiumMath.EPSILON8);
|
|
|
|
cartographic = ellipsoid.cartesianToCartographic(
|
|
Cartesian3.fromArray(positions, 6)
|
|
);
|
|
expect(cartographic.height).toEqualEpsilon(min, CesiumMath.EPSILON8);
|
|
|
|
cartographic = ellipsoid.cartesianToCartographic(
|
|
Cartesian3.fromArray(positions, 9)
|
|
);
|
|
expect(cartographic.height).toEqualEpsilon(max, CesiumMath.EPSILON8);
|
|
});
|
|
|
|
var positions = [
|
|
new Cartesian3(1.0, 0.0, 0.0),
|
|
new Cartesian3(0.0, 1.0, 0.0),
|
|
new Cartesian3(0.0, 0.0, 1.0),
|
|
];
|
|
var wall = new WallOutlineGeometry({
|
|
positions: positions,
|
|
granularity: 0.01,
|
|
ellipsoid: Ellipsoid.UNIT_SPHERE,
|
|
});
|
|
var packedInstance = [
|
|
3.0,
|
|
1.0,
|
|
0.0,
|
|
0.0,
|
|
0.0,
|
|
1.0,
|
|
0.0,
|
|
0.0,
|
|
0.0,
|
|
1.0,
|
|
0.0,
|
|
0.0,
|
|
1.0,
|
|
1.0,
|
|
1.0,
|
|
0.01,
|
|
];
|
|
createPackableSpecs(WallOutlineGeometry, wall, packedInstance);
|
|
});
|