import { Cartesian3, Cartesian4, Cesium3DTileFeature, Ellipsoid, HeadingPitchRange, Math as CesiumMath, Rectangle, } from "../../Source/Cesium.js"; import Cesium3DTilesTester from "../Cesium3DTilesTester.js"; import createScene from "../createScene.js"; describe( "Scene/Cesium3DTileFeature", function () { describe("polylinePositions", function () { var vectorPolylinesWithBatchIds = "./Data/Cesium3DTiles/Vector/VectorTilePolylinesWithBatchIds/tileset.json"; var b3dmWithBatchIds = "Data/Cesium3DTiles/Batched/BatchedWithBatchTable/tileset.json"; var scene; beforeAll(function () { scene = createScene(); }); afterAll(function () { scene.destroyForSpecs(); }); beforeEach(function () { scene.primitives.removeAll(); }); it("polylinePositions gets positions for polyline vector data", function () { var tilesetRectangle = Rectangle.fromDegrees(-0.01, -0.01, 0.01, 0.01); var ellipsoid = Ellipsoid.WGS84; scene.camera.lookAt( ellipsoid.cartographicToCartesian(Rectangle.center(tilesetRectangle)), new Cartesian3(0.0, 0.0, 0.01) ); return Cesium3DTilesTester.loadTileset( scene, vectorPolylinesWithBatchIds, { vectorKeepDecodedPositions: true, } ).then(function (tileset) { var feature = tileset.root.content.getFeature(0); var polylinePositions = feature.polylinePositions; expect(polylinePositions.length).toBe(60); expect(polylinePositions[0]).toEqualEpsilon( 6378136.806372941, CesiumMath.EPSILON7 ); expect(polylinePositions[1]).toEqualEpsilon( -1113.194885441724, CesiumMath.EPSILON7 ); expect(polylinePositions[2]).toEqualEpsilon( 1105.675261474196, CesiumMath.EPSILON7 ); }); }); it("polylinePositions returns undefined for non polyline features", function () { var centerLongitude = -1.31968; var centerLatitude = 0.698874; var center = Cartesian3.fromRadians(centerLongitude, centerLatitude); scene.camera.lookAt(center, new HeadingPitchRange(0.0, -1.57, 15.0)); return Cesium3DTilesTester.loadTileset(scene, b3dmWithBatchIds, { vectorKeepDecodedPositions: true, }).then(function (tileset) { var feature = tileset.root.content.getFeature(0); var polylinePositions = feature.polylinePositions; expect(polylinePositions).toBeUndefined(); }); }); }); describe("3DTILES_metadata", function () { var tilesetWithMetadataUrl = "Data/Cesium3DTiles/Metadata/AllMetadataTypes/tileset.json"; var centerLongitude = -1.31968; var centerLatitude = 0.698874; var scene; var tileset; beforeAll(function () { scene = createScene(); var center = Cartesian3.fromRadians(centerLongitude, centerLatitude); scene.camera.lookAt(center, new HeadingPitchRange(0.0, -1.57, 15.0)); return Cesium3DTilesTester.loadTileset( scene, tilesetWithMetadataUrl ).then(function (result) { tileset = result; }); }); afterAll(function () { scene.destroyForSpecs(); }); var parentContent; var childContents = {}; beforeEach(function () { parentContent = tileset.root.content; var children = tileset.root.children; children.forEach(function (child) { var uri = child._header.content.uri; childContents[uri] = child.content; }); }); it("getPropertyInherited returns undefined for unknown property", function () { var feature = new Cesium3DTileFeature(childContents["ll.b3dm"], 0); expect(feature.getPropertyInherited("unknown")).not.toBeDefined(); }); it("getPropertyInherited returns tile property by semantic", function () { var feature = new Cesium3DTileFeature(childContents["ll.b3dm"], 0); expect(feature.getPropertyInherited("COLOR")).toEqual( new Cartesian4(255, 255, 0, 1.0) ); }); it("getPropertyInherited returns tile property", function () { var feature = new Cesium3DTileFeature(childContents["ll.b3dm"], 0); expect(feature.getPropertyInherited("color")).toEqual( new Cartesian4(255, 255, 0, 1.0) ); expect(feature.getPropertyInherited("population")).toBe(50); }); it("getPropertyInherited returns group property by semantic", function () { var feature = new Cesium3DTileFeature(childContents["lr.b3dm"], 0); expect(feature.getPropertyInherited("GROUP_NAME")).toBe("commercial"); feature = new Cesium3DTileFeature(childContents["ll.b3dm"], 0); expect(feature.getPropertyInherited("GROUP_NAME")).toBe("residential"); }); it("getPropertyInherited returns group property", function () { var feature = new Cesium3DTileFeature(childContents["lr.b3dm"], 0); expect(feature.getPropertyInherited("majorIndustries")).toEqual([ "Finance", "Manufacturing", ]); expect(feature.getPropertyInherited("businessCount")).toBe(143); }); it("getPropertyInherited returns tileset property by semantic", function () { var feature = new Cesium3DTileFeature(parentContent, 0); expect(feature.getPropertyInherited("COLOR")).toEqual( new Cartesian4(255, 0, 255, 1.0) ); expect(feature.getPropertyInherited("DATE_ISO_8601")).toBe( "2021-04-07" ); expect(feature.getPropertyInherited("AUTHOR")).toBe("Cesium"); }); it("getPropertyInherited returns tileset property", function () { var feature = new Cesium3DTileFeature(parentContent, 0); expect(feature.getPropertyInherited("color")).toEqual( new Cartesian4(255, 0, 255, 1.0) ); expect(feature.getPropertyInherited("centerCartographic")).toEqual( new Cartesian3( -1.3196816996258511, 0.6988767486400521, 45.78600543644279 ) ); expect(feature.getPropertyInherited("date")).toBe("2021-04-07"); expect(feature.getPropertyInherited("author")).toBe("Cesium"); expect(feature.getPropertyInherited("tileCount")).toBe(5); }); it("resolves conflicting names from most specific to most general", function () { // tile metadata is more specific than tileset metadata so this returns // yellow not magenta var feature = new Cesium3DTileFeature(childContents["ll.b3dm"], 0); expect(feature.getPropertyInherited("color")).toEqual( new Cartesian4(255, 255, 0, 1.0) ); // group metadata is more specific than tileset metadata, so this returns // 2 not 5 expect(feature.getPropertyInherited("tileCount")).toEqual(2); }); }); }, "WebGL" );