62 for(
PAD*
pad : m_board->Footprints()[0]->Pads() )
64 if(
pad->GetNumber() ==
"2" ||
pad->GetNumber() ==
"4" ||
pad->GetNumber() ==
"6" )
72 for(
PCB_TRACK* track : m_board->Tracks() )
81 track->SetWidth( track->GetWidth() +
delta +
delta );
85 arc12 = track->m_Uuid;
91 bool foundPad2Error =
false;
92 bool foundPad4Error =
false;
93 bool foundPad6Error =
false;
94 bool foundArc8Error =
false;
95 bool foundArc12Error =
false;
96 bool foundOtherError =
false;
101 [&](
const std::shared_ptr<DRC_ITEM>& aItem, wxPoint aPos )
105 BOARD_ITEM* item_a = m_board->GetItem( aItem->GetMainItemID() );
106 PAD* pad_a = dynamic_cast<PAD*>( item_a );
107 PCB_TRACK* trk_a = dynamic_cast<PCB_TRACK*>( item_a );
109 BOARD_ITEM* item_b = m_board->GetItem( aItem->GetAuxItemID() );
110 PAD* pad_b = dynamic_cast<PAD*>( item_b );
111 PCB_TRACK* trk_b = dynamic_cast<PCB_TRACK*>( item_b );
113 if( pad_a && pad_a->
GetNumber() ==
"2" ) foundPad2Error =
true;
114 else if( pad_a && pad_a->
GetNumber() ==
"4" ) foundPad4Error =
true;
115 else if( pad_a && pad_a->
GetNumber() ==
"6" ) foundPad6Error =
true;
116 else if( pad_b && pad_b->
GetNumber() ==
"2" ) foundPad2Error =
true;
117 else if( pad_b && pad_b->
GetNumber() ==
"4" ) foundPad4Error =
true;
118 else if( pad_b && pad_b->
GetNumber() ==
"6" ) foundPad6Error =
true;
119 else if( trk_a && trk_a->
m_Uuid == arc8 ) foundArc8Error =
true;
120 else if( trk_a && trk_a->
m_Uuid == arc12 ) foundArc12Error =
true;
121 else if( trk_b && trk_b->
m_Uuid == arc8 ) foundArc8Error =
true;
122 else if( trk_b && trk_b->
m_Uuid == arc12 ) foundArc12Error =
true;
123 else foundOtherError =
true;
129 BOOST_CHECK_EQUAL( foundPad2Error,
true );
130 BOOST_CHECK_EQUAL( foundPad4Error,
true );
131 BOOST_CHECK_EQUAL( foundPad6Error,
true );
132 BOOST_CHECK_EQUAL( foundArc8Error,
true );
133 BOOST_CHECK_EQUAL( foundArc12Error,
true );
134 BOOST_CHECK_EQUAL( foundOtherError,
false );
150 for(
ZONE* zone : m_board->Zones() )
152 if( zone->GetLayerSet().Contains(
F_Cu ) )
166 for(
ZONE* zone : m_board->Zones() )
168 if( zone->GetLayerSet().Contains(
F_Cu ) )
170 frontCopper.BooleanAdd( zone->GetFilledPolysList(
F_Cu ),
175 BOOST_CHECK_EQUAL( frontCopper.OutlineCount(), 2 );
181 std::vector<wxString> tests = {
"issue18",
194 for(
const wxString& relPath : tests )
200 for(
int fillVersion : { 5, 6 } )
204 std::vector<DRC_ITEM> violations;
207 [&](
const std::shared_ptr<DRC_ITEM>& aItem, wxPoint aPos )
210 violations.push_back( *aItem );
215 if( violations.empty() )
217 BOOST_CHECK_EQUAL( 1, 1 );
218 BOOST_TEST_MESSAGE( (
const char*)(
wxString::Format(
"Zone fill regression: %s, V%d algo passed",
220 fillVersion ).utf8_str()) );
224 std::map<KIID, EDA_ITEM*> itemMap;
225 m_board->FillItemMap( itemMap );
227 for(
const DRC_ITEM& item : violations )
233 BOOST_ERROR( (
const char*) (
wxString::Format(
"Zone fill regression: %s, V%d algo failed",
235 fillVersion ).utf8_str()) );
int OutlineCount() const
Return the number of vertices in a given outline/hole.
void BooleanAdd(const SHAPE_POLY_SET &b, POLYGON_MODE aFastMode)
Perform boolean polyset difference For aFastMode meaning, see function booleanOp.
A base class for any item which can be embedded within the BOARD container class, and therefore insta...
static constexpr double IU_PER_MM
Mock up a conversion function.
class PCB_ARC, an arc track segment on a copper layer
BOOST_FIXTURE_TEST_CASE(BasicZoneFills, ZONE_FILL_TEST_FIXTURE)
Represent a set of closed polygons.
const wxString & GetNumber() const
Handle a list of polygons defining a copper zone.
SETTINGS_MANAGER m_settingsManager
std::unique_ptr< BOARD > m_board
void Format(OUTPUTFORMATTER *out, int aNestLevel, int aCtl, const CPTREE &aTree)
Output a PTREE into s-expression format via an OUTPUTFORMATTER derivative.
constexpr ret_type KiROUND(fp_type v)
Round a floating point number to an integer using "round halfway cases away from zero".
void FillZones(BOARD *m_board, int aFillVersion)
std::shared_ptr< DRC_ENGINE > m_DRCEngine
void LoadBoard(SETTINGS_MANAGER &aSettingsManager, const wxString &aRelPath, std::unique_ptr< BOARD > &aBoard)
Container for design settings for a BOARD object.