Pcbnew: fix dimensions text rotation and position.
Issue #6940 is not addressed, as being able to rotate a dimension with a group is preferred over easily rotating the text. Fixes https://gitlab.com/kicad/code/kicad/issues/3847
This commit is contained in:
parent
4e438763a3
commit
a086795ac9
|
@ -229,9 +229,6 @@ void DIMENSION_BASE::Move( const wxPoint& offset )
|
||||||
|
|
||||||
void DIMENSION_BASE::Rotate( const wxPoint& aRotCentre, double aAngle )
|
void DIMENSION_BASE::Rotate( const wxPoint& aRotCentre, double aAngle )
|
||||||
{
|
{
|
||||||
if( m_keepTextAligned )
|
|
||||||
m_keepTextAligned = false;
|
|
||||||
|
|
||||||
double newAngle = m_text.GetTextAngle() + aAngle;
|
double newAngle = m_text.GetTextAngle() + aAngle;
|
||||||
|
|
||||||
if( newAngle >= 3600 )
|
if( newAngle >= 3600 )
|
||||||
|
@ -644,7 +641,12 @@ void ALIGNED_DIMENSION::updateText()
|
||||||
{
|
{
|
||||||
int textOffsetDistance = m_text.GetEffectiveTextPenWidth() + m_text.GetTextHeight();
|
int textOffsetDistance = m_text.GetEffectiveTextPenWidth() + m_text.GetTextHeight();
|
||||||
|
|
||||||
double rotation = std::copysign( DEG2RAD( 90 ), m_height );
|
double rotation;
|
||||||
|
if( crossbarCenter.x == 0 )
|
||||||
|
rotation = sign( crossbarCenter.y ) * DEG2RAD( 90 );
|
||||||
|
else
|
||||||
|
rotation = -std::copysign( DEG2RAD( 90 ), crossbarCenter.x );
|
||||||
|
|
||||||
VECTOR2I textOffset = crossbarCenter.Rotate( rotation ).Resize( textOffsetDistance );
|
VECTOR2I textOffset = crossbarCenter.Rotate( rotation ).Resize( textOffsetDistance );
|
||||||
textOffset += crossbarCenter;
|
textOffset += crossbarCenter;
|
||||||
|
|
||||||
|
@ -661,7 +663,7 @@ void ALIGNED_DIMENSION::updateText()
|
||||||
|
|
||||||
NORMALIZE_ANGLE_POS( textAngle );
|
NORMALIZE_ANGLE_POS( textAngle );
|
||||||
|
|
||||||
if( textAngle > 900 && textAngle < 2700 )
|
if( textAngle > 900 && textAngle <= 2700 )
|
||||||
textAngle -= 1800;
|
textAngle -= 1800;
|
||||||
|
|
||||||
m_text.SetTextAngle( textAngle );
|
m_text.SetTextAngle( textAngle );
|
||||||
|
@ -824,17 +826,15 @@ void ORTHOGONAL_DIMENSION::updateText()
|
||||||
{
|
{
|
||||||
int textOffsetDistance = m_text.GetEffectiveTextPenWidth() + m_text.GetTextHeight();
|
int textOffsetDistance = m_text.GetEffectiveTextPenWidth() + m_text.GetTextHeight();
|
||||||
|
|
||||||
VECTOR2D height( m_crossBarStart - GetStart() );
|
VECTOR2I textOffset;
|
||||||
VECTOR2D crossBar( m_crossBarEnd - m_crossBarStart );
|
if( m_orientation == DIR::HORIZONTAL )
|
||||||
|
textOffset.y = -textOffsetDistance;
|
||||||
|
else
|
||||||
|
textOffset.x = -textOffsetDistance;
|
||||||
|
|
||||||
double sign = height.Cross( crossBar ) > 0 ? 1 : -1;
|
|
||||||
double rotation = sign * DEG2RAD( -90 );
|
|
||||||
|
|
||||||
VECTOR2I textOffset = crossbarCenter.Rotate( rotation ).Resize( textOffsetDistance );
|
|
||||||
textOffset += crossbarCenter;
|
textOffset += crossbarCenter;
|
||||||
|
|
||||||
m_text.SetTextPos( m_crossBarStart + wxPoint( textOffset ) );
|
m_text.SetTextPos( m_crossBarStart + wxPoint( textOffset ) );
|
||||||
m_text.SetTextAngle(rotation);
|
|
||||||
}
|
}
|
||||||
else if( m_textPosition == DIM_TEXT_POSITION::INLINE )
|
else if( m_textPosition == DIM_TEXT_POSITION::INLINE )
|
||||||
{
|
{
|
||||||
|
@ -843,12 +843,11 @@ void ORTHOGONAL_DIMENSION::updateText()
|
||||||
|
|
||||||
if( m_keepTextAligned )
|
if( m_keepTextAligned )
|
||||||
{
|
{
|
||||||
double textAngle = 3600 - RAD2DECIDEG( crossbarCenter.Angle() );
|
double textAngle;
|
||||||
|
if( abs( crossbarCenter.x ) > abs( crossbarCenter.y ) )
|
||||||
NORMALIZE_ANGLE_POS( textAngle );
|
textAngle = 0;
|
||||||
|
else
|
||||||
if( textAngle > 900 && textAngle < 2700 )
|
textAngle = 900;
|
||||||
textAngle -= 1800;
|
|
||||||
|
|
||||||
m_text.SetTextAngle( textAngle );
|
m_text.SetTextAngle( textAngle );
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue