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

103 lines
3.4 KiB
C++

// Copyright 2020-2024 CesiumGS, Inc. and Contributors
#include "CesiumMetadataPrimitive.h"
#include "CesiumGltf/Model.h"
PRAGMA_DISABLE_DEPRECATION_WARNINGS
FCesiumMetadataPrimitive::FCesiumMetadataPrimitive(
const FCesiumPrimitiveFeatures& PrimitiveFeatures,
const FCesiumPrimitiveMetadata& PrimitiveMetadata,
const FCesiumModelMetadata& ModelMetadata)
: _pPrimitiveFeatures(&PrimitiveFeatures),
_pPrimitiveMetadata(&PrimitiveMetadata),
_pModelMetadata(&ModelMetadata) {}
const TArray<FCesiumFeatureIdAttribute>
UCesiumMetadataPrimitiveBlueprintLibrary::GetFeatureIdAttributes(
UPARAM(ref) const FCesiumMetadataPrimitive& MetadataPrimitive) {
TArray<FCesiumFeatureIdAttribute> featureIDAttributes;
if (!MetadataPrimitive._pPrimitiveFeatures) {
return featureIDAttributes;
}
const TArray<FCesiumFeatureIdSet> featureIDSets =
UCesiumPrimitiveFeaturesBlueprintLibrary::GetFeatureIDSetsOfType(
*MetadataPrimitive._pPrimitiveFeatures,
ECesiumFeatureIdSetType::Attribute);
featureIDAttributes.Reserve(featureIDSets.Num());
for (const FCesiumFeatureIdSet& featureIDSet : featureIDSets) {
featureIDAttributes.Add(
UCesiumFeatureIdSetBlueprintLibrary::GetAsFeatureIDAttribute(
featureIDSet));
}
return featureIDAttributes;
}
const TArray<FCesiumFeatureIdTexture>
UCesiumMetadataPrimitiveBlueprintLibrary::GetFeatureIdTextures(
UPARAM(ref) const FCesiumMetadataPrimitive& MetadataPrimitive) {
TArray<FCesiumFeatureIdTexture> featureIDTextures;
if (!MetadataPrimitive._pPrimitiveFeatures) {
return featureIDTextures;
}
const TArray<FCesiumFeatureIdSet> featureIDSets =
UCesiumPrimitiveFeaturesBlueprintLibrary::GetFeatureIDSetsOfType(
*MetadataPrimitive._pPrimitiveFeatures,
ECesiumFeatureIdSetType::Texture);
featureIDTextures.Reserve(featureIDSets.Num());
for (const FCesiumFeatureIdSet& featureIDSet : featureIDSets) {
featureIDTextures.Add(
UCesiumFeatureIdSetBlueprintLibrary::GetAsFeatureIDTexture(
featureIDSet));
}
return featureIDTextures;
}
const TArray<FString>
UCesiumMetadataPrimitiveBlueprintLibrary::GetFeatureTextureNames(
UPARAM(ref) const FCesiumMetadataPrimitive& MetadataPrimitive) {
TArray<FString> propertyTextureNames;
if (!MetadataPrimitive._pPrimitiveMetadata ||
!MetadataPrimitive._pModelMetadata) {
return TArray<FString>();
}
const TArray<int64>& propertyTextureIndices =
UCesiumPrimitiveMetadataBlueprintLibrary::GetPropertyTextureIndices(
*MetadataPrimitive._pPrimitiveMetadata);
const TArray<FCesiumPropertyTexture> propertyTextures =
UCesiumModelMetadataBlueprintLibrary::GetPropertyTexturesAtIndices(
*MetadataPrimitive._pModelMetadata,
propertyTextureIndices);
propertyTextureNames.Reserve(propertyTextures.Num());
for (auto propertyTexture : propertyTextures) {
propertyTextureNames.Add(
UCesiumPropertyTextureBlueprintLibrary::GetPropertyTextureName(
propertyTexture));
}
return propertyTextureNames;
}
int64 UCesiumMetadataPrimitiveBlueprintLibrary::GetFirstVertexIDFromFaceID(
UPARAM(ref) const FCesiumMetadataPrimitive& MetadataPrimitive,
int64 FaceID) {
if (!MetadataPrimitive._pPrimitiveFeatures) {
return -1;
}
return UCesiumPrimitiveFeaturesBlueprintLibrary::GetFirstVertexFromFace(
*MetadataPrimitive._pPrimitiveFeatures,
FaceID);
}
PRAGMA_ENABLE_DEPRECATION_WARNINGS