52 m_NetSettings = std::make_shared<NET_SETTINGS>(
nullptr,
"" );
319 [&]() -> nlohmann::json
321 nlohmann::json ret = {};
325 wxString
name = item.GetSettingsKey();
326 int code = item.GetErrorCode();
336 [&](
const nlohmann::json& aJson )
338 if( !aJson.is_object() )
343 wxString name = item.GetSettingsKey();
344 std::string key( name.ToUTF8() );
346 if( aJson.contains( key ) )
347 m_DRCSeverities[item.GetErrorCode()] = SeverityFromString( aJson[key] );
352 [&]() -> nlohmann::json
354 nlohmann::json js = nlohmann::json::array();
361 [&](
const nlohmann::json& aObj )
365 if( !aObj.is_array() )
368 for(
const nlohmann::json& entry : aObj )
370 if( entry.is_array() )
372 wxString serialized = entry[0].get<wxString>();
376 else if( entry.is_string() )
385 [&]() -> nlohmann::json
387 nlohmann::json js = nlohmann::json::array();
394 [&](
const nlohmann::json& aJson )
396 if( !aJson.is_array() )
401 for(
const nlohmann::json& entry : aJson )
412 [&]() -> nlohmann::json
414 nlohmann::json js = nlohmann::json::array();
418 nlohmann::json entry = {};
423 js.push_back( entry );
428 [&](
const nlohmann::json& aObj )
430 if( !aObj.is_array() )
435 for(
const nlohmann::json& entry : aObj )
437 if( entry.empty() || !entry.is_object() )
440 if( !entry.contains(
"diameter" ) || !entry.contains(
"drill" ) )
452 [&]() -> nlohmann::json
454 nlohmann::json js = nlohmann::json::array();
458 nlohmann::json entry = {};
464 js.push_back( entry );
469 [&](
const nlohmann::json& aObj )
471 if( !aObj.is_array() )
476 for(
const nlohmann::json& entry : aObj )
478 if( entry.empty() || !entry.is_object() )
481 if( !entry.contains(
"width" )
482 || !entry.contains(
"gap" )
483 || !entry.contains(
"via_gap" ) )
499 [&]() -> nlohmann::json
501 nlohmann::json js = nlohmann::json::array();
502 nlohmann::json entry = {};
510 js.push_back( entry );
514 [&](
const nlohmann::json& aObj )
516 if( !aObj.is_array() )
519 for(
const nlohmann::json& entry : aObj )
521 if( entry.empty() || !entry.is_object() )
524 if( entry.contains(
"td_onvia" ) )
527 if( entry.contains(
"td_onpthpad" ) )
530 if( entry.contains(
"td_onsmdpad" ) )
533 if( entry.contains(
"td_ontrackend" ) )
536 if( entry.contains(
"td_onroundshapesonly" ) )
540 for(
int ii = 0; ii < 3; ++ii )
544 if( entry.contains(
"td_allow_use_two_tracks" ) )
547 if( entry.contains(
"td_curve_segcount" ) )
549 if( entry[
"td_curve_segcount"].get<int>() > 0 )
553 if( entry.contains(
"td_on_pad_in_zone" ) )
562 [&]() -> nlohmann::json
564 nlohmann::json js = nlohmann::json::array();
568 nlohmann::json entry = {};
581 js.push_back( entry );
586 [&](
const nlohmann::json& aObj )
588 if( !aObj.is_array() )
591 for(
const nlohmann::json& entry : aObj )
593 if( entry.empty() || !entry.is_object() )
596 if( !entry.contains(
"td_target_name" ) )
601 if( idx >= 0 && idx < 3 )
605 if( entry.contains(
"td_maxlen" ) )
608 if( entry.contains(
"td_maxheight" ) )
611 if( entry.contains(
"td_length_ratio" ) )
614 if( entry.contains(
"td_height_ratio" ) )
617 if( entry.contains(
"td_curve_segcount" ) )
619 if( entry[
"td_curve_segcount"].get<int>() > 0 )
623 if( entry.contains(
"td_width_to_size_filter_ratio" ) )
626 if( entry.contains(
"td_allow_use_two_tracks" ) )
629 if( entry.contains(
"td_on_pad_in_zone" ) )
637 [&]() -> nlohmann::json
639 nlohmann::json js = {};
644 nlohmann::json entry = {};
650 entry[
"corner_radius_percentage"] = aSettings.m_cornerRadiusPercentage;
651 entry[
"single_sided"] = aSettings.m_singleSided;
662 [&](
const nlohmann::json& aObj )
669 if( entry.contains(
"min_amplitude" ) )
672 if( entry.contains(
"max_amplitude" ) )
675 if( entry.contains(
"spacing" ) )
678 if( entry.contains(
"corner_style" ) )
684 if( entry.contains(
"corner_radius_percentage" ) )
687 if( entry.contains(
"single_sided" ) )
693 if( aObj.contains(
"single_track_defaults" ) )
696 if( aObj.contains(
"diff_pair_defaults" ) )
699 if( aObj.contains(
"diff_pair_skew_defaults" ) )
807 DIM_UNITS_MODE::AUTOMATIC ) );
814 DIM_UNITS_FORMAT::PAREN_SUFFIX ) );
822 DIM_TEXT_POSITION::INLINE ) );
847 [&]() -> nlohmann::json
858 [&](
const nlohmann::json& aJson )
860 if( aJson.contains(
"width" ) && aJson.contains(
"height" )
861 && aJson.contains(
"drill" ) )
894 if( std::optional<double> optval = Get<double>(
"rules.solder_mask_clearance" ) )
897 if( std::optional<double> optval = Get<double>(
"rules.solder_mask_min_width" ) )
900 if( std::optional<double> optval = Get<double>(
"rules.solder_paste_clearance" ) )
903 if( std::optional<double> optval = Get<double>(
"rules.solder_paste_margin_ratio" ) )
908 At(
"rules" ).erase(
"solder_mask_clearance" );
909 At(
"rules" ).erase(
"solder_mask_min_width" );
910 At(
"rules" ).erase(
"solder_paste_clearance" );
911 At(
"rules" ).erase(
"solder_paste_margin_ratio" );
934 m_Pad_Master( nullptr )
1158 std::string units_ptr(
"defaults.dimension_units" );
1159 std::string precision_ptr(
"defaults.dimension_precision" );
1163 &&
At( units_ptr ).is_number_integer()
1164 &&
At( precision_ptr ).is_number_integer() ) )
1170 int units = *Get<int>( units_ptr );
1171 int precision = *Get<int>( precision_ptr );
1174 int extraDigits = 0;
1178 case 0: extraDigits = 3;
break;
1179 case 2: extraDigits = 2;
break;
1183 precision += extraDigits;
1185 Set( precision_ptr, precision );
1204 bool migrated =
false;
1207 [](
int aCode ) -> std::string
1210 wxString
name = item->GetSettingsKey();
1211 return std::string(
name.ToUTF8() );
1214 const std::string rs =
"rule_severities.";
1215 const std::string no_courtyard_key =
"legacy_no_courtyard_defined";
1216 const std::string courtyard_overlap_key =
"legacy_courtyards_overlap";
1220 nlohmann::json& severities =
1221 project->Internals()->at(
"/board/design_settings/rule_severities"_json_pointer );
1223 if( severities.contains( no_courtyard_key ) )
1225 if( severities[no_courtyard_key].get<bool>() )
1230 severities.erase( no_courtyard_key );
1234 if( severities.contains( courtyard_overlap_key ) )
1236 if( severities[courtyard_overlap_key].get<bool>() )
1241 severities.erase( courtyard_overlap_key );
1255 project->At(
"legacy" ).erase(
"pcbnew" );
1289 biggest = std::max( biggest, constraint.
Value().
Min() );
1292 biggest = std::max( biggest, constraint.
Value().
Min() );
1295 biggest = std::max( biggest, constraint.
Value().
Min() );
1298 biggest = std::max( biggest, constraint.
Value().
Min() );
1301 biggest = std::max( biggest, constraint.
Value().
Min() );
1331 return m_NetSettings->GetDefaultNetclass()->GetViaDiameter();
1348 return drill > 0 ? drill : -1;
1364 return m_NetSettings->GetDefaultNetclass()->GetTrackWidth();
1390 if(
m_NetSettings->GetDefaultNetclass()->HasDiffPairWidth() )
1391 return m_NetSettings->GetDefaultNetclass()->GetDiffPairWidth();
1393 return m_NetSettings->GetDefaultNetclass()->GetTrackWidth();
1411 return m_NetSettings->GetDefaultNetclass()->GetDiffPairGap();
1430 if(
m_NetSettings->GetDefaultNetclass()->HasDiffPairViaGap() )
1431 return m_NetSettings->GetDefaultNetclass()->GetDiffPairViaGap();
1449 if( aNewLayerCount > 0 )
1460 if( aNewLayerCount > 0 )
1494 else if( aLayer ==
F_Fab || aLayer ==
B_Fab )
1546 m_Pad_Master->SetDrillShape( PAD_DRILL_SHAPE::CIRCLE );
constexpr int ARC_HIGH_DEF
constexpr EDA_IU_SCALE pcbIUScale
const int bdsSchemaVersion
#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 DEFAULT_HOLECLEARANCE
#define DEFAULT_SOLDERMASK_EXPANSION
#define DEFAULT_SOLDERMASK_MIN_WIDTH
#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 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)
Container for design settings for a BOARD object.
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 SetDiffPairIndex(unsigned aIndex)
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
wxString m_currentNetClassName
Current net class name used to display netclass info.
std::shared_ptr< DRC_ENGINE > m_DRCEngine
bool m_UseConnectedTrackWidth
virtual ~BOARD_DESIGN_SETTINGS()
void SetEnabledLayers(LSET aMask)
Change the bit-mask of enabled layers to aMask.
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.
int m_SolderMaskToCopperClearance
unsigned m_trackWidthIndex
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
void SetTrackWidthIndex(unsigned aIndex)
Set the current track width list index to aIndex.
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.
void SetViaSizeIndex(unsigned aIndex)
Set the current via size list index to aIndex.
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
int m_TextThickness[LAYER_CLASS_COUNT]
ZONE_SETTINGS m_defaultZoneSettings
The default settings that will be used for new zones.
SEVERITY GetSeverity(int aDRCErrorCode)
std::vector< int > m_TrackWidthList
DIFF_PAIR_DIMENSION m_customDiffPair
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(bool aIncludeDeprecated=false)
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::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...
void ReleaseNestedSettings(NESTED_SETTINGS *aSettings)
Saves and frees a nested settings object, if it exists within this one.
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.
LSET & ClearUserDefinedLayers()
Clear the user defined layers in this set.
static LSET AllCuMask(int aCuLayerCount=MAX_CU_LAYERS)
Return a mask holding the requested number of Cu PCB_LAYER_IDs.
LSET & ClearNonCopperLayers()
Clear the non-copper layers in this set.
LSET & ClearCopperLayers()
Clear the 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.
NESTED_SETTINGS is a JSON_SETTINGS that lives inside a JSON_SETTINGS.
JSON_SETTINGS * GetParent()
JSON_SETTINGS * m_parent
A pointer to the parent object to load and store from.
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...
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.
bool m_UseRoundShapesOnly
True to create teardrops for round shapes only.
bool m_TargetVias
True to create teardrops for vias.
bool m_TargetPTHPads
True to create teardrops for pads with holes.
bool m_TargetTrack2Track
True to create teardrops at the end of a track connected to the end of another track having a differe...
TEARDROP_PARAMETERS * GetParameters(TARGET_TD aTdType)
size_t GetParametersCount()
bool m_TargetSMDPads
True to create teardrops for pads SMD, edge connectors,.
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_SILK_EDGE_CLEARANCE
@ DRCE_MIRRORED_TEXT_ON_FRONT_LAYER
@ DRCE_LIB_FOOTPRINT_ISSUES
@ DRCE_OVERLAPPING_FOOTPRINTS
@ 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
@ HOLE_CLEARANCE_CONSTRAINT
@ PHYSICAL_CLEARANCE_CONSTRAINT
@ HOLE_TO_HOLE_CONSTRAINT
#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:
Container to handle a stock of specific differential pairs each with unique track width,...
constexpr double IUTomm(int iu) const
constexpr int MilsToIU(int mils) const
constexpr int mmToIU(double mm) const
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)
wxString SeverityToString(const SEVERITY &aSeverity)
VECTOR2< int32_t > VECTOR2I
#define ZONE_CLEARANCE_MM