113#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)
117#define DETAIL_MR_UNIT_VALUE_TYPES(X, ...) \
118 X(float ,__VA_ARGS__) X(double ,__VA_ARGS__) X(long double ,__VA_ARGS__) \
119 X(signed char ,__VA_ARGS__) X(unsigned char ,__VA_ARGS__) \
120 X(short ,__VA_ARGS__) X(unsigned short ,__VA_ARGS__) \
121 X(int ,__VA_ARGS__) X(unsigned int ,__VA_ARGS__) \
122 X(long ,__VA_ARGS__) X(unsigned long ,__VA_ARGS__) \
123 X(long long ,__VA_ARGS__) X(unsigned long long ,__VA_ARGS__)
128 #define MR_X(E) || std::same_as<T, E>
153#define MR_X(E) template <> [[nodiscard]] MRMESH_API MR_BIND_IGNORE const UnitInfo& getUnitInfo( E unit );
172 template <
typename T>
173 concept Scalar = std::is_arithmetic_v<T> && !std::is_same_v<T, bool>;
175 template <
typename T>
182template <UnitEnum E,
typename T>
189 if constexpr ( std::is_same_v<T, ReturnType> )
191 if ( !needConversion )
197 for (
int i = 0; i < VectorTraits<T>::size; i++ )
202 bool needElemConversion = needConversion;
203 if constexpr ( std::is_floating_point_v<typename VectorTraits<T>::BaseType> )
205 if ( needElemConversion &&
211 needElemConversion =
false;
214 if ( needElemConversion )
222template <UnitEnum E,
typename T>
Whether E is one of the unit enums: NoUnit, LengthUnit, AngleUnit, ...
Definition MRUnitInfo.h:127
Definition MRUnitInfo.h:173
PixelSizeUnit
Measurement units of screen sizes.
Definition MRUnitInfo.h:43
#define MR_X(E)
ignore for bindings to prevent GCC14 error: undefined symbol: ZN2MR11getUnitInfoITkNS_8UnitEnumENS_8T...
Definition MRUnitInfo.h:153
std::string_view unitSuffix
Definition MRUnitInfo.h:145
#define DETAIL_MR_UNIT_ENUMS(X)
A list of all unit enums, for internal use.
Definition MRUnitInfo.h:113
std::string_view prettyName
Definition MRUnitInfo.h:141
const UnitInfo & getUnitInfo(E unit)=delete
Returns information about a single measurement unit.
NoUnit
A stub measurement unit representing no unit.
Definition MRUnitInfo.h:17
bool unitsAreEquivalent(E a, E b)
Returns true if converting a value between units a and b doesn't change its value.
Definition MRUnitInfo.h:159
LengthUnit
Measurement units of length.
Definition MRUnitInfo.h:23
float conversionFactor
Definition MRUnitInfo.h:139
static constexpr auto && getElem(int i, U &&value)
Definition MRVectorTraits.h:32
RatioUnit
Measurement units for factors / ratios.
Definition MRUnitInfo.h:50
MovementSpeedUnit
Measurement units for movement speed.
Definition MRUnitInfo.h:66
detail::Units::MakeFloatingPoint< T > convertUnits(E from, E to, const T &value)
Definition MRUnitInfo.h:183
VolumeUnit
Measurement units for body volume.
Definition MRUnitInfo.h:90
T BaseType
The base template handles scalars (or just non-vectors).
Definition MRVectorTraits.h:21
AreaUnit
Measurement units for surface area.
Definition MRUnitInfo.h:78
std::conditional_t< std::is_integral_v< typename VectorTraits< T >::BaseType >, typename VectorTraits< T >::template ChangeBaseType< float >, T > MakeFloatingPoint
Definition MRUnitInfo.h:176
TimeUnit
Measurement units for time.
Definition MRUnitInfo.h:58
InvLengthUnit
Measurement units for 1/length.
Definition MRUnitInfo.h:102
AngleUnit
Measurement units of angle.
Definition MRUnitInfo.h:35
@ pixels
Definition MRUnitInfo.h:44
@ _count
Definition MRFeatureHelpers.h:30
@ meters
Definition MRUnitInfo.h:27
@ inches
Definition MRUnitInfo.h:28
@ millimeters
Definition MRUnitInfo.h:25
@ feet
Definition MRUnitInfo.h:29
@ microns
Definition MRUnitInfo.h:24
@ centimeters
Definition MRUnitInfo.h:26
@ factor
Definition MRUnitInfo.h:51
@ percents
0..1 x
Definition MRUnitInfo.h:52
@ feetPerSecond
Definition MRUnitInfo.h:72
@ micronsPerSecond
Definition MRUnitInfo.h:67
@ metersPerSecond
Definition MRUnitInfo.h:70
@ inchesPerSecond
Definition MRUnitInfo.h:71
@ millimetersPerSecond
Definition MRUnitInfo.h:68
@ centimetersPerSecond
Definition MRUnitInfo.h:69
@ microns3
Definition MRUnitInfo.h:91
@ millimeters3
Definition MRUnitInfo.h:92
@ meters3
Definition MRUnitInfo.h:94
@ feet3
Definition MRUnitInfo.h:96
@ centimeters3
Definition MRUnitInfo.h:93
@ inches3
Definition MRUnitInfo.h:95
@ millimeters2
Definition MRUnitInfo.h:80
@ centimeters2
Definition MRUnitInfo.h:81
@ inches2
Definition MRUnitInfo.h:83
@ feet2
Definition MRUnitInfo.h:84
@ microns2
Definition MRUnitInfo.h:79
@ meters2
Definition MRUnitInfo.h:82
@ seconds
Definition MRUnitInfo.h:59
@ milliseconds
Definition MRUnitInfo.h:60
@ inv_microns
Definition MRUnitInfo.h:103
@ inv_meters
Definition MRUnitInfo.h:106
@ inv_millimeters
Definition MRUnitInfo.h:104
@ inv_inches
Definition MRUnitInfo.h:107
@ inv_feet
Definition MRUnitInfo.h:108
@ inv_centimeters
Definition MRUnitInfo.h:105
@ radians
Definition MRUnitInfo.h:36
@ degrees
Definition MRUnitInfo.h:37
Definition MRUnitInfo.h:171
only for bindings generation
Definition MRCameraOrientationPlugin.h:8
Information about a single measurement unit.
Definition MRUnitInfo.h:136
Common traits for (mathematical) vectors.
Definition MRVectorTraits.h:18