Change orientation and flip sign of dimension height when rotating orthogonal dimensions.
Fixes https://gitlab.com/kicad/code/kicad/issues/6940
This commit is contained in:
parent
df5f010514
commit
58dfb6539f
|
@ -856,6 +856,60 @@ void ORTHOGONAL_DIMENSION::updateText()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void ORTHOGONAL_DIMENSION::Rotate( const wxPoint& aRotCentre, double aAngle )
|
||||||
|
{
|
||||||
|
// restrict angle to -179.9 to 180.0 degrees
|
||||||
|
if( aAngle > 1800 )
|
||||||
|
{
|
||||||
|
aAngle -= 3600;
|
||||||
|
}
|
||||||
|
else if( aAngle <= -1800 )
|
||||||
|
{
|
||||||
|
aAngle += 3600;
|
||||||
|
}
|
||||||
|
|
||||||
|
// adjust orientation and height to new angle
|
||||||
|
// we can only handle the cases of -90, 0, 90, 180 degrees exactly;
|
||||||
|
// in the other cases we will use the nearest 90 degree angle to
|
||||||
|
// choose at least an approximate axis for the target orientation
|
||||||
|
// In case of exactly 45 or 135 degrees, we will round towards zero for consistency
|
||||||
|
if( aAngle > 450 && aAngle <= 1350 )
|
||||||
|
{
|
||||||
|
// about 90 degree
|
||||||
|
if( m_orientation == DIR::HORIZONTAL )
|
||||||
|
{
|
||||||
|
m_orientation = DIR::VERTICAL;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
m_orientation = DIR::HORIZONTAL;
|
||||||
|
m_height = -m_height;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if( aAngle < -450 && aAngle >= -1350 )
|
||||||
|
{
|
||||||
|
// about -90 degree
|
||||||
|
if( m_orientation == DIR::HORIZONTAL )
|
||||||
|
{
|
||||||
|
m_orientation = DIR::VERTICAL;
|
||||||
|
m_height = -m_height;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
m_orientation = DIR::HORIZONTAL;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if( aAngle > 1350 || aAngle < -1350 )
|
||||||
|
{
|
||||||
|
// about 180 degree
|
||||||
|
m_height = -m_height;
|
||||||
|
}
|
||||||
|
|
||||||
|
// this will update m_crossBarStart and m_crossbarEnd
|
||||||
|
DIMENSION_BASE::Rotate( aRotCentre, aAngle );
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
LEADER::LEADER( BOARD_ITEM* aParent ) :
|
LEADER::LEADER( BOARD_ITEM* aParent ) :
|
||||||
DIMENSION_BASE( aParent, PCB_DIM_LEADER_T ),
|
DIMENSION_BASE( aParent, PCB_DIM_LEADER_T ),
|
||||||
m_textFrame( DIM_TEXT_FRAME::NONE )
|
m_textFrame( DIM_TEXT_FRAME::NONE )
|
||||||
|
|
|
@ -451,6 +451,7 @@ public:
|
||||||
{
|
{
|
||||||
return wxT( "ORTHOGONAL_DIMENSION" );
|
return wxT( "ORTHOGONAL_DIMENSION" );
|
||||||
}
|
}
|
||||||
|
void Rotate( const wxPoint& aRotCentre, double aAngle ) override;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue