Commit 4d9f87bf authored by Dick Hollenbeck's avatar Dick Hollenbeck

fix BUG parsing the kicad_pcb (layers ..) declaration section. First non-cu was being dropped.

parent c6af2a79
......@@ -89,11 +89,18 @@ enum LAYER_T
*/
struct LAYER
{
LAYER() :
m_type( LT_SIGNAL ),
m_visible( true ),
m_number( 0 )
{}
LAYER()
{
clear();
}
void clear()
{
m_type = LT_SIGNAL;
m_visible = true;
m_number = 0;
m_name.clear();
}
/*
LAYER( const wxString& aName = wxEmptyString,
......
......@@ -703,6 +703,8 @@ void PCB_PARSER::parseLayer( LAYER* aLayer ) throw( IO_ERROR, PARSE_ERROR )
std::string type;
bool isVisible = true;
aLayer->clear();
if( CurTok() != T_LEFT )
Expecting( T_LEFT );
......@@ -744,13 +746,12 @@ void PCB_PARSER::parseLayers() throw( IO_ERROR, PARSE_ERROR )
LSET visibleLayers;
LSET enabledLayers;
int copperLayerCount = 0;
LAYER layer;
std::vector<LAYER> cu;
for( token = NextTok(); token != T_RIGHT; token = NextTok() )
{
LAYER layer;
parseLayer( &layer );
if( layer.m_type == LT_UNDEFINED ) // it's a non-copper layer
......@@ -794,41 +795,41 @@ void PCB_PARSER::parseLayers() throw( IO_ERROR, PARSE_ERROR )
copperLayerCount = cu.size();
}
if( token != T_RIGHT )
// process non-copper layers
while( token != T_RIGHT )
{
// read any non-copper layers
for( token = NextTok(); token != T_RIGHT; token = NextTok() )
LAYER_ID_MAP::const_iterator it = m_layerIndices.find( UTF8( layer.m_name ) );
if( it == m_layerIndices.end() )
{
LAYER layer;
wxString error = wxString::Format(
_( "Layer '%s' in file '%s' at line %d, is not in fixed layer hash" ),
GetChars( layer.m_name ),
GetChars( CurSource() ),
CurLineNumber(),
CurOffset()
);
THROW_IO_ERROR( error );
}
parseLayer( &layer );
layer.m_number = it->second;
LAYER_ID_MAP::const_iterator it = m_layerIndices.find( UTF8( layer.m_name ) );
enabledLayers.set( layer.m_number );
if( it == m_layerIndices.end() )
{
wxString error = wxString::Format(
_( "Layer '%s' in file '%s' at line %d, is not in fixed layer hash" ),
GetChars( layer.m_name ),
GetChars( CurSource() ),
CurLineNumber(),
CurOffset()
);
THROW_IO_ERROR( error );
}
if( layer.m_visible )
visibleLayers.set( layer.m_number );
layer.m_number = it->second;
// DBG( printf( "aux m_visible:%s\n", layer.m_visible ? "true" : "false" );)
enabledLayers.set( layer.m_number );
m_board->SetLayer( it->second, layer );
if( layer.m_visible )
visibleLayers.set( layer.m_number );
token = NextTok();
//DBG( printf( "aux m_visible:%s\n", layer.m_visible ? "true" : "false" );)
if( token != T_LEFT )
break;
m_board->SetLayer( LAYER_ID( layer.m_number ), layer );
}
parseLayer( &layer );
}
// We need at least 2 copper layers and there must be an even number of them.
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment