PNS: Addition layer smarts
Edge.Cuts have no parent but cross all layers, so we need to handle the "all layers" case. Also renames "IsPadOnLayer" to "IsOnLayer". Fixes https://gitlab.com/kicad/code/kicad/issues/5351
This commit is contained in:
parent
076230330b
commit
adff7f749b
|
@ -34,7 +34,7 @@ void INDEX::Add( ITEM* aItem )
|
|||
|
||||
for( int i = range.Start(); i <= range.End(); ++i )
|
||||
{
|
||||
if( !ROUTER::GetInstance()->GetInterface()->IsPadOnLayer( aItem, i ) )
|
||||
if( !ROUTER::GetInstance()->GetInterface()->IsOnLayer( aItem, i ) )
|
||||
{
|
||||
if( aItem->AlternateShape() )
|
||||
m_subIndices[i].Add( aItem, aItem->AlternateShape()->BBox() );
|
||||
|
|
|
@ -43,7 +43,7 @@ bool ITEM::collideSimple( const ITEM* aOther, int aClearance, bool aNeedMTV, VEC
|
|||
return false;
|
||||
|
||||
if( !aOther->Layers().IsMultilayer()
|
||||
&& !ROUTER::GetInstance()->GetInterface()->IsPadOnLayer( this, aOther->Layer() ) )
|
||||
&& !ROUTER::GetInstance()->GetInterface()->IsOnLayer( this, aOther->Layer() ) )
|
||||
{
|
||||
if( !AlternateShape() )
|
||||
wxLogError
|
||||
|
@ -54,7 +54,7 @@ bool ITEM::collideSimple( const ITEM* aOther, int aClearance, bool aNeedMTV, VEC
|
|||
}
|
||||
|
||||
if( !Layers().IsMultilayer()
|
||||
&& !ROUTER::GetInstance()->GetInterface()->IsPadOnLayer( aOther, Layer() ) )
|
||||
&& !ROUTER::GetInstance()->GetInterface()->IsOnLayer( aOther, Layer() ) )
|
||||
{
|
||||
if( !aOther->AlternateShape() )
|
||||
wxLogError
|
||||
|
|
|
@ -894,9 +894,13 @@ bool PNS_KICAD_IFACE::IsAnyLayerVisible( const LAYER_RANGE& aLayer )
|
|||
}
|
||||
|
||||
|
||||
bool PNS_KICAD_IFACE::IsPadOnLayer( const PNS::ITEM* aItem, int aLayer )
|
||||
bool PNS_KICAD_IFACE::IsOnLayer( const PNS::ITEM* aItem, int aLayer )
|
||||
{
|
||||
if( !aItem->Parent() || aLayer < 0)
|
||||
/// Default is all layers
|
||||
if( aLayer < 0 )
|
||||
return true;
|
||||
|
||||
if( !aItem->Parent() )
|
||||
return aItem->Layers().Overlaps( aLayer );
|
||||
|
||||
switch( aItem->Parent()->Type() )
|
||||
|
|
|
@ -53,7 +53,7 @@ public:
|
|||
void SetBoard( BOARD* aBoard );
|
||||
void SyncWorld( PNS::NODE* aWorld ) override;
|
||||
bool IsAnyLayerVisible( const LAYER_RANGE& aLayer ) override { return true; };
|
||||
bool IsPadOnLayer( const PNS::ITEM* aItem, int aLayer ) override { return true; };
|
||||
bool IsOnLayer( const PNS::ITEM* aItem, int aLayer ) override { return true; };
|
||||
bool IsItemVisible( const PNS::ITEM* aItem ) override { return true; }
|
||||
void HideItem( PNS::ITEM* aItem ) override {}
|
||||
void DisplayItem( const PNS::ITEM* aItem, int aColor = 0, int aClearance = 0, bool aEdit = false ) override {}
|
||||
|
@ -106,7 +106,7 @@ public:
|
|||
void EraseView() override;
|
||||
bool IsAnyLayerVisible( const LAYER_RANGE& aLayer ) override;
|
||||
bool IsItemVisible( const PNS::ITEM* aItem ) override;
|
||||
bool IsPadOnLayer( const PNS::ITEM* aItem, int aLayer ) override;
|
||||
bool IsOnLayer( const PNS::ITEM* aItem, int aLayer ) override;
|
||||
void HideItem( PNS::ITEM* aItem ) override;
|
||||
void DisplayItem( const PNS::ITEM* aItem, int aColor = 0, int aClearance = 0, bool aEdit = false ) override;
|
||||
void Commit() override;
|
||||
|
|
|
@ -494,7 +494,7 @@ bool LINE_PLACER::rhMarkObstacles( const VECTOR2I& aP, LINE& aNewHead )
|
|||
for( auto& obs : obstacles )
|
||||
{
|
||||
int cl = m_currentNode->GetClearance( obs.m_item, &newHead );
|
||||
auto hull = obs.m_item->Hull( cl, newHead.Width() );
|
||||
auto hull = obs.m_item->Hull( cl, newHead.Width(), newHead.Layer() );
|
||||
|
||||
auto nearest = hull.NearestPoint( aP );
|
||||
Dbg()->AddLine( hull, 2, 10000 );
|
||||
|
|
|
@ -100,7 +100,7 @@ enum DRAG_MODE
|
|||
virtual void RemoveItem( ITEM* aItem ) = 0;
|
||||
virtual bool IsAnyLayerVisible( const LAYER_RANGE& aLayer ) = 0;
|
||||
virtual bool IsItemVisible( const PNS::ITEM* aItem ) = 0;
|
||||
virtual bool IsPadOnLayer( const PNS::ITEM* aItem, int aLayer ) = 0;
|
||||
virtual bool IsOnLayer( const PNS::ITEM* aItem, int aLayer ) = 0;
|
||||
virtual void DisplayItem( const ITEM* aItem, int aColor = -1, int aClearance = -1, bool aEdit = false ) = 0;
|
||||
virtual void HideItem( ITEM* aItem ) = 0;
|
||||
virtual void Commit() = 0;
|
||||
|
|
|
@ -312,7 +312,7 @@ SHOVE::SHOVE_STATUS SHOVE::ProcessSingleLine( LINE& aCurrent, LINE& aObstacle, L
|
|||
for( int i = 0; i < n_segs; i++ )
|
||||
{
|
||||
SEGMENT seg( aCurrent, aCurrent.CSegment( i ) );
|
||||
SHAPE_LINE_CHAIN hull = seg.Hull( clearance, w );
|
||||
SHAPE_LINE_CHAIN hull = seg.Hull( clearance, w, aObstacle.Layer() );
|
||||
|
||||
hulls.push_back( hull );
|
||||
}
|
||||
|
|
|
@ -38,7 +38,7 @@ const SHAPE_LINE_CHAIN SOLID::Hull( int aClearance, int aWalkaroundThickness, in
|
|||
int cl = aClearance + ( aWalkaroundThickness + 1 )/ 2;
|
||||
SHAPE* shape = m_shape;
|
||||
|
||||
if( !ROUTER::GetInstance()->GetInterface()->IsPadOnLayer( this, aLayer ) )
|
||||
if( !ROUTER::GetInstance()->GetInterface()->IsOnLayer( this, aLayer ) )
|
||||
{
|
||||
/// The alternate shape is defined for THT pads. If we don't have an alternate shape
|
||||
/// then the solid shape does not exist on this layer
|
||||
|
|
|
@ -76,7 +76,7 @@ const SHAPE_LINE_CHAIN VIA::Hull( int aClearance, int aWalkaroundThickness, int
|
|||
int cl = ( aClearance + aWalkaroundThickness / 2 );
|
||||
int width = m_diameter;
|
||||
|
||||
if( !ROUTER::GetInstance()->GetInterface()->IsPadOnLayer( this, aLayer ) )
|
||||
if( !ROUTER::GetInstance()->GetInterface()->IsOnLayer( this, aLayer ) )
|
||||
width = m_drill;
|
||||
|
||||
return OctagonalHull( m_pos -
|
||||
|
|
Loading…
Reference in New Issue