7
mirror of https://gitlab.com/kicad/code/kicad.git synced 2025-04-20 23:41:40 +00:00

Revert "Improve curved teardrop shapes for roundrect pads."

This reverts commit 4556ace032.
This commit is contained in:
Seth Hillbrand 2025-02-14 08:01:56 -08:00
parent 1439ac0c31
commit 633aaff654

View File

@ -92,7 +92,8 @@ bool TEARDROP_MANAGER::IsRound( BOARD_ITEM* aItem, PCB_LAYER_ID aLayer )
return pad->GetShape( aLayer ) == PAD_SHAPE::CIRCLE
|| ( pad->GetShape( aLayer ) == PAD_SHAPE::OVAL
&& pad->GetSize( aLayer ).x == pad->GetSize( aLayer ).y );
&& pad->GetSize( aLayer ).x
== pad->GetSize( aLayer ).y );
}
return true;
@ -242,15 +243,13 @@ void TEARDROP_MANAGER::computeCurvedForRoundShape( const TEARDROP_PARAMETERS& aP
VECTOR2I vecC = (VECTOR2I)pts[2] - aOtherPos;
VECTOR2I tangentC = VECTOR2I( pts[2].x - vecC.y * biasBC * weaken,
pts[2].y + vecC.x * biasBC * weaken );
pts[2].y + vecC.x * biasBC * weaken );
VECTOR2I vecE = (VECTOR2I)pts[4] - aOtherPos;
VECTOR2I tangentE = VECTOR2I( pts[4].x + vecE.y * biasAE * weaken,
pts[4].y - vecE.x * biasAE * weaken );
pts[4].y - vecE.x * biasAE * weaken );
VECTOR2I tangentB = VECTOR2I( pts[1].x - aTrackDir.x * biasBC,
pts[1].y - aTrackDir.y * biasBC );
VECTOR2I tangentA = VECTOR2I( pts[0].x - aTrackDir.x * biasAE,
pts[0].y - aTrackDir.y * biasAE );
VECTOR2I tangentB = VECTOR2I( pts[1].x - aTrackDir.x * biasBC, pts[1].y - aTrackDir.y * biasBC );
VECTOR2I tangentA = VECTOR2I( pts[0].x - aTrackDir.x * biasAE, pts[0].y - aTrackDir.y * biasAE );
std::vector<VECTOR2I> curve_pts;
BEZIER_POLY( pts[1], tangentB, tangentC, pts[2] ).GetPoly( curve_pts, ARC_HIGH_DEF );
@ -355,21 +354,6 @@ bool TEARDROP_MANAGER::computeAnchorPoints( const TEARDROP_PARAMETERS& aParams,
force_clip = true;
preferred_width = KiROUND( GetWidth( pad, aLayer ) * aParams.m_BestWidthRatio );
const double SIN_60 = EDA_ANGLE( 60.0, DEGREES_T ).Sin();
// When the teardrop edges are curved we attempt to avoid undercutting rounded corners
// on the pads. While chamfered corners also have this issue, they aren't necessarily
// uniform and it's probably better if we let the user adjust the max teardrop width
// accordingly.
if( aParams.m_CurvedEdges && pad->GetShape( aLayer ) == PAD_SHAPE::ROUNDRECT )
{
int adjustedWidth = GetWidth( pad, aLayer );
adjustedWidth -= KiROUND( pad->GetRoundRectCornerRadius( aLayer ) * ( SIN_60 ) * 2 );
preferred_width = std::min( preferred_width, adjustedWidth );
}
pad->TransformShapeToPolygon( c_buffer, aLayer, 0, ARC_LOW_DEF, ERROR_INSIDE );
}
@ -377,7 +361,7 @@ bool TEARDROP_MANAGER::computeAnchorPoints( const TEARDROP_PARAMETERS& aParams,
// clip the shape to the smallest of size.x and size.y values.
if( force_clip || ( aParams.m_TdMaxWidth > 0 && aParams.m_TdMaxWidth < preferred_width ) )
{
int halfsize = std::min( aParams.m_TdMaxWidth, preferred_width ) / 2;
int halfsize = std::min( aParams.m_TdMaxWidth, preferred_width )/2;
// teardrop_axis is the line from anchor point on the track and the end point
// of the teardrop in the pad/via
@ -728,7 +712,7 @@ bool TEARDROP_MANAGER::computeTeardropPolygon( const TEARDROP_PARAMETERS& aParam
PCB_LAYER_ID layer = aTrack->GetLayer();
// To build a polygonal valid shape pointA and point B must be outside the pad
// It can be inside with some pad shapes having very different X and Y sizes
// It can be inside with some pad shapes having very different X and X sizes
if( !IsRound( aOther, layer ) )
{
PAD* pad = static_cast<PAD*>( aOther );
@ -761,8 +745,7 @@ bool TEARDROP_MANAGER::computeTeardropPolygon( const TEARDROP_PARAMETERS& aParam
// See if we can use curved teardrop shape
if( IsRound( aOther, layer ) )
{
computeCurvedForRoundShape( aParams, aCorners, layer, track_halfwidth, vecT, aOther,
aOtherPos, pts );
computeCurvedForRoundShape( aParams, aCorners, layer, track_halfwidth, vecT, aOther, aOtherPos, pts );
}
else
{
@ -771,8 +754,7 @@ bool TEARDROP_MANAGER::computeTeardropPolygon( const TEARDROP_PARAMETERS& aParam
if( aParams.m_TdMaxWidth > 0 && aParams.m_TdMaxWidth < td_width )
td_width = aParams.m_TdMaxWidth;
computeCurvedForRectShape( aParams, aCorners, td_width, track_halfwidth, pts,
intersection );
computeCurvedForRectShape( aParams, aCorners, td_width, track_halfwidth, pts, intersection );
}
return true;