UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
UnitConversion.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2
3#pragma once
4
5#include "Containers/Array.h"
7#include "CoreTypes.h"
10#include "Misc/Optional.h"
12
13class FText;
14template<typename NumericType> struct FNumericUnit;
15
95
104
105template<typename NumericType> struct FNumericUnit;
106
109{
110public:
111
113
115 CORE_API bool ShouldDisplayUnits() const;
117
122
125 FDisplaySettingChanged& OnDisplaySettingsChanged() { return SettingChangedEvent; }
126
127private:
128
130 bool bGlobalUnitDisplay;
131
133 TArray<EUnit> DisplayUnits[(uint8)EUnitType::NumberOf + 1];
134
136 FDisplaySettingChanged SettingChangedEvent;
137};
138
140{
143
145 [[nodiscard]] static CORE_API bool AreUnitsCompatible(EUnit From, EUnit To);
146
148 [[nodiscard]] static CORE_API bool IsUnitOfType(EUnit Unit, EUnitType Type);
149
152
154 [[nodiscard]] static CORE_API const TCHAR* GetUnitDisplayString(EUnit Unit);
155
158
161
162public:
163
165 template<typename T>
166 [[nodiscard]] static T Convert(T InValue, EUnit From, EUnit To);
167
169 template<typename T>
171
173 template<typename T>
175
176};
177
178
183template<typename NumericType>
185{
187 NumericType Value;
190
194
198
200 template<typename OtherType>
202 template<typename OtherType>
204
207
208public:
209
212
215
218
219private:
221 operator const NumericType&() const = delete;
222
224 template<typename OtherType>
225 void CopyValueWithConversion(const FNumericUnit<OtherType>& Other);
226
228 static bool ExtractNumberBoundary(const TCHAR* Start, const TCHAR*& End);
229
231 template<typename OtherType>
233 {
234 if (LHS.Units != EUnit::Unspecified && RHS.Units != EUnit::Unspecified)
235 {
236 if (LHS.Units == RHS.Units)
237 {
238 return LHS.Value == RHS.Value;
239 }
240 else if (FUnitConversion::AreUnitsCompatible(LHS.Units, RHS.Units))
241 {
242 return LHS.Value == FUnitConversion::Convert(RHS.Value, RHS.Units, LHS.Units);
243 }
244 else
245 {
246 // Invalid conversion
247 return false;
248 }
249 }
250 else
251 {
252 return LHS.Value == RHS.Value;
253 }
254 }
255
256 template<typename OtherType>
258 {
259 return !(LHS == RHS);
260 }
261};
262
263template <typename CharType, typename T>
265
266template<typename T>
268
269template<typename T>
271
272template<typename T>
274
275template<typename T>
277
278// Include template definitions
279#include "Math/UnitConversion.inl" // IWYU pragma: export
FPlatformTypes::TCHAR TCHAR
Either ANSICHAR or WIDECHAR, depending on whether the platform supports wide characters or the requir...
Definition Platform.h:1135
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
FString LexToSanitizedString(const FNumericUnit< T > &NumericUnit)
Definition UnitConversion.inl:456
bool LexTryParseString(FNumericUnit< T > &OutValue, const TCHAR *String)
Definition UnitConversion.inl:476
EUnit
Definition UnitConversion.h:19
@ CentimetersPerSecond
@ Milligrams
@ RadiansPerSecond
@ Megabytes
@ KilometersPerHour
@ DegreesPerSecond
@ Centimeters
@ Megahertz
@ Farenheit
@ Percentage
@ Micrometers
@ Milliseconds
@ Millimeters
@ MegaPascals
@ KilogramsPerCubicMeter
@ RevolutionsPerMinute
@ ExposureValue
@ Gigahertz
@ KilogramsForce
@ KilogramCentimeters
@ GramsPerCubicCentimeter
@ Microseconds
@ KilogramCentimetersSquaredPerSecondSquared
@ Unspecified
@ GigaPascals
@ Kilograms
@ MetricTons
@ NewtonMeters
@ CandelaPerMeter2
@ Terabytes
@ Kilobytes
@ KiloPascals
@ Lightyears
@ PixelsPerInch
@ Kilohertz
@ MilesPerHour
@ GramsPerCubicMeter
@ CentimetersPerSecondSquared
@ MetersPerSecondSquared
@ Micrograms
@ KilogramMeters
@ Multiplier
@ Kilometers
@ NewtonSeconds
@ KilogramCentimetersPerSecondSquared
@ PoundsForce
@ Gigabytes
@ MetersPerSecond
@ Nanoseconds
@ KilogramsPerCubicCentimeter
void LexFromString(FNumericUnit< T > &OutValue, const TCHAR *String)
Definition UnitConversion.inl:466
FString LexToString(const FNumericUnit< T > &NumericUnit)
Definition UnitConversion.inl:448
TStringBuilderBase< CharType > & operator<<(TStringBuilderBase< CharType > &Builder, const FNumericUnit< T > &NumericUnit)
Definition UnitConversion.inl:439
EUnitType
Definition UnitConversion.h:98
@ PositionalImpulse
@ LuminousIntensity
uint8_t uint8
Definition binka_ue_file_header.h:8
Definition Text.h:385
Definition UnitConversion.h:109
CORE_API bool ShouldDisplayUnits() const
Definition UnitConversion.cpp:592
CORE_API const TArray< EUnit > & GetDisplayUnits(EUnitType InType) const
Definition UnitConversion.cpp:603
CORE_API FUnitSettings()
Definition UnitConversion.cpp:569
CORE_API void SetShouldDisplayUnits(bool bInGlobalUnitDisplay)
Definition UnitConversion.cpp:597
FDisplaySettingChanged & OnDisplaySettingsChanged()
Definition UnitConversion.h:125
CORE_API void SetDisplayUnits(EUnitType InType, const TArray< EUnit > &Units)
Definition UnitConversion.cpp:622
DECLARE_EVENT(FUnitSettings, FDisplaySettingChanged)
Definition Array.h:670
Definition StringBuilder.h:79
Definition ValueOrError.h:58
Definition UnitConversion.h:185
TOptional< FNumericUnit< NumericType > > ConvertTo(EUnit ToUnits) const
Definition UnitConversion.inl:302
FNumericUnit & operator=(const FNumericUnit< OtherType > &Other)
static TValueOrError< FNumericUnit< NumericType >, FText > TryParseExpression(const TCHAR *InExpression, EUnit InDefaultUnit, const FNumericUnit< NumericType > &InExistingValue)
Definition UnitConversion.inl:323
FNumericUnit & operator=(const FNumericUnit &Other)
Definition UnitConversion.inl:279
const EUnit Units
Definition UnitConversion.h:189
friend bool operator==(const FNumericUnit< NumericType > &LHS, const FNumericUnit< OtherType > &RHS)
Definition UnitConversion.h:232
static TOptional< FNumericUnit< NumericType > > TryParseString(const TCHAR *InSource)
Definition UnitConversion.inl:336
FNumericUnit()
Definition UnitConversion.inl:262
FNumericUnit< NumericType > QuantizeUnitsToBestFit() const
Definition UnitConversion.inl:317
friend bool operator!=(const FNumericUnit< NumericType > &LHS, const FNumericUnit< OtherType > &RHS)
Definition UnitConversion.h:257
NumericType Value
Definition UnitConversion.h:187
Definition UnitConversion.h:140
static CORE_API FUnitSettings & Settings()
Definition UnitConversion.cpp:640
static CORE_API EUnitType GetUnitType(EUnit)
Definition UnitConversion.cpp:659
static EUnit CalculateDisplayUnit(T Value, EUnit InUnits)
Definition UnitConversion.inl:200
static CORE_API TOptional< EUnit > UnitFromString(const TCHAR *UnitString)
Definition UnitConversion.cpp:682
static CORE_API bool AreUnitsCompatible(EUnit From, EUnit To)
Definition UnitConversion.cpp:647
static FNumericUnit< T > QuantizeUnitsToBestFit(T Value, EUnit Units)
Definition UnitConversion.inl:145
static CORE_API bool IsUnitOfType(EUnit Unit, EUnitType Type)
Definition UnitConversion.cpp:653
static T Convert(T InValue, EUnit From, EUnit To)
Definition UnitConversion.inl:74
static CORE_API TConstArrayView< const TCHAR * > GetSupportedUnits()
Definition UnitConversion.cpp:700
static CORE_API const TCHAR * GetUnitDisplayString(EUnit Unit)
Definition UnitConversion.cpp:669
Definition Optional.h:131