7
mirror of https://gitlab.com/kicad/code/kicad.git synced 2025-03-30 06:46:55 +00:00

Default to 4 user defined layers

This commit is contained in:
Ian McInerney 2025-02-02 00:43:03 +00:00
parent 9ab4fef369
commit 59a4cc2e4b
11 changed files with 98 additions and 26 deletions

View File

@ -654,17 +654,21 @@ LSET LSET::PhysicalLayersMask()
}
LSET LSET::UserDefinedLayers()
LSET LSET::UserDefinedLayersMask( int aUserDefinedLayerCount )
{
static const LSET saved(
{ User_1, User_2, User_3, User_4, User_5, User_6, User_7, User_8, User_9,
User_10, User_11, User_12, User_13, User_14, User_15, User_16, User_17, User_18,
User_19, User_20, User_21, User_22, User_23, User_24, User_25, User_26, User_27,
User_28, User_29, User_30, User_31, User_32, User_33, User_34, User_35, User_36,
User_37, User_38, User_39, User_40, User_41, User_42, User_43, User_44, User_45 } );
LSET ret;
size_t layer = User_1;
for( int ulayer = 1; ulayer <= aUserDefinedLayerCount; ulayer++ )
{
if( layer > ret.size() )
break;
return saved;
ret.set( layer );
layer += 2;
}
return ret;
}
@ -910,4 +914,13 @@ LSET& LSET::ClearNonCopperLayers()
return *this;
}
LSET& LSET::ClearUserDefinedLayers()
{
for( size_t ii = User_1; ii < size(); ii += 2 )
reset( ii );
return *this;
}
#endif

View File

@ -612,6 +612,21 @@ public:
*/
void SetCopperLayerCount( int aNewLayerCount );
/**
* @return the number of enabled user defined layers.
*/
inline int GetUserDefinedLayerCount() const
{
return m_userDefinedLayerCount;
}
/**
* Set the number of user defined layers to \a aNewLayerCount.
*
* @param aNewLayerCount The new number of enabled user defined layers.
*/
void SetUserDefinedLayerCount( int aNewLayerCount );
/**
* The full thickness of the board including copper and masks.
* @return
@ -796,6 +811,8 @@ private:
int m_copperLayerCount; ///< Number of copper layers for this design
int m_userDefinedLayerCount; ///< Number of user defined layers for this design
LSET m_enabledLayers; ///< Bit-mask for layer enabling
int m_boardThickness; ///< Board thickness for 3D viewer

View File

@ -173,7 +173,8 @@ enum PCB_LAYER_ID: int
constexpr PCB_LAYER_ID PCBNEW_LAYER_ID_START = F_Cu;
#define MAX_CU_LAYERS 32
#define MAX_CU_LAYERS 32
#define MAX_USER_DEFINED_LAYERS 45
/**
* Enum used during connectivity building to ensure we do not query connectivity while building

View File

@ -185,9 +185,11 @@ public:
static LSET PhysicalLayersMask();
/**
* Return a mask with all of the allowable user defined layers.
* Return a mask with the requested number of user defined layers.
*
* @param aUserDefinedLayerCount The number of user defined layers
*/
static LSET UserDefinedLayers();
static LSET UserDefinedLayersMask( int aUserDefinedLayerCount = MAX_USER_DEFINED_LAYERS );
/**
* Layers which are not allowed within footprint definitions.
@ -294,6 +296,11 @@ public:
*/
LSET& ClearNonCopperLayers();
/**
* Clear the user defined layers in this set.
*/
LSET& ClearUserDefinedLayers();
#ifndef SWIG
// Custom iterator to iterate over all set bits
class KICOMMON_API all_set_layers_iterator : public BASE_SET::set_bits_iterator

View File

