diff --git a/pcbnew/pcbexpr_functions.cpp b/pcbnew/pcbexpr_functions.cpp index 26c1458760..582ca53580 100644 --- a/pcbnew/pcbexpr_functions.cpp +++ b/pcbnew/pcbexpr_functions.cpp @@ -807,8 +807,11 @@ static void enclosedByAreaFunc( LIBEVAL::CONTEXT* aCtx, void* self ) if( !aArea || aArea == item || aArea->GetParent() == item ) return false; - if( !( aArea->GetLayerSet() & item->GetLayerSet() ).any() ) - return false; + if( item->Type() != PCB_FOOTPRINT_T ) + { + if( !( aArea->GetLayerSet() & item->GetLayerSet() ).any() ) + return false; + } if( !aArea->GetBoundingBox().Intersects( itemBBox ) ) return false; @@ -832,6 +835,18 @@ static void enclosedByAreaFunc( LIBEVAL::CONTEXT* aCtx, void* self ) { itemShape = *static_cast( item )->Outline(); } + else if( item->Type() == PCB_FOOTPRINT_T ) + { + FOOTPRINT* fp = static_cast( item ); + + for( PCB_LAYER_ID testLayer : aArea->GetLayerSet() ) + { + fp->TransformPadsToPolySet( itemShape, testLayer, 0, + maxError, ERROR_OUTSIDE ); + fp->TransformFPShapesToPolySet( itemShape, testLayer, 0, + maxError, ERROR_OUTSIDE ); + } + } else { item->TransformShapeToPolygon( itemShape, layer, 0, maxError,