Support Bezier curve editing in eeschema.

This commit is contained in:
Alex Shvartzkop
2024-01-16 14:11:25 +03:00
parent 338914c7cf
commit 5bd620d8f9
3 changed files with 84 additions and 6 deletions
+40
View File
@@ -1353,6 +1353,16 @@ void EDA_SHAPE::beginEdit( const VECTOR2I& aPosition )
m_editState = 1;
break;
case SHAPE_T::BEZIER:
SetStart( aPosition );
SetEnd( aPosition );
SetBezierC1( aPosition );
SetBezierC2( aPosition );
m_editState = 1;
RebuildBezierToSegmentsPointsList( GetWidth() );
break;
case SHAPE_T::POLY:
m_poly.NewOutline();
m_poly.Outline( 0 ).SetClosed( false );
@@ -1378,6 +1388,13 @@ bool EDA_SHAPE::continueEdit( const VECTOR2I& aPosition )
case SHAPE_T::RECTANGLE:
return false;
case SHAPE_T::BEZIER:
if( m_editState == 3 )
return false;
m_editState++;
return true;
case SHAPE_T::POLY:
{
SHAPE_LINE_CHAIN& poly = m_poly.Outline( 0 );
@@ -1407,6 +1424,28 @@ void EDA_SHAPE::calcEdit( const VECTOR2I& aPosition )
SetEnd( aPosition );
break;
case SHAPE_T::BEZIER:
{
switch( m_editState )
{
case 0:
SetStart( aPosition );
SetEnd( aPosition );
SetBezierC1( aPosition );
SetBezierC2( aPosition );
break;
case 1:
SetBezierC2( aPosition );
SetEnd( aPosition );
break;
case 2: SetBezierC1( aPosition ); break;
case 3: SetBezierC2( aPosition ); break;
}
RebuildBezierToSegmentsPointsList( GetWidth() );
}
break;
case SHAPE_T::ARC:
{
double radius = GetRadius();
@@ -1528,6 +1567,7 @@ void EDA_SHAPE::endEdit( bool aClosed )
case SHAPE_T::SEGMENT:
case SHAPE_T::CIRCLE:
case SHAPE_T::RECTANGLE:
case SHAPE_T::BEZIER:
break;
case SHAPE_T::POLY: