43 if( ( f = wxFopen( aOutFileName, wxT(
"wt" ) ) ) ==
nullptr )
45 wxString msg = wxString::Format(
_(
"Failed to create file '%s'." ), aOutFileName );
52 wxString StartCmpDesc =
StartLine + wxT(
"ADD_COM" );
61 fmt::print( f,
"\"{}\"\n",
TO_UTF8( title ) );
62 fmt::print( f,
".TYP FULL\n\n" );
72 std::vector<EDA_ITEM*> sheetItems;
75 sheetItems.push_back( item );
79 return item1->
m_Uuid < item2->m_Uuid;
82 std::sort( sheetItems.begin(), sheetItems.end(), pred );
97 if( footprint.IsEmpty() )
98 footprint =
"$noname";
100 msg = symbol->
GetRef( &sheet );
101 fmt::print( f,
"{} ",
TO_UTF8( StartCmpDesc ) );
102 fmt::print( f,
"{}",
TO_UTF8( msg ) );
105 msg.Replace( wxT(
" " ), wxT(
"_" ) );
106 fmt::print( f,
" \"{}\"",
TO_UTF8( msg ) );
107 fmt::print( f,
" \"{}\"",
TO_UTF8( footprint ) );
108 fmt::print( f,
"\n" );
112 fmt::print( f,
"\n" );
123 catch(
const std::system_error& e )
128 catch(
const fmt::format_error& e )
146 wxString InitNetDesc =
StartLine + wxT(
"ADD_TER" );
147 wxString StartNetDesc =
StartLine + wxT(
"TER" );
148 wxString InitNetDescLine;
150 std::vector<std::pair<wxString, std::vector<std::pair<SCH_PIN*, SCH_SHEET_PATH>>>> all_nets;
153 all_nets.emplace_back( wxString::Format(
"\"%s\"", net.name ), net.pins );
155 for(
auto& [netName, sorted_items] : all_nets )
158 std::sort( sorted_items.begin(), sorted_items.end(),
159 [](
const std::pair<SCH_PIN*, SCH_SHEET_PATH>& a,
const std::pair<SCH_PIN*, SCH_SHEET_PATH>& b )
161 wxString ref_a = a.first->GetParentSymbol()->GetRef( &a.second );
162 wxString ref_b = b.first->GetParentSymbol()->GetRef( &b.second );
165 return a.first->GetShownNumber() < b.first->GetShownNumber();
167 return ref_a < ref_b;
173 sorted_items.erase( std::unique( sorted_items.begin(), sorted_items.end(),
174 [](
const std::pair<SCH_PIN*, SCH_SHEET_PATH>& a,
const std::pair<SCH_PIN*, SCH_SHEET_PATH>& b )
176 wxString ref_a = a.first->GetParentSymbol()->GetRef( &a.second );
177 wxString ref_b = b.first->GetParentSymbol()->GetRef( &b.second );
179 return ref_a == ref_b && a.first->GetShownNumber() == b.first->GetShownNumber();
181 sorted_items.end() );
185 std::sort( all_nets.begin(), all_nets.end(),
186 [](
const auto& a,
const auto& b )
188 return a.first < b.first;
191 for(
const auto& [netName, sorted_items] : all_nets )
195 for(
const std::pair<SCH_PIN*, SCH_SHEET_PATH>& pair : sorted_items )
200 wxString refText =
pin->GetParentSymbol()->GetRef( &sheet );
201 wxString pinText =
pin->GetShownNumber();
204 if( refText[0] == wxChar(
'#' ) )
210 InitNetDescLine.Printf( wxT(
"\n%s %s %s %s" ),
219 fmt::print( f,
"{}\n",
TO_UTF8( InitNetDescLine ) );
220 fmt::print( f,
"{} {} {}\n",
228 fmt::print( f,
" {} {}\n",
236 return ferror( f ) == 0;
238 catch(
const std::system_error& )
242 catch(
const fmt::format_error& )