134 lines
4.2 KiB
C++
134 lines
4.2 KiB
C++
// Copyright 2020-2024 CesiumGS, Inc. and Contributors
|
|
|
|
#include "CesiumModelMetadata.h"
|
|
#include "CesiumGltf/ExtensionModelExtStructuralMetadata.h"
|
|
#include "CesiumGltf/Model.h"
|
|
#include "CesiumGltfComponent.h"
|
|
#include "CesiumGltfPrimitiveComponent.h"
|
|
|
|
static FCesiumModelMetadata EmptyModelMetadata;
|
|
|
|
static FCesiumPropertyTable EmptyPropertyTable;
|
|
static FCesiumPropertyTexture EmptyPropertyTexture;
|
|
|
|
FCesiumModelMetadata::FCesiumModelMetadata(
|
|
const CesiumGltf::Model& InModel,
|
|
const CesiumGltf::ExtensionModelExtStructuralMetadata& Metadata) {
|
|
this->_propertyTables.Reserve(Metadata.propertyTables.size());
|
|
for (const auto& propertyTable : Metadata.propertyTables) {
|
|
this->_propertyTables.Emplace(FCesiumPropertyTable(InModel, propertyTable));
|
|
}
|
|
|
|
this->_propertyTextures.Reserve(Metadata.propertyTextures.size());
|
|
for (const auto& propertyTexture : Metadata.propertyTextures) {
|
|
this->_propertyTextures.Emplace(
|
|
FCesiumPropertyTexture(InModel, propertyTexture));
|
|
}
|
|
}
|
|
|
|
/*static*/
|
|
const FCesiumModelMetadata&
|
|
UCesiumModelMetadataBlueprintLibrary::GetModelMetadata(
|
|
const UPrimitiveComponent* component) {
|
|
const UCesiumGltfPrimitiveComponent* pGltfComponent =
|
|
Cast<UCesiumGltfPrimitiveComponent>(component);
|
|
|
|
if (!IsValid(pGltfComponent)) {
|
|
return EmptyModelMetadata;
|
|
}
|
|
|
|
const UCesiumGltfComponent* pModel =
|
|
Cast<UCesiumGltfComponent>(pGltfComponent->GetOuter());
|
|
if (!IsValid(pModel)) {
|
|
return EmptyModelMetadata;
|
|
}
|
|
|
|
return pModel->Metadata;
|
|
}
|
|
|
|
/*static*/ const TMap<FString, FCesiumPropertyTable>
|
|
UCesiumModelMetadataBlueprintLibrary::GetFeatureTables(
|
|
UPARAM(ref) const FCesiumModelMetadata& ModelMetadata) {
|
|
TMap<FString, FCesiumPropertyTable> result;
|
|
for (const FCesiumPropertyTable& propertyTable :
|
|
ModelMetadata._propertyTables) {
|
|
result.Add(
|
|
UCesiumPropertyTableBlueprintLibrary::GetPropertyTableName(
|
|
propertyTable),
|
|
propertyTable);
|
|
}
|
|
return result;
|
|
}
|
|
|
|
/*static*/ const TMap<FString, FCesiumPropertyTexture>
|
|
UCesiumModelMetadataBlueprintLibrary::GetFeatureTextures(
|
|
UPARAM(ref) const FCesiumModelMetadata& ModelMetadata) {
|
|
TMap<FString, FCesiumPropertyTexture> result;
|
|
for (const FCesiumPropertyTexture& propertyTexture :
|
|
ModelMetadata._propertyTextures) {
|
|
result.Add(
|
|
UCesiumPropertyTextureBlueprintLibrary::GetPropertyTextureName(
|
|
propertyTexture),
|
|
propertyTexture);
|
|
}
|
|
return result;
|
|
}
|
|
|
|
/*static*/
|
|
const TArray<FCesiumPropertyTable>&
|
|
UCesiumModelMetadataBlueprintLibrary::GetPropertyTables(
|
|
UPARAM(ref) const FCesiumModelMetadata& ModelMetadata) {
|
|
return ModelMetadata._propertyTables;
|
|
}
|
|
|
|
/*static*/ const FCesiumPropertyTable&
|
|
UCesiumModelMetadataBlueprintLibrary::GetPropertyTable(
|
|
UPARAM(ref) const FCesiumModelMetadata& ModelMetadata,
|
|
const int64 Index) {
|
|
if (Index < 0 || Index >= ModelMetadata._propertyTables.Num()) {
|
|
return EmptyPropertyTable;
|
|
}
|
|
|
|
return ModelMetadata._propertyTables[Index];
|
|
}
|
|
|
|
/*static*/ const TArray<FCesiumPropertyTable>
|
|
UCesiumModelMetadataBlueprintLibrary::GetPropertyTablesAtIndices(
|
|
UPARAM(ref) const FCesiumModelMetadata& ModelMetadata,
|
|
const TArray<int64>& Indices) {
|
|
TArray<FCesiumPropertyTable> result;
|
|
for (int64 Index : Indices) {
|
|
result.Add(GetPropertyTable(ModelMetadata, Index));
|
|
}
|
|
return result;
|
|
}
|
|
|
|
/*static*/
|
|
const TArray<FCesiumPropertyTexture>&
|
|
UCesiumModelMetadataBlueprintLibrary::GetPropertyTextures(
|
|
UPARAM(ref) const FCesiumModelMetadata& ModelMetadata) {
|
|
return ModelMetadata._propertyTextures;
|
|
}
|
|
|
|
/*static*/ const FCesiumPropertyTexture&
|
|
UCesiumModelMetadataBlueprintLibrary::GetPropertyTexture(
|
|
UPARAM(ref) const FCesiumModelMetadata& ModelMetadata,
|
|
const int64 Index) {
|
|
if (Index < 0 || Index >= ModelMetadata._propertyTextures.Num()) {
|
|
return EmptyPropertyTexture;
|
|
}
|
|
|
|
return ModelMetadata._propertyTextures[Index];
|
|
}
|
|
|
|
/*static*/ const TArray<FCesiumPropertyTexture>
|
|
UCesiumModelMetadataBlueprintLibrary::GetPropertyTexturesAtIndices(
|
|
UPARAM(ref) const FCesiumModelMetadata& ModelMetadata,
|
|
const TArray<int64>& Indices) {
|
|
TArray<FCesiumPropertyTexture> result;
|
|
for (int64 Index : Indices) {
|
|
result.Add(GetPropertyTexture(ModelMetadata, Index));
|
|
}
|
|
return result;
|
|
}
|