KiCad PCB EDA Suite
LSET Class Reference

Class LSET is a set of PCB_LAYER_IDs. More...

#include <layers_id_colors_and_visibility.h>

Inheritance diagram for LSET:

Public Member Functions

 LSET ()
 Constructor LSET() creates an empty (cleared) set. More...
 
 LSET (const BASE_SET &aOther)
 
 LSET (PCB_LAYER_ID aLayer)
 Constructor LSET( PCB_LAYER_ID ) takes a PCB_LAYER_ID and sets that bit. More...
 
 LSET (const PCB_LAYER_ID *aArray, unsigned aCount)
 Constructor LSET( const PCB_LAYER_ID* aArray, unsigned aCount ) works well with an array or LSEQ. More...
 
 LSET (unsigned aIdCount, int aFirst,...)
 Constructor LSET( unsigned, PCB_LAYER_ID, ...) takes one or more PCB_LAYER_IDs in the argument list to construct the set. More...
 
LSEQ CuStack () const
 Function CuStack returns a sequence of copper layers in starting from the front/top and extending to the back/bottom. More...
 
LSEQ Technicals (LSET aSubToOmit=LSET()) const
 Function Technicals returns a sequence of technical layers. More...
 
LSEQ Users () const
 *_User layers. More...
 
LSEQ TechAndUserUIOrder () const
 Returns the technical and user layers in the order shown in layer widget. More...
 
LSEQ UIOrder () const
 
LSEQ Seq (const PCB_LAYER_ID *aWishListSequence, unsigned aCount) const
 Function Seq returns an LSEQ from the union of this LSET and a desired sequence. More...
 
LSEQ Seq () const
 Function Seq returns a LSEQ from this LSET in ascending PCB_LAYER_ID order. More...
 
LSEQ SeqStackupBottom2Top () const
 Function SeqStackBottom2Top returns the sequence that is typical for a bottom-to-top stack-up. More...
 
std::string FmtHex () const
 Function FmtHex returns a hex string showing contents of this LSEQ. More...
 
int ParseHex (const char *aStart, int aCount)
 Function ParseHex understands the output of FmtHex() and replaces this set's values with those given in the input string. More...
 
std::string FmtBin () const
 Function FmtBin returns a binary string showing contents of this LSEQ. More...
 
PCB_LAYER_ID ExtractLayer () const
 Find the first set PCB_LAYER_ID. More...
 

Static Public Member Functions

static const wxChar * Name (PCB_LAYER_ID aLayerId)
 Function Name returns the fixed name association with aLayerId. More...
 
static LSET InternalCuMask ()
 Function InternalCuMask() returns a complete set of internal copper layers, which is all Cu layers except F_Cu and B_Cu. More...
 
static LSET AllCuMask (int aCuLayerCount=MAX_CU_LAYERS)
 Function AllCuMask returns a mask holding the requested number of Cu PCB_LAYER_IDs. More...
 
static LSET ExternalCuMask ()
 Function ExternalCuMask returns a mask holding the Front and Bottom layers. More...
 
static LSET AllNonCuMask ()
 Function AllNonCuMask returns a mask holding all layer minus CU layers. More...
 
static LSET AllLayersMask ()
 
static LSET FrontTechMask ()
 Function FrontTechMask returns a mask holding all technical layers (no CU layer) on front side. More...
 
static LSET FrontBoardTechMask ()
 Function FrontBoardTechMask returns a mask holding technical layers used in a board fabrication (no CU layer) on front side. More...
 
static LSET BackTechMask ()
 Function BackTechMask returns a mask holding all technical layers (no CU layer) on back side. More...
 
static LSET BackBoardTechMask ()
 Function BackBoardTechMask returns a mask holding technical layers used in a board fabrication (no CU layer) on Back side. More...
 
static LSET AllTechMask ()
 Function AllTechMask returns a mask holding all technical layers (no CU layer) on both side. More...
 
static LSET AllBoardTechMask ()
 Function AllTechMask returns a mask holding board technical layers (no CU layer) on both side. More...
 
static LSET FrontMask ()
 Function FrontMask returns a mask holding all technical layers and the external CU layer on front side. More...
 
static LSET BackMask ()
 Function BackMask returns a mask holding all technical layers and the external CU layer on back side. More...
 
static LSET UserMask ()
 
static LSET ForbiddenFootprintLayers ()
 Function ForbiddenFootprintLayers Layers which are not allowed within footprint definitions. More...
 
static LSET ForbiddenTextLayers ()
 Function ForbiddenTextLayers Layers which are now allowed to have text on them. More...
 

Private Member Functions

 LSET (unsigned long __val)
 Take this off the market, it may not be used because of LSET( PCB_LAYER_ID ). More...
 

Detailed Description

Class LSET is a set of PCB_LAYER_IDs.

It can be converted to numerous purpose LSEQs using the various member functions, most of which are based on Seq(). The advantage of converting to LSEQ using purposeful code, is it removes any dependency on order/sequence inherent in this set.

Definition at line 381 of file layers_id_colors_and_visibility.h.

Constructor & Destructor Documentation

◆ LSET() [1/6]

LSET::LSET ( )
inline

Constructor LSET() creates an empty (cleared) set.

Definition at line 399 of file layers_id_colors_and_visibility.h.

399  :
400  BASE_SET() // all bits are set to zero in BASE_SET()
401  {
402  }
std::bitset< PCB_LAYER_ID_COUNT > BASE_SET

Referenced by AllLayersMask(), and AllNonCuMask().

◆ LSET() [2/6]

LSET::LSET ( const BASE_SET aOther)
inline

Definition at line 404 of file layers_id_colors_and_visibility.h.

404  :
405  BASE_SET( aOther )
406  {
407  }
std::bitset< PCB_LAYER_ID_COUNT > BASE_SET

◆ LSET() [3/6]

LSET::LSET ( PCB_LAYER_ID  aLayer)
inline

Constructor LSET( PCB_LAYER_ID ) takes a PCB_LAYER_ID and sets that bit.

This makes the following code into a bug:

LSET s = 0;

Instead use:

