58 if( aHeader.find(
"BASIC" ) != std::string::npos ||
59 aHeader.find(
"basic" ) != std::string::npos )
65 if( aHeader.find(
"MILS" ) != std::string::npos ||
66 aHeader.find(
"mils" ) != std::string::npos )
73 if( aHeader.find(
"METRIC" ) != std::string::npos ||
74 aHeader.find(
"metric" ) != std::string::npos )
81 if( aHeader.find(
"INCHES" ) != std::string::npos ||
82 aHeader.find(
"inches" ) != std::string::npos )
95 if( aUnitCode.empty() )
99 if( aUnitCode ==
"M" || aUnitCode ==
"m" || aUnitCode ==
"D" || aUnitCode ==
"d" ||
100 aUnitCode ==
"MILS" || aUnitCode ==
"mils" || aUnitCode ==
"MIL" || aUnitCode ==
"mil" )
105 if( aUnitCode ==
"MM" || aUnitCode ==
"mm" ||
106 aUnitCode ==
"METRIC" || aUnitCode ==
"metric" )
111 if( aUnitCode ==
"I" || aUnitCode ==
"i" ||
112 aUnitCode ==
"INCHES" || aUnitCode ==
"inches" || aUnitCode ==
"INCH" || aUnitCode ==
"inch" )
118 if( aUnitCode ==
"N" || aUnitCode ==
"n" )
127 std::optional<PADS_UNIT_TYPE> unitType =
ParseUnitCode( aUnitCode );
129 if( !unitType.has_value() )
160 switch( effectiveType )
179 return static_cast<int64_t
>( std::round( aValue *
m_scaleFactor ) );
185 return static_cast<int64_t
>( std::round( aValue *
m_scaleFactor ) );
static constexpr double MILS_TO_NM
static constexpr double INCHES_TO_NM
std::vector< PADS_UNIT_TYPE > m_unitOverrideStack
void SetBaseUnits(PADS_UNIT_TYPE aUnitType)
bool PushUnitOverride(const std::string &aUnitCode)
Push a unit override onto the stack, temporarily overriding the base units for subsequent conversions...
static constexpr double BASIC_TO_NM
PADS_UNIT_TYPE m_unitType
void SetBasicUnitsMode(bool aEnabled)
Enable or disable BASIC units mode.
int64_t ToNanometersSize(double aValue) const
Convert a size value (width, height, radius) in PADS file units to nanometers.
bool ParseFileHeader(const std::string &aHeader)
Parse a PADS file header string and configure units accordingly.
static std::optional< PADS_UNIT_TYPE > ParseUnitCode(const std::string &aUnitCode)
Parse a PADS unit override code ("M"/"D" mils, "MM" metric, "I" inches), returning an empty optional ...
static constexpr double MM_TO_NM
void SetBasicUnitsScale(double aScale)
Set a custom scale for BASIC units, in nanometers per BASIC unit.
void PopUnitOverride()
Pop the most recent unit override, reverting to the previous setting.
int64_t ToNanometers(double aValue) const
Convert a coordinate value in PADS file units to nanometers.
@ MILS
Thousandths of an inch.