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 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 ()
 

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 375 of file layers_id_colors_and_visibility.h.

Constructor & Destructor Documentation

LSET::LSET ( )
inline

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

Definition at line 393 of file layers_id_colors_and_visibility.h.

Referenced by AllLayersMask(), and AllNonCuMask().

393  :
394  BASE_SET() // all bits are set to zero in BASE_SET()
395  {
396  }
std::bitset< PCB_LAYER_ID_COUNT > BASE_SET
LSET::LSET ( const BASE_SET aOther)
inline

Definition at line 398 of file layers_id_colors_and_visibility.h.

398  :
399  BASE_SET( aOther )
400  {
401  }
std::bitset< PCB_LAYER_ID_COUNT > BASE_SET
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 418 of file layers_id_colors_and_visibility.h.

418  : // PCB_LAYER_ID deliberately exludes int and relatives
419  BASE_SET()
420  {
421  set( aLayer );
422  }
std::bitset< PCB_LAYER_ID_COUNT > BASE_SET
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
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.

References PCB_LAYER_ID_COUNT.

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:
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 608 of file layers_id_colors_and_visibility.h.

609  {
610  // not usable, it's private.
611  }

Member Function Documentation

LSET LSET::AllBoardTechMask ( )
static

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

Definition at line 723 of file lset.cpp.

References BackBoardTechMask(), and FrontBoardTechMask().

Referenced by BRDITEMS_PLOTTER::PlotPad().

