20#include <magic_enum.hpp>
53 m_NetSettings = std::make_shared<NET_SETTINGS>(
nullptr,
"" );
359 [&]() -> nlohmann::json
361 nlohmann::json ret = {};
365 wxString
name = item.GetSettingsKey();
366 int code = item.GetErrorCode();
376 [&](
const nlohmann::json& aJson )
378 if( !aJson.is_object() )
386 if( aJson.contains(
"hole_near_hole" ) )
391 wxString
name = item.GetSettingsKey();
392 std::string key(
name.ToUTF8() );
394 if( aJson.contains( key ) )
400 [&]() -> nlohmann::json
402 nlohmann::json js = nlohmann::json::array();
405 js.push_back( exclusion );
409 [&](
const nlohmann::json& aObj )
413 if( !aObj.is_array() )
416 for(
const nlohmann::json& entry : aObj )
418 if( entry.is_object() )
430 [&]() -> nlohmann::json
432 nlohmann::json js = nlohmann::json::array();
439 [&](
const nlohmann::json& aJson )
441 if( !aJson.is_array() )
446 for(
const nlohmann::json& entry : aJson )
457 [&]() -> nlohmann::json
459 nlohmann::json js = nlohmann::json::array();
463 nlohmann::json entry = {};
468 js.push_back( entry );
473 [&](
const nlohmann::json& aObj )
475 if( !aObj.is_array() )
480 for(
const nlohmann::json& entry : aObj )
482 if( entry.empty() || !entry.is_object() )
485 if( !entry.contains(
"diameter" ) || !entry.contains(
"drill" ) )
488 int diameter =
pcbIUScale.mmToIU( entry[
"diameter"].get<double>() );
489 int drill =
pcbIUScale.mmToIU( entry[
"drill"].get<double>() );
498 [&]() -> nlohmann::json
500 nlohmann::json js = nlohmann::json::array();
504 nlohmann::json entry = {};
506 entry[
"name"] = preset.m_Name.ToUTF8();
507 entry[
"start_layer"] =
LSET::Name( preset.m_StartLayer );
508 entry[
"end_layer"] =
LSET::Name( preset.m_EndLayer );
509 entry[
"staggered"] = preset.m_Staggered;
510 entry[
"via_size"] =
pcbIUScale.IUTomm( preset.m_ViaSize );
511 entry[
"via_drill"] =
pcbIUScale.IUTomm( preset.m_ViaDrill );
512 entry[
"use_netclass"] = preset.m_UseNetclass;
513 entry[
"filled"] = preset.m_Filled;
514 entry[
"capped"] = preset.m_Capped;
515 entry[
"pitch"] =
pcbIUScale.IUTomm( preset.m_Pitch );
517 js.push_back( entry );
522 [&](
const nlohmann::json& aObj )
524 if( !aObj.is_array() )
531 auto copperLayer = [](
const nlohmann::json& aEntry,
const char* aKey,
534 if( !aEntry.contains( aKey ) || !aEntry[aKey].is_string() )
537 wxString
name = wxString::FromUTF8( aEntry[aKey].get<std::string>() );
546 auto boolOr = [](
const nlohmann::json& aEntry,
const char* aKey,
bool aFallback )
548 return aEntry.contains( aKey ) && aEntry[aKey].is_boolean() ? aEntry[aKey].get<
bool>() : aFallback;
551 auto mmOr = [](
const nlohmann::json& aEntry,
const char* aKey )
553 if( !aEntry.contains( aKey ) || !aEntry[aKey].is_number() )
556 double mm = aEntry[aKey].get<
double>();
558 if( mm < 0.0 || mm >
pcbIUScale.IUTomm( std::numeric_limits<int>::max() ) )
566 auto boundedMmOr = [](
const nlohmann::json& aEntry,
const char* aKey,
double aMaxMM )
568 if( !aEntry.contains( aKey ) || !aEntry[aKey].is_number() )
571 return pcbIUScale.mmToIU( std::clamp( aEntry[aKey].get<double>(), 0.0, aMaxMM ) );
574 for(
const nlohmann::json& entry : aObj )
576 if( entry.empty() || !entry.is_object() || !entry.contains(
"name" ) || !entry[
"name"].is_string() )
583 preset.
m_Name = wxString::FromUTF8( entry[
"name"].get<std::string>() );
586 preset.
m_Staggered = boolOr( entry,
"staggered",
false );
587 preset.
m_ViaSize = mmOr( entry,
"via_size" );
588 preset.
m_ViaDrill = mmOr( entry,
"via_drill" );
589 preset.
m_UseNetclass = boolOr( entry,
"use_netclass",
false );
590 preset.
m_Filled = boolOr( entry,
"filled",
true );
591 preset.
m_Capped = boolOr( entry,
"capped",
false );
597 return aOther.m_Name.CmpNoCase( preset.
m_Name ) == 0;
607 [&]() -> nlohmann::json
609 nlohmann::json js = nlohmann::json::array();
613 nlohmann::json entry = {};
615 entry[
"width"] =
pcbIUScale.IUTomm( pair.m_Width );
616 entry[
"gap"] =
pcbIUScale.IUTomm( pair.m_Gap );
617 entry[
"via_gap"] =
pcbIUScale.IUTomm( pair.m_ViaGap );
619 js.push_back( entry );
624 [&](
const nlohmann::json& aObj )
626 if( !aObj.is_array() )
631 for(
const nlohmann::json& entry : aObj )
633 if( entry.empty() || !entry.is_object() )
636 if( !entry.contains(
"width" )
637 || !entry.contains(
"gap" )
638 || !entry.contains(
"via_gap" ) )
643 int width =
pcbIUScale.mmToIU( entry[
"width"].get<double>() );
644 int gap =
pcbIUScale.mmToIU( entry[
"gap"].get<double>() );
645 int via_gap =
pcbIUScale.mmToIU( entry[
"via_gap"].get<double>() );
654 [&]() -> nlohmann::json
656 nlohmann::json js = nlohmann::json::array();
657 nlohmann::json entry = {};
665 js.push_back( entry );
669 [&](
const nlohmann::json& aObj )
671 if( !aObj.is_array() )
674 for(
const nlohmann::json& entry : aObj )
676 if( entry.empty() || !entry.is_object() )
679 if( entry.contains(
"td_onvia" ) )
682 if( entry.contains(
"td_onpthpad" ) )
685 if( entry.contains(
"td_onsmdpad" ) )
688 if( entry.contains(
"td_ontrackend" ) )
691 if( entry.contains(
"td_onroundshapesonly" ) )
695 for(
int ii = 0; ii < 3; ++ii )
699 if( entry.contains(
"td_allow_use_two_tracks" ) )
702 if( entry.contains(
"td_curve_segcount" ) )
704 if( entry[
"td_curve_segcount"].get<int>() > 0 )
708 if( entry.contains(
"td_on_pad_in_zone" ) )
717 [&]() -> nlohmann::json
719 nlohmann::json js = nlohmann::json::array();
723 nlohmann::json entry = {};
737 js.push_back( entry );
742 [&](
const nlohmann::json& aObj )
744 if( !aObj.is_array() )
747 for(
const nlohmann::json& entry : aObj )
749 if( entry.empty() || !entry.is_object() )
752 if( !entry.contains(
"td_target_name" ) )
757 if( idx >= 0 && idx < 3 )
763 if( entry.contains(
"td_enabled" ) )
764 td_prm->
m_Enabled = entry[
"td_enabled"].get<
bool>();
766 if( entry.contains(
"td_maxlen" ) )
769 if( entry.contains(
"td_maxheight" ) )
772 if( entry.contains(
"td_length_ratio" ) )
775 if( entry.contains(
"td_height_ratio" ) )
778 if( entry.contains(
"td_curve_segcount" ) )
780 if( entry[
"td_curve_segcount"].get<int>() > 0 )
784 if( entry.contains(
"td_width_to_size_filter_ratio" ) )
787 if( entry.contains(
"td_allow_use_two_tracks" ) )
790 if( entry.contains(
"td_on_pad_in_zone" ) )
798 [&]() -> nlohmann::json
800 nlohmann::json js = {};
805 nlohmann::json entry = {};
807 entry[
"min_amplitude"] =
pcbIUScale.IUTomm( aSettings.m_minAmplitude );
808 entry[
"max_amplitude"] =
pcbIUScale.IUTomm( aSettings.m_maxAmplitude );
809 entry[
"spacing"] =
pcbIUScale.IUTomm( aSettings.m_spacing );
811 entry[
"corner_radius_percentage"] = aSettings.m_cornerRadiusPercentage;
812 entry[
"single_sided"] = aSettings.m_singleSided;
823 [&](
const nlohmann::json& aObj )
830 if( entry.contains(
"min_amplitude" ) )
833 if( entry.contains(
"max_amplitude" ) )
836 if( entry.contains(
"spacing" ) )
839 if( entry.contains(
"corner_style" ) )
845 if( entry.contains(
"corner_radius_percentage" ) )
848 if( entry.contains(
"single_sided" ) )
854 if( aObj.contains(
"single_track_defaults" ) )
857 if( aObj.contains(
"diff_pair_defaults" ) )
860 if( aObj.contains(
"diff_pair_skew_defaults" ) )
872 minStroke, maxStroke,
pcbIUScale.MM_PER_IU ) );
876 minTextSize, maxTextSize,
pcbIUScale.MM_PER_IU ) );
880 minTextSize, maxTextSize,
pcbIUScale.MM_PER_IU ) );
884 minStroke, maxStroke,
pcbIUScale.MM_PER_IU ) );
894 minStroke, maxStroke,
pcbIUScale.MM_PER_IU ) );
898 minTextSize, maxTextSize,
pcbIUScale.MM_PER_IU ) );
902 minTextSize, maxTextSize,
pcbIUScale.MM_PER_IU ) );
906 minStroke, maxStroke,
pcbIUScale.MM_PER_IU ) );
916 minStroke, maxStroke,
pcbIUScale.MM_PER_IU ) );
920 minStroke, maxStroke,
pcbIUScale.MM_PER_IU ) );
924 minStroke, maxStroke,
pcbIUScale.MM_PER_IU ) );
928 minTextSize, maxTextSize,
pcbIUScale.MM_PER_IU ) );
932 minTextSize, maxTextSize,
pcbIUScale.MM_PER_IU ) );
936 minStroke, maxStroke,
pcbIUScale.MM_PER_IU ) );
946 minStroke, maxStroke,
pcbIUScale.MM_PER_IU ) );
950 minTextSize, maxTextSize,
pcbIUScale.MM_PER_IU ) );
954 minTextSize, maxTextSize,
pcbIUScale.MM_PER_IU ) );
958 minStroke, maxStroke,
pcbIUScale.MM_PER_IU ) );
1032 "defaults.zones.hatch_orientation",
1070 "defaults.zones.pad_connection",
1082 "defaults.zones.corner_smoothing",
1090 magic_enum::enum_cast<ZONE_SETTINGS::CORNER_SMOOTHING>( aVal ).value_or(
1096 "defaults.zones.corner_radius",
1108 "defaults.zones.remove_islands",
1120 "defaults.zones.min_island_area",
1134 [&]() -> nlohmann::json
1136 nlohmann::json ret =
1145 [&](
const nlohmann::json& aJson )
1147 if( aJson.contains(
"width" ) && aJson.contains(
"height" ) && aJson.contains(
"drill" ) )
1150 sz.
x =
pcbIUScale.mmToIU( aJson[
"width"].get<double>() );
1151 sz.
y =
pcbIUScale.mmToIU( aJson[
"height"].get<double>() );
1156 int drill =
pcbIUScale.mmToIU( aJson[
"drill"].get<double>() );
1182 if( std::optional<double> optval =
Get<double>(
"rules.solder_mask_clearance" ) )
1185 if( std::optional<double> optval =
Get<double>(
"rules.solder_mask_min_width" ) )
1188 if( std::optional<double> optval =
Get<double>(
"rules.solder_paste_clearance" ) )
1191 if( std::optional<double> optval =
Get<double>(
"rules.solder_paste_margin_ratio" ) )
1196 At(
"rules" ).erase(
"solder_mask_clearance" );
1197 At(
"rules" ).erase(
"solder_mask_min_width" );
1198 At(
"rules" ).erase(
"solder_paste_clearance" );
1199 At(
"rules" ).erase(
"solder_paste_margin_ratio" );
1215 m_parent->ReleaseNestedSettings(
this );
1479 std::string units_ptr(
"defaults.dimension_units" );
1480 std::string precision_ptr(
"defaults.dimension_precision" );
1484 &&
At( units_ptr ).is_number_integer()
1485 &&
At( precision_ptr ).is_number_integer() ) )
1491 int units = *
Get<int>( units_ptr );
1492 int precision = *
Get<int>( precision_ptr );
1495 int extraDigits = 0;
1499 case 0: extraDigits = 3;
break;
1500 case 2: extraDigits = 2;
break;
1504 precision += extraDigits;
1506 Set( precision_ptr, precision );
1520 nlohmann::json migrated = nlohmann::json::array();
1522 for(
const nlohmann::json& entry : *opt )
1524 if( entry.is_object() )
1526 migrated.push_back( entry );
1528 else if( entry.is_array() && entry.size() > 0 )
1530 wxString markerData = entry[0].get<wxString>();
1531 wxString comment = entry.size() > 1 ? entry[1].get<wxString>() : wxString();
1536 migrated.push_back( ex );
1538 else if( entry.is_string() )
1543 migrated.push_back( ex );
1547 Set(
"drc_exclusions", migrated );
1566 bool migrated =
false;
1569 [](
int aCode ) -> std::string
1571 return std::string(
DRC_ITEM::Create( aCode )->GetSettingsKey().ToUTF8() );
1574 const std::string rs =
"rule_severities.";
1575 const std::string no_courtyard_key =
"legacy_no_courtyard_defined";
1576 const std::string courtyard_overlap_key =
"legacy_courtyards_overlap";
1580 nlohmann::json& severities =
1581 project->Internals()->at(
"/board/design_settings/rule_severities"_json_pointer );
1583 if( severities.contains( no_courtyard_key ) )
1585 if( severities[no_courtyard_key].get<bool>() )
1590 severities.erase( no_courtyard_key );
1594 if( severities.contains( courtyard_overlap_key ) )
1596 if( severities[courtyard_overlap_key].get<bool>() )
1601 severities.erase( courtyard_overlap_key );
1615 project->At(
"legacy" ).erase(
"pcbnew" );
1638std::vector<BOARD_DESIGN_SETTINGS::VALIDATION_ERROR>
1641 std::vector<VALIDATION_ERROR> errors;
1644 auto addRangeError =
1645 [&](
const wxString& aField,
int aValue,
int aMin,
int aMax )
1647 if( aValue < aMin || aValue > aMax )
1656 wxString::Format(
_(
"Value must be between %s and %s." ),
1657 minValue, maxValue )
1662 auto addRatioRangeError =
1663 [&](
const wxString& aField,
double aValue,
double aMin,
double aMax )
1665 if( !std::isfinite( aValue ) || aValue < aMin || aValue > aMax )
1669 wxString::Format(
_(
"Value must be between %.3f and %.3f." ),
1677 addRangeError( wxS(
"min_connection" ),
m_MinConn,
1709 wxS(
"min_resolved_spokes" ),
1710 _(
"Value must be between 0 and 99." )
1714 addRangeError( wxS(
"max_error" ),
m_MaxError,
1740 wxString::Format( wxS(
"teardrop_parameters[%s].max_length" ), target ),
1741 _(
"Value must be greater than or equal to 0." )
1748 wxString::Format( wxS(
"teardrop_parameters[%s].max_width" ), target ),
1749 _(
"Value must be greater than or equal to 0." )
1753 addRatioRangeError( wxString::Format( wxS(
"teardrop_parameters[%s].best_length_ratio" ), target ),
1755 addRatioRangeError( wxString::Format( wxS(
"teardrop_parameters[%s].best_width_ratio" ), target ),
1757 addRatioRangeError( wxString::Format( wxS(
"teardrop_parameters[%s].width_to_size_filter_ratio" ),
1769 wxString::Format( wxS(
"diff_pair_dimensions_list[%zu].gap" ), ii ),
1770 _(
"No differential pair gap defined." )
1779 std::optional<int> viaDiameter;
1780 std::optional<int> viaDrill;
1788 if( std::optional<PCB_VIA::VIA_PARAMETER_ERROR> error =
1792 wxString::Format( wxS(
"via_dimensions_list[%zu]" ), ii ),
1813 biggest = std::max( biggest, constraint.
Value().
Min() );
1816 biggest = std::max( biggest, constraint.
Value().
Min() );
1819 biggest = std::max( biggest, constraint.
Value().
Min() );
1822 biggest = std::max( biggest, constraint.
Value().
Min() );
1825 biggest = std::max( biggest, constraint.
Value().
Min() );
1828 biggest = std::max( biggest, constraint.
Value().
Min() );
1842 if( netclass->HasClearance() )
1856 if( aListSize <= 1 )
1859 constexpr int lowestRealIndex = 1;
1860 int next = aIndex + ( aForward ? 1 : -1 );
1862 if(
next >= aListSize )
1863 next = lowestRealIndex;
1864 else if(
next < lowestRealIndex )
1865 next = aListSize - 1;
1891 return m_NetSettings->GetDefaultNetclass()->GetViaDiameter();
1908 return drill > 0 ? drill : -1;
1932 return m_NetSettings->GetDefaultNetclass()->GetTrackWidth();
1961 if(
m_NetSettings->GetDefaultNetclass()->HasDiffPairWidth() )
1962 return m_NetSettings->GetDefaultNetclass()->GetDiffPairWidth();
1964 return m_NetSettings->GetDefaultNetclass()->GetTrackWidth();
1982 return m_NetSettings->GetDefaultNetclass()->GetDiffPairGap();
2001 if(
m_NetSettings->GetDefaultNetclass()->HasDiffPairViaGap() )
2002 return m_NetSettings->GetDefaultNetclass()->GetDiffPairViaGap();
2020 if( aNewLayerCount > 0 )
2031 if( aNewLayerCount > 0 )
2048 LSET copperLayers = aMask;
2070 else if( aLayer ==
F_Fab || aLayer ==
B_Fab )
constexpr int ARC_HIGH_DEF
constexpr EDA_IU_SCALE pcbIUScale
const int bdsSchemaVersion
static int nextPredefinedIndex(int aIndex, bool aForward, int aListSize)
#define DEFAULT_MICROVIASMINDRILL
#define DEFAULT_SOLDERPASTE_CLEARANCE
#define DEFAULT_SOLDERPASTE_RATIO
#define DEFAULT_CUSTOMDPAIRWIDTH
#define DEFAULT_DP_MEANDER_SPACING
#define DEFAULT_PAD_WIDTH_MM
#define DEFAULT_VIASMINSIZE
#define DEFAULT_PAD_DRILL_DIAMETER_MM
#define DEFAULT_TEXT_WIDTH
#define DEFAULT_COPPER_TEXT_WIDTH
#define DEFAULT_CUSTOMDPAIRGAP
#define DEFAULT_MINCLEARANCE
#define MAXIMUM_ERROR_SIZE_MM
#define DEFAULT_HOLECLEARANCE
#define DEFAULT_SOLDERMASK_EXPANSION
#define DEFAULT_SOLDERMASK_MIN_WIDTH
#define MINIMUM_ERROR_SIZE_MM
#define DEFAULT_DIMENSION_EXTENSION_OFFSET
#define DEFAULT_COPPEREDGECLEARANCE
#define DEFAULT_PAD_HEIGTH_MM
#define DEFAULT_DIMENSION_ARROW_LENGTH
#define DEFAULT_TRACKMINWIDTH
#define DEFAULT_MINTHROUGHDRILL
#define DEFAULT_PAD_RR_RADIUS_RATIO
#define DEFAULT_SILK_TEXT_SIZE
#define MAXIMUM_CLEARANCE
#define DEFAULT_HOLETOHOLEMIN
#define MAX_MICROVIA_STACK_PITCH_MM
#define DEFAULT_MINCONNECTION
#define DEFAULT_COPPER_LINE_WIDTH
#define DEFAULT_SILK_LINE_WIDTH
#define DEFAULT_SILKCLEARANCE
#define DEFAULT_MICROVIASMINSIZE
#define DEFAULT_SILK_TEXT_WIDTH
#define DEFAULT_MINGROOVEWIDTH
#define DEFAULT_TEXT_SIZE
#define DEFAULT_EDGE_WIDTH
#define DEFAULT_CUSTOMTRACKWIDTH
#define DEFAULT_CUSTOMDPAIRVIAGAP
#define DEFAULT_COPPER_TEXT_SIZE
#define DEFAULT_SOLDERMASK_TO_COPPER_CLEARANCE
#define DEFAULT_LINE_WIDTH
#define DEFAULT_MEANDER_SPACING
#define DEFAULT_COURTYARD_WIDTH
#define DEFAULT_BOARD_THICKNESS_MM
#define DEFAULT_MINRESOLVEDSPOKES
static const ADVANCED_CFG & GetCfg()
Get the singleton instance's config, which is shared by all consumers.
BASE_SET & set(size_t pos)
DIM_PRECISION m_DimensionPrecision
Number of digits after the decimal.
std::vector< TEXT_ITEM_INFO > m_DefaultFPTextItems
int GetHolePlatingThickness() const
Pad & via drills are finish size.
VIATYPE m_CurrentViaType
(VIA_BLIND_BURIED, VIA_THROUGH, VIA_MICROVIA)
void SetEnabledLayers(const LSET &aMask)
Change the bit-mask of enabled layers to aMask.
std::shared_ptr< NET_SETTINGS > m_NetSettings
bool operator==(const BOARD_DESIGN_SETTINGS &aOther) const
DIM_UNITS_FORMAT m_DimensionUnitsFormat
void initFromOther(const BOARD_DESIGN_SETTINGS &aOther)
int m_CopperEdgeClearance
bool GetTextUpright(PCB_LAYER_ID aLayer) const
std::map< int, SEVERITY > m_DRCSeverities
VECTOR2I m_gridOrigin
origin for grid offsets
int GetTextThickness(PCB_LAYER_ID aLayer) const
Return the default text thickness from the layer class for the given layer.
VECTOR2I m_auxOrigin
origin for plot exports
bool m_TextUpright[LAYER_CLASS_COUNT]
BOARD_DESIGN_SETTINGS(JSON_SETTINGS *aParent, const std::string &aPath)
bool GetTextItalic(PCB_LAYER_ID aLayer) const
int m_MinSilkTextThickness
int GetCurrentViaSize() const
int GetNextDiffPairIndex(int aIndex, bool aForward) const
Compute the next diff pair dimensions list index when cycling predefined sizes, skipping the index-0 ...
wxString m_currentNetClassName
Current net class name used to display netclass info.
void SetViaSizeIndex(int aIndex)
Set the current via size list index to aIndex.
std::shared_ptr< DRC_ENGINE > m_DRCEngine
bool m_UseConnectedTrackWidth
virtual ~BOARD_DESIGN_SETTINGS()
std::vector< DIFF_PAIR_DIMENSION > m_DiffPairDimensionsList
VIA_DIMENSION m_customViaSize
bool Ignore(int aDRCErrorCode)
Return true if the DRC error code's severity is SEVERITY_IGNORE.
void SetDiffPairIndex(int aIndex)
int m_SolderMaskToCopperClearance
std::map< std::string, wxString > m_UserLayerNames
bool m_TempOverrideTrackWidth
int GetSmallestClearanceValue() const
bool m_AllowSoldermaskBridgesInFPs
std::unique_ptr< PAD > m_Pad_Master
bool m_DimensionSuppressZeroes
int GetNextTrackWidthIndex(int aIndex, bool aForward) const
Compute the next track width list index when cycling predefined sizes, skipping the index-0 netclass ...
TEARDROP_PARAMETERS_LIST m_TeardropParamsList
The parameters of teardrops for the different teardrop targets (via/pad, track end).
void SetDefaultMasterPad()
int GetCurrentDiffPairWidth() const
void SetUserDefinedLayerCount(int aNewLayerCount)
Set the number of user defined layers to aNewLayerCount.
int GetCurrentDiffPairViaGap() const
int GetCurrentDiffPairGap() const
int m_SolderMaskExpansion
int GetDRCEpsilon() const
Return an epsilon which accounts for rounding errors, etc.
int GetBiggestClearanceValue() const
int GetLayerClass(PCB_LAYER_ID aLayer) const
PNS::MEANDER_SETTINGS m_DiffPairMeanderSettings
int GetCurrentTrackWidth() const
int m_boardThickness
Board thickness for 3D viewer.
int m_copperLayerCount
Number of copper layers for this design.
int m_userDefinedLayerCount
Number of user defined layers for this design.
bool LoadFromFile(const wxString &aDirectory="") override
Loads the backing file from disk and then calls Load()
PNS::MEANDER_SETTINGS m_SingleTrackMeanderSettings
void SetTrackWidthIndex(int aIndex)
Set the current track width list index to aIndex.
int m_TextThickness[LAYER_CLASS_COUNT]
ZONE_SETTINGS m_defaultZoneSettings
The default settings that will be used for new zones.
int GetNextViaSizeIndex(int aIndex, bool aForward) const
Compute the next via size list index when cycling predefined sizes, skipping the index-0 netclass pla...
SEVERITY GetSeverity(int aDRCErrorCode)
std::vector< int > m_TrackWidthList
DIFF_PAIR_DIMENSION m_customDiffPair
std::vector< VALIDATION_ERROR > ValidateDesignRules(std::optional< EDA_UNITS > aUnits=std::nullopt) const
Validate design settings values and return per-field errors.
int m_LineThickness[LAYER_CLASS_COUNT]
bool m_DimensionKeepTextAligned
VECTOR2I GetTextSize(PCB_LAYER_ID aLayer) const
Return the default text size from the layer class for the given layer.
double m_SolderPasteMarginRatio
int GetLineThickness(PCB_LAYER_ID aLayer) const
Return the default graphic segment thickness from the layer class for the given layer.
bool m_UseHeightForLengthCalcs
Enable inclusion of stackup height in track length measurements and length tuning.
int GetCurrentViaDrill() const
VECTOR2I m_TextSize[LAYER_CLASS_COUNT]
PNS::MEANDER_SETTINGS m_SkewMeanderSettings
LSET m_enabledLayers
Bit-mask for layer enabling.
bool m_TextItalic[LAYER_CLASS_COUNT]
std::vector< VIA_STACK_PRESET > m_ViaStackPresets
void SetCopperLayerCount(int aNewLayerCount)
Set the copper layer count to aNewLayerCount.
DIM_TEXT_POSITION m_DimensionTextPosition
BOARD_STACKUP m_stackup
The description of layers stackup, for board fabrication only physical layers are in layers stackup.
bool m_ZoneKeepExternalFillets
DIM_UNITS_MODE m_DimensionUnitsMode
std::vector< VIA_DIMENSION > m_ViasDimensionsList
int m_ViasMinAnnularWidth
BOARD_DESIGN_SETTINGS & operator=(const BOARD_DESIGN_SETTINGS &aOther)
int m_DimensionExtensionOffset
std::set< DRC_EXCLUSION, DRC_EXCLUSION_COMPARE > m_DrcExclusions
int m_DimensionArrowLength
MINOPTMAX< int > & Value()
Container for an DRC exclusion, which is a PCB_MARKER plus an optional comment.
static DRC_EXCLUSION FromLegacyStrings(const wxString &aMarkerData, const wxString &aComment)
std::string GetSortKey() const
static std::vector< std::reference_wrapper< RC_ITEM > > GetItemsWithSeverities()
static std::shared_ptr< DRC_ITEM > Create(int aErrorCode)
Constructs a DRC_ITEM for the given error code.
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 l...
bool Contains(const std::string &aPath) const
virtual void Load()
Updates the parameters of this object based on the current JSON document contents.
std::optional< ValueType > Get(const std::string &aPath) const
Fetches a value from within the JSON document.
std::vector< PARAM_BASE * > m_params
The list of parameters (owned by this object)
void registerMigration(int aOldSchemaVersion, int aNewSchemaVersion, std::function< bool(void)> aMigrator)
Registers a migration from one schema version to another.
nlohmann::json & At(const std::string &aPath)
Wrappers for the underlying JSON API so that most consumers don't need json.hpp All of these function...
JSON_SETTINGS(const wxString &aFilename, SETTINGS_LOC aLocation, int aSchemaVersion)
bool m_resetParamsIfMissing
Whether or not to set parameters to their default value if missing from JSON on Load()
LSET is a set of PCB_LAYER_IDs.
static const LSET & AllCuMask()
return AllCuMask( MAX_CU_LAYERS );
LSET & ClearNonCopperLayers()
Clear the non-copper layers in this set.
static int NameToLayer(wxString &aName)
Return the layer number from a layer name.
static LSET UserDefinedLayersMask(int aUserDefinedLayerCount=MAX_USER_DEFINED_LAYERS)
Return a mask with the requested number of user defined layers.
static wxString Name(PCB_LAYER_ID aLayerId)
Return the fixed name association with aLayerId.
std::string m_path
The path (in pointer format) of where to store this document in the parent.
JSON_SETTINGS * GetParent()
JSON_SETTINGS * m_parent
A pointer to the parent object to load and store from.
NESTED_SETTINGS(const std::string &aName, int aSchemaVersion, JSON_SETTINGS *aParent, const std::string &aPath, bool aLoadFromFile=true)
bool LoadFromFile(const wxString &aDirectory="") override
Loads the JSON document from the parent and then calls Load()
@ NORMAL
Shape is the same on all layers.
static constexpr PCB_LAYER_ID ALL_LAYERS
! The layer identifier to use for the single defintion on normal padstacks
Stores an enum as an integer.
Like a normal param, but with custom getter and setter functions.
Represents a parameter that has a scaling factor between the value in the file and the value used int...
static std::optional< VIA_PARAMETER_ERROR > ValidateViaParameters(std::optional< int > aDiameter, std::optional< int > aPrimaryDrill, std::optional< PCB_LAYER_ID > aPrimaryStartLayer=std::nullopt, std::optional< PCB_LAYER_ID > aPrimaryEndLayer=std::nullopt, std::optional< int > aSecondaryDrill=std::nullopt, std::optional< PCB_LAYER_ID > aSecondaryStartLayer=std::nullopt, std::optional< PCB_LAYER_ID > aSecondaryEndLayer=std::nullopt, std::optional< int > aTertiaryDrill=std::nullopt, std::optional< PCB_LAYER_ID > aTertiaryStartLayer=std::nullopt, std::optional< PCB_LAYER_ID > aTertiaryEndLayer=std::nullopt, int aCopperLayerCount=0)
Dimensions for the meandering algorithm.
int m_minAmplitude
Minimum meandering amplitude.
int m_cornerRadiusPercentage
Rounding percentage (0 - 100).
bool m_singleSided
Place meanders on one side.
MEANDER_STYLE m_cornerStyle
Type of corners for the meandered line.
int m_maxAmplitude
Maximum meandering amplitude.
int m_spacing
Meandering period/spacing (see dialog picture for explanation).
The backing store for a PROJECT, in JSON format.
A holder for a rule check item, DRC in Pcbnew or ERC in Eeschema.
TEARDROP_PARAMETERS_LIST is a helper class to handle the list of TEARDROP_PARAMETERS needed to build ...
TEARDROP_PARAMETERS * GetParameters(TARGET_TD aTdType)
size_t GetParametersCount()
TEARDROP_PARAMETARS is a helper class to handle parameters needed to build teardrops for a board thes...
double m_BestWidthRatio
The height of a teardrop as ratio between height and size of pad/via.
int m_TdMaxLen
max allowed length for teardrops in IU. <= 0 to disable
bool m_AllowUseTwoTracks
True to create teardrops using 2 track segments if the first in too small.
int m_TdMaxWidth
max allowed height for teardrops in IU. <= 0 to disable
double m_BestLengthRatio
The length of a teardrop as ratio between length and size of pad/via.
double m_WidthtoSizeFilterRatio
The ratio (H/D) between the via/pad size and the track width max value to create a teardrop 1....
bool m_TdOnPadsInZones
A filter to exclude pads inside zone fills.
bool m_Enabled
Flag to enable teardrops.
bool m_CurvedEdges
True if the teardrop should be curved.
@ DRCE_FOOTPRINT_SCALED_WITH_PADS
@ DRCE_TUNING_PROFILE_IMPLICIT_RULES
@ DRCE_SILK_EDGE_CLEARANCE
@ DRCE_SILK_MASK_CLEARANCE
@ DRCE_MIRRORED_TEXT_ON_FRONT_LAYER
@ DRCE_LIB_FOOTPRINT_ISSUES
@ DRCE_MICROVIA_CROSSES_CORE
@ DRCE_OVERLAPPING_FOOTPRINTS
@ DRCE_SCHEMATIC_FIELDS_PARITY
@ DRCE_MICROVIA_STACK_NOT_FILLED
@ DRCE_TRACK_NOT_CENTERED_ON_VIA
@ DRCE_MISSING_TUNING_PROFILE
@ DRCE_DRILLED_HOLES_TOO_CLOSE
@ DRCE_FOOTPRINT_TYPE_MISMATCH
@ DRCE_DUPLICATE_FOOTPRINT
@ DRCE_DRILLED_HOLES_COLOCATED
@ DRCE_LIB_FOOTPRINT_MISMATCH
@ DRCE_UNMIRRORED_TEXT_ON_BACK_LAYER
@ EDGE_CLEARANCE_CONSTRAINT
@ PHYSICAL_HOLE_CLEARANCE_CONSTRAINT
@ HOLE_CLEARANCE_CONSTRAINT
@ PHYSICAL_CLEARANCE_CONSTRAINT
@ HOLE_TO_HOLE_CONSTRAINT
static constexpr EDA_ANGLE ANGLE_90
static constexpr EDA_ANGLE ANGLE_45
#define TEXT_MIN_SIZE_MM
Minimum text size (1 micron).
#define TEXT_MAX_SIZE_MM
Maximum text size in mm (~10 inches)
template KICOMMON_API std::optional< nlohmann::json > JSON_SETTINGS::Get< nlohmann::json >(const std::string &aPath) const
bool IsCopperLayer(int aLayerId)
Test whether a layer is a copper layer.
PCB_LAYER_ID
A quick note on layer IDs:
PCB_LAYER_ID ToLAYER_ID(int aLayer)
KICOMMON_API wxString StringFromValue(const EDA_IU_SCALE &aIuScale, EDA_UNITS aUnits, double aValue, bool aAddUnitsText=false, EDA_DATA_TYPE aType=EDA_DATA_TYPE::DISTANCE)
Return the string from aValue according to aUnits (inch, mm ...) for display.
@ OUTSIDE
Text appears outside the dimension line (default)
@ INLINE
Text appears in line with the dimension line.
static BOM_FMT_PRESET CSV()
Container to handle a stock of specific differential pairs each with unique track width,...
BOM_FMT_PRESET m_BomFmtSettings
List of stored BOM format presets.
wxString m_BomExportFileName
BOM_PRESET m_BomSettings
List of stored BOM presets.
std::vector< BOM_PRESET > m_BomPresets
std::vector< BOM_FMT_PRESET > m_BomFmtPresets
Container to handle a stock of specific vias each with unique diameter and drill sizes in the BOARD c...
A named microvia stack definition, chosen while routing instead of entering the values each time.
PCB_LAYER_ID m_StartLayer
std::string GetTeardropTargetCanonicalName(TARGET_TD aTdType)
TARGET_TD GetTeardropTargetTypeFromCanonicalName(const std::string &aTargetName)
SEVERITY SeverityFromString(const wxString &aSeverity)
wxString SeverityToString(const SEVERITY &aSeverity)
VECTOR2< int32_t > VECTOR2I
ISLAND_REMOVAL_MODE
Whether or not to remove isolated islands from a zone.
#define ZONE_THERMAL_RELIEF_GAP_MM
ZONE_CONNECTION
How pads are covered by copper in zone.
@ THERMAL
Use thermal relief for pads.
#define ZONE_BORDER_HATCH_DIST_MM
#define ZONE_BORDER_HATCH_MINDIST_MM
#define ZONE_THERMAL_RELIEF_COPPER_WIDTH_MM
#define ZONE_CLEARANCE_MM
#define ZONE_THICKNESS_MIN_VALUE_MM
#define ZONE_THICKNESS_MM
#define ZONE_BORDER_HATCH_MAXDIST_MM