Add PNS::ITEM::BoardItem() call.
About 1/3 of callers to Parent() don't care if they get the immediate parent or not, about 1/3 want only the immediate parent, and about 1/3 want the hole parent's Parent(). I had earlier changed PNS::ITEM::HOLE to override Parent() and return the hole parent's Parent(), but since the callers are pretty evenly split I've reverted that and added BoardItem() for callers who want the eventual BOARD_ITEM (whether a direct parent or a grandparent). (Also removes a dead routine so I didn't have to figure out which of the two it wanted....)
This commit is contained in:
parent
8a0c225efa
commit
6f0d963683
|
@ -61,7 +61,7 @@ public:
|
|||
|
||||
ITEM* ParentPadVia() const { return m_parentPadVia; }
|
||||
|
||||
BOARD_ITEM* Parent() const override
|
||||
BOARD_ITEM* BoardItem() const override
|
||||
{
|
||||
if( m_parent )
|
||||
return m_parent;
|
||||
|
|
|
@ -165,7 +165,7 @@ public:
|
|||
}
|
||||
|
||||
/**
|
||||
* Return true if the item's type matches the mask \a aKindMask.
|
||||
* @return true if the item's type matches the mask \a aKindMask.
|
||||
*/
|
||||
bool OfKind( int aKindMask ) const
|
||||
{
|
||||
|
@ -173,12 +173,17 @@ public:
|
|||
}
|
||||
|
||||
/**
|
||||
* Returns the kind of the item, as string
|
||||
* @return the kind of the item, as string
|
||||
*/
|
||||
std::string KindStr() const;
|
||||
|
||||
void SetParent( BOARD_ITEM* aParent ) { m_parent = aParent; }
|
||||
virtual BOARD_ITEM* Parent() const { return m_parent; }
|
||||
BOARD_ITEM* Parent() const { return m_parent; }
|
||||
|
||||
/**
|
||||
* @return the BOARD_ITEM, even if it's not the direct parent.
|
||||
*/
|
||||
virtual BOARD_ITEM* BoardItem() const { return m_parent; }
|
||||
|
||||
void SetNet( int aNet ) { m_net = aNet; }
|
||||
int Net() const { return m_net; }
|
||||
|
|
|
@ -110,7 +110,6 @@ public:
|
|||
virtual int DpCoupledNet( int aNet ) override;
|
||||
virtual int DpNetPolarity( int aNet ) override;
|
||||
virtual bool DpNetPair( const PNS::ITEM* aItem, int& aNetP, int& aNetN ) override;
|
||||
virtual bool IsDiffPair( const PNS::ITEM* aA, const PNS::ITEM* aB ) override;
|
||||
|
||||
virtual bool IsInNetTie( const PNS::ITEM* aA ) override;
|
||||
virtual bool IsNetTieExclusion( const PNS::ITEM* aItem, const VECTOR2I& aCollisionPos,
|
||||
|
@ -172,26 +171,9 @@ PNS_PCBNEW_RULE_RESOLVER::~PNS_PCBNEW_RULE_RESOLVER()
|
|||
}
|
||||
|
||||
|
||||
bool PNS_PCBNEW_RULE_RESOLVER::IsDiffPair( const PNS::ITEM* aA, const PNS::ITEM* aB )
|
||||
{
|
||||
int net_p, net_n;
|
||||
|
||||
if( !DpNetPair( aA, net_p, net_n ) )
|
||||
return false;
|
||||
|
||||
if( aA->Net() == net_p && aB->Net() == net_n )
|
||||
return true;
|
||||
|
||||
if( aB->Net() == net_p && aA->Net() == net_n )
|
||||
return true;
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
bool PNS_PCBNEW_RULE_RESOLVER::IsInNetTie( const PNS::ITEM* aA )
|
||||
{
|
||||
BOARD_ITEM* item = aA->Parent();
|
||||
BOARD_ITEM* item = aA->BoardItem();
|
||||
|
||||
return item && item->GetParentFootprint() && item->GetParentFootprint()->IsNetTie();
|
||||
}
|
||||
|
@ -204,10 +186,11 @@ bool PNS_PCBNEW_RULE_RESOLVER::IsNetTieExclusion( const PNS::ITEM* aItem,
|
|||
wxCHECK( aItem && aCollidingItem, false );
|
||||
|
||||
std::shared_ptr<DRC_ENGINE> drcEngine = m_board->GetDesignSettings().m_DRCEngine;
|
||||
BOARD_ITEM* collidingItem = aCollidingItem->Parent();
|
||||
BOARD_ITEM* item = aItem->BoardItem();
|
||||
BOARD_ITEM* collidingItem = aCollidingItem->BoardItem();
|
||||
|
||||
FOOTPRINT* collidingFp = collidingItem->GetParentFootprint();
|
||||
FOOTPRINT* itemFp = aItem->Parent() ? aItem->Parent()->GetParentFootprint() : nullptr;
|
||||
FOOTPRINT* itemFp = item ? item->GetParentFootprint() : nullptr;
|
||||
|
||||
if( collidingFp && itemFp && ( collidingFp == itemFp ) && itemFp->IsNetTie() )
|
||||
{
|
||||
|
@ -290,7 +273,7 @@ static bool isEdge( const PNS::ITEM* aItem )
|
|||
if ( !aItem )
|
||||
return false;
|
||||
|
||||
const BOARD_ITEM *parent = aItem->Parent();
|
||||
const BOARD_ITEM *parent = aItem->BoardItem();
|
||||
|
||||
return parent && ( parent->IsOnLayer( Edge_Cuts ) || parent->IsOnLayer( Margin ) );
|
||||
}
|
||||
|
@ -321,8 +304,8 @@ bool PNS_PCBNEW_RULE_RESOLVER::QueryConstraint( PNS::CONSTRAINT_TYPE aType,
|
|||
default: return false; // should not happen
|
||||
}
|
||||
|
||||
BOARD_ITEM* parentA = aItemA ? aItemA->Parent() : nullptr;
|
||||
BOARD_ITEM* parentB = aItemB ? aItemB->Parent() : nullptr;
|
||||
BOARD_ITEM* parentA = aItemA ? aItemA->BoardItem() : nullptr;
|
||||
BOARD_ITEM* parentB = aItemB ? aItemB->BoardItem() : nullptr;
|
||||
DRC_CONSTRAINT hostConstraint;
|
||||
|
||||
// A track being routed may not have a BOARD_ITEM associated yet.
|
||||
|
@ -1409,7 +1392,7 @@ bool PNS_KICAD_IFACE_BASE::IsFlashedOnLayer( const PNS::ITEM* aItem, int aLayer
|
|||
if( aLayer < 0 )
|
||||
return true;
|
||||
|
||||
if( !aItem->OfKind( PNS::ITEM::HOLE_T ) && aItem->Parent() )
|
||||
if( aItem->Parent() )
|
||||
{
|
||||
switch( aItem->Parent()->Type() )
|
||||
{
|
||||
|
|
|
@ -1579,9 +1579,6 @@ ITEM *NODE::FindItemByParent( const BOARD_ITEM* aParent )
|
|||
{
|
||||
for( ITEM* item : *l_cur )
|
||||
{
|
||||
if( item->OfKind( PNS::ITEM::HOLE_T ) && static_cast<HOLE*>( item )->ParentPadVia() )
|
||||
continue;
|
||||
|
||||
if( item->Parent() == aParent )
|
||||
return item;
|
||||
}
|
||||
|
|
|
@ -142,8 +142,6 @@ public:
|
|||
virtual int DpNetPolarity( int aNet ) = 0;
|
||||
virtual bool DpNetPair( const ITEM* aItem, int& aNetP, int& aNetN ) = 0;
|
||||
|
||||
virtual bool IsDiffPair( const ITEM* aA, const ITEM* aB ) = 0;
|
||||
|
||||
virtual bool IsInNetTie( const ITEM* aA ) = 0;
|
||||
virtual bool IsNetTieExclusion( const PNS::ITEM* aItem, const VECTOR2I& aCollisionPos,
|
||||
const PNS::ITEM* aCollidingItem )= 0;
|
||||
|
|
|
@ -250,7 +250,7 @@ bool ROUTER::isStartingPointRoutable( const VECTOR2I& aWhere, ITEM* aStartItem,
|
|||
for( ITEM* item : candidates.Items() )
|
||||
{
|
||||
// Edge cuts are put on all layers, but they're not *really* on all layers
|
||||
if( item->Parent() && item->Parent()->GetLayer() == Edge_Cuts )
|
||||
if( item->BoardItem() && item->BoardItem()->GetLayer() == Edge_Cuts )
|
||||
continue;
|
||||
|
||||
if( !item->Layers().Overlaps( aLayer ) )
|
||||
|
@ -263,7 +263,7 @@ bool ROUTER::isStartingPointRoutable( const VECTOR2I& aWhere, ITEM* aStartItem,
|
|||
}
|
||||
else
|
||||
{
|
||||
BOARD_ITEM* parent = item->Parent();
|
||||
BOARD_ITEM* parent = item->BoardItem();
|
||||
|
||||
switch( parent->Type() )
|
||||
{
|
||||
|
|
|
@ -43,7 +43,7 @@ ROUTER_PREVIEW_ITEM::ROUTER_PREVIEW_ITEM( const PNS::ITEM* aItem, KIGFX::VIEW* a
|
|||
m_shape( nullptr ),
|
||||
m_hole( nullptr )
|
||||
{
|
||||
BOARD_ITEM* boardItem = aItem ? aItem->Parent() : nullptr;
|
||||
BOARD_ITEM* boardItem = aItem ? aItem->BoardItem() : nullptr;
|
||||
|
||||
// A PNS::SOLID for an edge-cut item must have 0 width for collision calculations, but when
|
||||
// highlighting an edge we want to show it with its parent PCB_SHAPE's shape.
|
||||
|
|
|
@ -138,8 +138,6 @@ public:
|
|||
{
|
||||
return false;
|
||||
}
|
||||
virtual bool IsDiffPair( const PNS::ITEM* aA, const PNS::ITEM* aB ) override { return false; }
|
||||
|
||||
virtual bool QueryConstraint( PNS::CONSTRAINT_TYPE aType, const PNS::ITEM* aItemA,
|
||||
const PNS::ITEM* aItemB, int aLayer,
|
||||
PNS::CONSTRAINT* aConstraint ) override
|
||||
|
|
Loading…
Reference in New Issue