altium: Fix parsing of zones which use the KEEP_OUT_LAYER
This commit is contained in:
parent
b184b43431
commit
86c025eb30
|
@ -1664,16 +1664,6 @@ void ALTIUM_PCB::ParsePolygons6Data( const ALTIUM_COMPOUND_FILE& aAltiumPcbF
|
||||||
checkpoint();
|
checkpoint();
|
||||||
APOLYGON6 elem( reader );
|
APOLYGON6 elem( reader );
|
||||||
|
|
||||||
PCB_LAYER_ID klayer = GetKicadLayer( elem.layer );
|
|
||||||
|
|
||||||
if( klayer == UNDEFINED_LAYER )
|
|
||||||
{
|
|
||||||
wxLogWarning( _( "Polygon found on an Altium layer (%d) with no KiCad equivalent. "
|
|
||||||
"It has been moved to KiCad layer Eco1_User." ),
|
|
||||||
elem.layer );
|
|
||||||
klayer = Eco1_User;
|
|
||||||
}
|
|
||||||
|
|
||||||
SHAPE_LINE_CHAIN linechain;
|
SHAPE_LINE_CHAIN linechain;
|
||||||
HelperShapeLineChainFromAltiumVertices( linechain, elem.vertices );
|
HelperShapeLineChainFromAltiumVertices( linechain, elem.vertices );
|
||||||
|
|
||||||
|
@ -1697,12 +1687,13 @@ void ALTIUM_PCB::ParsePolygons6Data( const ALTIUM_COMPOUND_FILE& aAltiumPcbF
|
||||||
m_polygons.emplace_back( zone );
|
m_polygons.emplace_back( zone );
|
||||||
|
|
||||||
zone->SetNetCode( GetNetCode( elem.net ) );
|
zone->SetNetCode( GetNetCode( elem.net ) );
|
||||||
zone->SetLayerSet( LSET( klayer ) );
|
|
||||||
zone->SetPosition( elem.vertices.at( 0 ).position );
|
zone->SetPosition( elem.vertices.at( 0 ).position );
|
||||||
zone->SetLocked( elem.locked );
|
zone->SetLocked( elem.locked );
|
||||||
zone->SetPriority( elem.pourindex > 0 ? elem.pourindex : 0 );
|
zone->SetPriority( elem.pourindex > 0 ? elem.pourindex : 0 );
|
||||||
zone->Outline()->AddOutline( linechain );
|
zone->Outline()->AddOutline( linechain );
|
||||||
|
|
||||||
|
HelperSetZoneLayers( zone, elem.layer );
|
||||||
|
|
||||||
if( elem.pourindex > m_highest_pour_index )
|
if( elem.pourindex > m_highest_pour_index )
|
||||||
m_highest_pour_index = elem.pourindex;
|
m_highest_pour_index = elem.pourindex;
|
||||||
|
|
||||||
|
@ -1905,23 +1896,7 @@ void ALTIUM_PCB::ConvertShapeBasedRegions6ToBoardItem( const AREGION6& aElem )
|
||||||
zone->SetPosition( aElem.outline.at( 0 ).position );
|
zone->SetPosition( aElem.outline.at( 0 ).position );
|
||||||
zone->Outline()->AddOutline( linechain );
|
zone->Outline()->AddOutline( linechain );
|
||||||
|
|
||||||
if( aElem.layer == ALTIUM_LAYER::MULTI_LAYER )
|
HelperSetZoneLayers( zone, aElem.layer );
|
||||||
{
|
|
||||||
zone->SetLayerSet( LSET::AllCuMask() );
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
PCB_LAYER_ID klayer = GetKicadLayer( aElem.layer );
|
|
||||||
|
|
||||||
if( klayer == UNDEFINED_LAYER )
|
|
||||||
{
|
|
||||||
wxLogWarning( _( "Zone found on an Altium layer (%d) with no KiCad equivalent. "
|
|
||||||
"It has been moved to KiCad layer Eco1_User." ),
|
|
||||||
aElem.layer );
|
|
||||||
klayer = Eco1_User;
|
|
||||||
}
|
|
||||||
zone->SetLayerSet( LSET( klayer ) );
|
|
||||||
}
|
|
||||||
|
|
||||||
zone->SetBorderDisplayStyle( ZONE_BORDER_DISPLAY_STYLE::DIAGONAL_EDGE,
|
zone->SetBorderDisplayStyle( ZONE_BORDER_DISPLAY_STYLE::DIAGONAL_EDGE,
|
||||||
ZONE::GetDefaultHatchPitch(), true );
|
ZONE::GetDefaultHatchPitch(), true );
|
||||||
|
@ -1972,15 +1947,7 @@ void ALTIUM_PCB::ConvertShapeBasedRegions6ToFootprintItem( FOOTPRINT* aFoot
|
||||||
zone->SetPosition( aElem.outline.at( 0 ).position );
|
zone->SetPosition( aElem.outline.at( 0 ).position );
|
||||||
zone->Outline()->AddOutline( linechain );
|
zone->Outline()->AddOutline( linechain );
|
||||||
|
|
||||||
if( aElem.layer == ALTIUM_LAYER::MULTI_LAYER )
|
HelperSetZoneLayers( zone, aElem.layer );
|
||||||
{
|
|
||||||
zone->SetLayerSet( LSET::AllCuMask() );
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
std::vector<PCB_LAYER_ID> klayers = GetKicadLayersToIterate( aElem.layer );
|
|
||||||
zone->SetLayerSet( LSET( klayers.at( 0 ) ) );
|
|
||||||
}
|
|
||||||
|
|
||||||
zone->SetBorderDisplayStyle( ZONE_BORDER_DISPLAY_STYLE::DIAGONAL_EDGE,
|
zone->SetBorderDisplayStyle( ZONE_BORDER_DISPLAY_STYLE::DIAGONAL_EDGE,
|
||||||
ZONE::GetDefaultHatchPitch(), true );
|
ZONE::GetDefaultHatchPitch(), true );
|
||||||
|
@ -3261,15 +3228,8 @@ void ALTIUM_PCB::ConvertFills6ToBoardItemWithNet( const AFILL6& aElem )
|
||||||
|
|
||||||
zone->SetPosition( aElem.pos1 );
|
zone->SetPosition( aElem.pos1 );
|
||||||
zone->SetPriority( 1000 );
|
zone->SetPriority( 1000 );
|
||||||
if( aElem.layer == ALTIUM_LAYER::MULTI_LAYER )
|
|
||||||
{
|
HelperSetZoneLayers( zone, aElem.layer );
|
||||||
zone->SetLayerSet( LSET::AllCuMask() );
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
std::vector<PCB_LAYER_ID> klayers = GetKicadLayersToIterate( aElem.layer );
|
|
||||||
zone->SetLayerSet( LSET( klayers.at( 0 ) ) );
|
|
||||||
}
|
|
||||||
|
|
||||||
VECTOR2I p11( aElem.pos1.x, aElem.pos1.y );
|
VECTOR2I p11( aElem.pos1.x, aElem.pos1.y );
|
||||||
VECTOR2I p12( aElem.pos1.x, aElem.pos2.y );
|
VECTOR2I p12( aElem.pos1.x, aElem.pos2.y );
|
||||||
|
@ -3352,6 +3312,24 @@ void ALTIUM_PCB::ConvertFills6ToFootprintItemOnLayer( FOOTPRINT* aFootprint, con
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void ALTIUM_PCB::HelperSetZoneLayers( ZONE* aZone, const ALTIUM_LAYER aAltiumLayer )
|
||||||
|
{
|
||||||
|
if( aAltiumLayer == ALTIUM_LAYER::MULTI_LAYER || aAltiumLayer == ALTIUM_LAYER::KEEP_OUT_LAYER )
|
||||||
|
{
|
||||||
|
aZone->SetLayerSet( LSET::AllCuMask() );
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
LSET layerSet;
|
||||||
|
for( PCB_LAYER_ID klayer : GetKicadLayersToIterate( aAltiumLayer ) )
|
||||||
|
{
|
||||||
|
layerSet.set( klayer );
|
||||||
|
}
|
||||||
|
aZone->SetLayerSet( layerSet );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
void ALTIUM_PCB::HelperPcpShapeAsBoardKeepoutRegion( const PCB_SHAPE& aShape,
|
void ALTIUM_PCB::HelperPcpShapeAsBoardKeepoutRegion( const PCB_SHAPE& aShape,
|
||||||
ALTIUM_LAYER aAltiumLayer )
|
ALTIUM_LAYER aAltiumLayer )
|
||||||
{
|
{
|
||||||
|
@ -3364,15 +3342,7 @@ void ALTIUM_PCB::HelperPcpShapeAsBoardKeepoutRegion( const PCB_SHAPE& aShape,
|
||||||
zone->SetDoNotAllowFootprints( false );
|
zone->SetDoNotAllowFootprints( false );
|
||||||
zone->SetDoNotAllowCopperPour( true );
|
zone->SetDoNotAllowCopperPour( true );
|
||||||
|
|
||||||
if( aAltiumLayer == ALTIUM_LAYER::MULTI_LAYER )
|
HelperSetZoneLayers( zone, aAltiumLayer );
|
||||||
{
|
|
||||||
zone->SetLayerSet( LSET::AllCuMask() );
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
std::vector<PCB_LAYER_ID> klayers = GetKicadLayersToIterate( aAltiumLayer );
|
|
||||||
zone->SetLayerSet( LSET( klayers.at( 0 ) ) );
|
|
||||||
}
|
|
||||||
|
|
||||||
aShape.EDA_SHAPE::TransformShapeWithClearanceToPolygon( *zone->Outline(), 0, ARC_HIGH_DEF,
|
aShape.EDA_SHAPE::TransformShapeWithClearanceToPolygon( *zone->Outline(), 0, ARC_HIGH_DEF,
|
||||||
ERROR_INSIDE, false );
|
ERROR_INSIDE, false );
|
||||||
|
@ -3396,15 +3366,7 @@ void ALTIUM_PCB::HelperPcpShapeAsFootprintKeepoutRegion( FOOTPRINT* aFootp
|
||||||
zone->SetDoNotAllowFootprints( false );
|
zone->SetDoNotAllowFootprints( false );
|
||||||
zone->SetDoNotAllowCopperPour( true );
|
zone->SetDoNotAllowCopperPour( true );
|
||||||
|
|
||||||
if( aAltiumLayer == ALTIUM_LAYER::MULTI_LAYER )
|
HelperSetZoneLayers( zone, aAltiumLayer );
|
||||||
{
|
|
||||||
zone->SetLayerSet( LSET::AllCuMask() );
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
std::vector<PCB_LAYER_ID> klayers = GetKicadLayersToIterate( aAltiumLayer );
|
|
||||||
zone->SetLayerSet( LSET( klayers.at( 0 ) ) );
|
|
||||||
}
|
|
||||||
|
|
||||||
aShape.EDA_SHAPE::TransformShapeWithClearanceToPolygon( *zone->Outline(), 0, ARC_HIGH_DEF,
|
aShape.EDA_SHAPE::TransformShapeWithClearanceToPolygon( *zone->Outline(), 0, ARC_HIGH_DEF,
|
||||||
ERROR_INSIDE, false );
|
ERROR_INSIDE, false );
|
||||||
|
|
|
@ -216,6 +216,7 @@ private:
|
||||||
|
|
||||||
void HelperCreateBoardOutline( const std::vector<ALTIUM_VERTICE>& aVertices );
|
void HelperCreateBoardOutline( const std::vector<ALTIUM_VERTICE>& aVertices );
|
||||||
|
|
||||||
|
void HelperSetZoneLayers( ZONE* aZone, const ALTIUM_LAYER aAltiumLayer );
|
||||||
void HelperPcpShapeAsBoardKeepoutRegion( const PCB_SHAPE& aShape, ALTIUM_LAYER aAltiumLayer );
|
void HelperPcpShapeAsBoardKeepoutRegion( const PCB_SHAPE& aShape, ALTIUM_LAYER aAltiumLayer );
|
||||||
void HelperPcpShapeAsFootprintKeepoutRegion( FOOTPRINT* aFootprint, const PCB_SHAPE& aShape,
|
void HelperPcpShapeAsFootprintKeepoutRegion( FOOTPRINT* aFootprint, const PCB_SHAPE& aShape,
|
||||||
ALTIUM_LAYER aAltiumLayer );
|
ALTIUM_LAYER aAltiumLayer );
|
||||||
|
|
|
@ -146,7 +146,7 @@
|
||||||
(solder_mask_margin 0.05) (thermal_bridge_angle 45) (tstamp f57881b5-c9c9-4bcf-be4b-dd8cfd505873))
|
(solder_mask_margin 0.05) (thermal_bridge_angle 45) (tstamp f57881b5-c9c9-4bcf-be4b-dd8cfd505873))
|
||||||
(pad "39" smd rect (at 0.835 1.835 180) (size 1.33 1.33) (layers "F.Cu" "F.Paste" "F.Mask")
|
(pad "39" smd rect (at 0.835 1.835 180) (size 1.33 1.33) (layers "F.Cu" "F.Paste" "F.Mask")
|
||||||
(solder_mask_margin 0.05) (thermal_bridge_angle 45) (tstamp 7c70a95d-e021-4338-a3de-d7656880600e))
|
(solder_mask_margin 0.05) (thermal_bridge_angle 45) (tstamp 7c70a95d-e021-4338-a3de-d7656880600e))
|
||||||
(zone (net 0) (net_name "") (layer "F.Cu") (tstamp da4ad6f3-5f0a-4c19-ae8d-5aa0f1ec37b7) (hatch edge 0.508)
|
(zone (net 0) (net_name "") (layers *.Cu) (tstamp da4ad6f3-5f0a-4c19-ae8d-5aa0f1ec37b7) (hatch edge 0.508)
|
||||||
(connect_pads (clearance 0))
|
(connect_pads (clearance 0))
|
||||||
(min_thickness 0.254) (filled_areas_thickness no)
|
(min_thickness 0.254) (filled_areas_thickness no)
|
||||||
(keepout (tracks allowed) (vias allowed) (pads allowed ) (copperpour not_allowed) (footprints allowed))
|
(keepout (tracks allowed) (vias allowed) (pads allowed ) (copperpour not_allowed) (footprints allowed))
|
||||||
|
|
Loading…
Reference in New Issue