Make sure filled polygons are closed when rendering.

This commit is contained in:
Jeff Young 2018-09-18 22:52:48 +01:00
parent c75d4b9ba1
commit 5a910e9ee3
1 changed files with 9 additions and 2 deletions

View File

@ -416,11 +416,18 @@ void SCH_PAINTER::draw( LIB_POLYLINE *aLine, int aLayer )
defaultColors( aLine ); defaultColors( aLine );
const std::vector<wxPoint>& pts = aLine->GetPolyPoints();
std::deque<VECTOR2D> vtx; std::deque<VECTOR2D> vtx;
for( auto p : aLine->GetPolyPoints() ) for( auto p : pts )
vtx.push_back( mapCoords( p ) ); 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 ); m_gal->DrawPolygon( vtx );
} }