diff --git a/pcbnew/router/pns_kicad_iface.cpp b/pcbnew/router/pns_kicad_iface.cpp index e33f983b3e..33e63ea624 100644 --- a/pcbnew/router/pns_kicad_iface.cpp +++ b/pcbnew/router/pns_kicad_iface.cpp @@ -252,7 +252,23 @@ bool isCopper( const PNS::ITEM* aItem ) if( parent && parent->Type() == PCB_PAD_T ) { PAD* pad = static_cast( parent ); - return pad->IsOnCopperLayer() && pad->GetAttribute() != PAD_ATTRIB::NPTH; + + if( !pad->IsOnCopperLayer() ) + return false; + + if( pad->GetAttribute() != PAD_ATTRIB::NPTH ) + return true; + + // round NPTH with a hole size >= pad size are not on a copper layer + // All other NPTH are seen on copper layers + // This is a basic criteria, but probably enough for a NPTH + if( pad->GetShape() == PAD_SHAPE::CIRCLE ) + { + if( pad->GetSize().x <= pad->GetDrillSize().x ) + return false; + } + + return true; } return true;