LSET s;

for an empty set.

Definition at line 424 of file layers_id_colors_and_visibility.h.

424  : // PCB_LAYER_ID deliberately exludes int and relatives
425  BASE_SET()
426  {
427  set( aLayer );
428  }
std::bitset< PCB_LAYER_ID_COUNT > BASE_SET

◆ LSET() [4/6]

LSET::LSET ( const PCB_LAYER_ID aArray,
unsigned  aCount 
)

Constructor LSET( const PCB_LAYER_ID* aArray, unsigned aCount ) works well with an array or LSEQ.

Definition at line 33 of file lset.cpp.

33  :
34  BASE_SET()
35 {
36  for( unsigned i=0; i<aCount; ++i )
37  set( aArray[i] );
38 }
std::bitset< PCB_LAYER_ID_COUNT > BASE_SET
size_t i
Definition: json11.cpp:597

References i.

◆ LSET() [5/6]

LSET::LSET ( unsigned  aIdCount,
int  aFirst,
  ... 
)

Constructor LSET( unsigned, PCB_LAYER_ID, ...) takes one or more PCB_LAYER_IDs in the argument list to construct the set.

Typically only used in static construction.

Parameters
aIdCountis the number of PCB_LAYER_IDs which follow.
aFirstis the first included in aIdCount and must always be present, and can be followed by any number of additional PCB_LAYER_IDs so long as aIdCount accurately reflects the count.

Parameter is 'int' to avoid va_start undefined behavior.

Definition at line 41 of file lset.cpp.

41  :
42  BASE_SET()
43 {
44  // The constructor, without the mandatory aFirst argument, could have been confused
45  // by the compiler with the LSET( PCB_LAYER_ID ). With aFirst, that ambiguity is not
46  // present. Therefore aIdCount must always be >=1.
47  wxASSERT_MSG( aIdCount > 0, wxT( "aIdCount must be >= 1" ) );
48 
49  set( aFirst );
50 
51  if( --aIdCount )
52  {
53  va_list ap;
54 
55  va_start( ap, aFirst );
56 
57  for( unsigned i=0; i<aIdCount; ++i )
58  {
59  PCB_LAYER_ID id = (PCB_LAYER_ID) va_arg( ap, int );
60 
61  // printf( "%s: id:%d PCB_LAYER_ID_COUNT:%d\n", __func__, id, PCB_LAYER_ID_COUNT );
62 
63  assert( unsigned( id ) < PCB_LAYER_ID_COUNT );
64 
65  set( id );
66  }
67 
68  va_end( ap );
69  }
70 }
std::bitset< PCB_LAYER_ID_COUNT > BASE_SET
PCB_LAYER_ID
A quick note on layer IDs:
size_t i
Definition: json11.cpp:597

References i, and PCB_LAYER_ID_COUNT.

◆ LSET() [6/6]

LSET::LSET ( unsigned long  __val)
inlineprivate

Take this off the market, it may not be used because of LSET( PCB_LAYER_ID ).

Definition at line 630 of file layers_id_colors_and_visibility.h.

631  {
632  // not usable, it's private.
633  }

Member Function Documentation

◆ AllBoardTechMask()

LSET LSET::AllBoardTechMask ( )
static

Function AllTechMask returns a mask holding board technical layers (no CU layer) on both side.

Definition at line 753 of file lset.cpp.

