43 if( ( f = wxFopen( aOutFileName, wxT(
"wt" ) ) ) ==
nullptr )
45 wxString msg = wxString::Format(
_(
"Failed to create file '%s'." ), aOutFileName );
56 fmt::print( f,
"*PADS-PCB*\n" );
57 fmt::print( f,
"*PART*\n" );
67 std::vector<EDA_ITEM*> sheetItems;
70 sheetItems.push_back( item );
74 return item1->
m_Uuid < item2->m_Uuid;
77 std::sort( sheetItems.begin(), sheetItems.end(), pred );
91 footprint = footprint.Trim(
true );
92 footprint = footprint.Trim(
false );
93 footprint.Replace( wxT(
" " ), wxT(
"_" ) );
95 if( footprint.IsEmpty() )
98 footprint = symbol->
GetValue(
true, &sheet,
false );
99 footprint.Replace( wxT(
" " ), wxT(
"_" ) );
100 footprint = footprint.Trim(
true );
101 footprint = footprint.Trim(
false );
104 msg = symbol->
GetRef( &sheet );
105 fmt::print( f,
"{:<16} {}\n",
TO_UTF8( msg ),
TO_UTF8( footprint ) );
109 fmt::print( f,
"\n" );
117 catch(
const std::system_error& e )
122 catch(
const fmt::format_error& e )
140 fmt::print( f,
"*NET*\n" );
143 std::vector<std::pair<wxString, std::vector<std::pair<SCH_PIN*, SCH_SHEET_PATH>>>> allNets;
145 for(
const auto& [ key, subgraphs ] :
m_schematic->ConnectionGraph()->GetNetMap() )
149 std::vector<std::pair<SCH_PIN*, SCH_SHEET_PATH>> sortedItems;
155 for(
SCH_ITEM* item : subgraph->GetItems() )
158 sortedItems.emplace_back(
static_cast<SCH_PIN*
>( item ), sheet );
163 std::sort( sortedItems.begin(), sortedItems.end(),
164 [](
const std::pair<SCH_PIN*, SCH_SHEET_PATH>& a,
const std::pair<SCH_PIN*, SCH_SHEET_PATH>& b )
166 wxString ref_a = a.first->GetParentSymbol()->GetRef( &a.second );
167 wxString ref_b = b.first->GetParentSymbol()->GetRef( &b.second );
170 return a.first->GetShownNumber() < b.first->GetShownNumber();
172 return ref_a < ref_b;
176 sortedItems.erase( std::unique( sortedItems.begin(), sortedItems.end(),
177 [](
const std::pair<SCH_PIN*, SCH_SHEET_PATH>& a,
const std::pair<SCH_PIN*, SCH_SHEET_PATH>& b )
179 wxString ref_a = a.first->GetParentSymbol()->GetRef( &a.second );
180 wxString ref_b = b.first->GetParentSymbol()->GetRef( &b.second );
182 return ref_a == ref_b && a.first->GetShownNumber() == b.first->GetShownNumber();
186 allNets.emplace_back( netName, std::move( sortedItems ) );
190 std::sort( allNets.begin(), allNets.end(),
191 [](
const auto& a,
const auto& b )
193 return a.first < b.first;
196 for(
const auto& [sortedNetName, sorted_items] : allNets )
198 std::vector<wxString> netConns;
200 for(
const std::pair<SCH_PIN*, SCH_SHEET_PATH>& pair : sorted_items )
205 wxString refText =
pin->GetParentSymbol()->GetRef( &sheet );
206 wxString pinText =
pin->GetShownNumber();
209 if( refText[0] == wxChar(
'#' ) )
212 netConns.push_back( wxString::Format(
"%s.%.4s", refText, pinText ) );
217 if( netConns .size() > 1 )
219 fmt::print( f,
"*SIGNAL* {}\n",
TO_UTF8(sortedNetName) );
222 for( wxString& netConn : netConns )
224 fmt::print( f,
"{}",
TO_UTF8( netConn ) );
226 if( cnt != 0 && cnt % 6 == 0 )
227 fmt::print( f,
"\n" );
229 fmt::print( f,
" " );
234 fmt::print( f,
"\n" );
238 fmt::print( f,
"*END*\n" );
240 return ferror( f ) == 0;
242 catch(
const std::system_error& )
246 catch(
const fmt::format_error& )