724 {
725  static const LSET saved = BackBoardTechMask() | FrontBoardTechMask();
726  return saved;
727 }
static LSET FrontBoardTechMask()
Function FrontBoardTechMask returns a mask holding technical layers used in a board fabrication (no C...
Definition: lset.cpp:709
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:696
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 646 of file lset.cpp.

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(), compute_layer_Zs(), compute_pad_access_code(), CINFO3D_VISU::createLayers(), DIALOG_SVG_PRINT::CreateSVGFile(), DIALOG_DIMENSION_EDITOR::DIALOG_DIMENSION_EDITOR(), DIALOG_DXF_IMPORT::DIALOG_DXF_IMPORT(), DRC::doPadToPadsDrc(), DRC::doTrackDrc(), D_PAD::Draw(), BOARD::Draw(), fmt_mask(), PCB_IO::formatLayers(), GENDRILL_WRITER_BASE::GenDrillReportFile(), VIA::GetLayerSet(), BOARD::GetPad(), MODULE::GetUniquePadCount(), KIGFX::PCB_RENDER_SETTINGS::ImportLegacyColors(), PCB_PARSER::init(), DIALOG_KEEPOUT_AREA_PROPERTIES::initDialog(), DIALOG_COPPER_ZONE::initDialog(), ZONE_CONTAINER::IsOnCopperLayer(), DSN::isRoundKeepout(), LEGACY_PLUGIN::leg_mask2new(), EAGLE_PLUGIN::loadPlain(), DSN::SPECCTRA_DB::makeIMAGE(), DSN::SPECCTRA_DB::makePADSTACK(), DIALOG_KEEPOUT_AREA_PROPERTIES::OnLayerSelection(), DIALOG_PLOT::OnPopUpLayers(), DIALOG_LAYERS_SETUP::OnPresetsChoice(), 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::PrintPage(), PCB_EDIT_FRAME::Process_Special_Functions(), SWAP_LAYERS_DIALOG::Sel_Layer(), BOARD_DESIGN_SETTINGS::SetCopperLayerCount(), BOARD_DESIGN_SETTINGS::SetEnabledLayers(), ZONE_CONTAINER::SetLayerSet(), DIALOG_PAD_PROPERTIES::setPadLayersList(), DIALOG_LAYERS_SETUP::showLayerTypes(), D_PAD::StandardMask(), PNS_KICAD_IFACE::syncPad(), DIALOG_LAYERS_SETUP::testLayerNames(), DIALOG_LAYERS_SETUP::TransferDataFromWindow(), DIALOG_PAD_PROPERTIES::transferDataToPad(), DialogEditModuleText::TransferDataToWindow(), DIALOG_GRAPHIC_ITEM_PROPERTIES::TransferDataToWindow(), and D_PAD::UnplatedHoleMask().

647 {
648  // retain all in static as the full set, which is a common case.
649  static const LSET all = InternalCuMask().set( F_Cu ).set( B_Cu );
650 
651  if( aCuLayerCount == MAX_CU_LAYERS )
652  return all;
653 
654  // subtract out some Cu layers not wanted in the mask.
655  LSET ret = all;
656  int clear_count = MAX_CU_LAYERS - aCuLayerCount;
657 
658  clear_count = Clamp( 0, clear_count, MAX_CU_LAYERS - 2 );
659 
660  for( LAYER_NUM elem=In30_Cu; clear_count; --elem, --clear_count )
661  {
662  ret.set( elem, false );
663  }
664 
665  return ret;
666 }
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:127
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:606
int LAYER_NUM
Type LAYER_NUM can be replaced with int and removed.
LSET LSET::AllLayersMask ( )
static

Definition at line 683 of file lset.cpp.

References LSET().

Referenced by GRID_HELPER::BestDragOrigin(), GRID_HELPER::BestSnapAnchor(), and PCB_LAYER_BOX_SELECTOR::Resync().

684 {
685  static const LSET saved = LSET().set();
686  return saved;
687 }
Class LSET is a set of PCB_LAYER_IDs.
LSET()
Constructor LSET() creates an empty (cleared) set.
LSET LSET::AllNonCuMask ( )
static

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

Definition at line 669 of file lset.cpp.

References AllCuMask(), and LSET().

Referenced by DIALOG_GLOBAL_DELETION::AcceptPcbDelete(), CINFO3D_VISU::createLayers(), DIALOG_TRACK_VIA_PROPERTIES::DIALOG_TRACK_VIA_PROPERTIES(), DIALOG_NON_COPPER_ZONES_EDITOR::Init(), LayerMaskDescribe(), DIALOG_NON_COPPER_ZONES_EDITOR::OnOkClick(), ROUTER_TOOL::onViaCommand(), PCB_EDIT_FRAME::Process_Special_Functions(), and SWAP_LAYERS_DIALOG::Sel_Layer().

670 {
671  static const LSET saved = LSET().set() & ~AllCuMask();
672  return saved;
673 }
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:646
Class LSET is a set of PCB_LAYER_IDs.
LSET()
Constructor LSET() creates an empty (cleared) set.
LSET LSET::AllTechMask ( )
static

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

Definition at line 716 of file lset.cpp.

References BackTechMask(), and FrontTechMask().

Referenced by FOOTPRINT_EDIT_FRAME::CreateTextModule(), PCB_LAYER_WIDGET::isLayerAllowedInFpMode(), and DIALOG_PLOT::OnPopUpLayers().

717 {
718  static const LSET saved = BackTechMask() | FrontTechMask();
719  return saved;
720 }
static LSET BackTechMask()
Function BackTechMask returns a mask holding all technical layers (no CU layer) on back side...
Definition: lset.cpp:690
static LSET FrontTechMask()
Function FrontTechMask returns a mask holding all technical layers (no CU layer) on front side...
Definition: lset.cpp:702
Class LSET is a set of PCB_LAYER_IDs.
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 696 of file lset.cpp.

References B_Adhes, B_Mask, B_Paste, and B_SilkS.

Referenced by AllBoardTechMask().

697 {
698  static const LSET saved( 4, B_SilkS, B_Mask, B_Adhes, B_Paste );
699  return saved;
700 }
Class LSET is a set of PCB_LAYER_IDs.
LSET LSET::BackMask ( )
static

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

Definition at line 752 of file lset.cpp.

References B_Cu, and BackTechMask().

Referenced by D_PAD::Draw().

753 {
754  static const LSET saved = BackTechMask().set( B_Cu );
755  return saved;
756 }
static LSET BackTechMask()
Function BackTechMask returns a mask holding all technical layers (no CU layer) on back side...
Definition: lset.cpp:690
Class LSET is a set of PCB_LAYER_IDs.
LSET LSET::BackTechMask ( )
static

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

Definition at line 690 of file lset.cpp.

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

Referenced by AllTechMask(), and BackMask().

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 147 of file lset.cpp.

References B_Cu, DIM, 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(), and PCB_LAYER_WIDGET::ReFill().

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

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

Definition at line 676 of file lset.cpp.

References B_Cu, and F_Cu.

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

677 {
678  static const LSET saved( 2, F_Cu, B_Cu );
679  return saved;
680 }
Class LSET is a set of PCB_LAYER_IDs.
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 585 of file lset.cpp.

References UNDEFINED_LAYER, and UNSELECTED_LAYER.

Referenced by D_PAD::Draw(), LayerMaskDescribe(), and BOARD_PRINTOUT_CONTROLLER::OnPrintPage().

586 {
587  unsigned set_count = count();
588 
589  if( !set_count )
590  return UNSELECTED_LAYER;
591  else if( set_count > 1 )
592  return UNDEFINED_LAYER;
593 
594  for( unsigned i=0; i < size(); ++i )
595  {
596  if( test( i ) )
597  return PCB_LAYER_ID( i );
598  }
599 
600  wxASSERT( 0 ); // set_count was verified as 1 above, what did you break?
601 
602  return UNDEFINED_LAYER;
603 }
PCB_LAYER_ID
A quick note on layer IDs:
std::string LSET::FmtBin ( ) const

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

Definition at line 229 of file lset.cpp.

References bit.

Referenced by ViaSort().

230 {
231  std::string ret;
232 
233  int bit_count = size();
234 
235  for( int bit=0; bit<bit_count; ++bit )
236  {
237  if( bit )
238  {
239  if( !( bit % 8 ) )
240  ret += '|';
241  else if( !( bit % 4 ) )
242  ret += '_';
243  }
244 
245  ret += (*this)[bit] ? '1' : '0';
246  }
247 
248  // reverse of string
249  return std::string( ret.rbegin(), ret.rend() );
250 }
static long bit[8][9]
Definition: solve.cpp:826
std::string LSET::FmtHex ( ) const

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

Definition at line 253 of file lset.cpp.

References DIM.

Referenced by fmt_mask().

254 {
255  std::string ret;
256 
257  static const char hex[] = "0123456789abcdef";
258 
259  int nibble_count = ( size() + 3 ) / 4;
260 
261  for( int nibble=0; nibble<nibble_count; ++nibble )
262  {
263  unsigned ndx = 0;
264 
265  // test 4 consecutive bits and set ndx to 0-15:
266  for( int nibble_bit=0; nibble_bit<4; ++nibble_bit )
267  {
268  if( (*this)[nibble_bit + nibble*4] )
269  ndx |= (1 << nibble_bit);
270  }
271 
272  if( nibble && !( nibble % 8 ) )
273  ret += '_';
274 
275  assert( ndx < DIM( hex ) );
276 
277  ret += hex[ndx];
278  }
279 
280  // reverse of string
281  return std::string( ret.rbegin(), ret.rend() );
282 }
#define DIM(x)
of elements in an array
Definition: macros.h:98
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 709 of file lset.cpp.

References F_Adhes, F_Mask, F_Paste, and F_SilkS.

Referenced by AllBoardTechMask().

710 {
711  static const LSET saved( 4, F_SilkS, F_Mask, F_Adhes, F_Paste );
712  return saved;
713 }
Class LSET is a set of PCB_LAYER_IDs.
LSET LSET::FrontMask ( )
static

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

Definition at line 745 of file lset.cpp.

References F_Cu, and FrontTechMask().

Referenced by D_PAD::Draw().

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

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

Definition at line 702 of file lset.cpp.

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

Referenced by AllTechMask(), and FrontMask().

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 606 of file lset.cpp.

References DIM, 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 AllCuMask(), GERBER_JOBFILE_WRITER::CreateJobFile(), FlipLayerMask(), LayerMaskDescribe(), DIALOG_PAD_PROPERTIES::padValuesOK(), DIALOG_LAYERS_SETUP::setCopperLayerCheckBoxes(), and DIALOG_MODEDIT_FP_BODY_ITEM_PROPERTIES::TransferDataToWindow().

607 {
608  static const PCB_LAYER_ID cu_internals[] = {
609  In1_Cu,
610  In2_Cu,
611  In3_Cu,
612  In4_Cu,
613  In5_Cu,
614  In6_Cu,
615  In7_Cu,
616  In8_Cu,
617  In9_Cu,
618  In10_Cu,
619  In11_Cu,
620  In12_Cu,
621  In13_Cu,
622  In14_Cu,
623  In15_Cu,
624  In16_Cu,
625  In17_Cu,
626  In18_Cu,
627  In19_Cu,
628  In20_Cu,
629  In21_Cu,
630  In22_Cu,
631  In23_Cu,
632  In24_Cu,
633  In25_Cu,
634  In26_Cu,
635  In27_Cu,
636  In28_Cu,
637  In29_Cu,
638  In30_Cu,
639  };
640 
641  static const LSET saved( cu_internals, DIM( cu_internals ) );
642  return saved;
643 }
#define DIM(x)
of elements in an array
Definition: macros.h:98
PCB_LAYER_ID
A quick note on layer IDs:
Class LSET is a set of PCB_LAYER_IDs.
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.

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, and Margin.

Referenced by CINFO3D_VISU::createLayers(), BOARD::GetStandardLayerName(), PCB_PARSER::init(), BOARD_PRINTOUT_CONTROLLER::OnPrintPage(), and COLORS_DESIGN_SETTINGS::setupConfigParams().

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  default:
138  std::cout << aLayerId << std::endl;
139  wxASSERT_MSG( 0, wxT( "aLayerId out of range" ) );
140  txt = wxT( "BAD INDEX!" ); break;
141  }
142 
143  return txt;
144 }
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 285 of file lset.cpp.

