KiCad PCB EDA Suite
BOARD_DESIGN_SETTINGS Class Reference

Container for design settings for a BOARD object. More...

#include <board_design_settings.h>

Inheritance diagram for BOARD_DESIGN_SETTINGS:
NESTED_SETTINGS JSON_SETTINGS

Public Member Functions

 BOARD_DESIGN_SETTINGS (JSON_SETTINGS *aParent, const std::string &aPath)
 
virtual ~BOARD_DESIGN_SETTINGS ()
 
 BOARD_DESIGN_SETTINGS (const BOARD_DESIGN_SETTINGS &aOther)
 
BOARD_DESIGN_SETTINGSoperator= (const BOARD_DESIGN_SETTINGS &aOther)
 
bool LoadFromFile (const wxString &aDirectory="") override
 Loads the backing file from disk and then calls Load() More...
 
BOARD_STACKUPGetStackupDescriptor ()
 
const BOARD_STACKUPGetStackupDescriptor () const
 
SEVERITY GetSeverity (int aDRCErrorCode)
 
bool Ignore (int aDRCErrorCode)
 Return true if the DRC error code's severity is SEVERITY_IGNORE. More...
 
NETCLASSESGetNetClasses () const
 
void SetNetClasses (NETCLASSES *aNetClasses)
 
ZONE_SETTINGSGetDefaultZoneSettings ()
 
void SetDefaultZoneSettings (const ZONE_SETTINGS &aSettings)
 
NETCLASSGetDefault () const
 
const wxString & GetCurrentNetClassName () const
 
bool UseNetClassTrack () const
 Return true if netclass values should be used to obtain appropriate track width. More...
 
bool UseNetClassVia () const
 Return true if netclass values should be used to obtain appropriate via size. More...
 
bool UseNetClassDiffPair () const
 Return true if netclass values should be used to obtain appropriate diff pair dimensions. More...
 
int GetBiggestClearanceValue () const
 
int GetSmallestClearanceValue () const
 
int GetCurrentMicroViaSize ()
 
int GetCurrentMicroViaDrill ()
 
unsigned GetTrackWidthIndex () const
 
void SetTrackWidthIndex (unsigned aIndex)
 Set the current track width list index to aIndex. More...
 
int GetCurrentTrackWidth () const
 