754 {
755  static const LSET saved = BackBoardTechMask() | FrontBoardTechMask();
756  return saved;
757 }
static LSET FrontBoardTechMask()
Function FrontBoardTechMask returns a mask holding technical layers used in a board fabrication (no C...
Definition: lset.cpp:739
Class LSET is a set of PCB_LAYER_IDs.
static LSET BackBoardTechMask()
Function BackBoardTechMask returns a mask holding technical layers used in a board fabrication (no CU...
Definition: lset.cpp:726

References BackBoardTechMask(), and FrontBoardTechMask().

Referenced by BRDITEMS_PLOTTER::PlotPad().

◆ AllCuMask()

LSET LSET::AllCuMask ( int  aCuLayerCount = MAX_CU_LAYERS)
static

Function AllCuMask returns a mask holding the requested number of Cu PCB_LAYER_IDs.

Definition at line 676 of file lset.cpp.

677 {
678  // retain all in static as the full set, which is a common case.
679  static const LSET all = InternalCuMask().set( F_Cu ).set( B_Cu );
680 
681  if( aCuLayerCount == MAX_CU_LAYERS )
682  return all;
683 
684  // subtract out some Cu layers not wanted in the mask.
685  LSET ret = all;
686  int clear_count = MAX_CU_LAYERS - aCuLayerCount;
687 
688  clear_count = Clamp( 0, clear_count, MAX_CU_LAYERS - 2 );
689 
690  for( LAYER_NUM elem=In30_Cu; clear_count; --elem, --clear_count )
691  {
692  ret.set( elem, false );
693  }
694 
695  return ret;
696 }
const T & Clamp(const T &lower, const T &value, const T &upper)
Function Clamp limits value within the range lower <= value <= upper.
Definition: macros.h:138
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:636
int LAYER_NUM
Type LAYER_NUM can be replaced with int and removed.

References B_Cu, Clamp(), F_Cu, In30_Cu, InternalCuMask(), and MAX_CU_LAYERS.

Referenced by PCAD2KICAD::PCB_PAD::AddToModule(), AllNonCuMask(), DIALOG_PLOT::applyPlotSettings(), Autoroute_One_Track(), TRACKS_CLEANER::cleanupVias(), HYPERLYNX_EXPORTER::collectNetObjects(), compute_layer_Zs(), compute_pad_access_code(), CINFO3D_VISU::createLayers(), DIALOG_EXPORT_SVG::CreateSVGFile(), PANEL_SETUP_LAYERS::DenyChangeCheckBox(), DIALOG_IMPORT_GFX::DIALOG_IMPORT_GFX(), DRC::doPadToPadsDrc(), DRC::doTrackDrc(), D_PAD::Draw(), BOARD::Draw(), fmt_mask(), PCB_IO::formatLayers(), GENDRILL_WRITER_BASE::GenDrillReportFile(), VIA::GetLayerSet(), BOARD::GetPad(), HYPERLYNX_PAD_STACK::getSMDLayer(), D_PAD::GetSolderMaskMargin(), D_PAD::GetSolderPasteMargin(), MODULE::GetUniquePadCount(), highlightNet(), PCB_EDITOR_CONTROL::HighlightNetCursor(), HYPERLYNX_PAD_STACK::HYPERLYNX_PAD_STACK(), KIGFX::PCB_RENDER_SETTINGS::ImportLegacyColors(), PCB_PARSER::init(), D_PAD::IsAperturePad(), HYPERLYNX_PAD_STACK::isEmpty(), ZONE_CONTAINER::IsOnCopperLayer(), DSN::isRoundKeepout(), LayerMaskDescribe(), LEGACY_PLUGIN::leg_mask2new(), DSN::SPECCTRA_DB::makeIMAGE(), DSN::SPECCTRA_DB::makePADSTACK(), DIALOG_PLOT::OnPopUpLayers(), PANEL_SETUP_LAYERS::OnPresetsChoice(), DIALOG_PAD_PROPERTIES::OnUpdateUINonCopperWarning(), EAGLE_PLUGIN::packageHole(), EAGLE_PLUGIN::packagePad(), PCB_PLOT_PARAMS_PARSER::Parse(), GPCB_FPL_CACHE::parseMODULE(), PCB_PLOT_PARAMS::PCB_PLOT_PARAMS(), DIALOG_PLOT::Plot(), BRDITEMS_PLOTTER::Plot_1_EdgeModule(), BRDITEMS_PLOTTER::PlotDrawSegment(), BRDITEMS_PLOTTER::PlotPad(), PlotStandardLayer(), PCB_EDIT_FRAME::Process_Special_Functions(), BOARD_DESIGN_SETTINGS::SetCopperLayerCount(), BOARD_DESIGN_SETTINGS::SetEnabledLayers(), ZONE_CONTAINER::SetLayerSet(), DIALOG_PAD_PROPERTIES::setPadLayersList(), ZONE_SETTINGS::SetupLayersList(), PCBNEW_PRINTOUT::setupViewLayers(), PANEL_SETUP_LAYERS::showLayerTypes(), D_PAD::StandardMask(), PNS_KICAD_IFACE::syncPad(), DRC::testDisabledLayers(), PANEL_SETUP_LAYERS::testLayerNames(), DIALOG_SWAP_LAYERS::TransferDataFromWindow(), PANEL_SETUP_LAYERS::TransferDataFromWindow(), DIALOG_PAD_PROPERTIES::transferDataToPad(), DIALOG_SWAP_LAYERS::TransferDataToWindow(), D_PAD::UnplatedHoleMask(), and HYPERLYNX_EXPORTER::writeSinglePadStack().

◆ AllLayersMask()

LSET LSET::AllLayersMask ( )
static

Definition at line 713 of file lset.cpp.

714 {
715  static const LSET saved = LSET().set();
716  return saved;
717 }
Class LSET is a set of PCB_LAYER_IDs.
LSET()
Constructor LSET() creates an empty (cleared) set.

References LSET().

Referenced by GRID_HELPER::BestDragOrigin(), GRID_HELPER::BestSnapAnchor(), GERBVIEW_FRAME::GERBVIEW_FRAME(), GERBVIEW_FRAME::GetVisibleLayers(), POINT_EDITOR::OnSelectionChange(), PARAM_CFG_LAYERS::ReadParam(), PICKER_TOOL::reset(), PCB_LAYER_BOX_SELECTOR::Resync(), and PARAM_CFG_LAYERS::SaveParam().

◆ AllNonCuMask()

LSET LSET::AllNonCuMask ( )
static

Function AllNonCuMask returns a mask holding all layer minus CU layers.

Definition at line 699 of file lset.cpp.

700 {
701  static const LSET saved = LSET().set() & ~AllCuMask();
702  return saved;
703 }
static LSET AllCuMask(int aCuLayerCount=MAX_CU_LAYERS)
Function AllCuMask returns a mask holding the requested number of Cu PCB_LAYER_IDs.
Definition: lset.cpp:676
Class LSET is a set of PCB_LAYER_IDs.
LSET()
Constructor LSET() creates an empty (cleared) set.

References AllCuMask(), and LSET().

Referenced by DIALOG_GLOBAL_DELETION::AcceptPcbDelete(), DIALOG_GLOBAL_EDIT_TRACKS_AND_VIAS::buildFilterLists(), CINFO3D_VISU::createLayers(), DIALOG_GLOBAL_EDIT_TRACKS_AND_VIAS::DIALOG_GLOBAL_EDIT_TRACKS_AND_VIAS(), DIALOG_TRACK_VIA_PROPERTIES::DIALOG_TRACK_VIA_PROPERTIES(), ROUTER_TOOL::onViaCommand(), PCB_EDIT_FRAME::Process_Special_Functions(), ZONE_SETTINGS::SetupLayersList(), and DIALOG_SWAP_LAYERS::TransferDataToWindow().

◆ AllTechMask()

LSET LSET::AllTechMask ( )
static

Function AllTechMask returns a mask holding all technical layers (no CU layer) on both side.

Definition at line 746 of file lset.cpp.

747 {
748  static const LSET saved = BackTechMask() | FrontTechMask();
749  return saved;
750 }
static LSET BackTechMask()
Function BackTechMask returns a mask holding all technical layers (no CU layer) on back side.
Definition: lset.cpp:720
static LSET FrontTechMask()
Function FrontTechMask returns a mask holding all technical layers (no CU layer) on front side.
Definition: lset.cpp:732
Class LSET is a set of PCB_LAYER_IDs.

References BackTechMask(), and FrontTechMask().

Referenced by FOOTPRINT_EDIT_FRAME::CreateTextModule(), PCB_LAYER_WIDGET::isLayerAllowedInFpMode(), LayerMaskDescribe(), DIALOG_FOOTPRINT_FP_EDITOR::OnAddField(), DIALOG_FOOTPRINT_BOARD_EDITOR::OnAddField(), and DIALOG_PLOT::OnPopUpLayers().

◆ BackBoardTechMask()

LSET LSET::BackBoardTechMask ( )
static

Function BackBoardTechMask returns a mask holding technical layers used in a board fabrication (no CU layer) on Back side.

Definition at line 726 of file lset.cpp.

727 {
728  static const LSET saved( 4, B_SilkS, B_Mask, B_Adhes, B_Paste );
729  return saved;
730 }
Class LSET is a set of PCB_LAYER_IDs.

References B_Adhes, B_Mask, B_Paste, and B_SilkS.

Referenced by AllBoardTechMask().

◆ BackMask()

LSET LSET::BackMask ( )
static

Function BackMask returns a mask holding all technical layers and the external CU layer on back side.

Definition at line 782 of file lset.cpp.

783 {
784  static const LSET saved = BackTechMask().set( B_Cu );
785  return saved;
786 }
static LSET BackTechMask()
Function BackTechMask returns a mask holding all technical layers (no CU layer) on back side.
Definition: lset.cpp:720
Class LSET is a set of PCB_LAYER_IDs.

References B_Cu, and BackTechMask().

Referenced by D_PAD::Draw().

◆ BackTechMask()

LSET LSET::BackTechMask ( )
static

Function BackTechMask returns a mask holding all technical layers (no CU layer) on back side.

Definition at line 720 of file lset.cpp.

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

Referenced by AllTechMask(), and BackMask().

◆ CuStack()

LSEQ LSET::CuStack ( ) const

Function CuStack returns a sequence of copper layers in starting from the front/top and extending to the back/bottom.

This specific sequence is depended upon in numerous places.

Definition at line 150 of file lset.cpp.

151 {
152  // desired sequence
153  static const PCB_LAYER_ID sequence[] = {
154  F_Cu,
155  In1_Cu,
156  In2_Cu,
157  In3_Cu,
158  In4_Cu,
159  In5_Cu,
160  In6_Cu,
161  In7_Cu,
162  In8_Cu,
163  In9_Cu,
164  In10_Cu,
165  In11_Cu,
166  In12_Cu,
167  In13_Cu,
168  In14_Cu,
169  In15_Cu,
170  In16_Cu,
171  In17_Cu,
172  In18_Cu,
173  In19_Cu,
174  In20_Cu,
175  In21_Cu,
176  In22_Cu,
177  In23_Cu,
178  In24_Cu,
179  In25_Cu,
180  In26_Cu,
181  In27_Cu,
182  In28_Cu,
183  In29_Cu,
184  In30_Cu,
185  B_Cu, // 31
186  };
187 
188  return Seq( sequence, arrayDim( sequence ) );
189 }
LSEQ Seq() const
Function Seq returns a LSEQ from this LSET in ascending PCB_LAYER_ID order.
Definition: lset.cpp:401
PCB_LAYER_ID
A quick note on layer IDs:
constexpr std::size_t arrayDim(T const (&)[N]) noexcept
Definition: macros.h:107

References arrayDim(), B_Cu, F_Cu, In10_Cu, In11_Cu, In12_Cu, In13_Cu, In14_Cu, In15_Cu, In16_Cu, In17_Cu, In18_Cu, In19_Cu, In1_Cu, In20_Cu, In21_Cu, In22_Cu, In23_Cu, In24_Cu, In25_Cu, In26_Cu, In27_Cu, In28_Cu, In29_Cu, In2_Cu, In30_Cu, In3_Cu, In4_Cu, In5_Cu, In6_Cu, In7_Cu, In8_Cu, In9_Cu, and Seq().

Referenced by PCB_IO::formatBoardLayers(), PCB_LAYER_WIDGET::ReFill(), UIOrder(), and HYPERLYNX_EXPORTER::writeStackupInfo().

◆ ExternalCuMask()

LSET LSET::ExternalCuMask ( )
static

Function ExternalCuMask returns a mask holding the Front and Bottom layers.

Definition at line 706 of file lset.cpp.

707 {
708  static const LSET saved( 2, F_Cu, B_Cu );
709  return saved;
710 }
Class LSET is a set of PCB_LAYER_IDs.

References B_Cu, and F_Cu.

Referenced by GERBER_JOBFILE_WRITER::addJSONDesignRules(), and BRDITEMS_PLOTTER::PlotPad().

◆ ExtractLayer()

PCB_LAYER_ID LSET::ExtractLayer ( ) const

Find the first set PCB_LAYER_ID.

Returns UNDEFINED_LAYER if more than one is set or UNSELECTED_LAYER if none is set.

Definition at line 615 of file lset.cpp.

616 {
617  unsigned set_count = count();
618 
619  if( !set_count )
620  return UNSELECTED_LAYER;
621  else if( set_count > 1 )
622  return UNDEFINED_LAYER;
623 
624  for( unsigned i=0; i < size(); ++i )
625  {
626  if( test( i ) )
627  return PCB_LAYER_ID( i );
628  }
629 
630  wxASSERT( 0 ); // set_count was verified as 1 above, what did you break?
631 
632  return UNDEFINED_LAYER;
633 }
PCB_LAYER_ID
A quick note on layer IDs:
size_t i
Definition: json11.cpp:597

References i, UNDEFINED_LAYER, and UNSELECTED_LAYER.

Referenced by D_PAD::Draw(), and PCBNEW_PRINTOUT::OnPrintPage().

◆ FmtBin()

std::string LSET::FmtBin ( ) const

Function FmtBin returns a binary string showing contents of this LSEQ.

Definition at line 259 of file lset.cpp.

260 {
261  std::string ret;
262 
263  int bit_count = size();
264 
265  for( int bit=0; bit<bit_count; ++bit )
266  {
267  if( bit )
268  {
269  if( !( bit % 8 ) )
270  ret += '|';
271  else if( !( bit % 4 ) )
272  ret += '_';
273  }
274 
275  ret += (*this)[bit] ? '1' : '0';
276  }
277 
278  // reverse of string
279  return std::string( ret.rbegin(), ret.rend() );
280 }
static long bit[8][9]
Definition: solve.cpp:826

References bit.

Referenced by ViaSort().

◆ FmtHex()

std::string LSET::FmtHex ( ) const

Function FmtHex returns a hex string showing contents of this LSEQ.

Definition at line 283 of file lset.cpp.

284 {
285  std::string ret;
286 
287  static const char hex[] = "0123456789abcdef";
288 
289  int nibble_count = ( size() + 3 ) / 4;
290 
291  for( int nibble=0; nibble<nibble_count; ++nibble )
292  {
293  unsigned ndx = 0;
294 
295  // test 4 consecutive bits and set ndx to 0-15:
296  for( int nibble_bit=0; nibble_bit<4; ++nibble_bit )
297  {
298  if( (*this)[nibble_bit + nibble*4] )
299  ndx |= (1 << nibble_bit);
300  }
301 
302  if( nibble && !( nibble % 8 ) )
303  ret += '_';
304 
305  assert( ndx < arrayDim( hex ) );
306 
307  ret += hex[ndx];
308  }
309 
310  // reverse of string
311  return std::string( ret.rbegin(), ret.rend() );
312 }
constexpr std::size_t arrayDim(T const (&)[N]) noexcept
Definition: macros.h:107

References arrayDim().

Referenced by fmt_mask().

◆ ForbiddenFootprintLayers()

LSET LSET::ForbiddenFootprintLayers ( )
static

Function ForbiddenFootprintLayers Layers which are not allowed within footprint definitions.

Currently internal copper layers, Edge.Cuts and Margin.

Definition at line 789 of file lset.cpp.

790 {
791  static const LSET saved = InternalCuMask().set( Edge_Cuts ).set( Margin );
792  return saved;
793 }
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:636

References Edge_Cuts, InternalCuMask(), and Margin.

Referenced by DIALOG_GRAPHIC_ITEM_PROPERTIES::DIALOG_GRAPHIC_ITEM_PROPERTIES(), PCB_LAYER_WIDGET::OnLayerSelect(), and PCB_LAYER_WIDGET::ReFill().

◆ ForbiddenTextLayers()

LSET LSET::ForbiddenTextLayers ( )
static

Function ForbiddenTextLayers Layers which are now allowed to have text on them.

Currently Edge.Cuts and Margin.

Definition at line 796 of file lset.cpp.

797 {
798  static const LSET saved( 1, Edge_Cuts );
799  return saved;
800 }
Class LSET is a set of PCB_LAYER_IDs.

References Edge_Cuts.

Referenced by DIALOG_TEXT_PROPERTIES::DIALOG_TEXT_PROPERTIES(), and TEXT_MOD_GRID_TABLE::TEXT_MOD_GRID_TABLE().

◆ FrontBoardTechMask()

LSET LSET::FrontBoardTechMask ( )
static

Function FrontBoardTechMask returns a mask holding technical layers used in a board fabrication (no CU layer) on front side.

Definition at line 739 of file lset.cpp.

740 {
741  static const LSET saved( 4, F_SilkS, F_Mask, F_Adhes, F_Paste );
742  return saved;
743 }
Class LSET is a set of PCB_LAYER_IDs.

References F_Adhes, F_Mask, F_Paste, and F_SilkS.

Referenced by AllBoardTechMask().

◆ FrontMask()

LSET LSET::FrontMask ( )
static

Function FrontMask returns a mask holding all technical layers and the external CU layer on front side.

Definition at line 775 of file lset.cpp.

776 {
777  static const LSET saved = FrontTechMask().set( F_Cu );
778  return saved;
779 }
static LSET FrontTechMask()
Function FrontTechMask returns a mask holding all technical layers (no CU layer) on front side.
Definition: lset.cpp:732
Class LSET is a set of PCB_LAYER_IDs.

References F_Cu, and FrontTechMask().

Referenced by D_PAD::Draw().

◆ FrontTechMask()

LSET LSET::FrontTechMask ( )
static

Function FrontTechMask returns a mask holding all technical layers (no CU layer) on front side.

Definition at line 732 of file lset.cpp.

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

Referenced by AllTechMask(), and FrontMask().

◆ InternalCuMask()

LSET LSET::InternalCuMask ( )
static

Function InternalCuMask() returns a complete set of internal copper layers, which is all Cu layers except F_Cu and B_Cu.

Definition at line 636 of file lset.cpp.

637 {
638  static const PCB_LAYER_ID cu_internals[] = {
639  In1_Cu,
640  In2_Cu,
641  In3_Cu,
642  In4_Cu,
643  In5_Cu,
644  In6_Cu,
645  In7_Cu,
646  In8_Cu,
647  In9_Cu,
648  In10_Cu,
649  In11_Cu,
650  In12_Cu,
651  In13_Cu,
652  In14_Cu,
653  In15_Cu,
654  In16_Cu,
655  In17_Cu,
656  In18_Cu,
657  In19_Cu,
658  In20_Cu,
659  In21_Cu,
660  In22_Cu,
661  In23_Cu,
662  In24_Cu,
663  In25_Cu,
664  In26_Cu,
665  In27_Cu,
666  In28_Cu,
667  In29_Cu,
668  In30_Cu,
669  };
670 
671  static const LSET saved( cu_internals, arrayDim( cu_internals ) );
672  return saved;
673 }
PCB_LAYER_ID
A quick note on layer IDs:
Class LSET is a set of PCB_LAYER_IDs.
constexpr std::size_t arrayDim(T const (&)[N]) noexcept
Definition: macros.h:107

References arrayDim(), In10_Cu, In11_Cu, In12_Cu, In13_Cu, In14_Cu, In15_Cu, In16_Cu, In17_Cu, In18_Cu, In19_Cu, In1_Cu, In20_Cu, In21_Cu, In22_Cu, In23_Cu, In24_Cu, In25_Cu, In26_Cu, In27_Cu, In28_Cu, In29_Cu, In2_Cu, In30_Cu, In3_Cu, In4_Cu, In5_Cu, In6_Cu, In7_Cu, In8_Cu, and In9_Cu.

Referenced by GERBER_JOBFILE_WRITER::addJSONDesignRules(), AllCuMask(), FlipLayerMask(), ForbiddenFootprintLayers(), DIALOG_PAD_PROPERTIES::padValuesOK(), and PANEL_SETUP_LAYERS::setCopperLayerCheckBoxes().

◆ Name()

const wxChar * LSET::Name ( PCB_LAYER_ID  aLayerId)
static

Function Name returns the fixed name association with aLayerId.

Definition at line 73 of file lset.cpp.

74 {
75  const wxChar* txt;
76 
77  // using a switch to explicitly show the mapping more clearly
78  switch( aLayerId )
79  {
80  case F_Cu: txt = wxT( "F.Cu" ); break;
81  case In1_Cu: txt = wxT( "In1.Cu" ); break;
82  case In2_Cu: txt = wxT( "In2.Cu" ); break;
83  case In3_Cu: txt = wxT( "In3.Cu" ); break;
84  case In4_Cu: txt = wxT( "In4.Cu" ); break;
85  case In5_Cu: txt = wxT( "In5.Cu" ); break;
86  case In6_Cu: txt = wxT( "In6.Cu" ); break;
87  case In7_Cu: txt = wxT( "In7.Cu" ); break;
88  case In8_Cu: txt = wxT( "In8.Cu" ); break;
89  case In9_Cu: txt = wxT( "In9.Cu" ); break;
90  case In10_Cu: txt = wxT( "In10.Cu" ); break;
91  case In11_Cu: txt = wxT( "In11.Cu" ); break;
92  case In12_Cu: txt = wxT( "In12.Cu" ); break;
93  case In13_Cu: txt = wxT( "In13.Cu" ); break;
94  case In14_Cu: txt = wxT( "In14.Cu" ); break;
95  case In15_Cu: txt = wxT( "In15.Cu" ); break;
96  case In16_Cu: txt = wxT( "In16.Cu" ); break;
97  case In17_Cu: txt = wxT( "In17.Cu" ); break;
98  case In18_Cu: txt = wxT( "In18.Cu" ); break;
99  case In19_Cu: txt = wxT( "In19.Cu" ); break;
100  case In20_Cu: txt = wxT( "In20.Cu" ); break;
101  case In21_Cu: txt = wxT( "In21.Cu" ); break;
102  case In22_Cu: txt = wxT( "In22.Cu" ); break;
103  case In23_Cu: txt = wxT( "In23.Cu" ); break;
104  case In24_Cu: txt = wxT( "In24.Cu" ); break;
105  case In25_Cu: txt = wxT( "In25.Cu" ); break;
106  case In26_Cu: txt = wxT( "In26.Cu" ); break;
107  case In27_Cu: txt = wxT( "In27.Cu" ); break;
108  case In28_Cu: txt = wxT( "In28.Cu" ); break;
109  case In29_Cu: txt = wxT( "In29.Cu" ); break;
110  case In30_Cu: txt = wxT( "In30.Cu" ); break;
111  case B_Cu: txt = wxT( "B.Cu" ); break;
112 
113  // Technicals
114  case B_Adhes: txt = wxT( "B.Adhes" ); break;
115  case F_Adhes: txt = wxT( "F.Adhes" ); break;
116  case B_Paste: txt = wxT( "B.Paste" ); break;
117  case F_Paste: txt = wxT( "F.Paste" ); break;
118  case B_SilkS: txt = wxT( "B.SilkS" ); break;
119  case F_SilkS: txt = wxT( "F.SilkS" ); break;
120  case B_Mask: txt = wxT( "B.Mask" ); break;
121  case F_Mask: txt = wxT( "F.Mask" ); break;
122 
123  // Users
124  case Dwgs_User: txt = wxT( "Dwgs.User" ); break;
125  case Cmts_User: txt = wxT( "Cmts.User" ); break;
126  case Eco1_User: txt = wxT( "Eco1.User" ); break;
127  case Eco2_User: txt = wxT( "Eco2.User" ); break;
128  case Edge_Cuts: txt = wxT( "Edge.Cuts" ); break;
129  case Margin: txt = wxT( "Margin" ); break;
130 
131  // Footprint
132  case F_CrtYd: txt = wxT( "F.CrtYd" ); break;
133  case B_CrtYd: txt = wxT( "B.CrtYd" ); break;
134  case F_Fab: txt = wxT( "F.Fab" ); break;
135  case B_Fab: txt = wxT( "B.Fab" ); break;
136 
137  // Rescue
138  case Rescue: txt = wxT( "Rescue" ); break;
139 
140  default:
141  std::cout << aLayerId << std::endl;
142  wxASSERT_MSG( 0, wxT( "aLayerId out of range" ) );
143  txt = wxT( "BAD INDEX!" ); break;
144  }
145 
146  return txt;
147 }

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

Referenced by BOARD::GetStandardLayerName(), PCB_PARSER::init(), PCBNEW_PRINTOUT::OnPrintPage(), and COLORS_DESIGN_SETTINGS::setupConfigParams().

◆ ParseHex()

int LSET::ParseHex ( const char *  aStart,
int  aCount 
)

Function ParseHex understands the output of FmtHex() and replaces this set's values with those given in the input string.

Parsing stops at the first non hex ASCII byte, except that marker bytes output from FmtHex are not terminators.

Returns
int - number of bytes consumed

Definition at line 315 of file lset.cpp.

316 {
317  LSET tmp;
318 
319  const char* rstart = aStart + aCount - 1;
320  const char* rend = aStart - 1;
321 
322  const int bitcount = size();
323 
324  int nibble_ndx = 0;
325 
326  while( rstart > rend )
327  {
328  int cc = *rstart--;
329 
330  if( cc == '_' )
331  continue;
332 
333  int nibble;
334 
335  if( cc >= '0' && cc <= '9' )
336  nibble = cc - '0';
337  else if( cc >= 'a' && cc <= 'f' )
338  nibble = cc - 'a' + 10;
339  else if( cc >= 'A' && cc <= 'F' )
340  nibble = cc - 'A' + 10;
341  else
342  break;
343 
344  int bit = nibble_ndx * 4;
345 
346  for( int ndx=0; bit<bitcount && ndx<4; ++bit, ++ndx )
347  if( nibble & (1<<ndx) )
348  tmp.set( bit );
349 
350  if( bit >= bitcount )
351  break;
352 
353  ++nibble_ndx;
354  }
355 
356  int byte_count = aStart + aCount - 1 - rstart;
357 
358  assert( byte_count >= 0 );
359 
360  if( byte_count > 0 )
361  *this = tmp;
362 
363  return byte_count;
364 }
Class LSET is a set of PCB_LAYER_IDs.
static long bit[8][9]
Definition: solve.cpp:826

References bit.

Referenced by PCB_PLOT_PARAMS_PARSER::Parse().

◆ Seq() [1/2]

LSEQ LSET::Seq ( const PCB_LAYER_ID aWishListSequence,
unsigned  aCount 
) const

Function Seq returns an LSEQ from the union of this LSET and a desired sequence.

The LSEQ element will be in the same sequence as aWishListSequence if they are present.

Parameters
aWishListSequenceestablishes the order of the returned LSEQ, and the LSEQ will only contain PCB_LAYER_IDs which are present in this set.
aCountis the length of aWishListSequence array.

Definition at line 367 of file lset.cpp.

368 {
369  LSEQ ret;
370 
371 #if defined(DEBUG) && 0
372  LSET dup_detector;
373 
374  for( unsigned i=0; i<aCount; ++i )
375  {
376  PCB_LAYER_ID id = aWishListSequence[i];
377 
378  if( test( id ) )
379  {
380  wxASSERT_MSG( !dup_detector[id], wxT( "Duplicate in aWishListSequence" ) );
381  dup_detector[id] = true;
382 
383  ret.push_back( id );
384  }
385  }
386 #else
387 
388  for( unsigned i=0; i<aCount; ++i )
389  {
390  PCB_LAYER_ID id = aWishListSequence[i];
391 
392  if( test( id ) )
393  ret.push_back( id );
394  }
395 #endif
396 
397  return ret;
398 }
PCB_LAYER_ID
A quick note on layer IDs:
Class LSET is a set of PCB_LAYER_IDs.
Class LSEQ is a sequence (and therefore also a set) of PCB_LAYER_IDs.
size_t i
Definition: json11.cpp:597

References i.

Referenced by CINFO3D_VISU::createLayers(), CreatePadsShapesSection(), ZONE_CONTAINER::Draw(), DIALOG_EXPORT_SVG::ExportSVGFile(), PCB_IO::formatBoardLayers(), PANEL_SETUP_LAYERS::getNonRemovableLayers(), PANEL_SETUP_LAYERS::getRemovedLayersWithItems(), PlotLayerOutlines(), PARAM_CFG_LAYERS::SaveParam(), ZONE_CONTAINER::SetLayerSet(), GERBVIEW_PRINTOUT::setupViewLayers(), PCBNEW_PRINTOUT::setupViewLayers(), Technicals(), ZONE_CONTAINER::ViewGetLayers(), and HYPERLYNX_EXPORTER::writeSinglePadStack().

◆ Seq() [2/2]

LSEQ LSET::Seq ( ) const

Function Seq returns a LSEQ from this LSET in ascending PCB_LAYER_ID order.

Each LSEQ element will be in the same sequence as in PCB_LAYER_ID and only present in the resultant LSEQ if present in this set. Therefore the sequence is subject to change, use it only when enumeration and not order is important.

Definition at line 401 of file lset.cpp.

402 {
403  LSEQ ret;
404 
405  for( unsigned i=0; i<size(); ++i )
406  {
407  if( test(i) )
408  ret.push_back( PCB_LAYER_ID( i ) );
409  }
410 
411  return ret;
412 }
PCB_LAYER_ID
A quick note on layer IDs:
Class LSEQ is a sequence (and therefore also a set) of PCB_LAYER_IDs.
size_t i
Definition: json11.cpp:597

References i.

Referenced by CuStack(), SeqStackupBottom2Top(), TechAndUserUIOrder(), and Users().

◆ SeqStackupBottom2Top()

LSEQ LSET::SeqStackupBottom2Top ( ) const

Function SeqStackBottom2Top returns the sequence that is typical for a bottom-to-top stack-up.

For instance, to plot multiple layers in a single image, the top layers output last.

Definition at line 415 of file lset.cpp.

416 {
417  // bottom-to-top stack-up layers
418  static const PCB_LAYER_ID sequence[] = {
419  B_Fab,
420  B_CrtYd,
421  B_Adhes,
422  B_SilkS,
423  B_Paste,
424  B_Mask,
425  B_Cu,
426  In30_Cu,
427  In29_Cu,
428  In28_Cu,
429  In27_Cu,
430  In26_Cu,
431  In25_Cu,
432  In24_Cu,
433  In23_Cu,
434  In22_Cu,
435  In21_Cu,
436  In20_Cu,
437  In19_Cu,
438  In18_Cu,
439  In17_Cu,
440  In16_Cu,
441  In15_Cu,
442  In14_Cu,
443  In13_Cu,
444  In12_Cu,
445  In11_Cu,
446  In10_Cu,
447  In9_Cu,
448  In8_Cu,
449  In7_Cu,
450  In6_Cu,
451  In5_Cu,
452  In4_Cu,
453  In3_Cu,
454  In2_Cu,
455  In1_Cu,
456  F_Cu,
457  F_Mask,
458  F_Paste,
459  F_SilkS,
460  F_Adhes,
461  F_CrtYd,
462  F_Fab,
463  Dwgs_User,
464  Cmts_User,
465  Eco1_User,
466  Eco2_User,
467  Margin,
468  Edge_Cuts,
469  };
470 
471  return Seq( sequence, arrayDim( sequence ) );
472 }
LSEQ Seq() const
Function Seq returns a LSEQ from this LSET in ascending PCB_LAYER_ID order.
Definition: lset.cpp:401
PCB_LAYER_ID
A quick note on layer IDs:
constexpr std::size_t arrayDim(T const (&)[N]) noexcept
Definition: macros.h:107

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

Referenced by GERBER_JOBFILE_WRITER::addJSONMaterialStackup(), and DIALOG_EXPORT_SVG::CreateSVGFile().

◆ TechAndUserUIOrder()

LSEQ LSET::TechAndUserUIOrder ( ) const

Returns the technical and user layers in the order shown in layer widget.

Definition at line 232 of file lset.cpp.

233 {
234  static const PCB_LAYER_ID sequence[] = {
235  F_Adhes,
236  B_Adhes,
237  F_Paste,
238  B_Paste,
239  F_SilkS,
240  B_SilkS,
241  F_Mask,
242  B_Mask,
243  Dwgs_User,
244  Cmts_User,
245  Eco1_User,
246  Eco2_User,
247  Edge_Cuts,
248  Margin,
249  F_CrtYd,
250  B_CrtYd,
251  F_Fab,
252  B_Fab,
253  };
254 
255  return Seq( sequence, arrayDim( sequence ) );
256 }
LSEQ Seq() const
Function Seq returns a LSEQ from this LSET in ascending PCB_LAYER_ID order.
Definition: lset.cpp:401
PCB_LAYER_ID
A quick note on layer IDs:
constexpr std::size_t arrayDim(T const (&)[N]) noexcept
Definition: macros.h:107

References arrayDim(), B_Adhes, B_CrtYd, B_Fab, B_Mask, B_Paste, B_SilkS, Cmts_User, Dwgs_User, Eco1_User, Eco2_User, Edge_Cuts, F_Adhes, F_CrtYd, F_Fab, F_Mask, F_Paste, F_SilkS, Margin, and Seq().

Referenced by UIOrder().

◆ Technicals()

LSEQ LSET::Technicals ( LSET  aSubToOmit = LSET()) const

Function Technicals returns a sequence of technical layers.

A sequence provides a certain order.

Parameters
aSubToOmitis the subset of the techical layers to omit, defaults to none.

Definition at line 192 of file lset.cpp.

193 {
194  // desired sequence
195  static const PCB_LAYER_ID sequence[] = {
196  F_Adhes,
197  B_Adhes,
198  F_Paste,
199  B_Paste,
200  F_SilkS,
201  B_SilkS,
202  F_Mask,
203  B_Mask,
204  F_CrtYd,
205  B_CrtYd,
206  F_Fab,
207  B_Fab,
208  };
209 
210  LSET subset = ~aSetToOmit & *this;
211 
212  return subset.Seq( sequence, arrayDim( sequence ) );
213 }
LSEQ Seq(const PCB_LAYER_ID *aWishListSequence, unsigned aCount) const
Function Seq returns an LSEQ from the union of this LSET and a desired sequence.
Definition: lset.cpp:367
PCB_LAYER_ID
A quick note on layer IDs:
Class LSET is a set of PCB_LAYER_IDs.
constexpr std::size_t arrayDim(T const (&)[N]) noexcept
Definition: macros.h:107

References arrayDim(), B_Adhes, B_CrtYd, B_Fab, B_Mask, B_Paste, B_SilkS, F_Adhes, F_CrtYd, F_Fab, F_Mask, F_Paste, F_SilkS, and Seq().

◆ UIOrder()

LSEQ LSET::UIOrder ( ) const

Definition at line 803 of file lset.cpp.

804 {
805  LSEQ order = CuStack();
806  LSEQ techuser = TechAndUserUIOrder();
807  order.insert( order.end(), techuser.begin(), techuser.end() );
808 
809  return order;
810 }
LSEQ CuStack() const
Function CuStack returns a sequence of copper layers in starting from the front/top and extending to ...
Definition: lset.cpp:150
LSEQ TechAndUserUIOrder() const
Returns the technical and user layers in the order shown in layer widget.
Definition: lset.cpp:232
Class LSEQ is a sequence (and therefore also a set) of PCB_LAYER_IDs.

References CuStack(), and TechAndUserUIOrder().

Referenced by PCB_ONE_LAYER_SELECTOR::buildList(), SELECT_COPPER_LAYERS_PAIR_DIALOG::buildList(), DIALOG_PLOT::init_Dialog(), DIALOG_EXPORT_SVG::initDialog(), GERBVIEW_PRINTOUT::OnPrintPage(), PCBNEW_PRINTOUT::OnPrintPage(), DIALOG_PLOT::Plot(), PCB_LAYER_BOX_SELECTOR::Resync(), ZONE_SETTINGS::SetupLayersList(), and DIALOG_PRINT_PCBNEW::TransferDataToWindow().

◆ UserMask()

LSET LSET::UserMask ( )
static

Definition at line 760 of file lset.cpp.

761 {
762  static const LSET saved( 6,
763  Dwgs_User,
764  Cmts_User,
765  Eco1_User,
766  Eco2_User,
767  Edge_Cuts,
768  Margin
769  );
770 
771  return saved;
772 }
Class LSET is a set of PCB_LAYER_IDs.

References Cmts_User, Dwgs_User, Eco1_User, Eco2_User, Edge_Cuts, and Margin.

◆ Users()

LSEQ LSET::Users ( ) const

*_User layers.

Definition at line 216 of file lset.cpp.

217 {
218  // desired
219  static const PCB_LAYER_ID sequence[] = {
220  Dwgs_User,
221  Cmts_User,
222  Eco1_User,
223  Eco2_User,
224  Edge_Cuts,
225  Margin,
226  };
227 
228  return Seq( sequence, arrayDim( sequence ) );
229 }
LSEQ Seq() const
Function Seq returns a LSEQ from this LSET in ascending PCB_LAYER_ID order.
Definition: lset.cpp:401
PCB_LAYER_ID
A quick note on layer IDs:
constexpr std::size_t arrayDim(T const (&)[N]) noexcept
Definition: macros.h:107

References arrayDim(), Cmts_User, Dwgs_User, Eco1_User, Eco2_User, Edge_Cuts, Margin, and Seq().


The documentation for this class was generated from the following files: