40 board->BuildConnectivity();
44 if( net->GetNetCode() > 0 ) net->SetNetChain( wxS(
"Signal1") );
47 std::map<int, std::vector<PAD*>> netPads;
48 for(
FOOTPRINT* fp : board->Footprints() )
49 for(
PAD*
pad : fp->Pads() )
50 if(
pad->GetNetCode() > 0 ) netPads[
pad->GetNetCode() ].push_back(
pad );
52 for(
auto& [code, pads] : netPads )
54 if( pads.size() >= 2 )
56 NETINFO_ITEM* net = board->FindNet( code );
57 net->SetTerminalPad( 0, pads[0] );
58 net->SetTerminalPad( 1, pads[1] );
62 NETINFO_ITEM* n1 = board->FindNet( wxS(
"Net-(R1-Pad1)" ) );
66 long long extraLen = 0, extraDelay = 0;
71 long long net1TrackLen = 0;
72 bool havePoint =
false;
long long minX = 0, maxX = 0;
74 if(
auto tr =
dynamic_cast<PCB_TRACK*
>( bi ) )
77 net1TrackLen += ( tr->GetStart() - tr->GetEnd() ).EuclideanNorm();
78 long long sx = tr->GetStart().x;
long long ex = tr->GetEnd().x;
79 if( !havePoint ) { minX = std::min( sx, ex ); maxX = std::max( sx, ex ); havePoint =
true; }
80 else { minX = std::min( minX, std::min( sx, ex ) ); maxX = std::max( maxX, std::max( sx, ex ) ); }
82 long long net1Span = havePoint ? ( maxX - minX ) : 0;
83 BOOST_CHECK( net1Span > 0 );
84 BOOST_CHECK( net1TrackLen >= net1Span );
102 long long totalCopper = net1TrackLen + extraLen;
103 long long expectedCopper = 25 *
MM;
104 long long padSpacing = 30 *
MM;
105 BOOST_CHECK_MESSAGE( totalCopper >= expectedCopper,
106 "RoutedTotal=" << totalCopper <<
" expected>=" << expectedCopper
107 <<
" net1Track=" << net1TrackLen <<
" extra=" << extraLen );
108 BOOST_CHECK( totalCopper < padSpacing );
111 long long bridging = 0;
112 for(
FOOTPRINT* fp : board->Footprints() )
114 std::map<int, PAD*> chainPads;
115 for(
PAD*
pad : fp->Pads() )
121 if( chainPads.size() == 2 )
123 auto it = chainPads.begin();
124 PAD* p1 = it->second; ++it;
PAD* p2 = it->second;
128 BOOST_CHECK( bridging > 0 );
131 long long fullChain = totalCopper + bridging;
132 long long tol = 1 *
MM;
133 BOOST_CHECK_MESSAGE( fullChain >= padSpacing && fullChain < padSpacing + tol,
134 "FullChain=" << fullChain <<
" padSpacing=" << padSpacing
135 <<
" copper=" << totalCopper <<
" bridging=" << bridging );
std::unique_ptr< BOARD > LoadBoard(const wxString &aFileName, const std::map< std::string, UTF8 > *aProperties=nullptr, PROJECT *aProject=nullptr)
Load information from some input file format that this PCB_IO implementation knows about into new BOA...