diff --git a/eeschema/sch_painter.cpp b/eeschema/sch_painter.cpp index c36765a7d3..4960652320 100644 --- a/eeschema/sch_painter.cpp +++ b/eeschema/sch_painter.cpp @@ -416,10 +416,17 @@ void SCH_PAINTER::draw( LIB_POLYLINE *aLine, int aLayer ) defaultColors( aLine ); + const std::vector& pts = aLine->GetPolyPoints(); std::deque vtx; - for( auto p : aLine->GetPolyPoints() ) - vtx.push_back ( mapCoords( p ) ); + for( auto p : pts ) + vtx.push_back( mapCoords( p ) ); + + // Make sure a filled polygon is closed. We appear to have both types out in the wild: + // while most are closed (cf op-amp bodies, diodes, etc.), there are some that are inferred + // by their fill to be closed (cf arrowheads on potentiometers, optocoupler LEDs, etc.). + if( aLine->GetFillMode() != NO_FILL && pts.back() != pts.front() ) + vtx.push_back( mapCoords( pts.front() ) ); m_gal->DrawPolygon( vtx ); }