Don't prompt for rule areas and no-net shapes

Highlighting and placing vias will pop up a potential net list. This
should not include things without nets

Fixes https://gitlab.com/kicad/code/kicad/-/issues/21381

(cherry picked from commit dd41e2b00b)
This commit is contained in:
Seth Hillbrand
2025-07-25 16:41:38 -07:00
parent 21ed7a0641
commit 64f8258f1f
4 changed files with 44 additions and 1 deletions
+30 -1
View File
@@ -26,6 +26,7 @@
#include <board_item.h> // class BOARD_ITEM
#include <footprint.h>
#include <netinfo.h>
#include <pad.h>
#include <pcb_track.h>
#include <pcb_marker.h>
@@ -156,6 +157,7 @@ INSPECT_RESULT GENERAL_COLLECTOR::Inspect( EDA_ITEM* aTestItem, void* aTestData
PCB_FIELD* field = nullptr;
PCB_TEXT* text = nullptr;
PCB_DIMENSION_BASE* dimension = nullptr;
PCB_SHAPE* shape = nullptr;
switch( aTestItem->Type() )
{
@@ -194,13 +196,28 @@ INSPECT_RESULT GENERAL_COLLECTOR::Inspect( EDA_ITEM* aTestItem, void* aTestData
case PCB_ZONE_T:
zone = static_cast<ZONE*>( aTestItem );
if( m_Guide->IgnoreNoNets() && zone->GetNetCode() == NETINFO_LIST::UNCONNECTED )
return INSPECT_RESULT::CONTINUE;
boardItem = zone;
break;
case PCB_TEXTBOX_T:
case PCB_SHAPE_T:
shape = static_cast<PCB_SHAPE*>( aTestItem );
if( m_Guide->IgnoreNoNets() && shape->GetNetCode() == NETINFO_LIST::UNCONNECTED )
return INSPECT_RESULT::CONTINUE;
boardItem = shape;
break;
case PCB_TEXTBOX_T:
case PCB_TABLE_T:
case PCB_TABLECELL_T:
if( m_Guide->IgnoreNoNets() )
return INSPECT_RESULT::CONTINUE;
boardItem = static_cast<BOARD_ITEM*>( aTestItem );
break;
@@ -209,15 +226,24 @@ INSPECT_RESULT GENERAL_COLLECTOR::Inspect( EDA_ITEM* aTestItem, void* aTestData
case PCB_DIM_RADIAL_T:
case PCB_DIM_ORTHOGONAL_T:
case PCB_DIM_LEADER_T:
if( m_Guide->IgnoreNoNets() )
return INSPECT_RESULT::CONTINUE;
dimension = static_cast<PCB_DIMENSION_BASE*>( aTestItem );
boardItem = dimension;
break;
case PCB_TARGET_T:
if( m_Guide->IgnoreNoNets() )
return INSPECT_RESULT::CONTINUE;
boardItem = static_cast<BOARD_ITEM*>( aTestItem );
break;
case PCB_FIELD_T:
if( m_Guide->IgnoreNoNets() )
return INSPECT_RESULT::CONTINUE;
field = static_cast<PCB_FIELD*>( aTestItem );
if( !field->IsVisible() )
@@ -232,6 +258,9 @@ INSPECT_RESULT GENERAL_COLLECTOR::Inspect( EDA_ITEM* aTestItem, void* aTestData
KI_FALLTHROUGH;
case PCB_TEXT_T:
if( m_Guide->IgnoreNoNets() )
return INSPECT_RESULT::CONTINUE;
text = static_cast<PCB_TEXT*>( aTestItem );
boardItem = text;
+10
View File
@@ -155,6 +155,11 @@ public:
*/
virtual bool IgnoreZoneFills() const = 0;
/**
* @return true if should ignore items with no net.
*/
virtual bool IgnoreNoNets() const = 0;
virtual int Accuracy() const = 0;
virtual double OnePixelInIU() const = 0;
@@ -359,6 +364,7 @@ public:
m_ignoreMicroVias = false;
m_ignoreTracks = false;
m_ignoreZoneFills = true;
m_ignoreNoNets = false;
m_onePixelInIU = abs( aView->ToWorld( one, false ).x );
m_accuracy = KiROUND( 5 * m_onePixelInIU );
@@ -466,6 +472,9 @@ public:
bool IgnoreZoneFills() const override { return m_ignoreZoneFills; }
void SetIgnoreZoneFills( bool ignore ) { m_ignoreZoneFills = ignore; }
bool IgnoreNoNets() const override { return m_ignoreNoNets; }
void SetIgnoreNoNets( bool ignore ) { m_ignoreNoNets = ignore; }
int Accuracy() const override { return m_accuracy; }
void SetAccuracy( int aValue ) { m_accuracy = aValue; }
@@ -496,6 +505,7 @@ private:
bool m_ignoreMicroVias;
bool m_ignoreTracks;
bool m_ignoreZoneFills;
bool m_ignoreNoNets;
double m_onePixelInIU;
int m_accuracy;
+1
View File
@@ -1742,6 +1742,7 @@ int BOARD_INSPECTION_TOOL::HighlightItem( const TOOL_EVENT& aEvent )
{
GENERAL_COLLECTORS_GUIDE guide = m_frame->GetCollectorsGuide();
guide.SetIgnoreZoneFills( false );
guide.SetIgnoreNoNets( true );
PCB_LAYER_ID activeLayer = static_cast<PCB_LAYER_ID>( view()->GetTopLayer() );
guide.SetPreferredLayer( activeLayer );
+3
View File
@@ -3844,6 +3844,9 @@ int DRAWING_TOOL::DrawVia( const TOOL_EVENT& aEvent )
for( ZONE* z : m_board->Zones() )
{
if( z->GetIsRuleArea() )
continue; // ignore rule areas
for( PCB_LAYER_ID layer : lset.Seq() )
{
if( z->IsOnLayer( layer ) )