51 m_NetSettings = std::make_shared<NET_SETTINGS>(
nullptr,
"" );
337 [&]() -> nlohmann::json
339 nlohmann::json ret = {};
343 wxString
name = item.GetSettingsKey();
344 int code = item.GetErrorCode();
354 [&](
const nlohmann::json& aJson )
356 if( !aJson.is_object() )
364 if( aJson.contains(
"hole_near_hole" ) )
369 wxString
name = item.GetSettingsKey();
370 std::string key(
name.ToUTF8() );
372 if( aJson.contains( key ) )
378 [&]() -> nlohmann::json
380 nlohmann::json js = nlohmann::json::array();
387 [&](
const nlohmann::json& aObj )
391 if( !aObj.is_array() )
394 for(
const nlohmann::json& entry : aObj )
396 if( entry.is_array() )
398 wxString serialized = entry[0].get<wxString>();
402 else if( entry.is_string() )
411 [&]() -> nlohmann::json
413 nlohmann::json js = nlohmann::json::array();
420 [&](
const nlohmann::json& aJson )
422 if( !aJson.is_array() )
427 for(
const nlohmann::json& entry : aJson )
438 [&]() -> nlohmann::json
440 nlohmann::json js = nlohmann::json::array();
444 nlohmann::json entry = {};
449 js.push_back( entry );
454 [&](
const nlohmann::json& aObj )
456 if( !aObj.is_array() )
461 for(
const nlohmann::json& entry : aObj )
463 if( entry.empty() || !entry.is_object() )
466 if( !entry.contains(
"diameter" ) || !entry.contains(
"drill" ) )
469 int diameter =
pcbIUScale.mmToIU( entry[
"diameter"].get<double>() );
470 int drill =
pcbIUScale.mmToIU( entry[
"drill"].get<double>() );
478 [&]() -> nlohmann::json
480 nlohmann::json js = nlohmann::json::array();
484 nlohmann::json entry = {};
486 entry[
"width"] =
pcbIUScale.IUTomm( pair.m_Width );
487 entry[
"gap"] =
pcbIUScale.IUTomm( pair.m_Gap );
488 entry[
"via_gap"] =
pcbIUScale.IUTomm( pair.m_ViaGap );
490 js.push_back( entry );
495 [&](
const nlohmann::json& aObj )
497 if( !aObj.is_array() )
502 for(
const nlohmann::json& entry : aObj )
504 if( entry.empty() || !entry.is_object() )
507 if( !entry.contains(
"width" )
508 || !entry.contains(
"gap" )
509 || !entry.contains(
"via_gap" ) )
514 int width =
pcbIUScale.mmToIU( entry[
"width"].get<double>() );
515 int gap =
pcbIUScale.mmToIU( entry[
"gap"].get<double>() );
516 int via_gap =
pcbIUScale.mmToIU( entry[
"via_gap"].get<double>() );
525 [&]() -> nlohmann::json
527 nlohmann::json js = nlohmann::json::array();
528 nlohmann::json entry = {};
536 js.push_back( entry );
540 [&](
const nlohmann::json& aObj )
542 if( !aObj.is_array() )
545 for(
const nlohmann::json& entry : aObj )
547 if( entry.empty() || !entry.is_object() )
550 if( entry.contains(
"td_onvia" ) )
553 if( entry.contains(
"td_onpthpad" ) )
556 if( entry.contains(
"td_onsmdpad" ) )
559 if( entry.contains(
"td_ontrackend" ) )
562 if( entry.contains(
"td_onroundshapesonly" ) )
566 for(
int ii = 0; ii < 3; ++ii )
570 if( entry.contains(
"td_allow_use_two_tracks" ) )
573 if( entry.contains(
"td_curve_segcount" ) )
575 if( entry[
"td_curve_segcount"].get<int>() > 0 )
579 if( entry.contains(
"td_on_pad_in_zone" ) )
588 [&]() -> nlohmann::json
590 nlohmann::json js = nlohmann::json::array();
594 nlohmann::json entry = {};
607 js.push_back( entry );
612 [&](
const nlohmann::json& aObj )
614 if( !aObj.is_array() )
617 for(
const nlohmann::json& entry : aObj )
619 if( entry.empty() || !entry.is_object() )
622 if( !entry.contains(
"td_target_name" ) )
627 if( idx >= 0 && idx < 3 )
631 if( entry.contains(
"td_maxlen" ) )
634 if( entry.contains(
"td_maxheight" ) )
637 if( entry.contains(
"td_length_ratio" ) )
640 if( entry.contains(
"td_height_ratio" ) )
643 if( entry.contains(
"td_curve_segcount" ) )
645 if( entry[
"td_curve_segcount"].get<int>() > 0 )
649 if( entry.contains(
"td_width_to_size_filter_ratio" ) )
652 if( entry.contains(
"td_allow_use_two_tracks" ) )
655 if( entry.contains(
"td_on_pad_in_zone" ) )
663 [&]() -> nlohmann::json
665 nlohmann::json js = {};
670 nlohmann::json entry = {};
672 entry[
"min_amplitude"] =
pcbIUScale.IUTomm( aSettings.m_minAmplitude );
673 entry[
"max_amplitude"] =
pcbIUScale.IUTomm( aSettings.m_maxAmplitude );
674 entry[
"spacing"] =
pcbIUScale.IUTomm( aSettings.m_spacing );
676 entry[
"corner_radius_percentage"] = aSettings.m_cornerRadiusPercentage;
677 entry[
"single_sided"] = aSettings.m_singleSided;
688 [&](
const nlohmann::json& aObj )
695 if( entry.contains(
"min_amplitude" ) )
698 if( entry.contains(
"max_amplitude" ) )
701 if( entry.contains(
"spacing" ) )
704 if( entry.contains(
"corner_style" ) )
710 if( entry.contains(
"corner_radius_percentage" ) )
713 if( entry.contains(
"single_sided" ) )
719 if( aObj.contains(
"single_track_defaults" ) )
722 if( aObj.contains(
"diff_pair_defaults" ) )
725 if( aObj.contains(
"diff_pair_skew_defaults" ) )
737 minStroke, maxStroke,
pcbIUScale.MM_PER_IU ) );
741 minTextSize, maxTextSize,
pcbIUScale.MM_PER_IU ) );
745 minTextSize, maxTextSize,
pcbIUScale.MM_PER_IU ) );
749 minStroke, maxStroke,
pcbIUScale.MM_PER_IU ) );
759 minStroke, maxStroke,
pcbIUScale.MM_PER_IU ) );
763 minTextSize, maxTextSize,
pcbIUScale.MM_PER_IU ) );
767 minTextSize, maxTextSize,
pcbIUScale.MM_PER_IU ) );
771 minStroke, maxStroke,
pcbIUScale.MM_PER_IU ) );
781 minStroke, maxStroke,
pcbIUScale.MM_PER_IU ) );
785 minStroke, maxStroke,
pcbIUScale.MM_PER_IU ) );
789 minStroke, maxStroke,
pcbIUScale.MM_PER_IU ) );
793 minTextSize, maxTextSize,
pcbIUScale.MM_PER_IU ) );
797 minTextSize, maxTextSize,
pcbIUScale.MM_PER_IU ) );
801 minStroke, maxStroke,
pcbIUScale.MM_PER_IU ) );
811 minStroke, maxStroke,
pcbIUScale.MM_PER_IU ) );
815 minTextSize, maxTextSize,
pcbIUScale.MM_PER_IU ) );
819 minTextSize, maxTextSize,
pcbIUScale.MM_PER_IU ) );
823 minStroke, maxStroke,
pcbIUScale.MM_PER_IU ) );
897 "defaults.zones.hatch_orientation",
935 "defaults.zones.pad_connection",
947 "defaults.zones.corner_smoothing",
959 "defaults.zones.corner_radius",
971 "defaults.zones.remove_islands",
983 "defaults.zones.min_island_area",
997 [&]() -> nlohmann::json
1008 [&](
const nlohmann::json& aJson )
1010 if( aJson.contains(
"width" ) && aJson.contains(
"height" )
1011 && aJson.contains(
"drill" ) )
1014 sz.
x =
pcbIUScale.mmToIU( aJson[
"width"].get<double>() );
1015 sz.
y =
pcbIUScale.mmToIU( aJson[
"height"].get<double>() );
1019 int drill =
pcbIUScale.mmToIU( aJson[
"drill"].get<double>() );
1044 if( std::optional<double> optval =
Get<double>(
"rules.solder_mask_clearance" ) )
1047 if( std::optional<double> optval =
Get<double>(
"rules.solder_mask_min_width" ) )
1050 if( std::optional<double> optval =
Get<double>(
"rules.solder_paste_clearance" ) )
1053 if( std::optional<double> optval =
Get<double>(
"rules.solder_paste_margin_ratio" ) )
1058 At(
"rules" ).erase(
"solder_mask_clearance" );
1059 At(
"rules" ).erase(
"solder_mask_min_width" );
1060 At(
"rules" ).erase(
"solder_paste_clearance" );
1061 At(
"rules" ).erase(
"solder_paste_margin_ratio" );
1075 m_parent->ReleaseNestedSettings(
this );
1324 std::string units_ptr(
"defaults.dimension_units" );
1325 std::string precision_ptr(
"defaults.dimension_precision" );
1329 &&
At( units_ptr ).is_number_integer()
1330 &&
At( precision_ptr ).is_number_integer() ) )
1336 int units = *
Get<int>( units_ptr );
1337 int precision = *
Get<int>( precision_ptr );
1340 int extraDigits = 0;
1344 case 0: extraDigits = 3;
break;
1345 case 2: extraDigits = 2;
break;
1349 precision += extraDigits;
1351 Set( precision_ptr, precision );
1370 bool migrated =
false;
1373 [](
int aCode ) -> std::string
1375 return std::string(
DRC_ITEM::Create( aCode )->GetSettingsKey().ToUTF8() );
1378 const std::string rs =
"rule_severities.";
1379 const std::string no_courtyard_key =
"legacy_no_courtyard_defined";
1380 const std::string courtyard_overlap_key =
"legacy_courtyards_overlap";
1384 nlohmann::json& severities =
1385 project->Internals()->at(
"/board/design_settings/rule_severities"_json_pointer );
1387 if( severities.contains( no_courtyard_key ) )
1389 if( severities[no_courtyard_key].get<bool>() )
1394 severities.erase( no_courtyard_key );
1398 if( severities.contains( courtyard_overlap_key ) )
1400 if( severities[courtyard_overlap_key].get<bool>() )
1405 severities.erase( courtyard_overlap_key );
1419 project->At(
"legacy" ).erase(
"pcbnew" );
1442std::vector<BOARD_DESIGN_SETTINGS::VALIDATION_ERROR>
1445 std::vector<VALIDATION_ERROR> errors;
1448 auto addRangeError =
1449 [&](
const wxString& aField,
int aValue,
int aMin,
int aMax )
1451 if( aValue < aMin || aValue > aMax )
1460 wxString::Format(
_(
"Value must be between %s and %s." ),
1461 minValue, maxValue )
1466 auto addRatioRangeError =
1467 [&](
const wxString& aField,
double aValue,
double aMin,
double aMax )
1469 if( !std::isfinite( aValue ) || aValue < aMin || aValue > aMax )
1473 wxString::Format(
_(
"Value must be between %.3f and %.3f." ),
1481 addRangeError( wxS(
"min_connection" ),
m_MinConn,
1513 wxS(
"min_resolved_spokes" ),
1514 _(
"Value must be between 0 and 99." )
1518 addRangeError( wxS(
"max_error" ),
m_MaxError,
1544 wxString::Format( wxS(
"teardrop_parameters[%s].max_length" ), target ),
1545 _(
"Value must be greater than or equal to 0." )
1552 wxString::Format( wxS(
"teardrop_parameters[%s].max_width" ), target ),
1553 _(
"Value must be greater than or equal to 0." )
1557 addRatioRangeError( wxString::Format( wxS(
"teardrop_parameters[%s].best_length_ratio" ), target ),
1559 addRatioRangeError( wxString::Format( wxS(
"teardrop_parameters[%s].best_width_ratio" ), target ),
1561 addRatioRangeError( wxString::Format( wxS(
"teardrop_parameters[%s].width_to_size_filter_ratio" ),
1573 wxString::Format( wxS(
"diff_pair_dimensions_list[%zu].gap" ), ii ),
1574 _(
"No differential pair gap defined." )
1583 std::optional<int> viaDiameter;
1584 std::optional<int> viaDrill;
1592 if( std::optional<PCB_VIA::VIA_PARAMETER_ERROR> error =
1596 wxString::Format( wxS(
"via_dimensions_list[%zu]" ), ii ),
1617 biggest = std::max( biggest, constraint.
Value().
Min() );
1620 biggest = std::max( biggest, constraint.
Value().
Min() );
1623 biggest = std::max( biggest, constraint.
Value().
Min() );
1626 biggest = std::max( biggest, constraint.
Value().
Min() );
1629 biggest = std::max( biggest, constraint.
Value().
Min() );
1632 biggest = std::max( biggest, constraint.
Value().
Min() );
1657 if( aListSize <= 1 )
1660 constexpr int lowestRealIndex = 1;
1661 int next = aIndex + ( aForward ? 1 : -1 );
1663 if(
next >= aListSize )
1664 next = lowestRealIndex;
1665 else if(
next < lowestRealIndex )
1666 next = aListSize - 1;
1692 return m_NetSettings->GetDefaultNetclass()->GetViaDiameter();
1709 return drill > 0 ? drill : -1;
1733 return m_NetSettings->GetDefaultNetclass()->GetTrackWidth();
1762 if(
m_NetSettings->GetDefaultNetclass()->HasDiffPairWidth() )
1763 return m_NetSettings->GetDefaultNetclass()->GetDiffPairWidth();
1765 return m_NetSettings->GetDefaultNetclass()->GetTrackWidth();
1783 return m_NetSettings->GetDefaultNetclass()->GetDiffPairGap();
1802 if(
m_NetSettings->GetDefaultNetclass()->HasDiffPairViaGap() )
1803 return m_NetSettings->GetDefaultNetclass()->GetDiffPairViaGap();
1821 if( aNewLayerCount > 0 )
1832 if( aNewLayerCount > 0 )
1849 LSET copperLayers = aMask;
1871 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 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
std::map< wxString, wxString > m_DrcExclusionComments
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
std::set< wxString > m_DrcExclusions
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]
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
int m_DimensionArrowLength
MINOPTMAX< int > & Value()
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 LSET UserDefinedLayersMask(int aUserDefinedLayerCount=MAX_USER_DEFINED_LAYERS)
Return a mask with the requested number of user defined layers.
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()
static constexpr PCB_LAYER_ID ALL_LAYERS
! Temporary layer identifier to identify code that is not padstack-aware
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_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_OVERLAPPING_FOOTPRINTS
@ DRCE_SCHEMATIC_FIELDS_PARITY
@ DRCE_TRACK_NOT_CENTERED_ON_VIA
@ DRCE_MISSING_TUNING_PROFILE
@ DRCE_DRILLED_HOLES_TOO_CLOSE
@ DRCE_FOOTPRINT_TYPE_MISMATCH
@ DRCE_NONMIRRORED_TEXT_ON_BACK_LAYER
@ DRCE_DUPLICATE_FOOTPRINT
@ DRCE_DRILLED_HOLES_COLOCATED
@ DRCE_LIB_FOOTPRINT_MISMATCH
@ 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)
bool IsCopperLayer(int aLayerId)
Test whether a layer is a copper layer.
PCB_LAYER_ID
A quick note on layer IDs:
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.
Container to handle a stock of specific differential pairs each with unique track width,...
Container to handle a stock of specific vias each with unique diameter and drill sizes in the BOARD c...
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