altium: Extend test-suite to support FP_ZONE validation

This commit is contained in:
Thomas Pointhuber 2022-02-15 21:41:41 +01:00
parent 8587f762b5
commit fc5772ad92
3 changed files with 73 additions and 19 deletions

View File

@ -1697,7 +1697,7 @@ void ALTIUM_PCB::ParsePolygons6Data( const ALTIUM_COMPOUND_FILE& aAltiumPcbF
m_polygons.emplace_back( zone );
zone->SetNetCode( GetNetCode( elem.net ) );
zone->SetLayer( klayer );
zone->SetLayerSet( LSET( klayer ) );
zone->SetPosition( elem.vertices.at( 0 ).position );
zone->SetLocked( elem.locked );
zone->SetPriority( elem.pourindex > 0 ? elem.pourindex : 0 );
@ -1907,7 +1907,6 @@ void ALTIUM_PCB::ConvertShapeBasedRegions6ToBoardItem( const AREGION6& aElem )
if( aElem.layer == ALTIUM_LAYER::MULTI_LAYER )
{
zone->SetLayer( F_Cu );
zone->SetLayerSet( LSET::AllCuMask() );
}
else
@ -1921,7 +1920,7 @@ void ALTIUM_PCB::ConvertShapeBasedRegions6ToBoardItem( const AREGION6& aElem )
aElem.layer );
klayer = Eco1_User;
}
zone->SetLayer( klayer );
zone->SetLayerSet( LSET( klayer ) );
}
zone->SetBorderDisplayStyle( ZONE_BORDER_DISPLAY_STYLE::DIAGONAL_EDGE,
@ -1975,13 +1974,12 @@ void ALTIUM_PCB::ConvertShapeBasedRegions6ToFootprintItem( FOOTPRINT* aFoot
if( aElem.layer == ALTIUM_LAYER::MULTI_LAYER )
{
zone->SetLayer( F_Cu );
zone->SetLayerSet( LSET::AllCuMask() );
}
else
{
std::vector<PCB_LAYER_ID> klayers = GetKicadLayersToIterate( aElem.layer );
zone->SetLayer( klayers.at( 0 ) );
zone->SetLayerSet( LSET( klayers.at( 0 ) ) );
}
zone->SetBorderDisplayStyle( ZONE_BORDER_DISPLAY_STYLE::DIAGONAL_EDGE,
@ -3270,13 +3268,12 @@ void ALTIUM_PCB::ConvertFills6ToBoardItemWithNet( const AFILL6& aElem )
zone->SetPriority( 1000 );
if( aElem.layer == ALTIUM_LAYER::MULTI_LAYER )
{
zone->SetLayer( F_Cu );
zone->SetLayerSet( LSET::AllCuMask() );
}
else
{
std::vector<PCB_LAYER_ID> klayers = GetKicadLayersToIterate( aElem.layer );
zone->SetLayer( klayers.at( 0 ) );
zone->SetLayerSet( LSET( klayers.at( 0 ) ) );
}
VECTOR2I p11( aElem.pos1.x, aElem.pos1.y );
@ -3374,13 +3371,12 @@ void ALTIUM_PCB::HelperPcpShapeAsBoardKeepoutRegion( const PCB_SHAPE& aShape,
if( aAltiumLayer == ALTIUM_LAYER::MULTI_LAYER )
{
zone->SetLayer( F_Cu );
zone->SetLayerSet( LSET::AllCuMask() );
}
else
{
std::vector<PCB_LAYER_ID> klayers = GetKicadLayersToIterate( aAltiumLayer );
zone->SetLayer( klayers.at( 0 ) );
zone->SetLayerSet( LSET( klayers.at( 0 ) ) );
}
aShape.EDA_SHAPE::TransformShapeWithClearanceToPolygon( *zone->Outline(), 0, ARC_HIGH_DEF,
@ -3407,13 +3403,12 @@ void ALTIUM_PCB::HelperPcpShapeAsFootprintKeepoutRegion( FOOTPRINT* aFootp
if( aAltiumLayer == ALTIUM_LAYER::MULTI_LAYER )
{
zone->SetLayer( F_Cu );
zone->SetLayerSet( LSET::AllCuMask() );
}
else
{
std::vector<PCB_LAYER_ID> klayers = GetKicadLayersToIterate( aAltiumLayer );
zone->SetLayer( klayers.at( 0 ) );
zone->SetLayerSet( LSET( klayers.at( 0 ) ) );
}
aShape.EDA_SHAPE::TransformShapeWithClearanceToPolygon( *zone->Outline(), 0, ARC_HIGH_DEF,

View File

@ -229,15 +229,14 @@ void CheckFootprint( const FOOTPRINT* expected, const FOOTPRINT* fp )
}
}
/*std::set<FP_ZONE*, FOOTPRINT::cmp_zones> expectedZones( expected->Zones().begin(),
std::set<FP_ZONE*, FOOTPRINT::cmp_zones> expectedZones( expected->Zones().begin(),
expected->Zones().end() );
std::set<FP_ZONE*, FOOTPRINT::cmp_zones> fp2Zones( fp->Zones().begin(),
fp->Zones().end() );
for( auto it1 = expectedZones.begin(), it2 = fp2Zones.begin();
it1 != expectedZones.end() && it2 != fp2Zones.end(); it1++, it2++ )
std::set<FP_ZONE*, FOOTPRINT::cmp_zones> fpZones( fp->Zones().begin(), fp->Zones().end() );
for( auto itExpected = expectedZones.begin(), itFp = fpZones.begin();
itExpected != expectedZones.end() && itFp != fpZones.end(); itExpected++, itFp++ )
{
// TODO: BOOST_CHECK( (*it1)->IsSame( **it2 ) );
}*/
CheckFpZone( *itExpected, *itFp );
}
// TODO: Groups
}
@ -336,7 +335,7 @@ void CheckFpShape( const FP_SHAPE* expected, const FP_SHAPE* shape )
BOOST_CHECK_EQUAL( expected->GetBezierC1(), shape->GetBezierC1() );
BOOST_CHECK_EQUAL( expected->GetBezierC2(), shape->GetBezierC2() );
// TODO: polyshape
CheckShapePolySet( &expected->GetPolyShape(), &shape->GetPolyShape() );
BOOST_CHECK_EQUAL( expected->GetLayer(), shape->GetLayer() );
BOOST_CHECK_EQUAL( expected->GetLayerSet(), shape->GetLayerSet() );
@ -348,4 +347,59 @@ void CheckFpShape( const FP_SHAPE* expected, const FP_SHAPE* shape )
}
void CheckFpZone( const FP_ZONE* expected, const FP_ZONE* zone )
{
CHECK_ENUM_CLASS_EQUAL( expected->Type(), zone->Type() );
BOOST_CHECK_EQUAL( expected->IsLocked(), zone->IsLocked() );
BOOST_CHECK_EQUAL( expected->GetNetCode(), zone->GetNetCode() );
BOOST_CHECK_EQUAL( expected->GetPriority(), zone->GetPriority() );
CHECK_ENUM_CLASS_EQUAL( expected->GetPadConnection(), zone->GetPadConnection() );
BOOST_CHECK_EQUAL( expected->GetLocalClearance(), zone->GetLocalClearance() );
BOOST_CHECK_EQUAL( expected->GetMinThickness(), zone->GetMinThickness() );
BOOST_CHECK_EQUAL( expected->GetLayer(), zone->GetLayer() ); // this is not used for zones
BOOST_CHECK_EQUAL( expected->GetLayerSet(), zone->GetLayerSet() );
BOOST_CHECK_EQUAL( expected->IsFilled(), zone->IsFilled() );
CHECK_ENUM_CLASS_EQUAL( expected->GetFillMode(), zone->GetFillMode() );
BOOST_CHECK_EQUAL( expected->GetHatchThickness(), zone->GetHatchThickness() );
BOOST_CHECK_EQUAL( expected->GetHatchGap(), zone->GetHatchGap() );
BOOST_CHECK_EQUAL( expected->GetHatchOrientation(), zone->GetHatchOrientation() );
BOOST_CHECK_EQUAL( expected->GetHatchSmoothingLevel(), zone->GetHatchSmoothingLevel() );
BOOST_CHECK_EQUAL( expected->GetHatchSmoothingValue(), zone->GetHatchSmoothingValue() );
BOOST_CHECK_EQUAL( expected->GetHatchBorderAlgorithm(), zone->GetHatchBorderAlgorithm() );
BOOST_CHECK_EQUAL( expected->GetHatchHoleMinArea(), zone->GetHatchHoleMinArea() );
BOOST_CHECK_EQUAL( expected->GetThermalReliefGap(), zone->GetThermalReliefGap() );
BOOST_CHECK_EQUAL( expected->GetThermalReliefSpokeWidth(), zone->GetThermalReliefSpokeWidth() );
BOOST_CHECK_EQUAL( expected->GetCornerSmoothingType(), zone->GetCornerSmoothingType() );
BOOST_CHECK_EQUAL( expected->GetCornerRadius(), zone->GetCornerRadius() );
CHECK_ENUM_CLASS_EQUAL( expected->GetIslandRemovalMode(), zone->GetIslandRemovalMode() );
BOOST_CHECK_EQUAL( expected->GetMinIslandArea(), zone->GetMinIslandArea() );
BOOST_CHECK_EQUAL( expected->GetIsRuleArea(), zone->GetIsRuleArea() );
BOOST_CHECK_EQUAL( expected->GetDoNotAllowCopperPour(), zone->GetDoNotAllowCopperPour() );
BOOST_CHECK_EQUAL( expected->GetDoNotAllowVias(), zone->GetDoNotAllowVias() );
BOOST_CHECK_EQUAL( expected->GetDoNotAllowTracks(), zone->GetDoNotAllowTracks() );
BOOST_CHECK_EQUAL( expected->GetDoNotAllowPads(), zone->GetDoNotAllowPads() );
BOOST_CHECK_EQUAL( expected->GetDoNotAllowFootprints(), zone->GetDoNotAllowFootprints() );
BOOST_CHECK_EQUAL( expected->GetZoneName(), zone->GetZoneName() );
CHECK_ENUM_CLASS_EQUAL( expected->GetTeardropAreaType(), zone->GetTeardropAreaType() );
BOOST_CHECK_EQUAL( expected->GetZoneName(), zone->GetZoneName() );
CheckShapePolySet( expected->Outline(), zone->Outline() );
// TODO: filled zones
}
void CheckShapePolySet( const SHAPE_POLY_SET* expected, const SHAPE_POLY_SET* polyset )
{
BOOST_CHECK_EQUAL( expected->OutlineCount(), polyset->OutlineCount() );
BOOST_CHECK_EQUAL( expected->TotalVertices(), polyset->TotalVertices() );
// TODO: check all outlines and holes
}
} // namespace KI_TEST

View File

@ -34,7 +34,9 @@ class BOARD_ITEM;
class FOOTPRINT;
class FP_TEXT;
class FP_SHAPE;
class FP_ZONE;
class PAD;
class SHAPE_POLY_SET;
class SETTINGS_MANAGER;
@ -79,6 +81,9 @@ void CheckFpText( const FP_TEXT* expected, const FP_TEXT* text );
void CheckFpShape( const FP_SHAPE* expected, const FP_SHAPE* shape );
void CheckFpZone( const FP_ZONE* expected, const FP_ZONE* zone );
void CheckShapePolySet( const SHAPE_POLY_SET* expected, const SHAPE_POLY_SET* polyset );
} // namespace KI_TEST