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

171 lines
5.6 KiB
C

// Copyright 2020-2024 CesiumGS, Inc. and Contributors
#pragma once
#include "CesiumMetadataValueType.h"
#include "UObject/ObjectMacros.h"
#include "CesiumMetadataPropertyDetails.generated.h"
/**
* Represents information about a metadata property according to how the
* property is defined in EXT_structural_metadata.
*/
USTRUCT(BlueprintType)
struct CESIUMRUNTIME_API FCesiumMetadataPropertyDetails {
GENERATED_USTRUCT_BODY()
FCesiumMetadataPropertyDetails()
: Type(ECesiumMetadataType::Invalid),
ComponentType(ECesiumMetadataComponentType::None),
bIsArray(false) {}
FCesiumMetadataPropertyDetails(
ECesiumMetadataType InType,
ECesiumMetadataComponentType InComponentType,
bool IsArray)
: Type(InType), ComponentType(InComponentType), bIsArray(IsArray) {}
/**
* The type of the metadata property.
*/
UPROPERTY(EditAnywhere, Category = "Cesium")
ECesiumMetadataType Type = ECesiumMetadataType::Invalid;
/**
* The component of the metadata property. Only applies when the type is a
* Scalar, VecN, or MatN type.
*/
UPROPERTY(
EditAnywhere,
Category = "Cesium",
Meta =
(EditCondition =
"Type != ECesiumMetadataType::Invalid && Type != ECesiumMetadataType::Boolean && Type != ECesiumMetadataType::Enum && Type != ECesiumMetadataType::String"))
ECesiumMetadataComponentType ComponentType =
ECesiumMetadataComponentType::None;
/**
* Whether or not this represents an array containing elements of the
* specified types.
*/
UPROPERTY(EditAnywhere, Category = "Cesium")
bool bIsArray = false;
/**
* The size of the arrays in the metadata property. If the property contains
* arrays of varying length, this will be zero even though bIsArray will be
* true> If this property does not contain arrays, this is set to zero.
*/
UPROPERTY(
EditAnywhere,
Category = "Cesium",
Meta = (EditCondition = "bIsArray"))
int64 ArraySize = 0;
/**
* Whether or not the values in this property are normalized. Only applicable
* to scalar, vecN, and matN types with integer components.
*
* For unsigned integer component types, values are normalized between
* [0.0, 1.0]. For signed integer component types, values are normalized
* between [-1.0, 1.0]
*/
UPROPERTY(
EditAnywhere,
Category = "Cesium",
Meta =
(EditCondition =
"Type != ECesiumMetadataType::Invalid && Type != ECesiumMetadataType::Boolean && Type != ECesiumMetadataType::Enum && Type != ECesiumMetadataType::String && ComponentType != ECesiumMetadataComponentType::None && ComponentType != ECesiumMetadataComponentType::Float32 && ComponentType != ECesiumMetadataComponentType::Float64"))
bool bIsNormalized = false;
/**
* Whether or not the property is transformed by an offset. This value is
* defined either in the class property, or in the instance of the property
* itself.
*/
UPROPERTY(
EditAnywhere,
Category = "Cesium",
Meta =
(EditCondition =
"Type != ECesiumMetadataType::Invalid && Type != ECesiumMetadataType::Boolean && Type != ECesiumMetadataType::Enum && Type != ECesiumMetadataType::String"))
bool bHasOffset = false;
/**
* Whether or not the property is transformed by a scale. This value is
* defined either in the class property, or in the instance of the property
* itself.
*/
UPROPERTY(
EditAnywhere,
Category = "Cesium",
Meta =
(EditCondition =
"Type != ECesiumMetadataType::Invalid && Type != ECesiumMetadataType::Boolean && Type != ECesiumMetadataType::Enum && Type != ECesiumMetadataType::String"))
bool bHasScale = false;
/**
* Whether or not the property specifies a "no data" value. This value
* functions a sentinel value, indicating missing data wherever it appears.
*/
UPROPERTY(
EditAnywhere,
Category = "Cesium",
Meta =
(EditCondition =
"Type != ECesiumMetadataType::Invalid && Type != ECesiumMetadataType::Boolean && Type != ECesiumMetadataType::Enum"))
bool bHasNoDataValue = false;
/**
* Whether or not the property specifies a default value. This default value
* is used use when encountering a "no data" value in the property, or when a
* non-required property has been omitted.
*/
UPROPERTY(
EditAnywhere,
Category = "Cesium",
Meta =
(EditCondition =
"Type != ECesiumMetadataType::Invalid && Type != ECesiumMetadataType::Enum"))
bool bHasDefaultValue = false;
inline bool
operator==(const FCesiumMetadataPropertyDetails& ValueType) const {
return Type == ValueType.Type && ComponentType == ValueType.ComponentType &&
bIsArray == ValueType.bIsArray;
}
inline bool
operator!=(const FCesiumMetadataPropertyDetails& ValueType) const {
return !operator==(ValueType);
}
/**
* Returns the internal types as a FCesiumMetadataValueType.
*/
FCesiumMetadataValueType GetValueType() const {
return FCesiumMetadataValueType(Type, ComponentType, bIsArray);
}
/**
* Sets the internal types to the values supplied by the input
* FCesiumMetadataValueType.
*/
void SetValueType(FCesiumMetadataValueType ValueType) {
Type = ValueType.Type;
ComponentType = ValueType.ComponentType;
bIsArray = ValueType.bIsArray;
}
/**
* Whether this property has one or more value transforms. This includes
* normalization, offset, and scale, as well as the "no data" and default
* values.
*/
bool HasValueTransforms() const {
return bIsNormalized || bHasOffset || bHasScale || bHasNoDataValue ||
bHasDefaultValue;
}
};