@ -792,6 +792,17 @@ void BOARD::SetCopperLayerCount( int aCount )
}
int BOARD::GetUserDefinedLayerCount() const
{
return GetDesignSettings().GetUserDefinedLayerCount();
}
void BOARD::SetUserDefinedLayerCount( int aCount )
{
return GetDesignSettings().SetUserDefinedLayerCount( aCount );
}
PCB_LAYER_ID BOARD::GetCopperLayerStackMaxId() const
{
int imax = GetCopperLayerCount();

View File

@ -578,6 +578,9 @@ public:
int GetCopperLayerCount() const;
void SetCopperLayerCount( int aCount );
int GetUserDefinedLayerCount() const;
void SetUserDefinedLayerCount( int aCount );
/**
* @return The copper layer max PCB_LAYER_ID in the BOARD.
* similar to GetCopperLayerCount(), but returns the max PCB_LAYER_ID

View File

@ -57,10 +57,13 @@ BOARD_DESIGN_SETTINGS::BOARD_DESIGN_SETTINGS( JSON_SETTINGS* aParent, const std:
SetDefaultMasterPad();
LSET all_set = LSET().set();
m_enabledLayers = all_set; // All layers enabled at first.
// SetCopperLayerCount() will adjust this.
m_enabledLayers = all_set; // All layers enabled at first.
// SetCopperLayerCount() will adjust this.
// Default design is a double layer board with 4 user defined layers
SetCopperLayerCount( 2 );
SetUserDefinedLayerCount( 4 );
SetCopperLayerCount( 2 ); // Default design is a double sided board
m_CurrentViaType = VIATYPE::THROUGH;
// if true, when creating a new track starting on an existing track, use this track width
@ -1020,6 +1023,7 @@ void BOARD_DESIGN_SETTINGS::initFromOther( const BOARD_DESIGN_SETTINGS& aOther )
m_useCustomDiffPair = aOther.m_useCustomDiffPair;
m_customDiffPair = aOther.m_customDiffPair;
m_copperLayerCount = aOther.m_copperLayerCount;
m_userDefinedLayerCount = aOther.m_userDefinedLayerCount;
m_enabledLayers = aOther.m_enabledLayers;
m_boardThickness = aOther.m_boardThickness;
m_currentNetClassName = aOther.m_currentNetClassName;
@ -1115,6 +1119,7 @@ bool BOARD_DESIGN_SETTINGS::operator==( const BOARD_DESIGN_SETTINGS& aOther ) co
if( m_useCustomDiffPair != aOther.m_useCustomDiffPair ) return false;
if( m_customDiffPair != aOther.m_customDiffPair ) return false;
if( m_copperLayerCount != aOther.m_copperLayerCount ) return false;
if( m_userDefinedLayerCount != aOther.m_userDefinedLayerCount ) return false;
if( m_enabledLayers != aOther.m_enabledLayers ) return false;
if( m_boardThickness != aOther.m_boardThickness ) return false;
if( m_currentNetClassName != aOther.m_currentNetClassName ) return false;
@ -1446,6 +1451,17 @@ void BOARD_DESIGN_SETTINGS::SetCopperLayerCount( int aNewLayerCount )
}
void BOARD_DESIGN_SETTINGS::SetUserDefinedLayerCount( int aNewLayerCount )
{
m_userDefinedLayerCount = aNewLayerCount;
m_enabledLayers.ClearUserDefinedLayers();
if( aNewLayerCount > 0 )
m_enabledLayers |= LSET::UserDefinedLayersMask( aNewLayerCount );
}
void BOARD_DESIGN_SETTINGS::SetEnabledLayers( LSET aMask )
{
// Ensures mandatory back and front layers are always enabled regardless of board file
@ -1457,8 +1473,9 @@ void BOARD_DESIGN_SETTINGS::SetEnabledLayers( LSET aMask )
m_enabledLayers = aMask;
// update m_CopperLayerCount to ensure its consistency with m_EnabledLayers
m_copperLayerCount = (int) aMask.ClearNonCopperLayers().count();
// update layer counts to ensure their consistency with m_EnabledLayers
m_copperLayerCount = (int) aMask.ClearNonCopperLayers().count();
m_userDefinedLayerCount = (int) ( aMask & LSET::UserDefinedLayersMask() ).count();
}

View File

@ -450,7 +450,7 @@ void PANEL_SETUP_LAYERS::initialize_layers_controls()
m_layersControls[Cmts_User] = PANEL_SETUP_LAYERS_CTLs( m_CommentsName, m_CommentsCheckBox, m_CommentsStaticText );
m_layersControls[Dwgs_User] = PANEL_SETUP_LAYERS_CTLs( m_DrawingsName, m_DrawingsCheckBox, m_DrawingsStaticText );
layers &= LSET::UserDefinedLayers();
layers &= LSET::UserDefinedLayersMask();
for( auto it = layers.non_copper_layers_begin(); it != layers.non_copper_layers_end(); ++it )
{
@ -554,7 +554,7 @@ void PANEL_SETUP_LAYERS::SyncCopperLayers( int aNumCopperLayers )
void PANEL_SETUP_LAYERS::setUserDefinedLayerCheckBoxes()
{
LSET layers = m_enabledLayers & LSET::UserDefinedLayers();
LSET layers = m_enabledLayers & LSET::UserDefinedLayersMask();
for( PCB_LAYER_ID layer : layers )
setLayerCheckBox( layer, m_pcb->IsLayerEnabled( layer ) );
@ -609,7 +609,7 @@ void PANEL_SETUP_LAYERS::showLayerTypes()
}
layers = m_enabledLayers & LSET::UserDefinedLayers();
layers = m_enabledLayers & LSET::UserDefinedLayersMask();
for( PCB_LAYER_ID layer : layers )
{
@ -891,7 +891,7 @@ bool PANEL_SETUP_LAYERS::TransferDataFromWindow()
}
}
LSET layers = m_enabledLayers & LSET::UserDefinedLayers();
LSET layers = m_enabledLayers & LSET::UserDefinedLayersMask();
for( PCB_LAYER_ID layer : layers )
{
@ -1127,7 +1127,7 @@ void PANEL_SETUP_LAYERS::addUserDefinedLayer( wxCommandEvent& aEvent )
// Build the available user-defined layers list:
std::vector<wxArrayString> list;
for( PCB_LAYER_ID layer : LSET::UserDefinedLayers().Seq() )
for( PCB_LAYER_ID layer : LSET::UserDefinedLayersMask().Seq() )
{
wxCheckBox* checkBox = getCheckBox( layer );
@ -1157,7 +1157,7 @@ void PANEL_SETUP_LAYERS::addUserDefinedLayer( wxCommandEvent& aEvent )
PCB_LAYER_ID layer = UNDEFINED_LAYER;
for( PCB_LAYER_ID layer2 : LSET::UserDefinedLayers().Seq() )
for( PCB_LAYER_ID layer2 : LSET::UserDefinedLayersMask().Seq() )
{
if( LayerName( layer2 ) == dlg.GetTextSelection() )
{

View File

@ -79,6 +79,9 @@ bool PCB_EDIT_FRAME::Clear_Pcb( bool doAskAboutUnsavedChanges, bool aFinal )
// Default copper layers count set to 2: double layer board
GetBoard()->SetCopperLayerCount( 2 );
// Default user defined layers count set to 4
GetBoard()->SetUserDefinedLayerCount( 4 );
// Update display (some options depend on the board setup)
GetBoard()->SetVisibleLayers( LSET().set() );
ReCreateLayerBox();

View File

@ -1121,7 +1121,7 @@ void ALTIUM_PCB::remapUnsureLayers( std::vector<ABOARD6_LAYER_STACKUP>& aStackup
{
LSET enabledLayers = m_board->GetEnabledLayers();
LSET validRemappingLayers = enabledLayers | LSET::AllBoardTechMask() |
LSET::UserMask() | LSET::UserDefinedLayers();
LSET::UserMask() | LSET::UserDefinedLayersMask();
if( aStackup.size() == 0 )
return;

View File

@ -687,7 +687,7 @@ void CADSTAR_PCB_ARCHIVE_LOADER::remapUnsureLayers()
{
LSET enabledLayers = m_board->GetEnabledLayers();
LSET validRemappingLayers = enabledLayers | LSET::AllBoardTechMask() |
LSET::UserMask() | LSET::UserDefinedLayers();
LSET::UserMask() | LSET::UserDefinedLayersMask();
std::vector<INPUT_LAYER_DESC> inputLayers;
std::map<wxString, LAYER_ID> cadstarLayerNameMap;
@ -4167,7 +4167,7 @@ LSET CADSTAR_PCB_ARCHIVE_LOADER::getKiCadLayerSet( const LAYER_ID& aCadstarLayer
PCB_LAYER_ID::Cmts_User,
PCB_LAYER_ID::Eco1_User,
PCB_LAYER_ID::Eco2_User } )
| LSET::UserDefinedLayers();
| LSET::UserDefinedLayersMask();
case LAYER_TYPE::ALLELEC:
return LSET::AllCuMask( m_numCopperLayers );
@ -4178,7 +4178,7 @@ LSET CADSTAR_PCB_ARCHIVE_LOADER::getKiCadLayerSet( const LAYER_ID& aCadstarLayer
PCB_LAYER_ID::Cmts_User,
PCB_LAYER_ID::Eco1_User,
PCB_LAYER_ID::Eco2_User } )
| LSET::UserDefinedLayers()
| LSET::UserDefinedLayersMask()
| LSET::AllBoardTechMask();
default: