You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

127 lines
4.0 KiB
JavaScript

import { Color } from "../../Source/Cesium.js";
import { JulianDate } from "../../Source/Cesium.js";
import { Matrix4 } from "../../Source/Cesium.js";
import { Cesium3DTile } from "../../Source/Cesium.js";
import { Cesium3DTileContentState } from "../../Source/Cesium.js";
import { Cesium3DTilesetHeatmap } from "../../Source/Cesium.js";
import createScene from "../createScene.js";
describe("Scene/Cesium3DTilesetHeatmap", function () {
var tileWithBoundingSphere = {
geometricError: 1,
refine: "REPLACE",
children: [],
boundingVolume: {
sphere: [0.0, 0.0, 0.0, 5.0],
},
};
var mockTileset = {
debugShowBoundingVolume: true,
debugShowViewerRequestVolume: true,
modelMatrix: Matrix4.IDENTITY,
_geometricError: 2,
};
var scene;
beforeEach(function () {
scene = createScene();
scene.frameState.passes.render = true;
});
afterEach(function () {
scene.destroyForSpecs();
});
function verifyColor(tileColor, expectedColor) {
var diff = new Color(
Math.abs(expectedColor.red - tileColor.red),
Math.abs(expectedColor.green - tileColor.green),
Math.abs(expectedColor.blue - tileColor.blue)
);
var threshold = 0.11;
expect(diff.red).toBeLessThan(threshold);
expect(diff.green).toBeLessThan(threshold);
expect(diff.blue).toBeLessThan(threshold);
}
it("resetMinimumMaximum", function () {
var heatmap = new Cesium3DTilesetHeatmap("_centerZDepth");
heatmap._minimum = -1;
heatmap._maximum = 1;
heatmap.resetMinimumMaximum(); // Preparing for next frame, previousMinimum/Maximum take current frame's values
expect(heatmap._minimum).toBe(Number.MAX_VALUE);
expect(heatmap._maximum).toBe(-Number.MAX_VALUE);
expect(heatmap._previousMinimum).toBe(-1);
expect(heatmap._previousMaximum).toBe(1);
});
it("uses reference minimum maximum", function () {
var tilePropertyName = "_loadTimestamp";
var heatmap = new Cesium3DTilesetHeatmap(tilePropertyName);
var referenceMinimumJulianDate = new JulianDate();
var referenceMaximumJulianDate = new JulianDate();
JulianDate.now(referenceMinimumJulianDate);
JulianDate.addSeconds(
referenceMinimumJulianDate,
10,
referenceMaximumJulianDate
);
heatmap.setReferenceMinimumMaximum(
referenceMinimumJulianDate,
referenceMaximumJulianDate,
tilePropertyName
); // User wants to colorize to a fixed reference.
var referenceMinimum = heatmap._referenceMinimum[tilePropertyName];
var referenceMaximum = heatmap._referenceMaximum[tilePropertyName];
heatmap._minimum = -1;
heatmap._maximum = 1;
heatmap.resetMinimumMaximum(); // Preparing for next frame, previousMinimum/Maximum always uses the reference values if they exist for the variable.
expect(heatmap._minimum).toBe(Number.MAX_VALUE);
expect(heatmap._maximum).toBe(-Number.MAX_VALUE);
expect(heatmap._previousMinimum).toBe(referenceMinimum);
expect(heatmap._previousMaximum).toBe(referenceMaximum);
});
it("expected color", function () {
var heatmap = new Cesium3DTilesetHeatmap("_centerZDepth");
var tile = new Cesium3DTile(
mockTileset,
"/some_url",
tileWithBoundingSphere,
undefined
);
tile._contentState = Cesium3DTileContentState.READY;
tile.hasEmptyContent = false;
var frameState = scene.frameState;
tile._selectedFrame = frameState.frameNumber;
var originalColor = tile._debugColor;
// This is first frame, previousMinimum/Maximum are unititialized so no coloring occurs
tile._centerZDepth = 1;
heatmap.colorize(tile, frameState);
tile._centerZDepth = -1;
heatmap.colorize(tile, frameState);
expect(heatmap._minimum).toBe(-1);
expect(heatmap._maximum).toBe(1);
verifyColor(tile._debugColor, originalColor);
// Preparing for next frame, previousMinimum/Maximum take current frame's values
heatmap.resetMinimumMaximum();
tile._centerZDepth = -1;
heatmap.colorize(tile, frameState);
var expectedColor = Color.BLACK;
verifyColor(tile._debugColor, expectedColor);
});
});