39 if( ( f = wxFopen( aOutFileName, wxT(
"wt" ) ) ) ==
nullptr )
41 wxString msg = wxString::Format(
_(
"Failed to create file '%s'." ), aOutFileName );
52 fmt::print( f,
"*PADS-PCB*\n" );
53 fmt::print( f,
"*PART*\n" );
63 std::vector<EDA_ITEM*> sheetItems;
66 sheetItems.push_back( item );
70 return item1->
m_Uuid < item2->m_Uuid;
73 std::sort( sheetItems.begin(), sheetItems.end(), pred );
87 footprint = footprint.Trim(
true );
88 footprint = footprint.Trim(
false );
89 footprint.Replace( wxT(
" " ), wxT(
"_" ) );
91 if( footprint.IsEmpty() )
94 footprint = symbol->
GetValue(
true, &sheet,
false );
95 footprint.Replace( wxT(
" " ), wxT(
"_" ) );
96 footprint = footprint.Trim(
true );
97 footprint = footprint.Trim(
false );
100 msg = symbol->
GetRef( &sheet );
101 fmt::print( f,
"{:<16} {}\n",
TO_UTF8( msg ),
TO_UTF8( footprint ) );
105 fmt::print( f,
"\n" );
113 catch(
const std::system_error& e )
118 catch(
const fmt::format_error& e )
136 fmt::print( f,
"*NET*\n" );
139 std::vector<std::pair<wxString, std::vector<std::pair<SCH_PIN*, SCH_SHEET_PATH>>>> allNets;
141 for(
const auto& [ key, subgraphs ] :
m_schematic->ConnectionGraph()->GetNetMap() )
145 std::vector<std::pair<SCH_PIN*, SCH_SHEET_PATH>> sortedItems;
151 for(
SCH_ITEM* item : subgraph->GetItems() )
154 sortedItems.emplace_back(
static_cast<SCH_PIN*
>( item ), sheet );
159 std::sort( sortedItems.begin(), sortedItems.end(),
160 [](
const std::pair<SCH_PIN*, SCH_SHEET_PATH>& a,
const std::pair<SCH_PIN*, SCH_SHEET_PATH>& b )
162 wxString ref_a = a.first->GetParentSymbol()->GetRef( &a.second );
163 wxString ref_b = b.first->GetParentSymbol()->GetRef( &b.second );
166 return a.first->GetShownNumber() < b.first->GetShownNumber();
168 return ref_a < ref_b;
172 sortedItems.erase( std::unique( sortedItems.begin(), sortedItems.end(),
173 [](
const std::pair<SCH_PIN*, SCH_SHEET_PATH>& a,
const std::pair<SCH_PIN*, SCH_SHEET_PATH>& b )
175 wxString ref_a = a.first->GetParentSymbol()->GetRef( &a.second );
176 wxString ref_b = b.first->GetParentSymbol()->GetRef( &b.second );
178 return ref_a == ref_b && a.first->GetShownNumber() == b.first->GetShownNumber();
182 allNets.emplace_back( netName, std::move( sortedItems ) );
186 std::sort( allNets.begin(), allNets.end(),
187 [](
const auto& a,
const auto& b )
189 return a.first < b.first;
192 for(
const auto& [sortedNetName, sorted_items] : allNets )
194 std::vector<wxString> netConns;
196 for(
const std::pair<SCH_PIN*, SCH_SHEET_PATH>& pair : sorted_items )
201 wxString refText =
pin->GetParentSymbol()->GetRef( &sheet );
202 wxString pinText =
pin->GetShownNumber();
205 if( refText[0] == wxChar(
'#' ) )
208 netConns.push_back( wxString::Format(
"%s.%s", refText, pinText ) );
213 if( netConns .size() > 1 )
215 fmt::print( f,
"*SIGNAL* {}\n",
TO_UTF8(sortedNetName) );
218 for( wxString& netConn : netConns )
220 fmt::print( f,
"{}",
TO_UTF8( netConn ) );
222 if( cnt != 0 && cnt % 6 == 0 )
223 fmt::print( f,
"\n" );
225 fmt::print( f,
" " );
230 fmt::print( f,
"\n" );
234 fmt::print( f,
"*END*\n" );
236 return ferror( f ) == 0;
238 catch(
const std::system_error& )
242 catch(
const fmt::format_error& )