From 1ee3ce45e8cf6c3e00f00209a68285baf8045003 Mon Sep 17 00:00:00 2001 From: Jeff Young Date: Fri, 18 Feb 2022 14:19:13 +0000 Subject: [PATCH] Don't ask for layer of multi-layer objects. --- pcbnew/drc/drc_test_provider_misc.cpp | 2 +- pcbnew/pad.cpp | 10 ++++++++++ pcbnew/pad.h | 5 +++++ pcbnew/plugins/kicad/pcb_parser.cpp | 1 + 4 files changed, 17 insertions(+), 1 deletion(-) diff --git a/pcbnew/drc/drc_test_provider_misc.cpp b/pcbnew/drc/drc_test_provider_misc.cpp index e0c4b130c9..d259cf3c11 100644 --- a/pcbnew/drc/drc_test_provider_misc.cpp +++ b/pcbnew/drc/drc_test_provider_misc.cpp @@ -158,7 +158,7 @@ void DRC_TEST_PROVIDER_MISC::testDisabledLayers() if( pad->GetAttribute() == PAD_ATTRIB::SMD || pad->GetAttribute() == PAD_ATTRIB::CONN ) { - if( disabledLayers.test( item->GetLayer() ) ) + if( disabledLayers.test( pad->GetPrincipalLayer() ) ) badLayer = item->GetLayer(); } else diff --git a/pcbnew/pad.cpp b/pcbnew/pad.cpp index 6db43250b0..c7075a5edf 100644 --- a/pcbnew/pad.cpp +++ b/pcbnew/pad.cpp @@ -208,6 +208,16 @@ PCB_LAYER_ID PAD::GetLayer() const } +PCB_LAYER_ID PAD::GetPrincipalLayer() const +{ + if( m_attribute == PAD_ATTRIB::SMD || m_attribute == PAD_ATTRIB::CONN ) + return m_layer; + + wxFAIL_MSG( wxT( "Non-SMD/CONN pads have no principal layer." ) ); + return m_layer; +} + + bool PAD::FlashLayer( LSET aLayers ) const { for( auto layer : aLayers.Seq() ) diff --git a/pcbnew/pad.h b/pcbnew/pad.h index 2cab16c368..a4b74f1904 100644 --- a/pcbnew/pad.h +++ b/pcbnew/pad.h @@ -587,6 +587,11 @@ public: PCB_LAYER_ID GetLayer() const override; + /** + * @return the principal copper layer for SMD and CONN pads. + */ + PCB_LAYER_ID GetPrincipalLayer() const; + /** * Check to see if the pad should be flashed to any of the layers in the set. * diff --git a/pcbnew/plugins/kicad/pcb_parser.cpp b/pcbnew/plugins/kicad/pcb_parser.cpp index d4079881af..0d77ba9656 100644 --- a/pcbnew/plugins/kicad/pcb_parser.cpp +++ b/pcbnew/plugins/kicad/pcb_parser.cpp @@ -5735,6 +5735,7 @@ ZONE* PCB_PARSER::parseZONE( BOARD_ITEM_CONTAINER* aParent ) } else { + // for legacy, single-layer zones filledLayer = zone->GetFirstLayer(); }