Cesium for Unreal 2.24.1
Loading...
Searching...
No Matches
CesiumPropertyArray.h
Go to the documentation of this file.
1// Copyright 2020-2025 CesiumGS, Inc. and Contributors
2
3#pragma once
4
7#include "UObject/ObjectMacros.h"
8
9#include <CesiumGltf/PropertyArrayView.h>
10#include <CesiumGltf/PropertyTypeTraits.h>
11#include <swl/variant.hpp>
12
13#include "CesiumPropertyArray.generated.h"
14
16
17/**
18 * A Blueprint-accessible wrapper for an array value from 3D Tiles or glTF
19 * metadata.
20 */
21USTRUCT(BlueprintType)
22struct CESIUMRUNTIME_API FCesiumPropertyArray {
23 GENERATED_USTRUCT_BODY()
24
25private:
26#pragma region ArrayType
27 template <typename T> using ArrayView = CesiumGltf::PropertyArrayView<T>;
28
29 using ArrayType = swl::variant<
30 ArrayView<int8_t>,
31 ArrayView<uint8_t>,
32 ArrayView<int16_t>,
33 ArrayView<uint16_t>,
34 ArrayView<int32_t>,
35 ArrayView<uint32_t>,
36 ArrayView<int64_t>,
37 ArrayView<uint64_t>,
38 ArrayView<float>,
39 ArrayView<double>,
40 ArrayView<bool>,
41 ArrayView<std::string_view>,
42 ArrayView<glm::vec<2, int8_t>>,
43 ArrayView<glm::vec<2, uint8_t>>,
44 ArrayView<glm::vec<2, int16_t>>,
45 ArrayView<glm::vec<2, uint16_t>>,
46 ArrayView<glm::vec<2, int32_t>>,
47 ArrayView<glm::vec<2, uint32_t>>,
48 ArrayView<glm::vec<2, int64_t>>,
49 ArrayView<glm::vec<2, uint64_t>>,
50 ArrayView<glm::vec<2, float>>,
51 ArrayView<glm::vec<2, double>>,
52 ArrayView<glm::vec<3, int8_t>>,
53 ArrayView<glm::vec<3, uint8_t>>,
54 ArrayView<glm::vec<3, int16_t>>,
55 ArrayView<glm::vec<3, uint16_t>>,
56 ArrayView<glm::vec<3, int32_t>>,
57 ArrayView<glm::vec<3, uint32_t>>,
58 ArrayView<glm::vec<3, int64_t>>,
59 ArrayView<glm::vec<3, uint64_t>>,
60 ArrayView<glm::vec<3, float>>,
61 ArrayView<glm::vec<3, double>>,
62 ArrayView<glm::vec<4, int8_t>>,
63 ArrayView<glm::vec<4, uint8_t>>,
64 ArrayView<glm::vec<4, int16_t>>,
65 ArrayView<glm::vec<4, uint16_t>>,
66 ArrayView<glm::vec<4, int32_t>>,
67 ArrayView<glm::vec<4, uint32_t>>,
68 ArrayView<glm::vec<4, int64_t>>,
69 ArrayView<glm::vec<4, uint64_t>>,
70 ArrayView<glm::vec<4, float>>,
71 ArrayView<glm::vec<4, double>>,
72 ArrayView<glm::mat<2, 2, int8_t>>,
73 ArrayView<glm::mat<2, 2, uint8_t>>,
74 ArrayView<glm::mat<2, 2, int16_t>>,
75 ArrayView<glm::mat<2, 2, uint16_t>>,
76 ArrayView<glm::mat<2, 2, int32_t>>,
77 ArrayView<glm::mat<2, 2, uint32_t>>,
78 ArrayView<glm::mat<2, 2, int64_t>>,
79 ArrayView<glm::mat<2, 2, uint64_t>>,
80 ArrayView<glm::mat<2, 2, float>>,
81 ArrayView<glm::mat<2, 2, double>>,
82 ArrayView<glm::mat<3, 3, int8_t>>,
83 ArrayView<glm::mat<3, 3, uint8_t>>,
84 ArrayView<glm::mat<3, 3, int16_t>>,
85 ArrayView<glm::mat<3, 3, uint16_t>>,
86 ArrayView<glm::mat<3, 3, int32_t>>,
87 ArrayView<glm::mat<3, 3, uint32_t>>,
88 ArrayView<glm::mat<3, 3, int64_t>>,
89 ArrayView<glm::mat<3, 3, uint64_t>>,
90 ArrayView<glm::mat<3, 3, float>>,
91 ArrayView<glm::mat<3, 3, double>>,
92 ArrayView<glm::mat<4, 4, int8_t>>,
93 ArrayView<glm::mat<4, 4, uint8_t>>,
94 ArrayView<glm::mat<4, 4, int16_t>>,
95 ArrayView<glm::mat<4, 4, uint16_t>>,
96 ArrayView<glm::mat<4, 4, int32_t>>,
97 ArrayView<glm::mat<4, 4, uint32_t>>,
98 ArrayView<glm::mat<4, 4, int64_t>>,
99 ArrayView<glm::mat<4, 4, uint64_t>>,
100 ArrayView<glm::mat<4, 4, float>>,
101 ArrayView<glm::mat<4, 4, double>>>;
102#pragma endregion
103
104public:
105 /**
106 * Constructs an empty instance with an unknown element type.
107 */
109
110 /**
111 * Constructs an array instance.
112 * @param value The property array view that will be stored in this struct
113 * @param pEnumDefinition The enum definition this property uses, if any.
114 */
115 template <typename T>
118 TSharedPtr<FCesiumMetadataEnum> pEnumDefinition = nullptr)
119 : _value(),
120 _elementType(TypeToMetadataValueType<T>(pEnumDefinition)),
121 _storage(),
122 _pEnumDefinition(pEnumDefinition) {
123 this->_value = std::move(value).toViewAndExternalBuffer(this->_storage);
124 }
125
126 template <typename T>
129 TSharedPtr<FCesiumMetadataEnum> pEnumDefinition = nullptr)
131 CesiumGltf::PropertyArrayCopy<T>(value),
132 pEnumDefinition) {}
133
134 template <typename T>
137 TSharedPtr<FCesiumMetadataEnum> pEnumDefinition = nullptr)
138 : _value(value),
139 _elementType(TypeToMetadataValueType<T>(pEnumDefinition)),
140 _pEnumDefinition(pEnumDefinition) {}
141
146
147private:
148 ArrayType _value;
149 FCesiumMetadataValueType _elementType;
150 std::vector<std::byte> _storage;
151 TSharedPtr<FCesiumMetadataEnum> _pEnumDefinition;
152
154 friend struct FCesiumMetadataValue;
155};
Represents the true value type of a metadata value, akin to the property types in EXT_structural_meta...
A Blueprint-accessible wrapper for a glTF metadata value.
FCesiumPropertyArray(const FCesiumPropertyArray &rhs)
FCesiumPropertyArray()
Constructs an empty instance with an unknown element type.
friend struct FCesiumMetadataValue
FCesiumPropertyArray(FCesiumPropertyArray &&rhs)
FCesiumPropertyArray & operator=(FCesiumPropertyArray &&rhs)
FCesiumPropertyArray & operator=(const FCesiumPropertyArray &rhs)
FCesiumPropertyArray(CesiumGltf::PropertyArrayCopy< T > &&value, TSharedPtr< FCesiumMetadataEnum > pEnumDefinition=nullptr)
Constructs an array instance.
friend class UCesiumPropertyArrayBlueprintLibrary
FCesiumPropertyArray(const CesiumGltf::PropertyArrayView< T > &value, TSharedPtr< FCesiumMetadataEnum > pEnumDefinition=nullptr)
FCesiumPropertyArray(const CesiumGltf::PropertyArrayCopy< T > &value, TSharedPtr< FCesiumMetadataEnum > pEnumDefinition=nullptr)