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 ); 
  331    #define MR_X(E) , UnitToStringParams<E> 
  338template <UnitEnum E, detail::Units::Scalar T>
 
  341#define MR_Y(T, E) extern template MRVIEWER_API std::string valueToString<E, T>( T value, const UnitToStringParams<E>& params ); 
  342#define MR_X(E) DETAIL_MR_UNIT_VALUE_TYPES(MR_Y, E) 
  348template <detail::Units::Scalar T>
 
  351#define MR_X(T, unused) extern template MRVIEWER_API std::string valueToString( T value, const VarUnitToStringParams& params ); 
  357template <detail::Units::Scalar T>
 
  363template <detail::Units::Scalar T>
 
  372    for ( 
int i = 0; i < VectorTraits<T>::size; i++ )
 
 
  381    for ( 
int i = 0; i < VectorTraits<T>::size; i++ )
 
 
  386#define MR_X(T, unused) \ 
  387    extern template MRVIEWER_API int guessPrecision( T value ); \ 
  388    extern template MRVIEWER_API int guessPrecision( T min, T max ); 
  395template <UnitEnum E, detail::Units::Scalar T>
 
  398#define MR_Y(T, E) extern template MRVIEWER_API std::string valueToImGuiFormatString( T value, const UnitToStringParams<E>& params ); 
  399#define MR_X(E) DETAIL_MR_UNIT_VALUE_TYPES(MR_Y, E) 
  405template <detail::Units::Scalar T>
 
  408#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:58
 
#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
 
Definition MRCameraOrientationPlugin.h:8
 
PixelSizeUnit
Definition MRUnits.h:42
 
NumberStyle
Definition MRUnits.h:249
 
MRVIEWER_API int guessPrecision(T value)
Definition MRUnits.h:369
 
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
 
ZeroMode
Definition MRUnits.h:267
 
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:330
 
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:316
 
int precision
Definition MRUnits.h:297
 
std::conditional_t< std::is_same_v< E, AngleUnit >, DegreesMode, detail::Units::Empty > degreesMode
Definition MRUnits.h:322
 
NumberStyle style
Definition MRUnits.h:294
 
std::optional< E > sourceUnit
Definition MRUnits.h:284
 
ZeroMode zeroMode
Definition MRUnits.h:305
 
std::string_view decorationFormatString
Definition MRUnits.h:279
 
char thousandsSeparator
Definition MRUnits.h:311
 
bool unitSuffix
Definition MRUnits.h:289
 
char thousandsSeparatorFrac
Definition MRUnits.h:313
 
std::optional< E > targetUnit
Definition MRUnits.h:286
 
friend bool operator==(const UnitToStringParams &, const UnitToStringParams &)=default
 
bool stripTrailingZeroes
Definition MRUnits.h:319
 
bool plusSign
Definition MRUnits.h:302
 
bool unicodeMinusSign
Definition MRUnits.h:308
 
Definition MRMesh/MRVectorTraits.h:15
 
static constexpr int size
Definition MRMesh/MRVectorTraits.h:19
 
static constexpr auto && getElem(int i, U &&value)
Definition MRMesh/MRVectorTraits.h:29
 
T BaseType
Definition MRMesh/MRVectorTraits.h:18