54 m_NetSettings = std::make_shared<NET_SETTINGS>(
nullptr,
"" );
339 [&]() -> nlohmann::json
341 nlohmann::json ret = {};
345 wxString
name = item.GetSettingsKey();
346 int code = item.GetErrorCode();
356 [&](
const nlohmann::json& aJson )
358 if( !aJson.is_object() )
366 if( aJson.contains(
"hole_near_hole" ) )
371 wxString
name = item.GetSettingsKey();
372 std::string key(
name.ToUTF8() );
374 if( aJson.contains( key ) )
380 [&]() -> nlohmann::json
382 nlohmann::json js = nlohmann::json::array();
389 [&](
const nlohmann::json& aObj )
393 if( !aObj.is_array() )
396 for(
const nlohmann::json& entry : aObj )
398 if( entry.is_array() )
400 wxString serialized = entry[0].get<wxString>();
404 else if( entry.is_string() )
413 [&]() -> nlohmann::json
415 nlohmann::json js = nlohmann::json::array();
422 [&](
const nlohmann::json& aJson )
424 if( !aJson.is_array() )
429 for(
const nlohmann::json& entry : aJson )
440 [&]() -> nlohmann::json
442 nlohmann::json js = nlohmann::json::array();
446 nlohmann::json entry = {};
451 js.push_back( entry );
456 [&](
const nlohmann::json& aObj )
458 if( !aObj.is_array() )
463 for(
const nlohmann::json& entry : aObj )
465 if( entry.empty() || !entry.is_object() )
468 if( !entry.contains(
"diameter" ) || !entry.contains(
"drill" ) )
471 int diameter =
pcbIUScale.mmToIU( entry[
"diameter"].get<double>() );
472 int drill =
pcbIUScale.mmToIU( entry[
"drill"].get<double>() );
480 [&]() -> nlohmann::json
482 nlohmann::json js = nlohmann::json::array();
486 nlohmann::json entry = {};
488 entry[
"width"] =
pcbIUScale.IUTomm( pair.m_Width );
489 entry[
"gap"] =
pcbIUScale.IUTomm( pair.m_Gap );
490 entry[
"via_gap"] =
pcbIUScale.IUTomm( pair.m_ViaGap );
492 js.push_back( entry );
497 [&](
const nlohmann::json& aObj )
499 if( !aObj.is_array() )
504 for(
const nlohmann::json& entry : aObj )
506 if( entry.empty() || !entry.is_object() )
509 if( !entry.contains(
"width" )
510 || !entry.contains(
"gap" )
511 || !entry.contains(
"via_gap" ) )
516 int width =
pcbIUScale.mmToIU( entry[
"width"].get<double>() );
517 int gap =
pcbIUScale.mmToIU( entry[
"gap"].get<double>() );
518 int via_gap =
pcbIUScale.mmToIU( entry[
"via_gap"].get<double>() );
527 [&]() -> nlohmann::json
529 nlohmann::json js = nlohmann::json::array();
530 nlohmann::json entry = {};
538 js.push_back( entry );
542 [&](
const nlohmann::json& aObj )
544 if( !aObj.is_array() )
547 for(
const nlohmann::json& entry : aObj )
549 if( entry.empty() || !entry.is_object() )
552 if( entry.contains(
"td_onvia" ) )
555 if( entry.contains(
"td_onpthpad" ) )
558 if( entry.contains(
"td_onsmdpad" ) )
561 if( entry.contains(
"td_ontrackend" ) )
564 if( entry.contains(
"td_onroundshapesonly" ) )
568 for(
int ii = 0; ii < 3; ++ii )
572 if( entry.contains(
"td_allow_use_two_tracks" ) )
575 if( entry.contains(
"td_curve_segcount" ) )
577 if( entry[
"td_curve_segcount"].get<int>() > 0 )
581 if( entry.contains(
"td_on_pad_in_zone" ) )
590 [&]() -> nlohmann::json
592 nlohmann::json js = nlohmann::json::array();
596 nlohmann::json entry = {};
609 js.push_back( entry );
614 [&](
const nlohmann::json& aObj )
616 if( !aObj.is_array() )
619 for(
const nlohmann::json& entry : aObj )
621 if( entry.empty() || !entry.is_object() )
624 if( !entry.contains(
"td_target_name" ) )
629 if( idx >= 0 && idx < 3 )
633 if( entry.contains(
"td_maxlen" ) )
636 if( entry.contains(
"td_maxheight" ) )
639 if( entry.contains(
"td_length_ratio" ) )
642 if( entry.contains(
"td_height_ratio" ) )
645 if( entry.contains(
"td_curve_segcount" ) )
647 if( entry[
"td_curve_segcount"].get<int>() > 0 )
651 if( entry.contains(
"td_width_to_size_filter_ratio" ) )
654 if( entry.contains(
"td_allow_use_two_tracks" ) )
657 if( entry.contains(
"td_on_pad_in_zone" ) )
665 [&]() -> nlohmann::json
667 nlohmann::json js = {};
672 nlohmann::json entry = {};
674 entry[
"min_amplitude"] =
pcbIUScale.IUTomm( aSettings.m_minAmplitude );
675 entry[
"max_amplitude"] =
pcbIUScale.IUTomm( aSettings.m_maxAmplitude );
676 entry[
"spacing"] =
pcbIUScale.IUTomm( aSettings.m_spacing );
678 entry[
"corner_radius_percentage"] = aSettings.m_cornerRadiusPercentage;
679 entry[
"single_sided"] = aSettings.m_singleSided;
690 [&](
const nlohmann::json& aObj )
697 if( entry.contains(
"min_amplitude" ) )
700 if( entry.contains(
"max_amplitude" ) )
703 if( entry.contains(
"spacing" ) )
706 if( entry.contains(
"corner_style" ) )
712 if( entry.contains(
"corner_radius_percentage" ) )
715 if( entry.contains(
"single_sided" ) )
721 if( aObj.contains(
"single_track_defaults" ) )
724 if( aObj.contains(
"diff_pair_defaults" ) )
727 if( aObj.contains(
"diff_pair_skew_defaults" ) )
739 minStroke, maxStroke,
pcbIUScale.MM_PER_IU ) );
743 minTextSize, maxTextSize,
pcbIUScale.MM_PER_IU ) );
747 minTextSize, maxTextSize,
pcbIUScale.MM_PER_IU ) );
751 minStroke, maxStroke,
pcbIUScale.MM_PER_IU ) );
761 minStroke, maxStroke,
pcbIUScale.MM_PER_IU ) );
765 minTextSize, maxTextSize,
pcbIUScale.MM_PER_IU ) );
769 minTextSize, maxTextSize,
pcbIUScale.MM_PER_IU ) );
773 minStroke, maxStroke,
pcbIUScale.MM_PER_IU ) );
783 minStroke, maxStroke,
pcbIUScale.MM_PER_IU ) );
787 minStroke, maxStroke,
pcbIUScale.MM_PER_IU ) );
791 minStroke, maxStroke,
pcbIUScale.MM_PER_IU ) );
795 minTextSize, maxTextSize,
pcbIUScale.MM_PER_IU ) );
799 minTextSize, maxTextSize,
pcbIUScale.MM_PER_IU ) );
803 minStroke, maxStroke,
pcbIUScale.MM_PER_IU ) );
813 minStroke, maxStroke,
pcbIUScale.MM_PER_IU ) );
817 minTextSize, maxTextSize,
pcbIUScale.MM_PER_IU ) );
821 minTextSize, maxTextSize,
pcbIUScale.MM_PER_IU ) );
825 minStroke, maxStroke,
pcbIUScale.MM_PER_IU ) );
879 [&]() -> nlohmann::json
890 [&](
const nlohmann::json& aJson )
892 if( aJson.contains(
"width" ) && aJson.contains(
"height" )
893 && aJson.contains(
"drill" ) )
896 sz.
x =
pcbIUScale.mmToIU( aJson[
"width"].get<double>() );
897 sz.
y =
pcbIUScale.mmToIU( aJson[
"height"].get<double>() );
901 int drill =
pcbIUScale.mmToIU( aJson[
"drill"].get<double>() );
926 if( std::optional<double> optval =
Get<double>(
"rules.solder_mask_clearance" ) )
929 if( std::optional<double> optval =
Get<double>(
"rules.solder_mask_min_width" ) )
932 if( std::optional<double> optval =
Get<double>(
"rules.solder_paste_clearance" ) )
935 if( std::optional<double> optval =
Get<double>(
"rules.solder_paste_margin_ratio" ) )
940 At(
"rules" ).erase(
"solder_mask_clearance" );
941 At(
"rules" ).erase(
"solder_mask_min_width" );
942 At(
"rules" ).erase(
"solder_paste_clearance" );
943 At(
"rules" ).erase(
"solder_paste_margin_ratio" );
957 m_parent->ReleaseNestedSettings(
this );
1206 std::string units_ptr(
"defaults.dimension_units" );
1207 std::string precision_ptr(
"defaults.dimension_precision" );
1211 &&
At( units_ptr ).is_number_integer()
1212 &&
At( precision_ptr ).is_number_integer() ) )
1218 int units = *
Get<int>( units_ptr );
1219 int precision = *
Get<int>( precision_ptr );
1222 int extraDigits = 0;
1226 case 0: extraDigits = 3;
break;
1227 case 2: extraDigits = 2;
break;
1231 precision += extraDigits;
1233 Set( precision_ptr, precision );
1252 bool migrated =
false;
1255 [](
int aCode ) -> std::string
1257 return std::string(
DRC_ITEM::Create( aCode )->GetSettingsKey().ToUTF8() );
1260 const std::string rs =
"rule_severities.";
1261 const std::string no_courtyard_key =
"legacy_no_courtyard_defined";
1262 const std::string courtyard_overlap_key =
"legacy_courtyards_overlap";
1266 nlohmann::json& severities =
1267 project->Internals()->at(
"/board/design_settings/rule_severities"_json_pointer );
1269 if( severities.contains( no_courtyard_key ) )
1271 if( severities[no_courtyard_key].get<bool>() )
1276 severities.erase( no_courtyard_key );
1280 if( severities.contains( courtyard_overlap_key ) )
1282 if( severities[courtyard_overlap_key].get<bool>() )
1287 severities.erase( courtyard_overlap_key );
1301 project->At(
"legacy" ).erase(
"pcbnew" );
1324std::vector<BOARD_DESIGN_SETTINGS::VALIDATION_ERROR>
1327 std::vector<VALIDATION_ERROR> errors;
1330 auto addRangeError =
1331 [&](
const wxString& aField,
int aValue,
int aMin,
int aMax )
1333 if( aValue < aMin || aValue > aMax )
1342 wxString::Format(
_(
"Value must be between %s and %s." ),
1343 minValue, maxValue )
1348 auto addRatioRangeError =
1349 [&](
const wxString& aField,
double aValue,
double aMin,
double aMax )
1351 if( !std::isfinite( aValue ) || aValue < aMin || aValue > aMax )
1355 wxString::Format(
_(
"Value must be between %.3f and %.3f." ),
1363 addRangeError( wxS(
"min_connection" ),
m_MinConn,
1395 wxS(
"min_resolved_spokes" ),
1396 _(
"Value must be between 0 and 99." )
1400 addRangeError( wxS(
"max_error" ),
m_MaxError,
1426 wxString::Format( wxS(
"teardrop_parameters[%s].max_length" ), target ),
1427 _(
"Value must be greater than or equal to 0." )
1434 wxString::Format( wxS(
"teardrop_parameters[%s].max_width" ), target ),
1435 _(
"Value must be greater than or equal to 0." )
1439 addRatioRangeError( wxString::Format( wxS(
"teardrop_parameters[%s].best_length_ratio" ), target ),
1441 addRatioRangeError( wxString::Format( wxS(
"teardrop_parameters[%s].best_width_ratio" ), target ),
1443 addRatioRangeError( wxString::Format( wxS(
"teardrop_parameters[%s].width_to_size_filter_ratio" ),
1455 wxString::Format( wxS(
"diff_pair_dimensions_list[%zu].gap" ), ii ),
1456 _(
"No differential pair gap defined." )
1465 std::optional<int> viaDiameter;
1466 std::optional<int> viaDrill;
1474 if( std::optional<PCB_VIA::VIA_PARAMETER_ERROR> error =
1478 wxString::Format( wxS(
"via_dimensions_list[%zu]" ), ii ),
1499 biggest = std::max( biggest, constraint.
Value().
Min() );
1502 biggest = std::max( biggest, constraint.
Value().
Min() );
1505 biggest = std::max( biggest, constraint.
Value().
Min() );
1508 biggest = std::max( biggest, constraint.
Value().
Min() );
1511 biggest = std::max( biggest, constraint.
Value().
Min() );
1542 return m_NetSettings->GetDefaultNetclass()->GetViaDiameter();
1559 return drill > 0 ? drill : -1;
1575 return m_NetSettings->GetDefaultNetclass()->GetTrackWidth();
1598 if(
m_NetSettings->GetDefaultNetclass()->HasDiffPairWidth() )
1599 return m_NetSettings->GetDefaultNetclass()->GetDiffPairWidth();
1601 return m_NetSettings->GetDefaultNetclass()->GetTrackWidth();
1619 return m_NetSettings->GetDefaultNetclass()->GetDiffPairGap();
1638 if(
m_NetSettings->GetDefaultNetclass()->HasDiffPairViaGap() )
1639 return m_NetSettings->GetDefaultNetclass()->GetDiffPairViaGap();
1657 if( aNewLayerCount > 0 )
1668 if( aNewLayerCount > 0 )
1685 LSET copperLayers = aMask;
1707 else if( aLayer ==
F_Fab || aLayer ==
B_Fab )
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 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
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
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.
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
@ 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
#define ZONE_CLEARANCE_MM