60 if( !
reportPhase(
_(
"Checking pad, via and zone connections..." ) ) )
64 std::shared_ptr<CONNECTIVITY_DATA> connectivity = board->
GetConnectivity();
66 int progressDelta = 250;
78 if( exceedV && exceedT )
80 else if( track->Type() ==
PCB_VIA_T && exceedV )
92 if( connectivity->TestTrackEndpointDangling( track,
true, &pos ) )
94 std::shared_ptr<DRC_ITEM> drcItem;
105 drcItem->SetViolatingRule( constraint.GetParentRule() );
112 drcItem->SetItems( track );
132 const std::list<CN_ITEM*>& items = connectivity->GetConnectivityAlgo()->ItemEntry( track ).GetItems();
137 CN_ITEM* citem = items.front();
139 if( !citem->
Valid() )
149 bool isPostMachined =
false;
154 isPostMachined =
pad->IsBackdrilledOrPostMachined( layer );
159 isPostMachined =
via->IsBackdrilledOrPostMachined( layer );
165 drcItem->SetItems( track, item );
167 VECTOR2I pos = ( track->GetStart() + track->GetEnd() ) / 2;
170 if( item->
HitTest( track->GetStart() ) )
171 pos = track->GetStart();
172 else if( item->
HitTest( track->GetEnd() ) )
173 pos = track->GetEnd();
192 const std::list<CN_ITEM*>& items = connectivity->GetConnectivityAlgo()->ItemEntry( track ).GetItems();
197 CN_ITEM* citem = items.front();
199 if( !citem->
Valid() )
215 bool startInVia =
via->HitTest( track->GetStart() );
216 bool endInVia =
via->HitTest( track->GetEnd() );
218 if( !startInVia && !endInVia )
223 bool layerHasCenteredTrack =
false;
226 const std::list<CN_ITEM*>& viaEntries =
227 connectivity->GetConnectivityAlgo()->ItemEntry(
via ).GetItems();
229 if( !viaEntries.empty() )
231 for(
CN_ITEM* viaConnected : viaEntries.front()->ConnectedItems() )
240 if( connTrack->
GetLayer() != trackLayer )
243 if( connTrack->
GetStart() == viaPos || connTrack->
GetEnd() == viaPos )
245 layerHasCenteredTrack =
true;
251 if( layerHasCenteredTrack )
254 if( ( startInVia && track->GetStart() != viaPos ) || ( endInVia && track->GetEnd() != viaPos ) )
256 bool startViolation = startInVia && track->GetStart() != viaPos;
257 VECTOR2I pos = startViolation ? track->GetStart() : track->GetEnd();
260 drcItem->SetItems( track,
via );
277 for(
const auto& [ layer, layerIslands ] : zoneIslands )
282 for(
int polyIdx : layerIslands.m_IsolatedOutlines )
287 std::shared_ptr<SHAPE_POLY_SET> poly = zone->GetFilledPolysList( layer );
290 drcItem->SetItems( zone );
291 reportViolation( drcItem, poly->Outline( polyIdx ).CPoint( 0 ), layer );
299 if( !
reportPhase(
_(
"Checking net connections..." ) ) )
303 count = connectivity->GetUnconnectedCount(
false );
305 connectivity->RunOnUnconnectedEdges(