39    int&           largestClearance = 
m_board->m_DRCMaxClearance;
 
   40    int&           largestPhysicalClearance = 
m_board->m_DRCMaxPhysicalClearance;
 
   45    largestClearance = std::max( largestClearance, 
m_board->GetMaxClearanceValue() );
 
   48        largestPhysicalClearance = worstConstraint.
GetValue().
Min();
 
   51        largestPhysicalClearance = std::max( largestPhysicalClearance, worstConstraint.
GetValue().
Min() );
 
   54    largestClearance = std::min( largestClearance, INT_MAX / 3 );
 
   55    largestPhysicalClearance = std::min( largestPhysicalClearance, INT_MAX / 3 );
 
   57    std::set<ZONE*> allZones;
 
   60            []( 
ZONE* zone, 
const LSET& copperLayers )
 
   67                        fill->BuildBBoxCaches();
 
   73        allZones.insert( zone );
 
   77            m_board->m_DRCZones.push_back( zone );
 
   81            if( zoneCopperLayers.any() )
 
   83                cacheBBoxes( zone, zoneCopperLayers );
 
   84                m_board->m_DRCCopperZones.push_back( zone );
 
   91        for( 
ZONE* zone : footprint->Zones() )
 
   93            allZones.insert( zone );
 
   97                m_board->m_DRCZones.push_back( zone );
 
  101                if( zoneCopperLayers.any() )
 
  103                    cacheBBoxes( zone, zoneCopperLayers );
 
  104                    m_board->m_DRCCopperZones.push_back( zone );
 
  111    std::atomic<size_t> done( 1 );
 
  120    auto addToCopperTree =
 
  126                LSET copperLayers = item->GetLayerSet() & boardCopperLayers;
 
  134                        copperLayers = boardCopperLayers;
 
  140                            m_board->m_CopperItemRTreeCache->Insert( item, layer, largestClearance );
 
  150    static const std::vector<KICAD_T> itemTypes = {
 
  162    std::future<void> retn = 
tp.submit_task(
 
  165                std::unique_lock<std::shared_mutex> writeLock( 
m_board->m_CachesMutex );
 
  167                if( !
m_board->m_CopperItemRTreeCache )
 
  168                    m_board->m_CopperItemRTreeCache = std::make_shared<DRC_RTREE>();
 
  173    std::future_status status = retn.wait_for( std::chrono::milliseconds( 250 ) );
 
  175    while( status != std::future_status::ready )
 
  178        status = retn.wait_for( std::chrono::milliseconds( 250 ) );
 
  181    if( !
reportPhase( 
_( 
"Tessellating copper zones..." ) ) )
 
  189        footprint->BuildCourtyardCaches();
 
  190        footprint->BuildNetTieCache();
 
  193    std::vector<std::future<size_t>> returns;
 
  195    returns.reserve( allZones.size() );
 
  198            [
this, &done]( 
ZONE* aZone ) -> 
size_t 
  203                aZone->CacheBoundingBox();
 
  204                aZone->CacheTriangulation();
 
  206                if( !aZone->GetIsRuleArea() && aZone->IsOnCopperLayer() )
 
  208                   std::unique_ptr<DRC_RTREE> rtree = std::make_unique<DRC_RTREE>();
 
  210                   aZone->GetLayerSet().RunOnLayers(
 
  214                                   rtree->Insert( aZone, layer );
 
  218                       std::unique_lock<std::shared_mutex> writeLock( 
m_board->m_CachesMutex );
 
  219                       m_board->m_CopperZoneRTreeCache[ aZone ] = std::move( rtree );
 
  228    for( 
ZONE* zone : allZones )
 
  230        returns.emplace_back( 
tp.submit_task(
 
  233                    return cache_zones( zone );
 
  239    for( 
const std::future<size_t>& ret : returns )
 
  241        status = ret.wait_for( std::chrono::milliseconds( 250 ) );
 
  243        while( status != std::future_status::ready )
 
  246            status = ret.wait_for( std::chrono::milliseconds( 250 ) );
 
  250    m_board->m_ZoneIsolatedIslandsMap.clear();
 
  264    std::shared_ptr<CONNECTIVITY_DATA> connectivity = 
m_board->GetConnectivity();
 
  266    connectivity->ClearRatsnest();
 
  268    connectivity->FillIsolatedIslandsMap( 
m_board->m_ZoneIsolatedIslandsMap, 
true );