209 Pgm().
App().SetTopWindow( frame );
214 double cx, cy, sx, sy, ca, w;
217 const ARC_DATA test_data [] =
219 {73.843527, 74.355869, 71.713528, 72.965869, -76.36664803, 0.2},
220 {71.236473, 74.704131, 73.366472, 76.094131, -76.36664803, 0.2},
221 {82.542335, 74.825975, 80.413528, 73.435869, -76.4, 0.2},
222 {76.491192, 73.839894, 78.619999, 75.23, -76.4, 0.2},
223 {89.318807, 74.810106, 87.19, 73.42, -76.4, 0.2},
224 {87.045667, 74.632941, 88.826472, 75.794131, -267.9, 0.2},
225 {94.665667, 73.772941, 96.446472, 74.934131, -267.9, 0.2},
226 {94.750009, 73.74012, 93.6551, 73.025482, -255.5, 0.2},
227 {72.915251, 80.493054, 73.570159, 81.257692, -260.5, 0.2},
228 {73.063537, 82.295989, 71.968628, 81.581351, -255.5, 0.2},
229 {79.279991, 80.67988, 80.3749, 81.394518, -255.5, 0.2},
230 {79.279991, 80.67988, 80.3749, 81.694518, -255.5, 0.2 },
231 {88.495265, 81.766089, 90.090174, 82.867869, -255.5, 0.2},
232 {86.995265, 81.387966, 89.090174, 82.876887, -255.5, 0.2},
233 {96.149734, 81.792126, 94.99, 83.37, -347.2, 0.2},
234 {94.857156, 81.240589, 95.91, 83.9, -288.5, 0.2},
235 {72.915251, 86.493054, 73.970159, 87.257692, -260.5, 0.2},
236 {73.063537, 88.295989, 71.968628, 87.581351, -255.5, 0.2},
237 {78.915251, 86.393054, 79.970159, 87.157692, 99.5, 0.2},
238 {79.063537, 88.295989, 77.968628, 87.581351, -255.5, 0.2},
239 {85.915251, 86.993054, 86.970159, 87.757692, 99.5, 0.2},
240 {86.063537, 88.295989, 84.968628, 87.581351, -255.5, 0.2},
241 {94.6551, 88.295989, 95.6551, 88.295989, 90.0, 0.2 },
242 {94.6551, 88.295989, 95.8551, 88.295989, 90.0, 0.2 },
243 {73.77532, 93.413654, 75.70532, 93.883054, 60.0, 0.1 },
244 {73.86532, 93.393054, 75.86532, 93.393054, 90.0, 0.3 },
245 {79.87532, 93.413654, 81.64532, 94.113054, 60.0, 0.1 },
246 {79.87532, 93.413654, 81.86532, 93.393054, 90.0, 0.3 }
254 overlay->SetLineWidth( 10000 );
256 std::vector<SHAPE_ARC> arcs;
257 int n_arcs =
sizeof( test_data ) /
sizeof( ARC_DATA );
261 for(
int i = 0; i < n_arcs; i++ )
263 const ARC_DATA& d = test_data[i];
269 arcs.push_back( arc );
320 printf(
"Read %zu arcs\n", arcs.size() );
325 for(
int i = 0; i < arcs.size(); i+= 2 )
328 std::vector<VECTOR2I> ips;
329 bool collides =
collideArc2Arc( arcs[i], arcs[i+1], 0, closestDist );
330 int ni = arcs[i].Intersect( arcs[i+1], &ips );
332 overlay->SetLineWidth( 10000.0 );
335 for(
int j = 0; j < ni; j++ )
336 overlay->AnnotatedPoint( ips[j], arcs[i].GetWidth() );
341 overlay->Line( closestDist.
A, closestDist.
B );
342 overlay->SetLineWidth( 10000 );
343 overlay->SetGlyphSize( { 100000, 100000 } );
344 overlay->BitmapText( wxString::Format(
"dist=%d", closestDist.
Length() ),
345 closestDist.
A +
VECTOR2I( 0, -arcs[i].GetWidth() ),
349 overlay->SetLineWidth( 10000 );
351 overlay->AnnotatedPoint( arcs[i].GetP0(), arcs[i].GetWidth() / 2 );
352 overlay->AnnotatedPoint( arcs[i + 1].GetP0(), arcs[i + 1].GetWidth() / 2 );
353 overlay->AnnotatedPoint( arcs[i].GetArcMid(), arcs[i].GetWidth() / 2 );
354 overlay->AnnotatedPoint( arcs[i + 1].GetArcMid(), arcs[i + 1].GetWidth() / 2 );
355 overlay->AnnotatedPoint( arcs[i].GetP1(), arcs[i].GetWidth() / 2 );
356 overlay->AnnotatedPoint( arcs[i + 1].GetP1(), arcs[i + 1].GetWidth() / 2 );
367 overlay->AnnotatedPolyset( pad1Outline,
"Raw Pads" );
369 overlay->AnnotatedPolyset( pad2Outline );
371 overlay->AnnotatedPolyset( xorPad1ToPad2,
"XOR Pads" );
372 overlay->AnnotatedPolyset( andPad1ToPad2,
"AND Pads" );
379 int dist = std::numeric_limits<int>::max();
381 collide( pad1Outline, pad2Outline.
Outline( 0 ), dist, &dist, &pt1 );
383 wxLogDebug(
tracePnsPlayground, wxS(
"Nearest distance between pad 1 and pad 2 is %0.6f mm "
384 "at X=%0.6f mm, Y=%0.6f mm." ),
389 overlay->SetGlyphSize( { 100000, 100000 } );
390 overlay->BitmapText( wxString::Format(
"dist=%0.3f mm",
pcbIUScale.IUTomm( dist ) ),