KiCad PCB EDA Suite
layers_id_colors_and_visibility.h File Reference

Board layer functions and definitions. More...

#include <vector>
#include <bitset>
#include <wx/string.h>
#include <macros.h>

Go to the source code of this file.

Classes

class  LSEQ
 Class LSEQ is a sequence (and therefore also a set) of PCB_LAYER_IDs. More...
 
class  LSET
 Class LSET is a set of PCB_LAYER_IDs. More...
 

Macros

#define MAX_CU_LAYERS   (B_Cu - F_Cu + 1)
 
#define NETNAMES_LAYER_INDEX(layer)   ( NETNAMES_LAYER_ID_START + layer )
 Macro for obtaining netname layer for a given PCB layer. More...
 
#define GAL_LAYER_INDEX(x)   ( x - GAL_LAYER_ID_START )
 Use this macro to convert a GAL layer to a 0-indexed offset from LAYER_VIAS. More...
 
#define SCH_LAYER_ID_COUNT   ( SCH_LAYER_ID_END - SCH_LAYER_ID_START )
 
#define SCH_LAYER_INDEX(x)   ( x - SCH_LAYER_ID_START )
 
#define GERBER_DRAWLAYERS_COUNT   32
 
#define LAYER_ID_COUNT   GERBVIEW_LAYER_ID_END
 Must update this if you add any enums after GerbView! More...
 
#define MIN_VISIBILITY_MASK
 

Typedefs

typedef int LAYER_NUM
 Type LAYER_NUM can be replaced with int and removed. More...
 
typedef std::vector< PCB_LAYER_IDBASE_SEQ
 A sequence of layers, a sequence provides a certain order. More...
 
typedef std::bitset< PCB_LAYER_ID_COUNTBASE_SET
 

Enumerations

enum  PCB_LAYER_ID : int {
  UNDEFINED_LAYER = -1, UNSELECTED_LAYER = -2, F_Cu = 0, In1_Cu,
  In2_Cu, In3_Cu, In4_Cu, In5_Cu,
  In6_Cu, In7_Cu, In8_Cu, In9_Cu,
  In10_Cu, In11_Cu, In12_Cu, In13_Cu,
  In14_Cu, In15_Cu, In16_Cu, In17_Cu,
  In18_Cu, In19_Cu, In20_Cu, In21_Cu,
  In22_Cu, In23_Cu, In24_Cu, In25_Cu,
  In26_Cu, In27_Cu, In28_Cu, In29_Cu,
  In30_Cu, B_Cu, B_Adhes, F_Adhes,
  B_Paste, F_Paste, B_SilkS, F_SilkS,
  B_Mask, F_Mask, Dwgs_User, Cmts_User,
  Eco1_User, Eco2_User, Edge_Cuts, Margin,
  B_CrtYd, F_CrtYd, B_Fab, F_Fab,
  PCB_LAYER_ID_COUNT
}
 A quick note on layer IDs: More...
 
enum  NETNAMES_LAYER_ID : int {
  NETNAMES_LAYER_ID_START = PCB_LAYER_ID_COUNT, NETNAMES_LAYER_ID_RESERVED = NETNAMES_LAYER_ID_START + PCB_LAYER_ID_COUNT, LAYER_PAD_FR_NETNAMES, LAYER_PAD_BK_NETNAMES,
  LAYER_PADS_NETNAMES, LAYER_VIAS_NETNAMES, NETNAMES_LAYER_ID_END
}
 Dedicated layers for net names used in Pcbnew. More...
 
enum  GAL_LAYER_ID : int {
  GAL_LAYER_ID_START = NETNAMES_LAYER_ID_END, LAYER_VIAS = GAL_LAYER_ID_START, LAYER_VIA_MICROVIA, LAYER_VIA_BBLIND,
  LAYER_VIA_THROUGH, LAYER_NON_PLATED, LAYER_MOD_TEXT_FR, LAYER_MOD_TEXT_BK,
  LAYER_MOD_TEXT_INVISIBLE, LAYER_ANCHOR, LAYER_PAD_FR, LAYER_PAD_BK,
  LAYER_RATSNEST, LAYER_GRID, LAYER_GRID_AXES, LAYER_NO_CONNECTS,
  LAYER_MOD_FR, LAYER_MOD_BK, LAYER_MOD_VALUES, LAYER_MOD_REFERENCES,
  LAYER_TRACKS, LAYER_PADS, LAYER_PADS_HOLES, LAYER_VIAS_HOLES,
  LAYER_DRC, LAYER_WORKSHEET, LAYER_GP_OVERLAY, LAYER_PCB_BACKGROUND,
  LAYER_CURSOR, LAYER_AUX_ITEMS, GAL_LAYER_ID_BITMASK_END, GAL_LAYER_ID_END
}
 GAL layers are "virtual" layers, i.e. More...
 
