122 lines
4.2 KiB
JavaScript
122 lines
4.2 KiB
JavaScript
defineSuite([
|
|
'Core/CircleOutlineGeometry',
|
|
'Core/Cartesian3',
|
|
'Core/Ellipsoid',
|
|
'Specs/createPackableSpecs'
|
|
], function(
|
|
CircleOutlineGeometry,
|
|
Cartesian3,
|
|
Ellipsoid,
|
|
createPackableSpecs) {
|
|
'use strict';
|
|
|
|
it('throws without a center', function() {
|
|
expect(function() {
|
|
return new CircleOutlineGeometry({
|
|
radius : 1.0
|
|
});
|
|
}).toThrowDeveloperError();
|
|
});
|
|
|
|
it('throws without a radius', function() {
|
|
expect(function() {
|
|
return new CircleOutlineGeometry({
|
|
center : Cartesian3.fromDegrees(0,0)
|
|
});
|
|
}).toThrowDeveloperError();
|
|
});
|
|
|
|
it('throws with a negative granularity', function() {
|
|
expect(function() {
|
|
return new CircleOutlineGeometry({
|
|
center : Cartesian3.fromDegrees(0,0),
|
|
radius : 1.0,
|
|
granularity : -1.0
|
|
});
|
|
}).toThrowDeveloperError();
|
|
});
|
|
|
|
it('computes positions', function() {
|
|
var m = CircleOutlineGeometry.createGeometry(new CircleOutlineGeometry({
|
|
ellipsoid : Ellipsoid.WGS84,
|
|
center : Cartesian3.fromDegrees(0,0),
|
|
granularity : 0.1,
|
|
radius : 1.0
|
|
}));
|
|
|
|
expect(m.attributes.position.values.length).toEqual(8 * 3);
|
|
expect(m.indices.length).toEqual(8 * 2);
|
|
expect(m.boundingSphere.radius).toEqual(1);
|
|
});
|
|
|
|
it('computes positions extruded', function() {
|
|
var m = CircleOutlineGeometry.createGeometry(new CircleOutlineGeometry({
|
|
ellipsoid : Ellipsoid.WGS84,
|
|
center : Cartesian3.fromDegrees(0,0),
|
|
granularity : 0.1,
|
|
radius : 1.0,
|
|
extrudedHeight : 5
|
|
}));
|
|
|
|
expect(m.attributes.position.values.length).toEqual(16 * 3); //8 top circle + 8 bottom circle
|
|
expect(m.indices.length).toEqual(24 * 2); //8 top + 8 bottom + 8 vertical
|
|
});
|
|
|
|
it('computes positions extruded, no lines between top and bottom', function() {
|
|
var m = CircleOutlineGeometry.createGeometry(new CircleOutlineGeometry({
|
|
ellipsoid : Ellipsoid.WGS84,
|
|
center : Cartesian3.fromDegrees(0,0),
|
|
granularity : 0.1,
|
|
radius : 1.0,
|
|
extrudedHeight : 10000,
|
|
numberOfVerticalLines : 0
|
|
}));
|
|
|
|
expect(m.attributes.position.values.length).toEqual(16 * 3);
|
|
expect(m.indices.length).toEqual(16 * 2);
|
|
});
|
|
|
|
it('undefined is returned if radius is equal to or less than zero', function () {
|
|
var circleOutline0 = new CircleOutlineGeometry({
|
|
center : Cartesian3.fromDegrees(-75.59777, 40.03883),
|
|
radius : 0.0
|
|
});
|
|
var circleOutline1 = new CircleOutlineGeometry({
|
|
center : Cartesian3.fromDegrees(-75.59777, 40.03883),
|
|
radius : -10.0
|
|
});
|
|
|
|
var geometry0 = CircleOutlineGeometry.createGeometry(circleOutline0);
|
|
var geometry1 = CircleOutlineGeometry.createGeometry(circleOutline1);
|
|
|
|
expect(geometry0).toBeUndefined();
|
|
expect(geometry1).toBeUndefined();
|
|
});
|
|
|
|
var center = new Cartesian3(8, 9, 10);
|
|
var ellipsoid = new Ellipsoid(11, 12, 13);
|
|
var packableInstance = new CircleOutlineGeometry({
|
|
ellipsoid : ellipsoid,
|
|
center : center,
|
|
granularity : 1,
|
|
radius : 2,
|
|
numberOfVerticalLines : 4,
|
|
height : 5,
|
|
extrudedHeight : 7
|
|
});
|
|
var packedInstance = [center.x, center.y, center.z, ellipsoid.radii.x, ellipsoid.radii.y, ellipsoid.radii.z, 2, 2, 0, 7, 1, 5, 4, -1];
|
|
createPackableSpecs(CircleOutlineGeometry, packableInstance, packedInstance, 'extruded');
|
|
|
|
//Because extrudedHeight is optional and has to be taken into account when packing, we have a second test without it.
|
|
packableInstance = new CircleOutlineGeometry({
|
|
ellipsoid : ellipsoid,
|
|
center : center,
|
|
granularity : 1,
|
|
radius : 2,
|
|
numberOfVerticalLines : 4,
|
|
height : 5
|
|
});
|
|
packedInstance = [center.x, center.y, center.z, ellipsoid.radii.x, ellipsoid.radii.y, ellipsoid.radii.z, 2, 2, 0, 5, 1, 5, 4, -1];
|
|
createPackableSpecs(CircleOutlineGeometry, packableInstance, packedInstance, 'at height');
|
|
});
|