86 std::unique_ptr<BOARD> board = std::make_unique<BOARD>();
87 auto tmpFile = std::filesystem::temp_directory_path() /
"net_chain_total_length_sexpr.kicad_pcb";
89 std::ofstream ofs( tmpFile );
92 plugin.
LoadBoard( tmpFile.string(), board.get() );
93 board->BuildConnectivity();
97 if( net->GetNetCode() > 0 ) net->SetNetChain( wxS(
"Signal1") );
100 std::map<int, std::vector<PAD*>> netPads;
101 for(
FOOTPRINT* fp : board->Footprints() )
102 for(
PAD*
pad : fp->Pads() )
103 if(
pad->GetNetCode() > 0 ) netPads[
pad->GetNetCode() ].push_back(
pad );
105 for(
auto& [code, pads] : netPads )
107 if( pads.size() >= 2 )
119 long long extraLen = 0, extraDelay = 0;
124 long long net1TrackLen = 0;
125 bool havePoint =
false;
long long minX = 0, maxX = 0;
127 if(
auto tr =
dynamic_cast<PCB_TRACK*
>( bi ) )
128 if( tr->GetNetCode() == 1 )
130 net1TrackLen += ( tr->GetStart() - tr->GetEnd() ).EuclideanNorm();
131 long long sx = tr->GetStart().x;
long long ex = tr->GetEnd().x;
132 if( !havePoint ) { minX = std::min( sx, ex ); maxX = std::max( sx, ex ); havePoint =
true; }
133 else { minX = std::min( minX, std::min( sx, ex ) ); maxX = std::max( maxX, std::max( sx, ex ) ); }
135 long long net1Span = havePoint ? ( maxX - minX ) : 0;
136 BOOST_CHECK( net1Span > 0 );
137 BOOST_CHECK( net1TrackLen >= net1Span );
155 long long totalCopper = net1TrackLen + extraLen;
156 long long expectedCopper = 25 *
MM;
157 long long padSpacing = 30 *
MM;
159 "RoutedTotal=" << totalCopper <<
" expected>=" << expectedCopper
160 <<
" net1Track=" << net1TrackLen <<
" extra=" << extraLen );
161 BOOST_CHECK( totalCopper < padSpacing );
164 long long bridging = 0;
165 for(
FOOTPRINT* fp : board->Footprints() )
167 std::map<int, PAD*> chainPads;
168 for(
PAD*
pad : fp->Pads() )
174 if( chainPads.size() == 2 )
176 auto it = chainPads.begin();
177 PAD* p1 = it->second; ++it;
PAD* p2 = it->second;
181 BOOST_CHECK( bridging > 0 );
184 long long fullChain = totalCopper + bridging;
185 long long tol = 1 *
MM;
187 "FullChain=" << fullChain <<
" padSpacing=" << padSpacing
188 <<
" copper=" << totalCopper <<
" bridging=" << bridging );
BOARD * LoadBoard(const wxString &aFileName, BOARD *aAppendToMe, const std::map< std::string, UTF8 > *aProperties=nullptr, PROJECT *aProject=nullptr) override
Load information from some input file format that this PCB_IO implementation knows about into either ...