From 846b2ae24ee558fda4797198a853334c8c99c4ce Mon Sep 17 00:00:00 2001 From: Fat-Zer Date: Fri, 2 Jan 2015 08:52:29 +0100 Subject: [PATCH] Fix Bug #1381287 (CvPCB ignores the footprint filter field on aliased components) --- common/netlist.keywords | 2 ++ pcbnew/kicad_netlist_reader.cpp | 25 +++++++++++++++++++++++++ 2 files changed, 27 insertions(+) diff --git a/common/netlist.keywords b/common/netlist.keywords index 2132e6b974..98e949b973 100644 --- a/common/netlist.keywords +++ b/common/netlist.keywords @@ -36,3 +36,5 @@ tstamps uri value version +aliases +alias diff --git a/pcbnew/kicad_netlist_reader.cpp b/pcbnew/kicad_netlist_reader.cpp index aea7a3e5ad..a1a0f5f25f 100644 --- a/pcbnew/kicad_netlist_reader.cpp +++ b/pcbnew/kicad_netlist_reader.cpp @@ -386,6 +386,9 @@ void KICAD_NETLIST_PARSER::parseLibPartList() throw( IO_ERROR, PARSE_ERROR ) { /* Parses a section like * (libpart (lib device) (part C) + * (aliases + * (alias Cxx) + * (alias Cyy)) * (description "Condensateur non polarise") * (footprints * (fp SM*) @@ -405,6 +408,7 @@ void KICAD_NETLIST_PARSER::parseLibPartList() throw( IO_ERROR, PARSE_ERROR ) wxString libName; wxString libPartName; wxArrayString footprintFilters; + wxArrayString aliases; // The last token read was libpart, so read the next token while( (token = NextTok()) != T_RIGHT ) @@ -443,6 +447,20 @@ void KICAD_NETLIST_PARSER::parseLibPartList() throw( IO_ERROR, PARSE_ERROR ) break; + case T_aliases: + while( (token = NextTok()) != T_RIGHT ) + { + if( token == T_LEFT ) + token = NextTok(); + + if( token != T_alias ) + Expecting( T_alias ); + + NeedSYMBOLorNUMBER(); + aliases.Add( FROM_UTF8( CurText() ) ); + NeedRIGHT(); + } + break; default: // Skip not used data (i.e all other tokens) skipCurrent(); @@ -457,5 +475,12 @@ void KICAD_NETLIST_PARSER::parseLibPartList() throw( IO_ERROR, PARSE_ERROR ) if( component->IsLibSource( libName, libPartName ) ) component->SetFootprintFilters( footprintFilters ); + + for( unsigned jj = 0; jj < aliases.GetCount(); jj++ ) + { + if( component->IsLibSource( libName, aliases[jj] ) ) + component->SetFootprintFilters( footprintFilters ); + } + } }