KiCad PCB EDA Suite
LSET Class Reference

Class LSET is a set of 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 (LAYER_ID aLayer)
 Constructor LSET( LAYER_ID ) takes a LAYER_ID and sets that bit. More...
 
 LSET (const LAYER_ID *aArray, unsigned aCount)
 Constructor LSET( const LAYER_ID* aArray, unsigned aCount ) works well with an array or LSEQ. More...
 
 LSET (unsigned aIdCount, int aFirst,...)
 Constructor LSET( unsigned, LAYER_ID, ...) takes one or more 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 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 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...
 
LAYER_ID ExtractLayer () const
 Find the first set LAYER_ID. More...
 

Static Public Member Functions

static const wxChar * Name (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 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( LAYER_ID ). More...
 

Detailed Description

Class LSET is a set of 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 186 of file layers_id_colors_and_visibility.h.

Constructor & Destructor Documentation

LSET::LSET ( )
inline

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

Definition at line 204 of file layers_id_colors_and_visibility.h.

Referenced by AllLayersMask(), and AllNonCuMask().

204  :
205  BASE_SET() // all bits are set to zero in BASE_SET()
206  {
207  }
std::bitset< LAYER_ID_COUNT > BASE_SET
LSET::LSET ( const BASE_SET aOther)
inline

Definition at line 209 of file layers_id_colors_and_visibility.h.

209  :
210  BASE_SET( aOther )
211  {
212  }
std::bitset< LAYER_ID_COUNT > BASE_SET
LSET::LSET ( LAYER_ID  aLayer)
inline

Constructor LSET( LAYER_ID ) takes a 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 229 of file layers_id_colors_and_visibility.h.

229  : // LAYER_ID deliberately exludes int and relatives
230  BASE_SET()
231  {
232  set( aLayer );
233  }
std::bitset< LAYER_ID_COUNT > BASE_SET
LSET::LSET ( const LAYER_ID aArray,
unsigned  aCount 
)

Constructor LSET( const 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< LAYER_ID_COUNT > BASE_SET
LSET::LSET ( unsigned  aIdCount,
int  aFirst,
  ... 
)

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

Typically only used in static construction.

Parameters
aIdCountis the number of LAYER_IDs which follow.
aFirstis the first included in aIdCount and must always be present, and can be followed by any number of additional 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 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( 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  LAYER_ID id = (LAYER_ID) va_arg( ap, int );
60 
61  // printf( "%s: id:%d LAYER_ID_COUNT:%d\n", __func__, id, LAYER_ID_COUNT );
62 
63  assert( unsigned( id ) < LAYER_ID_COUNT );
64 
65  set( id );
66  }
67 
68  va_end( ap );
69  }
70 }
std::bitset< LAYER_ID_COUNT > BASE_SET
LAYER_ID
Enum LAYER_ID is the set of PCB layers.
LSET::LSET ( unsigned long  __val)
inlineprivate

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

Definition at line 419 of file layers_id_colors_and_visibility.h.

420  {
421  // not usable, it's private.
422  }

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

References BackBoardTechMask(), and FrontBoardTechMask().

Referenced by BRDITEMS_PLOTTER::PlotPad().

