diff --git a/3d-viewer/3d_canvas/create_layer_items.cpp b/3d-viewer/3d_canvas/create_layer_items.cpp index c0b16aae86..00fa572d83 100644 --- a/3d-viewer/3d_canvas/create_layer_items.cpp +++ b/3d-viewer/3d_canvas/create_layer_items.cpp @@ -642,12 +642,33 @@ void BOARD_ADAPTER::createLayers( REPORTER* aStatusReporter ) // add also this shape to the plated copper polygon list if required if( cfg.DifferentiatePlatedCopper() ) { - if( layer == F_Cu ) - item->TransformShapeToPolygon( *m_frontPlatedCopperPolys, F_Cu, - 0, maxError, ERROR_INSIDE ); - else if( layer == B_Cu ) - item->TransformShapeToPolygon( *m_backPlatedCopperPolys, B_Cu, - 0, maxError, ERROR_INSIDE ); + // Note: for TEXT and TEXTBOX, TransformShapeToPolygon returns the bounding + // box shape, not the exact text shape. So it is not used for these items + if( layer == F_Cu || layer == B_Cu ) + { + SHAPE_POLY_SET* platedCopperPolys = layer == F_Cu + ? m_frontPlatedCopperPolys + : m_backPlatedCopperPolys; + + if( item->Type() == PCB_TEXTBOX_T ) + { + PCB_TEXTBOX* text_box = static_cast<PCB_TEXTBOX*>( item ); + text_box->TransformTextToPolySet( *platedCopperPolys, + 0, maxError, ERROR_INSIDE ); + // Add box outlines + text_box->PCB_SHAPE::TransformShapeToPolygon( *platedCopperPolys, layer, + 0, maxError, ERROR_INSIDE ); + } + else if( item->Type() == PCB_TEXT_T ) + { + static_cast<PCB_TEXT*>( item )->TransformTextToPolySet( + *platedCopperPolys, + 0, maxError, ERROR_INSIDE ); + } + else + item->TransformShapeToPolygon( *m_frontPlatedCopperPolys, F_Cu, + 0, maxError, ERROR_INSIDE ); + } } } }