7
mirror of https://gitlab.com/kicad/code/kicad.git synced 2025-04-11 14:50:11 +00:00

Fix a few issues with via and pad rendering

The refactor of VIEW::SortLayers broke it, but this
was hard to notice until my recent changes.
This commit is contained in:
Jon Evans 2024-12-28 12:42:32 -05:00
parent eeb77103c9
commit c77426cc12
5 changed files with 15 additions and 16 deletions

View File

@ -659,12 +659,12 @@ int VIEW::GetLayerOrder( int aLayer ) const
}
void VIEW::SortLayers( std::vector<int> aLayers ) const
void VIEW::SortLayers( std::vector<int>& aLayers ) const
{
std::sort( aLayers.begin(), aLayers.end(),
[this]( int a, int b )
{
return GetLayerOrder( a ) < GetLayerOrder( b );
return GetLayerOrder( a ) > GetLayerOrder( b );
} );
}

View File

@ -524,7 +524,7 @@ public:
*
* @param aLayers stores id of layers to be sorted.
*/
void SortLayers( std::vector<int> aLayers ) const;
void SortLayers( std::vector<int>& aLayers ) const;
/**
* Remap the data between layer ids without invalidating that data.

View File

@ -485,8 +485,8 @@ void PCB_DRAW_PANEL_GAL::SetTopLayer( PCB_LAYER_ID aLayer )
if( layer < PCB_LAYER_ID_COUNT )
{
m_view->SetTopLayer( ZONE_LAYER_FOR( layer ) );
m_view->SetTopLayer( PAD_COPPER_LAYER_FOR( aLayer ) );
m_view->SetTopLayer( VIA_COPPER_LAYER_FOR( aLayer ) );
m_view->SetTopLayer( PAD_COPPER_LAYER_FOR( layer ) );
m_view->SetTopLayer( VIA_COPPER_LAYER_FOR( layer ) );
}
}
@ -494,25 +494,23 @@ void PCB_DRAW_PANEL_GAL::SetTopLayer( PCB_LAYER_ID aLayer )
if( !IsCopperLayer( aLayer ) )
{
m_view->SetLayerOrder( aLayer, m_view->GetLayerOrder( LAYER_MARKER_SHADOWS ) + 1 );
m_view->SetLayerOrder( PAD_COPPER_LAYER_FOR( aLayer ),
m_view->GetLayerOrder( LAYER_MARKER_SHADOWS ) + 2 );
m_view->SetLayerOrder( VIA_COPPER_LAYER_FOR( aLayer ),
m_view->GetLayerOrder( LAYER_MARKER_SHADOWS ) + 3 );
m_view->SetLayerOrder( ZONE_LAYER_FOR( aLayer ),
m_view->GetLayerOrder( LAYER_MARKER_SHADOWS ) + 4 );
m_view->GetLayerOrder( LAYER_MARKER_SHADOWS ) + 2 );
// Fix up pad and via netnames to be below. This is hacky, we need a rethink
// of layer ordering...
m_view->SetLayerOrder( LAYER_PAD_NETNAMES,
m_view->GetLayerOrder( LAYER_MARKER_SHADOWS ) + 5 );
m_view->GetLayerOrder( LAYER_MARKER_SHADOWS ) + 3 );
m_view->SetLayerOrder( LAYER_VIA_NETNAMES,
m_view->GetLayerOrder( LAYER_MARKER_SHADOWS ) + 6 );
m_view->GetLayerOrder( LAYER_MARKER_SHADOWS ) + 4 );
}
}
if( IsCopperLayer( aLayer ) )
{
m_view->SetTopLayer( ZONE_LAYER_FOR( aLayer ) );
m_view->SetTopLayer( PAD_COPPER_LAYER_FOR( aLayer ) );
m_view->SetTopLayer( VIA_COPPER_LAYER_FOR( aLayer ) );
// Display labels for copper layers on the top
m_view->SetTopLayer( GetNetnameLayer( aLayer ) );

View File

@ -989,7 +989,9 @@ void PCB_PAINTER::draw( const PCB_VIA* aVia, int aLayer )
if( color == COLOR4D::CLEAR )
return;
PCB_LAYER_ID currentLayer = ToLAYER_ID( aLayer );
int copperLayer = IsViaCopperLayer( aLayer ) ? aLayer - LAYER_VIA_COPPER_START : aLayer;
PCB_LAYER_ID currentLayer = ToLAYER_ID( copperLayer );
PCB_LAYER_ID layerTop, layerBottom;
aVia->LayerPair( &layerTop, &layerBottom );
@ -1165,7 +1167,7 @@ void PCB_PAINTER::draw( const PCB_VIA* aVia, int aLayer )
m_gal->SetLineWidth( margin );
m_gal->DrawCircle( center, aVia->GetWidth( currentLayer ) / 2.0 + margin );
}
else if( m_pcbSettings.IsPrinting() || IsCopperLayer( aLayer ) )
else if( m_pcbSettings.IsPrinting() || IsCopperLayer( currentLayer ) )
{
int annular_width = ( aVia->GetWidth( currentLayer ) - getViaDrillSize( aVia ) ) / 2.0;
double radius = aVia->GetWidth( currentLayer ) / 2.0;
@ -1184,7 +1186,7 @@ void PCB_PAINTER::draw( const PCB_VIA* aVia, int aLayer )
draw = true;
}
if( !aVia->FlashLayer( aLayer ) )
if( !aVia->FlashLayer( currentLayer ) )
draw = false;
if( !outline_mode )

View File

@ -1445,7 +1445,6 @@ std::vector<int> PCB_VIA::ViewGetLayers() const
if( !cuMask.Contains( layer ) )
continue;
ret_layers.push_back( layer );
ret_layers.push_back( LAYER_VIA_COPPER_START + layer );
}