716 {
717  static const LSET saved = BackBoardTechMask() | FrontBoardTechMask();
718  return saved;
719 }
static LSET FrontBoardTechMask()
Function FrontBoardTechMask returns a mask holding technical layers used in a board fabrication (no C...
Definition: lset.cpp:701
Class LSET is a set of LAYER_IDs.
static LSET BackBoardTechMask()
Function BackBoardTechMask returns a mask holding technical layers used in a board fabrication (no CU...
Definition: lset.cpp:688
LSET LSET::AllCuMask ( int  aCuLayerCount = MAX_CU_LAYERS)
static

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

Definition at line 638 of file lset.cpp.

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

Referenced by RN_NET::AddItem(), PCAD2KICAD::PCB_PAD::AddToModule(), AllNonCuMask(), DIALOG_PLOT::applyPlotSettings(), Autoroute_One_Track(), PCB_BASE_FRAME::build_ratsnest_module(), NETINFO_LIST::buildListOfNets(), TRACKS_CLEANER::clean_vias(), compute_layer_Zs(), compute_pad_access_code(), CINFO3D_VISU::createLayers(), CreateShapesSection(), 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(), EXCELLON_WRITER::GenDrillReportFile(), VIA::GetLayerSet(), BOARD::GetPad(), MODULE::GetUniquePadCount(), KIGFX::PCB_RENDER_SETTINGS::ImportLegacyColors(), PCB_PARSER::init(), DIALOG_KEEPOUT_AREA_PROPERTIES::initDialog(), DIALOG_COPPER_ZONE::initDialog(), DSN::isRoundKeepout(), LEGACY_PLUGIN::leg_mask2new(), EAGLE_PLUGIN::loadPlain(), DSN::SPECCTRA_DB::makeIMAGE(), DSN::SPECCTRA_DB::makePADSTACK(), DIALOG_LAYERS_SETUP::OnOkButtonClick(), 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(), DIALOG_PAD_PROPERTIES::setPadLayersList(), DIALOG_LAYERS_SETUP::showLayerTypes(), D_PAD::StandardMask(), PNS_KICAD_IFACE::syncPad(), DIALOG_LAYERS_SETUP::testLayerNames(), DIALOG_PAD_PROPERTIES::transferDataToPad(), DialogEditModuleText::TransferDataToWindow(), DIALOG_GRAPHIC_ITEM_PROPERTIES::TransferDataToWindow(), and D_PAD::UnplatedHoleMask().

639 {
640  // retain all in static as the full set, which is a common case.
641  static const LSET all = InternalCuMask().set( F_Cu ).set( B_Cu );
642 
643  if( aCuLayerCount == MAX_CU_LAYERS )
644  return all;
645 
646  // subtract out some Cu layers not wanted in the mask.
647  LSET ret = all;
648  int clear_count = MAX_CU_LAYERS - aCuLayerCount;
649 
650  clear_count = Clamp( 0, clear_count, MAX_CU_LAYERS - 2 );
651 
652  for( LAYER_NUM elem=In30_Cu; clear_count; --elem, --clear_count )
653  {
654  ret.set( elem, false );
655  }
656 
657  return ret;
658 }
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 LAYER_IDs.
static LSET InternalCuMask()
Function InternalCuMask() returns a complete set of internal copper layers, which is all Cu layers ex...
Definition: lset.cpp:598
int LAYER_NUM
Type LAYER_NUM can be replaced with int and removed.
LSET LSET::AllLayersMask ( )
static

Definition at line 675 of file lset.cpp.

References LSET().

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

676 {
677  static const LSET saved = LSET().set();
678  return saved;
679 }
Class LSET is a set of 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 661 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(), PCB_EDIT_FRAME::Process_Special_Functions(), and SWAP_LAYERS_DIALOG::Sel_Layer().

662 {
663  static const LSET saved = LSET().set() & ~AllCuMask();
664  return saved;
665 }
static LSET AllCuMask(int aCuLayerCount=MAX_CU_LAYERS)
Function AllCuMask returns a mask holding the requested number of Cu LAYER_IDs.
Definition: lset.cpp:638
Class LSET is a set of 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 708 of file lset.cpp.

References BackTechMask(), and FrontTechMask().

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

709 {
710  static const LSET saved = BackTechMask() | FrontTechMask();
711  return saved;
712 }
static LSET BackTechMask()
Function BackTechMask returns a mask holding all technical layers (no CU layer) on back side...
Definition: lset.cpp:682
static LSET FrontTechMask()
Function FrontTechMask returns a mask holding all technical layers (no CU layer) on front side...
Definition: lset.cpp:694
Class LSET is a set of 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 688 of file lset.cpp.

References B_Adhes, B_Mask, B_Paste, and B_SilkS.

Referenced by AllBoardTechMask().

689 {
690  static const LSET saved( 4, B_SilkS, B_Mask, B_Adhes, B_Paste );
691  return saved;
692 }
Class LSET is a set of 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 744 of file lset.cpp.

References B_Cu, and BackTechMask().

Referenced by D_PAD::Draw().

745 {
746  static const LSET saved = BackTechMask().set( B_Cu );
747  return saved;
748 }
static LSET BackTechMask()
Function BackTechMask returns a mask holding all technical layers (no CU layer) on back side...
Definition: lset.cpp:682
Class LSET is a set of LAYER_IDs.
LSET LSET::BackTechMask ( )
static

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

Definition at line 682 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 146 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_LAYER_WIDGET::ReFill().

147 {
148  // desired sequence
149  static const LAYER_ID sequence[] = {
150  F_Cu,
151  In1_Cu,
152  In2_Cu,
153  In3_Cu,
154  In4_Cu,
155  In5_Cu,
156  In6_Cu,
157  In7_Cu,
158  In8_Cu,
159  In9_Cu,
160  In10_Cu,
161  In11_Cu,
162  In12_Cu,
163  In13_Cu,
164  In14_Cu,
165  In15_Cu,
166  In16_Cu,
167  In17_Cu,
168  In18_Cu,
169  In19_Cu,
170  In20_Cu,
171  In21_Cu,
172  In22_Cu,
173  In23_Cu,
174  In24_Cu,
175  In25_Cu,
176  In26_Cu,
177  In27_Cu,
178  In28_Cu,
179  In29_Cu,
180  In30_Cu,
181  B_Cu, // 31
182  };
183 
184  return Seq( sequence, DIM( sequence ) );
185 }
#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 LAYER_ID order.
Definition: lset.cpp:370
LAYER_ID
Enum LAYER_ID is the set of PCB layers.
LSET LSET::ExternalCuMask ( )
static

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

Definition at line 668 of file lset.cpp.

References B_Cu, and F_Cu.

Referenced by BRDITEMS_PLOTTER::PlotPad().

669 {
670  static const LSET saved( 2, F_Cu, B_Cu );
671  return saved;
672 }
Class LSET is a set of LAYER_IDs.
LAYER_ID LSET::ExtractLayer ( ) const

Find the first set LAYER_ID.

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

Definition at line 577 of file lset.cpp.

References UNDEFINED_LAYER, and UNSELECTED_LAYER.

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

578 {
579  unsigned set_count = count();
580 
581  if( !set_count )
582  return UNSELECTED_LAYER;
583  else if( set_count > 1 )
584  return UNDEFINED_LAYER;
585 
586  for( unsigned i=0; i < size(); ++i )
587  {
588  if( test( i ) )
589  return LAYER_ID( i );
590  }
591 
592  wxASSERT( 0 ); // set_count was verified as 1 above, what did you break?
593 
594  return UNDEFINED_LAYER;
595 }
LAYER_ID
Enum LAYER_ID is the set of PCB layers.
std::string LSET::FmtBin ( ) const

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

Definition at line 228 of file lset.cpp.

References bit.

Referenced by ViaSort().

229 {
230  std::string ret;
231 
232  int bit_count = size();
233 
234  for( int bit=0; bit<bit_count; ++bit )
235  {
236  if( bit )
237  {
238  if( !( bit % 8 ) )
239  ret += '|';
240  else if( !( bit % 4 ) )
241  ret += '_';
242  }
243 
244  ret += (*this)[bit] ? '1' : '0';
245  }
246 
247  // reverse of string
248  return std::string( ret.rbegin(), ret.rend() );
249 }
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 252 of file lset.cpp.

References DIM.

Referenced by fmt_mask().

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

References F_Adhes, F_Mask, F_Paste, and F_SilkS.

Referenced by AllBoardTechMask().

702 {
703  static const LSET saved( 4, F_SilkS, F_Mask, F_Adhes, F_Paste );
704  return saved;
705 }
Class LSET is a set of 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 737 of file lset.cpp.

References F_Cu, and FrontTechMask().

Referenced by D_PAD::Draw().

738 {
739  static const LSET saved = FrontTechMask().set( F_Cu );
740  return saved;
741 }
static LSET FrontTechMask()
Function FrontTechMask returns a mask holding all technical layers (no CU layer) on front side...
Definition: lset.cpp:694
Class LSET is a set of LAYER_IDs.
LSET LSET::FrontTechMask ( )
static

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

Definition at line 694 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 598 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(), FlipLayerMask(), LayerMaskDescribe(), DIALOG_PAD_PROPERTIES::padValuesOK(), DIALOG_LAYERS_SETUP::setCopperLayerCheckBoxes(), and DIALOG_MODEDIT_FP_BODY_ITEM_PROPERTIES::TransferDataToWindow().

599 {
600  static const LAYER_ID cu_internals[] = {
601  In1_Cu,
602  In2_Cu,
603  In3_Cu,
604  In4_Cu,
605  In5_Cu,
606  In6_Cu,
607  In7_Cu,
608  In8_Cu,
609  In9_Cu,
610  In10_Cu,
611  In11_Cu,
612  In12_Cu,
613  In13_Cu,
614  In14_Cu,
615  In15_Cu,
616  In16_Cu,
617  In17_Cu,
618  In18_Cu,
619  In19_Cu,
620  In20_Cu,
621  In21_Cu,
622  In22_Cu,
623  In23_Cu,
624  In24_Cu,
625  In25_Cu,
626  In26_Cu,
627  In27_Cu,
628  In28_Cu,
629  In29_Cu,
630  In30_Cu,
631  };
632 
633  static const LSET saved( cu_internals, DIM( cu_internals ) );
634  return saved;
635 }
#define DIM(x)
of elements in an array
Definition: macros.h:98
Class LSET is a set of LAYER_IDs.
LAYER_ID
Enum LAYER_ID is the set of PCB layers.
const wxChar * LSET::Name ( 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(), PCB_EDIT_FRAME::GetConfigurationSettings(), BOARD::GetStandardLayerName(), PCB_PARSER::init(), and BOARD_PRINTOUT_CONTROLLER::OnPrintPage().

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

References bit.

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

Definition at line 336 of file lset.cpp.

Referenced by CINFO3D_VISU::createLayers(), CreatePadsShapesSection(), DIALOG_SVG_PRINT::ExportSVGFile(), EXCELLON_WRITER::GenDrillReportFile(), DIALOG_NON_COPPER_ZONES_EDITOR::OnOkClick(), PlotLayerOutlines(), and Technicals().

337 {
338  LSEQ ret;
339 
340 #if defined(DEBUG) && 0
341  LSET dup_detector;
342 
343  for( unsigned i=0; i<aCount; ++i )
344  {
345  LAYER_ID id = aWishListSequence[i];
346 
347  if( test( id ) )
348  {
349  wxASSERT_MSG( !dup_detector[id], wxT( "Duplicate in aWishListSequence" ) );
350  dup_detector[id] = true;
351 
352  ret.push_back( id );
353  }
354  }
355 #else
356 
357  for( unsigned i=0; i<aCount; ++i )
358  {
359  LAYER_ID id = aWishListSequence[i];
360 
361  if( test( id ) )
362  ret.push_back( id );
363  }
364 #endif
365 
366  return ret;
367 }
Class LSET is a set of LAYER_IDs.
Class LSEQ is a sequence (and therefore also a set) of LAYER_IDs.
LAYER_ID
Enum LAYER_ID is the set of PCB layers.
LSEQ LSET::Seq ( ) const

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

Each LSEQ element will be in the same sequence as in 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 370 of file lset.cpp.

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

371 {
372  LSEQ ret;
373 
374  for( unsigned i=0; i<size(); ++i )
375  {
376  if( test(i) )
377  ret.push_back( LAYER_ID( i ) );
378  }
379 
380  return ret;
381 }
Class LSEQ is a sequence (and therefore also a set) of LAYER_IDs.
LAYER_ID
Enum LAYER_ID is the set of PCB layers.
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 384 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().

385 {
386  // bottom-to-top stack-up layers
387  static const LAYER_ID sequence[] = {
388  B_Fab,
389  B_CrtYd,
390  B_Adhes,
391  B_SilkS,
392  B_Paste,
393  B_Mask,
394  B_Cu,
395  In30_Cu,
396  In29_Cu,
397  In28_Cu,
398  In27_Cu,
399  In26_Cu,
400  In25_Cu,
401  In24_Cu,
402  In23_Cu,
403  In22_Cu,
404  In21_Cu,
405  In20_Cu,
406  In19_Cu,
407  In18_Cu,
408  In17_Cu,
409  In16_Cu,
410  In15_Cu,
411  In14_Cu,
412  In13_Cu,
413  In12_Cu,
414  In11_Cu,
415  In10_Cu,
416  In9_Cu,
417  In8_Cu,
418  In7_Cu,
419  In6_Cu,
420  In5_Cu,
421  In4_Cu,
422  In3_Cu,
423  In2_Cu,
424  In1_Cu,
425  F_Cu,
426  F_Mask,
427  F_Paste,
428  F_SilkS,
429  F_Adhes,
430  F_CrtYd,
431  F_Fab,
432  Dwgs_User,
433  Cmts_User,
434  Eco1_User,
435  Eco2_User,
436  Margin,
437  Edge_Cuts,
438  };
439 
440  return Seq( sequence, DIM( sequence ) );
441 }
#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 LAYER_ID order.
Definition: lset.cpp:370
LAYER_ID
Enum LAYER_ID is the set of PCB layers.
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 188 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().

189 {
190  // desired sequence
191  static const LAYER_ID sequence[] = {
192  B_Adhes,
193  F_Adhes,
194  B_Paste,
195  F_Paste,
196  B_SilkS,
197  F_SilkS,
198  B_Mask,
199  F_Mask,
200  B_CrtYd,
201  F_CrtYd,
202  B_Fab,
203  F_Fab,
204  };
205 
206  LSET subset = ~aSetToOmit & *this;
207 
208  return subset.Seq( sequence, DIM( sequence ) );
209 }
#define DIM(x)
of elements in an array
Definition: macros.h:98
LSEQ Seq(const LAYER_ID *aWishListSequence, unsigned aCount) const
Function Seq returns an LSEQ from the union of this LSET and a desired sequence.
Definition: lset.cpp:336
Class LSET is a set of LAYER_IDs.
LAYER_ID
Enum LAYER_ID is the set of PCB layers.
LSEQ LSET::UIOrder ( ) const

Definition at line 751 of file lset.cpp.

References DIM, 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().

752 {
753  LAYER_ID order[LAYER_ID_COUNT];
754 
755  // Assmuming that the LAYER_ID order is according to preferred UI order, as of
756  // today this is true. When that becomes not true, its easy to change the order
757  // in here to compensate.
758 
759  for( unsigned i=0; i<DIM(order); ++i )
760  order[i] = LAYER_ID( i );
761 
762  return Seq( order, DIM( order ) );
763 }
#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 LAYER_ID order.
Definition: lset.cpp:370
LAYER_ID
Enum LAYER_ID is the set of PCB layers.
LSET LSET::UserMask ( )
static

Definition at line 722 of file lset.cpp.

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

723 {
724  static const LSET saved( 6,
725  Dwgs_User,
726  Cmts_User,
727  Eco1_User,
728  Eco2_User,
729  Edge_Cuts,
730  Margin
731  );
732 
733  return saved;
734 }
Class LSET is a set of LAYER_IDs.
LSEQ LSET::Users ( ) const

*_User layers.

Definition at line 212 of file lset.cpp.

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

213 {
214  // desired
215  static const LAYER_ID sequence[] = {
216  Dwgs_User,
217  Cmts_User,
218  Eco1_User,
219  Eco2_User,
220  Edge_Cuts,
221  Margin,
222  };
223 
224  return Seq( sequence, DIM( sequence ) );
225 }
#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 LAYER_ID order.
Definition: lset.cpp:370
LAYER_ID
Enum LAYER_ID is the set of PCB layers.

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