MeshLib C++ Docs
Loading...
Searching...
No Matches
MRUnitInfo.h File Reference
#include "MRVectorTraits.h"
#include "MRMacros.h"
#include <cassert>
#include <optional>

Go to the source code of this file.

Classes

struct  MR::UnitInfo
 Information about a single measurement unit. More...
 

Namespaces

namespace  MR
 only for bindings generation
 
namespace  MR::detail
 
namespace  MR::detail::Units
 

Concepts

concept  MR::UnitEnum
 Whether E is one of the unit enums: NoUnit, LengthUnit, AngleUnit, ...
 
concept  MR::detail::Units::Scalar
 

Macros

#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)
 A list of all unit enums, for internal use.
 
#define DETAIL_MR_UNIT_VALUE_TYPES(X, ...)
 
#define MR_X(E)   || std::same_as<T, E>
 ignore for bindings to prevent GCC14 error: undefined symbol: ZN2MR11getUnitInfoITkNS_8UnitEnumENS_8TimeUnitEEERKNS_8UnitInfoET
 
#define MR_X(E)   template <> [[nodiscard]] MRMESH_API MR_BIND_IGNORE const UnitInfo& getUnitInfo( E unit );
 ignore for bindings to prevent GCC14 error: undefined symbol: ZN2MR11getUnitInfoITkNS_8UnitEnumENS_8TimeUnitEEERKNS_8UnitInfoET
 

Typedefs

template<typename T >
using MR::detail::Units::MakeFloatingPoint = std::conditional_t<std::is_integral_v<typename VectorTraits<T>::BaseType>, typename VectorTraits<T>::template ChangeBaseType<float>, T>
 

Enumerations

enum class  MR::NoUnit { MR::NoUnit::_count }
 A stub measurement unit representing no unit. More...
 
enum class  MR::LengthUnit {
  MR::LengthUnit::microns , MR::LengthUnit::millimeters , MR::LengthUnit::centimeters , MR::LengthUnit::meters ,
  MR::LengthUnit::inches , MR::LengthUnit::feet , MR::LengthUnit::_count
}
 Measurement units of length. More...
 
enum class  MR::AngleUnit { MR::AngleUnit::radians , MR::AngleUnit::degrees , MR::AngleUnit::_count }
 Measurement units of angle. More...
 
enum class  MR::PixelSizeUnit { MR::PixelSizeUnit::pixels , MR::PixelSizeUnit::_count }
 Measurement units of screen sizes. More...
 
enum class  MR::RatioUnit { MR::RatioUnit::factor , MR::RatioUnit::percents , MR::RatioUnit::_count }
 Measurement units for factors / ratios. More...
 
enum class  MR::TimeUnit { MR::TimeUnit::seconds , MR::TimeUnit::milliseconds , MR::TimeUnit::_count }
 Measurement units for time. More...
 
enum class  MR::MovementSpeedUnit {
  MR::MovementSpeedUnit::micronsPerSecond , MR::MovementSpeedUnit::millimetersPerSecond , MR::MovementSpeedUnit::centimetersPerSecond , MR::MovementSpeedUnit::metersPerSecond ,
  MR::MovementSpeedUnit::inchesPerSecond , MR::MovementSpeedUnit::feetPerSecond , MR::MovementSpeedUnit::_count
}
 Measurement units for movement speed. More...
 
enum class  MR::AreaUnit {
  MR::AreaUnit::microns2 , MR::AreaUnit::millimeters2 , MR::AreaUnit::centimeters2 , MR::AreaUnit::meters2 ,
  MR::AreaUnit::inches2 , MR::AreaUnit::feet2 , MR::AreaUnit::_count
}
 Measurement units for surface area. More...
 
enum class  MR::VolumeUnit {
  MR::VolumeUnit::microns3 , MR::VolumeUnit::millimeters3 , MR::VolumeUnit::centimeters3 , MR::VolumeUnit::meters3 ,
  MR::VolumeUnit::inches3 , MR::VolumeUnit::feet3 , MR::VolumeUnit::_count
}
 Measurement units for body volume. More...
 
enum class  MR::InvLengthUnit {
  MR::InvLengthUnit::inv_microns , MR::InvLengthUnit::inv_millimeters , MR::InvLengthUnit::inv_centimeters , MR::InvLengthUnit::inv_meters ,
  MR::InvLengthUnit::inv_inches , MR::InvLengthUnit::inv_feet , MR::InvLengthUnit::_count
}
 Measurement units for 1/length. More...
 

Functions

template<UnitEnum E>
const UnitInfoMR::getUnitInfo (E unit)=delete
 Returns information about a single measurement unit.
 
template<UnitEnum E>
bool MR::unitsAreEquivalent (E a, E b)
 Returns true if converting a value between units a and b doesn't change its value.
 
template<UnitEnum E>
bool MR::unitsAreEquivalent (const std::optional< E > &a, const std::optional< E > &b)
 This version also returns true if a or b is null.
 
template<UnitEnum E, typename T >
detail::Units::MakeFloatingPoint< T > MR::convertUnits (E from, E to, const T &value)
 
template<UnitEnum E, typename T >
detail::Units::MakeFloatingPoint< T > MR::convertUnits (const std::optional< E > &from, const std::optional< E > &to, const T &value)
 This version is a no-op if from or to is null.