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'); });