diff --git a/pcbnew/class_track.cpp b/pcbnew/class_track.cpp index 0adf66489a..fe1a7f103b 100644 --- a/pcbnew/class_track.cpp +++ b/pcbnew/class_track.cpp @@ -464,6 +464,9 @@ void VIA::ViewGetLayers( int aLayers[], int& aCount ) const case VIATYPE::MICROVIA: aLayers[2] = LAYER_VIA_MICROVIA; + aLayers[3] = m_Layer; + aLayers[4] = m_BottomLayer; + aCount += 2; break; default: diff --git a/pcbnew/pcb_layer_widget.cpp b/pcbnew/pcb_layer_widget.cpp index 9d58d93140..250ba084a1 100644 --- a/pcbnew/pcb_layer_widget.cpp +++ b/pcbnew/pcb_layer_widget.cpp @@ -326,11 +326,16 @@ void PCB_LAYER_WIDGET::ReFillRender() if( m_fp_editor_mode && !isAllowedInFpMode( renderRow.id ) ) continue; + // Don't remove microvia and bblind vias if they're not allowed: that's only a DRC + // setting (which might be set to ignore) and the user can add them irrespective of + // the setting. + /* if( renderRow.id == LAYER_VIA_MICROVIA && !settings.m_MicroViasAllowed ) continue; if( renderRow.id == LAYER_VIA_BBLIND && !settings.m_BlindBuriedViaAllowed ) continue; + */ if( !renderRow.spacer ) { diff --git a/pcbnew/pcb_painter.cpp b/pcbnew/pcb_painter.cpp index d6ac5157db..3c808ba0ba 100644 --- a/pcbnew/pcb_painter.cpp +++ b/pcbnew/pcb_painter.cpp @@ -612,10 +612,11 @@ void PCB_PAINTER::draw( const VIA* aVia, int aLayer ) m_gal->SetFillColor( color ); } - if( aVia->GetViaType() == VIATYPE::BLIND_BURIED && aLayer != LAYER_VIAS_HOLES + if( ( aVia->GetViaType() == VIATYPE::BLIND_BURIED || aVia->GetViaType() == VIATYPE::MICROVIA ) + && aLayer != LAYER_VIAS_HOLES && !m_pcbSettings.GetDrawIndividualViaLayers() ) { - // Outer circles of blind/buried vias are drawn in a special way to indicate the + // Outer circles of blind/buried and micro-vias are drawn in a special way to indicate the // top and bottom layers PCB_LAYER_ID layerTop, layerBottom; aVia->LayerPair( &layerTop, &layerBottom ); @@ -629,7 +630,7 @@ void PCB_PAINTER::draw( const VIA* aVia, int aLayer ) else if( aLayer == layerBottom ) m_gal->DrawArc( center, radius, M_PI, 3.0 * M_PI / 2.0 ); - else if( aLayer == LAYER_VIA_BBLIND ) + else if( aLayer == LAYER_VIA_BBLIND || aLayer == LAYER_VIA_MICROVIA ) { m_gal->DrawArc( center, radius, M_PI / 2.0, M_PI ); m_gal->DrawArc( center, radius, 3.0 * M_PI / 2.0, 2.0 * M_PI );