enum  SCH_LAYER_ID : int {
  SCH_LAYER_ID_START = GAL_LAYER_ID_END, LAYER_WIRE = SCH_LAYER_ID_START, LAYER_BUS, LAYER_JUNCTION,
  LAYER_LOCLABEL, LAYER_GLOBLABEL, LAYER_HIERLABEL, LAYER_PINNUM,
  LAYER_PINNAM, LAYER_REFERENCEPART, LAYER_VALUEPART, LAYER_FIELDS,
  LAYER_DEVICE, LAYER_NOTES, LAYER_NETNAM, LAYER_PIN,
  LAYER_SHEET, LAYER_SHEETNAME, LAYER_SHEETFILENAME, LAYER_SHEETLABEL,
  LAYER_NOCONNECT, LAYER_ERC_WARN, LAYER_ERC_ERR, LAYER_DEVICE_BACKGROUND,
  LAYER_SCHEMATIC_GRID, LAYER_SCHEMATIC_BACKGROUND, LAYER_BRIGHTENED, SCH_LAYER_ID_END
}
 Eeschema drawing layers. More...
 
enum  GERBVIEW_LAYER_ID : int {
  GERBVIEW_LAYER_ID_START = SCH_LAYER_ID_END, GERBVIEW_LAYER_ID_RESERVED = GERBVIEW_LAYER_ID_START + GERBER_DRAWLAYERS_COUNT, LAYER_DCODES, LAYER_NEGATIVE_OBJECTS,
  LAYER_GERBVIEW_GRID, LAYER_GERBVIEW_AXES, LAYER_GERBVIEW_BACKGROUND, GERBVIEW_LAYER_ID_END
}
 GerbView draw layers. More...
 

Functions

GAL_LAYER_ID operator++ (GAL_LAYER_ID &a)
 
GAL_LAYER_ID operator+ (const GAL_LAYER_ID &a, int b)
 Used for via types. More...
 
SCH_LAYER_ID operator++ (SCH_LAYER_ID &a)
 
bool IsValidLayer (LAYER_NUM aLayerId)
 Function IsValidLayer tests whether a given integer is a valid layer index, i.e. More...
 
bool IsPcbLayer (LAYER_NUM aLayer)
 Function IsPcbLayer tests whether a layer is a valid layer for pcbnew. More...
 
bool IsCopperLayer (LAYER_NUM aLayerId)
 Function IsCopperLayer tests whether a layer is a copper layer. More...
 
bool IsNonCopperLayer (LAYER_NUM aLayerId)
 Function IsNonCopperLayer tests whether a layer is a non copper layer. More...
 
bool IsUserLayer (PCB_LAYER_ID aLayerId)
 Function IsUserLayer tests whether a layer is a non copper and a non tech layer. More...
 
bool IsFrontLayer (PCB_LAYER_ID aLayerId)
 Layer classification: check if it's a front layer. More...
 
bool IsBackLayer (PCB_LAYER_ID aLayerId)
 Layer classification: check if it's a back layer. More...
 
PCB_LAYER_ID FlipLayer (PCB_LAYER_ID aLayerId, int aCopperLayersCount=0)
 Function FlippedLayerNumber. More...
 
LSET FlipLayerMask (LSET aMask, int aCopperLayersCount=0)
 Calculate the mask layer when flipping a footprint BACK and FRONT copper layers, mask, paste, solder layers are swapped internal layers are flipped only if the copper layers count is known. More...
 
int GetNetnameLayer (int aLayer)
 Returns a netname layer corresponding to the given layer. More...
 
bool IsNetnameLayer (LAYER_NUM aLayer)
 Function IsNetnameLayer tests whether a layer is a netname layer. More...
 
PCB_LAYER_ID ToLAYER_ID (int aLayer)
 

Detailed Description

Board layer functions and definitions.

Definition in file layers_id_colors_and_visibility.h.

Macro Definition Documentation

#define GAL_LAYER_INDEX (   x)    ( x - GAL_LAYER_ID_START )
#define LAYER_ID_COUNT   GERBVIEW_LAYER_ID_END

Must update this if you add any enums after GerbView!

Definition at line 292 of file layers_id_colors_and_visibility.h.

Referenced by KIGFX::RENDER_SETTINGS::update().

