bmh/FlightSimulation/Plugins/CesiumForUnreal_5.4/Source/CesiumRuntime/Public/CesiumPropertyTexture.h
2025-02-07 22:52:32 +08:00

179 lines
5.8 KiB
C++

// Copyright 2020-2024 CesiumGS, Inc. and Contributors
#pragma once
#include "CesiumGltf/PropertyTextureView.h"
#include "CesiumPropertyTextureProperty.h"
#include "Containers/Array.h"
#include "Kismet/BlueprintFunctionLibrary.h"
#include "Kismet/GameplayStatics.h"
#include "CesiumPropertyTexture.generated.h"
namespace CesiumGltf {
struct Model;
struct PropertyTexture;
}; // namespace CesiumGltf
UENUM(BlueprintType)
enum class ECesiumPropertyTextureStatus : uint8 {
/* The property texture is valid. */
Valid = 0,
/* The property texture instance was not initialized from an actual glTF
property texture. */
ErrorInvalidPropertyTexture,
/* The property texture's class could be found in the schema of the metadata
extension. */
ErrorInvalidPropertyTextureClass
};
/**
* @brief A blueprint-accessible wrapper of a property texture from a glTF.
* Provides access to {@link FCesiumPropertyTextureProperty} views of texture
* metadata.
*/
USTRUCT(BlueprintType)
struct CESIUMRUNTIME_API FCesiumPropertyTexture {
GENERATED_USTRUCT_BODY()
public:
FCesiumPropertyTexture()
: _status(ECesiumPropertyTextureStatus::ErrorInvalidPropertyTexture) {}
FCesiumPropertyTexture(
const CesiumGltf::Model& model,
const CesiumGltf::PropertyTexture& PropertyTexture);
/**
* Gets the name of the metadata class that this property table conforms to.
*/
FString getClassName() const { return _className; }
private:
ECesiumPropertyTextureStatus _status;
FString _name;
FString _className;
TMap<FString, FCesiumPropertyTextureProperty> _properties;
friend class UCesiumPropertyTextureBlueprintLibrary;
};
UCLASS()
class CESIUMRUNTIME_API UCesiumPropertyTextureBlueprintLibrary
: public UBlueprintFunctionLibrary {
GENERATED_BODY()
public:
/**
* Gets the status of the property texture. If the property texture is invalid
* in any way, this briefly indicates why.
*
* @param PropertyTexture The property texture.
*/
UFUNCTION(
BlueprintCallable,
BlueprintPure,
Category = "Cesium|Metadata|PropertyTexture")
static const ECesiumPropertyTextureStatus
GetPropertyTextureStatus(UPARAM(ref)
const FCesiumPropertyTexture& PropertyTexture);
/**
* Gets the name of the property texture.
*
* @param PropertyTexture The property texture.
*/
UFUNCTION(
BlueprintCallable,
BlueprintPure,
Category = "Cesium|Metadata|PropertyTexture")
static const FString&
GetPropertyTextureName(UPARAM(ref)
const FCesiumPropertyTexture& PropertyTexture);
/**
* Gets all the properties of the property texture, mapped by property name.
*
* @param PropertyTexture The property texture.
*/
UFUNCTION(
BlueprintCallable,
BlueprintPure,
Category = "Cesium|Metadata|PropertyTexture")
static const TMap<FString, FCesiumPropertyTextureProperty>
GetProperties(UPARAM(ref) const FCesiumPropertyTexture& PropertyTexture);
/**
* Gets the names of the properties in this property texture. If the property
* texture is invalid, this returns an empty array.
*
* @param PropertyTexture The property texture.
*/
UFUNCTION(
BlueprintCallable,
BlueprintPure,
Category = "Cesium|Metadata|PropertyTexture")
static const TArray<FString>
GetPropertyNames(UPARAM(ref) const FCesiumPropertyTexture& PropertyTexture);
/**
* Retrieve a FCesiumPropertyTextureProperty by name. If the property texture
* does not contain a property with that name, this returns an invalid
* FCesiumPropertyTextureProperty.
*
* @param PropertyTexture The property texture.
* @param PropertyName The name of the property to find.
*/
UFUNCTION(
BlueprintCallable,
BlueprintPure,
Category = "Cesium|Metadata|PropertyTexture")
static const FCesiumPropertyTextureProperty& FindProperty(
UPARAM(ref) const FCesiumPropertyTexture& PropertyTexture,
const FString& PropertyName);
/**
* Gets all of the property values at the given texture coordinates, mapped by
* property name. This will only include values from valid property texture
* properties.
*
* In EXT_structural_metadata, individual properties can specify different
* texture coordinate sets to be sampled from. This method uses the same
* coordinates to sample each property, regardless of its intended texture
* coordinate set. Use GetMetadataValuesForHit instead to sample the property
* texture's properties with their respective texture coordinate sets.
*
* @param PropertyTexture The property texture.
* @param UV The texture coordinates.
* @return The property values mapped by property name.
*/
UFUNCTION(
BlueprintCallable,
BlueprintPure,
Category = "Cesium|Metadata|PropertyTexture")
static TMap<FString, FCesiumMetadataValue> GetMetadataValuesForUV(
UPARAM(ref) const FCesiumPropertyTexture& PropertyTexture,
const FVector2D& UV);
/**
* Given a trace hit result, gets all of the property values from property
* texture on the hit component, mapped by property name. This will only
* include values from valid property texture properties.
*
* In EXT_structural_metadata, individual properties can specify different
* texture coordinate sets to be sampled from. This method uses the
* corresponding texture coordinate sets to sample each property.
*
* @param PropertyTexture The property texture.
* @param Hit The trace hit result
* @return The property values mapped by property name.
*/
UFUNCTION(
BlueprintCallable,
BlueprintPure,
Category = "Cesium|Metadata|PropertyTexture")
static TMap<FString, FCesiumMetadataValue> GetMetadataValuesFromHit(
UPARAM(ref) const FCesiumPropertyTexture& PropertyTexture,
const FHitResult& Hit);
};