diff --git a/common/advanced_config.cpp b/common/advanced_config.cpp index d904875142..fdc3946b86 100644 --- a/common/advanced_config.cpp +++ b/common/advanced_config.cpp @@ -60,12 +60,12 @@ namespace AC_STACK */ namespace AC_KEYS { + /** - * In Pcbnew, pads can have a fabrication property - * Because this feature adds a new keyword in *.kicad_pcb and *.kicad_modfiles, - * this is an advanced feature until it is fully finalized + * When filling zones, we add an extra amount of clearance to each zone to ensure that rounding + * errors do not overrun minimum clearance distances. This is the extra in mm. */ -static const wxChar UsePadProperty[] = wxT( "UsePadProperty" ); +static const wxChar ExtraFillMargin[] = wxT( "ExtraFillMargin" ); /** * Testing mode for new connectivity algorithm. Setting this to on will cause all modifications @@ -201,6 +201,9 @@ void ADVANCED_CFG::loadSettings( wxConfigBase& aCfg ) configParams.push_back( new PARAM_CFG_BOOL( true, AC_KEYS::RealtimeConnectivity, &m_realTimeConnectivity, false ) ); + configParams.push_back( new PARAM_CFG_DOUBLE( true, AC_KEYS::ExtraFillMargin, + &m_extraClearance, 0.002, 0.0, 1.0 ) ); + configParams.push_back( new PARAM_CFG_INT( true, AC_KEYS::CoroutineStackSize, &m_coroutineStackSize, AC_STACK::default_stack, AC_STACK::min_stack, AC_STACK::max_stack ) ); diff --git a/include/advanced_config.h b/include/advanced_config.h index 93cddaaf74..d9be8f718b 100644 --- a/include/advanced_config.h +++ b/include/advanced_config.h @@ -68,6 +68,11 @@ public: */ static const ADVANCED_CFG& GetCfg(); + /** + * Extra fill clearance for zone fills + */ + double m_extraClearance; + /** * Do real-time connectivity */ diff --git a/pcbnew/zone_filler.cpp b/pcbnew/zone_filler.cpp index 89427d4740..d173859fe2 100644 --- a/pcbnew/zone_filler.cpp +++ b/pcbnew/zone_filler.cpp @@ -27,6 +27,7 @@ #include #include +#include #include #include #include @@ -560,7 +561,7 @@ void ZONE_FILLER::buildCopperItemClearances( const ZONE_CONTAINER* aZone, PCB_LA // than requested clearance due to many approximations in calculations, // like arc to segment approx, rounding issues... // 2 microns are a good value - int extra_margin = Millimeter2iu( 0.002 ); + int extra_margin = Millimeter2iu( ADVANCED_CFG::GetCfg().m_extraClearance ); BOARD_DESIGN_SETTINGS& bds = m_board->GetDesignSettings(); int zone_clearance = aZone->GetLocalClearance();