PNS: Remove offsets from hull generation
This is likely an old workaround to numerical precision issues in the DRC system that no longer exist. Removing this is necessary for "exact" hull generation to produce walkaround results that look nice (paths falling exactly on the grid lines) Fixes https://gitlab.com/kicad/code/kicad/-/issues/10710
This commit is contained in:
parent
2a91ba35c1
commit
5d4e2aa595
|
@ -49,7 +49,7 @@ static const SHAPE_LINE_CHAIN buildHullForPrimitiveShape( const SHAPE* aShape, i
|
|||
const SHAPE_RECT* rect = static_cast<const SHAPE_RECT*>( aShape );
|
||||
return OctagonalHull( rect->GetPosition(),
|
||||
rect->GetSize(),
|
||||
cl + 1,
|
||||
cl,
|
||||
0 );
|
||||
}
|
||||
|
||||
|
@ -59,7 +59,7 @@ static const SHAPE_LINE_CHAIN buildHullForPrimitiveShape( const SHAPE* aShape, i
|
|||
int r = circle->GetRadius();
|
||||
return OctagonalHull( circle->GetCenter() - VECTOR2I( r, r ),
|
||||
VECTOR2I( 2 * r, 2 * r ),
|
||||
cl + 1,
|
||||
cl,
|
||||
2.0 * ( 1.0 - M_SQRT1_2 ) * ( r + cl ) );
|
||||
}
|
||||
|
||||
|
|
|
@ -65,7 +65,7 @@ const SHAPE_LINE_CHAIN OctagonalHull( const VECTOR2I& aP0, const VECTOR2I& aSize
|
|||
|
||||
const SHAPE_LINE_CHAIN ArcHull( const SHAPE_ARC& aSeg, int aClearance, int aWalkaroundThickness )
|
||||
{
|
||||
int d = aSeg.GetWidth() / 2 + aClearance + aWalkaroundThickness / 2 + HULL_MARGIN
|
||||
int d = aSeg.GetWidth() / 2 + aClearance + aWalkaroundThickness / 2
|
||||
+ SHAPE_ARC::DefaultAccuracyForPCB();
|
||||
int x = (int) ( 2.0 / ( 1.0 + M_SQRT2 ) * d ) / 2;
|
||||
|
||||
|
@ -144,7 +144,7 @@ const SHAPE_LINE_CHAIN ArcHull( const SHAPE_ARC& aSeg, int aClearance, int aWalk
|
|||
const SHAPE_LINE_CHAIN SegmentHull ( const SHAPE_SEGMENT& aSeg, int aClearance,
|
||||
int aWalkaroundThickness )
|
||||
{
|
||||
int cl = aClearance + aWalkaroundThickness / 2 + HULL_MARGIN;
|
||||
int cl = aClearance + aWalkaroundThickness / 2;
|
||||
int d = aSeg.GetWidth() / 2 + cl;
|
||||
int x = (int)( 2.0 / ( 1.0 + M_SQRT2 ) * d );
|
||||
|
||||
|
@ -155,7 +155,7 @@ const SHAPE_LINE_CHAIN SegmentHull ( const SHAPE_SEGMENT& aSeg, int aClearance,
|
|||
{
|
||||
return OctagonalHull( a - VECTOR2I( aSeg.GetWidth() / 2, aSeg.GetWidth() / 2 ),
|
||||
VECTOR2I( aSeg.GetWidth(), aSeg.GetWidth() ),
|
||||
cl + 1,
|
||||
cl,
|
||||
2.0 * ( 1.0 - M_SQRT1_2 ) * d );
|
||||
}
|
||||
|
||||
|
@ -191,7 +191,6 @@ static void MoveDiagonal( SEG& aDiagonal, const SHAPE_LINE_CHAIN& aVertices, int
|
|||
int dist;
|
||||
|
||||
aVertices.NearestPoint( aDiagonal, dist );
|
||||
dist -= HULL_MARGIN;
|
||||
VECTOR2I moveBy = ( aDiagonal.A - aDiagonal.B ).Perpendicular().Resize( dist - aClearance );
|
||||
aDiagonal.A += moveBy;
|
||||
aDiagonal.B += moveBy;
|
||||
|
@ -201,7 +200,7 @@ static void MoveDiagonal( SEG& aDiagonal, const SHAPE_LINE_CHAIN& aVertices, int
|
|||
const SHAPE_LINE_CHAIN ConvexHull( const SHAPE_SIMPLE& aConvex, int aClearance )
|
||||
{
|
||||
// this defines the horizontal and vertical lines in the hull octagon
|
||||
BOX2I box = aConvex.BBox( aClearance + HULL_MARGIN );
|
||||
BOX2I box = aConvex.BBox( aClearance );
|
||||
box.Normalize();
|
||||
|
||||
SEG topline = SEG( VECTOR2I( box.GetX(), box.GetY() + box.GetHeight() ),
|
||||
|
|
Loading…
Reference in New Issue