DSDSWeb/static/js/Cesium-1.53/Specs/Core/WallOutlineGeometrySpec.js

190 lines
7.2 KiB
JavaScript

defineSuite([
'Core/WallOutlineGeometry',
'Core/Cartesian3',
'Core/Ellipsoid',
'Core/Math',
'Specs/createPackableSpecs'
], function(
WallOutlineGeometry,
Cartesian3,
Ellipsoid,
CesiumMath,
createPackableSpecs) {
'use strict';
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);
});