bmh/FlightSimulation/Plugins/CesiumForUnreal_5.4/Source/CesiumRuntime/Private/CesiumModelMetadata.cpp
2025-02-07 22:52:32 +08:00

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;
}