References bit.

Referenced by PCB_PLOT_PARAMS_PARSER::Parse().

286 {
287  LSET tmp;
288 
289  const char* rstart = aStart + aCount - 1;
290  const char* rend = aStart - 1;
291 
292  const int bitcount = size();
293 
294  int nibble_ndx = 0;
295 
296  while( rstart > rend )
297  {
298  int cc = *rstart--;
299 
300  if( cc == '_' )
301  continue;
302 
303  int nibble;
304 
305  if( cc >= '0' && cc <= '9' )
306  nibble = cc - '0';
307  else if( cc >= 'a' && cc <= 'f' )
308  nibble = cc - 'a' + 10;
309  else if( cc >= 'A' && cc <= 'F' )
310  nibble = cc - 'A' + 10;
311  else
312  break;
313 
314  int bit = nibble_ndx * 4;
315 
316  for( int ndx=0; bit<bitcount && ndx<4; ++bit, ++ndx )
317  if( nibble & (1<<ndx) )
318  tmp.set( bit );
319 
320  if( bit >= bitcount )
321  break;
322 
323  ++nibble_ndx;
324  }
325 
326  int byte_count = aStart + aCount - 1 - rstart;
327 
328  assert( byte_count >= 0 );
329 
330  if( byte_count > 0 )
331  *this = tmp;
332 
333  return byte_count;
334 }
Class LSET is a set of PCB_LAYER_IDs.
static long bit[8][9]
Definition: solve.cpp:826
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 337 of file lset.cpp.

