4#include "MRViewer/exports.h"
100#define DETAIL_MR_UNIT_ENUMS(X) X(NoUnit) X(LengthUnit) X(AngleUnit) X(PixelSizeUnit) X(RatioUnit) X(TimeUnit) X(MovementSpeedUnit) X(AreaUnit) X(VolumeUnit) X(InvLengthUnit)
105#pragma clang diagnostic push
106#pragma clang diagnostic ignored "-Wgnu-zero-variadic-macro-arguments"
108#define DETAIL_MR_UNIT_VALUE_TYPES(X, ...) \
109 X(float ,__VA_ARGS__) X(double ,__VA_ARGS__) X(long double ,__VA_ARGS__) \
110 X(signed char ,__VA_ARGS__) X(unsigned char ,__VA_ARGS__) \
111 X(short ,__VA_ARGS__) X(unsigned short ,__VA_ARGS__) \
112 X(int ,__VA_ARGS__) X(unsigned int ,__VA_ARGS__) \
113 X(long ,__VA_ARGS__) X(unsigned long ,__VA_ARGS__) \
114 X(long long ,__VA_ARGS__) X(unsigned long long ,__VA_ARGS__)
116#pragma clang diagnostic pop
122 #define MR_X(E) || std::same_as<T, E>
146#define MR_X(E) template <> [[nodiscard]] MRVIEWER_API const UnitInfo& getUnitInfo( E unit );
163namespace detail::Units
167 template <
typename T>
168 concept Scalar = std::is_arithmetic_v<T> && !std::is_same_v<T, bool>;
170 template <
typename T>
177template <UnitEnum E,
typename T>
184 if constexpr ( std::is_same_v<T, ReturnType> )
186 if ( !needConversion )
192 for (
int i = 0; i < VectorTraits<T>::size; i++ )
197 bool needElemConversion = needConversion;
198 if constexpr ( std::is_floating_point_v<typename VectorTraits<T>::BaseType> )
200 if ( needElemConversion &&
203 target >= std::numeric_limits<typename VectorTraits<T>::BaseType>::max()
206 needElemConversion =
false;
209 if ( needElemConversion )
217template <UnitEnum E,
typename T>
229struct UnitToStringParams;
236#define MR_X(E) extern template MRVIEWER_API const UnitToStringParams<E>& getDefaultUnitParams();
244#define MR_X(E) extern template MRVIEWER_API void setDefaultUnitParams( const UnitToStringParams<E>& newParams );
322 #define MR_X(E) , UnitToStringParams<E>
329template <UnitEnum E, detail::Units::Scalar T>
332#define MR_Y(T, E) extern template MRVIEWER_API std::string valueToString<E, T>( T value, const UnitToStringParams<E>& params );
333#define MR_X(E) DETAIL_MR_UNIT_VALUE_TYPES(MR_Y, E)
339template <detail::Units::Scalar T>
342#define MR_X(T, unused) extern template MRVIEWER_API std::string valueToString( T value, const VarUnitToStringParams& params );
348template <detail::Units::Scalar T>
354template <detail::Units::Scalar T>
363 for (
int i = 0; i < VectorTraits<T>::size; i++ )
372 for (
int i = 0; i < VectorTraits<T>::size; i++ )
377#define MR_X(T, unused) \
378 extern template MRVIEWER_API int guessPrecision( T value ); \
379 extern template MRVIEWER_API int guessPrecision( T min, T max );
386template <UnitEnum E, detail::Units::Scalar T>
389#define MR_Y(T, E) extern template MRVIEWER_API std::string valueToImGuiFormatString( T value, const UnitToStringParams<E>& params );
390#define MR_X(E) DETAIL_MR_UNIT_VALUE_TYPES(MR_Y, E)
396template <detail::Units::Scalar T>
399#define MR_X(T, unused) extern template MRVIEWER_API std::string valueToImGuiFormatString( T value, const VarUnitToStringParams& params );
#define MR_TRIM_LEADING_COMMA(...)
Definition MRMacros.h:53
#define MR_X(E)
Definition MRUnits.h:146
#define DETAIL_MR_UNIT_VALUE_TYPES(X,...)
Definition MRUnits.h:108
#define DETAIL_MR_UNIT_ENUMS(X)
Definition MRUnits.h:100
std::conditional_t< std::is_integral_v< typename VectorTraits< T >::BaseType >, typename VectorTraits< T >::template ChangeBaseType< float >, T > MakeFloatingPoint
Definition MRUnits.h:171
PixelSizeUnit
Definition MRUnits.h:42
NumberStyle
Definition MRUnits.h:249
MRVIEWER_API int guessPrecision(T value)
Definition MRUnits.h:360
MRVIEWER_API std::string valueToString(T value, const UnitToStringParams< E > ¶ms=getDefaultUnitParams< E >())
const UnitInfo & getUnitInfo(E unit)=delete
NoUnit
Definition MRUnits.h:19
bool unitsAreEquivalent(E a, E b)
Definition MRUnits.h:152
LengthUnit
Definition MRUnits.h:25
const UnitToStringParams< E > & getDefaultUnitParams()
void setDefaultUnitParams(const UnitToStringParams< E > &newParams)
MRVIEWER_API std::string valueToImGuiFormatString(T value, const UnitToStringParams< E > ¶ms=getDefaultUnitParams< E >())
RatioUnit
Definition MRUnits.h:49
DegreesMode
Definition MRUnits.h:258
MovementSpeedUnit
Definition MRUnits.h:65
detail::Units::MakeFloatingPoint< T > convertUnits(E from, E to, const T &value)
Definition MRUnits.h:178
VolumeUnit
Definition MRUnits.h:83
AreaUnit
Definition MRUnits.h:74
MRMESH_API std::string_view toString(DimensionsVisualizePropertyType value)
TimeUnit
Definition MRUnits.h:57
InvLengthUnit
Definition MRUnits.h:92
AngleUnit
Definition MRUnits.h:34
std::variant< > VarUnitToStringParams
Definition MRUnits.h:321
std::string_view unitSuffix
Definition MRUnits.h:139
std::string_view prettyName
Definition MRUnits.h:135
float conversionFactor
Definition MRUnits.h:133
bool leadingZero
Definition MRUnits.h:307
int precision
Definition MRUnits.h:290
std::conditional_t< std::is_same_v< E, AngleUnit >, DegreesMode, detail::Units::Empty > degreesMode
Definition MRUnits.h:313
NumberStyle style
Definition MRUnits.h:287
std::optional< E > sourceUnit
Definition MRUnits.h:277
std::string_view decorationFormatString
Definition MRUnits.h:272
char thousandsSeparator
Definition MRUnits.h:302
bool unitSuffix
Definition MRUnits.h:282
bool allowNegativeZero
Definition MRUnits.h:296
char thousandsSeparatorFrac
Definition MRUnits.h:304
std::optional< E > targetUnit
Definition MRUnits.h:279
friend bool operator==(const UnitToStringParams &, const UnitToStringParams &)=default
bool stripTrailingZeroes
Definition MRUnits.h:310
bool unicodeMinusSign
Definition MRUnits.h:299
Definition MRMesh/MRVectorTraits.h:14
static constexpr int size
Definition MRMesh/MRVectorTraits.h:18
static constexpr auto && getElem(int i, U &&value)
Definition MRMesh/MRVectorTraits.h:28
T BaseType
Definition MRMesh/MRVectorTraits.h:17