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