Referenced by CINFO3D_VISU::createLayers(), CreatePadsShapesSection(), ZONE_CONTAINER::Draw(), DIALOG_SVG_PRINT::ExportSVGFile(), PCB_IO::formatBoardLayers(), GENDRILL_WRITER_BASE::GenDrillReportFile(), DIALOG_LAYERS_SETUP::getRemovedLayersWithItems(), DIALOG_NON_COPPER_ZONES_EDITOR::OnOkClick(), PlotLayerOutlines(), SELECTION_TOOL::selectable(), ZONE_CONTAINER::SetLayerSet(), Technicals(), and ZONE_CONTAINER::ViewGetLayers().

338 {
339  LSEQ ret;
340 
341 #if defined(DEBUG) && 0
342  LSET dup_detector;
343 
344  for( unsigned i=0; i<aCount; ++i )
345  {
346  PCB_LAYER_ID id = aWishListSequence[i];
347 
348  if( test( id ) )
349  {
350  wxASSERT_MSG( !dup_detector[id], wxT( "Duplicate in aWishListSequence" ) );
351  dup_detector[id] = true;
352 
353  ret.push_back( id );
354  }
355  }
356 #else
357 
358  for( unsigned i=0; i<aCount; ++i )
359  {
360  PCB_LAYER_ID id = aWishListSequence[i];
361 
362  if( test( id ) )
363  ret.push_back( id );
364  }
365 #endif
366 
367  return ret;
368 }
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.
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 371 of file lset.cpp.

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

372 {
373  LSEQ ret;
374 
375  for( unsigned i=0; i<size(); ++i )
376  {
377  if( test(i) )
378  ret.push_back( PCB_LAYER_ID( i ) );
379  }
380 
381  return ret;
382 }
PCB_LAYER_ID
A quick note on layer IDs:
Class LSEQ is a sequence (and therefore also a set) of PCB_LAYER_IDs.
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 385 of file lset.cpp.

References B_Adhes, B_CrtYd, B_Cu, B_Fab, B_Mask, B_Paste, B_SilkS, Cmts_User, DIM, 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 DIALOG_SVG_PRINT::CreateSVGFile().

