From 6654c030413604bd24ec08fe300b7d3e3c3800ed Mon Sep 17 00:00:00 2001 From: Jeff Young Date: Sun, 15 Nov 2020 13:58:21 +0000 Subject: [PATCH] Embarking on the next adventure: component -> symbol. --- eeschema/CMakeLists.txt | 4 +- eeschema/connection_graph.cpp | 2 +- eeschema/cross-probing.cpp | 16 +- eeschema/dialogs/dialog_bom.cpp | 2 +- eeschema/erc.cpp | 4 +- ...exporter.cpp => netlist_exporter_base.cpp} | 118 +++++++-------- ...ist_exporter.h => netlist_exporter_base.h} | 100 ++++++------- .../netlist_exporter_cadstar.cpp | 43 +++--- .../netlist_exporter_cadstar.h | 6 +- .../netlist_exporter_kicad.cpp | 6 +- .../netlist_exporter_kicad.h | 10 +- .../netlist_exporter_orcadpcb2.cpp | 6 +- .../netlist_exporter_orcadpcb2.h | 6 +- .../netlist_exporter_pspice.cpp | 8 +- .../netlist_exporter_pspice.h | 8 +- ...r_generic.cpp => netlist_exporter_xml.cpp} | 138 +++++++++--------- ...orter_generic.h => netlist_exporter_xml.h} | 18 +-- .../netlist_exporters/netlist_generator.cpp | 18 ++- eeschema/sch_connection.cpp | 3 +- eeschema/sch_pin.cpp | 20 +-- eeschema/sch_pin.h | 2 +- eeschema/sheet.cpp | 9 +- eeschema/sim/sim_plot_frame.h | 2 +- eeschema/tools/backannotate.cpp | 2 +- qa/eeschema/test_sch_pin.cpp | 36 ++--- 25 files changed, 291 insertions(+), 296 deletions(-) rename eeschema/netlist_exporters/{netlist_exporter.cpp => netlist_exporter_base.cpp} (57%) rename eeschema/netlist_exporters/{netlist_exporter.h => netlist_exporter_base.h} (62%) rename eeschema/netlist_exporters/{netlist_exporter_generic.cpp => netlist_exporter_xml.cpp} (82%) rename eeschema/netlist_exporters/{netlist_exporter_generic.h => netlist_exporter_xml.h} (91%) diff --git a/eeschema/CMakeLists.txt b/eeschema/CMakeLists.txt index 168fef2bea..e91e7077de 100644 --- a/eeschema/CMakeLists.txt +++ b/eeschema/CMakeLists.txt @@ -237,9 +237,9 @@ set( EESCHEMA_SRCS transform.cpp sch_iref.cpp - netlist_exporters/netlist_exporter.cpp + netlist_exporters/netlist_exporter_base.cpp netlist_exporters/netlist_exporter_cadstar.cpp - netlist_exporters/netlist_exporter_generic.cpp + netlist_exporters/netlist_exporter_xml.cpp netlist_exporters/netlist_exporter_kicad.cpp netlist_exporters/netlist_exporter_orcadpcb2.cpp netlist_exporters/netlist_exporter_pspice.cpp diff --git a/eeschema/connection_graph.cpp b/eeschema/connection_graph.cpp index 6779fa2533..d8356bce81 100644 --- a/eeschema/connection_graph.cpp +++ b/eeschema/connection_graph.cpp @@ -77,7 +77,7 @@ bool CONNECTION_SUBGRAPH::ResolveDrivers( bool aCreateMarkers ) PRIORITY item_priority = GetDriverPriority( item ); if( item_priority == PRIORITY::PIN - && !static_cast( item )->GetParentComponent()->IsInNetlist() ) + && !static_cast( item )->GetParentSymbol()->IsInNetlist() ) continue; if( item_priority >= PRIORITY::HIER_LABEL ) diff --git a/eeschema/cross-probing.cpp b/eeschema/cross-probing.cpp index 5c5fef2be4..cfef06a19f 100644 --- a/eeschema/cross-probing.cpp +++ b/eeschema/cross-probing.cpp @@ -368,7 +368,7 @@ void SCH_EDIT_FRAME::ExecuteRemoteCommand( const char* cmdline ) } -std::string FormatProbeItem( EDA_ITEM* aItem, SCH_COMPONENT* aComp ) +std::string FormatProbeItem( EDA_ITEM* aItem, SCH_COMPONENT* aSymbol ) { // This is a keyword followed by a quoted string. @@ -376,17 +376,17 @@ std::string FormatProbeItem( EDA_ITEM* aItem, SCH_COMPONENT* aComp ) switch( aItem->Type() ) { case SCH_FIELD_T: - if( aComp ) + if( aSymbol ) { return StrPrintf( "$PART: \"%s\"", - TO_UTF8( aComp->GetField( REFERENCE_FIELD )->GetText() ) ); + TO_UTF8( aSymbol->GetField( REFERENCE_FIELD )->GetText() ) ); } break; case SCH_COMPONENT_T: - aComp = (SCH_COMPONENT*) aItem; + aSymbol = (SCH_COMPONENT*) aItem; return StrPrintf( "$PART: \"%s\"", - TO_UTF8( aComp->GetField( REFERENCE_FIELD )->GetText() ) ); + TO_UTF8( aSymbol->GetField( REFERENCE_FIELD )->GetText() ) ); case SCH_SHEET_T: { @@ -413,18 +413,18 @@ std::string FormatProbeItem( EDA_ITEM* aItem, SCH_COMPONENT* aComp ) case SCH_PIN_T: { SCH_PIN* pin = (SCH_PIN*) aItem; - aComp = pin->GetParentComponent(); + aSymbol = pin->GetParentSymbol(); if( !pin->GetNumber().IsEmpty() ) { return StrPrintf( "$PIN: \"%s\" $PART: \"%s\"", TO_UTF8( pin->GetNumber() ), - TO_UTF8( aComp->GetField( REFERENCE_FIELD )->GetText() ) ); + TO_UTF8( aSymbol->GetField( REFERENCE_FIELD )->GetText() ) ); } else { return StrPrintf( "$PART: \"%s\"", - TO_UTF8( aComp->GetField( REFERENCE_FIELD )->GetText() ) ); + TO_UTF8( aSymbol->GetField( REFERENCE_FIELD )->GetText() ) ); } } diff --git a/eeschema/dialogs/dialog_bom.cpp b/eeschema/dialogs/dialog_bom.cpp index 58573feddd..1592f8b237 100644 --- a/eeschema/dialogs/dialog_bom.cpp +++ b/eeschema/dialogs/dialog_bom.cpp @@ -39,7 +39,7 @@ #include #include #include -#include +#include #include #include #include diff --git a/eeschema/erc.cpp b/eeschema/erc.cpp index 4d8f4891de..38a9c3514c 100644 --- a/eeschema/erc.cpp +++ b/eeschema/erc.cpp @@ -585,8 +585,8 @@ int ERC_TESTER::TestMultUnitPinConflicts() if( !pin->GetLibPin()->GetParent()->IsMulti() ) continue; - wxString name = ( pin->GetParentComponent()->GetRef( &subgraph->m_sheet ) + - ":" + pin->GetNumber() ); + wxString name = pin->GetParentSymbol()->GetRef( &subgraph->m_sheet ) + + + ":" + pin->GetNumber(); if( !pinToNetMap.count( name ) ) { diff --git a/eeschema/netlist_exporters/netlist_exporter.cpp b/eeschema/netlist_exporters/netlist_exporter_base.cpp similarity index 57% rename from eeschema/netlist_exporters/netlist_exporter.cpp rename to eeschema/netlist_exporters/netlist_exporter_base.cpp index 6f9faecedc..d2c35e973b 100644 --- a/eeschema/netlist_exporters/netlist_exporter.cpp +++ b/eeschema/netlist_exporters/netlist_exporter_base.cpp @@ -3,7 +3,7 @@ * * Copyright (C) 1992-2017 jp.charras at wanadoo.fr * Copyright (C) 2013-2017 SoftPLC Corporation, Dick Hollenbeck - * Copyright (C) 1992-2017 KiCad Developers, see AUTHORS.TXT for contributors. + * Copyright (C) 1992-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 @@ -23,9 +23,8 @@ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA */ -#include +#include -#include #include #include @@ -36,8 +35,10 @@ #include -wxString NETLIST_EXPORTER::MakeCommandLine( const wxString& aFormatString, - const wxString& aNetlistFile, const wxString& aFinalFile, const wxString& aProjectPath ) +wxString NETLIST_EXPORTER_BASE::MakeCommandLine( const wxString& aFormatString, + const wxString& aNetlistFile, + const wxString& aFinalFile, + const wxString& aProjectPath ) { // Expand format symbols in the command line: // %B => base filename of selected output file, minus path and extension. @@ -70,7 +71,7 @@ wxString NETLIST_EXPORTER::MakeCommandLine( const wxString& aFormatString, } -SCH_COMPONENT* NETLIST_EXPORTER::findNextComponent( EDA_ITEM* aItem, SCH_SHEET_PATH* aSheetPath ) +SCH_COMPONENT* NETLIST_EXPORTER_BASE::findNextSymbol( EDA_ITEM* aItem, SCH_SHEET_PATH* aSheetPath ) { wxString ref; @@ -78,36 +79,35 @@ SCH_COMPONENT* NETLIST_EXPORTER::findNextComponent( EDA_ITEM* aItem, SCH_SHEET_P return nullptr; // found next component - SCH_COMPONENT* comp = (SCH_COMPONENT*) aItem; + SCH_COMPONENT* symbol = (SCH_COMPONENT*) aItem; - // Power symbols and other components which have the reference starting - // with "#" are not included in netlist (pseudo or virtual components) - ref = comp->GetRef( aSheetPath ); + // Power symbols and other symbols which have the reference starting with "#" are not + // included in netlist (pseudo or virtual symbols) + ref = symbol->GetRef( aSheetPath ); if( ref[0] == wxChar( '#' ) ) return nullptr; - // if( Component->m_FlagControlMulti == 1 ) + // if( symbol->m_FlagControlMulti == 1 ) // continue; /* yes */ - // removed because with multiple instances of one schematic - // (several sheets pointing to 1 screen), this will be erroneously be - // toggled. + // removed because with multiple instances of one schematic (several sheets pointing to + // 1 screen), this will be erroneously be toggled. - if( !comp->GetPartRef() ) + if( !symbol->GetPartRef() ) return nullptr; // If component is a "multi parts per package" type - if( comp->GetPartRef()->GetUnitCount() > 1 ) + if( symbol->GetPartRef()->GetUnitCount() > 1 ) { // test if this reference has already been processed, and if so skip - if( m_ReferencesAlreadyFound.Lookup( ref ) ) + if( m_referencesAlreadyFound.Lookup( ref ) ) return nullptr; } // record the usage of this library component entry. - m_LibParts.insert( comp->GetPartRef().get() ); // rejects non-unique pointers + m_libParts.insert( symbol->GetPartRef().get() ); // rejects non-unique pointers - return comp; + return symbol; } @@ -119,72 +119,72 @@ static bool sortPinsByNum( PIN_INFO& aPin1, PIN_INFO& aPin2 ) } -void NETLIST_EXPORTER::CreatePinList( SCH_COMPONENT* comp, SCH_SHEET_PATH* aSheetPath ) +void NETLIST_EXPORTER_BASE::CreatePinList( SCH_COMPONENT* aSymbol, SCH_SHEET_PATH* aSheetPath ) { - wxString ref( comp->GetRef( aSheetPath ) ); + wxString ref( aSymbol->GetRef( aSheetPath ) ); - // Power symbols and other components which have the reference starting - // with "#" are not included in netlist (pseudo or virtual components) + // Power symbols and other symbols which have the reference starting with "#" are not + // included in netlist (pseudo or virtual symbols) if( ref[0] == wxChar( '#' ) ) return; - // if( Component->m_FlagControlMulti == 1 ) + // if( aSymbol->m_FlagControlMulti == 1 ) // continue; /* yes */ - // removed because with multiple instances of one schematic - // (several sheets pointing to 1 screen), this will be erroneously be - // toggled. + // removed because with multiple instances of one schematic (several sheets pointing to + // 1 screen), this will be erroneously be toggled. - if( !comp->GetPartRef() ) + if( !aSymbol->GetPartRef() ) return; - m_SortedComponentPinList.clear(); + m_sortedSymbolPinList.clear(); - // If component is a "multi parts per package" type - if( comp->GetPartRef()->GetUnitCount() > 1 ) + // If symbol is a "multi parts per package" type + if( aSymbol->GetPartRef()->GetUnitCount() > 1 ) { - // Collect all pins for this reference designator by searching - // the entire design for other parts with the same reference designator. + // Collect all pins for this reference designator by searching the entire design for + // other parts with the same reference designator. // This is only done once, it would be too expensive otherwise. - findAllUnitsOfComponent( comp, comp->GetPartRef().get(), aSheetPath ); + findAllUnitsOfSymbol( aSymbol, aSymbol->GetPartRef().get(), aSheetPath ); } - else // entry->GetUnitCount() <= 1 means one part per package + else // GetUnitCount() <= 1 means one part per package { - for( const auto& pin : comp->GetPins( aSheetPath ) ) + CONNECTION_GRAPH* graph = m_schematic->ConnectionGraph(); + + for( const SCH_PIN* pin : aSymbol->GetPins( aSheetPath ) ) { - if( auto conn = pin->Connection( aSheetPath ) ) + if( SCH_CONNECTION* conn = pin->Connection( aSheetPath ) ) { const wxString& netName = conn->Name(); // Skip unconnected pins - CONNECTION_SUBGRAPH* sg = - m_schematic->ConnectionGraph()->FindSubgraphByName( netName, *aSheetPath ); + CONNECTION_SUBGRAPH* sg = graph->FindSubgraphByName( netName, *aSheetPath ); if( !sg || sg->m_no_connect || sg->m_items.size() < 2 ) continue; - m_SortedComponentPinList.emplace_back( pin->GetNumber(), netName ); + m_sortedSymbolPinList.emplace_back( pin->GetNumber(), netName ); } } } // Sort pins in m_SortedComponentPinList by pin number - sort( m_SortedComponentPinList.begin(), m_SortedComponentPinList.end(), sortPinsByNum ); + sort( m_sortedSymbolPinList.begin(), m_sortedSymbolPinList.end(), sortPinsByNum ); // Remove duplicate Pins in m_SortedComponentPinList eraseDuplicatePins(); // record the usage of this library component entry. - m_LibParts.insert( comp->GetPartRef().get() ); // rejects non-unique pointers + m_libParts.insert( aSymbol->GetPartRef().get() ); // rejects non-unique pointers } -void NETLIST_EXPORTER::eraseDuplicatePins() +void NETLIST_EXPORTER_BASE::eraseDuplicatePins() { - for( unsigned ii = 0; ii < m_SortedComponentPinList.size(); ii++ ) + for( unsigned ii = 0; ii < m_sortedSymbolPinList.size(); ii++ ) { - if( m_SortedComponentPinList[ii].num.empty() ) /* already deleted */ + if( m_sortedSymbolPinList[ii].num.empty() ) /* already deleted */ continue; /* Search for duplicated pins @@ -197,33 +197,34 @@ void NETLIST_EXPORTER::eraseDuplicatePins() */ int idxref = ii; - for( unsigned jj = ii + 1; jj < m_SortedComponentPinList.size(); jj++ ) + for( unsigned jj = ii + 1; jj < m_sortedSymbolPinList.size(); jj++ ) { - if( m_SortedComponentPinList[jj].num.empty() ) // Already removed + if( m_sortedSymbolPinList[jj].num.empty() ) // Already removed continue; // if other pin num, stop search, // because all pins having the same number are consecutive in list. - if( m_SortedComponentPinList[idxref].num != m_SortedComponentPinList[jj].num ) + if( m_sortedSymbolPinList[idxref].num != m_sortedSymbolPinList[jj].num ) break; - m_SortedComponentPinList[jj].num.clear(); + m_sortedSymbolPinList[jj].num.clear(); } } } -void NETLIST_EXPORTER::findAllUnitsOfComponent( SCH_COMPONENT* aComponent, - LIB_PART* aEntry, SCH_SHEET_PATH* aSheetPath ) +void NETLIST_EXPORTER_BASE::findAllUnitsOfSymbol( SCH_COMPONENT* aSymbol, + LIB_PART* aPart, SCH_SHEET_PATH* aSheetPath ) { - wxString ref = aComponent->GetRef( aSheetPath ); + wxString ref = aSymbol->GetRef( aSheetPath ); wxString ref2; - SCH_SHEET_LIST sheetList = m_schematic->GetSheets(); + SCH_SHEET_LIST sheetList = m_schematic->GetSheets(); + CONNECTION_GRAPH* graph = m_schematic->ConnectionGraph(); for( unsigned i = 0; i < sheetList.size(); i++ ) { - for( auto item : sheetList[i].LastScreen()->Items().OfType( SCH_COMPONENT_T ) ) + for( SCH_ITEM* item : sheetList[i].LastScreen()->Items().OfType( SCH_COMPONENT_T ) ) { SCH_COMPONENT* comp2 = static_cast( item ); @@ -232,20 +233,19 @@ void NETLIST_EXPORTER::findAllUnitsOfComponent( SCH_COMPONENT* aComponent, if( ref2.CmpNoCase( ref ) != 0 ) continue; - for( const auto& pin : comp2->GetPins( aSheetPath ) ) + for( const SCH_PIN* pin : comp2->GetPins( aSheetPath ) ) { - if( auto conn = pin->Connection( aSheetPath ) ) + if( SCH_CONNECTION* conn = pin->Connection( aSheetPath ) ) { const wxString& netName = conn->Name(); // Skip unconnected pins - CONNECTION_SUBGRAPH* sg = m_schematic->ConnectionGraph()->FindSubgraphByName( - netName, *aSheetPath ); + CONNECTION_SUBGRAPH* sg = graph->FindSubgraphByName( netName, *aSheetPath ); if( !sg || sg->m_no_connect || sg->m_items.size() < 2 ) continue; - m_SortedComponentPinList.emplace_back( pin->GetNumber(), netName ); + m_sortedSymbolPinList.emplace_back( pin->GetNumber(), netName ); } } } diff --git a/eeschema/netlist_exporters/netlist_exporter.h b/eeschema/netlist_exporters/netlist_exporter_base.h similarity index 62% rename from eeschema/netlist_exporters/netlist_exporter.h rename to eeschema/netlist_exporters/netlist_exporter_base.h index e1de26974e..56cdc010b9 100644 --- a/eeschema/netlist_exporters/netlist_exporter.h +++ b/eeschema/netlist_exporters/netlist_exporter_base.h @@ -90,71 +90,68 @@ struct PIN_INFO }; /** - * NETLIST_EXPORTER + * NETLIST_EXPORTER_BASE * is a abstract class used for the netlist exporters that eeschema supports. */ -class NETLIST_EXPORTER +class NETLIST_EXPORTER_BASE { protected: - /// Used to temporarily store and filter the list of pins of a schematic component - /// when generating schematic component data in netlist (comp section). No ownership - /// of members. + /// Used to temporarily store and filter the list of pins of a schematic symbol when + /// generating schematic symbol data in netlist (comp section). No ownership of members. /// TODO(snh): Descope this object - std::vector m_SortedComponentPinList; + std::vector m_sortedSymbolPinList; - /// Used for "multi parts per package" components, - /// avoids processing a lib component more than once. - UNIQUE_STRINGS m_ReferencesAlreadyFound; + /// Used for "multiple parts per package" symbols to avoid processing a lib part more than + /// once + UNIQUE_STRINGS m_referencesAlreadyFound; - /// unique library parts used. LIB_PART items are s - /// orted by names - std::set m_LibParts; + /// unique library parts used. LIB_PART items are sorted by names + std::set m_libParts; /// The schematic we're generating a netlist for - SCHEMATIC* m_schematic; + SCHEMATIC* m_schematic; /** - * Function findNextComponentAndCreatePinList - * finds a component from the DrawList and builds - * its pin list in m_SortedComponentPinList. This list is sorted by pin num. - * the component is the next actual component after aItem - * (power symbols and virtual components that have their reference starting by '#'are skipped). + * Function findNextSymbolAndCreatePinList + * finds a symbol from the DrawList and builds its pin list in m_sortedSymbolPinList. This + * list is sorted by pin num. The symbol is the next actual symbol after aSymbol. + * + * Power symbols and virtual symbols that have their reference designators starting with + * '#' are skipped. */ - void CreatePinList( SCH_COMPONENT* aItem, SCH_SHEET_PATH* aSheetPath ); + void CreatePinList( SCH_COMPONENT* aSymbol, SCH_SHEET_PATH* aSheetPath ); /** - * Checks if the given component should be processed for netlisting. - * Prevents processing multi-unit components more than once, etc. - * @param aItem is a component to check - * @param aSheetPath is the sheet to check the component for - * @return the component if it should be processed, or nullptr + * Checks if the given symbol should be processed for netlisting. + * Prevents processing multi-unit symbols more than once, etc. + * @param aItem is a symbol to check + * @param aSheetPath is the sheet to check the symbol for + * @return the symbol if it should be processed, or nullptr */ - SCH_COMPONENT* findNextComponent( EDA_ITEM* aItem, SCH_SHEET_PATH* aSheetPath ); + SCH_COMPONENT* findNextSymbol( EDA_ITEM* aItem, SCH_SHEET_PATH* aSheetPath ); /** * Function eraseDuplicatePins - * erase duplicate Pins from m_SortedComponentPinList (i.e. set pointer in this list to NULL). - * (This is a list of pins found in the whole schematic, for a single - * component.) These duplicate pins were put in list because some pins (powers... ) - * are found more than one time when we have a multiple parts per package - * component. For instance, a 74ls00 has 4 parts, and therefore the VCC pin - * and GND pin appears 4 times in the list. + * erase duplicate Pins from m_sortedSymbolPinList (i.e. set pointer in this list to NULL). + * (This is a list of pins found in the whole schematic, for a single symbol.) These + * duplicate pins were put in list because some pins (power pins...) are found more than + * once when in "multiple parts per package" symbols. For instance, a 74ls00 has 4 parts, + * and therefore the VCC pin and GND pin appears 4 times in the list. * Note: this list *MUST* be sorted by pin number (.m_PinNum member value) * Also set the m_Flag member of "removed" NETLIST_OBJECT pin item to 1 */ void eraseDuplicatePins(); /** - * Function findAllUnitsOfComponent - * is used for "multiple parts per package" components. + * Function findAllUnitsOfSymbol + * is used for "multiple parts per package" symbols. *

- * Search the entire design for all units of \a aComponent based on - * matching reference designator, and for each unit, add all its pins - * to the temporary sorted pin list, m_SortedComponentPinList. + * Search the entire design for all units of \a aSymbol based on matching reference + * designator, and for each unit, add all its pins to the temporary sorted pin list, + * m_sortedSymbolPinList. */ - void findAllUnitsOfComponent( SCH_COMPONENT* aComponent, - LIB_PART* aEntry, - SCH_SHEET_PATH* aSheetPath ); + void findAllUnitsOfSymbol( SCH_COMPONENT* aSymbol, LIB_PART* aPart, + SCH_SHEET_PATH* aSheetPath ); public: @@ -164,13 +161,13 @@ public: * @param aMasterList we take ownership of this here. * @param aLibTable is the symbol library table of the project. */ - NETLIST_EXPORTER( SCHEMATIC* aSchematic ) : + NETLIST_EXPORTER_BASE( SCHEMATIC* aSchematic ) : m_schematic( aSchematic ) { wxASSERT( aSchematic ); } - virtual ~NETLIST_EXPORTER() + virtual ~NETLIST_EXPORTER_BASE() { } @@ -185,9 +182,8 @@ public: /** * Function MakeCommandLine - * builds up a string that describes a command line for - * executing a child process. The input and output file names - * along with any options to the executable are all possibly + * builds up a string that describes a command line for executing a child process. The + * input and output file names along with any options to the executable are all possibly * in the returned string. * * @param aFormatString holds: @@ -197,12 +193,10 @@ public: *

  • formatting sequences, see below. * * - * @param aNetlistFile is the name of the input file for the - * external program, that is a intermediate netlist file in xml format. - * @param aFinalFile is the name of the output file that - * the user expects. - * @param aProjectDirectory is used for %P replacement, it should omit - * the trailing '/'. + * @param aNetlistFile is the name of the input file for the external program, that is a + * intermediate netlist file in xml format. + * @param aFinalFile is the name of the output file that the user expects. + * @param aProjectDirectory is used for %P replacement, it should omit the trailing '/'. * *

    Supported formatting sequences and their meaning: *

      @@ -215,10 +209,8 @@ public: *
    • %P => project directory, without name and without trailing '/' *
    */ - static wxString MakeCommandLine( const wxString& aFormatString, - const wxString& aNetlistFile, const wxString& aFinalFile, - const wxString& aProjectDirectory - ); + static wxString MakeCommandLine( const wxString& aFormatString, const wxString& aNetlistFile, + const wxString& aFinalFile, const wxString& aProjectDirectory ); }; #endif diff --git a/eeschema/netlist_exporters/netlist_exporter_cadstar.cpp b/eeschema/netlist_exporters/netlist_exporter_cadstar.cpp index 83cbabbdb8..12c2a875b2 100644 --- a/eeschema/netlist_exporters/netlist_exporter_cadstar.cpp +++ b/eeschema/netlist_exporters/netlist_exporter_cadstar.cpp @@ -53,7 +53,7 @@ bool NETLIST_EXPORTER_CADSTAR::WriteNetlist( const wxString& aOutFileName, unsig wxString StartCmpDesc = StartLine + wxT( "ADD_COM" ); wxString msg; wxString footprint; - SCH_COMPONENT* component; + SCH_COMPONENT* symbol; wxString title = wxT( "Eeschema " ) + GetBuildVersion(); ret |= fprintf( f, "%sHEA\n", TO_UTF8( StartLine ) ); @@ -63,7 +63,7 @@ bool NETLIST_EXPORTER_CADSTAR::WriteNetlist( const wxString& aOutFileName, unsig ret |= fprintf( f, ".TYP FULL\n\n" ); // Create netlist footprints section - m_ReferencesAlreadyFound.Clear(); + m_referencesAlreadyFound.Clear(); SCH_SHEET_LIST sheetList = m_schematic->GetSheets(); @@ -71,23 +71,23 @@ bool NETLIST_EXPORTER_CADSTAR::WriteNetlist( const wxString& aOutFileName, unsig { std::vector cmps; - for( auto item : sheetList[i].LastScreen()->Items().OfType( SCH_COMPONENT_T ) ) + for( SCH_ITEM* item : sheetList[i].LastScreen()->Items().OfType( SCH_COMPONENT_T ) ) { - component = findNextComponent( item, &sheetList[i] ); + symbol = findNextSymbol( item, &sheetList[ i ] ); - if( !component ) + if( !symbol ) continue; - if( !component->GetField( FOOTPRINT_FIELD )->IsVoid() ) - footprint = component->GetField( FOOTPRINT_FIELD )->GetShownText(); + if( !symbol->GetField( FOOTPRINT_FIELD )->IsVoid() ) + footprint = symbol->GetField( FOOTPRINT_FIELD )->GetShownText(); else footprint = "$noname"; - msg = component->GetRef( &sheetList[i] ); + msg = symbol->GetRef( &sheetList[i] ); ret |= fprintf( f, "%s ", TO_UTF8( StartCmpDesc ) ); ret |= fprintf( f, "%s", TO_UTF8( msg ) ); - msg = component->GetValue( &sheetList[i] ); + msg = symbol->GetValue( &sheetList[i] ); msg.Replace( wxT( " " ), wxT( "_" ) ); ret |= fprintf( f, " \"%s\"", TO_UTF8( msg ) ); ret |= fprintf( f, " \"%s\"", TO_UTF8( footprint ) ); @@ -139,10 +139,10 @@ bool NETLIST_EXPORTER_CADSTAR::writeListOfNets( FILE* f ) // Netlist ordering: Net name, then ref des, then pin name std::sort( sorted_items.begin(), sorted_items.end(), - []( auto a, auto b ) + []( std::pair a, std::pair b ) { - wxString ref_a = a.first->GetParentComponent()->GetRef( &a.second ); - wxString ref_b = b.first->GetParentComponent()->GetRef( &b.second ); + wxString ref_a = a.first->GetParentSymbol()->GetRef( &a.second ); + wxString ref_b = b.first->GetParentSymbol()->GetRef( &b.second ); if( ref_a == ref_b ) return a.first->GetNumber() < b.first->GetNumber(); @@ -154,10 +154,10 @@ bool NETLIST_EXPORTER_CADSTAR::writeListOfNets( FILE* f ) // pins across units. If the user connects the pins on each unit, they will // appear on separate subgraphs. Remove those here: sorted_items.erase( std::unique( sorted_items.begin(), sorted_items.end(), - []( auto a, auto b ) + []( std::pair a, std::pair b ) { - wxString ref_a = a.first->GetParentComponent()->GetRef( &a.second ); - wxString ref_b = b.first->GetParentComponent()->GetRef( &b.second ); + wxString ref_a = a.first->GetParentSymbol()->GetRef( &a.second ); + wxString ref_b = b.first->GetParentSymbol()->GetRef( &b.second ); return ref_a == ref_b && a.first->GetNumber() == b.first->GetNumber(); } ), @@ -170,20 +170,21 @@ bool NETLIST_EXPORTER_CADSTAR::writeListOfNets( FILE* f ) SCH_PIN* pin = pair.first; SCH_SHEET_PATH sheet = pair.second; - wxString refText = pin->GetParentComponent()->GetRef( &sheet ); + wxString refText = pin->GetParentSymbol()->GetRef( &sheet ); wxString pinText = pin->GetNumber(); - // Skip power symbols and virtual components + // Skip power symbols and virtual symbols if( refText[0] == wxChar( '#' ) ) continue; switch( print_ter ) { case 0: - { - InitNetDescLine.Printf( - wxT( "\n%s %s %.4s %s" ), InitNetDesc, refText, pinText, netName ); - } + InitNetDescLine.Printf( wxT( "\n%s %s %.4s %s" ), + InitNetDesc, + refText, + pinText, + netName ); print_ter++; break; diff --git a/eeschema/netlist_exporters/netlist_exporter_cadstar.h b/eeschema/netlist_exporters/netlist_exporter_cadstar.h index d6704e1af8..cac863d939 100644 --- a/eeschema/netlist_exporters/netlist_exporter_cadstar.h +++ b/eeschema/netlist_exporters/netlist_exporter_cadstar.h @@ -26,14 +26,14 @@ #ifndef NETLIST_EXPORTER_CADSTAR_H #define NETLIST_EXPORTER_CADSTAR_H -#include "netlist_exporter.h" +#include "netlist_exporter_base.h" /** * NETLIST_EXPORTER_CADSTAR * generates a netlist compatible with CADSTAR */ -class NETLIST_EXPORTER_CADSTAR : public NETLIST_EXPORTER +class NETLIST_EXPORTER_CADSTAR : public NETLIST_EXPORTER_BASE { /** * Function writeListOfNetsCADSTAR @@ -49,7 +49,7 @@ class NETLIST_EXPORTER_CADSTAR : public NETLIST_EXPORTER public: NETLIST_EXPORTER_CADSTAR( SCHEMATIC* aSchematic ) : - NETLIST_EXPORTER( aSchematic ) + NETLIST_EXPORTER_BASE( aSchematic ) { } diff --git a/eeschema/netlist_exporters/netlist_exporter_kicad.cpp b/eeschema/netlist_exporters/netlist_exporter_kicad.cpp index 2a66ac042e..05f8dc885a 100644 --- a/eeschema/netlist_exporters/netlist_exporter_kicad.cpp +++ b/eeschema/netlist_exporters/netlist_exporter_kicad.cpp @@ -25,14 +25,16 @@ #include -#include #include -#include #include #include #include "netlist_exporter_kicad.h" +/** + * Generate the KiCad netlist format supported by Pcbnew. It is basically the XML netlist + * just formatted slightly different. + */ bool NETLIST_EXPORTER_KICAD::WriteNetlist( const wxString& aOutFileName, unsigned aNetlistOptions ) { try diff --git a/eeschema/netlist_exporters/netlist_exporter_kicad.h b/eeschema/netlist_exporters/netlist_exporter_kicad.h index c59dc93804..f6a5b763e1 100644 --- a/eeschema/netlist_exporters/netlist_exporter_kicad.h +++ b/eeschema/netlist_exporters/netlist_exporter_kicad.h @@ -26,19 +26,19 @@ #ifndef NETLIST_EXPORTER_KICAD_H #define NETLIST_EXPORTER_KICAD_H -#include +#include class OUTPUTFORMATTER; /** - * Generate the KiCad netlist format supported by Pcbnew. It is basically the generic - * netlist format just formatted slightly different. + * Generate the KiCad netlist format supported by Pcbnew. It is basically the XML netlist + * just formatted slightly different. */ -class NETLIST_EXPORTER_KICAD : public NETLIST_EXPORTER_GENERIC +class NETLIST_EXPORTER_KICAD : public NETLIST_EXPORTER_XML { public: NETLIST_EXPORTER_KICAD( SCHEMATIC* aSchematic ) : - NETLIST_EXPORTER_GENERIC( aSchematic ) + NETLIST_EXPORTER_XML( aSchematic ) { m_resolveTextVars = false; } diff --git a/eeschema/netlist_exporters/netlist_exporter_orcadpcb2.cpp b/eeschema/netlist_exporters/netlist_exporter_orcadpcb2.cpp index 4ba411d282..621a7170a9 100644 --- a/eeschema/netlist_exporters/netlist_exporter_orcadpcb2.cpp +++ b/eeschema/netlist_exporters/netlist_exporter_orcadpcb2.cpp @@ -61,7 +61,7 @@ bool NETLIST_EXPORTER_ORCADPCB2::WriteNetlist( const wxString& aOutFileName, NETLIST_HEAD_STRING, TO_UTF8( DateAndTime() ) ); // Create netlist footprints section - m_ReferencesAlreadyFound.Clear(); + m_referencesAlreadyFound.Clear(); SCH_SHEET_LIST sheetList = m_schematic->GetSheets(); @@ -72,7 +72,7 @@ bool NETLIST_EXPORTER_ORCADPCB2::WriteNetlist( const wxString& aOutFileName, // Process component attributes for( auto item : sheet.LastScreen()->Items().OfType( SCH_COMPONENT_T ) ) { - SCH_COMPONENT* comp = findNextComponent( item, &sheet ); + SCH_COMPONENT* comp = findNextSymbol( item, &sheet ); if( !comp ) continue; @@ -104,7 +104,7 @@ bool NETLIST_EXPORTER_ORCADPCB2::WriteNetlist( const wxString& aOutFileName, ret |= fprintf( f, "\n" ); // Write pin list: - for( const PIN_INFO& pin : m_SortedComponentPinList ) + for( const PIN_INFO& pin : m_sortedSymbolPinList ) { netName = pin.netName; netName.Replace( wxT( " " ), wxT( "_" ) ); diff --git a/eeschema/netlist_exporters/netlist_exporter_orcadpcb2.h b/eeschema/netlist_exporters/netlist_exporter_orcadpcb2.h index b599db4ade..0a54f07ecc 100644 --- a/eeschema/netlist_exporters/netlist_exporter_orcadpcb2.h +++ b/eeschema/netlist_exporters/netlist_exporter_orcadpcb2.h @@ -26,17 +26,17 @@ #ifndef NETLIST_EXPORTER_ORCADPCB2_H #define NETLIST_EXPORTER_ORCADPCB2_H -#include "netlist_exporter.h" +#include "netlist_exporter_base.h" /** * NETLIST_EXPORTER_ORCADPCB2 * generates a netlist compatible with OrCAD */ -class NETLIST_EXPORTER_ORCADPCB2 : public NETLIST_EXPORTER +class NETLIST_EXPORTER_ORCADPCB2 : public NETLIST_EXPORTER_BASE { public: NETLIST_EXPORTER_ORCADPCB2( SCHEMATIC* aSchematic ) : - NETLIST_EXPORTER( aSchematic ) + NETLIST_EXPORTER_BASE( aSchematic ) { } diff --git a/eeschema/netlist_exporters/netlist_exporter_pspice.cpp b/eeschema/netlist_exporters/netlist_exporter_pspice.cpp index 082d482912..81d61ae029 100644 --- a/eeschema/netlist_exporters/netlist_exporter_pspice.cpp +++ b/eeschema/netlist_exporters/netlist_exporter_pspice.cpp @@ -274,8 +274,8 @@ bool NETLIST_EXPORTER_PSPICE::ProcessNetlist( unsigned aCtl ) int netIdx = 1; m_libraries.clear(); - m_ReferencesAlreadyFound.Clear(); - m_LibParts.clear(); + m_referencesAlreadyFound.Clear(); + m_libParts.clear(); UpdateDirectives( aCtl ); @@ -286,7 +286,7 @@ bool NETLIST_EXPORTER_PSPICE::ProcessNetlist( unsigned aCtl ) // Process component attributes to find Spice directives for( auto item : sheet.LastScreen()->Items().OfType( SCH_COMPONENT_T ) ) { - SCH_COMPONENT* comp = findNextComponent( item, &sheet ); + SCH_COMPONENT* comp = findNextSymbol( item, &sheet ); if( !comp ) continue; @@ -322,7 +322,7 @@ bool NETLIST_EXPORTER_PSPICE::ProcessNetlist( unsigned aCtl ) wxArrayString pinNames; // Store pin information - for( const PIN_INFO& pin : m_SortedComponentPinList ) + for( const PIN_INFO& pin : m_sortedSymbolPinList ) { // Create net mapping spiceItem.m_pins.push_back( pin.netName ); diff --git a/eeschema/netlist_exporters/netlist_exporter_pspice.h b/eeschema/netlist_exporters/netlist_exporter_pspice.h index fd3450e662..45ac604874 100644 --- a/eeschema/netlist_exporters/netlist_exporter_pspice.h +++ b/eeschema/netlist_exporters/netlist_exporter_pspice.h @@ -26,7 +26,7 @@ #ifndef NETLIST_EXPORTER_PSPICE_H #define NETLIST_EXPORTER_PSPICE_H -#include "netlist_exporter.h" +#include "netlist_exporter_base.h" #include #include @@ -98,11 +98,11 @@ struct SPICE_ITEM * NETLIST_EXPORTER_PSPICE * generates a PSPICE compatible netlist */ -class NETLIST_EXPORTER_PSPICE : public NETLIST_EXPORTER +class NETLIST_EXPORTER_PSPICE : public NETLIST_EXPORTER_BASE { public: NETLIST_EXPORTER_PSPICE( SCHEMATIC* aSchematic ) : - NETLIST_EXPORTER( aSchematic ) + NETLIST_EXPORTER_BASE( aSchematic ) { } @@ -140,7 +140,7 @@ public: */ bool WriteNetlist( const wxString& aOutFileName, unsigned aNetlistOptions ) override; - ///> @copydoc NETLIST_EXPORTER::Format() + ///> @copydoc NETLIST_EXPORTER_BASE::Format() bool Format( OUTPUTFORMATTER* aFormatter, unsigned aCtl ); /** diff --git a/eeschema/netlist_exporters/netlist_exporter_generic.cpp b/eeschema/netlist_exporters/netlist_exporter_xml.cpp similarity index 82% rename from eeschema/netlist_exporters/netlist_exporter_generic.cpp rename to eeschema/netlist_exporters/netlist_exporter_xml.cpp index 800121363f..cb06b42e00 100644 --- a/eeschema/netlist_exporters/netlist_exporter_generic.cpp +++ b/eeschema/netlist_exporters/netlist_exporter_xml.cpp @@ -23,7 +23,7 @@ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA */ -#include "netlist_exporter_generic.h" +#include "netlist_exporter_xml.h" #include #include @@ -37,8 +37,7 @@ static bool sortPinsByNumber( LIB_PIN* aPin1, LIB_PIN* aPin2 ); -bool NETLIST_EXPORTER_GENERIC::WriteNetlist( const wxString& aOutFileName, - unsigned aNetlistOptions ) +bool NETLIST_EXPORTER_XML::WriteNetlist( const wxString& aOutFileName, unsigned aNetlistOptions ) { // output the XML format netlist. wxXmlDocument xdoc; @@ -49,7 +48,7 @@ bool NETLIST_EXPORTER_GENERIC::WriteNetlist( const wxString& aOutFileName, } -XNODE* NETLIST_EXPORTER_GENERIC::makeRoot( unsigned aCtl ) +XNODE* NETLIST_EXPORTER_XML::makeRoot( unsigned aCtl ) { XNODE* xroot = node( "export" ); @@ -60,7 +59,7 @@ XNODE* NETLIST_EXPORTER_GENERIC::makeRoot( unsigned aCtl ) xroot->AddChild( makeDesignHeader() ); if( aCtl & GNL_COMPONENTS ) - xroot->AddChild( makeComponents( aCtl ) ); + xroot->AddChild( makeSymbols( aCtl ) ); if( aCtl & GNL_PARTS ) xroot->AddChild( makeLibParts() ); @@ -87,12 +86,12 @@ struct COMP_FIELDS }; -void NETLIST_EXPORTER_GENERIC::addComponentFields( XNODE* xcomp, SCH_COMPONENT* comp, - SCH_SHEET_PATH* aSheet ) +void NETLIST_EXPORTER_XML::addSymbolFields( XNODE* aNode, SCH_COMPONENT* aSymbol, + SCH_SHEET_PATH* aSheet ) { COMP_FIELDS fields; - if( comp->GetUnitCount() > 1 ) + if( aSymbol->GetUnitCount() > 1 ) { // Sadly, each unit of a component can have its own unique fields. This // block finds the unit with the lowest number having a non blank field @@ -101,10 +100,10 @@ void NETLIST_EXPORTER_GENERIC::addComponentFields( XNODE* xcomp, SCH_COMPONENT* // any non blank fields in all units and use the first non-blank field // for each unique field name. - wxString ref = comp->GetRef( aSheet ); + wxString ref = aSymbol->GetRef( aSheet ); SCH_SHEET_LIST sheetList = m_schematic->GetSheets(); - int minUnit = comp->GetUnit(); + int minUnit = aSymbol->GetUnit(); for( unsigned i = 0; i < sheetList.size(); i++ ) { @@ -170,23 +169,23 @@ void NETLIST_EXPORTER_GENERIC::addComponentFields( XNODE* xcomp, SCH_COMPONENT* else { if( m_resolveTextVars ) - fields.value = comp->GetField( VALUE_FIELD )->GetShownText(); + fields.value = aSymbol->GetField( VALUE_FIELD )->GetShownText(); else - fields.value = comp->GetField( VALUE_FIELD )->GetText(); + fields.value = aSymbol->GetField( VALUE_FIELD )->GetText(); if( m_resolveTextVars ) - fields.footprint = comp->GetField( FOOTPRINT_FIELD )->GetShownText(); + fields.footprint = aSymbol->GetField( FOOTPRINT_FIELD )->GetShownText(); else - fields.footprint = comp->GetField( FOOTPRINT_FIELD )->GetText(); + fields.footprint = aSymbol->GetField( FOOTPRINT_FIELD )->GetText(); if( m_resolveTextVars ) - fields.datasheet = comp->GetField( DATASHEET_FIELD )->GetShownText(); + fields.datasheet = aSymbol->GetField( DATASHEET_FIELD )->GetShownText(); else - fields.datasheet = comp->GetField( DATASHEET_FIELD )->GetText(); + fields.datasheet = aSymbol->GetField( DATASHEET_FIELD )->GetText(); - for( int fldNdx = MANDATORY_FIELDS; fldNdx < comp->GetFieldCount(); ++fldNdx ) + for( int fldNdx = MANDATORY_FIELDS; fldNdx < aSymbol->GetFieldCount(); ++fldNdx ) { - SCH_FIELD* f = comp->GetField( fldNdx ); + SCH_FIELD* f = aSymbol->GetField( fldNdx ); if( f->GetText().size() ) { @@ -200,20 +199,20 @@ void NETLIST_EXPORTER_GENERIC::addComponentFields( XNODE* xcomp, SCH_COMPONENT* // Do not output field values blank in netlist: if( fields.value.size() ) - xcomp->AddChild( node( "value", fields.value ) ); + aNode->AddChild( node( "value", fields.value ) ); else // value field always written in netlist - xcomp->AddChild( node( "value", "~" ) ); + aNode->AddChild( node( "value", "~" ) ); if( fields.footprint.size() ) - xcomp->AddChild( node( "footprint", fields.footprint ) ); + aNode->AddChild( node( "footprint", fields.footprint ) ); if( fields.datasheet.size() ) - xcomp->AddChild( node( "datasheet", fields.datasheet ) ); + aNode->AddChild( node( "datasheet", fields.datasheet ) ); if( fields.f.size() ) { XNODE* xfields; - xcomp->AddChild( xfields = node( "fields" ) ); + aNode->AddChild( xfields = node( "fields" ) ); // non MANDATORY fields are output alphabetically for( std::map< wxString, wxString >::const_iterator it = fields.f.begin(); @@ -227,12 +226,12 @@ void NETLIST_EXPORTER_GENERIC::addComponentFields( XNODE* xcomp, SCH_COMPONENT* } -XNODE* NETLIST_EXPORTER_GENERIC::makeComponents( unsigned aCtl ) +XNODE* NETLIST_EXPORTER_XML::makeSymbols( unsigned aCtl ) { XNODE* xcomps = node( "components" ); - m_ReferencesAlreadyFound.Clear(); - m_LibParts.clear(); + m_referencesAlreadyFound.Clear(); + m_libParts.clear(); SCH_SHEET_LIST sheetList = m_schematic->GetSheets(); @@ -249,62 +248,61 @@ XNODE* NETLIST_EXPORTER_GENERIC::makeComponents( unsigned aCtl ) b->GetRef( &sheet ) ) < 0 ); }; - std::set ordered_components( cmp ); + std::set ordered_symbols( cmp ); for( SCH_ITEM* item : sheetList[ii].LastScreen()->Items().OfType( SCH_COMPONENT_T ) ) { - SCH_COMPONENT* comp = static_cast( item ); - auto test = ordered_components.insert( comp ); + SCH_COMPONENT* symbol = static_cast( item ); + auto test = ordered_symbols.insert( symbol ); if( !test.second ) { - if( ( *( test.first ) )->GetUnit() > comp->GetUnit() ) + if( ( *( test.first ) )->GetUnit() > symbol->GetUnit() ) { - ordered_components.erase( test.first ); - ordered_components.insert( comp ); + ordered_symbols.erase( test.first ); + ordered_symbols.insert( symbol ); } } } - for( EDA_ITEM* item : ordered_components ) + for( EDA_ITEM* item : ordered_symbols ) { - SCH_COMPONENT* comp = findNextComponent( item, &sheet ); + SCH_COMPONENT* symbol = findNextSymbol( item, &sheet ); - if( !comp - || ( ( aCtl & GNL_OPT_BOM ) && !comp->GetIncludeInBom() ) - || ( ( aCtl & GNL_OPT_KICAD ) && !comp->GetIncludeOnBoard() ) ) + if( !symbol + || ( ( aCtl & GNL_OPT_BOM ) && !symbol->GetIncludeInBom() ) + || ( ( aCtl & GNL_OPT_KICAD ) && !symbol->GetIncludeOnBoard() ) ) { continue; } - // Output the component's elements in order of expected access frequency. - // This may not always look best, but it will allow faster execution - // under XSL processing systems which do sequential searching within - // an element. + // Output the symbol's elements in order of expected access frequency. This may + // not always look best, but it will allow faster execution under XSL processing + // systems which do sequential searching within an element. XNODE* xcomp; // current component being constructed xcomps->AddChild( xcomp = node( "comp" ) ); - xcomp->AddAttribute( "ref", comp->GetRef( &sheet ) ); - addComponentFields( xcomp, comp, &sheetList[ii] ); + xcomp->AddAttribute( "ref", symbol->GetRef( &sheet ) ); + addSymbolFields( xcomp, symbol, &sheetList[ ii ] ); XNODE* xlibsource; xcomp->AddChild( xlibsource = node( "libsource" ) ); - // "logical" library name, which is in anticipation of a better search - // algorithm for parts based on "logical_lib.part" and where logical_lib - // is merely the library name minus path and extension. - if( comp->GetPartRef() ) - xlibsource->AddAttribute( "lib", comp->GetPartRef()->GetLibId().GetLibNickname() ); + // "logical" library name, which is in anticipation of a better search algorithm + // for parts based on "logical_lib.part" and where logical_lib is merely the library + // name minus path and extension. + if( symbol->GetPartRef() ) + xlibsource->AddAttribute( "lib", symbol->GetPartRef()->GetLibId().GetLibNickname() ); // We only want the symbol name, not the full LIB_ID. - xlibsource->AddAttribute( "part", comp->GetLibId().GetLibItemName() ); + xlibsource->AddAttribute( "part", symbol->GetLibId().GetLibItemName() ); - xlibsource->AddAttribute( "description", comp->GetDescription() ); + xlibsource->AddAttribute( "description", symbol->GetDescription() ); XNODE* xproperty; - std::vector& fields = comp->GetFields(); + std::vector& fields = symbol->GetFields(); for( size_t jj = MANDATORY_FIELDS; jj < fields.size(); ++jj ) { @@ -320,13 +318,13 @@ XNODE* NETLIST_EXPORTER_GENERIC::makeComponents( unsigned aCtl ) xproperty->AddAttribute( "value", sheetField.GetText() ); } - if( !comp->GetIncludeInBom() ) + if( !symbol->GetIncludeInBom() ) { xcomp->AddChild( xproperty = node( "property" ) ); xproperty->AddAttribute( "name", "exclude_from_bom" ); } - if( !comp->GetIncludeOnBoard() ) + if( !symbol->GetIncludeOnBoard() ) { xcomp->AddChild( xproperty = node( "property" ) ); xproperty->AddAttribute( "name", "exclude_from_board" ); @@ -337,7 +335,7 @@ XNODE* NETLIST_EXPORTER_GENERIC::makeComponents( unsigned aCtl ) xsheetpath->AddAttribute( "names", sheet.PathHumanReadable() ); xsheetpath->AddAttribute( "tstamps", sheet.PathAsString() ); - xcomp->AddChild( node( "tstamp", comp->m_Uuid.AsString() ) ); + xcomp->AddChild( node( "tstamp", symbol->m_Uuid.AsString() ) ); } } @@ -345,7 +343,7 @@ XNODE* NETLIST_EXPORTER_GENERIC::makeComponents( unsigned aCtl ) } -XNODE* NETLIST_EXPORTER_GENERIC::makeDesignHeader() +XNODE* NETLIST_EXPORTER_XML::makeDesignHeader() { SCH_SCREEN* screen; XNODE* xdesign = node( "design" ); @@ -446,7 +444,7 @@ XNODE* NETLIST_EXPORTER_GENERIC::makeDesignHeader() } -XNODE* NETLIST_EXPORTER_GENERIC::makeLibraries() +XNODE* NETLIST_EXPORTER_XML::makeLibraries() { XNODE* xlibs = node( "libraries" ); // auto_ptr SYMBOL_LIB_TABLE* symbolLibTable = m_schematic->Prj().SchSymbolLibTable(); @@ -470,7 +468,7 @@ XNODE* NETLIST_EXPORTER_GENERIC::makeLibraries() } -XNODE* NETLIST_EXPORTER_GENERIC::makeLibParts() +XNODE* NETLIST_EXPORTER_XML::makeLibParts() { XNODE* xlibparts = node( "libparts" ); // auto_ptr @@ -479,7 +477,7 @@ XNODE* NETLIST_EXPORTER_GENERIC::makeLibParts() m_libraries.clear(); - for( auto lcomp : m_LibParts ) + for( auto lcomp : m_libParts ) { wxString libNickname = lcomp->GetLibId().GetLibNickname();; @@ -573,7 +571,7 @@ XNODE* NETLIST_EXPORTER_GENERIC::makeLibParts() } -XNODE* NETLIST_EXPORTER_GENERIC::makeListOfNets( unsigned aCtl ) +XNODE* NETLIST_EXPORTER_XML::makeListOfNets( unsigned aCtl ) { XNODE* xnets = node( "nets" ); // auto_ptr if exceptions ever get used. wxString netCodeTxt; @@ -612,11 +610,11 @@ XNODE* NETLIST_EXPORTER_GENERIC::makeListOfNets( unsigned aCtl ) if( item->Type() == SCH_PIN_T ) { SCH_PIN* pin = static_cast( item ); - SCH_COMPONENT* comp = pin->GetParentComponent(); + SCH_COMPONENT* symbol = pin->GetParentSymbol(); - if( !comp - || ( ( aCtl & GNL_OPT_BOM ) && !comp->GetIncludeInBom() ) - || ( ( aCtl & GNL_OPT_KICAD ) && !comp->GetIncludeOnBoard() ) ) + if( !symbol + || ( ( aCtl & GNL_OPT_BOM ) && !symbol->GetIncludeInBom() ) + || ( ( aCtl & GNL_OPT_KICAD ) && !symbol->GetIncludeOnBoard() ) ) { continue; } @@ -631,8 +629,8 @@ XNODE* NETLIST_EXPORTER_GENERIC::makeListOfNets( unsigned aCtl ) []( const std::pair& a, const std::pair& b ) { - wxString ref_a = a.first->GetParentComponent()->GetRef( &a.second ); - wxString ref_b = b.first->GetParentComponent()->GetRef( &b.second ); + wxString ref_a = a.first->GetParentSymbol()->GetRef( &a.second ); + wxString ref_b = b.first->GetParentSymbol()->GetRef( &b.second ); if( ref_a == ref_b ) return a.first->GetNumber() < b.first->GetNumber(); @@ -647,8 +645,8 @@ XNODE* NETLIST_EXPORTER_GENERIC::makeListOfNets( unsigned aCtl ) []( const std::pair& a, const std::pair& b ) { - wxString ref_a = a.first->GetParentComponent()->GetRef( &a.second ); - wxString ref_b = b.first->GetParentComponent()->GetRef( &b.second ); + wxString ref_a = a.first->GetParentSymbol()->GetRef( &a.second ); + wxString ref_b = b.first->GetParentSymbol()->GetRef( &b.second ); return ref_a == ref_b && a.first->GetNumber() == b.first->GetNumber(); } ), @@ -659,7 +657,7 @@ XNODE* NETLIST_EXPORTER_GENERIC::makeListOfNets( unsigned aCtl ) SCH_PIN* pin = pair.first; SCH_SHEET_PATH sheet = pair.second; - wxString refText = pin->GetParentComponent()->GetRef( &sheet ); + wxString refText = pin->GetParentSymbol()->GetRef( &sheet ); wxString pinText = pin->GetNumber(); // Skip power symbols and virtual components @@ -694,8 +692,8 @@ XNODE* NETLIST_EXPORTER_GENERIC::makeListOfNets( unsigned aCtl ) } -XNODE* NETLIST_EXPORTER_GENERIC::node( const wxString& aName, - const wxString& aTextualContent /* = wxEmptyString*/ ) +XNODE* NETLIST_EXPORTER_XML::node( const wxString& aName, + const wxString& aTextualContent /* = wxEmptyString*/ ) { XNODE* n = new XNODE( wxXML_ELEMENT_NODE, aName ); diff --git a/eeschema/netlist_exporters/netlist_exporter_generic.h b/eeschema/netlist_exporters/netlist_exporter_xml.h similarity index 91% rename from eeschema/netlist_exporters/netlist_exporter_generic.h rename to eeschema/netlist_exporters/netlist_exporter_xml.h index e74da6deac..4347120b0f 100644 --- a/eeschema/netlist_exporters/netlist_exporter_generic.h +++ b/eeschema/netlist_exporters/netlist_exporter_xml.h @@ -23,10 +23,10 @@ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA */ -#ifndef NETLIST_EXPORT_GENERIC_H -#define NETLIST_EXPORT_GENERIC_H +#ifndef NETLIST_EXPORT_XML_H +#define NETLIST_EXPORT_XML_H -#include +#include #include #include // also nests: @@ -59,7 +59,7 @@ enum GNL_T * This allows using XSLT or other methods to transform the XML to other netlist formats * outside of the C++ codebase. */ -class NETLIST_EXPORTER_GENERIC : public NETLIST_EXPORTER +class NETLIST_EXPORTER_XML : public NETLIST_EXPORTER_BASE { private: std::set m_libraries; // Set of library nicknames. @@ -68,9 +68,9 @@ protected: bool m_resolveTextVars; // Export textVar references resolved public: - NETLIST_EXPORTER_GENERIC( SCHEMATIC* aSchematic ) : - NETLIST_EXPORTER( aSchematic ), - m_resolveTextVars( true ) + NETLIST_EXPORTER_XML( SCHEMATIC* aSchematic ) : + NETLIST_EXPORTER_BASE( aSchematic ), + m_resolveTextVars( true ) {} /** @@ -108,7 +108,7 @@ protected: /** * @return XNODE* - returns a sub-tree holding all the schematic components. */ - XNODE* makeComponents( unsigned aCtl ); + XNODE* makeSymbols( unsigned aCtl ); /** * Fills out a project "design" header into an XML node. @@ -135,7 +135,7 @@ protected: */ XNODE* makeLibraries(); - void addComponentFields( XNODE* xcomp, SCH_COMPONENT* comp, SCH_SHEET_PATH* aSheet ); + void addSymbolFields( XNODE* aNode, SCH_COMPONENT* aSymbol, SCH_SHEET_PATH* aSheet ); }; #endif diff --git a/eeschema/netlist_exporters/netlist_generator.cpp b/eeschema/netlist_exporters/netlist_generator.cpp index 167c32129e..110515e53d 100644 --- a/eeschema/netlist_exporters/netlist_generator.cpp +++ b/eeschema/netlist_exporters/netlist_generator.cpp @@ -34,12 +34,12 @@ #include #include -#include +#include #include #include #include #include -#include +#include bool SCH_EDIT_FRAME::WriteNetListFile( int aFormat, const wxString& aFullFileName, @@ -59,7 +59,7 @@ bool SCH_EDIT_FRAME::WriteNetListFile( int aFormat, const wxString& aFullFileNam wxString fileName = aFullFileName; - NETLIST_EXPORTER *helper; + NETLIST_EXPORTER_BASE *helper; SCHEMATIC* sch = &Schematic(); @@ -87,7 +87,7 @@ bool SCH_EDIT_FRAME::WriteNetListFile( int aFormat, const wxString& aFullFileNam tmpFile.SetExt( GENERIC_INTERMEDIATE_NETLIST_EXT ); fileName = tmpFile.GetFullPath(); - helper = new NETLIST_EXPORTER_GENERIC( sch ); + helper = new NETLIST_EXPORTER_XML( sch ); executeCommandLine = true; } break; @@ -101,14 +101,16 @@ bool SCH_EDIT_FRAME::WriteNetListFile( int aFormat, const wxString& aFullFileNam { wxString prj_dir = Prj().GetProjectPath(); + // strip trailing '/' + prj_dir = prj_dir.SubString( 0, prj_dir.Len() - 2 ); + // build full command line from user's format string, e.g.: // "xsltproc -o %O /usr/local/lib/kicad/plugins/netlist_form_pads-pcb.xsl %I" // becomes, after the user selects /tmp/s1.net as the output file from the file dialog: // "xsltproc -o /tmp/s1.net /usr/local/lib/kicad/plugins/netlist_form_pads-pcb.xsl /tmp/s1.xml" - wxString commandLine = NETLIST_EXPORTER::MakeCommandLine( m_netListerCommand, - fileName, aFullFileName, - prj_dir.SubString( 0, prj_dir.Len() - 2 ) // strip trailing '/' - ); + wxString commandLine = NETLIST_EXPORTER_BASE::MakeCommandLine( m_netListerCommand, + fileName, aFullFileName, + prj_dir ); if( aReporter ) { diff --git a/eeschema/sch_connection.cpp b/eeschema/sch_connection.cpp index 6cdc380c62..ae750d7223 100644 --- a/eeschema/sch_connection.cpp +++ b/eeschema/sch_connection.cpp @@ -264,8 +264,7 @@ bool SCH_CONNECTION::IsDriver() const auto pin = static_cast( Parent() ); // Only annotated components should drive nets - return ( pin->IsPowerConnection() - || pin->GetParentComponent()->IsAnnotated( &m_sheet ) ); + return pin->IsPowerConnection() || pin->GetParentSymbol()->IsAnnotated( &m_sheet ); } default: diff --git a/eeschema/sch_pin.cpp b/eeschema/sch_pin.cpp index 99f7a27aaa..731aa60844 100644 --- a/eeschema/sch_pin.cpp +++ b/eeschema/sch_pin.cpp @@ -139,7 +139,7 @@ bool SCH_PIN::Replace( wxFindReplaceData& aSearchData, void* aAuxData ) } -SCH_COMPONENT* SCH_PIN::GetParentComponent() const +SCH_COMPONENT* SCH_PIN::GetParentSymbol() const { return static_cast( GetParent() ); } @@ -148,7 +148,7 @@ SCH_COMPONENT* SCH_PIN::GetParentComponent() const wxString SCH_PIN::GetSelectMenuText( EDA_UNITS aUnits ) const { return wxString::Format( "%s %s", - GetParentComponent()->GetSelectMenuText( aUnits ), + GetParentSymbol()->GetSelectMenuText( aUnits ), m_libPin->GetSelectMenuText( aUnits ) ); } @@ -200,9 +200,9 @@ void SCH_PIN::GetMsgPanelInfo( EDA_DRAW_FRAME* aFrame, MSG_PANEL_ITEMS& aList ) SCH_EDIT_FRAME* schframe = dynamic_cast( aFrame ); SCH_SHEET_PATH* currentSheet = schframe ? &schframe->GetCurrentSheet() : nullptr; - SCH_COMPONENT* comp = GetParentComponent(); + SCH_COMPONENT* symbol = GetParentSymbol(); - aList.emplace_back( comp->GetRef( currentSheet ), comp->GetValue( currentSheet ), DARKCYAN ); + aList.emplace_back( symbol->GetRef( currentSheet ), symbol->GetValue( currentSheet ), DARKCYAN ); #if defined(DEBUG) @@ -244,14 +244,14 @@ wxString SCH_PIN::GetDefaultNetName( const SCH_SHEET_PATH& aPath ) wxString name = "Net-("; - name << GetParentComponent()->GetRef( &aPath ); + name << GetParentSymbol()->GetRef( &aPath ); bool annotated = true; // Add timestamp for uninitialized components if( name.Last() == '?' ) { - name << GetParentComponent()->m_Uuid.AsString(); + name << GetParentSymbol()->m_Uuid.AsString(); annotated = false; } @@ -266,20 +266,20 @@ wxString SCH_PIN::GetDefaultNetName( const SCH_SHEET_PATH& aPath ) wxPoint SCH_PIN::GetTransformedPosition() const { - TRANSFORM t = GetParentComponent()->GetTransform(); - return ( t.TransformCoordinate( GetLocalPosition() ) + GetParentComponent()->GetPosition() ); + TRANSFORM t = GetParentSymbol()->GetTransform(); + return t.TransformCoordinate( GetLocalPosition() ) + GetParentSymbol()->GetPosition(); } const EDA_RECT SCH_PIN::GetBoundingBox() const { - TRANSFORM t = GetParentComponent()->GetTransform(); + TRANSFORM t = GetParentSymbol()->GetTransform(); EDA_RECT r = m_libPin->GetBoundingBox(); r.RevertYAxis(); r = t.TransformCoordinate( r ); - r.Offset( GetParentComponent()->GetPosition() ); + r.Offset( GetParentSymbol()->GetPosition() ); return r; } diff --git a/eeschema/sch_pin.h b/eeschema/sch_pin.h index 15f7186414..ce19df779a 100644 --- a/eeschema/sch_pin.h +++ b/eeschema/sch_pin.h @@ -64,7 +64,7 @@ public: return wxT( "SCH_PIN" ); } - SCH_COMPONENT* GetParentComponent() const; + SCH_COMPONENT* GetParentSymbol() const; LIB_PIN* GetLibPin() const { return m_libPin; } diff --git a/eeschema/sheet.cpp b/eeschema/sheet.cpp index 96b3d54f5e..27c4ffc368 100644 --- a/eeschema/sheet.cpp +++ b/eeschema/sheet.cpp @@ -186,8 +186,10 @@ bool SCH_EDIT_FRAME::LoadSheetFromFile( SCH_SHEET* aSheet, SCH_SHEET_PATH* aHier SCH_SHEET_LIST sheetHierarchy( newSheet.get() ); // This is the hierarchy of the loaded file. if( CheckSheetForRecursion( newSheet.get(), aHierarchy ) - || checkForNoFullyDefinedLibIds( newSheet.get() ) ) + || checkForNoFullyDefinedLibIds( newSheet.get() ) ) + { return false; + } // Make a valiant attempt to warn the user of all possible scenarios where there could // be broken symbol library links. @@ -202,7 +204,7 @@ bool SCH_EDIT_FRAME::LoadSheetFromFile( SCH_SHEET* aSheet, SCH_SHEET_PATH* aHier wxMessageDialog::ButtonLabel cancelButtonLabel( _( "Cancel Load" ) ); if( fileName.GetPathWithSep() == Prj().GetProjectPath() - && !prjScreens.HasSchematic( fullFilename ) ) + && !prjScreens.HasSchematic( fullFilename ) ) { // A schematic in the current project path that isn't part of the current project. // It's possible the user copied this schematic from another project so the library @@ -276,8 +278,7 @@ bool SCH_EDIT_FRAME::LoadSheetFromFile( SCH_SHEET* aSheet, SCH_SHEET_PATH* aHier } catch( const IO_ERROR& ioe ) { - msg.Printf( _( "An error occurred loading the symbol library table " - "\"%s\"." ), + msg.Printf( _( "An error occurred loading the symbol library table \"%s\"." ), symLibTableFn.GetFullPath() ); DisplayErrorMessage( NULL, msg, ioe.What() ); return false; diff --git a/eeschema/sim/sim_plot_frame.h b/eeschema/sim/sim_plot_frame.h index c24a0f72ec..8d29d651bb 100644 --- a/eeschema/sim/sim_plot_frame.h +++ b/eeschema/sim/sim_plot_frame.h @@ -259,7 +259,7 @@ private: /** * @brief Filters out tuners for components that do not exist anymore. - * Decisions are based on the current NETLIST_EXPORTER data. + * Decisions are based on the current NETLIST_EXPORTER_BASE data. */ void updateTuners(); diff --git a/eeschema/tools/backannotate.cpp b/eeschema/tools/backannotate.cpp index e93f22e100..c5ecda58b7 100644 --- a/eeschema/tools/backannotate.cpp +++ b/eeschema/tools/backannotate.cpp @@ -447,7 +447,7 @@ static LABEL_SPIN_STYLE orientLabel( SCH_PIN* aPin ) ORIENT o = orientations[ 0 ]; - SCH_COMPONENT* comp = aPin->GetParentComponent(); + SCH_COMPONENT* comp = aPin->GetParentSymbol(); if( !comp ) return spin; diff --git a/qa/eeschema/test_sch_pin.cpp b/qa/eeschema/test_sch_pin.cpp index 83828c49eb..7d9f32743d 100644 --- a/qa/eeschema/test_sch_pin.cpp +++ b/qa/eeschema/test_sch_pin.cpp @@ -47,25 +47,25 @@ public: m_lib_pin->SetPosition( wxPoint( 1, -2 ) ); // local coord system is upside-down SCH_SHEET_PATH path; - m_parent_comp = new SCH_COMPONENT( *m_parent_part, m_parent_part->GetLibId(), - &path, 0, 0, wxPoint( 1, 2 ) ); - m_parent_comp->SetRef( &path, "U2" ); - m_parent_comp->UpdatePins(); + m_parent_symbol = new SCH_COMPONENT( *m_parent_part, m_parent_part->GetLibId(), + &path, 0, 0, wxPoint( 1, 2 ) ); + m_parent_symbol->SetRef( &path, "U2" ); + m_parent_symbol->UpdatePins(); - m_sch_pin = m_parent_comp->GetPins( &path )[0]; + m_sch_pin = m_parent_symbol->GetPins( &path )[0]; } ~TEST_SCH_PIN_FIXTURE() { - delete m_parent_comp; + delete m_parent_symbol; delete m_parent_part; } LIB_PART* m_parent_part; LIB_PIN* m_lib_pin; - SCH_COMPONENT* m_parent_comp; - SCH_PIN* m_sch_pin; // owned by m_parent_comp, not us + SCH_COMPONENT* m_parent_symbol; + SCH_PIN* m_sch_pin; // owned by m_parent_symbol, not us }; @@ -79,7 +79,7 @@ BOOST_FIXTURE_TEST_SUITE( SchPin, TEST_SCH_PIN_FIXTURE ) */ BOOST_AUTO_TEST_CASE( DefaultProperties ) { - BOOST_CHECK_EQUAL( m_sch_pin->GetParentComponent(), m_parent_comp ); + BOOST_CHECK_EQUAL( m_sch_pin->GetParentSymbol(), m_parent_symbol ); // Note: local coord system is upside-down; schematic coord system is not. BOOST_CHECK_EQUAL( m_sch_pin->GetLocalPosition(), wxPoint( 1, -2 ) ); @@ -101,7 +101,7 @@ BOOST_AUTO_TEST_CASE( Assign ) { SCH_PIN assigned = *m_sch_pin; - BOOST_CHECK_EQUAL( assigned.GetParentComponent(), m_parent_comp ); + BOOST_CHECK_EQUAL( assigned.GetParentSymbol(), m_parent_symbol ); BOOST_CHECK_EQUAL( assigned.GetNumber(), m_lib_pin->GetNumber() ); } @@ -112,7 +112,7 @@ BOOST_AUTO_TEST_CASE( Copy ) { SCH_PIN copied( *m_sch_pin ); - BOOST_CHECK_EQUAL( copied.GetParentComponent(), m_parent_comp ); + BOOST_CHECK_EQUAL( copied.GetParentSymbol(), m_parent_symbol ); BOOST_CHECK_EQUAL( copied.GetNumber(), m_lib_pin->GetNumber() ); } @@ -158,15 +158,15 @@ BOOST_AUTO_TEST_CASE( PinNumberingPower ) m_lib_pin->SetType( ELECTRICAL_PINTYPE::PT_POWER_IN ); m_parent_part->SetPower(); - // and update component from library... + // and update symbol from library... SCH_SHEET_PATH path; - delete m_parent_comp; - m_parent_comp = new SCH_COMPONENT( *m_parent_part, m_parent_part->GetLibId(), - &path, 0, 0, wxPoint( 1, 2 ) ); - m_parent_comp->SetRef( &path, "U2" ); - m_parent_comp->UpdatePins(); + delete m_parent_symbol; + m_parent_symbol = new SCH_COMPONENT( *m_parent_part, m_parent_part->GetLibId(), + &path, 0, 0, wxPoint( 1, 2 ) ); + m_parent_symbol->SetRef( &path, "U2" ); + m_parent_symbol->UpdatePins(); - m_sch_pin = m_parent_comp->GetPins( &path )[0]; + m_sch_pin = m_parent_symbol->GetPins( &path )[0]; // ... then the name is just the pin name const wxString pwr_name = m_sch_pin->GetDefaultNetName( path );