110#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)
114#define DETAIL_MR_UNIT_VALUE_TYPES(X, ...) \
115 X(float ,__VA_ARGS__) X(double ,__VA_ARGS__) X(long double ,__VA_ARGS__) \
116 X(signed char ,__VA_ARGS__) X(unsigned char ,__VA_ARGS__) \
117 X(short ,__VA_ARGS__) X(unsigned short ,__VA_ARGS__) \
118 X(int ,__VA_ARGS__) X(unsigned int ,__VA_ARGS__) \
119 X(long ,__VA_ARGS__) X(unsigned long ,__VA_ARGS__) \
120 X(long long ,__VA_ARGS__) X(unsigned long long ,__VA_ARGS__)
125 #define MR_X(E) || std::same_as<T, E>
150#define MR_X(E) template <> [[nodiscard]] MRMESH_API MR_BIND_IGNORE const UnitInfo& getUnitInfo( E unit );
167namespace detail::Units
169 template <
typename T>
170 concept Scalar = std::is_arithmetic_v<T> && !std::is_same_v<T, bool>;
172 template <
typename T>
179template <UnitEnum E,
typename T>
186 if constexpr ( std::is_same_v<T, ReturnType> )
188 if ( !needConversion )
194 for (
int i = 0; i < VectorTraits<T>::size; i++ )
199 bool needElemConversion = needConversion;
200 if constexpr ( std::is_floating_point_v<typename VectorTraits<T>::BaseType> )
202 if ( needElemConversion &&
205 target >= std::numeric_limits<typename VectorTraits<T>::BaseType>::max()
208 needElemConversion =
false;
211 if ( needElemConversion )
219template <UnitEnum E,
typename T>
#define MR_X(E)
Definition MRUnitInfo.h:150
#define DETAIL_MR_UNIT_ENUMS(X)
Definition MRUnitInfo.h:110
Definition MRUnitInfo.h:124
Definition MRUnitInfo.h:170
std::conditional_t< std::is_integral_v< typename VectorTraits< T >::BaseType >, typename VectorTraits< T >::template ChangeBaseType< float >, T > MakeFloatingPoint
Definition MRUnitInfo.h:173
Definition MRCameraOrientationPlugin.h:8
PixelSizeUnit
Definition MRUnitInfo.h:40
const UnitInfo & getUnitInfo(E unit)=delete
NoUnit
Definition MRUnitInfo.h:14
bool unitsAreEquivalent(E a, E b)
Definition MRUnitInfo.h:156
LengthUnit
Definition MRUnitInfo.h:20
RatioUnit
Definition MRUnitInfo.h:47
MovementSpeedUnit
Definition MRUnitInfo.h:63
detail::Units::MakeFloatingPoint< T > convertUnits(E from, E to, const T &value)
Definition MRUnitInfo.h:180
VolumeUnit
Definition MRUnitInfo.h:87
AreaUnit
Definition MRUnitInfo.h:75
TimeUnit
Definition MRUnitInfo.h:55
InvLengthUnit
Definition MRUnitInfo.h:99
AngleUnit
Definition MRUnitInfo.h:32
Definition MRUnitInfo.h:133
std::string_view unitSuffix
Definition MRUnitInfo.h:142
std::string_view prettyName
Definition MRUnitInfo.h:138
float conversionFactor
Definition MRUnitInfo.h:136
Definition MRMesh/MRVectorTraits.h:15
static constexpr auto && getElem(int i, U &&value)
Definition MRMesh/MRVectorTraits.h:29
T BaseType
Definition MRMesh/MRVectorTraits.h:18