20#include <magic_enum.hpp>
52 m_NetSettings = std::make_shared<NET_SETTINGS>(
nullptr,
"" );
358 [&]() -> nlohmann::json
360 nlohmann::json ret = {};
364 wxString
name = item.GetSettingsKey();
365 int code = item.GetErrorCode();
375 [&](
const nlohmann::json& aJson )
377 if( !aJson.is_object() )
385 if( aJson.contains(
"hole_near_hole" ) )
390 wxString
name = item.GetSettingsKey();
391 std::string key(
name.ToUTF8() );
393 if( aJson.contains( key ) )
399 [&]() -> nlohmann::json
401 nlohmann::json js = nlohmann::json::array();
404 js.push_back( exclusion );
408 [&](
const nlohmann::json& aObj )
412 if( !aObj.is_array() )
415 for(
const nlohmann::json& entry : aObj )
417 if( entry.is_object() )
429 [&]() -> nlohmann::json
431 nlohmann::json js = nlohmann::json::array();
438 [&](
const nlohmann::json& aJson )
440 if( !aJson.is_array() )
445 for(
const nlohmann::json& entry : aJson )
456 [&]() -> nlohmann::json
458 nlohmann::json js = nlohmann::json::array();
462 nlohmann::json entry = {};
467 js.push_back( entry );
472 [&](
const nlohmann::json& aObj )
474 if( !aObj.is_array() )
479 for(
const nlohmann::json& entry : aObj )
481 if( entry.empty() || !entry.is_object() )
484 if( !entry.contains(
"diameter" ) || !entry.contains(
"drill" ) )
487 int diameter =
pcbIUScale.mmToIU( entry[
"diameter"].get<double>() );
488 int drill =
pcbIUScale.mmToIU( entry[
"drill"].get<double>() );
497 [&]() -> nlohmann::json
499 nlohmann::json js = nlohmann::json::array();
503 nlohmann::json entry = {};
505 entry[
"name"] = preset.m_Name.ToUTF8();
506 entry[
"start_layer"] =
LSET::Name( preset.m_StartLayer );
507 entry[
"end_layer"] =
LSET::Name( preset.m_EndLayer );
508 entry[
"staggered"] = preset.m_Staggered;
509 entry[
"via_size"] =
pcbIUScale.IUTomm( preset.m_ViaSize );
510 entry[
"via_drill"] =
pcbIUScale.IUTomm( preset.m_ViaDrill );
511 entry[
"use_netclass"] = preset.m_UseNetclass;
512 entry[
"filled"] = preset.m_Filled;
513 entry[
"capped"] = preset.m_Capped;
514 entry[
"pitch"] =
pcbIUScale.IUTomm( preset.m_Pitch );
516 js.push_back( entry );
521 [&](
const nlohmann::json& aObj )
523 if( !aObj.is_array() )
530 auto copperLayer = [](
const nlohmann::json& aEntry,
const char* aKey,
533 if( !aEntry.contains( aKey ) || !aEntry[aKey].is_string() )
536 wxString
name = wxString::FromUTF8( aEntry[aKey].get<std::string>() );
545 auto boolOr = [](
const nlohmann::json& aEntry,
const char* aKey,
bool aFallback )
547 return aEntry.contains( aKey ) && aEntry[aKey].is_boolean() ? aEntry[aKey].get<
bool>() : aFallback;
550 auto mmOr = [](
const nlohmann::json& aEntry,
const char* aKey )
552 return aEntry.contains( aKey ) && aEntry[aKey].is_number()
553 ?
pcbIUScale.mmToIU( aEntry[aKey].get<double>() )
559 auto boundedMmOr = [](
const nlohmann::json& aEntry,
const char* aKey,
double aMaxMM )
561 if( !aEntry.contains( aKey ) || !aEntry[aKey].is_number() )
564 return pcbIUScale.mmToIU( std::clamp( aEntry[aKey].get<double>(), 0.0, aMaxMM ) );
567 for(
const nlohmann::json& entry : aObj )
569 if( entry.empty() || !entry.is_object() || !entry.contains(
"name" ) || !entry[
"name"].is_string() )
576 preset.
m_Name = wxString::FromUTF8( entry[
"name"].get<std::string>() );
579 preset.
m_Staggered = boolOr( entry,
"staggered",
false );
580 preset.
m_ViaSize = mmOr( entry,
"via_size" );
581 preset.
m_ViaDrill = mmOr( entry,
"via_drill" );
582 preset.
m_UseNetclass = boolOr( entry,
"use_netclass",
false );
583 preset.
m_Filled = boolOr( entry,
"filled",
true );
584 preset.
m_Capped = boolOr( entry,
"capped",
false );
590 return aOther.m_Name.CmpNoCase( preset.
m_Name ) == 0;
600 [&]() -> nlohmann::json
602 nlohmann::json js = nlohmann::json::array();
606 nlohmann::json entry = {};
608 entry[
"width"] =
pcbIUScale.IUTomm( pair.m_Width );
609 entry[
"gap"] =
pcbIUScale.IUTomm( pair.m_Gap );
610 entry[
"via_gap"] =
pcbIUScale.IUTomm( pair.m_ViaGap );
612 js.push_back( entry );
617 [&](
const nlohmann::json& aObj )
619 if( !aObj.is_array() )
624 for(
const nlohmann::json& entry : aObj )
626 if( entry.empty() || !entry.is_object() )
629 if( !entry.contains(
"width" )
630 || !entry.contains(
"gap" )
631 || !entry.contains(
"via_gap" ) )
636 int width =
pcbIUScale.mmToIU( entry[
"width"].get<double>() );
637 int gap =
pcbIUScale.mmToIU( entry[
"gap"].get<double>() );
638 int via_gap =
pcbIUScale.mmToIU( entry[
"via_gap"].get<double>() );
647 [&]() -> nlohmann::json
649 nlohmann::json js = nlohmann::json::array();
650 nlohmann::json entry = {};
658 js.push_back( entry );
662 [&](
const nlohmann::json& aObj )
664 if( !aObj.is_array() )
667 for(
const nlohmann::json& entry : aObj )
669 if( entry.empty() || !entry.is_object() )
672 if( entry.contains(
"td_onvia" ) )
675 if( entry.contains(
"td_onpthpad" ) )
678 if( entry.contains(
"td_onsmdpad" ) )
681 if( entry.contains(
"td_ontrackend" ) )
684 if( entry.contains(
"td_onroundshapesonly" ) )
688 for(
int ii = 0; ii < 3; ++ii )
692 if( entry.contains(
"td_allow_use_two_tracks" ) )
695 if( entry.contains(
"td_curve_segcount" ) )
697 if( entry[
"td_curve_segcount"].get<int>() > 0 )
701 if( entry.contains(
"td_on_pad_in_zone" ) )
710 [&]() -> nlohmann::json
712 nlohmann::json js = nlohmann::json::array();
716 nlohmann::json entry = {};
730 js.push_back( entry );
735 [&](
const nlohmann::json& aObj )
737 if( !aObj.is_array() )
740 for(
const nlohmann::json& entry : aObj )
742 if( entry.empty() || !entry.is_object() )
745 if( !entry.contains(
"td_target_name" ) )
750 if( idx >= 0 && idx < 3 )
756 if( entry.contains(
"td_enabled" ) )
757 td_prm->
m_Enabled = entry[
"td_enabled"].get<
bool>();
759 if( entry.contains(
"td_maxlen" ) )
762 if( entry.contains(
"td_maxheight" ) )
765 if( entry.contains(
"td_length_ratio" ) )
768 if( entry.contains(
"td_height_ratio" ) )
771 if( entry.contains(
"td_curve_segcount" ) )
773 if( entry[
"td_curve_segcount"].get<int>() > 0 )
777 if( entry.contains(
"td_width_to_size_filter_ratio" ) )
780 if( entry.contains(
"td_allow_use_two_tracks" ) )
783 if( entry.contains(
"td_on_pad_in_zone" ) )
791 [&]() -> nlohmann::json
793 nlohmann::json js = {};
798 nlohmann::json entry = {};
800 entry[
"min_amplitude"] =
pcbIUScale.IUTomm( aSettings.m_minAmplitude );
801 entry[
"max_amplitude"] =
pcbIUScale.IUTomm( aSettings.m_maxAmplitude );
802 entry[
"spacing"] =
pcbIUScale.IUTomm( aSettings.m_spacing );
804 entry[
"corner_radius_percentage"] = aSettings.m_cornerRadiusPercentage;
805 entry[
"single_sided"] = aSettings.m_singleSided;
816 [&](
const nlohmann::json& aObj )
823 if( entry.contains(
"min_amplitude" ) )
826 if( entry.contains(
"max_amplitude" ) )
829 if( entry.contains(
"spacing" ) )
832 if( entry.contains(
"corner_style" ) )
838 if( entry.contains(
"corner_radius_percentage" ) )
841 if( entry.contains(
"single_sided" ) )
847 if( aObj.contains(
"single_track_defaults" ) )
850 if( aObj.contains(
"diff_pair_defaults" ) )
853 if( aObj.contains(
"diff_pair_skew_defaults" ) )
865 minStroke, maxStroke,
pcbIUScale.MM_PER_IU ) );
869 minTextSize, maxTextSize,
pcbIUScale.MM_PER_IU ) );
873 minTextSize, maxTextSize,
pcbIUScale.MM_PER_IU ) );
877 minStroke, maxStroke,
pcbIUScale.MM_PER_IU ) );
887 minStroke, maxStroke,
pcbIUScale.MM_PER_IU ) );
891 minTextSize, maxTextSize,
pcbIUScale.MM_PER_IU ) );
895 minTextSize, maxTextSize,
pcbIUScale.MM_PER_IU ) );
899 minStroke, maxStroke,
pcbIUScale.MM_PER_IU ) );
909 minStroke, maxStroke,
pcbIUScale.MM_PER_IU ) );
913 minStroke, maxStroke,
pcbIUScale.MM_PER_IU ) );
917 minStroke, maxStroke,
pcbIUScale.MM_PER_IU ) );
921 minTextSize, maxTextSize,
pcbIUScale.MM_PER_IU ) );
925 minTextSize, maxTextSize,
pcbIUScale.MM_PER_IU ) );
929 minStroke, maxStroke,
pcbIUScale.MM_PER_IU ) );
939 minStroke, maxStroke,
pcbIUScale.MM_PER_IU ) );
943 minTextSize, maxTextSize,
pcbIUScale.MM_PER_IU ) );
947 minTextSize, maxTextSize,
pcbIUScale.MM_PER_IU ) );
951 minStroke, maxStroke,
pcbIUScale.MM_PER_IU ) );
1025 "defaults.zones.hatch_orientation",
1063 "defaults.zones.pad_connection",
1075 "defaults.zones.corner_smoothing",
1083 magic_enum::enum_cast<ZONE_SETTINGS::CORNER_SMOOTHING>( aVal ).value_or(
1089 "defaults.zones.corner_radius",
1101 "defaults.zones.remove_islands",
1113 "defaults.zones.min_island_area",
1127 [&]() -> nlohmann::json
1129 nlohmann::json ret =
1138 [&](
const nlohmann::json& aJson )
1140 if( aJson.contains(
"width" ) && aJson.contains(
"height" ) && aJson.contains(
"drill" ) )
1143 sz.
x =
pcbIUScale.mmToIU( aJson[
"width"].get<double>() );
1144 sz.
y =
pcbIUScale.mmToIU( aJson[
"height"].get<double>() );
1149 int drill =
pcbIUScale.mmToIU( aJson[
"drill"].get<double>() );
1175 if( std::optional<double> optval =
Get<double>(
"rules.solder_mask_clearance" ) )
1178 if( std::optional<double> optval =
Get<double>(
"rules.solder_mask_min_width" ) )
1181 if( std::optional<double> optval =
Get<double>(
"rules.solder_paste_clearance" ) )
1184 if( std::optional<double> optval =
Get<double>(
"rules.solder_paste_margin_ratio" ) )
1189 At(
"rules" ).erase(
"solder_mask_clearance" );
1190 At(
"rules" ).erase(
"solder_mask_min_width" );
1191 At(
"rules" ).erase(
"solder_paste_clearance" );
1192 At(
"rules" ).erase(
"solder_paste_margin_ratio" );
1208 m_parent->ReleaseNestedSettings(
this );
1472 std::string units_ptr(
"defaults.dimension_units" );
1473 std::string precision_ptr(
"defaults.dimension_precision" );
1477 &&
At( units_ptr ).is_number_integer()
1478 &&
At( precision_ptr ).is_number_integer() ) )
1484 int units = *
Get<int>( units_ptr );
1485 int precision = *
Get<int>( precision_ptr );
1488 int extraDigits = 0;
1492 case 0: extraDigits = 3;
break;
1493 case 2: extraDigits = 2;
break;
1497 precision += extraDigits;
1499 Set( precision_ptr, precision );
1513 nlohmann::json migrated = nlohmann::json::array();
1515 for(
const nlohmann::json& entry : *opt )
1517 if( entry.is_object() )
1519 migrated.push_back( entry );
1521 else if( entry.is_array() && entry.size() > 0 )
1523 wxString markerData = entry[0].get<wxString>();
1524 wxString comment = entry.size() > 1 ? entry[1].get<wxString>() : wxString();
1529 migrated.push_back( ex );
1531 else if( entry.is_string() )
1536 migrated.push_back( ex );
1540 Set(
"drc_exclusions", migrated );
1559 bool migrated =
false;
1562 [](
int aCode ) -> std::string
1564 return std::string(
DRC_ITEM::Create( aCode )->GetSettingsKey().ToUTF8() );
1567 const std::string rs =
"rule_severities.";
1568 const std::string no_courtyard_key =
"legacy_no_courtyard_defined";
1569 const std::string courtyard_overlap_key =
"legacy_courtyards_overlap";
1573 nlohmann::json& severities =
1574 project->Internals()->at(
"/board/design_settings/rule_severities"_json_pointer );
1576 if( severities.contains( no_courtyard_key ) )
1578 if( severities[no_courtyard_key].get<bool>() )
1583 severities.erase( no_courtyard_key );
1587 if( severities.contains( courtyard_overlap_key ) )
1589 if( severities[courtyard_overlap_key].get<bool>() )
1594 severities.erase( courtyard_overlap_key );
1608 project->At(
"legacy" ).erase(
"pcbnew" );
1631std::vector<BOARD_DESIGN_SETTINGS::VALIDATION_ERROR>
1634 std::vector<VALIDATION_ERROR> errors;
1637 auto addRangeError =
1638 [&](
const wxString& aField,
int aValue,
int aMin,
int aMax )
1640 if( aValue < aMin || aValue > aMax )
1649 wxString::Format(
_(
"Value must be between %s and %s." ),
1650 minValue, maxValue )
1655 auto addRatioRangeError =
1656 [&](
const wxString& aField,
double aValue,
double aMin,
double aMax )
1658 if( !std::isfinite( aValue ) || aValue < aMin || aValue > aMax )
1662 wxString::Format(
_(
"Value must be between %.3f and %.3f." ),
1670 addRangeError( wxS(
"min_connection" ),
m_MinConn,
1702 wxS(
"min_resolved_spokes" ),
1703 _(
"Value must be between 0 and 99." )
1707 addRangeError( wxS(
"max_error" ),
m_MaxError,
1733 wxString::Format( wxS(
"teardrop_parameters[%s].max_length" ), target ),
1734 _(
"Value must be greater than or equal to 0." )
1741 wxString::Format( wxS(
"teardrop_parameters[%s].max_width" ), target ),
1742 _(
"Value must be greater than or equal to 0." )
1746 addRatioRangeError( wxString::Format( wxS(
"teardrop_parameters[%s].best_length_ratio" ), target ),
1748 addRatioRangeError( wxString::Format( wxS(
"teardrop_parameters[%s].best_width_ratio" ), target ),
1750 addRatioRangeError( wxString::Format( wxS(
"teardrop_parameters[%s].width_to_size_filter_ratio" ),
1762 wxString::Format( wxS(
"diff_pair_dimensions_list[%zu].gap" ), ii ),
1763 _(
"No differential pair gap defined." )
1772 std::optional<int> viaDiameter;
1773 std::optional<int> viaDrill;
1781 if( std::optional<PCB_VIA::VIA_PARAMETER_ERROR> error =
1785 wxString::Format( wxS(
"via_dimensions_list[%zu]" ), ii ),
1806 biggest = std::max( biggest, constraint.
Value().
Min() );
1809 biggest = std::max( biggest, constraint.
Value().
Min() );
1812 biggest = std::max( biggest, constraint.
Value().
Min() );
1815 biggest = std::max( biggest, constraint.
Value().
Min() );
1818 biggest = std::max( biggest, constraint.
Value().
Min() );
1821 biggest = std::max( biggest, constraint.
Value().
Min() );
1835 if( netclass->HasClearance() )
1849 if( aListSize <= 1 )
1852 constexpr int lowestRealIndex = 1;
1853 int next = aIndex + ( aForward ? 1 : -1 );
1855 if(
next >= aListSize )
1856 next = lowestRealIndex;
1857 else if(
next < lowestRealIndex )
1858 next = aListSize - 1;
1884 return m_NetSettings->GetDefaultNetclass()->GetViaDiameter();
1901 return drill > 0 ? drill : -1;
1925 return m_NetSettings->GetDefaultNetclass()->GetTrackWidth();
1954 if(
m_NetSettings->GetDefaultNetclass()->HasDiffPairWidth() )
1955 return m_NetSettings->GetDefaultNetclass()->GetDiffPairWidth();
1957 return m_NetSettings->GetDefaultNetclass()->GetTrackWidth();
1975 return m_NetSettings->GetDefaultNetclass()->GetDiffPairGap();
1994 if(
m_NetSettings->GetDefaultNetclass()->HasDiffPairViaGap() )
1995 return m_NetSettings->GetDefaultNetclass()->GetDiffPairViaGap();
2013 if( aNewLayerCount > 0 )
2024 if( aNewLayerCount > 0 )
2041 LSET copperLayers = aMask;
2063 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
Maximum meandering amplitude.
int m_cornerRadiusPercentage
Place meanders on one side.
bool m_singleSided
Initial side when placing meanders at segment.
MEANDER_STYLE m_cornerStyle
Rounding percentage (0 - 100).
int m_maxAmplitude
Meandering period/spacing (see dialog picture for explanation).
int m_spacing
Amplitude/spacing adjustment step.
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