51 m_NetSettings = std::make_shared<NET_SETTINGS>(
nullptr,
"" );
336 [&]() -> nlohmann::json
338 nlohmann::json ret = {};
342 wxString
name = item.GetSettingsKey();
343 int code = item.GetErrorCode();
353 [&](
const nlohmann::json& aJson )
355 if( !aJson.is_object() )
363 if( aJson.contains(
"hole_near_hole" ) )
368 wxString
name = item.GetSettingsKey();
369 std::string key(
name.ToUTF8() );
371 if( aJson.contains( key ) )
377 [&]() -> nlohmann::json
379 nlohmann::json js = nlohmann::json::array();
386 [&](
const nlohmann::json& aObj )
390 if( !aObj.is_array() )
393 for(
const nlohmann::json& entry : aObj )
395 if( entry.is_array() )
397 wxString serialized = entry[0].get<wxString>();
401 else if( entry.is_string() )
410 [&]() -> nlohmann::json
412 nlohmann::json js = nlohmann::json::array();
419 [&](
const nlohmann::json& aJson )
421 if( !aJson.is_array() )
426 for(
const nlohmann::json& entry : aJson )
437 [&]() -> nlohmann::json
439 nlohmann::json js = nlohmann::json::array();
443 nlohmann::json entry = {};
448 js.push_back( entry );
453 [&](
const nlohmann::json& aObj )
455 if( !aObj.is_array() )
460 for(
const nlohmann::json& entry : aObj )
462 if( entry.empty() || !entry.is_object() )
465 if( !entry.contains(
"diameter" ) || !entry.contains(
"drill" ) )
468 int diameter =
pcbIUScale.mmToIU( entry[
"diameter"].get<double>() );
469 int drill =
pcbIUScale.mmToIU( entry[
"drill"].get<double>() );
477 [&]() -> nlohmann::json
479 nlohmann::json js = nlohmann::json::array();
483 nlohmann::json entry = {};
485 entry[
"width"] =
pcbIUScale.IUTomm( pair.m_Width );
486 entry[
"gap"] =
pcbIUScale.IUTomm( pair.m_Gap );
487 entry[
"via_gap"] =
pcbIUScale.IUTomm( pair.m_ViaGap );
489 js.push_back( entry );
494 [&](
const nlohmann::json& aObj )
496 if( !aObj.is_array() )
501 for(
const nlohmann::json& entry : aObj )
503 if( entry.empty() || !entry.is_object() )
506 if( !entry.contains(
"width" )
507 || !entry.contains(
"gap" )
508 || !entry.contains(
"via_gap" ) )
513 int width =
pcbIUScale.mmToIU( entry[
"width"].get<double>() );
514 int gap =
pcbIUScale.mmToIU( entry[
"gap"].get<double>() );
515 int via_gap =
pcbIUScale.mmToIU( entry[
"via_gap"].get<double>() );
524 [&]() -> nlohmann::json
526 nlohmann::json js = nlohmann::json::array();
527 nlohmann::json entry = {};
535 js.push_back( entry );
539 [&](
const nlohmann::json& aObj )
541 if( !aObj.is_array() )
544 for(
const nlohmann::json& entry : aObj )
546 if( entry.empty() || !entry.is_object() )
549 if( entry.contains(
"td_onvia" ) )
552 if( entry.contains(
"td_onpthpad" ) )
555 if( entry.contains(
"td_onsmdpad" ) )
558 if( entry.contains(
"td_ontrackend" ) )
561 if( entry.contains(
"td_onroundshapesonly" ) )
565 for(
int ii = 0; ii < 3; ++ii )
569 if( entry.contains(
"td_allow_use_two_tracks" ) )
572 if( entry.contains(
"td_curve_segcount" ) )
574 if( entry[
"td_curve_segcount"].get<int>() > 0 )
578 if( entry.contains(
"td_on_pad_in_zone" ) )
587 [&]() -> nlohmann::json
589 nlohmann::json js = nlohmann::json::array();
593 nlohmann::json entry = {};
606 js.push_back( entry );
611 [&](
const nlohmann::json& aObj )
613 if( !aObj.is_array() )
616 for(
const nlohmann::json& entry : aObj )
618 if( entry.empty() || !entry.is_object() )
621 if( !entry.contains(
"td_target_name" ) )
626 if( idx >= 0 && idx < 3 )
630 if( entry.contains(
"td_maxlen" ) )
633 if( entry.contains(
"td_maxheight" ) )
636 if( entry.contains(
"td_length_ratio" ) )
639 if( entry.contains(
"td_height_ratio" ) )
642 if( entry.contains(
"td_curve_segcount" ) )
644 if( entry[
"td_curve_segcount"].get<int>() > 0 )
648 if( entry.contains(
"td_width_to_size_filter_ratio" ) )
651 if( entry.contains(
"td_allow_use_two_tracks" ) )
654 if( entry.contains(
"td_on_pad_in_zone" ) )
662 [&]() -> nlohmann::json
664 nlohmann::json js = {};
669 nlohmann::json entry = {};
671 entry[
"min_amplitude"] =
pcbIUScale.IUTomm( aSettings.m_minAmplitude );
672 entry[
"max_amplitude"] =
pcbIUScale.IUTomm( aSettings.m_maxAmplitude );
673 entry[
"spacing"] =
pcbIUScale.IUTomm( aSettings.m_spacing );
675 entry[
"corner_radius_percentage"] = aSettings.m_cornerRadiusPercentage;
676 entry[
"single_sided"] = aSettings.m_singleSided;
687 [&](
const nlohmann::json& aObj )
694 if( entry.contains(
"min_amplitude" ) )
697 if( entry.contains(
"max_amplitude" ) )
700 if( entry.contains(
"spacing" ) )
703 if( entry.contains(
"corner_style" ) )
709 if( entry.contains(
"corner_radius_percentage" ) )
712 if( entry.contains(
"single_sided" ) )
718 if( aObj.contains(
"single_track_defaults" ) )
721 if( aObj.contains(
"diff_pair_defaults" ) )
724 if( aObj.contains(
"diff_pair_skew_defaults" ) )
736 minStroke, maxStroke,
pcbIUScale.MM_PER_IU ) );
740 minTextSize, maxTextSize,
pcbIUScale.MM_PER_IU ) );
744 minTextSize, maxTextSize,
pcbIUScale.MM_PER_IU ) );
748 minStroke, maxStroke,
pcbIUScale.MM_PER_IU ) );
758 minStroke, maxStroke,
pcbIUScale.MM_PER_IU ) );
762 minTextSize, maxTextSize,
pcbIUScale.MM_PER_IU ) );
766 minTextSize, maxTextSize,
pcbIUScale.MM_PER_IU ) );
770 minStroke, maxStroke,
pcbIUScale.MM_PER_IU ) );
780 minStroke, maxStroke,
pcbIUScale.MM_PER_IU ) );
784 minStroke, maxStroke,
pcbIUScale.MM_PER_IU ) );
788 minStroke, maxStroke,
pcbIUScale.MM_PER_IU ) );
792 minTextSize, maxTextSize,
pcbIUScale.MM_PER_IU ) );
796 minTextSize, maxTextSize,
pcbIUScale.MM_PER_IU ) );
800 minStroke, maxStroke,
pcbIUScale.MM_PER_IU ) );
810 minStroke, maxStroke,
pcbIUScale.MM_PER_IU ) );
814 minTextSize, maxTextSize,
pcbIUScale.MM_PER_IU ) );
818 minTextSize, maxTextSize,
pcbIUScale.MM_PER_IU ) );
822 minStroke, maxStroke,
pcbIUScale.MM_PER_IU ) );
896 "defaults.zones.hatch_orientation",
934 "defaults.zones.pad_connection",
946 "defaults.zones.corner_smoothing",
958 "defaults.zones.corner_radius",
970 "defaults.zones.remove_islands",
982 "defaults.zones.min_island_area",
996 [&]() -> nlohmann::json
1007 [&](
const nlohmann::json& aJson )
1009 if( aJson.contains(
"width" ) && aJson.contains(
"height" )
1010 && aJson.contains(
"drill" ) )
1013 sz.
x =
pcbIUScale.mmToIU( aJson[
"width"].get<double>() );
1014 sz.
y =
pcbIUScale.mmToIU( aJson[
"height"].get<double>() );
1018 int drill =
pcbIUScale.mmToIU( aJson[
"drill"].get<double>() );
1043 if( std::optional<double> optval =
Get<double>(
"rules.solder_mask_clearance" ) )
1046 if( std::optional<double> optval =
Get<double>(
"rules.solder_mask_min_width" ) )
1049 if( std::optional<double> optval =
Get<double>(
"rules.solder_paste_clearance" ) )
1052 if( std::optional<double> optval =
Get<double>(
"rules.solder_paste_margin_ratio" ) )
1057 At(
"rules" ).erase(
"solder_mask_clearance" );
1058 At(
"rules" ).erase(
"solder_mask_min_width" );
1059 At(
"rules" ).erase(
"solder_paste_clearance" );
1060 At(
"rules" ).erase(
"solder_paste_margin_ratio" );
1074 m_parent->ReleaseNestedSettings(
this );
1323 std::string units_ptr(
"defaults.dimension_units" );
1324 std::string precision_ptr(
"defaults.dimension_precision" );
1328 &&
At( units_ptr ).is_number_integer()
1329 &&
At( precision_ptr ).is_number_integer() ) )
1335 int units = *
Get<int>( units_ptr );
1336 int precision = *
Get<int>( precision_ptr );
1339 int extraDigits = 0;
1343 case 0: extraDigits = 3;
break;
1344 case 2: extraDigits = 2;
break;
1348 precision += extraDigits;
1350 Set( precision_ptr, precision );
1369 bool migrated =
false;
1372 [](
int aCode ) -> std::string
1374 return std::string(
DRC_ITEM::Create( aCode )->GetSettingsKey().ToUTF8() );
1377 const std::string rs =
"rule_severities.";
1378 const std::string no_courtyard_key =
"legacy_no_courtyard_defined";
1379 const std::string courtyard_overlap_key =
"legacy_courtyards_overlap";
1383 nlohmann::json& severities =
1384 project->Internals()->at(
"/board/design_settings/rule_severities"_json_pointer );
1386 if( severities.contains( no_courtyard_key ) )
1388 if( severities[no_courtyard_key].get<bool>() )
1393 severities.erase( no_courtyard_key );
1397 if( severities.contains( courtyard_overlap_key ) )
1399 if( severities[courtyard_overlap_key].get<bool>() )
1404 severities.erase( courtyard_overlap_key );
1418 project->At(
"legacy" ).erase(
"pcbnew" );
1441std::vector<BOARD_DESIGN_SETTINGS::VALIDATION_ERROR>
1444 std::vector<VALIDATION_ERROR> errors;
1447 auto addRangeError =
1448 [&](
const wxString& aField,
int aValue,
int aMin,
int aMax )
1450 if( aValue < aMin || aValue > aMax )
1459 wxString::Format(
_(
"Value must be between %s and %s." ),
1460 minValue, maxValue )
1465 auto addRatioRangeError =
1466 [&](
const wxString& aField,
double aValue,
double aMin,
double aMax )
1468 if( !std::isfinite( aValue ) || aValue < aMin || aValue > aMax )
1472 wxString::Format(
_(
"Value must be between %.3f and %.3f." ),
1480 addRangeError( wxS(
"min_connection" ),
m_MinConn,
1512 wxS(
"min_resolved_spokes" ),
1513 _(
"Value must be between 0 and 99." )
1517 addRangeError( wxS(
"max_error" ),
m_MaxError,
1543 wxString::Format( wxS(
"teardrop_parameters[%s].max_length" ), target ),
1544 _(
"Value must be greater than or equal to 0." )
1551 wxString::Format( wxS(
"teardrop_parameters[%s].max_width" ), target ),
1552 _(
"Value must be greater than or equal to 0." )
1556 addRatioRangeError( wxString::Format( wxS(
"teardrop_parameters[%s].best_length_ratio" ), target ),
1558 addRatioRangeError( wxString::Format( wxS(
"teardrop_parameters[%s].best_width_ratio" ), target ),
1560 addRatioRangeError( wxString::Format( wxS(
"teardrop_parameters[%s].width_to_size_filter_ratio" ),
1572 wxString::Format( wxS(
"diff_pair_dimensions_list[%zu].gap" ), ii ),
1573 _(
"No differential pair gap defined." )
1582 std::optional<int> viaDiameter;
1583 std::optional<int> viaDrill;
1591 if( std::optional<PCB_VIA::VIA_PARAMETER_ERROR> error =
1595 wxString::Format( wxS(
"via_dimensions_list[%zu]" ), ii ),
1616 biggest = std::max( biggest, constraint.
Value().
Min() );
1619 biggest = std::max( biggest, constraint.
Value().
Min() );
1622 biggest = std::max( biggest, constraint.
Value().
Min() );
1625 biggest = std::max( biggest, constraint.
Value().
Min() );
1628 biggest = std::max( biggest, constraint.
Value().
Min() );
1631 biggest = std::max( biggest, constraint.
Value().
Min() );
1656 if( aListSize <= 1 )
1659 constexpr int lowestRealIndex = 1;
1660 int next = aIndex + ( aForward ? 1 : -1 );
1662 if(
next >= aListSize )
1663 next = lowestRealIndex;
1664 else if(
next < lowestRealIndex )
1665 next = aListSize - 1;
1691 return m_NetSettings->GetDefaultNetclass()->GetViaDiameter();
1708 return drill > 0 ? drill : -1;
1732 return m_NetSettings->GetDefaultNetclass()->GetTrackWidth();
1761 if(
m_NetSettings->GetDefaultNetclass()->HasDiffPairWidth() )
1762 return m_NetSettings->GetDefaultNetclass()->GetDiffPairWidth();
1764 return m_NetSettings->GetDefaultNetclass()->GetTrackWidth();
1782 return m_NetSettings->GetDefaultNetclass()->GetDiffPairGap();
1801 if(
m_NetSettings->GetDefaultNetclass()->HasDiffPairViaGap() )
1802 return m_NetSettings->GetDefaultNetclass()->GetDiffPairViaGap();
1820 if( aNewLayerCount > 0 )
1831 if( aNewLayerCount > 0 )
1848 LSET copperLayers = aMask;
1870 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_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