Fix kicad2step sexpr parser to include new footprint token.
Fixes https://gitlab.com/kicad/code/kicad/-/issues/6406
This commit is contained in:
parent
993a684959
commit
723b9e6a77
|
@ -395,8 +395,8 @@ wxString S3D_RESOLVER::ResolvePath( const wxString& aFileName )
|
|||
if( !( m_errflags & ERRFLG_ENVPATH ) )
|
||||
{
|
||||
m_errflags |= ERRFLG_ENVPATH;
|
||||
wxString errmsg = "[3D File Resolver] file not found:\n";
|
||||
errmsg << tname << "\n";
|
||||
wxString errmsg = "[3D File Resolver] File \"";
|
||||
errmsg << aFileName << "\" not found\n";
|
||||
ReportMessage( errmsg );
|
||||
}
|
||||
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
* This program source code file is part of KiCad, a free EDA CAD application.
|
||||
*
|
||||
* Copyright (C) 2016 Cirilo Bernardo <cirilo.bernardo@gmail.com>
|
||||
* Copyright 2018 KiCad Developers, see AUTHORS.txt for contributors.
|
||||
* Copyright 2018-2020 KiCad Developers, see AUTHORS.txt for contributors.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License
|
||||
|
@ -40,6 +40,7 @@
|
|||
|
||||
#include <Standard_Failure.hxx>
|
||||
|
||||
|
||||
KICADFOOTPRINT::KICADFOOTPRINT( KICADPCB* aParent )
|
||||
{
|
||||
m_parent = aParent;
|
||||
|
@ -77,7 +78,7 @@ bool KICADFOOTPRINT::Read( SEXPR::SEXPR* aEntry )
|
|||
SEXPR::SEXPR* child = aEntry->GetChild( 0 );
|
||||
std::string name = child->GetSymbol();
|
||||
|
||||
if( name != "module" )
|
||||
if( name != "module" && name != "footprint" )
|
||||
{
|
||||
std::ostringstream ostr;
|
||||
ostr << "* BUG: module parser invoked for type '" << name << "'\n";
|
||||
|
@ -93,7 +94,7 @@ bool KICADFOOTPRINT::Read( SEXPR::SEXPR* aEntry )
|
|||
std::string symname;
|
||||
|
||||
// skip the optional locked and/or placed attributes; due to the vagaries of the
|
||||
// kicad version of sexpr, the attribute may be a Symbol or a String
|
||||
// KiCad version of sexpr, the attribute may be a Symbol or a String
|
||||
if( child->IsSymbol() || child->IsString() )
|
||||
{
|
||||
if( child->IsSymbol() )
|
||||
|
@ -105,7 +106,7 @@ bool KICADFOOTPRINT::Read( SEXPR::SEXPR* aEntry )
|
|||
continue;
|
||||
|
||||
wxLogMessage( "* module descr in PCB file at line %d: unexpected keyword '%s'\n",
|
||||
child->GetLineNumber(), symname.c_str() );
|
||||
child->GetLineNumber(), symname.c_str() );
|
||||
return false;
|
||||
}
|
||||
|
||||
|
@ -391,7 +392,8 @@ bool KICADFOOTPRINT::ComposePCB( class PCBMODEL* aPCB, S3D_RESOLVER* resolver,
|
|||
}
|
||||
catch( const Standard_Failure& e)
|
||||
{
|
||||
ReportMessage( wxString::Format( "could not add component %s\n>>Opencascade error: %s\n ",
|
||||
ReportMessage( wxString::Format( "could not add component %s\n>>Opencascade "
|
||||
"error: %s\n ",
|
||||
m_refdes, e.GetMessageString() ) );
|
||||
}
|
||||
}
|
||||
|
|
|
@ -2,6 +2,7 @@
|
|||
* This program source code file is part of KiCad, a free EDA CAD application.
|
||||
*
|
||||
* Copyright (C) 2016 Cirilo Bernardo <cirilo.bernardo@gmail.com>
|
||||
* Copyright (C) 2020 KiCad Developers, see AUTHORS.txt for contributors.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License
|
||||
|
@ -47,7 +48,7 @@
|
|||
/*
|
||||
* GetKicadConfigPath() is taken from KiCad's common.cpp source:
|
||||
* Copyright (C) 2014-2015 Jean-Pierre Charras, jp.charras at wanadoo.fr
|
||||
* Copyright (C) 2008-2015 Wayne Stambaugh <stambaughw@verizon.net>
|
||||
* Copyright (C) 2008-2015 Wayne Stambaugh <stambaughw@gmail.com>
|
||||
* Copyright (C) 1992-2015 KiCad Developers
|
||||
*/
|
||||
static wxString GetKicadConfigPath()
|
||||
|
@ -121,7 +122,8 @@ bool KICADPCB::ReadFile( const wxString& aFileName )
|
|||
|
||||
if( fname.GetExt() != "kicad_pcb" )
|
||||
{
|
||||
ReportMessage( wxString::Format( "expecting extension kicad_pcb, got %s\n", fname.GetExt() ) );
|
||||
ReportMessage( wxString::Format( "expecting extension kicad_pcb, got %s\n",
|
||||
fname.GetExt() ) );
|
||||
return false;
|
||||
}
|
||||
|
||||
|
@ -157,7 +159,8 @@ bool KICADPCB::ReadFile( const wxString& aFileName )
|
|||
}
|
||||
catch( ... )
|
||||
{
|
||||
ReportMessage( wxString::Format( "unexpected exception while reading file: %s\n", aFileName ) );
|
||||
ReportMessage( wxString::Format( "unexpected exception while reading file: %s\n",
|
||||
aFileName ) );
|
||||
return false;
|
||||
}
|
||||
|
||||
|
@ -208,7 +211,8 @@ bool KICADPCB::parsePCB( SEXPR::SEXPR* data )
|
|||
|
||||
if( !child->IsList() )
|
||||
{
|
||||
ReportMessage( wxString::Format( "corrupt PCB file (line %d)\n", child->GetLineNumber() ) );
|
||||
ReportMessage( wxString::Format( "corrupt PCB file (line %d)\n",
|
||||
child->GetLineNumber() ) );
|
||||
return false;
|
||||
}
|
||||
|
||||
|
@ -222,6 +226,8 @@ bool KICADPCB::parsePCB( SEXPR::SEXPR* data )
|
|||
result = result && parseLayers( child );
|
||||
else if( symname == "module" )
|
||||
result = result && parseModule( child );
|
||||
else if( symname == "footprint" )
|
||||
result = result && parseModule( child );
|
||||
else if( symname == "gr_arc" )
|
||||
result = result && parseCurve( child, CURVE_ARC );
|
||||
else if( symname == "gr_line" )
|
||||
|
@ -253,7 +259,8 @@ bool KICADPCB::parseGeneral( SEXPR::SEXPR* data )
|
|||
|
||||
if( !child->IsList() )
|
||||
{
|
||||
ReportMessage( wxString::Format( "corrupt PCB file (line %d)\n", child->GetLineNumber() ) );
|
||||
ReportMessage( wxString::Format( "corrupt PCB file (line %d)\n",
|
||||
child->GetLineNumber() ) );
|
||||
return false;
|
||||
}
|
||||
|
||||
|
@ -267,8 +274,8 @@ bool KICADPCB::parseGeneral( SEXPR::SEXPR* data )
|
|||
}
|
||||
|
||||
ReportMessage( wxString::Format( "corrupt PCB file (line %d)\n"
|
||||
"no PCB thickness specified in general section\n",
|
||||
child->GetLineNumber() ) );
|
||||
"no PCB thickness specified in general section\n",
|
||||
child->GetLineNumber() ) );
|
||||
return false;
|
||||
}
|
||||
|
||||
|
@ -278,14 +285,15 @@ bool KICADPCB::parseLayers( SEXPR::SEXPR* data )
|
|||
size_t nc = data->GetNumberOfChildren();
|
||||
SEXPR::SEXPR* child = NULL;
|
||||
|
||||
// Read the layername and the correstponding layer id list:
|
||||
// Read the layername and the corresponding layer id list:
|
||||
for( size_t i = 1; i < nc; ++i )
|
||||
{
|
||||
child = data->GetChild( i );
|
||||
|
||||
if( !child->IsList() )
|
||||
{
|
||||
ReportMessage( wxString::Format( "corrupt PCB file (line %d)\n", child->GetLineNumber() ) );
|
||||
ReportMessage( wxString::Format( "corrupt PCB file (line %d)\n",
|
||||
child->GetLineNumber() ) );
|
||||
return false;
|
||||
}
|
||||
std::string ref;
|
||||
|
@ -301,6 +309,7 @@ bool KICADPCB::parseLayers( SEXPR::SEXPR* data )
|
|||
return true;
|
||||
}
|
||||
|
||||
|
||||
int KICADPCB::GetLayerId( std::string& aLayerName )
|
||||
{
|
||||
int lid = -1;
|
||||
|
@ -336,7 +345,8 @@ bool KICADPCB::parseSetup( SEXPR::SEXPR* data )
|
|||
if( child->GetNumberOfChildren() != 3 )
|
||||
{
|
||||
ReportMessage( wxString::Format(
|
||||
"corrupt PCB file (line %d): grid_origin has %d children (expected: 3)\n",
|
||||
"corrupt PCB file (line %d): grid_origin has %d children "
|
||||
"(expected: 3)\n",
|
||||
child->GetLineNumber(), child->GetNumberOfChildren() ) );
|
||||
return false;
|
||||
}
|
||||
|
@ -350,7 +360,8 @@ bool KICADPCB::parseSetup( SEXPR::SEXPR* data )
|
|||
if( child->GetNumberOfChildren() != 3 )
|
||||
{
|
||||
ReportMessage( wxString::Format(
|
||||
"corrupt PCB file (line %d)m: aux_axis_origin has %d children (expected: 3)\n",
|
||||
"corrupt PCB file (line %d)m: aux_axis_origin has %d children "
|
||||
"(expected: 3)\n",
|
||||
child->GetLineNumber(), child->GetNumberOfChildren() ) );
|
||||
return false;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue