Altium PCB import: make sure Polygon fill is contained within the outline.

This commit is contained in:
Alex Shvartzkop 2024-06-10 17:19:38 +03:00
parent 0b187e7122
commit 82c2bda52b
1 changed files with 19 additions and 3 deletions

View File

@ -1991,14 +1991,30 @@ void ALTIUM_PCB::ParsePolygons6Data( const ALTIUM_COMPOUND_FILE& aAltiumPcbF
continue;
}
std::unique_ptr<ZONE> zone = std::make_unique<ZONE>( 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> zone = std::make_unique<ZONE>(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 );