diff --git a/pcbnew/tools/pcb_grid_helper.cpp b/pcbnew/tools/pcb_grid_helper.cpp index fb3bca5a1c..9a205b3b73 100644 --- a/pcbnew/tools/pcb_grid_helper.cpp +++ b/pcbnew/tools/pcb_grid_helper.cpp @@ -408,8 +408,32 @@ std::set PCB_GRID_HELPER::queryVisible( const BOX2I& aArea, } } - for( BOARD_ITEM* skipItem : aSkip ) - items.erase( skipItem ); + std::function skipItem = + [&]( BOARD_ITEM* aItem ) + { + items.erase( aItem ); + + if( FOOTPRINT* footprint = dynamic_cast( aItem ) ) + { + footprint->RunOnChildren( + [&]( BOARD_ITEM* aChild ) + { + skipItem( aChild ); + } ); + } + + if( PCB_GROUP* group = dynamic_cast( aItem ) ) + { + group->RunOnChildren( + [&]( BOARD_ITEM* aChild ) + { + skipItem( aChild ); + } ); + } + }; + + for( BOARD_ITEM* item : aSkip ) + skipItem( item ); return items; }