75 BOOST_REQUIRE_MESSAGE( m_board,
"Failed to load board issue23389" );
79 std::shared_ptr<DRC_ITEM> item;
81 std::vector<PCB_SHAPE> pathShapes;
84 std::vector<ViolationInfo> violations;
87 BOOST_REQUIRE_MESSAGE( bds.
m_DRCEngine,
"DRC engine not initialized" );
95 [&](
const std::shared_ptr<DRC_ITEM>& aItem,
const VECTOR2I& aPos,
int aLayer,
96 const std::function<
void(
PCB_MARKER* )>& aPathGenerator )
108 aPathGenerator( &marker );
112 violations.push_back( vi );
119 BOOST_REQUIRE_GE( violations.size(), 1u );
122 std::map<KIID, BOARD_ITEM*> itemMap;
124 for(
PCB_TRACK* track : m_board->Tracks() )
125 itemMap[track->m_Uuid] = track;
127 for(
FOOTPRINT* fp : m_board->Footprints() )
129 itemMap[fp->m_Uuid] = fp;
131 for(
PAD*
pad : fp->Pads() )
132 itemMap[
pad->m_Uuid] =
pad;
135 for(
size_t i = 0; i < violations.size(); i++ )
137 const ViolationInfo& vi = violations[i];
140 vi.item->GetErrorMessage(
false ) ) );
142 vi.pos.x / 1e6, vi.pos.y / 1e6,
143 (
int) vi.pathShapes.size() ) );
145 for(
size_t j = 0; j < vi.pathShapes.size(); j++ )
152 " [%zu] SEG: (%.4f,%.4f)->(%.4f,%.4f) mm", j,
159 " [%zu] ARC: (%.4f,%.4f)->(%.4f,%.4f) c=(%.4f,%.4f) mm", j,
166 if( vi.pathShapes.empty() )
173 KIID idA = vi.item->GetMainItemID();
174 KIID idB = vi.item->GetAuxItemID();
176 auto itA = itemMap.find( idA );
177 auto itB = itemMap.find( idB );
179 if( itA != itemMap.end() )
182 if( itB != itemMap.end() )
202 for(
const BOARD_ITEM* item : { itemA, itemB } )
209 int halfWidth = track->
GetWidth() / 2;
211 int minDist = std::numeric_limits<int>::max();
213 for(
const PCB_SHAPE& s : vi.pathShapes )
220 " Track hw=%d closest_vertex=%d start=(%.4f,%.4f) end=(%.4f,%.4f)",
225 int tolerance = 10000;
228 std::abs( minDist - halfWidth ) <= tolerance,
230 "Violation %zu: closest path vertex is %d nm from track "
231 "centerline, expected %d nm (halfWidth +/- %d nm tolerance). "
232 "Path may be starting at track center instead of edge.",
233 i, minDist, halfWidth, tolerance ) );
DRC_CREEPAGE_PATH_FIXTURE()=default
std::unique_ptr< BOARD > m_board
SETTINGS_MANAGER m_settingsManager
BOOST_FIXTURE_TEST_CASE(CreepagePathStartPointIssue23576, DRC_CREEPAGE_PATH_FIXTURE)