Add center handles to rectangle edits
Allows changing a single dimension at a time. Matching the polygon edit tool. Fixes https://gitlab.com/kicad/code/kicad/issues/7085
This commit is contained in:
parent
ffdff21f45
commit
13a4717aed
|
@ -56,6 +56,11 @@ enum RECT_POINTS
|
||||||
RECT_TOP_LEFT, RECT_TOP_RIGHT, RECT_BOT_RIGHT, RECT_BOT_LEFT
|
RECT_TOP_LEFT, RECT_TOP_RIGHT, RECT_BOT_RIGHT, RECT_BOT_LEFT
|
||||||
};
|
};
|
||||||
|
|
||||||
|
enum RECT_LINES
|
||||||
|
{
|
||||||
|
RECT_TOP, RECT_RIGHT, RECT_BOT, RECT_LEFT
|
||||||
|
};
|
||||||
|
|
||||||
enum ARC_POINTS
|
enum ARC_POINTS
|
||||||
{
|
{
|
||||||
ARC_CENTER, ARC_START, ARC_MID, ARC_END
|
ARC_CENTER, ARC_START, ARC_MID, ARC_END
|
||||||
|
@ -186,6 +191,16 @@ std::shared_ptr<EDIT_POINTS> POINT_EDITOR::makePoints( EDA_ITEM* aItem )
|
||||||
points->AddPoint( wxPoint( shape->GetEnd().x, shape->GetStart().y ) );
|
points->AddPoint( wxPoint( shape->GetEnd().x, shape->GetStart().y ) );
|
||||||
points->AddPoint( shape->GetEnd() );
|
points->AddPoint( shape->GetEnd() );
|
||||||
points->AddPoint( wxPoint( shape->GetStart().x, shape->GetEnd().y ) );
|
points->AddPoint( wxPoint( shape->GetStart().x, shape->GetEnd().y ) );
|
||||||
|
|
||||||
|
points->AddLine( points->Point( RECT_TOP_LEFT ), points->Point( RECT_TOP_RIGHT ) );
|
||||||
|
points->Line( RECT_TOP ).SetConstraint( new EC_PERPLINE( points->Line( RECT_TOP ) ) );
|
||||||
|
points->AddLine( points->Point( RECT_TOP_RIGHT ), points->Point( RECT_BOT_RIGHT ) );
|
||||||
|
points->Line( RECT_RIGHT ).SetConstraint( new EC_PERPLINE( points->Line( RECT_RIGHT ) ) );
|
||||||
|
points->AddLine( points->Point( RECT_BOT_RIGHT ), points->Point( RECT_BOT_LEFT ) );
|
||||||
|
points->Line( RECT_BOT ).SetConstraint( new EC_PERPLINE( points->Line( RECT_BOT ) ) );
|
||||||
|
points->AddLine( points->Point( RECT_BOT_LEFT ), points->Point( RECT_TOP_LEFT ) );
|
||||||
|
points->Line( RECT_LEFT ).SetConstraint( new EC_PERPLINE( points->Line( RECT_LEFT ) ) );
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case S_ARC:
|
case S_ARC:
|
||||||
|
@ -1109,6 +1124,28 @@ void POINT_EDITOR::updateItem() const
|
||||||
shape->SetStartX( m_editPoints->Point( RECT_BOT_LEFT ).GetPosition().x );
|
shape->SetStartX( m_editPoints->Point( RECT_BOT_LEFT ).GetPosition().x );
|
||||||
shape->SetEndY( m_editPoints->Point( RECT_BOT_LEFT ).GetPosition().y );
|
shape->SetEndY( m_editPoints->Point( RECT_BOT_LEFT ).GetPosition().y );
|
||||||
}
|
}
|
||||||
|
else if( isModified( m_editPoints->Line( RECT_TOP ) ) )
|
||||||
|
{
|
||||||
|
shape->SetStartY( m_editPoints->Point( RECT_TOP_LEFT ).GetPosition().y );
|
||||||
|
}
|
||||||
|
else if( isModified( m_editPoints->Line( RECT_LEFT ) ) )
|
||||||
|
{
|
||||||
|
shape->SetStartX( m_editPoints->Point( RECT_BOT_LEFT ).GetPosition().x );
|
||||||
|
}
|
||||||
|
else if( isModified( m_editPoints->Line( RECT_BOT ) ) )
|
||||||
|
{
|
||||||
|
shape->SetEndY( m_editPoints->Point( RECT_BOT_RIGHT ).GetPosition().y );
|
||||||
|
}
|
||||||
|
else if( isModified( m_editPoints->Line( RECT_RIGHT ) ) )
|
||||||
|
{
|
||||||
|
shape->SetEndX( m_editPoints->Point( RECT_TOP_RIGHT ).GetPosition().x );
|
||||||
|
}
|
||||||
|
|
||||||
|
for( unsigned i = 0; i < m_editPoints->LinesSize(); ++i )
|
||||||
|
{
|
||||||
|
if( !isModified( m_editPoints->Line( i ) ) )
|
||||||
|
m_editPoints->Line( i ).SetConstraint( new EC_PERPLINE( m_editPoints->Line( i ) ) );
|
||||||
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue