205 Pgm().
App().SetTopWindow( frame );
210 double cx, cy, sx, sy, ca, w;
213 const ARC_DATA test_data [] =
215 {73.843527, 74.355869, 71.713528, 72.965869, -76.36664803, 0.2},
216 {71.236473, 74.704131, 73.366472, 76.094131, -76.36664803, 0.2},
217 {82.542335, 74.825975, 80.413528, 73.435869, -76.4, 0.2},
218 {76.491192, 73.839894, 78.619999, 75.23, -76.4, 0.2},
219 {89.318807, 74.810106, 87.19, 73.42, -76.4, 0.2},
220 {87.045667, 74.632941, 88.826472, 75.794131, -267.9, 0.2},
221 {94.665667, 73.772941, 96.446472, 74.934131, -267.9, 0.2},
222 {94.750009, 73.74012, 93.6551, 73.025482, -255.5, 0.2},
223 {72.915251, 80.493054, 73.570159, 81.257692, -260.5, 0.2},
224 {73.063537, 82.295989, 71.968628, 81.581351, -255.5, 0.2},
225 {79.279991, 80.67988, 80.3749, 81.394518, -255.5, 0.2},
226 {79.279991, 80.67988, 80.3749, 81.694518, -255.5, 0.2 },
227 {88.495265, 81.766089, 90.090174, 82.867869, -255.5, 0.2},
228 {86.995265, 81.387966, 89.090174, 82.876887, -255.5, 0.2},
229 {96.149734, 81.792126, 94.99, 83.37, -347.2, 0.2},
230 {94.857156, 81.240589, 95.91, 83.9, -288.5, 0.2},
231 {72.915251, 86.493054, 73.970159, 87.257692, -260.5, 0.2},
232 {73.063537, 88.295989, 71.968628, 87.581351, -255.5, 0.2},
233 {78.915251, 86.393054, 79.970159, 87.157692, 99.5, 0.2},
234 {79.063537, 88.295989, 77.968628, 87.581351, -255.5, 0.2},
235 {85.915251, 86.993054, 86.970159, 87.757692, 99.5, 0.2},
236 {86.063537, 88.295989, 84.968628, 87.581351, -255.5, 0.2},
237 {94.6551, 88.295989, 95.6551, 88.295989, 90.0, 0.2 },
238 {94.6551, 88.295989, 95.8551, 88.295989, 90.0, 0.2 },
239 {73.77532, 93.413654, 75.70532, 93.883054, 60.0, 0.1 },
240 {73.86532, 93.393054, 75.86532, 93.393054, 90.0, 0.3 },
241 {79.87532, 93.413654, 81.64532, 94.113054, 60.0, 0.1 },
242 {79.87532, 93.413654, 81.86532, 93.393054, 90.0, 0.3 }
250 overlay->SetLineWidth( 10000 );
252 std::vector<SHAPE_ARC> arcs;
253 int n_arcs =
sizeof( test_data ) /
sizeof( ARC_DATA );
257 for(
int i = 0; i < n_arcs; i++ )
259 const ARC_DATA& d = test_data[i];
265 arcs.push_back( arc );
316 printf(
"Read %zu arcs\n", arcs.size() );
321 for(
int i = 0; i < arcs.size(); i+= 2 )
324 std::vector<VECTOR2I> ips;
325 bool collides =
collideArc2Arc( arcs[i], arcs[i+1], 0, closestDist );
326 int ni = arcs[i].Intersect( arcs[i+1], &ips );
328 overlay->SetLineWidth( 10000.0 );
331 for(
int j = 0; j < ni; j++ )
332 overlay->AnnotatedPoint( ips[j], arcs[i].GetWidth() );
337 overlay->Line( closestDist.
A, closestDist.
B );
338 overlay->SetLineWidth( 10000 );
339 overlay->SetGlyphSize( { 100000, 100000 } );
340 overlay->BitmapText( wxString::Format(
"dist=%d", closestDist.
Length() ),
341 closestDist.
A +
VECTOR2I( 0, -arcs[i].GetWidth() ),
345 overlay->SetLineWidth( 10000 );
347 overlay->AnnotatedPoint( arcs[i].GetP0(), arcs[i].GetWidth() / 2 );
348 overlay->AnnotatedPoint( arcs[i + 1].GetP0(), arcs[i + 1].GetWidth() / 2 );
349 overlay->AnnotatedPoint( arcs[i].GetArcMid(), arcs[i].GetWidth() / 2 );
350 overlay->AnnotatedPoint( arcs[i + 1].GetArcMid(), arcs[i + 1].GetWidth() / 2 );
351 overlay->AnnotatedPoint( arcs[i].GetP1(), arcs[i].GetWidth() / 2 );
352 overlay->AnnotatedPoint( arcs[i + 1].GetP1(), arcs[i + 1].GetWidth() / 2 );
363 overlay->AnnotatedPolyset( pad1Outline,
"Raw Pads" );
365 overlay->AnnotatedPolyset( pad2Outline );
367 overlay->AnnotatedPolyset( xorPad1ToPad2,
"XOR Pads" );
368 overlay->AnnotatedPolyset( andPad1ToPad2,
"AND Pads" );
375 int dist = std::numeric_limits<int>::max();
377 collide( pad1Outline, pad2Outline.
Outline( 0 ), dist, &dist, &pt1 );
379 wxLogTrace(
tracePnsPlayground, wxS(
"Nearest distance between pad 1 and pad 2 is %0.6f mm "
380 "at X=%0.6f mm, Y=%0.6f mm." ),
385 overlay->SetGlyphSize( { 100000, 100000 } );
386 overlay->BitmapText( wxString::Format(
"dist=%0.3f mm",
pcbIUScale.IUTomm( dist ) ),