Rotate the bounding box for hit tests on the fly

This commit is contained in:
Marek Roszko 2020-09-16 18:45:08 -04:00 committed by Seth Hillbrand
parent 721c30e464
commit a82edb60fe
3 changed files with 4 additions and 6 deletions

View File

@ -737,7 +737,7 @@ EDA_RECT EDA_RECT::Common( const EDA_RECT& aRect ) const
}
const EDA_RECT EDA_RECT::GetBoundingBoxRotated( wxPoint aRotCenter, double aAngle )
const EDA_RECT EDA_RECT::GetBoundingBoxRotated( wxPoint aRotCenter, double aAngle ) const
{
wxPoint corners[4];

View File

@ -360,7 +360,7 @@ public:
* useful to calculate bounding box of rotated items, when
* rotation if not k*90 degrees
*/
const EDA_RECT GetBoundingBoxRotated( wxPoint aRotCenter, double aAngle );
const EDA_RECT GetBoundingBoxRotated( wxPoint aRotCenter, double aAngle ) const;
};

View File

@ -719,7 +719,7 @@ void MODULE::GetMsgPanelInfo( EDA_DRAW_FRAME* aFrame, std::vector<MSG_PANEL_ITEM
bool MODULE::HitTest( const wxPoint& aPosition, int aAccuracy ) const
{
EDA_RECT rect = m_BoundaryBox;
EDA_RECT rect = m_BoundaryBox.GetBoundingBoxRotated( GetPosition(), m_Orient );
return rect.Inflate( aAccuracy ).Contains( aPosition );
}
@ -736,7 +736,7 @@ bool MODULE::HitTest( const EDA_RECT& aRect, bool aContained, int aAccuracy ) co
arect.Inflate( aAccuracy );
if( aContained )
return arect.Contains( m_BoundaryBox );
return arect.Contains( m_BoundaryBox.GetBoundingBoxRotated( GetPosition(), m_Orient ) );
else
{
// If the rect does not intersect the bounding box, skip any tests
@ -1369,8 +1369,6 @@ void MODULE::SetOrientation( double aNewAngle )
static_cast<TEXTE_MODULE*>( item )->SetDrawCoord();
}
}
m_BoundaryBox = m_BoundaryBox.GetBoundingBoxRotated( GetPosition(), angleChange );
}