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

305 lines
12 KiB
JavaScript
Raw Normal View History

2024-07-11 18:02:47 +08:00
defineSuite([
'Core/HeightmapTerrainData',
'Core/GeographicTilingScheme',
'Core/TerrainData'
], function(
HeightmapTerrainData,
GeographicTilingScheme,
TerrainData) {
'use strict';
it('conforms to TerrainData interface', function() {
expect(HeightmapTerrainData).toConformToInterface(TerrainData);
});
describe('constructor', function() {
it('requires buffer', function() {
expect(function() {
return new HeightmapTerrainData();
}).toThrowDeveloperError();
expect(function() {
return new HeightmapTerrainData({
width : 5,
height : 5
});
}).toThrowDeveloperError();
});
it('requires width', function() {
expect(function() {
return new HeightmapTerrainData({
buffer : new Float32Array(25),
height : 5
});
}).toThrowDeveloperError();
});
it('requires height', function() {
expect(function() {
return new HeightmapTerrainData({
buffer : new Float32Array(25),
width : 5
});
}).toThrowDeveloperError();
});
});
describe('createMesh', function() {
var data;
var tilingScheme;
beforeEach(function() {
tilingScheme = new GeographicTilingScheme();
data = new HeightmapTerrainData({
buffer : new Float32Array(25),
width : 5,
height : 5
});
});
it('requires tilingScheme', function() {
expect(function() {
data.createMesh(undefined, 0, 0, 0);
}).toThrowDeveloperError();
});
it('requires x', function() {
expect(function() {
data.createMesh(tilingScheme, undefined, 0, 0);
}).toThrowDeveloperError();
});
it('requires y', function() {
expect(function() {
data.createMesh(tilingScheme, 0, undefined, 0);
}).toThrowDeveloperError();
});
it('requires level', function() {
expect(function() {
data.createMesh(tilingScheme, 0, 0, undefined);
}).toThrowDeveloperError();
});
});
describe('upsample', function() {
var data;
var tilingScheme;
beforeEach(function() {
tilingScheme = new GeographicTilingScheme();
data = new HeightmapTerrainData({
buffer : new Float32Array([1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0]),
width : 3,
height : 3
});
});
it('requires tilingScheme', function() {
expect(function() {
data.upsample(undefined, 0, 0, 0, 0, 0, 0);
}).toThrowDeveloperError();
});
it('requires thisX', function() {
expect(function() {
data.upsample(tilingScheme, undefined, 0, 0, 0, 0, 0);
}).toThrowDeveloperError();
});
it('requires thisY', function() {
expect(function() {
data.upsample(tilingScheme, 0, undefined, 0, 0, 0, 0);
}).toThrowDeveloperError();
});
it('requires thisLevel', function() {
expect(function() {
data.upsample(tilingScheme, 0, 0, undefined, 0, 0, 0);
}).toThrowDeveloperError();
});
it('requires descendantX', function() {
expect(function() {
data.upsample(tilingScheme, 0, 0, 0, undefined, 0, 0);
}).toThrowDeveloperError();
});
it('requires descendantY', function() {
expect(function() {
data.upsample(tilingScheme, 0, 0, 0, 0, undefined, 0);
}).toThrowDeveloperError();
});
it('requires descendantLevel', function() {
expect(function() {
data.upsample(tilingScheme, 0, 0, 0, 0, 0, undefined);
}).toThrowDeveloperError();
});
it('can only upsample cross one level', function() {
expect(function() {
data.upsample(tilingScheme, 0, 0, 0, 0, 0, 2);
}).toThrowDeveloperError();
});
it('upsamples', function() {
data = new HeightmapTerrainData({
buffer : new Float32Array([1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0, 13.0, 14.0, 15.0, 16.0]),
width : 4,
height : 4
});
return data.createMesh(tilingScheme, 0, 0, 0, 1).then(function() {
return data.upsample(tilingScheme, 0, 0, 0, 0, 0, 1);
}).then(function(upsampled) {
expect(upsampled.wasCreatedByUpsampling()).toBe(true);
expect(upsampled._width).toBe(4);
expect(upsampled._height).toBe(4);
expect(upsampled._buffer).toEqual([1.0, 1.5, 2.0, 2.5, 3.0, 3.5, 4.0, 4.5, 5.0, 5.5, 6.0, 6.5, 7.0, 7.5, 8.0, 8.5]);
});
});
it('upsample works with a stride', function() {
data = new HeightmapTerrainData({
buffer : new Uint8Array([1, 1, 10, 2, 1, 10, 3, 1, 10, 4, 1, 10, 5, 1, 10, 6, 1, 10, 7, 1, 10, 8, 1, 10, 9, 1, 10, 10, 1, 10, 11, 1, 10, 12, 1, 10, 13, 1, 10, 14, 1, 10, 15, 1, 10, 16, 1, 10]),
width : 4,
height : 4,
structure : {
stride : 3,
elementsPerHeight : 2
}
});
return data.createMesh(tilingScheme, 0, 0, 0, 1).then(function() {
return data.upsample(tilingScheme, 0, 0, 0, 0, 0, 1);
}).then(function(upsampled) {
expect(upsampled.wasCreatedByUpsampling()).toBe(true);
expect(upsampled._width).toBe(4);
expect(upsampled._height).toBe(4);
expect(upsampled._buffer).toEqual([1, 1, 0, 1, 1, 0, 2, 1, 0, 2, 1, 0, 3, 1, 0, 3, 1, 0, 4, 1, 0, 4, 1, 0, 5, 1, 0, 5, 1, 0, 6, 1, 0, 6, 1, 0, 7, 1, 0, 7, 1, 0, 8, 1, 0, 8, 1, 0]);
});
});
it('upsample works with a big endian stride', function() {
data = new HeightmapTerrainData({
buffer : new Uint8Array([1, 1, 10, 1, 2, 10, 1, 3, 10, 1, 4, 10, 1, 5, 10, 1, 6, 10, 1, 7, 10, 1, 8, 10, 1, 9, 10, 1, 10, 10, 1, 11, 10, 1, 12, 10, 1, 13, 10, 1, 14, 10, 1, 15, 10, 1, 16, 10]),
width : 4,
height : 4,
structure : {
stride : 3,
elementsPerHeight : 2,
isBigEndian : true
}
});
return data.createMesh(tilingScheme, 0, 0, 0, 1).then(function() {
return data.upsample(tilingScheme, 0, 0, 0, 0, 0, 1);
}).then(function(upsampled) {
expect(upsampled.wasCreatedByUpsampling()).toBe(true);
expect(upsampled._width).toBe(4);
expect(upsampled._height).toBe(4);
expect(upsampled._buffer).toEqual([1, 1, 0, 1, 1, 0, 1, 2, 0, 1, 2, 0, 1, 3, 0, 1, 3, 0, 1, 4, 0, 1, 4, 0, 1, 5, 0, 1, 5, 0, 1, 6, 0, 1, 6, 0, 1, 7, 0, 1, 7, 0, 1, 8, 0, 1, 8, 0]);
});
});
it('upsample works for an eastern child', function() {
data = new HeightmapTerrainData({
buffer : new Float32Array([1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0, 13.0, 14.0, 15.0, 16.0]),
width : 4,
height : 4
});
return data.createMesh(tilingScheme, 0, 0, 0, 1).then(function() {
return data.upsample(tilingScheme, 0, 0, 0, 1, 0, 1);
}).then(function(upsampled) {
expect(upsampled.wasCreatedByUpsampling()).toBe(true);
expect(upsampled._width).toBe(4);
expect(upsampled._height).toBe(4);
expect(upsampled._buffer).toEqual([2.5, 3.0, 3.5, 4.0, 4.5, 5.0, 5.5, 6.0, 6.5, 7.0, 7.5, 8.0, 8.5, 9.0, 9.5, 10.0]);
});
});
it('upsample works with a stride for an eastern child', function() {
data = new HeightmapTerrainData({
buffer : new Uint8Array([1, 1, 10, 2, 1, 10, 3, 1, 10, 4, 1, 10, 5, 1, 10, 6, 1, 10, 7, 1, 10, 8, 1, 10, 9, 1, 10, 10, 1, 10, 11, 1, 10, 12, 1, 10, 13, 1, 10, 14, 1, 10, 15, 1, 10, 16, 1, 10]),
width : 4,
height : 4,
structure : {
stride : 3,
elementsPerHeight : 2
}
});
return data.createMesh(tilingScheme, 0, 0, 0, 1).then(function() {
return data.upsample(tilingScheme, 0, 0, 0, 1, 0, 1);
}).then(function(upsampled) {
expect(upsampled.wasCreatedByUpsampling()).toBe(true);
expect(upsampled._width).toBe(4);
expect(upsampled._height).toBe(4);
expect(upsampled._buffer).toEqual([2, 1, 0, 3, 1, 0, 3, 1, 0, 4, 1, 0, 4, 1, 0, 5, 1, 0, 5, 1, 0, 6, 1, 0, 6, 1, 0, 7, 1, 0, 7, 1, 0, 8, 1, 0, 8, 1, 0, 9, 1, 0, 9, 1, 0, 10, 1, 0]);
});
});
it('upsample clamps out of range data', function() {
data = new HeightmapTerrainData({
buffer : new Float32Array([-1.0, -2.0, -3.0, -4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0, 13.0, 14.0, 15.0, 16.0]),
width : 4,
height : 4,
structure : {
stride: 1,
elementsPerHeight: 1,
lowestEncodedHeight : 1,
highestEncodedHeight : 7
}
});
return data.createMesh(tilingScheme, 0, 0, 0, 1).then(function() {
return data.upsample(tilingScheme, 0, 0, 0, 0, 0, 1);
}).then(function(upsampled) {
expect(upsampled.wasCreatedByUpsampling()).toBe(true);
expect(upsampled._width).toBe(4);
expect(upsampled._height).toBe(4);
expect(upsampled._buffer).toEqual([1, 1, 1, 1, 2, 1.5, 2, 1.5, 5, 5.5, 6, 6.5, 7, 7, 7, 7]);
});
});
});
describe('isChildAvailable', function() {
var data;
beforeEach(function() {
data = new HeightmapTerrainData({
buffer : new Float32Array([1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0]),
width : 3,
height : 3
});
});
it('requires thisX', function() {
expect(function() {
data.isChildAvailable(undefined, 0, 0, 0);
}).toThrowDeveloperError();
});
it('requires thisY', function() {
expect(function() {
data.isChildAvailable(0, undefined, 0, 0);
}).toThrowDeveloperError();
});
it('requires childX', function() {
expect(function() {
data.isChildAvailable(0, 0, undefined, 0);
}).toThrowDeveloperError();
});
it('requires childY', function() {
expect(function() {
data.isChildAvailable(0, 0, 0, undefined);
}).toThrowDeveloperError();
});
});
});