89 lines
2.6 KiB
C++
89 lines
2.6 KiB
C++
#include "CesiumGltfReader/GltfReader.h"
|
|
|
|
#include <CesiumGltf/ExtensionModelExtFeatureMetadata.h>
|
|
|
|
#include <catch2/catch.hpp>
|
|
|
|
using namespace CesiumGltf;
|
|
using namespace CesiumUtility;
|
|
|
|
TEST_CASE("Can deserialize EXT_feature_metadata example with featureTables") {
|
|
const std::string s = R"(
|
|
{
|
|
"asset": {
|
|
"version": "2.0"
|
|
},
|
|
"extensions": {
|
|
"EXT_feature_metadata": {
|
|
"schema": {
|
|
"classes": {
|
|
"tree": {
|
|
"properties": {
|
|
"height": {
|
|
"description": "Height of tree measured from ground level",
|
|
"type": "FLOAT32"
|
|
},
|
|
"birdCount": {
|
|
"description": "Number of birds perching on the tree",
|
|
"type": "UINT8",
|
|
"min": 1
|
|
},
|
|
"species": {
|
|
"description": "Species of the tree",
|
|
"type": "STRING"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"featureTables": {
|
|
"trees": {
|
|
"class": "tree",
|
|
"count": 10,
|
|
"properties": {
|
|
"height": {
|
|
"bufferView": 0
|
|
},
|
|
"birdCount": {
|
|
"bufferView": 1
|
|
},
|
|
"species": {
|
|
"bufferView": 2,
|
|
"stringOffsetBufferView": 3
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
)";
|
|
|
|
CesiumGltfReader::GltfReaderOptions options;
|
|
CesiumGltfReader::GltfReader reader;
|
|
CesiumGltfReader::GltfReaderResult readerResult = reader.readGltf(
|
|
gsl::span(reinterpret_cast<const std::byte*>(s.c_str()), s.size()),
|
|
options);
|
|
|
|
REQUIRE(readerResult.errors.empty());
|
|
REQUIRE(readerResult.model.has_value());
|
|
|
|
ExtensionModelExtFeatureMetadata* pMetadata =
|
|
readerResult.model->getExtension<ExtensionModelExtFeatureMetadata>();
|
|
REQUIRE(pMetadata);
|
|
|
|
REQUIRE(pMetadata->schema.has_value());
|
|
REQUIRE(pMetadata->schema->classes.size() == 1);
|
|
|
|
auto treesIt = pMetadata->schema->classes.find("tree");
|
|
REQUIRE(treesIt != pMetadata->schema->classes.end());
|
|
|
|
REQUIRE(treesIt->second.properties.size() == 3);
|
|
|
|
auto birdCountIt = treesIt->second.properties.find("birdCount");
|
|
REQUIRE(birdCountIt != treesIt->second.properties.end());
|
|
REQUIRE(birdCountIt->second.max.isNull());
|
|
REQUIRE(!birdCountIt->second.min.isNull());
|
|
REQUIRE(birdCountIt->second.min.getSafeNumberOrDefault(-1) == 1);
|
|
}
|