127    if( aShapeList.size() == 0 )
 
  132    KDTree                      kdTree( 2, adaptor );
 
  137        return ( aRef - aFirst ).SquaredEuclideanNorm() < ( aRef - aSecond ).SquaredEuclideanNorm();
 
  143        return std::min( ( aRef - aFirst ).SquaredEuclideanNorm(),
 
  144                         ( aRef - aSecond ).SquaredEuclideanNorm() );
 
  149        bool success = 
false;
 
  152        SHAPE_T shape1 = aShape->GetShape();
 
  157            SEG seg1( aShape->GetStart(), aShape->GetEnd() );
 
  159            d[0] = ( seg0.
A - seg1.
A ).SquaredEuclideanNorm();
 
  160            d[1] = ( seg0.
A - seg1.
B ).SquaredEuclideanNorm();
 
  161            d[2] = ( seg0.
B - seg1.
A ).SquaredEuclideanNorm();
 
  162            d[3] = ( seg0.
B - seg1.
B ).SquaredEuclideanNorm();
 
  164            int idx = std::min_element( d, d + 4 ) - d;
 
  175                        aPrevShape->
SetEnd( *inter );
 
  178                        aShape->SetStart( *inter );
 
  180                        aShape->SetEnd( *inter );
 
  196            d[0] = ( segPts[0] - 
arcPts[0] ).SquaredEuclideanNorm();
 
  197            d[1] = ( segPts[0] - 
arcPts[1] ).SquaredEuclideanNorm();
 
  198            d[2] = ( segPts[1] - 
arcPts[0] ).SquaredEuclideanNorm();
 
  199            d[3] = ( segPts[1] - 
arcPts[1] ).SquaredEuclideanNorm();
 
  201            int idx = std::min_element( d, d + 4 ) - d;
 
  222            d[0] = ( pts0[0] - pts1[0] ).SquaredEuclideanNorm();
 
  223            d[1] = ( pts0[0] - pts1[1] ).SquaredEuclideanNorm();
 
  224            d[2] = ( pts0[1] - pts1[0] ).SquaredEuclideanNorm();
 
  225            d[3] = ( pts0[1] - pts1[1] ).SquaredEuclideanNorm();
 
  227            int idx = std::min_element( d, d + 4 ) - d;
 
  230            VECTOR2I middle = ( pts0[i0] + pts1[i1] ) / 2;
 
  254            d[0] = ( bezPts[0] - 
arcPts[0] ).SquaredEuclideanNorm();
 
  255            d[1] = ( bezPts[0] - 
arcPts[1] ).SquaredEuclideanNorm();
 
  256            d[2] = ( bezPts[1] - 
arcPts[0] ).SquaredEuclideanNorm();
 
  257            d[3] = ( bezPts[1] - 
arcPts[1] ).SquaredEuclideanNorm();
 
  259            int idx = std::min_element( d, d + 4 ) - d;
 
  305            d[0] = ( segPts[0] - bezPts[0] ).SquaredEuclideanNorm();
 
  306            d[1] = ( segPts[0] - bezPts[1] ).SquaredEuclideanNorm();
 
  307            d[2] = ( segPts[1] - bezPts[0] ).SquaredEuclideanNorm();
 
  308            d[3] = ( segPts[1] - bezPts[1] ).SquaredEuclideanNorm();
 
  310            int idx = std::min_element( d, d + 4 ) - d;
 
  314            case 0: segShape->
SetStart( bezPts[0] ); 
break;
 
  315            case 1: segShape->
SetStart( bezPts[1] ); 
break;
 
  316            case 2: segShape->
SetEnd( bezPts[0] ); 
break;
 
  317            case 3: segShape->
SetEnd( bezPts[1] ); 
break;
 
  331            d[0] = ( pts0[0] - pts1[0] ).SquaredEuclideanNorm();
 
  332            d[1] = ( pts0[0] - pts1[1] ).SquaredEuclideanNorm();
 
  333            d[2] = ( pts0[1] - pts1[0] ).SquaredEuclideanNorm();
 
  334            d[3] = ( pts0[1] - pts1[1] ).SquaredEuclideanNorm();
 
  336            int idx = std::min_element( d, d + 4 ) - d;
 
  339            VECTOR2I middle = ( pts0[i0] + pts1[i1] ) / 2;
 
  377    std::set<PCB_SHAPE*> startCandidates;
 
  384            startCandidates.emplace( shape );
 
  388    while( startCandidates.size() )
 
  390        graphic = *startCandidates.begin();
 
  400                        findNext( curr_graphic, prevPt, kdTree, adaptor, aChainingEpsilon );
 
  405                connectPair( curr_graphic, nextGraphic );
 
  410                curr_graphic = nextGraphic;
 
  412                startCandidates.erase( curr_graphic );
 
  419        PCB_SHAPE* grAtEnd = 
findNext( graphic, ptEnd, kdTree, adaptor, aChainingEpsilon );
 
  420        PCB_SHAPE* grAtStart = 
findNext( graphic, ptStart, kdTree, adaptor, aChainingEpsilon );
 
  422        bool beginFromEndPt = 
true;
 
  425        if( grAtEnd && grAtStart )
 
  430                    min_distance_sq( ptStart, grAtStart->
GetStart(), grAtStart->
GetEnd() );
 
  432            beginFromEndPt = dAtEnd <= dAtStart;
 
  435            beginFromEndPt = 
true;
 
  437            beginFromEndPt = 
false;
 
  442            walkFrom( graphic, graphic->
GetEnd() );
 
  443            walkFrom( graphic, graphic->
GetStart() );
 
  447            walkFrom( graphic, graphic->
GetStart() );
 
  448            walkFrom( graphic, graphic->
GetEnd() );
 
  451        startCandidates.erase( graphic );