Ensure minimum outline size in tuning patterns.

Fixes https://gitlab.com/kicad/code/kicad/-/issues/16847
This commit is contained in:
Alex Shvartzkop 2024-02-20 05:31:26 +03:00 committed by dsa-t
parent 82312a0fae
commit 5e5effaf3a
1 changed files with 22 additions and 7 deletions

View File

@ -1608,16 +1608,30 @@ SHAPE_LINE_CHAIN PCB_TUNING_PATTERN::getOutline() const
{
if( m_baseLine )
{
bool singleSided = m_settings.m_singleSided;
int clampedMaxAmplitude = m_settings.m_maxAmplitude;
int minAllowedAmplitude = 0;
int baselineOffset = m_tuningMode == DIFF_PAIR ? ( m_diffPairGap + m_trackWidth ) / 2 : 0;
if( singleSided )
if( m_settings.m_cornerStyle == PNS::MEANDER_STYLE::MEANDER_STYLE_ROUND )
{
minAllowedAmplitude = baselineOffset + m_trackWidth;
}
else
{
int correction = m_trackWidth * tan( 1 - tan( DEG2RAD( 22.5 ) ) );
minAllowedAmplitude = baselineOffset + correction;
}
clampedMaxAmplitude = std::max( clampedMaxAmplitude, minAllowedAmplitude );
if( m_settings.m_singleSided )
{
SHAPE_LINE_CHAIN clBase = *m_baseLine;
SHAPE_LINE_CHAIN left, right;
if( m_tuningMode != DIFF_PAIR )
{
int amplitude = m_settings.m_maxAmplitude + KiROUND( m_trackWidth / 2.0 );
int amplitude = clampedMaxAmplitude + KiROUND( m_trackWidth / 2.0 );
SHAPE_LINE_CHAIN chain;
@ -1633,8 +1647,7 @@ SHAPE_LINE_CHAIN PCB_TUNING_PATTERN::getOutline() const
}
else if( m_tuningMode == DIFF_PAIR && m_baseLineCoupled )
{
int amplitude =
m_settings.m_maxAmplitude + m_trackWidth + KiROUND( m_diffPairGap / 2.0 );
int amplitude = clampedMaxAmplitude + m_trackWidth + KiROUND( m_diffPairGap / 2.0 );
SHAPE_LINE_CHAIN clCoupled = *m_baseLineCoupled;
SHAPE_LINE_CHAIN chain1, chain2;
@ -1693,10 +1706,12 @@ SHAPE_LINE_CHAIN PCB_TUNING_PATTERN::getOutline() const
SHAPE_POLY_SET poly;
SHAPE_LINE_CHAIN cl = *m_baseLine;
int amplitude = m_settings.m_maxAmplitude + KiROUND( m_trackWidth / 2.0 );
int amplitude = 0;
if( m_tuningMode == DIFF_PAIR )
amplitude = m_settings.m_maxAmplitude + m_diffPairGap / 2 + KiROUND( m_trackWidth );
amplitude = clampedMaxAmplitude + m_diffPairGap / 2 + KiROUND( m_trackWidth );
else
amplitude = clampedMaxAmplitude + KiROUND( m_trackWidth / 2.0 );
poly.OffsetLineChain( *m_baseLine, amplitude, CORNER_STRATEGY::ROUND_ALL_CORNERS,
ARC_LOW_DEF, false );