diff --git a/pcbnew/pcb_io/altium/altium_pcb.cpp b/pcbnew/pcb_io/altium/altium_pcb.cpp index 7bc4a04c8c..809abfc565 100644 --- a/pcbnew/pcb_io/altium/altium_pcb.cpp +++ b/pcbnew/pcb_io/altium/altium_pcb.cpp @@ -1991,14 +1991,30 @@ void ALTIUM_PCB::ParsePolygons6Data( const ALTIUM_COMPOUND_FILE& aAltiumPcbF continue; } - std::unique_ptr zone = std::make_unique( m_board ); - m_polygons.emplace_back( zone.get() ); + // Altium polygon outlines have thickness, convert it to KiCad's representation. + SHAPE_POLY_SET outline( linechain ); + outline.Inflate( elem.trackwidth / 2, CORNER_STRATEGY::CHAMFER_ACUTE_CORNERS, ARC_HIGH_DEF, + true ); + + if( outline.OutlineCount() != 1 && m_reporter ) + { + wxString msg; + msg.Printf( _( "Polygon outline count is %d, expected 1.", outline.OutlineCount() ) ); + + m_reporter->Report( msg, RPT_SEVERITY_ERROR ); + } + + if( outline.OutlineCount() == 0 ) + continue; + + std::unique_ptr zone = std::make_unique(m_board); + m_polygons.emplace_back(zone.get()); zone->SetNetCode( GetNetCode( elem.net ) ); zone->SetPosition( elem.vertices.at( 0 ).position ); zone->SetLocked( elem.locked ); zone->SetAssignedPriority( elem.pourindex > 0 ? elem.pourindex : 0 ); - zone->Outline()->AddOutline( linechain ); + zone->Outline()->AddOutline( outline.Outline( 0 ) ); HelperSetZoneLayers( *zone, elem.layer );