From 09490e1f4663a1c65f0d77ddbc63db694cfbbf5d Mon Sep 17 00:00:00 2001 From: Jeff Young Date: Tue, 29 Aug 2023 13:04:53 +0100 Subject: [PATCH] Don't snap a footprint (or group) to its children. Fixes https://gitlab.com/kicad/code/kicad/-/issues/15535 (cherry picked from commit d161602e921432adfb3f99c29d82225e4b7fc2e7) --- pcbnew/tools/pcb_grid_helper.cpp | 28 ++++++++++++++++++++++++++-- 1 file changed, 26 insertions(+), 2 deletions(-) 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; }