52 m_NetSettings = std::make_shared<NET_SETTINGS>(
nullptr,
"" );
329 [&]() -> nlohmann::json
331 nlohmann::json ret = {};
335 wxString
name = item.GetSettingsKey();
336 int code = item.GetErrorCode();
346 [&](
const nlohmann::json& aJson )
348 if( !aJson.is_object() )
353 wxString name = item.GetSettingsKey();
354 std::string key( name.ToUTF8() );
356 if( aJson.contains( key ) )
357 m_DRCSeverities[item.GetErrorCode()] = SeverityFromString( aJson[key] );
362 [&]() -> nlohmann::json
364 nlohmann::json js = nlohmann::json::array();
371 [&](
const nlohmann::json& aObj )
375 if( !aObj.is_array() )
378 for(
const nlohmann::json& entry : aObj )
380 if( entry.is_array() )
382 wxString serialized = entry[0].get<wxString>();
386 else if( entry.is_string() )
395 [&]() -> nlohmann::json
397 nlohmann::json js = nlohmann::json::array();
404 [&](
const nlohmann::json& aJson )
406 if( !aJson.is_array() )
411 for(
const nlohmann::json& entry : aJson )
422 [&]() -> nlohmann::json
424 nlohmann::json js = nlohmann::json::array();
428 nlohmann::json entry = {};
433 js.push_back( entry );
438 [&](
const nlohmann::json& aObj )
440 if( !aObj.is_array() )
445 for(
const nlohmann::json& entry : aObj )
447 if( entry.empty() || !entry.is_object() )
450 if( !entry.contains(
"diameter" ) || !entry.contains(
"drill" ) )
462 [&]() -> nlohmann::json
464 nlohmann::json js = nlohmann::json::array();
468 nlohmann::json entry = {};
474 js.push_back( entry );
479 [&](
const nlohmann::json& aObj )
481 if( !aObj.is_array() )
486 for(
const nlohmann::json& entry : aObj )
488 if( entry.empty() || !entry.is_object() )
491 if( !entry.contains(
"width" )
492 || !entry.contains(
"gap" )
493 || !entry.contains(
"via_gap" ) )
509 [&]() -> nlohmann::json
511 nlohmann::json js = nlohmann::json::array();
512 nlohmann::json entry = {};
520 js.push_back( entry );
524 [&](
const nlohmann::json& aObj )
526 if( !aObj.is_array() )
529 for(
const nlohmann::json& entry : aObj )
531 if( entry.empty() || !entry.is_object() )
534 if( entry.contains(
"td_onvia" ) )
537 if( entry.contains(
"td_onpthpad" ) )
540 if( entry.contains(
"td_onsmdpad" ) )
543 if( entry.contains(
"td_ontrackend" ) )
546 if( entry.contains(
"td_onroundshapesonly" ) )
550 for(
int ii = 0; ii < 3; ++ii )
554 if( entry.contains(
"td_allow_use_two_tracks" ) )
557 if( entry.contains(
"td_curve_segcount" ) )
559 if( entry[
"td_curve_segcount"].get<int>() > 0 )
563 if( entry.contains(
"td_on_pad_in_zone" ) )
572 [&]() -> nlohmann::json
574 nlohmann::json js = nlohmann::json::array();
578 nlohmann::json entry = {};
591 js.push_back( entry );
596 [&](
const nlohmann::json& aObj )
598 if( !aObj.is_array() )
601 for(
const nlohmann::json& entry : aObj )
603 if( entry.empty() || !entry.is_object() )
606 if( !entry.contains(
"td_target_name" ) )
611 if( idx >= 0 && idx < 3 )
615 if( entry.contains(
"td_maxlen" ) )
618 if( entry.contains(
"td_maxheight" ) )
621 if( entry.contains(
"td_length_ratio" ) )
624 if( entry.contains(
"td_height_ratio" ) )
627 if( entry.contains(
"td_curve_segcount" ) )
629 if( entry[
"td_curve_segcount"].get<int>() > 0 )
633 if( entry.contains(
"td_width_to_size_filter_ratio" ) )
636 if( entry.contains(
"td_allow_use_two_tracks" ) )
639 if( entry.contains(
"td_on_pad_in_zone" ) )
647 [&]() -> nlohmann::json
649 nlohmann::json js = {};
654 nlohmann::json entry = {};
660 entry[
"corner_radius_percentage"] = aSettings.m_cornerRadiusPercentage;
661 entry[
"single_sided"] = aSettings.m_singleSided;
672 [&](
const nlohmann::json& aObj )
679 if( entry.contains(
"min_amplitude" ) )
682 if( entry.contains(
"max_amplitude" ) )
685 if( entry.contains(
"spacing" ) )
688 if( entry.contains(
"corner_style" ) )
694 if( entry.contains(
"corner_radius_percentage" ) )
697 if( entry.contains(
"single_sided" ) )
703 if( aObj.contains(
"single_track_defaults" ) )
706 if( aObj.contains(
"diff_pair_defaults" ) )
709 if( aObj.contains(
"diff_pair_skew_defaults" ) )
817 DIM_UNITS_MODE::AUTOMATIC ) );
824 DIM_UNITS_FORMAT::PAREN_SUFFIX ) );
832 DIM_TEXT_POSITION::INLINE ) );
857 [&]() -> nlohmann::json
868 [&](
const nlohmann::json& aJson )
870 if( aJson.contains(
"width" ) && aJson.contains(
"height" )
871 && aJson.contains(
"drill" ) )
904 if( std::optional<double> optval = Get<double>(
"rules.solder_mask_clearance" ) )
907 if( std::optional<double> optval = Get<double>(
"rules.solder_mask_min_width" ) )
910 if( std::optional<double> optval = Get<double>(
"rules.solder_paste_clearance" ) )
913 if( std::optional<double> optval = Get<double>(
"rules.solder_paste_margin_ratio" ) )
918 At(
"rules" ).erase(
"solder_mask_clearance" );
919 At(
"rules" ).erase(
"solder_mask_min_width" );
920 At(
"rules" ).erase(
"solder_paste_clearance" );
921 At(
"rules" ).erase(
"solder_paste_margin_ratio" );
944 m_Pad_Master( nullptr )
1168 std::string units_ptr(
"defaults.dimension_units" );
1169 std::string precision_ptr(
"defaults.dimension_precision" );
1173 &&
At( units_ptr ).is_number_integer()
1174 &&
At( precision_ptr ).is_number_integer() ) )
1180 int units = *Get<int>( units_ptr );
1181 int precision = *Get<int>( precision_ptr );
1184 int extraDigits = 0;
1188 case 0: extraDigits = 3;
break;
1189 case 2: extraDigits = 2;
break;
1193 precision += extraDigits;
1195 Set( precision_ptr, precision );
1214 bool migrated =
false;
1217 [](
int aCode ) -> std::string
1220 wxString
name = item->GetSettingsKey();
1221 return std::string(
name.ToUTF8() );
1224 const std::string rs =
"rule_severities.";
1225 const std::string no_courtyard_key =
"legacy_no_courtyard_defined";
1226 const std::string courtyard_overlap_key =
"legacy_courtyards_overlap";
1230 nlohmann::json& severities =
1231 project->Internals()->at(
"/board/design_settings/rule_severities"_json_pointer );
1233 if( severities.contains( no_courtyard_key ) )
1235 if( severities[no_courtyard_key].get<bool>() )
1240 severities.erase( no_courtyard_key );
1244 if( severities.contains( courtyard_overlap_key ) )
1246 if( severities[courtyard_overlap_key].get<bool>() )
1251 severities.erase( courtyard_overlap_key );
1265 project->At(
"legacy" ).erase(
"pcbnew" );
1299 biggest = std::max( biggest, constraint.
Value().
Min() );
1302 biggest = std::max( biggest, constraint.
Value().
Min() );
1305 biggest = std::max( biggest, constraint.
Value().
Min() );
1308 biggest = std::max( biggest, constraint.
Value().
Min() );
1311 biggest = std::max( biggest, constraint.
Value().
Min() );
1342 return m_NetSettings->GetDefaultNetclass()->GetViaDiameter();
1359 return drill > 0 ? drill : -1;
1375 return m_NetSettings->GetDefaultNetclass()->GetTrackWidth();
1401 if(
m_NetSettings->GetDefaultNetclass()->HasDiffPairWidth() )
1402 return m_NetSettings->GetDefaultNetclass()->GetDiffPairWidth();
1404 return m_NetSettings->GetDefaultNetclass()->GetTrackWidth();
1422 return m_NetSettings->GetDefaultNetclass()->GetDiffPairGap();
1441 if(
m_NetSettings->GetDefaultNetclass()->HasDiffPairViaGap() )
1442 return m_NetSettings->GetDefaultNetclass()->GetDiffPairViaGap();
1460 if( aNewLayerCount > 0 )
1471 if( aNewLayerCount > 0 )
1488 LSET copperLayers = aMask;
1510 else if( aLayer ==
F_Fab || aLayer ==
B_Fab )
1562 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 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)
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)
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
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()
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