#define MIN_VISIBILITY_MASK
Value:
int( (1 << GAL_LAYER_INDEX( LAYER_TRACKS ) ) +\
( 1 << GAL_LAYER_INDEX( LAYER_PADS ) ) +\
( 1 << GAL_LAYER_INDEX( LAYER_DRC ) ) +\
to draw via holes (pad holes do not use this layer)
#define GAL_LAYER_INDEX(x)
Use this macro to convert a GAL layer to a 0-indexed offset from LAYER_VIAS.
multilayer pads, usually with holes
general purpose overlay
to draw pad holes (plated or not plated)

Definition at line 299 of file layers_id_colors_and_visibility.h.

Referenced by PCB_PARSER::parseSetup().

#define NETNAMES_LAYER_INDEX (   layer)    ( NETNAMES_LAYER_ID_START + layer )

Macro for obtaining netname layer for a given PCB layer.

Definition at line 162 of file layers_id_colors_and_visibility.h.

Referenced by GetNetnameLayer(), IsNetnameLayer(), and PCB_DRAW_PANEL_GAL::SetTopLayer().

#define SCH_LAYER_ID_COUNT   ( SCH_LAYER_ID_END - SCH_LAYER_ID_START )

Typedef Documentation

typedef std::vector<PCB_LAYER_ID> BASE_SEQ

A sequence of layers, a sequence provides a certain order.

Definition at line 309 of file layers_id_colors_and_visibility.h.

typedef std::bitset<PCB_LAYER_ID_COUNT> BASE_SET

Definition at line 359 of file layers_id_colors_and_visibility.h.

typedef int LAYER_NUM

Type LAYER_NUM can be replaced with int and removed.

Until then, it is something you can increment, and its meaning is only advisory but can extend beyond PCB layers into view layers and gerber layers.

Definition at line 39 of file layers_id_colors_and_visibility.h.

Enumeration Type Documentation

enum GAL_LAYER_ID : int

GAL layers are "virtual" layers, i.e.

not tied into design data. Some layers here are shared between applications.

Enumerator
GAL_LAYER_ID_START 
LAYER_VIAS 
LAYER_VIA_MICROVIA 

to draw micro vias

LAYER_VIA_BBLIND 

to draw blind/buried vias

LAYER_VIA_THROUGH 

to draw usual through hole vias

LAYER_NON_PLATED 

handle color for not plated holes

LAYER_MOD_TEXT_FR 
LAYER_MOD_TEXT_BK 
LAYER_MOD_TEXT_INVISIBLE 

text marked as invisible

LAYER_ANCHOR 

anchor of items having an anchor point (texts, footprints)

LAYER_PAD_FR 

smd pads, front layer

LAYER_PAD_BK 

smd pads, back layer

LAYER_RATSNEST 
LAYER_GRID 
LAYER_GRID_AXES 
LAYER_NO_CONNECTS 

show a marker on pads with no nets

LAYER_MOD_FR 

show modules on front

LAYER_MOD_BK 

show modules on back

LAYER_MOD_VALUES 

show modules values (when texts are visibles)

LAYER_MOD_REFERENCES 

show modules references (when texts are visibles)

LAYER_TRACKS 
LAYER_PADS 

multilayer pads, usually with holes

LAYER_PADS_HOLES 

to draw pad holes (plated or not plated)

LAYER_VIAS_HOLES 

to draw via holes (pad holes do not use this layer)

LAYER_DRC 

drc markers

LAYER_WORKSHEET 

worksheet frame

LAYER_GP_OVERLAY 

general purpose overlay

LAYER_PCB_BACKGROUND 

PCB background color.

LAYER_CURSOR 

PCB cursor.

LAYER_AUX_ITEMS 

Auxillary items (guides, rulre, etc)

GAL_LAYER_ID_BITMASK_END 

This is the end of the layers used for visibility bitmasks in Pcbnew There can be at most 32 layers above here.

GAL_LAYER_ID_END 

Add new GAL layers here.

Definition at line 166 of file layers_id_colors_and_visibility.h.

166  : int
167 {
169 
178  LAYER_ANCHOR,
179  LAYER_PAD_FR,
180  LAYER_PAD_BK,
182  LAYER_GRID,
185  LAYER_MOD_FR,
186  LAYER_MOD_BK,
189  LAYER_TRACKS,
190  LAYER_PADS,
193  LAYER_DRC,
197  LAYER_CURSOR,
199 
203 
205 
207 };
to draw blind/buried vias
show a marker on pads with no nets
anchor of items having an anchor point (texts, footprints)
show modules on back
to draw via holes (pad holes do not use this layer)
show modules values (when texts are visibles)
This is the end of the layers used for visibility bitmasks in Pcbnew There can be at most 32 layers a...
Add new GAL layers here.
smd pads, back layer
show modules on front
Auxillary items (guides, rulre, etc)
multilayer pads, usually with holes
to draw usual through hole vias
general purpose overlay
to draw pad holes (plated or not plated)
smd pads, front layer
handle color for not plated holes
show modules references (when texts are visibles)
enum GERBVIEW_LAYER_ID : int

GerbView draw layers.

Enumerator
GERBVIEW_LAYER_ID_START 
GERBVIEW_LAYER_ID_RESERVED 

GerbView draw layers.

LAYER_DCODES 
LAYER_NEGATIVE_OBJECTS 
LAYER_GERBVIEW_GRID 
LAYER_GERBVIEW_AXES 
LAYER_GERBVIEW_BACKGROUND 
GERBVIEW_LAYER_ID_END 

Definition at line 275 of file layers_id_colors_and_visibility.h.

enum NETNAMES_LAYER_ID : int

Dedicated layers for net names used in Pcbnew.

Enumerator
NETNAMES_LAYER_ID_START 
NETNAMES_LAYER_ID_RESERVED 

Reserved space for board layer netnames.

LAYER_PAD_FR_NETNAMES 

Additional netnames layers (not associated with a PCB layer)

LAYER_PAD_BK_NETNAMES 
LAYER_PADS_NETNAMES 
LAYER_VIAS_NETNAMES 
NETNAMES_LAYER_ID_END 

Definition at line 142 of file layers_id_colors_and_visibility.h.

enum PCB_LAYER_ID : int

A quick note on layer IDs:

The layers are stored in separate enums so that certain functions can take in the enums as datatypes and don't have to know about layers from other applications.

Layers that are shared between applications should be in the GAL_LAYER_ID enum.

The PCB_LAYER_ID struct must start at zero for compatibility with legacy board files.

Some functions accept any layer ID, so they start at zero (i.e. F_Cu) and go up to the LAYER_ID_COUNT, which needs to be kept up-to-date if new enums are added. Enum PCB_LAYER_ID This is the definition of all layers used in Pcbnew The PCB layer types are fixed at value 0 through LAYER_ID_COUNT, to ensure compatibility with legacy board files.

Enumerator
UNDEFINED_LAYER 
UNSELECTED_LAYER 
F_Cu 
In1_Cu 
In2_Cu 
In3_Cu 
In4_Cu 
In5_Cu 
In6_Cu 
In7_Cu 
In8_Cu 
In9_Cu 
In10_Cu 
In11_Cu 
In12_Cu 
In13_Cu 
In14_Cu 
In15_Cu 
In16_Cu 
In17_Cu 
In18_Cu 
In19_Cu 
In20_Cu 
In21_Cu 
In22_Cu 
In23_Cu 
In24_Cu 
In25_Cu 
In26_Cu 
In27_Cu 
In28_Cu 
In29_Cu 
In30_Cu 
B_Cu 
B_Adhes 
F_Adhes 
B_Paste 
F_Paste 
B_SilkS 
F_SilkS 
B_Mask 
F_Mask 
Dwgs_User 
Cmts_User 
Eco1_User 
Eco2_User 
Edge_Cuts 
Margin 
B_CrtYd 
F_CrtYd 
B_Fab 
F_Fab 
PCB_LAYER_ID_COUNT 

Definition at line 73 of file layers_id_colors_and_visibility.h.

73  : int
74 {
75  UNDEFINED_LAYER = -1,
76  UNSELECTED_LAYER = -2,
77 
78  F_Cu = 0, // 0
79  In1_Cu,
80  In2_Cu,
81  In3_Cu,
82  In4_Cu,
83  In5_Cu,
84  In6_Cu,
85  In7_Cu,
86  In8_Cu,
87  In9_Cu,
88  In10_Cu,
89  In11_Cu,
90  In12_Cu,
91  In13_Cu,
92  In14_Cu,
93  In15_Cu,
94  In16_Cu,
95  In17_Cu,
96  In18_Cu,
97  In19_Cu,
98  In20_Cu,
99  In21_Cu,
100  In22_Cu,
101  In23_Cu,
102  In24_Cu,
103  In25_Cu,
104  In26_Cu,
105  In27_Cu,
106  In28_Cu,
107  In29_Cu,
108  In30_Cu,
109  B_Cu, // 31
110 
111  B_Adhes,
112  F_Adhes,
113 
114  B_Paste,
115  F_Paste,
116 
117  B_SilkS,
118  F_SilkS,
119 
120  B_Mask,
121  F_Mask,
122 
123  Dwgs_User,
124  Cmts_User,
125  Eco1_User,
126  Eco2_User,
127  Edge_Cuts,
128  Margin,
129 
130  B_CrtYd,
131  F_CrtYd,
132 
133  B_Fab,
134  F_Fab,
135 
137 };
enum SCH_LAYER_ID : int

Eeschema drawing layers.

Enumerator
SCH_LAYER_ID_START 
LAYER_WIRE 
LAYER_BUS 
LAYER_JUNCTION 
LAYER_LOCLABEL 
LAYER_GLOBLABEL 
LAYER_HIERLABEL 
LAYER_PINNUM 
LAYER_PINNAM 
LAYER_REFERENCEPART 
LAYER_VALUEPART 
LAYER_FIELDS 
LAYER_DEVICE 
LAYER_NOTES 
LAYER_NETNAM 
LAYER_PIN 
LAYER_SHEET 
LAYER_SHEETNAME 
LAYER_SHEETFILENAME 
LAYER_SHEETLABEL 
LAYER_NOCONNECT 
LAYER_ERC_WARN 
LAYER_ERC_ERR 
LAYER_DEVICE_BACKGROUND 
LAYER_SCHEMATIC_GRID 
LAYER_SCHEMATIC_BACKGROUND 
LAYER_BRIGHTENED 
SCH_LAYER_ID_END 

Definition at line 227 of file layers_id_colors_and_visibility.h.

227  : int
228 {
230 
232  LAYER_BUS,
237  LAYER_PINNUM,
238  LAYER_PINNAM,
241  LAYER_FIELDS,
242  LAYER_DEVICE,
243  LAYER_NOTES,
244  LAYER_NETNAM,
245  LAYER_PIN,
246  LAYER_SHEET,
257 
259 };
Add new GAL layers here.

Function Documentation

PCB_LAYER_ID FlipLayer ( PCB_LAYER_ID  aLayerId,
int  aCopperLayersCount = 0 
)

Function FlippedLayerNumber.

Returns
the layer number after flipping an item some (not all) layers: external copper, and paired layers( Mask, Paste, solder ... ) are swapped between front and back sides internal layers are flipped only if the copper layers count is known
Parameters
aLayerId= the PCB_LAYER_ID to flip
aCopperLayersCount= the number of copper layers. if 0 (in fact if < 4 ) internal layers will be not flipped because the layer count is not known

Definition at line 445 of file lset.cpp.

References B_Adhes, B_CrtYd, B_Cu, B_Fab, B_Mask, B_Paste, B_SilkS, F_Adhes, F_CrtYd, F_Cu, F_Fab, F_Mask, F_Paste, F_SilkS, In1_Cu, and IsCopperLayer().

Referenced by PCAD2KICAD::PCB_ARC::Flip(), PCAD2KICAD::PCB_PAD::Flip(), PCAD2KICAD::PCB_LINE::Flip(), PCAD2KICAD::PCB_MODULE::Flip(), TEXTE_PCB::Flip(), PCB_TARGET::Flip(), EDGE_MODULE::Flip(), TEXTE_MODULE::Flip(), TRACK::Flip(), DIMENSION::Flip(), MODULE::Flip(), DRAWSEGMENT::Flip(), VIA::Flip(), and ZONE_CONTAINER::Flip().

446 {
447  switch( aLayerId )
448  {
449  case B_Cu: return F_Cu;
450  case F_Cu: return B_Cu;
451 
452  case B_SilkS: return F_SilkS;
453  case F_SilkS: return B_SilkS;
454 
455  case B_Adhes: return F_Adhes;
456  case F_Adhes: return B_Adhes;
457 
458  case B_Mask: return F_Mask;
459  case F_Mask: return B_Mask;
460 
461  case B_Paste: return F_Paste;
462  case F_Paste: return B_Paste;
463 
464  case B_CrtYd: return F_CrtYd;
465  case F_CrtYd: return B_CrtYd;
466 
467  case B_Fab: return F_Fab;
468  case F_Fab: return B_Fab;
469 
470  default: // change internal layer if aCopperLayersCount is >= 4
471  if( IsCopperLayer( aLayerId ) && aCopperLayersCount >= 4 )
472  {
473  // internal copper layers count is aCopperLayersCount-2
474  PCB_LAYER_ID fliplayer = PCB_LAYER_ID(aCopperLayersCount - 2 - ( aLayerId - In1_Cu ) );
475  // Ensure fliplayer has a value which does not crash pcbnew:
476  if( fliplayer < F_Cu )
477  fliplayer = F_Cu;
478 
479  if( fliplayer > B_Cu )
480  fliplayer = B_Cu;
481 
482  return fliplayer;
483  }
484 
485  // No change for the other layers
486  return aLayerId;
487  }
488 }
PCB_LAYER_ID
A quick note on layer IDs:
bool IsCopperLayer(LAYER_NUM aLayerId)
Function IsCopperLayer tests whether a layer is a copper layer.
LSET FlipLayerMask ( LSET  aMask,
int  aCopperLayersCount = 0 
)

Calculate the mask layer when flipping a footprint BACK and FRONT copper layers, mask, paste, solder layers are swapped internal layers are flipped only if the copper layers count is known.

Parameters
aMask= the LSET to flip
aCopperLayersCount= the number of copper layers. if 0 (in fact if < 4 ) internal layers will be not flipped because the layer count is not known

Definition at line 491 of file lset.cpp.

References B_Adhes, B_CrtYd, B_Cu, B_Fab, B_Mask, B_Paste, B_SilkS, F_Adhes, F_CrtYd, F_Cu, F_Fab, F_Mask, F_Paste, F_SilkS, In1_Cu, and LSET::InternalCuMask().

Referenced by D_PAD::Flip(), DIALOG_PAD_PROPERTIES::initValues(), and DIALOG_PAD_PROPERTIES::TransferDataFromWindow().

492 {
493  // layers on physical outside of a board:
494  const static LSET and_mask( 16, // !! update count
495  B_Cu, F_Cu,
496  B_SilkS, F_SilkS,
497  B_Adhes, F_Adhes,
498  B_Mask, F_Mask,
499  B_Paste, F_Paste,
500  B_Adhes, F_Adhes,
501  B_CrtYd, F_CrtYd,
502  B_Fab, F_Fab
503  );
504 
505  LSET newMask = aMask & ~and_mask;
506 
507  if( aMask[B_Cu] )
508  newMask.set( F_Cu );
509 
510  if( aMask[F_Cu] )
511  newMask.set( B_Cu );
512 
513  if( aMask[B_SilkS] )
514  newMask.set( F_SilkS );
515 
516  if( aMask[F_SilkS] )
517  newMask.set( B_SilkS );
518 
519  if( aMask[B_Adhes] )
520  newMask.set( F_Adhes );
521 
522  if( aMask[F_Adhes] )
523  newMask.set( B_Adhes );
524 
525  if( aMask[B_Mask] )
526  newMask.set( F_Mask );
527 
528  if( aMask[F_Mask] )
529  newMask.set( B_Mask );
530 
531  if( aMask[B_Paste] )
532  newMask.set( F_Paste );
533 
534  if( aMask[F_Paste] )
535  newMask.set( B_Paste );
536 
537  if( aMask[B_Adhes] )
538  newMask.set( F_Adhes );
539 
540  if( aMask[F_Adhes] )
541  newMask.set( B_Adhes );
542 
543  if( aMask[B_CrtYd] )
544  newMask.set( F_CrtYd );
545 
546  if( aMask[F_CrtYd] )
547  newMask.set( B_CrtYd );
548 
549  if( aMask[B_Fab] )
550  newMask.set( F_Fab );
551 
552  if( aMask[F_Fab] )
553  newMask.set( B_Fab );
554 
555  if( aCopperLayersCount >= 4 ) // Internal layers exist
556  {
557  LSET internalMask = aMask & ~LSET::InternalCuMask();
558 
559  if( internalMask != LSET::InternalCuMask() )
560  { // the mask does not include all internal layers. Therefore
561  // the flipped mask for internal copper layers must be built
562  int innerLayerCnt = aCopperLayersCount -2;
563 
564  for( int ii = 0; ii < innerLayerCnt; ii++ )
565  {
566  if( internalMask[innerLayerCnt - ii + In1_Cu] )
567  newMask.set( ii + In1_Cu );
568  else
569  newMask.reset( ii + In1_Cu );
570  }
571  }
572  }
573 
574  return newMask;
575 }
Class LSET is a set of PCB_LAYER_IDs.
static LSET InternalCuMask()
Function InternalCuMask() returns a complete set of internal copper layers, which is all Cu layers ex...
Definition: lset.cpp:599
int GetNetnameLayer ( int  aLayer)
inline

Returns a netname layer corresponding to the given layer.

Definition at line 747 of file layers_id_colors_and_visibility.h.

References Cmts_User, IsCopperLayer(), LAYER_PAD_BK, LAYER_PAD_BK_NETNAMES, LAYER_PAD_FR, LAYER_PAD_FR_NETNAMES, LAYER_PADS, LAYER_PADS_NETNAMES, LAYER_VIA_MICROVIA, LAYER_VIA_THROUGH, LAYER_VIAS_NETNAMES, and NETNAMES_LAYER_INDEX.

Referenced by KIGFX::PCB_RENDER_SETTINGS::ImportLegacyColors(), PCB_LAYER_WIDGET::OnLayerColorChange(), PCB_DRAW_PANEL_GAL::setDefaultLayerDeps(), PCB_DRAW_PANEL_GAL::SetHighContrastLayer(), PCB_DRAW_PANEL_GAL::SetTopLayer(), PCB_DRAW_PANEL_GAL::SyncLayersVisibility(), and TRACK::ViewGetLayers().

748 {
749  if( IsCopperLayer( aLayer ) )
750  return NETNAMES_LAYER_INDEX( aLayer );
751  else if( aLayer == LAYER_PADS )
752  return LAYER_PADS_NETNAMES;
753  else if( aLayer == LAYER_PAD_FR )
754  return LAYER_PAD_FR_NETNAMES;
755  else if( aLayer == LAYER_PAD_BK )
756  return LAYER_PAD_BK_NETNAMES;
757  else if( aLayer >= LAYER_VIA_MICROVIA && aLayer <= LAYER_VIA_THROUGH )
758  return LAYER_VIAS_NETNAMES;
759 
760  // Fallback
761  return Cmts_User;
762 }
smd pads, back layer
multilayer pads, usually with holes
to draw usual through hole vias
smd pads, front layer
bool IsCopperLayer(LAYER_NUM aLayerId)
Function IsCopperLayer tests whether a layer is a copper layer.
#define NETNAMES_LAYER_INDEX(layer)
Macro for obtaining netname layer for a given PCB layer.
Additional netnames layers (not associated with a PCB layer)
bool IsBackLayer ( PCB_LAYER_ID  aLayerId)
inline

Layer classification: check if it's a back layer.

Definition at line 701 of file layers_id_colors_and_visibility.h.

References B_Adhes, B_CrtYd, B_Cu, B_Fab, B_Mask, B_Paste, and B_SilkS.

Referenced by TEXTE_MODULE::Draw(), TEXTE_MODULE::Flip(), BOARD::GetFootprint(), GENERAL_COLLECTOR::Inspect(), DRAWING_TOOL::PlaceText(), PCB_DRAW_PANEL_GAL::SetTopLayer(), TEXTE_MODULE::TEXTE_MODULE(), DialogEditModuleText::TransferDataFromWindow(), and TEXTE_MODULE::ViewGetLOD().

702 {
703  switch( aLayerId )
704  {
705  case B_Cu:
706  case B_Adhes:
707  case B_Paste:
708  case B_SilkS:
709  case B_Mask:
710  case B_CrtYd:
711  case B_Fab:
712  return true;
713  default:
714  ;
715  }
716 
717  return false;
718 }
bool IsCopperLayer ( LAYER_NUM  aLayerId)
inline

Function IsCopperLayer tests whether a layer is a copper layer.

Parameters
aLayerId= Layer to test
Returns
true if aLayer is a valid copper layer

Definition at line 638 of file layers_id_colors_and_visibility.h.

References B_Cu, and F_Cu.

Referenced by PCAD2KICAD::PCB_PAD::AddToBoard(), PCAD2KICAD::PCB_LINE::AddToBoard(), PCB_EDIT_FRAME::Begin_Zone(), BOARD::BOARD(), PCB_ONE_LAYER_SELECTOR::buildList(), SELECT_COPPER_LAYERS_PAIR_DIALOG::buildList(), ZONE_CREATE_HELPER::createNewZone(), PCB_EDIT_FRAME::Delete_Drawings_All_Layer(), EDGE_MODULE::Draw(), KIGFX::PCB_PAINTER::draw(), D_PAD::Draw(), FOOTPRINT_EDIT_FRAME::Edit_Edge_Layer(), PCB_EDIT_FRAME::Edit_Zone_Params(), FlipLayer(), DSN::SPECCTRA_DB::FromBOARD(), GenCADLayerName(), DRAWING_TOOL::getDrawingLayer(), GetGerberFileFunctionAttribute(), GetGerberFilePolarityAttribute(), GetGerberProtelExtension(), BOARD::GetLayerID(), DIALOG_LAYERS_SETUP::getLayerName(), BOARD::GetLayerName(), BOARD::GetLayerType(), GetNetnameLayer(), DIALOG_SVG_PRINT::initDialog(), DIALOG_PRINT_USING_PRINTER::initValues(), ZONE_CONTAINER::IsOnCopperLayer(), MARKER_PCB::IsOnLayer(), PCBNEW_CONTROL::LayerNext(), PCBNEW_CONTROL::LayerPrev(), EAGLE_PLUGIN::loadPlain(), EAGLE_PLUGIN::loadSignals(), BOARD::OnAreaPolygonModified(), PCB_EDIT_FRAME::OnHotKey(), PCB_EDIT_FRAME::OnHotkeyBeginRoute(), PCB_EDIT_FRAME::OnHotkeyDeleteItem(), PCB_EDIT_FRAME::OnLeftClick(), DIALOG_PLOT::OnPopUpLayers(), PCB_LAYER_WIDGET::onPopupSelection(), PCB_EDIT_FRAME::OnRightClick(), EAGLE_PLUGIN::packageSMD(), PNS::TOOL_BASE::pickSingleItem(), PlotOneBoardLayer(), BRDITEMS_PLOTTER::PlotTextePcb(), ROUTER_TOOL::prepareInteractive(), SWAP_LAYERS_DIALOG::Sel_Layer(), PCB_DRAW_PANEL_GAL::setDefaultLayerDeps(), PCB_DRAW_PANEL_GAL::SetHighContrastLayer(), BOARD::SetLayerName(), BOARD::SetLayerType(), PCB_DRAW_PANEL_GAL::SetTopLayer(), ShowClearance(), PCB_BASE_FRAME::SwitchLayer(), PCB_EDIT_FRAME::SwitchLayer(), PCB_DRAW_PANEL_GAL::SyncLayersVisibility(), DRC::testTexts(), and DIALOG_MODEDIT_FP_BODY_ITEM_PROPERTIES::TransferDataFromWindow().

639 {
640  return aLayerId >= F_Cu && aLayerId <= B_Cu;
641 }
bool IsFrontLayer ( PCB_LAYER_ID  aLayerId)
inline

Layer classification: check if it's a front layer.

Definition at line 678 of file layers_id_colors_and_visibility.h.

References F_Adhes, F_CrtYd, F_Cu, F_Fab, F_Mask, F_Paste, and F_SilkS.

Referenced by TEXTE_MODULE::Draw(), GENERAL_COLLECTOR::Inspect(), PCB_DRAW_PANEL_GAL::SetTopLayer(), and TEXTE_MODULE::ViewGetLOD().

679 {
680  switch( aLayerId )
681  {
682  case F_Cu:
683  case F_Adhes:
684  case F_Paste:
685  case F_SilkS:
686  case F_Mask:
687  case F_CrtYd:
688  case F_Fab:
689  return true;
690  default:
691  ;
692  }
693 
694  return false;
695 }
bool IsNetnameLayer ( LAYER_NUM  aLayer)
inline

Function IsNetnameLayer tests whether a layer is a netname layer.

Parameters
aLayer= Layer to test
Returns
true if aLayer is a valid netname layer

Definition at line 770 of file layers_id_colors_and_visibility.h.

References F_Cu, NETNAMES_LAYER_ID_END, and NETNAMES_LAYER_INDEX.

Referenced by KIGFX::PCB_PAINTER::draw(), PCB_DRAW_PANEL_GAL::setDefaultLayerDeps(), TRACK::ViewGetLOD(), and D_PAD::ViewGetLOD().

771 {
772  return aLayer >= NETNAMES_LAYER_INDEX( F_Cu ) &&
773  aLayer < NETNAMES_LAYER_ID_END;
774 }
#define NETNAMES_LAYER_INDEX(layer)
Macro for obtaining netname layer for a given PCB layer.
bool IsNonCopperLayer ( LAYER_NUM  aLayerId)
inline

Function IsNonCopperLayer tests whether a layer is a non copper layer.

Parameters
aLayerId= Layer to test
Returns
true if aLayer is a non copper layer

Definition at line 649 of file layers_id_colors_and_visibility.h.

References B_Cu, and PCB_LAYER_ID_COUNT.

Referenced by PCAD2KICAD::PCB_ARC::AddToModule(), PCAD2KICAD::PCB_LINE::AddToModule(), EAGLE_PLUGIN::packagePolygon(), EAGLE_PLUGIN::packageRectangle(), and EAGLE_PLUGIN::packageWire().

650 {
651  return aLayerId > B_Cu && aLayerId <= PCB_LAYER_ID_COUNT;
652 }
bool IsPcbLayer ( LAYER_NUM  aLayer)
inline

Function IsPcbLayer tests whether a layer is a valid layer for pcbnew.

Parameters
aLayer= Layer to test
Returns
true if aLayer is a layer valid in pcbnew

Definition at line 627 of file layers_id_colors_and_visibility.h.

References F_Cu, and PCB_LAYER_ID_COUNT.

Referenced by GBR_TO_PCB_EXPORTER::ExportPcb().

628 {
629  return aLayer >= F_Cu && aLayer < PCB_LAYER_ID_COUNT;
630 }
bool IsUserLayer ( PCB_LAYER_ID  aLayerId)
inline

Function IsUserLayer tests whether a layer is a non copper and a non tech layer.

Parameters
aLayerId= Layer to test
Returns
true if aLayer is a user layer

Definition at line 660 of file layers_id_colors_and_visibility.h.

References Dwgs_User, and Eco2_User.

661 {
662  return aLayerId >= Dwgs_User && aLayerId <= Eco2_User;
663 }
bool IsValidLayer ( LAYER_NUM  aLayerId)
inline

Function IsValidLayer tests whether a given integer is a valid layer index, i.e.

can be safely put in a PCB_LAYER_ID

Parameters
aLayerId= Layer index to test. It can be an int, so its useful during I/O
Returns
true if aLayerIndex is a valid layer index

Definition at line 616 of file layers_id_colors_and_visibility.h.

References PCB_LAYER_ID_COUNT.

Referenced by LAYERS_MAP_DIALOG::OnSelectLayer(), and SWAP_LAYERS_DIALOG::Sel_Layer().

617 {
618  return unsigned( aLayerId ) < PCB_LAYER_ID_COUNT;
619 }
GAL_LAYER_ID operator+ ( const GAL_LAYER_ID a,
int  b 
)
inline

Used for via types.

Definition at line 219 of file layers_id_colors_and_visibility.h.

References GAL_LAYER_ID_END.

220 {
221  GAL_LAYER_ID t = GAL_LAYER_ID( int( a ) + b );
222  wxASSERT( t <= GAL_LAYER_ID_END );
223  return t;
224 }
GAL_LAYER_ID
GAL layers are "virtual" layers, i.e.
Add new GAL layers here.
GAL_LAYER_ID operator++ ( GAL_LAYER_ID a)
inline

Definition at line 212 of file layers_id_colors_and_visibility.h.

213 {
214  a = GAL_LAYER_ID( int( a ) + 1 );
215  return a;
216 }
GAL_LAYER_ID
GAL layers are "virtual" layers, i.e.
SCH_LAYER_ID operator++ ( SCH_LAYER_ID a)
inline

Definition at line 265 of file layers_id_colors_and_visibility.h.

266 {
267  a = SCH_LAYER_ID( int( a ) + 1 );
268  return a;
269 }
SCH_LAYER_ID
Eeschema drawing layers.
PCB_LAYER_ID ToLAYER_ID ( int  aLayer)

Definition at line 767 of file lset.cpp.

References PCB_LAYER_ID_COUNT.

Referenced by DIALOG_COPPER_ZONE::AcceptOptions(), DIALOG_KEEPOUT_AREA_PROPERTIES::AcceptOptionsForKeepOut(), DIALOG_GLOBAL_DELETION::AcceptPcbDelete(), DXF2BRD_CONVERTER::addArc(), DXF2BRD_CONVERTER::addCircle(), PNS_KICAD_IFACE::AddItem(), DXF2BRD_CONVERTER::addLine(), DXF2BRD_CONVERTER::addMText(), DXF2BRD_CONVERTER::addPolyline(), DXF2BRD_CONVERTER::addText(), BOARD::BOARD(), DSN::SPECCTRA_DB::buildLayerMaps(), CINFO3D_VISU::createLayers(), PCB_BASE_FRAME::CreateNewModule(), DRAWING_TOOL::DrawVia(), EVT_COMMAND_RANGE(), GENDRILL_WRITER_BASE::GenDrillReportFile(), BRDITEMS_PLOTTER::getColor(), GetGerberFileFunctionAttribute(), PCB_LAYER_SELECTOR::GetLayerColor(), PCB_LAYER_BOX_SELECTOR::GetLayerColor(), BOARD::GetLayerID(), PCB_LAYER_SELECTOR::GetLayerName(), PCB_LAYER_BOX_SELECTOR::GetLayerName(), DXF2BRD_CONVERTER::insertArc(), DXF2BRD_CONVERTER::insertLine(), PCB_LAYER_BOX_SELECTOR::IsLayerEnabled(), PCBNEW_CONTROL::LayerNext(), PCBNEW_CONTROL::LayerPrev(), PCAD2KICAD::PCB::MapLayer(), PCB_EDIT_FRAME::OnHotKey(), PCB_LAYER_WIDGET::OnLayerColorChange(), PCB_LAYER_WIDGET::OnLayerSelect(), DIALOG_DIMENSION_EDITOR::OnOKClick(), PCB_LAYER_WIDGET::onPopupSelection(), PLOT_CONTROLLER::OpenPlotfile(), PCB_EDIT_FRAME::Other_Layer_Route(), ROUTER_TOOL::performRouting(), LENGTH_TUNER_TOOL::performTuning(), PLOT_CONTROLLER::PlotLayer(), ROUTER_TOOL::prepareInteractive(), PCB_EDIT_FRAME::Process_Special_Functions(), SWAP_LAYERS_DIALOG::Sel_Layer(), PCB_BASE_FRAME::SelectLayer(), DIALOG_GLOBAL_DELETION::SetCurrentLayer(), ROUTER_TOOL::switchLayerOnViaPlacement(), PCB_LAYER_WIDGET::SyncLayerVisibilities(), DialogEditModuleText::TransferDataFromWindow(), DIALOG_PCB_TEXT_PROPERTIES::TransferDataFromWindow(), DIALOG_GRAPHIC_ITEM_PROPERTIES::TransferDataFromWindow(), and DIALOG_MODEDIT_FP_BODY_ITEM_PROPERTIES::TransferDataFromWindow().

768 {
769  wxASSERT( unsigned( aLayer ) < PCB_LAYER_ID_COUNT );
770  return PCB_LAYER_ID( aLayer );
771 }
PCB_LAYER_ID
A quick note on layer IDs: