Browse Source

Use maxError when converting bezier to polyline.

Fixes https://gitlab.com/kicad/code/kicad/-/issues/20312
pull/18/head
Jeff Young 7 months ago
parent
commit
e44c5a7fcd
  1. 5
      common/eda_shape.cpp
  2. 5
      eeschema/sch_shape.h
  3. 2
      include/eda_shape.h
  4. 9
      pcbnew/pcb_shape.cpp
  5. 2
      pcbnew/pcb_shape.h

5
common/eda_shape.cpp

@ -446,7 +446,8 @@ void EDA_SHAPE::SetLength( const double& aLength )
switch( m_shape )
{
case SHAPE_T::SEGMENT:
m_segmentLength = aLength; break;
m_segmentLength = aLength;
break;
default:
UNIMPLEMENTED_FOR( SHAPE_T_asString() );
@ -1830,7 +1831,7 @@ std::vector<SHAPE*> EDA_SHAPE::makeEffectiveShapes( bool aEdgeOnly, bool aLineCh
case SHAPE_T::BEZIER:
{
std::vector<VECTOR2I> bezierPoints = buildBezierToSegmentsPointsList( width / 2 );
std::vector<VECTOR2I> bezierPoints = buildBezierToSegmentsPointsList( getMaxError() );
VECTOR2I start_pt = bezierPoints[0];
for( unsigned int jj = 1; jj < bezierPoints.size(); jj++ )

5
eeschema/sch_shape.h

@ -151,6 +151,11 @@ protected:
bool isMoving() const override { return IsMoving(); }
int getMaxError() const override
{
return schIUScale.mmToIU( ARC_HIGH_DEF_MM );
}
/**
* @copydoc SCH_ITEM::compare()
*

2
include/eda_shape.h

@ -489,6 +489,8 @@ protected:
// fixme: move to shape_compound
std::vector<SHAPE*> makeEffectiveShapes( bool aEdgeOnly, bool aLineChainOnly = false ) const;
virtual int getMaxError() const { return 100; }
protected:
bool m_endsSwapped; // true if start/end were swapped e.g. SetArcAngleAndEnd
SHAPE_T m_shape; // Shape: line, Circle, Arc

9
pcbnew/pcb_shape.cpp

@ -803,6 +803,15 @@ std::shared_ptr<SHAPE> PCB_SHAPE::GetEffectiveShape( PCB_LAYER_ID aLayer, FLASHI
}
int PCB_SHAPE::getMaxError() const
{
if( const BOARD* board = GetBoard() )
return board->GetDesignSettings().m_MaxError;
return ARC_HIGH_DEF;
}
void PCB_SHAPE::swapData( BOARD_ITEM* aImage )
{
PCB_SHAPE* image = dynamic_cast<PCB_SHAPE*>( aImage );

2
pcbnew/pcb_shape.h

@ -203,6 +203,8 @@ protected:
bool isMoving() const override { return IsMoving(); }
int getMaxError() const override;
struct cmp_drawings
{
bool operator()( const BOARD_ITEM* aFirst, const BOARD_ITEM* aSecond ) const;

Loading…
Cancel
Save