Don't return holes that have a parent pad or via.

(While we don't currently have holes without a parent pad or via, you
could imagine using HOLEs in the future to represent a hole in a first-class
board outline, so better not to build this assumption in.)
This commit is contained in:
Jeff Young 2023-04-06 15:05:48 +01:00
parent 4cc289c6fb
commit b18bf09208
3 changed files with 11 additions and 26 deletions

View File

@ -63,7 +63,13 @@ public:
BOARD_ITEM* Parent() const override
{
return m_parentPadVia ? m_parentPadVia->Parent() : nullptr;
if( m_parent )
return m_parent;
if( m_parentPadVia )
return m_parentPadVia->Parent();
return nullptr;
}
void SetCenter( const VECTOR2I& aCenter );

View File

@ -129,8 +129,6 @@ public:
void ClearCaches() override;
private:
int holeRadius( const PNS::ITEM* aItem ) const;
/**
* Checks for netnamed differential pairs.
* This accepts nets named suffixed by 'P', 'N', '+', '-', as well as additional
@ -174,27 +172,6 @@ PNS_PCBNEW_RULE_RESOLVER::~PNS_PCBNEW_RULE_RESOLVER()
}
int PNS_PCBNEW_RULE_RESOLVER::holeRadius( const PNS::ITEM* aItem ) const
{
if( aItem->Kind() == PNS::ITEM::SOLID_T )
{
const PAD* pad = dynamic_cast<const PAD*>( aItem->Parent() );
if( pad && pad->GetDrillShape() == PAD_DRILL_SHAPE_CIRCLE )
return pad->GetDrillSize().x / 2;
}
else if( aItem->Kind() == PNS::ITEM::VIA_T )
{
const PCB_VIA* via = dynamic_cast<const PCB_VIA*>( aItem->Parent() );
if( via )
return via->GetDrillValue() / 2;
}
return 0;
}
bool PNS_PCBNEW_RULE_RESOLVER::IsDiffPair( const PNS::ITEM* aA, const PNS::ITEM* aB )
{
int net_p, net_n;

View File

@ -1573,13 +1573,15 @@ ITEM *NODE::FindItemByParent( const BOARD_ITEM* aParent )
if( aParent->IsConnected() )
{
const BOARD_CONNECTED_ITEM* cItem = static_cast<const BOARD_CONNECTED_ITEM*>( aParent );
INDEX::NET_ITEMS_LIST* l_cur = m_index->GetItemsForNet( cItem->GetNetCode() );
INDEX::NET_ITEMS_LIST* l_cur = m_index->GetItemsForNet( cItem->GetNetCode() );
if( l_cur )
{
for( ITEM* item : *l_cur )
{
if( item->OfKind( PNS::ITEM::HOLE_T ) && static_cast<HOLE*>( item )->ParentPadVia() )
continue;
if( item->Parent() == aParent )
return item;
}