386 {
387  // bottom-to-top stack-up layers
388  static const PCB_LAYER_ID sequence[] = {
389  B_Fab,
390  B_CrtYd,
391  B_Adhes,
392  B_SilkS,
393  B_Paste,
394  B_Mask,
395  B_Cu,
396  In30_Cu,
397  In29_Cu,
398  In28_Cu,
399  In27_Cu,
400  In26_Cu,
401  In25_Cu,
402  In24_Cu,
403  In23_Cu,
404  In22_Cu,
405  In21_Cu,
406  In20_Cu,
407  In19_Cu,
408  In18_Cu,
409  In17_Cu,
410  In16_Cu,
411  In15_Cu,
412  In14_Cu,
413  In13_Cu,
414  In12_Cu,
415  In11_Cu,
416  In10_Cu,
417  In9_Cu,
418  In8_Cu,
419  In7_Cu,
420  In6_Cu,
421  In5_Cu,
422  In4_Cu,
423  In3_Cu,
424  In2_Cu,
425  In1_Cu,
426  F_Cu,
427  F_Mask,
428  F_Paste,
429  F_SilkS,
430  F_Adhes,
431  F_CrtYd,
432  F_Fab,
433  Dwgs_User,
434  Cmts_User,
435  Eco1_User,
436  Eco2_User,
437  Margin,
438  Edge_Cuts,
439  };
440 
441  return Seq( sequence, DIM( sequence ) );
442 }
#define DIM(x)
of elements in an array
Definition: macros.h:98
LSEQ Seq() const
Function Seq returns a LSEQ from this LSET in ascending PCB_LAYER_ID order.
Definition: lset.cpp:371
PCB_LAYER_ID
A quick note on layer IDs:
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 189 of file lset.cpp.

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

190 {
191  // desired sequence
192  static const PCB_LAYER_ID sequence[] = {
193  B_Adhes,
194  F_Adhes,
195  B_Paste,
196  F_Paste,
197  B_SilkS,
198  F_SilkS,
199  B_Mask,
200  F_Mask,
201  B_CrtYd,
202  F_CrtYd,
203  B_Fab,
204  F_Fab,
205  };
206 
207  LSET subset = ~aSetToOmit & *this;
208 
209  return subset.Seq( sequence, DIM( sequence ) );
210 }
#define DIM(x)
of elements in an array
Definition: macros.h:98
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:337
PCB_LAYER_ID
A quick note on layer IDs:
Class LSET is a set of PCB_LAYER_IDs.
LSEQ LSET::UIOrder ( ) const

Definition at line 759 of file lset.cpp.

References DIM, PCB_LAYER_ID_COUNT, and Seq().

Referenced by PCB_ONE_LAYER_SELECTOR::buildList(), SELECT_COPPER_LAYERS_PAIR_DIALOG::buildList(), DIALOG_PLOT::init_Dialog(), DIALOG_KEEPOUT_AREA_PROPERTIES::initDialog(), DIALOG_SVG_PRINT::initDialog(), DIALOG_COPPER_ZONE::initDialog(), DIALOG_PRINT_USING_PRINTER::initValues(), BOARD_PRINTOUT_CONTROLLER::OnPrintPage(), DIALOG_PLOT::Plot(), and PCB_LAYER_BOX_SELECTOR::Resync().

760 {
762 
763  // Assmuming that the PCB_LAYER_ID order is according to preferred UI order, as of
764  // today this is true. When that becomes not true, its easy to change the order
765  // in here to compensate.
766 
767  for( unsigned i=0; i<DIM(order); ++i )
768  order[i] = PCB_LAYER_ID( i );
769 
770  return Seq( order, DIM( order ) );
771 }
#define DIM(x)
of elements in an array
Definition: macros.h:98
LSEQ Seq() const
Function Seq returns a LSEQ from this LSET in ascending PCB_LAYER_ID order.
Definition: lset.cpp:371
PCB_LAYER_ID
A quick note on layer IDs:
LSET LSET::UserMask ( )
static

Definition at line 730 of file lset.cpp.

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

731 {
732  static const LSET saved( 6,
733  Dwgs_User,
734  Cmts_User,
735  Eco1_User,
736  Eco2_User,
737  Edge_Cuts,
738  Margin
739  );
740 
741  return saved;
742 }
Class LSET is a set of PCB_LAYER_IDs.
LSEQ LSET::Users ( ) const

*_User layers.

Definition at line 213 of file lset.cpp.

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

214 {
215  // desired
216  static const PCB_LAYER_ID sequence[] = {
217  Dwgs_User,
218  Cmts_User,
219  Eco1_User,
220  Eco2_User,
221  Edge_Cuts,
222  Margin,
223  };
224 
225  return Seq( sequence, DIM( sequence ) );
226 }
#define DIM(x)
of elements in an array
Definition: macros.h:98
LSEQ Seq() const
Function Seq returns a LSEQ from this LSET in ascending PCB_LAYER_ID order.
Definition: lset.cpp:371
PCB_LAYER_ID
A quick note on layer IDs:

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