void SetCustomTrackWidth (int aWidth)
 Sets custom width for track (i.e. More...
 
int GetCustomTrackWidth () const
 
unsigned GetViaSizeIndex () const
 
void SetViaSizeIndex (unsigned aIndex)
 Set the current via size list index to aIndex. More...
 
int GetCurrentViaSize () const
 
void SetCustomViaSize (int aSize)
 Set custom size for via diameter (i.e. More...
 
int GetCustomViaSize () const
 
int GetCurrentViaDrill () const
 
void SetCustomViaDrill (int aDrill)
 Sets custom size for via drill (i.e. More...
 
int GetCustomViaDrill () const
 
void UseCustomTrackViaSize (bool aEnabled)
 Enables/disables custom track/via size settings. More...
 
bool UseCustomTrackViaSize () const
 
unsigned GetDiffPairIndex () const
 
void SetDiffPairIndex (unsigned aIndex)
 
void SetCustomDiffPairWidth (int aWidth)
 Sets custom track width for differential pairs (i.e. More...
 
int GetCustomDiffPairWidth ()
 
void SetCustomDiffPairGap (int aGap)
 Sets custom gap for differential pairs (i.e. More...
 
int GetCustomDiffPairGap ()
 Function GetCustomDiffPairGap. More...
 
void SetCustomDiffPairViaGap (int aGap)
 Sets custom via gap for differential pairs (i.e. More...
 
int GetCustomDiffPairViaGap ()
 
void UseCustomDiffPairDimensions (bool aEnabled)
 Enables/disables custom differential pair dimensions. More...
 
bool UseCustomDiffPairDimensions () const
 
int GetCurrentDiffPairWidth () const
 
int GetCurrentDiffPairGap () const
 
int GetCurrentDiffPairViaGap () const
 
void SetMinHoleSeparation (int aDistance)
 
void SetCopperEdgeClearance (int aDistance)
 
void SetSilkClearance (int aDistance)
 Set the minimum distance between silk items to aValue. More...
 
LSET GetEnabledLayers () const
 Return a bit-mask of all the layers that are enabled. More...
 
void SetEnabledLayers (LSET aMask)
 Change the bit-mask of enabled layers to aMask. More...
 
bool IsLayerEnabled (PCB_LAYER_ID aLayerId) const
 Test whether a given layer aLayerId is enabled. More...
 
int GetCopperLayerCount () const
 
void SetCopperLayerCount (int aNewLayerCount)
 Set the copper layer count to aNewLayerCount. More...
 
int GetBoardThickness () const
 
void SetBoardThickness (int aThickness)
 
int GetDRCEpsilon () const
 
int GetHolePlatingThickness () const
 Pad & via drills are finish size. More...
 
int GetLineThickness (PCB_LAYER_ID aLayer) const
 Return the default graphic segment thickness from the layer class for the given layer. More...
 
wxSize GetTextSize (PCB_LAYER_ID aLayer) const
 Return the default text size from the layer class for the given layer. More...
 
int GetTextThickness (PCB_LAYER_ID aLayer) const
 Return the default text thickness from the layer class for the given layer. More...
 
bool GetTextItalic (PCB_LAYER_ID aLayer) const
 
bool GetTextUpright (PCB_LAYER_ID aLayer) const
 
int GetLayerClass (PCB_LAYER_ID aLayer) const
 
bool SaveToFile (const wxString &aDirectory="", bool aForce=false) override
 Calls Store() and then saves the JSON document contents into the parent JSON_SETTINGS. More...
 
void SetParent (JSON_SETTINGS *aParent, bool aLoadFromFile=true)
 
JSON_SETTINGSGetParent ()
 
wxString GetFilename () const
 
wxString GetFullFilename () const
 
void SetFilename (const wxString &aFilename)
 
SETTINGS_LOC GetLocation () const
 
void SetLegacyFilename (const wxString &aFilename)
 
bool IsReadOnly () const
 
void SetReadOnly (bool aReadOnly)
 
virtual void Load ()
 Updates the parameters of this object based on the current JSON document contents. More...
 
virtual bool Store ()
 Stores the current parameters into the JSON document represented by this object Note: this doesn't do any writing to disk; that's handled by SETTINGS_MANAGER. More...
 
void ResetToDefaults ()
 Resets all parameters to default values. More...
 
bool IsDefault (const std::string &aParamName)
 Checks if the current state of a parameter matches its default value. More...
 
OPT< nlohmann::jsonGetJson (const std::string &aPath) const
 Fetches a JSON object that is a subset of this JSON_SETTINGS object, using a path of the form "key1.key2.key3" to refer to nested objects. More...
 
template<typename ValueType >
OPT< ValueType > Get (const std::string &aPath) const
 Fetches a value from within the JSON document. More...
 
template<>
OPT< wxString > Get (const std::string &aPath) const
 
template<typename ValueType >
void Set (const std::string &aPath, ValueType aVal)
 Stores a value into the JSON document Will throw an exception if ValueType isn't something that the library can handle. More...
 
template<>
void Set (const std::string &aPath, wxString aVal)
 
template<>
void Set (const std::string &aPath, wxString aVal)
 
bool Migrate ()
 Migrates the schema of this settings from the version in the file to the latest version. More...
 
virtual bool MigrateFromLegacy (wxConfigBase *aLegacyConfig)
 Migrates from wxConfig to JSON-based configuration. More...
 
void AddNestedSettings (NESTED_SETTINGS *aSettings)
 Transfers ownership of a given NESTED_SETTINGS to this object. More...
 
void ReleaseNestedSettings (NESTED_SETTINGS *aSettings)
 Saves and frees a nested settings object, if it exists within this one. More...
 
void SetManager (SETTINGS_MANAGER *aManager)
 

Static Public Member Functions

static nlohmann::json::json_pointer PointerFromString (std::string aPath)
 Builds a JSON pointer based on a given string. More...
 
static bool SetIfPresent (const nlohmann::json &aObj, const std::string &aPath, wxString &aTarget)
 Sets the given string if the given key/path is present. More...
 
static bool SetIfPresent (const nlohmann::json &aObj, const std::string &aPath, bool &aTarget)
 Sets the given bool if the given key/path is present. More...
 
static bool SetIfPresent (const nlohmann::json &aObj, const std::string &aPath, int &aTarget)
 Sets the given int if the given key/path is present. More...
 
static bool SetIfPresent (const nlohmann::json &aObj, const std::string &aPath, unsigned int &aTarget)
 Sets the given unsigned int if the given key/path is present. More...
 

Public Attributes

std::vector< int > m_TrackWidthList
 
std::vector< VIA_DIMENSIONm_ViasDimensionsList
 
std::vector< DIFF_PAIR_DIMENSIONm_DiffPairDimensionsList
 
bool m_MicroViasAllowed
 true to allow micro vias More...
 
bool m_BlindBuriedViaAllowed
 true to allow blind/buried vias More...
 
VIATYPE m_CurrentViaType
 (VIA_BLIND_BURIED, VIA_THROUGH, VIA_MICROVIA) More...
 
bool m_UseConnectedTrackWidth
 
int m_MinClearance
 
int m_TrackMinWidth
 
int m_ViasMinAnnulus
 
int m_ViasMinSize
 
int m_MinThroughDrill
 
int m_MicroViasMinSize
 
int m_MicroViasMinDrill
 
int m_CopperEdgeClearance
 
int m_HoleClearance
 
int m_HoleToHoleMin
 
int m_SilkClearance
 
std::shared_ptr< DRC_ENGINEm_DRCEngine
 
std::map< int, SEVERITYm_DRCSeverities
 
std::set< wxString > m_DrcExclusions
 
int m_ZoneFillVersion
 Option to select different fill algorithms. More...
 
bool m_ZoneKeepExternalFillets
 
int m_MaxError
 
int m_SolderMaskMargin
 
int m_SolderMaskMinWidth
 
int m_SolderPasteMargin
 
double m_SolderPasteMarginRatio
 
std::vector< TEXT_ITEM_INFOm_DefaultFPTextItems
 
int m_LineThickness [LAYER_CLASS_COUNT]
 
wxSize m_TextSize [LAYER_CLASS_COUNT]
 
int m_TextThickness [LAYER_CLASS_COUNT]
 
bool m_TextItalic [LAYER_CLASS_COUNT]
 
bool m_TextUpright [LAYER_CLASS_COUNT]
 
DIM_UNITS_MODE m_DimensionUnitsMode
 
int m_DimensionPrecision
 Number of digits after the decimal. More...
 
DIM_UNITS_FORMAT m_DimensionUnitsFormat
 
bool m_DimensionSuppressZeroes
 
DIM_TEXT_POSITION m_DimensionTextPosition
 
bool m_DimensionKeepTextAligned
 
int m_DimensionArrowLength
 
int m_DimensionExtensionOffset
 
wxPoint m_AuxOrigin
 origin for plot exports More...
 
wxPoint m_GridOrigin
 origin for grid offsets More...
 
PAD m_Pad_Master
 
bool m_HasStackup
 

Protected Member Functions

void registerMigration (int aOldSchemaVersion, int aNewSchemaVersion, std::function< bool(void)> aMigrator)
 Registers a migration from one schema version to another. More...
 
template<typename ValueType >
bool fromLegacy (wxConfigBase *aConfig, const std::string &aKey, const std::string &aDest)
 Translates a legacy wxConfig value to a given JSON pointer value. More...
 
bool fromLegacyString (wxConfigBase *aConfig, const std::string &aKey, const std::string &aDest)
 Translates a legacy wxConfig string value to a given JSON pointer value. More...
 
bool fromLegacyColor (wxConfigBase *aConfig, const std::string &aKey, const std::string &aDest)
 Translates a legacy COLOR4D stored in a wxConfig string to a given JSON pointer value. More...
 
virtual wxString getFileExt () const
 
virtual wxString getLegacyFileExt () const
 

Protected Attributes

JSON_SETTINGSm_parent
 A pointer to the parent object to load and store from. More...
 
std::string m_path
 The path (in pointer format) of where to store this document in the parent. More...
 
wxString m_filename
 The filename (not including path) of this settings file (inicode) More...
 
wxString m_legacy_filename
 The filename of the wxConfig legacy file (if different from m_filename) More...
 
SETTINGS_LOC m_location
 The location of this settings file (. More...
 
std::vector< PARAM_BASE * > m_params
 The list of parameters (owned by this object) More...
 
std::vector< NESTED_SETTINGS * > m_nested_settings
 Nested settings files that live inside this one, if any. More...
 
bool m_createIfMissing
 Whether or not the backing store file should be created it if doesn't exist. More...
 
bool m_createIfDefault
 Whether or not the backing store file should be created if all parameters are still at their default values. More...
 
bool m_writeFile
 Whether or not the backing store file should be written. More...
 
bool m_deleteLegacyAfterMigration
 Whether or not to delete legacy file after migration. More...
 
bool m_resetParamsIfMissing
 Whether or not to set parameters to their default value if missing from JSON on Load() More...
 
int m_schemaVersion
 Version of this settings schema. More...
 
SETTINGS_MANAGERm_manager
 A pointer to the settings manager managing this file (may be null) More...
 
std::vector< nlohmann::json::json_pointer > m_preserved_paths
 A list of JSON pointers that are preserved during a read-update-write to disk. More...
 
std::map< int, std::pair< int, std::function< bool()> > > m_migrators
 A map of starting schema version to a pair of <ending version, migrator function> More...
 

Private Member Functions

void initFromOther (const BOARD_DESIGN_SETTINGS &aOther)
 
bool migrateSchema0to1 ()
 

Private Attributes

unsigned m_trackWidthIndex
 
unsigned m_viaSizeIndex
 
unsigned m_diffPairIndex
 
bool m_useCustomTrackVia
 
int m_customTrackWidth
 
VIA_DIMENSION m_customViaSize
 
bool m_useCustomDiffPair
 
DIFF_PAIR_DIMENSION m_customDiffPair
 
int m_copperLayerCount
 Number of copper layers for this design. More...
 
LSET m_enabledLayers
 Bit-mask for layer enabling. More...
 
int m_boardThickness
 Board thickness for 3D viewer. More...
 
wxString m_currentNetClassName
 Current net class name used to display netclass info. More...
 
BOARD_STACKUP m_stackup
 the description of layers stackup, for board fabrication only physical layers are in layers stackup. More...
 
NETCLASSES m_internalNetClasses
 Net classes that are loaded from the board file before these were stored in the project. More...
 
NETCLASSESm_netClasses
 This will point to m_internalNetClasses until it is repointed to the project after load. More...
 
ZONE_SETTINGS m_defaultZoneSettings
 The default settings that will be used for new zones. More...
 

Detailed Description

Container for design settings for a BOARD object.

Definition at line 218 of file board_design_settings.h.

Constructor & Destructor Documentation

◆ BOARD_DESIGN_SETTINGS() [1/2]

BOARD_DESIGN_SETTINGS::BOARD_DESIGN_SETTINGS ( JSON_SETTINGS aParent,
const std::string &  aPath 
)

Definition at line 38 of file board_design_settings.cpp.

38  :
39  NESTED_SETTINGS( "board_design_settings", bdsSchemaVersion, aParent, aPath ),
41 {
42  // We want to leave alone parameters that aren't found in the project JSON as they may be
43  // initialized by the board file parser before NESTED_SETTINGS::LoadFromFile is called.
44  m_resetParamsIfMissing = false;
45 
46  // Create a default NETCLASS list so that things don't break horribly if there's no project
47  // loaded. This also is used during file load for legacy boards that have netclasses stored
48  // in the file. After load, this information will be moved to the project and the pointer
49  // updated.
51 
52  m_HasStackup = false; // no stackup defined by default
53 
54  LSET all_set = LSET().set();
55  m_enabledLayers = all_set; // All layers enabled at first.
56  // SetCopperLayerCount() will adjust this.
57 
58  SetCopperLayerCount( 2 ); // Default design is a double sided board
60 
61  // if true, when creating a new track starting on an existing track, use this track width
63 
65  m_MicroViasAllowed = false;
66 
67  // First is always the reference designator
68  m_DefaultFPTextItems.emplace_back( wxT( "REF**" ), true, F_SilkS );
69  // Second is always the value
70  m_DefaultFPTextItems.emplace_back( wxT( "" ), true, F_Fab );
71  // Any following ones are freebies
72  m_DefaultFPTextItems.emplace_back( wxT( "${REF}" ), true, F_Fab );
73 
78  m_TextItalic[ LAYER_CLASS_SILK ] = false;
80 
87 
88  // Edges & Courtyards; text properties aren't used but better to have them holding
89  // reasonable values than not.
96 
103 
108  m_TextItalic[ LAYER_CLASS_FAB ] = false;
109  m_TextUpright[ LAYER_CLASS_FAB ] = false;
110 
115  m_TextItalic[ LAYER_CLASS_OTHERS ] = false;
117 
126 
127  m_useCustomTrackVia = false;
131 
132  m_useCustomDiffPair = false;
136 
148 
149  for( int errorCode = DRCE_FIRST; errorCode <= DRCE_LAST; ++errorCode )
150  m_DRCSeverities[ errorCode ] = RPT_SEVERITY_ERROR;
151 
155 
158 
163 
164  m_MaxError = ARC_HIGH_DEF;
165  m_ZoneFillVersion = 6; // Use new algo by default to fill zones
166  m_ZoneKeepExternalFillets = false; // Use new algo by default. Legacy boards might
167  // want to set it to true for old algo....
168 
169  // Global mask margins:
172 
173  // Solder paste margin absolute value
175  // Solder paste margin as a ratio of pad size
176  // The final margin is the sum of these 2 values
177  // Usually < 0 because the mask is smaller than pad
179 
180  // Layer thickness for 3D viewer
182 
183  m_viaSizeIndex = 0;
184  m_trackWidthIndex = 0;
185  m_diffPairIndex = 0;
186 
187  // Parameters stored in JSON in the project file
188 
189  // NOTE: Previously, BOARD_DESIGN_SETTINGS stored the basic board layer information (layer
190  // names and enable/disable state) in the project file even though this information is also
191  // stored in the board file. This was implemented for importing these settings from another
192  // project. Going forward, the import feature will just import from other board files (since
193  // we could have multi-board projects in the future anyway) so this functionality is dropped.
194 
195  m_params.emplace_back( new PARAM<bool>( "rules.allow_microvias", &m_MicroViasAllowed, false ) );
196 
197  m_params.emplace_back( new PARAM<bool>( "rules.allow_blind_buried_vias",
198  &m_BlindBuriedViaAllowed, false ) );
199 
200  m_params.emplace_back( new PARAM_SCALED<int>( "rules.min_clearance", &m_MinClearance,
202  MM_PER_IU ) );
203 
204  m_params.emplace_back( new PARAM_SCALED<int>( "rules.min_track_width", &m_TrackMinWidth,
206  MM_PER_IU ) );
207 
208  m_params.emplace_back( new PARAM_SCALED<int>( "rules.min_via_annular_width", &m_ViasMinAnnulus,
210  MM_PER_IU ) );
211 
212  m_params.emplace_back( new PARAM_SCALED<int>( "rules.min_via_diameter", &m_ViasMinSize,
214  MM_PER_IU ) );
215 
216  m_params.emplace_back( new PARAM_SCALED<int>( "rules.min_through_hole_diameter",
218  Millimeter2iu( 25.0 ), MM_PER_IU ) );
219 
220  m_params.emplace_back( new PARAM_SCALED<int>( "rules.min_microvia_diameter",
222  Millimeter2iu( 10.0 ), MM_PER_IU ) );
223 
224  m_params.emplace_back( new PARAM_SCALED<int>( "rules.min_microvia_drill", &m_MicroViasMinDrill,
226  Millimeter2iu( 10.0 ), MM_PER_IU ) );
227 
228  m_params.emplace_back( new PARAM_SCALED<int>( "rules.min_hole_to_hole", &m_HoleToHoleMin,
230  MM_PER_IU ) );
231 
232  m_params.emplace_back( new PARAM_SCALED<int>( "rules.min_hole_clearance", &m_HoleClearance,
234  MM_PER_IU ) );
235 
236  m_params.emplace_back( new PARAM_SCALED<int>( "rules.min_silk_clearance", &m_SilkClearance,
238  MM_PER_IU ) );
239 
240  // Note: a clearance of -0.01 is a flag indicating we should use the legacy (pre-6.0) method
241  // based on the edge cut thicknesses.
242  m_params.emplace_back( new PARAM_SCALED<int>( "rules.min_copper_edge_clearance",
244  Millimeter2iu( -0.01 ), Millimeter2iu( 25.0 ), MM_PER_IU ) );
245 
246  m_params.emplace_back( new PARAM_LAMBDA<nlohmann::json>( "rule_severities",
247  [&]() -> nlohmann::json
248  {
249  nlohmann::json ret = {};
250 
251  for( const RC_ITEM& item : DRC_ITEM::GetItemsWithSeverities() )
252  {
253  wxString name = item.GetSettingsKey();
254  int code = item.GetErrorCode();
255 
256  if( name.IsEmpty() || m_DRCSeverities.count( code ) == 0 )
257  continue;
258 
259  ret[std::string( name.ToUTF8() )] = SeverityToString( m_DRCSeverities[code] );
260  }
261 
262  return ret;
263  },
264  [&]( const nlohmann::json& aJson )
265  {
266  if( !aJson.is_object() )
267  return;
268 
269  for( const RC_ITEM& item : DRC_ITEM::GetItemsWithSeverities() )
270  {
271  wxString name = item.GetSettingsKey();
272  std::string key( name.ToUTF8() );
273 
274  if( aJson.contains( key ) )
275  m_DRCSeverities[item.GetErrorCode()] = SeverityFromString( aJson[key] );
276  }
277  }, {} ) );
278 
279  m_params.emplace_back( new PARAM_LAMBDA<nlohmann::json>( "drc_exclusions",
280  [&]() -> nlohmann::json
281  {
282  nlohmann::json js = nlohmann::json::array();
283 
284  for( const auto& entry : m_DrcExclusions )
285  js.push_back( entry );
286 
287  return js;
288  },
289  [&]( const nlohmann::json& aObj )
290  {
291  m_DrcExclusions.clear();
292 
293  if( !aObj.is_array() )
294  return;
295 
296  for( const nlohmann::json& entry : aObj )
297  {
298  if( entry.empty() )
299  continue;
300 
301  m_DrcExclusions.insert( entry.get<wxString>() );
302  }
303  },
304  {} ) );
305 
306  m_params.emplace_back( new PARAM_LAMBDA<nlohmann::json>( "track_widths",
307  [&]() -> nlohmann::json
308  {
309  nlohmann::json js = nlohmann::json::array();
310 
311  for( const int& width : m_TrackWidthList )
312  js.push_back( Iu2Millimeter( width ) );
313 
314  return js;
315  },
316  [&]( const nlohmann::json& aJson )
317  {
318  if( !aJson.is_array() )
319  return;
320 
321  m_TrackWidthList.clear();
322 
323  for( const nlohmann::json& entry : aJson )
324  {
325  if( entry.empty() )
326  continue;
327 
328  m_TrackWidthList.emplace_back( Millimeter2iu( entry.get<double>() ) );
329  }
330  },
331  {} ) );
332 
333  m_params.emplace_back( new PARAM_LAMBDA<nlohmann::json>( "via_dimensions",
334  [&]() -> nlohmann::json
335  {
336  nlohmann::json js = nlohmann::json::array();
337 
338  for( const auto& via : m_ViasDimensionsList )
339  {
340  nlohmann::json entry = {};
341 
342  entry["diameter"] = Iu2Millimeter( via.m_Diameter );
343  entry["drill"] = Iu2Millimeter( via.m_Drill );
344 
345  js.push_back( entry );
346  }
347 
348  return js;
349  },
350  [&]( const nlohmann::json& aObj )
351  {
352  if( !aObj.is_array() )
353  return;
354 
355  m_ViasDimensionsList.clear();
356 
357  for( const nlohmann::json& entry : aObj )
358  {
359  if( entry.empty() || !entry.is_object() )
360  continue;
361 
362  if( !entry.contains( "diameter" ) || !entry.contains( "drill" ) )
363  continue;
364 
365  int diameter = Millimeter2iu( entry["diameter"].get<double>() );
366  int drill = Millimeter2iu( entry["drill"].get<double>() );
367 
368  m_ViasDimensionsList.emplace_back( VIA_DIMENSION( diameter, drill ) );
369  }
370  },
371  {} ) );
372 
373  m_params.emplace_back( new PARAM_LAMBDA<nlohmann::json>( "diff_pair_dimensions",
374  [&]() -> nlohmann::json
375  {
376  nlohmann::json js = nlohmann::json::array();
377 
378  for( const auto& pair : m_DiffPairDimensionsList )
379  {
380  nlohmann::json entry = {};
381 
382  entry["width"] = Iu2Millimeter( pair.m_Width );
383  entry["gap"] = Iu2Millimeter( pair.m_Gap );
384  entry["via_gap"] = Iu2Millimeter( pair.m_ViaGap );
385 
386  js.push_back( entry );
387  }
388 
389  return js;
390  },
391  [&]( const nlohmann::json& aObj )
392  {
393  if( !aObj.is_array() )
394  return;
395 
396  m_DiffPairDimensionsList.clear();
397 
398  for( const nlohmann::json& entry : aObj )
399  {
400  if( entry.empty() || !entry.is_object() )
401  continue;
402 
403  if( !entry.contains( "width" ) || !entry.contains( "gap" )
404  || !entry.contains( "via_gap" ) )
405  continue;
406 
407  int width = Millimeter2iu( entry["width"].get<double>() );
408  int gap = Millimeter2iu( entry["gap"].get<double>() );
409  int via_gap = Millimeter2iu( entry["via_gap"].get<double>() );
410 
411  m_DiffPairDimensionsList.emplace_back(
412  DIFF_PAIR_DIMENSION( width, gap, via_gap ) );
413  }
414  },
415  {} ) );
416 
417  m_params.emplace_back( new PARAM_SCALED<int>( "defaults.silk_line_width",
419  Millimeter2iu( 0.01 ), Millimeter2iu( 5.0 ), MM_PER_IU ) );
420 
421  m_params.emplace_back( new PARAM_SCALED<int>( "defaults.silk_text_size_v",
423  TEXTS_MIN_SIZE, TEXTS_MAX_SIZE, MM_PER_IU ) );
424 
425  m_params.emplace_back( new PARAM_SCALED<int>( "defaults.silk_text_size_h",
427  TEXTS_MIN_SIZE, TEXTS_MAX_SIZE, MM_PER_IU ) );
428 
429  m_params.emplace_back( new PARAM_SCALED<int>( "defaults.silk_text_thickness",
431  TEXTS_MAX_WIDTH, MM_PER_IU ) );
432 
433  m_params.emplace_back( new PARAM<bool>( "defaults.silk_text_italic",
434  &m_TextItalic[LAYER_CLASS_SILK], false ) );
435 
436  m_params.emplace_back( new PARAM<bool>( "defaults.silk_text_upright",
437  &m_TextUpright[ LAYER_CLASS_SILK ], true ) );
438 
439  m_params.emplace_back( new PARAM_SCALED<int>( "defaults.copper_line_width",
441  Millimeter2iu( 0.01 ), Millimeter2iu( 5.0 ), MM_PER_IU ) );
442 
443  m_params.emplace_back( new PARAM_SCALED<int>( "defaults.copper_text_size_v",
445  TEXTS_MIN_SIZE, TEXTS_MAX_SIZE, MM_PER_IU ) );
446 
447  m_params.emplace_back( new PARAM_SCALED<int>( "defaults.copper_text_size_h",
449  TEXTS_MIN_SIZE, TEXTS_MAX_SIZE, MM_PER_IU ) );
450 
451  m_params.emplace_back( new PARAM_SCALED<int>( "defaults.copper_text_thickness",
453  Millimeter2iu( 0.01 ), Millimeter2iu( 5.0 ), MM_PER_IU ) );
454 
455  m_params.emplace_back( new PARAM<bool>( "defaults.copper_text_italic",
456  &m_TextItalic[LAYER_CLASS_COPPER], false ) );
457 
458  m_params.emplace_back( new PARAM<bool>( "defaults.copper_text_upright",
459  &m_TextUpright[LAYER_CLASS_COPPER], true ) );
460 
461  m_params.emplace_back( new PARAM_SCALED<int>( "defaults.board_outline_line_width",
463  Millimeter2iu( 0.01 ), Millimeter2iu( 5.0 ), MM_PER_IU ) );
464 
465  m_params.emplace_back( new PARAM_SCALED<int>( "defaults.courtyard_line_width",
467  Millimeter2iu( 0.01 ), Millimeter2iu( 5.0 ), MM_PER_IU ) );
468 
469  m_params.emplace_back( new PARAM_SCALED<int>( "defaults.fab_line_width",
471  Millimeter2iu( 0.01 ), Millimeter2iu( 5.0 ), MM_PER_IU ) );
472 
473  m_params.emplace_back( new PARAM_SCALED<int>( "defaults.fab_text_size_v",
475  TEXTS_MIN_SIZE, TEXTS_MAX_SIZE, MM_PER_IU ) );
476 
477  m_params.emplace_back( new PARAM_SCALED<int>( "defaults.fab_text_size_h",
479  TEXTS_MIN_SIZE, TEXTS_MAX_SIZE, MM_PER_IU ) );
480 
481  m_params.emplace_back( new PARAM_SCALED<int>( "defaults.fab_text_thickness",
483  Millimeter2iu( 0.01 ), Millimeter2iu( 5.0 ), MM_PER_IU ) );
484 
485  m_params.emplace_back( new PARAM<bool>( "defaults.fab_text_italic",
486  &m_TextItalic[LAYER_CLASS_FAB], false ) );
487 
488  m_params.emplace_back( new PARAM<bool>( "defaults.fab_text_upright",
489  &m_TextUpright[LAYER_CLASS_FAB], true ) );
490 
491  m_params.emplace_back( new PARAM_SCALED<int>( "defaults.other_line_width",
493  Millimeter2iu( 0.01 ), Millimeter2iu( 5.0 ), MM_PER_IU ) );
494 
495  m_params.emplace_back( new PARAM_SCALED<int>( "defaults.other_text_size_v",
497  TEXTS_MAX_SIZE, MM_PER_IU ) );
498 
499  m_params.emplace_back( new PARAM_SCALED<int>( "defaults.other_text_size_h",
501  TEXTS_MAX_SIZE, MM_PER_IU ) );
502 
503  m_params.emplace_back( new PARAM_SCALED<int>( "defaults.other_text_thickness",
505  Millimeter2iu( 0.01 ), Millimeter2iu( 5.0 ), MM_PER_IU ) );
506 
507  m_params.emplace_back( new PARAM<bool>( "defaults.other_text_italic",
508  &m_TextItalic[LAYER_CLASS_OTHERS], false ) );
509 
510  m_params.emplace_back( new PARAM<bool>( "defaults.other_text_upright",
511  &m_TextUpright[LAYER_CLASS_OTHERS], true ) );
512 
513  m_params.emplace_back( new PARAM_ENUM<DIM_UNITS_MODE>( "defaults.dimension_units",
516 
517  m_params.emplace_back( new PARAM<int>( "defaults.dimension_precision",
518  &m_DimensionPrecision, 4, 0, 5 ) );
519 
520  m_params.emplace_back( new PARAM_ENUM<DIM_UNITS_FORMAT>( "defaults.dimensions.units_format",
523 
524  m_params.emplace_back( new PARAM<bool>( "defaults.dimensions.suppress_zeroes",
525  &m_DimensionSuppressZeroes, false ) );
526 
527  // NOTE: excluding DIM_TEXT_POSITION::MANUAL from the valid range here
528  m_params.emplace_back( new PARAM_ENUM<DIM_TEXT_POSITION>( "defaults.dimensions.text_position",
531 
532  m_params.emplace_back( new PARAM<bool>( "defaults.dimensions.keep_text_aligned",
533  &m_DimensionKeepTextAligned, true ) );
534 
535  m_params.emplace_back( new PARAM<int>( "defaults.dimensions.arrow_length",
537  Mils2iu( DEFAULT_DIMENSION_ARROW_LENGTH ) ) );
538 
539  m_params.emplace_back( new PARAM<int>( "defaults.dimensions.extension_offset",
542 
543  m_params.emplace_back( new PARAM<bool>( "defaults.zones.45_degree_only",
545 
546  m_params.emplace_back( new PARAM_SCALED<int>( "defaults.zones.min_clearance",
548  Millimeter2iu( 0.0 ), Millimeter2iu( 25.0 ), MM_PER_IU ) );
549 
550  m_params.emplace_back( new PARAM_LAMBDA<nlohmann::json>( "defaults.pads",
551  [&]() -> nlohmann::json
552  {
553  nlohmann::json ret =
554  {
555  { "width", Iu2Millimeter( m_Pad_Master.GetSize().x ) },
556  { "height", Iu2Millimeter( m_Pad_Master.GetSize().y ) },
557  { "drill", Iu2Millimeter( m_Pad_Master.GetDrillSize().x ) }
558  };
559 
560  return ret;
561  },
562  [&]( const nlohmann::json& aJson )
563  {
564  if( aJson.contains( "width" ) && aJson.contains( "height" )
565  && aJson.contains( "drill" ) )
566  {
567  wxSize sz;
568  sz.SetWidth( Millimeter2iu( aJson["width"].get<double>() ) );
569  sz.SetHeight( Millimeter2iu( aJson["height"].get<double>() ) );
570 
571  m_Pad_Master.SetSize( sz );
572 
573  int drill = Millimeter2iu( aJson["drill"].get<double>() );
574 
575  m_Pad_Master.SetDrillSize( wxSize( drill, drill ) );
576  }
577  }, {} ) );
578 
579  m_params.emplace_back( new PARAM_SCALED<int>( "rules.max_error", &m_MaxError, ARC_HIGH_DEF,
580  Millimeter2iu( 0.0001 ), Millimeter2iu( 1.0 ), MM_PER_IU ) );
581 
582  // TODO: replace with zones_fill_version parameter and migrate zones_use_no_outline?
583  m_params.emplace_back( new PARAM_LAMBDA<bool>( "zones_use_no_outline",
584  [this]() -> bool
585  {
586  return m_ZoneFillVersion >= 6;
587  },
588  [this]( bool aVal )
589  {
590  m_ZoneFillVersion = aVal ? 6 : 5;
591  },
592  6 ) );
593 
594  m_params.emplace_back( new PARAM<bool>( "zones_allow_external_fillets",
595  &m_ZoneKeepExternalFillets, false ) );
596 
597  registerMigration( 0, 1, std::bind( &BOARD_DESIGN_SETTINGS::migrateSchema0to1, this ) );
598 
599  registerMigration( 1, 2,
600  [&]() -> bool
601  {
602  // Schema 1 to 2: move mask and paste margin settings back to board.
603  // The parameters are removed, so we just have to manually load them here and
604  // they will get saved with the board
605  if( OPT<double> optval = Get<double>( "rules.solder_mask_clearance" ) )
606  m_SolderMaskMargin = static_cast<int>( *optval * IU_PER_MM );
607 
608  if( OPT<double> optval = Get<double>( "rules.solder_mask_min_width" ) )
609  m_SolderMaskMinWidth = static_cast<int>( *optval * IU_PER_MM );
610 
611  if( OPT<double> optval = Get<double>( "rules.solder_paste_clearance" ) )
612  m_SolderPasteMargin = static_cast<int>( *optval * IU_PER_MM );
613 
614  if( OPT<double> optval = Get<double>( "rules.solder_paste_margin_ratio" ) )
615  m_SolderPasteMarginRatio = *optval;
616 
617  try
618  {
619  at( "rules" ).erase( "solder_mask_clearance" );
620  at( "rules" ).erase( "solder_mask_min_width" );
621  at( "rules" ).erase( "solder_paste_clearance" );
622  at( "rules" ).erase( "solder_paste_margin_ratio" );
623  }
624  catch( ... )
625  {}
626 
627  return true;
628  } );
629 }
#define DEFAULT_EDGE_WIDTH
#define DEFAULT_SILK_TEXT_WIDTH
void SetCopperLayerCount(int aNewLayerCount)
Set the copper layer count to aNewLayerCount.
#define DEFAULT_TRACKMINWIDTH
Container to handle a stock of specific vias each with unique diameter and drill sizes in the BOARD c...
int m_ZoneFillVersion
Option to select different fill algorithms.
#define DEFAULT_COURTYARD_WIDTH
std::vector< TEXT_ITEM_INFO > m_DefaultFPTextItems
std::vector< PARAM_BASE * > m_params
The list of parameters (owned by this object)
#define DEFAULT_SOLDERPASTE_RATIO
#define DEFAULT_VIASMINSIZE
#define TEXTS_MAX_WIDTH
Maximum text width in internal units (10 inches)
Definition: pcbnew.h:33
std::vector< int > m_TrackWidthList
static constexpr double IU_PER_MM
Mock up a conversion function.
std::vector< DIFF_PAIR_DIMENSION > m_DiffPairDimensionsList
A holder for a rule check item, DRC in Pcbnew or ERC in Eeschema.
Definition: rc_item.h:72
NETCLASSES m_internalNetClasses
Net classes that are loaded from the board file before these were stored in the project.
#define LEGACY_COPPEREDGECLEARANCE
#define DEFAULT_BOARD_THICKNESS_MM
int m_DimensionPrecision
Number of digits after the decimal.
ZONE_SETTINGS m_defaultZoneSettings
The default settings that will be used for new zones.
#define DEFAULT_LINE_WIDTH
#define DEFAULT_DIMENSION_ARROW_LENGTH
#define DEFAULT_COPPER_LINE_WIDTH
#define DEFAULT_HOLETOHOLEMIN
Stores an enum as an integer.
Definition: parameters.h:226
void SetSize(const wxSize &aSize)
Definition: pad.h:231
DIFF_PAIR_DIMENSION m_customDiffPair
#define DEFAULT_CUSTOMDPAIRGAP
VIATYPE m_CurrentViaType
(VIA_BLIND_BURIED, VIA_THROUGH, VIA_MICROVIA)
nlohmann::json json
Definition: gerbview.cpp:41
Container to handle a stock of specific differential pairs each with unique track width,...
#define DEFAULT_MINCLEARANCE
#define DEFAULT_MINTHROUGHDRILL
DIM_TEXT_POSITION m_DimensionTextPosition
DIM_UNITS_MODE m_DimensionUnitsMode
#define DEFAULT_CUSTOMDPAIRVIAGAP
#define DEFAULT_DIMENSION_EXTENSION_OFFSET
#define DEFAULT_SOLDERPASTE_CLEARANCE
#define DEFAULT_TEXT_WIDTH
wxSize m_TextSize[LAYER_CLASS_COUNT]
#define DEFAULT_CUSTOMDPAIRWIDTH
const wxSize & GetDrillSize() const
Definition: pad.h:242
#define DEFAULT_SILK_TEXT_SIZE
int m_TextThickness[LAYER_CLASS_COUNT]
LSET is a set of PCB_LAYER_IDs.
#define DEFAULT_SILK_LINE_WIDTH
#define NULL
void SetDrillSize(const wxSize &aSize)
Definition: pad.h:241
const wxSize & GetSize() const
Definition: pad.h:232
bool m_TextItalic[LAYER_CLASS_COUNT]
Represents a parameter that has a scaling factor between the value in the file and the value used int...
Definition: parameters.h:388
#define ZONE_CLEARANCE_MIL
Definition: zones.h:33
Text appears outside the dimension line (default)
bool m_BlindBuriedViaAllowed
true to allow blind/buried vias
const int bdsSchemaVersion
#define TEXTS_MAX_SIZE
Maximum text size in internal units (10 inches)
Definition: pcbnew.h:32
#define DEFAULT_MICROVIASMINSIZE
#define DEFAULT_MICROVIASMINDRILL
#define DEFAULT_SOLDERMASK_MIN_WIDTH
int m_LineThickness[LAYER_CLASS_COUNT]
Text appears in line with the dimension line.
#define DEFAULT_HOLECLEARANCE
#define TEXTS_MIN_SIZE
Minimum text size in internal units (1 mil)
Definition: pcbnew.h:31
#define DEFAULT_COPPEREDGECLEARANCE
bool m_resetParamsIfMissing
Whether or not to set parameters to their default value if missing from JSON on Load()
wxString SeverityToString(const SEVERITY &aSeverity)
Definition: ui_common.cpp:47
const char * name
Definition: DXF_plotter.cpp:59
void registerMigration(int aOldSchemaVersion, int aNewSchemaVersion, std::function< bool(void)> aMigrator)
Registers a migration from one schema version to another.
#define DEFAULT_SILKCLEARANCE
std::map< int, SEVERITY > m_DRCSeverities
SEVERITY SeverityFromString(const wxString &aSeverity)
Definition: ui_common.cpp:36
static std::vector< std::reference_wrapper< RC_ITEM > > GetItemsWithSeverities()
Definition: drc_item.h:100
NESTED_SETTINGS(const std::string &aName, int aSchemaVersion, JSON_SETTINGS *aParent, const std::string &aPath)
#define DEFAULT_COPPER_TEXT_WIDTH
std::vector< VIA_DIMENSION > m_ViasDimensionsList
boost::optional< T > OPT
Definition: optional.h:7
#define DEFAULT_CUSTOMTRACKWIDTH
DIM_UNITS_FORMAT m_DimensionUnitsFormat
#define DEFAULT_TEXT_SIZE
Ratio of the font height to the baseline of the text above the wire.
NETCLASSES * m_netClasses
This will point to m_internalNetClasses until it is repointed to the project after load.
#define DEFAULT_SOLDERMASK_CLEARANCE
#define DEFAULT_COPPER_TEXT_SIZE
bool m_MicroViasAllowed
true to allow micro vias
std::set< wxString > m_DrcExclusions
static constexpr int Millimeter2iu(double mm)
LSET m_enabledLayers
Bit-mask for layer enabling.
int m_boardThickness
Board thickness for 3D viewer.
bool m_TextUpright[LAYER_CLASS_COUNT]

References AUTOMATIC, BARE_SUFFIX, DEFAULT_BOARD_THICKNESS_MM, DEFAULT_COPPER_LINE_WIDTH, DEFAULT_COPPER_TEXT_SIZE, DEFAULT_COPPER_TEXT_WIDTH, DEFAULT_COPPEREDGECLEARANCE, DEFAULT_COURTYARD_WIDTH, DEFAULT_CUSTOMDPAIRGAP, DEFAULT_CUSTOMDPAIRVIAGAP, DEFAULT_CUSTOMDPAIRWIDTH, DEFAULT_CUSTOMTRACKWIDTH, DEFAULT_DIMENSION_ARROW_LENGTH, DEFAULT_DIMENSION_EXTENSION_OFFSET, DEFAULT_EDGE_WIDTH, DEFAULT_HOLECLEARANCE, DEFAULT_HOLETOHOLEMIN, DEFAULT_LINE_WIDTH, DEFAULT_MICROVIASMINDRILL, DEFAULT_MICROVIASMINSIZE, DEFAULT_MINCLEARANCE, DEFAULT_MINTHROUGHDRILL, DEFAULT_SILK_LINE_WIDTH, DEFAULT_SILK_TEXT_SIZE, DEFAULT_SILK_TEXT_WIDTH, DEFAULT_SILKCLEARANCE, DEFAULT_SOLDERMASK_CLEARANCE, DEFAULT_SOLDERMASK_MIN_WIDTH, DEFAULT_SOLDERPASTE_CLEARANCE, DEFAULT_SOLDERPASTE_RATIO, DEFAULT_TEXT_SIZE, DEFAULT_TEXT_WIDTH, DEFAULT_TRACKMINWIDTH, DEFAULT_VIASMINSIZE, DRCE_DANGLING_TRACK, DRCE_DANGLING_VIA, DRCE_DUPLICATE_FOOTPRINT, DRCE_EXTRA_FOOTPRINT, DRCE_FIRST, DRCE_LAST, DRCE_MISSING_COURTYARD, DRCE_MISSING_FOOTPRINT, DRCE_NET_CONFLICT, DRCE_NPTH_IN_COURTYARD, DRCE_PTH_IN_COURTYARD, F_Fab, F_SilkS, PAD::GetDrillSize(), DRC_ITEM::GetItemsWithSeverities(), PAD::GetSize(), INCHES, INLINE, IU_PER_MM, LAYER_CLASS_COPPER, LAYER_CLASS_COURTYARD, LAYER_CLASS_EDGES, LAYER_CLASS_FAB, LAYER_CLASS_OTHERS, LAYER_CLASS_SILK, LEGACY_COPPEREDGECLEARANCE, m_BlindBuriedViaAllowed, m_boardThickness, m_CopperEdgeClearance, m_CurrentViaType, m_customDiffPair, m_customTrackWidth, m_customViaSize, m_DefaultFPTextItems, m_defaultZoneSettings, VIA_DIMENSION::m_Diameter, m_DiffPairDimensionsList, m_diffPairIndex, m_DimensionArrowLength, m_DimensionExtensionOffset, m_DimensionKeepTextAligned, m_DimensionPrecision, m_DimensionSuppressZeroes, m_DimensionTextPosition, m_DimensionUnitsFormat, m_DimensionUnitsMode, m_DrcExclusions, m_DRCSeverities, VIA_DIMENSION::m_Drill, m_enabledLayers, DIFF_PAIR_DIMENSION::m_Gap, m_HasStackup, m_HoleClearance, m_HoleToHoleMin, m_internalNetClasses, m_LineThickness, m_MaxError, m_MicroViasAllowed, m_MicroViasMinDrill, m_MicroViasMinSize, m_MinClearance, m_MinThroughDrill, m_netClasses, m_Pad_Master, JSON_SETTINGS::m_params, JSON_SETTINGS::m_resetParamsIfMissing, m_SilkClearance, m_SolderMaskMargin, m_SolderMaskMinWidth, m_SolderPasteMargin, m_SolderPasteMarginRatio, m_TextItalic, m_TextSize, m_TextThickness, m_TextUpright, m_TrackMinWidth, m_trackWidthIndex, m_TrackWidthList, m_UseConnectedTrackWidth, m_useCustomDiffPair, m_useCustomTrackVia, DIFF_PAIR_DIMENSION::m_ViaGap, m_ViasDimensionsList, m_viaSizeIndex, m_ViasMinAnnulus, m_ViasMinSize, DIFF_PAIR_DIMENSION::m_Width, ZONE_SETTINGS::m_Zone_45_Only, ZONE_SETTINGS::m_ZoneClearance, m_ZoneFillVersion, m_ZoneKeepExternalFillets, migrateSchema0to1(), Millimeter2iu(), name, NO_SUFFIX, OUTSIDE, PAREN_SUFFIX, JSON_SETTINGS::registerMigration(), RPT_SEVERITY_ERROR, RPT_SEVERITY_IGNORE, RPT_SEVERITY_WARNING, SetCopperLayerCount(), PAD::SetDrillSize(), PAD::SetSize(), SeverityFromString(), SeverityToString(), TEXTS_MAX_SIZE, TEXTS_MAX_WIDTH, TEXTS_MIN_SIZE, THROUGH, via, and ZONE_CLEARANCE_MIL.

◆ ~BOARD_DESIGN_SETTINGS()

BOARD_DESIGN_SETTINGS::~BOARD_DESIGN_SETTINGS ( )
virtual

Definition at line 632 of file board_design_settings.cpp.

633 {
634  if( m_parent )
635  {
637  m_parent = nullptr;
638  }
639 }
JSON_SETTINGS * m_parent
A pointer to the parent object to load and store from.
void ReleaseNestedSettings(NESTED_SETTINGS *aSettings)
Saves and frees a nested settings object, if it exists within this one.

References NESTED_SETTINGS::m_parent, and JSON_SETTINGS::ReleaseNestedSettings().

◆ BOARD_DESIGN_SETTINGS() [2/2]

BOARD_DESIGN_SETTINGS::BOARD_DESIGN_SETTINGS ( const BOARD_DESIGN_SETTINGS aOther)

Definition at line 642 of file board_design_settings.cpp.

642  :
643  NESTED_SETTINGS( "board_design_settings", bdsSchemaVersion, aOther.m_parent,
644  aOther.m_path ),
645  m_Pad_Master( nullptr )
646 {
647  initFromOther( aOther );
648 }
JSON_SETTINGS * m_parent
A pointer to the parent object to load and store from.
const int bdsSchemaVersion
NESTED_SETTINGS(const std::string &aName, int aSchemaVersion, JSON_SETTINGS *aParent, const std::string &aPath)
void initFromOther(const BOARD_DESIGN_SETTINGS &aOther)
std::string m_path
The path (in pointer format) of where to store this document in the parent.

References initFromOther().

Member Function Documentation

◆ AddNestedSettings()

void JSON_SETTINGS::AddNestedSettings ( NESTED_SETTINGS aSettings)
inherited

Transfers ownership of a given NESTED_SETTINGS to this object.

Can be used to construct a NESTED_SETTINGS without the parent object needing to know about the implementation of the nested object;

Parameters
aSettingsis the settings object to take ownership of
aTargetis a pointer to update to the passed in settings

Definition at line 675 of file json_settings.cpp.

676 {
677  wxLogTrace( traceSettings, "AddNestedSettings %s", aSettings->GetFilename() );
678  m_nested_settings.push_back( aSettings );
679 }
wxString GetFilename() const
Definition: json_settings.h:66
std::vector< NESTED_SETTINGS * > m_nested_settings
Nested settings files that live inside this one, if any.
const wxChar *const traceSettings
Flag to enable debug output of settings operations and management.

References JSON_SETTINGS::GetFilename(), JSON_SETTINGS::m_nested_settings, and traceSettings.

Referenced by NESTED_SETTINGS::SetParent().

◆ fromLegacy()

template<typename ValueType >
template bool JSON_SETTINGS::fromLegacy< bool > ( wxConfigBase *  aConfig,
const std::string &  aKey,
const std::string &  aDest 
)
protectedinherited

Translates a legacy wxConfig value to a given JSON pointer value.

Template Parameters
ValueTypeis the basic type of the value
Parameters
aConfigis the legacy config to read from
aKeyis the key (within the current path) to read
aDestis a string that will form a JSON pointer (key1.key2.key3) to write to

Definition at line 587 of file json_settings.cpp.

589 {
590  ValueType val;
591 
592  if( aConfig->Read( aKey, &val ) )
593  {
594  try
595  {
596  ( *this )[PointerFromString( aDest )] = val;
597  }
598  catch( ... )
599  {
600  wxASSERT_MSG( false, wxT( "Could not write value in fromLegacy!" ) );
601  return false;
602  }
603 
604  return true;
605  }
606 
607  return false;
608 }
static nlohmann::json::json_pointer PointerFromString(std::string aPath)
Builds a JSON pointer based on a given string.

References JSON_SETTINGS::PointerFromString().

◆ fromLegacyColor()

bool JSON_SETTINGS::fromLegacyColor ( wxConfigBase *  aConfig,
const std::string &  aKey,
const std::string &  aDest 
)
protectedinherited

Translates a legacy COLOR4D stored in a wxConfig string to a given JSON pointer value.

Parameters
aConfigis the legacy config to read from
aKeyis the key (within the current path) to read
aDestis a string that will form a JSON pointer (key1.key2.key3) to write to

Definition at line 647 of file json_settings.cpp.

649 {
650  wxString str;
651 
652  if( aConfig->Read( aKey, &str ) )
653  {
655  color.SetFromWxString( str );
656 
657  try
658  {
659  nlohmann::json js = nlohmann::json::array( { color.r, color.g, color.b, color.a } );
660  ( *this )[PointerFromString( aDest )] = js;
661  }
662  catch( ... )
663  {
664  wxASSERT_MSG( false, wxT( "Could not write value in fromLegacyColor!" ) );
665  return false;
666  }
667 
668  return true;
669  }
670 
671  return false;
672 }
int color
Definition: DXF_plotter.cpp:60
nlohmann::json json
Definition: gerbview.cpp:41
static nlohmann::json::json_pointer PointerFromString(std::string aPath)
Builds a JSON pointer based on a given string.
A color representation with 4 components: red, green, blue, alpha.
Definition: color4d.h:98

References color, and JSON_SETTINGS::PointerFromString().

Referenced by APP_SETTINGS_BASE::migrateWindowConfig().

◆ fromLegacyString()

bool JSON_SETTINGS::fromLegacyString ( wxConfigBase *  aConfig,
const std::string &  aKey,
const std::string &  aDest 
)
protectedinherited

Translates a legacy wxConfig string value to a given JSON pointer value.

Parameters
aConfigis the legacy config to read from
aKeyis the key (within the current path) to read
aDestis a string that will form a JSON pointer (key1.key2.key3) to write to

Definition at line 623 of file json_settings.cpp.

625 {
626  wxString str;
627 
628  if( aConfig->Read( aKey, &str ) )
629  {
630  try
631  {
632  ( *this )[PointerFromString( aDest )] = str.ToUTF8();
633  }
634  catch( ... )
635  {
636  wxASSERT_MSG( false, wxT( "Could not write value in fromLegacyString!" ) );
637  return false;
638  }
639 
640  return true;
641  }
642 
643  return false;
644 }
static nlohmann::json::json_pointer PointerFromString(std::string aPath)
Builds a JSON pointer based on a given string.

References JSON_SETTINGS::PointerFromString().

Referenced by BITMAP2CMP_SETTINGS::MigrateFromLegacy(), FOOTPRINT_EDITOR_SETTINGS::MigrateFromLegacy(), GERBVIEW_SETTINGS::MigrateFromLegacy(), SYMBOL_EDITOR_SETTINGS::MigrateFromLegacy(), PROJECT_FILE::MigrateFromLegacy(), PCB_CALCULATOR_SETTINGS::MigrateFromLegacy(), COMMON_SETTINGS::MigrateFromLegacy(), APP_SETTINGS_BASE::MigrateFromLegacy(), EESCHEMA_SETTINGS::MigrateFromLegacy(), PCBNEW_SETTINGS::MigrateFromLegacy(), and APP_SETTINGS_BASE::migrateWindowConfig().

◆ Get() [1/2]

template<typename ValueType >
OPT<ValueType> JSON_SETTINGS::Get ( const std::string &  aPath) const
inlineinherited

Fetches a value from within the JSON document.

Will return an empty optional if the value is not found or a mismatching type.

Template Parameters
ValueTypeis the type to cast to
Parameters
aPathis the path within the document to retrieve
Returns
a value from within this document

Definition at line 133 of file json_settings.h.

134  {
135  if( OPT<nlohmann::json> ret = GetJson( aPath ) )
136  {
137  try
138  {
139  return ret->get<ValueType>();
140  }
141  catch( ... )
142  {
143  }
144  }
145 
146  return NULLOPT;
147  }
OPT< nlohmann::json > GetJson(const std::string &aPath) const
Fetches a JSON object that is a subset of this JSON_SETTINGS object, using a path of the form "key1....
const auto NULLOPT
Definition: optional.h:9
boost::optional< T > OPT
Definition: optional.h:7

References JSON_SETTINGS::GetJson(), and NULLOPT.

Referenced by PARAM< wxString >::Load(), COLOR_MAP_PARAM::Load(), PARAM_ENUM< EnumType >::Load(), PARAM_LAMBDA< nlohmann::json >::Load(), PARAM_SCALED< ValueType >::Load(), PARAM< wxString >::MatchesFile(), COLOR_MAP_PARAM::MatchesFile(), PARAM_PATH::MatchesFile(), PARAM_ENUM< EnumType >::MatchesFile(), PARAM_LAMBDA< nlohmann::json >::MatchesFile(), and PARAM_SCALED< ValueType >::MatchesFile().

◆ Get() [2/2]

OPT< wxString > JSON_SETTINGS::Get ( const std::string &  aPath) const
inherited

Definition at line 705 of file json_settings.cpp.

706 {
707  if( OPT<nlohmann::json> opt_json = GetJson( aPath ) )
708  return wxString( opt_json->get<std::string>().c_str(), wxConvUTF8 );
709 
710  return NULLOPT;
711 }
OPT< nlohmann::json > GetJson(const std::string &aPath) const
Fetches a JSON object that is a subset of this JSON_SETTINGS object, using a path of the form "key1....
const auto NULLOPT
Definition: optional.h:9
boost::optional< T > OPT
Definition: optional.h:7

References JSON_SETTINGS::GetJson(), and NULLOPT.

◆ GetBiggestClearanceValue()

int BOARD_DESIGN_SETTINGS::GetBiggestClearanceValue ( ) const
Returns
the biggest clearance value found in NetClasses list.

Definition at line 871 of file board_design_settings.cpp.

872 {
873  int biggest = 0;
874  DRC_CONSTRAINT constraint;
875 
876  if( m_DRCEngine )
877  {
878  m_DRCEngine->QueryWorstConstraint( CLEARANCE_CONSTRAINT, constraint );
879  biggest = std::max( biggest, constraint.Value().Min() );
880 
881  m_DRCEngine->QueryWorstConstraint( HOLE_CLEARANCE_CONSTRAINT, constraint );
882  biggest = std::max( biggest, constraint.Value().Min() );
883 
884  m_DRCEngine->QueryWorstConstraint( EDGE_CLEARANCE_CONSTRAINT, constraint );
885  biggest = std::max( biggest, constraint.Value().Min() );
886  }
887 
888  return biggest;
889 }
MINOPTMAX< int > & Value()
Definition: drc_rule.h:122
T Min() const
Definition: minoptmax.h:33
std::shared_ptr< DRC_ENGINE > m_DRCEngine

References CLEARANCE_CONSTRAINT, EDGE_CLEARANCE_CONSTRAINT, HOLE_CLEARANCE_CONSTRAINT, m_DRCEngine, MINOPTMAX< T >::Min(), and DRC_CONSTRAINT::Value().

Referenced by ZONE_FILLER::buildThermalSpokes(), ZONE_FILLER::Fill(), PNS_KICAD_IFACE_BASE::SyncWorld(), TRACK::ViewBBox(), and FOOTPRINT::ViewBBox().

◆ GetBoardThickness()

◆ GetCopperLayerCount()

int BOARD_DESIGN_SETTINGS::GetCopperLayerCount ( ) const
inline

◆ GetCurrentDiffPairGap()

int BOARD_DESIGN_SETTINGS::GetCurrentDiffPairGap ( ) const
Returns
the current diff pair gap, according to the selected options ( using the default netclass value or a preset/custom value )

Definition at line 997 of file board_design_settings.cpp.

998 {
999  if( m_useCustomDiffPair )
1000  {
1001  return m_customDiffPair.m_Gap;
1002  }
1003  else if( m_diffPairIndex == 0 )
1004  {
1005  if( GetNetClasses().GetDefaultPtr()->HasDiffPairGap() )
1007  else
1009  }
1010  else
1011  {
1013  }
1014 }
int GetDiffPairGap() const
Definition: netclass.h:152
std::vector< DIFF_PAIR_DIMENSION > m_DiffPairDimensionsList
DIFF_PAIR_DIMENSION m_customDiffPair
NETCLASSES & GetNetClasses() const
NETCLASS * GetDefaultPtr() const
Definition: netclass.h:258
int GetClearance() const
Definition: netclass.h:124

References NETCLASS::GetClearance(), NETCLASSES::GetDefaultPtr(), NETCLASS::GetDiffPairGap(), GetNetClasses(), m_customDiffPair, m_DiffPairDimensionsList, m_diffPairIndex, DIFF_PAIR_DIMENSION::m_Gap, and m_useCustomDiffPair.

Referenced by GetCurrentDiffPairViaGap(), and PNS_KICAD_IFACE_BASE::ImportSizes().

◆ GetCurrentDiffPairViaGap()

int BOARD_DESIGN_SETTINGS::GetCurrentDiffPairViaGap ( ) const
Returns
the current diff pair via gap, according to the selected options ( using the default netclass value or a preset/custom value ) the default netclass is always in m_DiffPairDimensionsList[0].

Definition at line 1017 of file board_design_settings.cpp.

1018 {
1019  if( m_useCustomDiffPair )
1020  {
1021  return m_customDiffPair.m_ViaGap;
1022  }
1023  else if( m_diffPairIndex == 0 )
1024  {
1025  if( GetNetClasses().GetDefaultPtr()->HasDiffPairViaGap() )
1027  else
1028  return GetCurrentDiffPairGap();
1029  }
1030  else
1031  {
1032  return m_DiffPairDimensionsList[m_diffPairIndex].m_ViaGap;
1033  }
1034 }
std::vector< DIFF_PAIR_DIMENSION > m_DiffPairDimensionsList
DIFF_PAIR_DIMENSION m_customDiffPair
int GetDiffPairViaGap() const
Definition: netclass.h:156
NETCLASSES & GetNetClasses() const
NETCLASS * GetDefaultPtr() const
Definition: netclass.h:258

References GetCurrentDiffPairGap(), NETCLASSES::GetDefaultPtr(), NETCLASS::GetDiffPairViaGap(), GetNetClasses(), m_customDiffPair, m_DiffPairDimensionsList, m_diffPairIndex, m_useCustomDiffPair, and DIFF_PAIR_DIMENSION::m_ViaGap.

Referenced by PNS_KICAD_IFACE_BASE::ImportSizes().

◆ GetCurrentDiffPairWidth()

int BOARD_DESIGN_SETTINGS::GetCurrentDiffPairWidth ( ) const
Returns
the current diff pair track width, according to the selected options ( using the default netclass value or a preset/custom value )

Definition at line 977 of file board_design_settings.cpp.

978 {
979  if( m_useCustomDiffPair )
980  {
981  return m_customDiffPair.m_Width;
982  }
983  else if( m_diffPairIndex == 0 )
984  {
985  if( GetNetClasses().GetDefaultPtr()->HasDiffPairWidth() )
987  else
989  }
990  else
991  {
993  }
994 }
std::vector< DIFF_PAIR_DIMENSION > m_DiffPairDimensionsList
DIFF_PAIR_DIMENSION m_customDiffPair
int GetTrackWidth() const
Definition: netclass.h:128
NETCLASSES & GetNetClasses() const
int GetDiffPairWidth() const
Definition: netclass.h:148
NETCLASS * GetDefaultPtr() const
Definition: netclass.h:258

References NETCLASSES::GetDefaultPtr(), NETCLASS::GetDiffPairWidth(), GetNetClasses(), NETCLASS::GetTrackWidth(), m_customDiffPair, m_DiffPairDimensionsList, m_diffPairIndex, m_useCustomDiffPair, and DIFF_PAIR_DIMENSION::m_Width.

Referenced by PNS_KICAD_IFACE_BASE::ImportSizes().

◆ GetCurrentMicroViaDrill()

int BOARD_DESIGN_SETTINGS::GetCurrentMicroViaDrill ( )
Returns
the current micro via drill that is the current netclass value.

Definition at line 911 of file board_design_settings.cpp.

912 {
913  NETCLASSPTR netclass = GetNetClasses().Find( m_currentNetClassName );
914 
915  return netclass->GetuViaDrill();
916 }
wxString m_currentNetClassName
Current net class name used to display netclass info.
NETCLASSPTR Find(const wxString &aName) const
Search this container for a NETCLASS given by aName.
Definition: netclass.cpp:132
NETCLASSES & GetNetClasses() const

References NETCLASSES::Find(), GetNetClasses(), and m_currentNetClassName.

◆ GetCurrentMicroViaSize()

int BOARD_DESIGN_SETTINGS::GetCurrentMicroViaSize ( )
Returns
the current micro via size that is the current netclass value.

Definition at line 903 of file board_design_settings.cpp.

904 {
905  NETCLASSPTR netclass = GetNetClasses().Find( m_currentNetClassName );
906 
907  return netclass->GetuViaDiameter();
908 }
wxString m_currentNetClassName
Current net class name used to display netclass info.
NETCLASSPTR Find(const wxString &aName) const
Search this container for a NETCLASS given by aName.
Definition: netclass.cpp:132
NETCLASSES & GetNetClasses() const

References NETCLASSES::Find(), GetNetClasses(), and m_currentNetClassName.

◆ GetCurrentNetClassName()

const wxString& BOARD_DESIGN_SETTINGS::GetCurrentNetClassName ( ) const
inline
Returns
the current net class name.

Definition at line 275 of file board_design_settings.h.

276  {
277  return m_currentNetClassName;
278  }
wxString m_currentNetClassName
Current net class name used to display netclass info.

References m_currentNetClassName.

Referenced by DIALOG_GLOBAL_EDIT_TRACKS_AND_VIAS::buildFilterLists().

◆ GetCurrentTrackWidth()

int BOARD_DESIGN_SETTINGS::GetCurrentTrackWidth ( ) const
Returns
the current track width according to the selected options ( using the default netclass value or a preset/custom value ) the default netclass is always in m_TrackWidthList[0]

Definition at line 959 of file board_design_settings.cpp.

960 {
961  if( m_useCustomTrackVia )
962  return m_customTrackWidth;
963  else if( m_trackWidthIndex == 0 )
965  else
967 }
std::vector< int > m_TrackWidthList
int GetTrackWidth() const
Definition: netclass.h:128
NETCLASSES & GetNetClasses() const
NETCLASS * GetDefaultPtr() const
Definition: netclass.h:258

References NETCLASSES::GetDefaultPtr(), GetNetClasses(), NETCLASS::GetTrackWidth(), m_customTrackWidth, m_trackWidthIndex, m_TrackWidthList, and m_useCustomTrackVia.

Referenced by EDIT_TOOL::ChangeTrackWidth(), MICROWAVE_TOOL::createBaseFootprint(), MICROWAVE_TOOL::createFootprint(), MICROWAVE_TOOL::createInductorBetween(), PNS_KICAD_IFACE_BASE::ImportSizes(), and PCB_EDIT_FRAME::SetTrackSegmentWidth().

◆ GetCurrentViaDrill()

int BOARD_DESIGN_SETTINGS::GetCurrentViaDrill ( ) const
Returns
the current via size, according to the selected options ( using the default netclass value or a preset/custom value ) the default netclass is always in m_TrackWidthList[0].

Definition at line 937 of file board_design_settings.cpp.

938 {
939  int drill;
940 
941  if( m_useCustomTrackVia )
942  drill = m_customViaSize.m_Drill;
943  else if( m_viaSizeIndex == 0 )
944  drill = GetNetClasses().GetDefaultPtr()->GetViaDrill();
945  else
946  drill = m_ViasDimensionsList[ m_viaSizeIndex ].m_Drill;
947 
948  return drill > 0 ? drill : -1;
949 }
int GetViaDrill() const
Definition: netclass.h:136
NETCLASSES & GetNetClasses() const
NETCLASS * GetDefaultPtr() const
Definition: netclass.h:258
std::vector< VIA_DIMENSION > m_ViasDimensionsList

References NETCLASSES::GetDefaultPtr(), GetNetClasses(), NETCLASS::GetViaDrill(), m_customViaSize, VIA_DIMENSION::m_Drill, m_useCustomTrackVia, m_ViasDimensionsList, and m_viaSizeIndex.

Referenced by EDIT_TOOL::ChangeTrackWidth(), ROUTER_TOOL::handleLayerSwitch(), PNS_KICAD_IFACE_BASE::ImportSizes(), and PCB_EDIT_FRAME::SetTrackSegmentWidth().

◆ GetCurrentViaSize()

int BOARD_DESIGN_SETTINGS::GetCurrentViaSize ( ) const
Returns
the current via size, according to the selected options ( using the default netclass value or a preset/custom value ) the default netclass is always in m_TrackWidthList[0]

Definition at line 926 of file board_design_settings.cpp.

927 {
928  if( m_useCustomTrackVia )
930  else if( m_viaSizeIndex == 0 )
932  else
933  return m_ViasDimensionsList[ m_viaSizeIndex ].m_Diameter;
934 }
NETCLASSES & GetNetClasses() const
NETCLASS * GetDefaultPtr() const
Definition: netclass.h:258
int GetViaDiameter() const
Definition: netclass.h:132
std::vector< VIA_DIMENSION > m_ViasDimensionsList

References NETCLASSES::GetDefaultPtr(), GetNetClasses(), NETCLASS::GetViaDiameter(), m_customViaSize, VIA_DIMENSION::m_Diameter, m_useCustomTrackVia, m_ViasDimensionsList, and m_viaSizeIndex.

Referenced by EDIT_TOOL::ChangeTrackWidth(), ROUTER_TOOL::handleLayerSwitch(), PNS_KICAD_IFACE_BASE::ImportSizes(), and PCB_EDIT_FRAME::SetTrackSegmentWidth().

◆ GetCustomDiffPairGap()

int BOARD_DESIGN_SETTINGS::GetCustomDiffPairGap ( )
inline

Function GetCustomDiffPairGap.

Returns
Current custom gap width for differential pairs.

Definition at line 499 of file board_design_settings.h.

500  {
501  return m_customDiffPair.m_Gap;
502  }
DIFF_PAIR_DIMENSION m_customDiffPair

◆ GetCustomDiffPairViaGap()

int BOARD_DESIGN_SETTINGS::GetCustomDiffPairViaGap ( )
inline
Returns
Current custom via gap width for differential pairs.

Definition at line 518 of file board_design_settings.h.

◆ GetCustomDiffPairWidth()

int BOARD_DESIGN_SETTINGS::GetCustomDiffPairWidth ( )
inline
Returns
Current custom track width for differential pairs.

Definition at line 480 of file board_design_settings.h.

481  {
482  return m_customDiffPair.m_Width;
483  }
DIFF_PAIR_DIMENSION m_customDiffPair

◆ GetCustomTrackWidth()

int BOARD_DESIGN_SETTINGS::GetCustomTrackWidth ( ) const
inline
Returns
Current custom width for a track.

Definition at line 359 of file board_design_settings.h.

360  {
361  return m_customTrackWidth;
362  }

References m_customTrackWidth.

Referenced by DIALOG_TRACK_VIA_SIZE::TransferDataToWindow().

◆ GetCustomViaDrill()

int BOARD_DESIGN_SETTINGS::GetCustomViaDrill ( ) const
inline
Returns
Current custom size for the via drill.

Definition at line 430 of file board_design_settings.h.

431  {
432  return m_customViaSize.m_Drill;
433  }

Referenced by DIALOG_TRACK_VIA_SIZE::TransferDataToWindow().

◆ GetCustomViaSize()

int BOARD_DESIGN_SETTINGS::GetCustomViaSize ( ) const
inline
Returns
Current custom size for the via diameter.

Definition at line 402 of file board_design_settings.h.

403  {
405  }

Referenced by DIALOG_TRACK_VIA_SIZE::TransferDataToWindow().

◆ GetDefault()

◆ GetDefaultZoneSettings()

ZONE_SETTINGS& BOARD_DESIGN_SETTINGS::GetDefaultZoneSettings ( )
inline

◆ GetDiffPairIndex()

unsigned BOARD_DESIGN_SETTINGS::GetDiffPairIndex ( ) const
inline
Returns
the current diff pair dimension list index.

Definition at line 459 of file board_design_settings.h.

459 { return m_diffPairIndex; }

References m_diffPairIndex.

Referenced by BOARD_EDITOR_CONTROL::TrackWidthDec(), BOARD_EDITOR_CONTROL::TrackWidthInc(), and DIFF_PAIR_MENU::update().

◆ GetDRCEpsilon()

int BOARD_DESIGN_SETTINGS::GetDRCEpsilon ( ) const

Definition at line 1098 of file board_design_settings.cpp.

1099 {
1100  return Millimeter2iu( ADVANCED_CFG::GetCfg().m_DRCEpsilon );
1101 }
static const ADVANCED_CFG & GetCfg()
Get the singleton instance's config, which is shared by all consumers.
static constexpr int Millimeter2iu(double mm)

References ADVANCED_CFG::GetCfg(), and Millimeter2iu().

Referenced by DRAWING_TOOL::DrawVia(), and DRC_TEST_PROVIDER_COPPER_CLEARANCE::Run().

◆ GetEnabledLayers()

LSET BOARD_DESIGN_SETTINGS::GetEnabledLayers ( ) const
inline

Return a bit-mask of all the layers that are enabled.

Returns
the enabled layers in bit-mapped form.

Definition at line 586 of file board_design_settings.h.

587  {
588  return m_enabledLayers;
589  }
LSET m_enabledLayers
Bit-mask for layer enabling.

References m_enabledLayers.

Referenced by BOARD_STACKUP::BuildDefaultStackupList(), CreatePadsShapesSection(), CreateRoutesSection(), BOARD::GetEnabledLayers(), and HYPERLYNX_EXPORTER::writeStackupInfo().

◆ getFileExt()

virtual wxString JSON_SETTINGS::getFileExt ( ) const
inlineprotectedvirtualinherited

Reimplemented in PROJECT_FILE, and PROJECT_LOCAL_SETTINGS.

Definition at line 283 of file json_settings.h.

284  {
285  return wxT( "json" );
286  }

Referenced by JSON_SETTINGS::GetFullFilename(), JSON_SETTINGS::LoadFromFile(), and JSON_SETTINGS::SaveToFile().

◆ GetFilename()

◆ GetFullFilename()

wxString JSON_SETTINGS::GetFullFilename ( ) const
inherited

Definition at line 81 of file json_settings.cpp.

82 {
83  return wxString( m_filename + "." + getFileExt() );
84 }
wxString m_filename
The filename (not including path) of this settings file (inicode)
virtual wxString getFileExt() const

References JSON_SETTINGS::getFileExt(), and JSON_SETTINGS::m_filename.

Referenced by JSON_SETTINGS::JSON_SETTINGS(), NESTED_SETTINGS::LoadFromFile(), JSON_SETTINGS::LoadFromFile(), and JSON_SETTINGS::SaveToFile().

◆ GetHolePlatingThickness()

int BOARD_DESIGN_SETTINGS::GetHolePlatingThickness ( ) const

Pad & via drills are finish size.

Adding the hole plating thickness gives you the actual hole size.

Definition at line 1104 of file board_design_settings.cpp.

1105 {
1106  return Millimeter2iu( ADVANCED_CFG::GetCfg().m_HoleWallThickness );
1107 }
static const ADVANCED_CFG & GetCfg()
Get the singleton instance's config, which is shared by all consumers.
static constexpr int Millimeter2iu(double mm)

References ADVANCED_CFG::GetCfg(), and Millimeter2iu().

Referenced by ZONE_FILLER::buildCopperItemClearances(), KIGFX::PCB_PAINTER::draw(), BOARD_ADAPTER::GetHolePlatingThickness(), DRC_ENGINE::GetShape(), PNS_KICAD_IFACE_BASE::syncPad(), PNS_KICAD_IFACE_BASE::syncVia(), and DRC_TEST_PROVIDER_COPPER_CLEARANCE::testItemAgainstZones().

◆ GetJson()

OPT< nlohmann::json > JSON_SETTINGS::GetJson ( const std::string &  aPath) const
inherited

Fetches a JSON object that is a subset of this JSON_SETTINGS object, using a path of the form "key1.key2.key3" to refer to nested objects.

Parameters
aPathis a string containing one or more keys separated by '.'
Returns
a JSON object from within this one

Definition at line 436 of file json_settings.cpp.

437 {
438  nlohmann::json::json_pointer ptr = PointerFromString( aPath );
439 
440  if( contains( ptr ) )
441  {
442  try
443  {
444  return OPT<nlohmann::json>{ at( ptr ) };
445  }
446  catch( ... )
447  {
448  }
449  }
450 
451  return OPT<nlohmann::json>{};
452 }
bool contains(const _Container &__container, _Value __value)
Returns true if the container contains the given value.
Definition: kicad_algo.h:81
boost::optional< T > OPT
Definition: optional.h:7
static nlohmann::json::json_pointer PointerFromString(std::string aPath)
Builds a JSON pointer based on a given string.

References alg::contains(), and JSON_SETTINGS::PointerFromString().

Referenced by JSON_SETTINGS::Get(), PARAM_LAMBDA< nlohmann::json >::Load(), PARAM_LIST< wxString >::Load(), PARAM_MAP< Value >::Load(), PARAM_WXSTRING_MAP::Load(), PARAM_LAMBDA< nlohmann::json >::MatchesFile(), PARAM_LIST< wxString >::MatchesFile(), PARAM_PATH_LIST::MatchesFile(), PARAM_MAP< Value >::MatchesFile(), and PARAM_WXSTRING_MAP::MatchesFile().

◆ GetLayerClass()

int BOARD_DESIGN_SETTINGS::GetLayerClass ( PCB_LAYER_ID  aLayer) const

Definition at line 1081 of file board_design_settings.cpp.

1082 {
1083  if( aLayer == F_SilkS || aLayer == B_SilkS )
1084  return LAYER_CLASS_SILK;
1085  else if( IsCopperLayer( aLayer ) )
1086  return LAYER_CLASS_COPPER;
1087  else if( aLayer == Edge_Cuts )
1088  return LAYER_CLASS_EDGES;
1089  else if( aLayer == F_CrtYd || aLayer == B_CrtYd )
1090  return LAYER_CLASS_COURTYARD;
1091  else if( aLayer == F_Fab || aLayer == B_Fab )
1092  return LAYER_CLASS_FAB;
1093  else
1094  return LAYER_CLASS_OTHERS;
1095 }
bool IsCopperLayer(LAYER_NUM aLayerId)
Tests whether a layer is a copper layer.

References B_CrtYd, B_Fab, B_SilkS, Edge_Cuts, F_CrtYd, F_Fab, F_SilkS, IsCopperLayer(), LAYER_CLASS_COPPER, LAYER_CLASS_COURTYARD, LAYER_CLASS_EDGES, LAYER_CLASS_FAB, LAYER_CLASS_OTHERS, and LAYER_CLASS_SILK.

Referenced by GetLineThickness(), GetTextItalic(), GetTextSize(), GetTextThickness(), and GetTextUpright().

◆ getLegacyFileExt()

virtual wxString JSON_SETTINGS::getLegacyFileExt ( ) const
inlineprotectedvirtualinherited

Reimplemented in PROJECT_FILE, and PROJECT_LOCAL_SETTINGS.

Definition at line 288 of file json_settings.h.

289  {
290  return wxEmptyString;
291  }

Referenced by JSON_SETTINGS::LoadFromFile().

◆ GetLineThickness()

◆ GetLocation()

SETTINGS_LOC JSON_SETTINGS::GetLocation ( ) const
inlineinherited

Definition at line 72 of file json_settings.h.

72 { return m_location; }
SETTINGS_LOC m_location
The location of this settings file (.

References JSON_SETTINGS::m_location.

Referenced by SETTINGS_MANAGER::GetPathForSettingsFile().

◆ GetNetClasses()

◆ GetParent()

JSON_SETTINGS* NESTED_SETTINGS::GetParent ( void  )
inlineinherited

Definition at line 54 of file nested_settings.h.

55  {
56  return m_parent;
57  }
JSON_SETTINGS * m_parent
A pointer to the parent object to load and store from.

References NESTED_SETTINGS::m_parent.

Referenced by LoadFromFile().

◆ GetSeverity()

◆ GetSmallestClearanceValue()

int BOARD_DESIGN_SETTINGS::GetSmallestClearanceValue ( ) const
Returns
the smallest clearance value found in NetClasses list.

Definition at line 892 of file board_design_settings.cpp.

893 {
894  int clearance = GetDefault()->GetClearance();
895 
896  for( const std::pair<const wxString, NETCLASSPTR>& netclass : GetNetClasses().NetClasses() )
897  clearance = std::min( clearance, netclass.second->GetClearance() );
898 
899  return clearance;
900 }
NETCLASSES & GetNetClasses() const
int GetClearance() const
Definition: netclass.h:124
NETCLASS * GetDefault() const

References NETCLASS::GetClearance(), GetDefault(), and GetNetClasses().

Referenced by DIALOG_PLOT::init_Dialog().

◆ GetStackupDescriptor() [1/2]

◆ GetStackupDescriptor() [2/2]

const BOARD_STACKUP& BOARD_DESIGN_SETTINGS::GetStackupDescriptor ( ) const
inline

Definition at line 232 of file board_design_settings.h.

232 { return m_stackup; }
BOARD_STACKUP m_stackup
the description of layers stackup, for board fabrication only physical layers are in layers stackup.

References m_stackup.

◆ GetTextItalic()

bool BOARD_DESIGN_SETTINGS::GetTextItalic ( PCB_LAYER_ID  aLayer) const

◆ GetTextSize()

wxSize BOARD_DESIGN_SETTINGS::GetTextSize ( PCB_LAYER_ID  aLayer) const

Return the default text size from the layer class for the given layer.

Definition at line 1116 of file board_design_settings.cpp.

1117 {
1118  return m_TextSize[ GetLayerClass( aLayer ) ];
1119 }
int GetLayerClass(PCB_LAYER_ID aLayer) const
wxSize m_TextSize[LAYER_CLASS_COUNT]

References GetLayerClass(), and m_TextSize.

Referenced by PCB_BASE_FRAME::CreateNewFootprint(), EAGLE_PLUGIN::loadPlain(), DIALOG_FOOTPRINT_PROPERTIES_FP_EDITOR::OnAddField(), DIALOG_FOOTPRINT_PROPERTIES::OnAddField(), DRAWING_TOOL::PlaceText(), and DIALOG_GLOBAL_EDIT_TEXT_AND_GRAPHICS::processItem().

◆ GetTextThickness()

int BOARD_DESIGN_SETTINGS::GetTextThickness ( PCB_LAYER_ID  aLayer) const

Return the default text thickness from the layer class for the given layer.

Definition at line 1122 of file board_design_settings.cpp.

1123 {
1124  return m_TextThickness[ GetLayerClass( aLayer ) ];
1125 }
int GetLayerClass(PCB_LAYER_ID aLayer) const
int m_TextThickness[LAYER_CLASS_COUNT]

References GetLayerClass(), and m_TextThickness.

Referenced by PCB_BASE_FRAME::CreateNewFootprint(), EAGLE_PLUGIN::loadPlain(), DIALOG_FOOTPRINT_PROPERTIES_FP_EDITOR::OnAddField(), DIALOG_FOOTPRINT_PROPERTIES::OnAddField(), DRAWING_TOOL::PlaceText(), and DIALOG_GLOBAL_EDIT_TEXT_AND_GRAPHICS::processItem().

◆ GetTextUpright()

bool BOARD_DESIGN_SETTINGS::GetTextUpright ( PCB_LAYER_ID  aLayer) const

◆ GetTrackWidthIndex()

unsigned BOARD_DESIGN_SETTINGS::GetTrackWidthIndex ( ) const
inline

◆ GetViaSizeIndex()

unsigned BOARD_DESIGN_SETTINGS::GetViaSizeIndex ( ) const
inline

◆ Ignore()

bool BOARD_DESIGN_SETTINGS::Ignore ( int  aDRCErrorCode)

Return true if the DRC error code's severity is SEVERITY_IGNORE.

Definition at line 865 of file board_design_settings.cpp.

866 {
867  return m_DRCSeverities[ aDRCErrorCode ] == RPT_SEVERITY_IGNORE;
868 }
std::map< int, SEVERITY > m_DRCSeverities

References m_DRCSeverities, and RPT_SEVERITY_IGNORE.

Referenced by DRC_ENGINE::RunTests().

◆ initFromOther()

void BOARD_DESIGN_SETTINGS::initFromOther ( const BOARD_DESIGN_SETTINGS aOther)
private

Definition at line 658 of file board_design_settings.cpp.

659 {
660  // Copy of NESTED_SETTINGS around is not allowed, so let's just update the params.
671  m_ViasMinSize = aOther.m_ViasMinSize;
683  m_MaxError = aOther.m_MaxError;
689 
690  std::copy( std::begin( aOther.m_LineThickness ), std::end( aOther.m_LineThickness ),
691  std::begin( m_LineThickness ) );
692 
693  std::copy( std::begin( aOther.m_TextSize ), std::end( aOther.m_TextSize ),
694  std::begin( m_TextSize ) );
695 
696  std::copy( std::begin( aOther.m_TextThickness ), std::end( aOther.m_TextThickness ),
697  std::begin( m_TextThickness ) );
698 
699  std::copy( std::begin( aOther.m_TextItalic ), std::end( aOther.m_TextItalic ),
700  std::begin( m_TextItalic ) );
701 
702  std::copy( std::begin( aOther.m_TextUpright ), std::end( aOther.m_TextUpright ),
703  std::begin( m_TextUpright ) );
704 
713 
714  m_AuxOrigin = aOther.m_AuxOrigin;
715  m_GridOrigin = aOther.m_GridOrigin;
716  m_HasStackup = aOther.m_HasStackup;
717 
730  m_stackup = aOther.m_stackup;
731 
732  // Only take the pointer from the other if it isn't the default
733  if( aOther.m_netClasses == &aOther.m_internalNetClasses )
735  else
736  m_netClasses = aOther.m_netClasses;
737 
739 }
int m_ZoneFillVersion
Option to select different fill algorithms.
wxString m_currentNetClassName
Current net class name used to display netclass info.
std::vector< TEXT_ITEM_INFO > m_DefaultFPTextItems
wxPoint m_GridOrigin
origin for grid offsets
std::vector< int > m_TrackWidthList
BOARD_STACKUP m_stackup
the description of layers stackup, for board fabrication only physical layers are in layers stackup.
std::vector< DIFF_PAIR_DIMENSION > m_DiffPairDimensionsList
NETCLASSES m_internalNetClasses
Net classes that are loaded from the board file before these were stored in the project.
int m_DimensionPrecision
Number of digits after the decimal.
ZONE_SETTINGS m_defaultZoneSettings
The default settings that will be used for new zones.
DIFF_PAIR_DIMENSION m_customDiffPair
VIATYPE m_CurrentViaType
(VIA_BLIND_BURIED, VIA_THROUGH, VIA_MICROVIA)
DIM_TEXT_POSITION m_DimensionTextPosition
DIM_UNITS_MODE m_DimensionUnitsMode
wxSize m_TextSize[LAYER_CLASS_COUNT]
int m_TextThickness[LAYER_CLASS_COUNT]
bool m_TextItalic[LAYER_CLASS_COUNT]
bool m_BlindBuriedViaAllowed
true to allow blind/buried vias
int m_LineThickness[LAYER_CLASS_COUNT]
std::map< int, SEVERITY > m_DRCSeverities
std::vector< VIA_DIMENSION > m_ViasDimensionsList
DIM_UNITS_FORMAT m_DimensionUnitsFormat
NETCLASSES * m_netClasses
This will point to m_internalNetClasses until it is repointed to the project after load.
int m_copperLayerCount
Number of copper layers for this design.
bool m_MicroViasAllowed
true to allow micro vias
std::set< wxString > m_DrcExclusions
LSET m_enabledLayers
Bit-mask for layer enabling.
wxPoint m_AuxOrigin
origin for plot exports
int m_boardThickness
Board thickness for 3D viewer.
bool m_TextUpright[LAYER_CLASS_COUNT]

References m_AuxOrigin, m_BlindBuriedViaAllowed, m_boardThickness, m_CopperEdgeClearance, m_copperLayerCount, m_currentNetClassName, m_CurrentViaType, m_customDiffPair, m_customTrackWidth, m_customViaSize, m_DefaultFPTextItems, m_defaultZoneSettings, m_DiffPairDimensionsList, m_diffPairIndex, m_DimensionArrowLength, m_DimensionExtensionOffset, m_DimensionKeepTextAligned, m_DimensionPrecision, m_DimensionSuppressZeroes, m_DimensionTextPosition, m_DimensionUnitsFormat, m_DimensionUnitsMode, m_DrcExclusions, m_DRCSeverities, m_enabledLayers, m_GridOrigin, m_HasStackup, m_HoleClearance, m_HoleToHoleMin, m_internalNetClasses, m_LineThickness, m_MaxError, m_MicroViasAllowed, m_MicroViasMinDrill, m_MicroViasMinSize, m_MinClearance, m_MinThroughDrill, m_netClasses, m_SilkClearance, m_SolderMaskMargin, m_SolderMaskMinWidth, m_SolderPasteMargin, m_SolderPasteMarginRatio, m_stackup, m_TextItalic, m_TextSize, m_TextThickness, m_TextUpright, m_TrackMinWidth, m_trackWidthIndex, m_TrackWidthList, m_UseConnectedTrackWidth, m_useCustomDiffPair, m_useCustomTrackVia, m_ViasDimensionsList, m_viaSizeIndex, m_ViasMinAnnulus, m_ViasMinSize, m_ZoneFillVersion, and m_ZoneKeepExternalFillets.

Referenced by BOARD_DESIGN_SETTINGS(), and operator=().

◆ IsDefault()

bool JSON_SETTINGS::IsDefault ( const std::string &  aParamName)
inherited

Checks if the current state of a parameter matches its default value.

Parameters
aParamNameis the JSON path to the parameter
Returns
true if the given parameter is at its default value

Definition at line 324 of file json_settings.cpp.

325 {
326  for( const PARAM_BASE* param : m_params )
327  {
328  if( param->GetJsonPath() == aParamName )
329  return param->IsDefault();
330  }
331 
332  return false;
333 }
std::vector< PARAM_BASE * > m_params
The list of parameters (owned by this object)

References JSON_SETTINGS::m_params.

◆ IsLayerEnabled()

bool BOARD_DESIGN_SETTINGS::IsLayerEnabled ( PCB_LAYER_ID  aLayerId) const
inline

Test whether a given layer aLayerId is enabled.

Parameters
aLayerIdThe layer to be tested.
Returns
true if the layer is enabled.

Definition at line 604 of file board_design_settings.h.

605  {
606  if( aLayerId >= 0 && aLayerId < PCB_LAYER_ID_COUNT )
607  return m_enabledLayers[aLayerId];
608 
609  return false;
610  }
LSET m_enabledLayers
Bit-mask for layer enabling.

References PCB_LAYER_ID_COUNT.

Referenced by BOARD::IsLayerEnabled(), and BOARD::IsLayerVisible().

◆ IsReadOnly()

bool JSON_SETTINGS::IsReadOnly ( ) const
inlineinherited

◆ Load()

void JSON_SETTINGS::Load ( )
virtualinherited

Updates the parameters of this object based on the current JSON document contents.

Definition at line 87 of file json_settings.cpp.

88 {
89  for( auto param : m_params )
90  {
91  try
92  {
93  param->Load( this, m_resetParamsIfMissing );
94  }
95  catch( ... )
96  {
97  // Skip unreadable parameters in file
98  wxLogTrace( traceSettings, "param '%s' load err", param->GetJsonPath().c_str() );
99  }
100  }
101 }
std::vector< PARAM_BASE * > m_params
The list of parameters (owned by this object)
bool m_resetParamsIfMissing
Whether or not to set parameters to their default value if missing from JSON on Load()
const wxChar *const traceSettings
Flag to enable debug output of settings operations and management.

References JSON_SETTINGS::m_params, JSON_SETTINGS::m_resetParamsIfMissing, and traceSettings.

Referenced by COLOR_SETTINGS::CreateBuiltinColorSettings(), NESTED_SETTINGS::LoadFromFile(), JSON_SETTINGS::LoadFromFile(), LoadFromFile(), COLOR_SETTINGS::migrateSchema0to1(), and SETTINGS_MANAGER::SaveColorSettings().

◆ LoadFromFile()

bool BOARD_DESIGN_SETTINGS::LoadFromFile ( const wxString &  aDirectory = "")
overridevirtual

Loads the backing file from disk and then calls Load()

Parameters
aDirectoryis the path to the file
Returns
true if the file was found on disk and loaded or migrated

Reimplemented from JSON_SETTINGS.

Definition at line 793 of file board_design_settings.cpp.

794 {
795  bool ret = NESTED_SETTINGS::LoadFromFile( aDirectory );
796 
797  // A number of things won't have been translated by the PROJECT_FILE migration because of
798  // descoped objects required to decode this data. So, it will be in the legacy.pcbnew
799  // section and needs to be pulled out here
800 
801  PROJECT_FILE* project = dynamic_cast<PROJECT_FILE*>( GetParent() );
802 
803  if( !project )
804  return ret;
805 
806  bool migrated = false;
807 
808  auto drcName =
809  []( int aCode ) -> std::string
810  {
811  std::shared_ptr<DRC_ITEM> item = DRC_ITEM::Create( aCode );
812  wxString name = item->GetSettingsKey();
813  return std::string( name.ToUTF8() );
814  };
815 
816  std::string bp = "board.design_settings.rule_severities.";
817  std::string rs = "rule_severities.";
818 
819  if( OPT<bool> v =
820  project->Get<bool>( PointerFromString( bp + "legacy_no_courtyard_defined" ) ) )
821  {
822  if( *v )
823  ( *this )[PointerFromString( rs + drcName( DRCE_MISSING_COURTYARD ) )] = "error";
824  else
825  ( *this )[PointerFromString( rs + drcName( DRCE_MISSING_COURTYARD ) )] = "ignore";
826 
827  project->erase( PointerFromString( bp + "legacy_no_courtyard_defined" ) );
828  migrated = true;
829  }
830 
831  if( OPT<bool> v = project->Get<bool>( PointerFromString( bp + "legacy_courtyards_overlap" ) ) )
832  {
833  if( *v )
834  ( *this )[PointerFromString( rs + drcName( DRCE_OVERLAPPING_FOOTPRINTS ) )] = "error";
835  else
836  ( *this )[PointerFromString( rs + drcName( DRCE_OVERLAPPING_FOOTPRINTS ) )] = "ignore";
837 
838  project->erase( PointerFromString( bp + "legacy_courtyards_overlap" ) );
839  migrated = true;
840  }
841 
842  if( project->contains( "legacy" ) )
843  {
844  // This defaults to false for new boards, but version 5.1.x and prior kept the fillets
845  // so we do the same for legacy boards.
847 
848  project->at( "legacy" ).erase( "pcbnew" );
849  }
850 
851  // Now that we have everything, we need to load again
852  if( migrated )
853  Load();
854 
855  return ret;
856 }
static std::shared_ptr< DRC_ITEM > Create(int aErrorCode)
Constructs a DRC_ITEM for the given error code.
Definition: drc_item.cpp:245
JSON_SETTINGS * GetParent()
bool LoadFromFile(const wxString &aDirectory="") override
Loads the JSON document from the parent and then calls Load()
The backing store for a PROJECT, in JSON format.
Definition: project_file.h:64
const char * name
Definition: DXF_plotter.cpp:59
boost::optional< T > OPT
Definition: optional.h:7
static nlohmann::json::json_pointer PointerFromString(std::string aPath)
Builds a JSON pointer based on a given string.
virtual void Load()
Updates the parameters of this object based on the current JSON document contents.

References DRC_ITEM::Create(), DRCE_MISSING_COURTYARD, DRCE_OVERLAPPING_FOOTPRINTS, NESTED_SETTINGS::GetParent(), JSON_SETTINGS::Load(), NESTED_SETTINGS::LoadFromFile(), m_ZoneKeepExternalFillets, name, JSON_SETTINGS::PointerFromString(), and project.

◆ Migrate()

bool JSON_SETTINGS::Migrate ( )
inherited

Migrates the schema of this settings from the version in the file to the latest version.

Schema migration doesn't need to be used every time a setting is added! This is intended to be more of an "escape hatch" in the event that we decide to move settings around or make other changes to a settings file format that can't simply be handled by loading a new default

Returns
true if migration was successful

Definition at line 464 of file json_settings.cpp.

465 {
466  int filever = at( PointerFromString( "meta.version" ) ).get<int>();
467 
468  while( filever < m_schemaVersion )
469  {
470  if( !m_migrators.count( filever ) )
471  {
472  wxLogTrace( traceSettings, "Migrator missing for %s version %d!",
473  typeid( *this ).name(), filever );
474  return false;
475  }
476 
477  std::pair<int, std::function<bool()>> pair = m_migrators.at( filever );
478 
479  if( pair.second() )
480  {
481  wxLogTrace( traceSettings, "Migrated %s from %d to %d", typeid( *this ).name(),
482  filever, pair.first );
483  filever = pair.first;
484  ( *this )[PointerFromString( "meta.version" )] = filever;
485  }
486  else
487  {
488  wxLogTrace( traceSettings, "Migration failed for %s from %d to %d",
489  typeid( *this ).name(), filever, pair.first );
490  return false;
491  }
492  }
493 
494  return true;
495 }
std::map< int, std::pair< int, std::function< bool()> > > m_migrators
A map of starting schema version to a pair of <ending version, migrator function>
const wxChar *const traceSettings
Flag to enable debug output of settings operations and management.
static nlohmann::json::json_pointer PointerFromString(std::string aPath)
Builds a JSON pointer based on a given string.
int m_schemaVersion
Version of this settings schema.

References JSON_SETTINGS::m_migrators, JSON_SETTINGS::m_schemaVersion, JSON_SETTINGS::PointerFromString(), and traceSettings.

Referenced by NESTED_SETTINGS::LoadFromFile(), and JSON_SETTINGS::LoadFromFile().

◆ MigrateFromLegacy()

bool JSON_SETTINGS::MigrateFromLegacy ( wxConfigBase *  aLegacyConfig)
virtualinherited

Migrates from wxConfig to JSON-based configuration.

Should be implemented by any subclasses of JSON_SETTINGS that map to a legacy (wxConfig-based) config file.

Parameters
aLegacyConfigis a wxConfigBase holding a loaded configuration to migrate
Returns
true if migration was successful

Reimplemented in PCBNEW_SETTINGS, EESCHEMA_SETTINGS, APP_SETTINGS_BASE, COMMON_SETTINGS, PCB_CALCULATOR_SETTINGS, EDA_3D_VIEWER_SETTINGS, PROJECT_FILE, COLOR_SETTINGS, PROJECT_LOCAL_SETTINGS, SYMBOL_EDITOR_SETTINGS, GERBVIEW_SETTINGS, FOOTPRINT_EDITOR_SETTINGS, CVPCB_SETTINGS, BITMAP2CMP_SETTINGS, PL_EDITOR_SETTINGS, and KICAD_SETTINGS.

Definition at line 498 of file json_settings.cpp.

499 {
500  wxLogTrace( traceSettings,
501  "MigrateFromLegacy() not implemented for %s", typeid( *this ).name() );
502  return false;
503 }
const wxChar *const traceSettings
Flag to enable debug output of settings operations and management.

References traceSettings.

Referenced by JSON_SETTINGS::LoadFromFile().

◆ migrateSchema0to1()

bool BOARD_DESIGN_SETTINGS::migrateSchema0to1 ( )
private

Schema 0 to 1: default dimension precision changed in meaning. Previously it was an enum with the following meaning:

0: 0.01mm / 1 mil / 0.001 in 1: 0.001mm / 0.1 mil / 0.0001 in 2: 0.0001mm / 0.01 mil / 0.00001 in

Now it is indepenent of display units and is an integer meaning the number of digits displayed after the decimal point, so we have to migrate based on the default units.

The units is an integer with the following mapping:

0: Inches 1: Mils 2: Millimetres

Definition at line 742 of file board_design_settings.cpp.

743 {
761  nlohmann::json::json_pointer units_ptr( "/defaults/dimension_units" );
762  nlohmann::json::json_pointer precision_ptr( "/defaults/dimension_precision" );
763 
764  if( !( contains( units_ptr ) && contains( precision_ptr ) &&
765  at( units_ptr ).is_number_integer() &&
766  at( precision_ptr ).is_number_integer() ) )
767  {
768  // if either is missing or invalid, migration doesn't make sense
769  return true;
770  }
771 
772  int units = at( units_ptr ).get<int>();
773  int precision = at( precision_ptr ).get<int>();
774 
775  // The enum maps directly to precision if the units is mils
776  int extraDigits = 0;
777 
778  switch( units )
779  {
780  case 0: extraDigits = 3; break;
781  case 2: extraDigits = 2; break;
782  default: break;
783  }
784 
785  precision += extraDigits;
786 
787  ( *this )[precision_ptr] = precision;
788 
789  return true;
790 }
bool contains(const _Container &__container, _Value __value)
Returns true if the container contains the given value.
Definition: kicad_algo.h:81

References alg::contains().

Referenced by BOARD_DESIGN_SETTINGS().

◆ operator=()

BOARD_DESIGN_SETTINGS & BOARD_DESIGN_SETTINGS::operator= ( const BOARD_DESIGN_SETTINGS aOther)

Definition at line 651 of file board_design_settings.cpp.

652 {
653  initFromOther( aOther );
654  return *this;
655 }
void initFromOther(const BOARD_DESIGN_SETTINGS &aOther)

References initFromOther().

◆ PointerFromString()

nlohmann::json::json_pointer JSON_SETTINGS::PointerFromString ( std::string  aPath)
staticinherited

Builds a JSON pointer based on a given string.

Parameters
aPathis the path in the form "key1.key2.key3"
Returns
a JSON pointer that can be used to index into a JSON object

Definition at line 506 of file json_settings.cpp.

507 {
508  std::replace( aPath.begin(), aPath.end(), '.', '/' );
509  aPath.insert( 0, "/" );
510 
511  nlohmann::json::json_pointer p;
512 
513  try
514  {
515  p = nlohmann::json::json_pointer( aPath );
516  }
517  catch( ... )
518  {
519  wxASSERT_MSG( false, wxT( "Invalid pointer path in PointerFromString!" ) );
520  }
521 
522  return p;
523 }

Referenced by JSON_SETTINGS::fromLegacy(), JSON_SETTINGS::fromLegacyColor(), JSON_SETTINGS::fromLegacyString(), JSON_SETTINGS::GetJson(), JSON_SETTINGS::JSON_SETTINGS(), NESTED_SETTINGS::LoadFromFile(), JSON_SETTINGS::LoadFromFile(), LoadFromFile(), JSON_SETTINGS::Migrate(), EESCHEMA_SETTINGS::migrateBomSettings(), APP_SETTINGS_BASE::migrateFindReplace(), FOOTPRINT_EDITOR_SETTINGS::MigrateFromLegacy(), GERBVIEW_SETTINGS::MigrateFromLegacy(), SYMBOL_EDITOR_SETTINGS::MigrateFromLegacy(), PROJECT_FILE::MigrateFromLegacy(), EDA_3D_VIEWER_SETTINGS::MigrateFromLegacy(), PCB_CALCULATOR_SETTINGS::MigrateFromLegacy(), COMMON_SETTINGS::MigrateFromLegacy(), APP_SETTINGS_BASE::MigrateFromLegacy(), EESCHEMA_SETTINGS::MigrateFromLegacy(), PCBNEW_SETTINGS::MigrateFromLegacy(), SETTINGS_MANAGER::SaveColorSettings(), NESTED_SETTINGS::SaveToFile(), PROJECT_LOCAL_SETTINGS::SaveToFile(), PROJECT_FILE::SaveToFile(), JSON_SETTINGS::Set(), and JSON_SETTINGS::SetIfPresent().

◆ registerMigration()

void JSON_SETTINGS::registerMigration ( int  aOldSchemaVersion,
int  aNewSchemaVersion,
std::function< bool(void)>  aMigrator 
)
protectedinherited

Registers a migration from one schema version to another.

If the schema version in the file loaded from disk is less than the schema version of the JSON_SETTINGS class, migration functions will be called one after the other until the data is up-to-date.

Parameters
aOldSchemaVersionis the starting schema version for this migration
aNewSchemaVersionis the ending schema version for this migration
aMigratoris a function that performs the migration and returns true if successful

Definition at line 455 of file json_settings.cpp.

457 {
458  wxASSERT( aNewSchemaVersion > aOldSchemaVersion );
459  wxASSERT( aNewSchemaVersion <= m_schemaVersion );
460  m_migrators[aOldSchemaVersion] = std::make_pair( aNewSchemaVersion, aMigrator );
461 }
std::map< int, std::pair< int, std::function< bool()> > > m_migrators
A map of starting schema version to a pair of <ending version, migrator function>
int m_schemaVersion
Version of this settings schema.

References JSON_SETTINGS::m_migrators, and JSON_SETTINGS::m_schemaVersion.

Referenced by BOARD_DESIGN_SETTINGS(), COLOR_SETTINGS::COLOR_SETTINGS(), COMMON_SETTINGS::COMMON_SETTINGS(), EESCHEMA_SETTINGS::EESCHEMA_SETTINGS(), FOOTPRINT_EDITOR_SETTINGS::FOOTPRINT_EDITOR_SETTINGS(), and PROJECT_LOCAL_SETTINGS::PROJECT_LOCAL_SETTINGS().

◆ ReleaseNestedSettings()

void JSON_SETTINGS::ReleaseNestedSettings ( NESTED_SETTINGS aSettings)
inherited

Saves and frees a nested settings object, if it exists within this one.

Parameters
aSettingsis a pointer to a NESTED_SETTINGS that has already been added to this one

Definition at line 682 of file json_settings.cpp.

683 {
684  if( !aSettings )
685  return;
686 
687  auto it = std::find_if( m_nested_settings.begin(), m_nested_settings.end(),
688  [&aSettings]( const JSON_SETTINGS* aPtr ) {
689  return aPtr == aSettings;
690  } );
691 
692  if( it != m_nested_settings.end() )
693  {
694  wxLogTrace( traceSettings, "Flush and release %s", ( *it )->GetFilename() );
695  ( *it )->SaveToFile();
696  m_nested_settings.erase( it );
697  }
698 
699  aSettings->SetParent( nullptr );
700 }
void SetParent(JSON_SETTINGS *aParent, bool aLoadFromFile=true)
std::vector< NESTED_SETTINGS * > m_nested_settings
Nested settings files that live inside this one, if any.
const wxChar *const traceSettings
Flag to enable debug output of settings operations and management.

References JSON_SETTINGS::m_nested_settings, NESTED_SETTINGS::SetParent(), and traceSettings.

Referenced by ~BOARD_DESIGN_SETTINGS(), ERC_SETTINGS::~ERC_SETTINGS(), NESTED_SETTINGS::~NESTED_SETTINGS(), NET_SETTINGS::~NET_SETTINGS(), and SCHEMATIC_SETTINGS::~SCHEMATIC_SETTINGS().

◆ ResetToDefaults()

void JSON_SETTINGS::ResetToDefaults ( )
inherited

Resets all parameters to default values.

Does NOT write to file or update underlying JSON.

Definition at line 317 of file json_settings.cpp.

318 {
319  for( auto param : m_params )
320  param->SetDefault();
321 }
std::vector< PARAM_BASE * > m_params
The list of parameters (owned by this object)

References JSON_SETTINGS::m_params.

Referenced by EDA_3D_VIEWER::Process_Special_Functions(), PANEL_COMMON_SETTINGS::ResetPanel(), and PANEL_MOUSE_SETTINGS::ResetPanel().

◆ SaveToFile()

bool NESTED_SETTINGS::SaveToFile ( const wxString &  aDirectory = "",
bool  aForce = false 
)
overridevirtualinherited

Calls Store() and then saves the JSON document contents into the parent JSON_SETTINGS.

Parameters
aDirectoryis ignored
Returns
true if the document contents were updated

Reimplemented from JSON_SETTINGS.

Definition at line 112 of file nested_settings.cpp.

113 {
114  if( !m_parent )
115  return false;
116 
117  bool modified = Store();
118 
119  try
120  {
121  nlohmann::json patch =
122  nlohmann::json::diff( *this, ( *m_parent )[PointerFromString( m_path )] );
123  modified |= !patch.empty();
124  }
125  catch( ... )
126  {
127  modified = true;
128  }
129 
130  if( !modified && !aForce )
131  return false;
132 
133  try
134  {
135  ( *m_parent )[PointerFromString( m_path ) ].update( *this );
136 
137  wxLogTrace( traceSettings, "Stored NESTED_SETTINGS %s with schema %d",
139  }
140  catch( ... )
141  {
142  wxLogTrace( traceSettings, "NESTED_SETTINGS %s: Could not store to %s at %s",
144  }
145 
146  return modified;
147 }
virtual bool Store()
Stores the current parameters into the JSON document represented by this object Note: this doesn't do...
wxString GetFilename() const
Definition: json_settings.h:66
nlohmann::json json
Definition: gerbview.cpp:41
wxString m_filename
The filename (not including path) of this settings file (inicode)
JSON_SETTINGS * m_parent
A pointer to the parent object to load and store from.
std::string m_path
The path (in pointer format) of where to store this document in the parent.
const wxChar *const traceSettings
Flag to enable debug output of settings operations and management.
static nlohmann::json::json_pointer PointerFromString(std::string aPath)
Builds a JSON pointer based on a given string.
int m_schemaVersion
Version of this settings schema.

References JSON_SETTINGS::GetFilename(), JSON_SETTINGS::m_filename, NESTED_SETTINGS::m_parent, NESTED_SETTINGS::m_path, JSON_SETTINGS::m_schemaVersion, JSON_SETTINGS::PointerFromString(), JSON_SETTINGS::Store(), and traceSettings.

◆ Set() [1/3]

template<typename ValueType >
void JSON_SETTINGS::Set ( const std::string &  aPath,
ValueType  aVal 
)
inlineinherited

Stores a value into the JSON document Will throw an exception if ValueType isn't something that the library can handle.

Template Parameters
ValueTypeis the type to store
Parameters
aPathis a path to store in the form "key1.key2.key3"
aValis the value to store

Definition at line 157 of file json_settings.h.

158  {
159  ( *this )[PointerFromString( aPath ) ] = aVal;
160  }
static nlohmann::json::json_pointer PointerFromString(std::string aPath)
Builds a JSON pointer based on a given string.

References JSON_SETTINGS::PointerFromString().

Referenced by COLOR_MAP_PARAM::Store(), PARAM< wxString >::Store(), PARAM_PATH::Store(), PARAM_ENUM< EnumType >::Store(), PARAM_LAMBDA< nlohmann::json >::Store(), PARAM_SCALED< ValueType >::Store(), PARAM_LIST< wxString >::Store(), PARAM_PATH_LIST::Store(), PARAM_MAP< Value >::Store(), and PARAM_WXSTRING_MAP::Store().

◆ Set() [2/3]

template<>
void JSON_SETTINGS::Set ( const std::string &  aPath,
wxString  aVal 
)
inherited

◆ Set() [3/3]

template<>
void JSON_SETTINGS::Set ( const std::string &  aPath,
wxString  aVal 
)
inherited

Definition at line 714 of file json_settings.cpp.

715 {
716  ( *this )[PointerFromString( std::move( aPath ) ) ] = aVal.ToUTF8();
717 }
static nlohmann::json::json_pointer PointerFromString(std::string aPath)
Builds a JSON pointer based on a given string.

References JSON_SETTINGS::PointerFromString().

◆ SetBoardThickness()

void BOARD_DESIGN_SETTINGS::SetBoardThickness ( int  aThickness)
inline

Definition at line 628 of file board_design_settings.h.

628 { m_boardThickness = aThickness; }
int m_boardThickness
Board thickness for 3D viewer.

Referenced by LEGACY_PLUGIN::loadGENERAL(), and PANEL_SETUP_BOARD_STACKUP::TransferDataFromWindow().

◆ SetCopperEdgeClearance()

void BOARD_DESIGN_SETTINGS::SetCopperEdgeClearance ( int  aDistance)
Parameters
aValueThe minimum distance between copper items and board edges.

Definition at line 1043 of file board_design_settings.cpp.

1044 {
1045  m_CopperEdgeClearance = aDistance;
1046 }

References m_CopperEdgeClearance.

Referenced by PCB_EDIT_FRAME::OpenProjectFiles(), and PANEL_SETUP_CONSTRAINTS::TransferDataFromWindow().

◆ SetCopperLayerCount()

void BOARD_DESIGN_SETTINGS::SetCopperLayerCount ( int  aNewLayerCount)

Set the copper layer count to aNewLayerCount.

Parameters
aNewLayerCountThe new number of enabled copper layers.

Definition at line 1055 of file board_design_settings.cpp.

1056 {
1057  m_copperLayerCount = aNewLayerCount;
1058 
1059  // Update only enabled copper layers mask
1060  m_enabledLayers &= ~LSET::AllCuMask();
1061 
1062  if( aNewLayerCount > 0 )
1063  m_enabledLayers |= LSET::AllCuMask( aNewLayerCount );
1064 }
static LSET AllCuMask(int aCuLayerCount=MAX_CU_LAYERS)
Return a mask holding the requested number of Cu PCB_LAYER_IDs.
Definition: lset.cpp:750
LSET is a set of PCB_LAYER_IDs.
int m_copperLayerCount
Number of copper layers for this design.
LSET m_enabledLayers
Bit-mask for layer enabling.

References LSET::AllCuMask(), m_copperLayerCount, and m_enabledLayers.

Referenced by BOARD_DESIGN_SETTINGS(), and BOARD::SetCopperLayerCount().

◆ SetCustomDiffPairGap()

void BOARD_DESIGN_SETTINGS::SetCustomDiffPairGap ( int  aGap)
inline

Sets custom gap for differential pairs (i.e.

not available in netclasses or preset list).

Parameters
aGapis the new gap.

Definition at line 490 of file board_design_settings.h.

491  {
492  m_customDiffPair.m_Gap = aGap;
493  }
DIFF_PAIR_DIMENSION m_customDiffPair

Referenced by ROUTER_TOOL::DpDimensionsDialog(), and BOARD::SynchronizeNetsAndNetClasses().

◆ SetCustomDiffPairViaGap()

void BOARD_DESIGN_SETTINGS::SetCustomDiffPairViaGap ( int  aGap)
inline

Sets custom via gap for differential pairs (i.e.

not available in netclasses or preset list).

Parameters
aGapis the new gap. Specify 0 to use the DiffPairGap for vias as well.

Definition at line 510 of file board_design_settings.h.

511  {
512  m_customDiffPair.m_ViaGap = aGap;
513  }
DIFF_PAIR_DIMENSION m_customDiffPair

Referenced by ROUTER_TOOL::DpDimensionsDialog(), and BOARD::SynchronizeNetsAndNetClasses().

◆ SetCustomDiffPairWidth()

void BOARD_DESIGN_SETTINGS::SetCustomDiffPairWidth ( int  aWidth)
inline

Sets custom track width for differential pairs (i.e.

not available in netclasses or preset list).

Parameters
aDrillis the new track wdith.

Definition at line 472 of file board_design_settings.h.

473  {
474  m_customDiffPair.m_Width = aWidth;
475  }
DIFF_PAIR_DIMENSION m_customDiffPair

Referenced by ROUTER_TOOL::DpDimensionsDialog(), and BOARD::SynchronizeNetsAndNetClasses().

◆ SetCustomTrackWidth()

void BOARD_DESIGN_SETTINGS::SetCustomTrackWidth ( int  aWidth)
inline

Sets custom width for track (i.e.

not available in netclasses or preset list).

To have it returned with GetCurrentTrackWidth() you need to enable custom track & via sizes with UseCustomTrackViaSize().

Parameters
aWidthis the new track width.

Definition at line 351 of file board_design_settings.h.

352  {
353  m_customTrackWidth = aWidth;
354  }

Referenced by BOARD::SynchronizeNetsAndNetClasses(), and DIALOG_TRACK_VIA_SIZE::TransferDataFromWindow().

◆ SetCustomViaDrill()

void BOARD_DESIGN_SETTINGS::SetCustomViaDrill ( int  aDrill)
inline

Sets custom size for via drill (i.e.

not available in netclasses or preset list).

To have it returned with GetCurrentViaDrill() you need to enable custom track & via sizes with UseCustomTrackViaSize().

Parameters
aDrillis the new drill size.

Definition at line 422 of file board_design_settings.h.

423  {
424  m_customViaSize.m_Drill = aDrill;
425  }

Referenced by BOARD::SynchronizeNetsAndNetClasses(), and DIALOG_TRACK_VIA_SIZE::TransferDataFromWindow().

◆ SetCustomViaSize()

void BOARD_DESIGN_SETTINGS::SetCustomViaSize ( int  aSize)
inline

Set custom size for via diameter (i.e.

not available in netclasses or preset list).

To have it returned with GetCurrentViaSize() you need to enable custom track & via sizes with UseCustomTrackViaSize().

Parameters
aSizeis the new drill diameter.

Definition at line 394 of file board_design_settings.h.

395  {
396  m_customViaSize.m_Diameter = aSize;
397  }

Referenced by BOARD::SynchronizeNetsAndNetClasses(), and DIALOG_TRACK_VIA_SIZE::TransferDataFromWindow().

◆ SetDefaultZoneSettings()

void BOARD_DESIGN_SETTINGS::SetDefaultZoneSettings ( const ZONE_SETTINGS aSettings)
inline

Definition at line 259 of file board_design_settings.h.

260  {
261  m_defaultZoneSettings = aSettings;
262  }
ZONE_SETTINGS m_defaultZoneSettings
The default settings that will be used for new zones.

Referenced by PCB_BASE_FRAME::SetZoneSettings(), and BOARD::SetZoneSettings().

◆ SetDiffPairIndex()

void BOARD_DESIGN_SETTINGS::SetDiffPairIndex ( unsigned  aIndex)
Parameters
aIndexis the diff pair dimensions list index to set.

Definition at line 970 of file board_design_settings.cpp.

971 {
972  m_diffPairIndex = std::min( aIndex, (unsigned) 8 );
973  m_useCustomDiffPair = false;
974 }

References m_diffPairIndex, and m_useCustomDiffPair.

Referenced by DIFF_PAIR_MENU::eventHandler(), BOARD_EDITOR_CONTROL::TrackWidthDec(), and BOARD_EDITOR_CONTROL::TrackWidthInc().

◆ SetEnabledLayers()

void BOARD_DESIGN_SETTINGS::SetEnabledLayers ( LSET  aMask)

Change the bit-mask of enabled layers to aMask.

Parameters
aMask= The new bit-mask of enabled layers.

Definition at line 1067 of file board_design_settings.cpp.

1068 {
1069  // Back and front layers are always enabled.
1070  aMask.set( B_Cu ).set( F_Cu );
1071 
1072  m_enabledLayers = aMask;
1073 
1074  // update m_CopperLayerCount to ensure its consistency with m_EnabledLayers
1075  m_copperLayerCount = ( aMask & LSET::AllCuMask() ).count();
1076 }
static LSET AllCuMask(int aCuLayerCount=MAX_CU_LAYERS)
Return a mask holding the requested number of Cu PCB_LAYER_IDs.
Definition: lset.cpp:750
int m_copperLayerCount
Number of copper layers for this design.
LSET m_enabledLayers
Bit-mask for layer enabling.

References LSET::AllCuMask(), B_Cu, F_Cu, m_copperLayerCount, and m_enabledLayers.

Referenced by BOARD::SetEnabledLayers().

◆ SetFilename()

void JSON_SETTINGS::SetFilename ( const wxString &  aFilename)
inlineinherited

Definition at line 70 of file json_settings.h.

70 { m_filename = aFilename; }
wxString m_filename
The filename (not including path) of this settings file (inicode)

References JSON_SETTINGS::m_filename.

Referenced by SETTINGS_MANAGER::SaveProjectAs(), and SETTINGS_MANAGER::SaveProjectCopy().

◆ SetIfPresent() [1/4]

bool JSON_SETTINGS::SetIfPresent ( const nlohmann::json aObj,
const std::string &  aPath,
wxString &  aTarget 
)
staticinherited

Sets the given string if the given key/path is present.

Parameters
aObjis the source object
aTargetis the storage destination
Returns
True if set, false if not

Definition at line 526 of file json_settings.cpp.

528 {
529  nlohmann::json::json_pointer ptr = PointerFromString( aPath );
530 
531  if( aObj.contains( ptr ) && aObj.at( ptr ).is_string() )
532  {
533  aTarget = aObj.at( ptr ).get<wxString>();
534  return true;
535  }
536 
537  return false;
538 }
static nlohmann::json::json_pointer PointerFromString(std::string aPath)
Builds a JSON pointer based on a given string.

References JSON_SETTINGS::PointerFromString().

Referenced by FOOTPRINT_EDITOR_SETTINGS::FOOTPRINT_EDITOR_SETTINGS(), and PROJECT_LOCAL_SETTINGS::PROJECT_LOCAL_SETTINGS().

◆ SetIfPresent() [2/4]

bool JSON_SETTINGS::SetIfPresent ( const nlohmann::json aObj,
const std::string &  aPath,
bool &  aTarget 
)
staticinherited

Sets the given bool if the given key/path is present.

Parameters
aObjis the source object
aTargetis the storage destination
Returns
True if set, false if not

Definition at line 541 of file json_settings.cpp.

543 {
544  nlohmann::json::json_pointer ptr = PointerFromString( aPath );
545 
546  if( aObj.contains( ptr ) && aObj.at( ptr ).is_boolean() )
547  {
548  aTarget = aObj.at( ptr ).get<bool>();
549  return true;
550  }
551 
552  return false;
553 }
static nlohmann::json::json_pointer PointerFromString(std::string aPath)
Builds a JSON pointer based on a given string.

References JSON_SETTINGS::PointerFromString().

◆ SetIfPresent() [3/4]

bool JSON_SETTINGS::SetIfPresent ( const nlohmann::json aObj,
const std::string &  aPath,
int &  aTarget 
)
staticinherited

Sets the given int if the given key/path is present.

Parameters
aObjis the source object
aTargetis the storage destination
Returns
True if set, false if not

Definition at line 556 of file json_settings.cpp.

558 {
559  nlohmann::json::json_pointer ptr = PointerFromString( aPath );
560 
561  if( aObj.contains( ptr ) && aObj.at( ptr ).is_number_integer() )
562  {
563  aTarget = aObj.at( ptr ).get<int>();
564  return true;
565  }
566 
567  return false;
568 }
static nlohmann::json::json_pointer PointerFromString(std::string aPath)
Builds a JSON pointer based on a given string.

References JSON_SETTINGS::PointerFromString().

◆ SetIfPresent() [4/4]

bool JSON_SETTINGS::SetIfPresent ( const nlohmann::json aObj,
const std::string &  aPath,
unsigned int &  aTarget 
)
staticinherited

Sets the given unsigned int if the given key/path is present.

Parameters
aObjis the source object
aTargetis the storage destination
Returns
True if set, false if not

Definition at line 571 of file json_settings.cpp.

573 {
574  nlohmann::json::json_pointer ptr = PointerFromString( aPath );
575 
576  if( aObj.contains( ptr ) && aObj.at( ptr ).is_number_unsigned() )
577  {
578  aTarget = aObj.at( ptr ).get<unsigned int>();
579  return true;
580  }
581 
582  return false;
583 }
static nlohmann::json::json_pointer PointerFromString(std::string aPath)
Builds a JSON pointer based on a given string.

References JSON_SETTINGS::PointerFromString().

◆ SetLegacyFilename()

void JSON_SETTINGS::SetLegacyFilename ( const wxString &  aFilename)
inlineinherited

Definition at line 74 of file json_settings.h.

74 { m_legacy_filename = aFilename; }
wxString m_legacy_filename
The filename of the wxConfig legacy file (if different from m_filename)

References JSON_SETTINGS::m_legacy_filename.

Referenced by SYMBOL_EDITOR_SETTINGS::SYMBOL_EDITOR_SETTINGS().

◆ SetManager()

void JSON_SETTINGS::SetManager ( SETTINGS_MANAGER aManager)
inlineinherited

Definition at line 197 of file json_settings.h.

198  {
199  m_manager = aManager;
200  }
SETTINGS_MANAGER * m_manager
A pointer to the settings manager managing this file (may be null)

References JSON_SETTINGS::m_manager.

◆ SetMinHoleSeparation()

void BOARD_DESIGN_SETTINGS::SetMinHoleSeparation ( int  aDistance)
Parameters
aValueThe minimum distance between the edges of two holes or 0 to disable hole-to-hole separation checking.

Definition at line 1037 of file board_design_settings.cpp.

1038 {
1039  m_HoleToHoleMin = aDistance;
1040 }

References m_HoleToHoleMin.

Referenced by PANEL_SETUP_CONSTRAINTS::TransferDataFromWindow().

◆ SetNetClasses()

void BOARD_DESIGN_SETTINGS::SetNetClasses ( NETCLASSES aNetClasses)
inline

Definition at line 246 of file board_design_settings.h.

247  {
248  if( aNetClasses )
249  m_netClasses = aNetClasses;
250  else
252  }
NETCLASSES m_internalNetClasses
Net classes that are loaded from the board file before these were stored in the project.
NETCLASSES * m_netClasses
This will point to m_internalNetClasses until it is repointed to the project after load.

References m_internalNetClasses.

Referenced by BOARD::SetProject().

◆ SetParent()

void NESTED_SETTINGS::SetParent ( JSON_SETTINGS aParent,
bool  aLoadFromFile = true 
)
inherited

Definition at line 150 of file nested_settings.cpp.

151 {
152  m_parent = aParent;
153 
154  if( m_parent )
155  {
156  m_parent->AddNestedSettings( this );
157 
158  // In case we were created after the parent's ctor
159  if( aLoadFromFile )
160  LoadFromFile();
161  }
162 }
bool LoadFromFile(const wxString &aDirectory="") override
Loads the JSON document from the parent and then calls Load()
void AddNestedSettings(NESTED_SETTINGS *aSettings)
Transfers ownership of a given NESTED_SETTINGS to this object.
JSON_SETTINGS * m_parent
A pointer to the parent object to load and store from.

References JSON_SETTINGS::AddNestedSettings(), NESTED_SETTINGS::LoadFromFile(), and NESTED_SETTINGS::m_parent.

Referenced by BOARD::ClearProject(), NESTED_SETTINGS::NESTED_SETTINGS(), and JSON_SETTINGS::ReleaseNestedSettings().

◆ SetReadOnly()

void JSON_SETTINGS::SetReadOnly ( bool  aReadOnly)
inlineinherited

Definition at line 77 of file json_settings.h.

77 { m_writeFile = !aReadOnly; }
bool m_writeFile
Whether or not the backing store file should be written.

References JSON_SETTINGS::m_writeFile.

Referenced by PANEL_COLOR_SETTINGS::OnThemeChanged().

◆ SetSilkClearance()

void BOARD_DESIGN_SETTINGS::SetSilkClearance ( int  aDistance)

Set the minimum distance between silk items to aValue.

Note
Compound graphics within a single footprint or on the board are not checked, but distances between text and between graphics from different footprints are.
Parameters
aValueThe minimum distance between silk items.

Definition at line 1049 of file board_design_settings.cpp.

1050 {
1051  m_SilkClearance = aDistance;
1052 }

References m_SilkClearance.

◆ SetTrackWidthIndex()

void BOARD_DESIGN_SETTINGS::SetTrackWidthIndex ( unsigned  aIndex)

◆ SetViaSizeIndex()

void BOARD_DESIGN_SETTINGS::SetViaSizeIndex ( unsigned  aIndex)

◆ Store()

bool JSON_SETTINGS::Store ( )
virtualinherited

Stores the current parameters into the JSON document represented by this object Note: this doesn't do any writing to disk; that's handled by SETTINGS_MANAGER.

Returns
true if any part of the JSON document was updated

Definition at line 303 of file json_settings.cpp.

304 {
305  bool modified = false;
306 
307  for( auto param : m_params )
308  {
309  modified |= !param->MatchesFile( this );
310  param->Store( this );
311  }
312 
313  return modified;
314 }
std::vector< PARAM_BASE * > m_params
The list of parameters (owned by this object)

References JSON_SETTINGS::m_params.

Referenced by PANEL_FP_EDITOR_COLOR_SETTINGS::PANEL_FP_EDITOR_COLOR_SETTINGS(), SETTINGS_MANAGER::SaveColorSettings(), NESTED_SETTINGS::SaveToFile(), and JSON_SETTINGS::SaveToFile().

◆ UseCustomDiffPairDimensions() [1/2]

void BOARD_DESIGN_SETTINGS::UseCustomDiffPairDimensions ( bool  aEnabled)
inline

Enables/disables custom differential pair dimensions.

Parameters
aEnableddecides if custom settings should be used for new differential pairs.

Definition at line 528 of file board_design_settings.h.

529  {
530  m_useCustomDiffPair = aEnabled;
531  }

Referenced by DIFF_PAIR_MENU::eventHandler(), BOARD_EDITOR_CONTROL::TrackWidthDec(), BOARD_EDITOR_CONTROL::TrackWidthInc(), and DIFF_PAIR_MENU::update().

◆ UseCustomDiffPairDimensions() [2/2]

bool BOARD_DESIGN_SETTINGS::UseCustomDiffPairDimensions ( ) const
inline
Returns
True if custom sizes of diff pairs are enabled, false otherwise.

Definition at line 536 of file board_design_settings.h.

537  {
538  return m_useCustomDiffPair;
539  }

References m_useCustomDiffPair.

◆ UseCustomTrackViaSize() [1/2]

void BOARD_DESIGN_SETTINGS::UseCustomTrackViaSize ( bool  aEnabled)
inline

◆ UseCustomTrackViaSize() [2/2]

bool BOARD_DESIGN_SETTINGS::UseCustomTrackViaSize ( ) const
inline
Returns
True if custom sizes of tracks & vias are enabled, false otherwise.

Definition at line 451 of file board_design_settings.h.

452  {
453  return m_useCustomTrackVia;
454  }

References m_useCustomTrackVia.

◆ UseNetClassDiffPair()

bool BOARD_DESIGN_SETTINGS::UseNetClassDiffPair ( ) const
inline

Return true if netclass values should be used to obtain appropriate diff pair dimensions.

Definition at line 299 of file board_design_settings.h.

300  {
301  return ( m_diffPairIndex == 0 && !m_useCustomDiffPair );
302  }

Referenced by PNS_KICAD_IFACE_BASE::ImportSizes().

◆ UseNetClassTrack()

bool BOARD_DESIGN_SETTINGS::UseNetClassTrack ( ) const
inline

Return true if netclass values should be used to obtain appropriate track width.

Definition at line 283 of file board_design_settings.h.

284  {
285  return ( m_trackWidthIndex == 0 && !m_useCustomTrackVia );
286  }

Referenced by PNS_KICAD_IFACE_BASE::ImportSizes().

◆ UseNetClassVia()

bool BOARD_DESIGN_SETTINGS::UseNetClassVia ( ) const
inline

Return true if netclass values should be used to obtain appropriate via size.

Definition at line 291 of file board_design_settings.h.

292  {
293  return ( m_viaSizeIndex == 0 && !m_useCustomTrackVia );
294  }

Referenced by ROUTER_TOOL::handleLayerSwitch(), and PNS_KICAD_IFACE_BASE::ImportSizes().

Member Data Documentation

◆ m_AuxOrigin

◆ m_BlindBuriedViaAllowed

◆ m_boardThickness

int BOARD_DESIGN_SETTINGS::m_boardThickness
private

Board thickness for 3D viewer.

Definition at line 781 of file board_design_settings.h.

Referenced by BOARD_DESIGN_SETTINGS(), GetBoardThickness(), and initFromOther().

◆ m_CopperEdgeClearance

◆ m_copperLayerCount

int BOARD_DESIGN_SETTINGS::m_copperLayerCount
private

Number of copper layers for this design.

Definition at line 777 of file board_design_settings.h.

Referenced by GetCopperLayerCount(), initFromOther(), SetCopperLayerCount(), and SetEnabledLayers().

◆ m_createIfDefault

bool JSON_SETTINGS::m_createIfDefault
protectedinherited

Whether or not the backing store file should be created if all parameters are still at their default values.

Ignored if m_createIfMissing is false or m_writeFile is false.

Definition at line 315 of file json_settings.h.

Referenced by JSON_SETTINGS::SaveToFile().

◆ m_createIfMissing

bool JSON_SETTINGS::m_createIfMissing
protectedinherited

Whether or not the backing store file should be created it if doesn't exist.

Definition at line 309 of file json_settings.h.

Referenced by JSON_SETTINGS::SaveToFile().

◆ m_currentNetClassName

wxString BOARD_DESIGN_SETTINGS::m_currentNetClassName
private

Current net class name used to display netclass info.

This is also the last used netclass after starting a track.

Definition at line 785 of file board_design_settings.h.

Referenced by GetCurrentMicroViaDrill(), GetCurrentMicroViaSize(), GetCurrentNetClassName(), and initFromOther().

◆ m_CurrentViaType

VIATYPE BOARD_DESIGN_SETTINGS::m_CurrentViaType

(VIA_BLIND_BURIED, VIA_THROUGH, VIA_MICROVIA)

Definition at line 678 of file board_design_settings.h.

Referenced by BOARD_DESIGN_SETTINGS(), and initFromOther().

◆ m_customDiffPair

DIFF_PAIR_DIMENSION BOARD_DESIGN_SETTINGS::m_customDiffPair
private

◆ m_customTrackWidth

int BOARD_DESIGN_SETTINGS::m_customTrackWidth
private

◆ m_customViaSize

VIA_DIMENSION BOARD_DESIGN_SETTINGS::m_customViaSize
private

◆ m_DefaultFPTextItems

◆ m_defaultZoneSettings

ZONE_SETTINGS BOARD_DESIGN_SETTINGS::m_defaultZoneSettings
private

The default settings that will be used for new zones.

Definition at line 800 of file board_design_settings.h.

Referenced by BOARD_DESIGN_SETTINGS(), GetDefaultZoneSettings(), and initFromOther().

◆ m_deleteLegacyAfterMigration

bool JSON_SETTINGS::m_deleteLegacyAfterMigration
protectedinherited

Whether or not to delete legacy file after migration.

Definition at line 321 of file json_settings.h.

Referenced by JSON_SETTINGS::LoadFromFile(), and PROJECT_FILE::PROJECT_FILE().

◆ m_DiffPairDimensionsList

◆ m_diffPairIndex

unsigned BOARD_DESIGN_SETTINGS::m_diffPairIndex
private

◆ m_DimensionArrowLength

◆ m_DimensionExtensionOffset

◆ m_DimensionKeepTextAligned

◆ m_DimensionPrecision

int BOARD_DESIGN_SETTINGS::m_DimensionPrecision

◆ m_DimensionSuppressZeroes

◆ m_DimensionTextPosition

◆ m_DimensionUnitsFormat

◆ m_DimensionUnitsMode

◆ m_DRCEngine

◆ m_DrcExclusions

std::set<wxString> BOARD_DESIGN_SETTINGS::m_DrcExclusions

◆ m_DRCSeverities

◆ m_enabledLayers

LSET BOARD_DESIGN_SETTINGS::m_enabledLayers
private

Bit-mask for layer enabling.

Definition at line 779 of file board_design_settings.h.

Referenced by BOARD_DESIGN_SETTINGS(), GetEnabledLayers(), initFromOther(), SetCopperLayerCount(), and SetEnabledLayers().

◆ m_filename

◆ m_GridOrigin

◆ m_HasStackup

◆ m_HoleClearance

◆ m_HoleToHoleMin

◆ m_internalNetClasses

NETCLASSES BOARD_DESIGN_SETTINGS::m_internalNetClasses
private

Net classes that are loaded from the board file before these were stored in the project.

Definition at line 794 of file board_design_settings.h.

Referenced by BOARD_DESIGN_SETTINGS(), initFromOther(), and SetNetClasses().

◆ m_legacy_filename

wxString JSON_SETTINGS::m_legacy_filename
protectedinherited

The filename of the wxConfig legacy file (if different from m_filename)

Definition at line 297 of file json_settings.h.

Referenced by JSON_SETTINGS::LoadFromFile(), and JSON_SETTINGS::SetLegacyFilename().

◆ m_LineThickness

◆ m_location

SETTINGS_LOC JSON_SETTINGS::m_location
protectedinherited

The location of this settings file (.

See also
SETTINGS_LOC)

Definition at line 300 of file json_settings.h.

Referenced by JSON_SETTINGS::GetLocation().

◆ m_manager

SETTINGS_MANAGER* JSON_SETTINGS::m_manager
protectedinherited

A pointer to the settings manager managing this file (may be null)

Definition at line 330 of file json_settings.h.

Referenced by FOOTPRINT_EDITOR_SETTINGS::migrateSchema0to1(), COLOR_SETTINGS::migrateSchema0to1(), and JSON_SETTINGS::SetManager().

◆ m_MaxError

◆ m_MicroViasAllowed

◆ m_MicroViasMinDrill

◆ m_MicroViasMinSize

◆ m_migrators

std::map<int, std::pair<int, std::function<bool()> > > JSON_SETTINGS::m_migrators
protectedinherited

A map of starting schema version to a pair of <ending version, migrator function>

Definition at line 336 of file json_settings.h.

Referenced by JSON_SETTINGS::Migrate(), and JSON_SETTINGS::registerMigration().

◆ m_MinClearance

◆ m_MinThroughDrill

◆ m_nested_settings

std::vector<NESTED_SETTINGS*> JSON_SETTINGS::m_nested_settings
protectedinherited

Nested settings files that live inside this one, if any.

Definition at line 306 of file json_settings.h.

Referenced by JSON_SETTINGS::AddNestedSettings(), JSON_SETTINGS::LoadFromFile(), JSON_SETTINGS::ReleaseNestedSettings(), and JSON_SETTINGS::SaveToFile().

◆ m_netClasses

NETCLASSES* BOARD_DESIGN_SETTINGS::m_netClasses
private

This will point to m_internalNetClasses until it is repointed to the project after load.

Definition at line 797 of file board_design_settings.h.

Referenced by BOARD_DESIGN_SETTINGS(), GetNetClasses(), and initFromOther().

◆ m_Pad_Master

◆ m_params

◆ m_parent

◆ m_path

std::string NESTED_SETTINGS::m_path
protectedinherited

The path (in pointer format) of where to store this document in the parent.

Definition at line 65 of file nested_settings.h.

Referenced by NESTED_SETTINGS::LoadFromFile(), and NESTED_SETTINGS::SaveToFile().

◆ m_preserved_paths

std::vector<nlohmann::json::json_pointer> JSON_SETTINGS::m_preserved_paths
protectedinherited

A list of JSON pointers that are preserved during a read-update-write to disk.

Definition at line 333 of file json_settings.h.

◆ m_resetParamsIfMissing

bool JSON_SETTINGS::m_resetParamsIfMissing
protectedinherited

Whether or not to set parameters to their default value if missing from JSON on Load()

Definition at line 324 of file json_settings.h.

Referenced by BOARD_DESIGN_SETTINGS(), and JSON_SETTINGS::Load().

◆ m_schemaVersion

int JSON_SETTINGS::m_schemaVersion
protectedinherited

◆ m_SilkClearance

◆ m_SolderMaskMargin

◆ m_SolderMaskMinWidth

◆ m_SolderPasteMargin

◆ m_SolderPasteMarginRatio

◆ m_stackup

BOARD_STACKUP BOARD_DESIGN_SETTINGS::m_stackup
private

the description of layers stackup, for board fabrication only physical layers are in layers stackup.

It includes not only layers enabled for the board edition, but also dielectric layers

Definition at line 791 of file board_design_settings.h.

Referenced by GetStackupDescriptor(), and initFromOther().

◆ m_TextItalic

◆ m_TextSize

◆ m_TextThickness

◆ m_TextUpright

◆ m_TrackMinWidth

◆ m_trackWidthIndex

unsigned BOARD_DESIGN_SETTINGS::m_trackWidthIndex
private

◆ m_TrackWidthList

◆ m_UseConnectedTrackWidth

◆ m_useCustomDiffPair

◆ m_useCustomTrackVia

◆ m_ViasDimensionsList

◆ m_viaSizeIndex

unsigned BOARD_DESIGN_SETTINGS::m_viaSizeIndex
private

◆ m_ViasMinAnnulus

◆ m_ViasMinSize

◆ m_writeFile

bool JSON_SETTINGS::m_writeFile
protectedinherited

◆ m_ZoneFillVersion

int BOARD_DESIGN_SETTINGS::m_ZoneFillVersion

Option to select different fill algorithms.

There are currently two supported values: 5:

  • Use thick outlines around filled polygons (gives smoothest shape but at the expense of processing time and slight infidelity when exporting)
  • Use zone outline when knocking out higher-priority zones (just wrong, but mimics legacy behavior. 6:
  • No thick outline.
  • Use filled areas when knocking out higher-priority zones.

Definition at line 711 of file board_design_settings.h.

Referenced by BOARD_DESIGN_SETTINGS(), ZONE_FILLER::buildCopperItemClearances(), ZONE_FILLER::Fill(), initFromOther(), PCB_PARSER::parseSetup(), PANEL_SETUP_CONSTRAINTS::TransferDataFromWindow(), and PANEL_SETUP_CONSTRAINTS::TransferDataToWindow().

◆ m_ZoneKeepExternalFillets


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