From a4ba7ec6ec6ace8418b74f50c6a0489e7f2dbf63 Mon Sep 17 00:00:00 2001 From: jean-pierre charras Date: Tue, 6 Aug 2024 13:48:56 +0200 Subject: [PATCH] 3E viewer: fix incorrect custom pad shape in some cases. Fixes https://gitlab.com/kicad/code/kicad/-/issues/18495 --- 3d-viewer/3d_canvas/create_3Dgraphic_brd_items.cpp | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/3d-viewer/3d_canvas/create_3Dgraphic_brd_items.cpp b/3d-viewer/3d_canvas/create_3Dgraphic_brd_items.cpp index 5e7a6e4861..aa8783b147 100644 --- a/3d-viewer/3d_canvas/create_3Dgraphic_brd_items.cpp +++ b/3d-viewer/3d_canvas/create_3Dgraphic_brd_items.cpp @@ -381,6 +381,13 @@ void BOARD_ADAPTER::createPadWithMargin( const PAD* aPad, CONTAINER_2D_BASE* aCo // Remove group membership from dummy item before deleting dummy.SetParentGroup( nullptr ); } + else if( aPad->GetShape() == PAD_SHAPE::CUSTOM ) + { + // A custom pad can have many complex subshape items. To avoid issues, use its + // final polygon shape, not its basic shape set. One cannot apply the clearance + // to each subshape: it does no work + aPad->TransformShapeToPolygon( poly, aLayer, 0, maxError ); + } else { auto padShapes = std::static_pointer_cast( aPad->GetEffectiveShape() ); @@ -429,7 +436,7 @@ void BOARD_ADAPTER::createPadWithMargin( const PAD* aPad, CONTAINER_2D_BASE* aCo break; case SH_POLY_SET: - poly = *(SHAPE_POLY_SET*) shape; + poly.Append( *static_cast( shape ) ); break; case SH_ARC: