Make printing/plotting/drawing of LIB and SCH arcs consistent.
Fixes https://gitlab.com/kicad/code/kicad/issues/10801
This commit is contained in:
parent
3f36e7d725
commit
7b84e0a7d9
|
@ -139,6 +139,15 @@ void LIB_SHAPE::Plot( PLOTTER* aPlotter, const VECTOR2I& aOffset, bool aFill,
|
||||||
for( const VECTOR2I& pt : m_bezierPoints )
|
for( const VECTOR2I& pt : m_bezierPoints )
|
||||||
cornerList.push_back( aTransform.TransformCoordinate( pt ) + aOffset );
|
cornerList.push_back( aTransform.TransformCoordinate( pt ) + aOffset );
|
||||||
}
|
}
|
||||||
|
else if( GetShape() == SHAPE_T::ARC )
|
||||||
|
{
|
||||||
|
EDA_ANGLE t1, t2;
|
||||||
|
|
||||||
|
CalcArcAngles( t1, t2 );
|
||||||
|
|
||||||
|
if( aTransform.MapAngles( &t1, &t2 ) != ( ( t1 - t2 ).Normalize180() > ANGLE_0 ) )
|
||||||
|
std::swap( start, end );
|
||||||
|
}
|
||||||
|
|
||||||
if( fill != FILL_T::NO_FILL )
|
if( fill != FILL_T::NO_FILL )
|
||||||
{
|
{
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
* This program source code file is part of KiCad, a free EDA CAD application.
|
* This program source code file is part of KiCad, a free EDA CAD application.
|
||||||
*
|
*
|
||||||
* Copyright (C) 2017 Jean-Pierre Charras, jp.charras at wanadoo.fr
|
* Copyright (C) 2017 Jean-Pierre Charras, jp.charras at wanadoo.fr
|
||||||
* Copyright (C) 2004-2021 KiCad Developers, see AUTHORS.txt for contributors.
|
* Copyright (C) 2004-2022 KiCad Developers, see AUTHORS.txt for contributors.
|
||||||
*
|
*
|
||||||
* This program is free software; you can redistribute it and/or
|
* This program is free software; you can redistribute it and/or
|
||||||
* modify it under the terms of the GNU General Public License
|
* modify it under the terms of the GNU General Public License
|
||||||
|
@ -207,9 +207,6 @@ void SCH_SHAPE::Print( const RENDER_SETTINGS* aSettings, const VECTOR2I& aOffset
|
||||||
{
|
{
|
||||||
int penWidth = GetPenWidth();
|
int penWidth = GetPenWidth();
|
||||||
wxDC* DC = aSettings->GetPrintDC();
|
wxDC* DC = aSettings->GetPrintDC();
|
||||||
VECTOR2I pt1 = GetStart();
|
|
||||||
VECTOR2I pt2 = GetEnd();
|
|
||||||
VECTOR2I c;
|
|
||||||
COLOR4D color;
|
COLOR4D color;
|
||||||
|
|
||||||
penWidth = std::max( penWidth, aSettings->GetMinPenWidth() );
|
penWidth = std::max( penWidth, aSettings->GetMinPenWidth() );
|
||||||
|
@ -235,16 +232,6 @@ void SCH_SHAPE::Print( const RENDER_SETTINGS* aSettings, const VECTOR2I& aOffset
|
||||||
for( size_t ii = 0; ii < ptCount; ++ii )
|
for( size_t ii = 0; ii < ptCount; ++ii )
|
||||||
buffer[ii] = m_bezierPoints[ii];
|
buffer[ii] = m_bezierPoints[ii];
|
||||||
}
|
}
|
||||||
else if( GetShape() == SHAPE_T::ARC )
|
|
||||||
{
|
|
||||||
c = getCenter();
|
|
||||||
EDA_ANGLE t1, t2;
|
|
||||||
|
|
||||||
CalcArcAngles( t1, t2 );
|
|
||||||
|
|
||||||
if( ( t1 - t2 ).Normalize180() > ANGLE_0 )
|
|
||||||
std::swap( pt1, pt2 );
|
|
||||||
}
|
|
||||||
|
|
||||||
if( GetFillMode() == FILL_T::FILLED_WITH_COLOR )
|
if( GetFillMode() == FILL_T::FILLED_WITH_COLOR )
|
||||||
{
|
{
|
||||||
|
@ -253,15 +240,15 @@ void SCH_SHAPE::Print( const RENDER_SETTINGS* aSettings, const VECTOR2I& aOffset
|
||||||
switch( GetShape() )
|
switch( GetShape() )
|
||||||
{
|
{
|
||||||
case SHAPE_T::ARC:
|
case SHAPE_T::ARC:
|
||||||
GRFilledArc( DC, pt1, pt2, c, 0, color, color );
|
GRFilledArc( DC, GetEnd(), GetStart(), getCenter(), 0, color, color );
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case SHAPE_T::CIRCLE:
|
case SHAPE_T::CIRCLE:
|
||||||
GRFilledCircle( DC, pt1, GetRadius(), 0, color, color );
|
GRFilledCircle( DC, GetStart(), GetRadius(), 0, color, color );
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case SHAPE_T::RECT:
|
case SHAPE_T::RECT:
|
||||||
GRFilledRect( DC, pt1, pt2, 0, color, color );
|
GRFilledRect( DC, GetStart(), GetEnd(), 0, color, color );
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case SHAPE_T::POLY:
|
case SHAPE_T::POLY:
|
||||||
|
@ -287,15 +274,15 @@ void SCH_SHAPE::Print( const RENDER_SETTINGS* aSettings, const VECTOR2I& aOffset
|
||||||
switch( GetShape() )
|
switch( GetShape() )
|
||||||
{
|
{
|
||||||
case SHAPE_T::ARC:
|
case SHAPE_T::ARC:
|
||||||
GRArc( DC, pt1, pt2, c, penWidth, color );
|
GRArc( DC, GetEnd(), GetStart(), getCenter(), penWidth, color );
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case SHAPE_T::CIRCLE:
|
case SHAPE_T::CIRCLE:
|
||||||
GRCircle( DC, pt1, GetRadius(), penWidth, color );
|
GRCircle( DC, GetStart(), GetRadius(), penWidth, color );
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case SHAPE_T::RECT:
|
case SHAPE_T::RECT:
|
||||||
GRRect( DC, pt1, pt2, penWidth, color );
|
GRRect( DC, GetStart(), GetEnd(), penWidth, color );
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case SHAPE_T::POLY:
|
case SHAPE_T::POLY:
|
||||||
|
|
Loading…
Reference in New Issue