KiCad PCB EDA Suite
netlist_exporter_orcadpcb2.cpp
Go to the documentation of this file.
1/*
2 * This program source code file is part of KiCad, a free EDA CAD application.
3 *
4 * Copyright (C) 1992-2018 jp.charras at wanadoo.fr
5 * Copyright (C) 2013 SoftPLC Corporation, Dick Hollenbeck <[email protected]>
6 * Copyright (C) 1992-2021 KiCad Developers, see AUTHORS.txt for contributors.
7 *
8 * This program is free software; you can redistribute it and/or
9 * modify it under the terms of the GNU General Public License
10 * as published by the Free Software Foundation; either version 2
11 * of the License, or (at your option) any later version.
12 *
13 * This program is distributed in the hope that it will be useful,
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 * GNU General Public License for more details.
17 *
18 * You should have received a copy of the GNU General Public License
19 * along with this program; if not, you may find one here:
20 * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
21 * or you may search the http://www.gnu.org website for the version 2 license,
22 * or you may write to the Free Software Foundation, Inc.,
23 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
24 */
25
26#include <confirm.h>
27#include <refdes_utils.h>
28
29#include <sch_edit_frame.h>
30#include <sch_reference_list.h>
31#include <string_utils.h>
32#include <symbol_library.h>
33#include <symbol_lib_table.h>
34
35#include <netlist.h>
37
38
39bool NETLIST_EXPORTER_ORCADPCB2::WriteNetlist( const wxString& aOutFileName,
40 unsigned /* aNetlistOptions */ )
41{
42 FILE* f = nullptr;
43 wxString field;
44 wxString footprint;
45 int ret = 0; // zero now, OR in the sign bit on error
46 wxString netName;
47
48
49 if( ( f = wxFopen( aOutFileName, wxT( "wt" ) ) ) == nullptr )
50 {
51 wxString msg;
52 msg.Printf( _( "Failed to create file '%s'." ), aOutFileName );
53 DisplayError( nullptr, msg );
54 return false;
55 }
56
57 std::vector< SCH_REFERENCE > cmpList;
58
59 ret |= fprintf( f, "( { %s created %s }\n",
61
62 // Create netlist footprints section
64
66
67 for( unsigned i = 0; i < sheetList.size(); i++ )
68 {
69 SCH_SHEET_PATH sheet = sheetList[i];
70
71 // Process symbol attributes
72 for( EDA_ITEM* item : sheet.LastScreen()->Items().OfType( SCH_SYMBOL_T ) )
73 {
74 SCH_SYMBOL* symbol = findNextSymbol( item, &sheet );
75
76 if( !symbol )
77 continue;
78
79 CreatePinList( symbol, &sheet, true );
80
81 if( symbol->GetLibSymbolRef()
82 && symbol->GetLibSymbolRef()->GetFPFilters().GetCount() != 0 )
83 {
84 cmpList.push_back( SCH_REFERENCE( symbol, symbol->GetLibSymbolRef().get(), sheet ) );
85 }
86
87 footprint = symbol->GetFootprint( &sheet, true );
88 footprint.Replace( wxT( " " ), wxT( "_" ) );
89
90 if( footprint.IsEmpty() )
91 footprint = wxT( "$noname" );
92
93 ret |= fprintf( f, " ( %s %s",
94 TO_UTF8( sheet.PathAsString() + symbol->m_Uuid.AsString() ),
95 TO_UTF8( footprint ) );
96
97 field = symbol->GetRef( &sheet );
98
99 ret |= fprintf( f, " %s", TO_UTF8( field ) );
100
101 field = symbol->GetValue( &sheet, true );
102 field.Replace( wxT( " " ), wxT( "_" ) );
103
104 ret |= fprintf( f, " %s", TO_UTF8( field ) );
105
106 ret |= fprintf( f, "\n" );
107
108 // Write pin list:
109 for( const PIN_INFO& pin : m_sortedSymbolPinList )
110 {
111 if( pin.num.IsEmpty() ) // Erased pin in list
112 continue;
113
114 netName = pin.netName;
115 netName.Replace( wxT( " " ), wxT( "_" ) );
116
117 ret |= fprintf( f, " ( %4.4s %s )\n", TO_UTF8( pin.num ), TO_UTF8( netName ) );
118 }
119
120 ret |= fprintf( f, " )\n" );
121 }
122 }
123
124 ret |= fprintf( f, ")\n*\n" );
125
126 fclose( f );
127
128 return ret >= 0;
129}
A base class for most all the KiCad significant classes used in schematics and boards.
Definition: eda_item.h:99
const KIID m_Uuid
Definition: eda_item.h:506
EE_TYPE OfType(KICAD_T aType) const
Definition: sch_rtree.h:238
wxString AsString() const
Definition: kiid.cpp:249
void CreatePinList(SCH_SYMBOL *aSymbol, SCH_SHEET_PATH *aSheetPath, bool aKeepUnconnectedPins)
Find a symbol from the DrawList and builds its pin list in m_sortedSymbolPinList.
UNIQUE_STRINGS m_referencesAlreadyFound
Used for "multiple symbols per package" symbols to avoid processing a lib symbol more than once.
SCH_SYMBOL * findNextSymbol(EDA_ITEM *aItem, SCH_SHEET_PATH *aSheetPath)
Check if the given symbol should be processed for netlisting.
SCHEMATIC_IFACE * m_schematic
The schematic we're generating a netlist for.
std::vector< PIN_INFO > m_sortedSymbolPinList
Used to temporarily store and filter the list of pins of a schematic symbol when generating schematic...
bool WriteNetlist(const wxString &aOutFileName, unsigned aNetlistOptions) override
Write to specified output file.
virtual SCH_SHEET_LIST GetSheets() const =0
A helper to define a symbol's reference designator in a schematic.
EE_RTREE & Items()
Gets the full RTree, usually for iterating.
Definition: sch_screen.h:108
A container for handling SCH_SHEET_PATH objects in a flattened hierarchy.
Handle access to a stack of flattened SCH_SHEET objects by way of a path for creating a flattened sch...
SCH_SCREEN * LastScreen()
wxString PathAsString() const
Return the path of time stamps which do not changes even when editing sheet parameters.
Schematic symbol object.
Definition: sch_symbol.h:79
const wxString GetFootprint(const SCH_SHEET_PATH *sheet, bool aResolve) const
Return the instance-specific footprint assignment for the given sheet path.
Definition: sch_symbol.cpp:717
const wxString GetRef(const SCH_SHEET_PATH *aSheet, bool aIncludeUnit=false) const
Return the reference for the given sheet path.
Definition: sch_symbol.cpp:516
const wxString GetValue(const SCH_SHEET_PATH *sheet, bool aResolve) const
Return the instance-specific value for the given sheet path.
Definition: sch_symbol.cpp:651
std::unique_ptr< LIB_SYMBOL > & GetLibSymbolRef()
Definition: sch_symbol.h:189
void Clear()
Erase the record.
void DisplayError(wxWindow *aParent, const wxString &aText, int aDisplayTime)
Display an error or warning message box with aMessage.
Definition: confirm.cpp:280
This file is part of the common library.
#define _(s)
#define TO_UTF8(wxstring)
Convert a wxString to a UTF8 encoded C string for all wxWidgets build modes.
Definition: macros.h:96
#define NETLIST_HEAD_STRING
Definition: netlist.h:52
Collection of utility functions for component reference designators (refdes)
wxString DateAndTime()
Definition for symbol library class.
@ SCH_SYMBOL_T
Definition: typeinfo.h:155