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

240 lines
8.0 KiB
JavaScript
Raw Normal View History

2024-07-11 18:02:47 +08:00
defineSuite([
'Core/OrthographicFrustum',
'Core/Cartesian2',
'Core/Cartesian3',
'Core/Cartesian4',
'Core/Math',
'Core/Matrix4',
'Specs/createPackableSpecs'
], function(
OrthographicFrustum,
Cartesian2,
Cartesian3,
Cartesian4,
CesiumMath,
Matrix4,
createPackableSpecs) {
'use strict';
var frustum, planes;
beforeEach(function() {
frustum = new OrthographicFrustum();
frustum.near = 1.0;
frustum.far = 3.0;
frustum.width = 2.0;
frustum.aspectRatio = 1.0;
planes = frustum.computeCullingVolume(new Cartesian3(), Cartesian3.negate(Cartesian3.UNIT_Z, new Cartesian3()), Cartesian3.UNIT_Y).planes;
});
it('constructs', function() {
var options = {
width : 1.0,
aspectRatio : 2.0,
near : 3.0,
far : 4.0,
xOffset : 5.0,
yOffset : 6.0
};
var f = new OrthographicFrustum(options);
expect(f.width).toEqual(options.width);
expect(f.aspectRatio).toEqual(options.aspectRatio);
expect(f.near).toEqual(options.near);
expect(f.far).toEqual(options.far);
});
it('default constructs', function() {
var f = new OrthographicFrustum();
expect(f.width).toBeUndefined();
expect(f.aspectRatio).toBeUndefined();
expect(f.near).toEqual(1.0);
expect(f.far).toEqual(500000000.0);
});
it('undefined width causes an exception', function() {
frustum.width = undefined;
expect(function() {
return frustum.projectionMatrix;
}).toThrowDeveloperError();
});
it('undefined aspectRatio throws an exception', function() {
frustum.aspectRatio = undefined;
expect(function() {
return frustum.projectionMatrix;
}).toThrowDeveloperError();
});
it('out of range near plane throws an exception', function() {
frustum.near = -1.0;
expect(function() {
return frustum.projectionMatrix;
}).toThrowDeveloperError();
frustum.far = 3.0;
expect(function() {
return frustum.projectionMatrix;
}).toThrowDeveloperError();
});
it('negative far plane throws an exception', function() {
frustum.far = -1.0;
expect(function() {
return frustum.projectionMatrix;
}).toThrowDeveloperError();
});
it('computeCullingVolume with no position throws an exception', function() {
expect(function() {
return frustum.computeCullingVolume();
}).toThrowDeveloperError();
});
it('computeCullingVolume with no direction throws an exception', function() {
expect(function() {
return frustum.computeCullingVolume(new Cartesian3());
}).toThrowDeveloperError();
});
it('computeCullingVolume with no up throws an exception', function() {
expect(function() {
return frustum.computeCullingVolume(new Cartesian3(), new Cartesian3());
}).toThrowDeveloperError();
});
it('get frustum left plane', function() {
var leftPlane = planes[0];
var expectedResult = new Cartesian4(1.0, 0.0, 0.0, 1.0);
expect(leftPlane).toEqualEpsilon(expectedResult, CesiumMath.EPSILON4);
});
it('get frustum right plane', function() {
var rightPlane = planes[1];
var expectedResult = new Cartesian4(-1.0, 0.0, 0.0, 1.0);
expect(rightPlane).toEqualEpsilon(expectedResult, CesiumMath.EPSILON4);
});
it('get frustum bottom plane', function() {
var bottomPlane = planes[2];
var expectedResult = new Cartesian4(0.0, 1.0, 0.0, 1.0);
expect(bottomPlane).toEqualEpsilon(expectedResult, CesiumMath.EPSILON4);
});
it('get frustum top plane', function() {
var topPlane = planes[3];
var expectedResult = new Cartesian4(0.0, -1.0, 0.0, 1.0);
expect(topPlane).toEqual(expectedResult, CesiumMath.EPSILON4);
});
it('get frustum near plane', function() {
var nearPlane = planes[4];
var expectedResult = new Cartesian4(0.0, 0.0, -1.0, -1.0);
expect(nearPlane).toEqualEpsilon(expectedResult, CesiumMath.EPSILON4);
});
it('get frustum far plane', function() {
var farPlane = planes[5];
var expectedResult = new Cartesian4(0.0, 0.0, 1.0, 3.0);
expect(farPlane).toEqualEpsilon(expectedResult, CesiumMath.EPSILON4);
});
it('get orthographic projection matrix', function() {
var projectionMatrix = frustum.projectionMatrix;
frustum = frustum._offCenterFrustum;
var expected = Matrix4.computeOrthographicOffCenter(frustum.left, frustum.right, frustum.bottom, frustum.top, frustum.near, frustum.far, new Matrix4());
expect(projectionMatrix).toEqualEpsilon(expected, CesiumMath.EPSILON6);
});
it('get pixel dimensions throws without canvas height', function() {
expect(function() {
return frustum.getPixelDimensions(1.0, undefined, 0.0, new Cartesian2());
}).toThrowDeveloperError();
});
it('get pixel dimensions throws without canvas width', function() {
expect(function() {
return frustum.getPixelDimensions(undefined, 1.0, 0.0, new Cartesian2());
}).toThrowDeveloperError();
});
it('get pixel dimensions throws with canvas width less than or equal to zero', function() {
expect(function() {
return frustum.getPixelDimensions(0.0, 1.0, 0.0, new Cartesian2());
}).toThrowDeveloperError();
});
it('get pixel dimensions throws with canvas height less than or equal to zero', function() {
expect(function() {
return frustum.getPixelDimensions(1.0, 0.0, 0.0, new Cartesian2());
}).toThrowDeveloperError();
});
it('get pixel dimensions', function() {
var pixelSize = frustum.getPixelDimensions(1.0, 1.0, 0.0, new Cartesian2());
expect(pixelSize.x).toEqual(2.0);
expect(pixelSize.y).toEqual(2.0);
});
it('equals', function() {
var frustum2 = new OrthographicFrustum();
frustum2.near = 1.0;
frustum2.far = 3.0;
frustum2.width = 2.0;
frustum2.aspectRatio = 1.0;
expect(frustum.equals(frustum2)).toEqual(true);
});
it('equals epsilon', function() {
var frustum2 = new OrthographicFrustum();
frustum2.near = 1.0;
frustum2.far = 3.0;
frustum2.width = 2.0;
frustum2.aspectRatio = 1.0;
expect(frustum.equalsEpsilon(frustum2, CesiumMath.EPSILON7)).toEqual(true);
var frustum3 = new OrthographicFrustum();
frustum3.near = 1.01;
frustum3.far = 3.01;
frustum3.width = 2.01;
frustum3.aspectRatio = 1.01;
expect(frustum.equalsEpsilon(frustum3, CesiumMath.EPSILON1)).toEqual(true);
var frustum4 = new OrthographicFrustum();
frustum4.near = 1.0;
frustum4.far = 3.0;
frustum4.width = 2.0;
frustum4.aspectRatio = 1.1;
expect(frustum.equalsEpsilon(frustum4, CesiumMath.EPSILON2)).toEqual(false);
});
it('equals undefined', function() {
expect(frustum.equals()).toEqual(false);
});
it('throws with undefined frustum parameters', function() {
var frustum = new OrthographicFrustum();
expect(function() {
return frustum.projectionMatrix;
}).toThrowDeveloperError();
});
it('clone', function() {
var frustum2 = frustum.clone();
expect(frustum).toEqual(frustum2);
});
it('clone with result parameter', function() {
var result = new OrthographicFrustum();
var frustum2 = frustum.clone(result);
expect(frustum2).toBe(result);
expect(frustum).toEqual(frustum2);
});
createPackableSpecs(OrthographicFrustum, new OrthographicFrustum({
width : 1.0,
aspectRatio : 2.0,
near : 3.0,
far : 4.0
}), [1.0, 2.0, 3.0, 4.0]);
});