Perform coordinate format detection on Excellon drill files
Fixes: lp:1754121 * https://bugs.launchpad.net/kicad/+bug/1754121
This commit is contained in:
parent
8f0c798dc8
commit
3e033aee0c
|
@ -96,12 +96,14 @@ private:
|
||||||
|
|
||||||
excellon_state m_State; // state of excellon file analysis
|
excellon_state m_State; // state of excellon file analysis
|
||||||
bool m_SlotOn; // true during an oblong drill definition
|
bool m_SlotOn; // true during an oblong drill definition
|
||||||
|
bool m_format_known; // true if number format (2:4, etc) is known
|
||||||
|
|
||||||
public: EXCELLON_IMAGE( int layer ) :
|
public: EXCELLON_IMAGE( int layer ) :
|
||||||
GERBER_FILE_IMAGE( layer )
|
GERBER_FILE_IMAGE( layer )
|
||||||
{
|
{
|
||||||
m_State = READ_HEADER_STATE;
|
m_State = READ_HEADER_STATE;
|
||||||
m_SlotOn = false;
|
m_SlotOn = false;
|
||||||
|
m_format_known = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -547,9 +547,31 @@ bool EXCELLON_IMAGE::Execute_Drill_Command( char*& text )
|
||||||
switch( *text )
|
switch( *text )
|
||||||
{
|
{
|
||||||
case 'X':
|
case 'X':
|
||||||
ReadXYCoord( text );
|
|
||||||
break;
|
|
||||||
case 'Y':
|
case 'Y':
|
||||||
|
if( !m_format_known )
|
||||||
|
{
|
||||||
|
// Scan the first entry to decode format
|
||||||
|
int nbdigits = 0;
|
||||||
|
int integer = m_GerbMetric ? fmtIntegerMM : fmtIntegerInch;
|
||||||
|
int mantissa;
|
||||||
|
char* read = text + 1;
|
||||||
|
|
||||||
|
while( IsNumber( *read ) )
|
||||||
|
{
|
||||||
|
if( (*read >= '0') && (*read <='9') )
|
||||||
|
nbdigits++;
|
||||||
|
|
||||||
|
read++;
|
||||||
|
}
|
||||||
|
|
||||||
|
mantissa = nbdigits - integer;
|
||||||
|
|
||||||
|
m_FmtScale.x = m_FmtScale.y = mantissa;
|
||||||
|
m_FmtLen.x = m_FmtLen.y = integer + mantissa;
|
||||||
|
|
||||||
|
m_format_known = true;
|
||||||
|
}
|
||||||
|
|
||||||
ReadXYCoord( text );
|
ReadXYCoord( text );
|
||||||
break;
|
break;
|
||||||
case 'G': // G85 is found here for oval holes
|
case 'G': // G85 is found here for oval holes
|
||||||
|
|
Loading…
Reference in New Issue