59 if( aHeader.find(
"BASIC" ) != std::string::npos ||
60 aHeader.find(
"basic" ) != std::string::npos )
67 if( aHeader.find(
"MILS" ) != std::string::npos ||
68 aHeader.find(
"mils" ) != std::string::npos )
75 if( aHeader.find(
"METRIC" ) != std::string::npos ||
76 aHeader.find(
"metric" ) != std::string::npos )
83 if( aHeader.find(
"INCHES" ) != std::string::npos ||
84 aHeader.find(
"inches" ) != std::string::npos )
97 if( aUnitCode.empty() )
101 if( aUnitCode ==
"M" || aUnitCode ==
"m" || aUnitCode ==
"D" || aUnitCode ==
"d" ||
102 aUnitCode ==
"MILS" || aUnitCode ==
"mils" || aUnitCode ==
"MIL" || aUnitCode ==
"mil" )
108 if( aUnitCode ==
"MM" || aUnitCode ==
"mm" ||
109 aUnitCode ==
"METRIC" || aUnitCode ==
"metric" )
115 if( aUnitCode ==
"I" || aUnitCode ==
"i" ||
116 aUnitCode ==
"INCHES" || aUnitCode ==
"inches" || aUnitCode ==
"INCH" || aUnitCode ==
"inch" )
122 if( aUnitCode ==
"N" || aUnitCode ==
"n" )
131 std::optional<PADS_UNIT_TYPE> unitType =
ParseUnitCode( aUnitCode );
133 if( !unitType.has_value() )
165 switch( effectiveType )
184 return static_cast<int64_t
>( std::round( aValue *
m_scaleFactor ) );
190 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)
Set the base units for conversion.
bool PushUnitOverride(const std::string &aUnitCode)
Push a unit override onto the stack.
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 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 code and return the corresponding unit type.
static constexpr double MM_TO_NM
void SetBasicUnitsScale(double aScale)
Set a custom scale for BASIC units.
void PopUnitOverride()
Pop the most recent unit override from the stack.
int64_t ToNanometers(double aValue) const
Convert a coordinate value to nanometers.
PADS_UNIT_TYPE
Unit types supported by PADS file formats.
@ MILS
Thousandths of an inch (1 mil = 0.001 inch)