convert_to_biu: Changed defines & functions to constexpr

This commit is contained in:
Maciej Suminski 2016-12-09 16:43:41 +01:00
parent a2a950fdae
commit 8afae179ab
1 changed files with 16 additions and 17 deletions

View File

@ -29,23 +29,21 @@
* @file convert_to_biu.h * @file convert_to_biu.h
*/ */
/** /**
* @brief some define and functions to convert a value in mils, decimils or mm * @brief some define and functions to convert a value in mils, decimils or mm
* to the internal unit used in pcbnew, cvpcb or gerbview (nanometer or deci-mil) * to the internal unit used in pcbnew, cvpcb or gerbview (nanometer or deci-mil)
* depending on compile time option * depending on compile time option
*/ */
/// Scaling factor to convert mils to internal units. /// Scaling factor to convert mils to internal units.
#if defined(PCBNEW) || defined(CVPCB) || defined(GERBVIEW) #if defined(PCBNEW) || defined(CVPCB) || defined(GERBVIEW)
#if defined(GERBVIEW) #if defined(GERBVIEW)
#define IU_PER_MM 1e5 // Gerbview IU is 10 nanometers. constexpr double IU_PER_MM = 1e5; // Gerbview IU is 10 nanometers.
#else #else
#define IU_PER_MM 1e6 // Pcbnew IU is 1 nanometer. constexpr double IU_PER_MM = 1e6; // Pcbnew IU is 1 nanometer.
#endif #endif
#define IU_PER_MILS (IU_PER_MM * 0.0254)
constexpr double IU_PER_MILS = IU_PER_MM * 0.0254;
/// Convert mils to PCBNEW internal units (iu). /// Convert mils to PCBNEW internal units (iu).
inline int Mils2iu( int mils ) inline int Mils2iu( int mils )
@ -55,8 +53,9 @@ inline int Mils2iu( int mils )
} }
#elif defined (PL_EDITOR) #elif defined (PL_EDITOR)
#define IU_PER_MM 1e3 // internal units in micron (should be enough) constexpr double IU_PER_MM = 1e3; // internal units in micron (should be enough)
#define IU_PER_MILS (IU_PER_MM * 0.0254) constexpr double IU_PER_MILS = (IU_PER_MM * 0.0254);
/// Convert mils to page layout editor internal units (iu). /// Convert mils to page layout editor internal units (iu).
inline int Mils2iu( int mils ) inline int Mils2iu( int mils )
{ {
@ -65,37 +64,37 @@ inline int Mils2iu( int mils )
} }
#elif defined (EESCHEMA) // Eeschema #elif defined (EESCHEMA) // Eeschema
#define IU_PER_MILS 1.0 constexpr double IU_PER_MILS = 1.0;
#define IU_PER_MM (IU_PER_MILS / 0.0254) constexpr double IU_PER_MM = ( IU_PER_MILS / 0.0254 );
inline int Mils2iu( int mils ) constexpr inline int Mils2iu( int mils )
{ {
return mils; return mils;
} }
#else #else
// Here, we do not know the value of internal units: do not define // Here, we do not know the value of internal units: do not define
// conversion functions (They do not have meaning // conversion functions (They do not have meaning)
#define UNKNOWN_IU #define UNKNOWN_IU
#endif #endif
#ifndef UNKNOWN_IU #ifndef UNKNOWN_IU
// Other definitions used in a few files // Other definitions used in a few files
#define MM_PER_IU (1/IU_PER_MM) constexpr double MM_PER_IU = ( 1 / IU_PER_MM );
/// Convert mm to internal units (iu). /// Convert mm to internal units (iu).
inline int Millimeter2iu( double mm ) constexpr inline int Millimeter2iu( double mm )
{ {
return (int) ( mm < 0 ? mm * IU_PER_MM - 0.5 : mm * IU_PER_MM + 0.5); return (int) ( mm < 0 ? mm * IU_PER_MM - 0.5 : mm * IU_PER_MM + 0.5 );
} }
/// Convert mm to internal units (iu). /// Convert mm to internal units (iu).
inline double Iu2Millimeter( int iu ) constexpr inline double Iu2Millimeter( int iu )
{ {
return iu / IU_PER_MM; return iu / IU_PER_MM;
} }
/// Convert mm to internal units (iu). /// Convert mm to internal units (iu).
inline double Iu2Mils( int iu ) constexpr inline double Iu2Mils( int iu )
{ {
return iu / IU_PER_MILS; return iu / IU_PER_MILS;
} }