Commit c1f11a1b authored by Andrew Zonenberg's avatar Andrew Zonenberg Committed by Dick Hollenbeck

Draw VIAs only if a layer they penetrate is visible.

parent bde2a0a1
...@@ -413,6 +413,7 @@ void PCB_LAYER_WIDGET::OnLayerVisible( int aLayer, bool isVisible, bool isFinal ...@@ -413,6 +413,7 @@ void PCB_LAYER_WIDGET::OnLayerVisible( int aLayer, bool isVisible, bool isFinal
{ {
KIGFX::VIEW* view = galCanvas->GetView(); KIGFX::VIEW* view = galCanvas->GetView();
view->SetLayerVisible( aLayer, isVisible ); view->SetLayerVisible( aLayer, isVisible );
view->RecacheAllItems( true );
} }
if( isFinal ) if( isFinal )
......
...@@ -393,17 +393,12 @@ LSET VIA::GetLayerSet() const ...@@ -393,17 +393,12 @@ LSET VIA::GetLayerSet() const
// VIA_BLIND_BURIED or VIA_MICRVIA: // VIA_BLIND_BURIED or VIA_MICRVIA:
LAYER_ID bottom_layer, top_layer;
// LayerPair() knows how layers are stored
LayerPair( &top_layer, &bottom_layer );
LSET layermask; LSET layermask;
wxASSERT( top_layer <= bottom_layer ); wxASSERT( m_Layer <= m_BottomLayer );
// LAYER_IDs are numbered from front to back, this is top to bottom. // LAYER_IDs are numbered from front to back, this is top to bottom.
for( LAYER_NUM id = top_layer; id <= bottom_layer; ++id ) for( LAYER_NUM id = m_Layer; id <= m_BottomLayer; ++id )
{ {
layermask.set( id ); layermask.set( id );
} }
...@@ -780,13 +775,17 @@ void VIA::Draw( EDA_DRAW_PANEL* panel, wxDC* aDC, GR_DRAWMODE aDrawMode, ...@@ -780,13 +775,17 @@ void VIA::Draw( EDA_DRAW_PANEL* panel, wxDC* aDC, GR_DRAWMODE aDrawMode,
GRSetDrawMode( aDC, aDrawMode ); GRSetDrawMode( aDC, aDrawMode );
BOARD * brd = GetBoard( ); BOARD * brd = GetBoard();
EDA_COLOR_T color = brd->GetVisibleElementColor(VIAS_VISIBLE + GetViaType()); EDA_COLOR_T color = brd->GetVisibleElementColor( VIAS_VISIBLE + GetViaType() );
if( brd->IsElementVisible( PCB_VISIBLE(VIAS_VISIBLE + GetViaType()) ) == false if( brd->IsElementVisible( PCB_VISIBLE(VIAS_VISIBLE + GetViaType()) ) == false
&& ( color & HIGHLIGHT_FLAG ) != HIGHLIGHT_FLAG ) && ( color & HIGHLIGHT_FLAG ) != HIGHLIGHT_FLAG )
return; return;
// Only draw the via if at least one of the layers it crosses is being displayed
if( !( brd->GetVisibleLayers() & GetLayerSet() ).any() )
return;
if( DisplayOpt.ContrastModeDisplay ) if( DisplayOpt.ContrastModeDisplay )
{ {
if( !IsOnLayer( curr_layer ) ) if( !IsOnLayer( curr_layer ) )
......
...@@ -336,6 +336,11 @@ void PCB_PAINTER::draw( const VIA* aVia, int aLayer ) ...@@ -336,6 +336,11 @@ void PCB_PAINTER::draw( const VIA* aVia, int aLayer )
VECTOR2D center( aVia->GetStart() ); VECTOR2D center( aVia->GetStart() );
double radius; double radius;
// Only draw the via if at least one of the layers it crosses is being displayed
BOARD* brd = aVia->GetBoard( );
if( !( brd->GetVisibleLayers() & aVia->GetLayerSet() ).any() )
return;
// Choose drawing settings depending on if we are drawing via's pad or hole // Choose drawing settings depending on if we are drawing via's pad or hole
if( aLayer == ITEM_GAL_LAYER( VIA_THROUGH_VISIBLE ) ) if( aLayer == ITEM_GAL_LAYER( VIA_THROUGH_VISIBLE ) )
{ {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment