// Compute the access code for a pad. Returns -1 if there is no copper static int compute_pad_access_code( BOARD *aPcb, LSET aLayerMask ) { // Non-copper is not interesting here aLayerMask &= LSET::AllCuMask(); if( !aLayerMask.any() ) return -1; // Traditional TH pad if( aLayerMask[F_Cu] && aLayerMask[B_Cu] ) return 0; // Front SMD pad if( aLayerMask[F_Cu] ) return 1; // Back SMD pad if( aLayerMask[B_Cu] ) return aPcb->GetCopperLayerCount(); // OK, we have an inner-layer only pad (and I have no idea about // what could be used for); anyway, find the first copper layer // it's on for( LAYER_NUM layer = In1_Cu; layer < B_Cu; ++layer ) { if( aLayerMask[layer] ) return layer + 1; } // This shouldn't happen return -1; }
bool PCB_SELECTION_CONDITIONS::sameLayerFunc( const SELECTION& aSelection ) { if( aSelection.Empty() ) return false; LSET layerSet; layerSet.set(); for( const auto& i : aSelection ) { auto item = static_cast<BOARD_ITEM*>( i ); layerSet &= item->GetLayerSet(); if( !layerSet.any() ) // there are no common layers left return false; } return true; }
bool SELECTION_CONDITIONS::sameLayerFunc( const SELECTION& aSelection ) { if( aSelection.Empty() ) return false; LSET layerSet; layerSet.set(); for( int i = 0; i < aSelection.Size(); ++i ) { const BOARD_ITEM* item = dynamic_cast<const BOARD_ITEM*>( aSelection.Item<EDA_ITEM>( i ) ); if( !item ) return false; layerSet &= item->GetLayerSet(); if( !layerSet.any() ) // there are no common layers left return false; } return true; }