Fix issues with orientation and justification.
Support all symbol orientations. (Yes, SCH_COMPONENT said only the first 8 were used, but it lied.) Fix cases where SetTextAttributes() was overwriting previously- set justifications. Correct rotation of vertical text. Fix issue where bold global label would affect thickness of next label's outline.
This commit is contained in:
parent
c3479154ca
commit
e9c974fcdc
|
@ -1280,29 +1280,27 @@ void SCH_COMPONENT::SetOrientation( int aOrientation )
|
||||||
|
|
||||||
int SCH_COMPONENT::GetOrientation()
|
int SCH_COMPONENT::GetOrientation()
|
||||||
{
|
{
|
||||||
int type_rotate = CMP_ORIENT_0;
|
int rotate_values[] =
|
||||||
TRANSFORM transform;
|
|
||||||
int ii;
|
|
||||||
|
|
||||||
#define ROTATE_VALUES_COUNT 12
|
|
||||||
|
|
||||||
// list of all possibilities, but only the first 8 are actually used
|
|
||||||
int rotate_value[ROTATE_VALUES_COUNT] =
|
|
||||||
{
|
{
|
||||||
CMP_ORIENT_0, CMP_ORIENT_90, CMP_ORIENT_180,
|
CMP_ORIENT_0,
|
||||||
|
CMP_ORIENT_90,
|
||||||
|
CMP_ORIENT_180,
|
||||||
CMP_ORIENT_270,
|
CMP_ORIENT_270,
|
||||||
CMP_MIRROR_X + CMP_ORIENT_0, CMP_MIRROR_X + CMP_ORIENT_90,
|
CMP_MIRROR_X + CMP_ORIENT_0,
|
||||||
CMP_MIRROR_Y, CMP_MIRROR_X + CMP_ORIENT_270,
|
CMP_MIRROR_X + CMP_ORIENT_90,
|
||||||
CMP_MIRROR_Y + CMP_ORIENT_0, CMP_MIRROR_Y + CMP_ORIENT_90,
|
CMP_MIRROR_X + CMP_ORIENT_270,
|
||||||
CMP_MIRROR_Y + CMP_ORIENT_180, CMP_MIRROR_Y + CMP_ORIENT_270
|
CMP_MIRROR_Y,
|
||||||
|
CMP_MIRROR_Y + CMP_ORIENT_0,
|
||||||
|
CMP_MIRROR_Y + CMP_ORIENT_90,
|
||||||
|
CMP_MIRROR_Y + CMP_ORIENT_180,
|
||||||
|
CMP_MIRROR_Y + CMP_ORIENT_270
|
||||||
};
|
};
|
||||||
|
|
||||||
// Try to find the current transform option:
|
// Try to find the current transform option:
|
||||||
transform = m_transform;
|
TRANSFORM transform = m_transform;
|
||||||
|
|
||||||
for( ii = 0; ii < ROTATE_VALUES_COUNT; ii++ )
|
for( int type_rotate : rotate_values )
|
||||||
{
|
{
|
||||||
type_rotate = rotate_value[ii];
|
|
||||||
SetOrientation( type_rotate );
|
SetOrientation( type_rotate );
|
||||||
|
|
||||||
if( transform == m_transform )
|
if( transform == m_transform )
|
||||||
|
|
|
@ -379,9 +379,9 @@ void SCH_PAINTER::draw( LIB_FIELD *aField, int aLayer )
|
||||||
|
|
||||||
m_gal->SetLineWidth( linewidth );
|
m_gal->SetLineWidth( linewidth );
|
||||||
m_gal->SetIsFill( false );
|
m_gal->SetIsFill( false );
|
||||||
m_gal->SetIsStroke (true);
|
m_gal->SetIsStroke( true );
|
||||||
m_gal->SetStrokeColor( color );
|
m_gal->SetStrokeColor( color );
|
||||||
m_gal->SetGlyphSize ( aField->GetTextSize() );
|
m_gal->SetGlyphSize( VECTOR2D( aField->GetTextSize() ) );
|
||||||
|
|
||||||
m_gal->SetHorizontalJustify( aField->GetHorizJustify( ) );
|
m_gal->SetHorizontalJustify( aField->GetHorizJustify( ) );
|
||||||
m_gal->SetVerticalJustify( aField->GetVertJustify( ) );
|
m_gal->SetVerticalJustify( aField->GetVertJustify( ) );
|
||||||
|
@ -420,23 +420,18 @@ void SCH_PAINTER::draw( LIB_TEXT *aText, int aLayer )
|
||||||
return;
|
return;
|
||||||
|
|
||||||
int w = aText->GetPenSize();
|
int w = aText->GetPenSize();
|
||||||
|
EDA_RECT bBox = aText->GetBoundingBox();
|
||||||
|
bBox.RevertYAxis();
|
||||||
|
VECTOR2D pos = mapCoords( bBox.Centre() );
|
||||||
|
double orient = aText->GetTextAngleRadians();
|
||||||
|
|
||||||
|
m_gal->SetHorizontalJustify( GR_TEXT_HJUSTIFY_CENTER );
|
||||||
|
m_gal->SetVerticalJustify( GR_TEXT_VJUSTIFY_CENTER );
|
||||||
m_gal->SetLineWidth( w );
|
m_gal->SetLineWidth( w );
|
||||||
m_gal->SetIsFill( false );
|
m_gal->SetIsFill( false );
|
||||||
m_gal->SetIsStroke( true );
|
m_gal->SetIsStroke( true );
|
||||||
m_gal->SetStrokeColor( color );
|
m_gal->SetStrokeColor( color );
|
||||||
m_gal->SetGlyphSize( aText->GetTextSize() );
|
m_gal->SetGlyphSize( VECTOR2D( aText->GetTextSize() ) );
|
||||||
|
|
||||||
m_gal->SetHorizontalJustify( GR_TEXT_HJUSTIFY_CENTER );
|
|
||||||
m_gal->SetVerticalJustify( GR_TEXT_VJUSTIFY_CENTER );
|
|
||||||
|
|
||||||
EDA_RECT bBox = aText->GetBoundingBox();
|
|
||||||
bBox.RevertYAxis();
|
|
||||||
|
|
||||||
auto pos = mapCoords( bBox.Centre() );
|
|
||||||
|
|
||||||
double orient = aText->GetTextAngleRadians();
|
|
||||||
|
|
||||||
m_gal->SetFontBold( aText->IsBold() );
|
m_gal->SetFontBold( aText->IsBold() );
|
||||||
m_gal->SetFontItalic( aText->IsItalic() );
|
m_gal->SetFontItalic( aText->IsItalic() );
|
||||||
m_gal->StrokeText( aText->GetText(), pos, orient );
|
m_gal->StrokeText( aText->GetText(), pos, orient );
|
||||||
|
@ -869,7 +864,6 @@ void SCH_PAINTER::draw( SCH_TEXT *aText, int aLayer )
|
||||||
m_gal->SetIsFill( false );
|
m_gal->SetIsFill( false );
|
||||||
m_gal->SetIsStroke( true );
|
m_gal->SetIsStroke( true );
|
||||||
m_gal->SetStrokeColor( color );
|
m_gal->SetStrokeColor( color );
|
||||||
m_gal->SetGlyphSize( aText->GetTextSize() );
|
|
||||||
m_gal->SetTextAttributes( aText );
|
m_gal->SetTextAttributes( aText );
|
||||||
m_gal->SetLineWidth( linewidth );
|
m_gal->SetLineWidth( linewidth );
|
||||||
m_gal->StrokeText( shownText, text_offset, aText->GetTextAngleRadians() );
|
m_gal->StrokeText( shownText, text_offset, aText->GetTextAngleRadians() );
|
||||||
|
@ -879,15 +873,14 @@ void SCH_PAINTER::draw( SCH_TEXT *aText, int aLayer )
|
||||||
|
|
||||||
static void orientComponent( LIB_PART *part, int orientation )
|
static void orientComponent( LIB_PART *part, int orientation )
|
||||||
{
|
{
|
||||||
#define N_ORIENTATIONS 8
|
|
||||||
|
|
||||||
struct ORIENT
|
struct ORIENT
|
||||||
{
|
{
|
||||||
int flag;
|
int flag;
|
||||||
int n_rots;
|
int n_rots;
|
||||||
int mirror_x, mirror_y;
|
int mirror_x;
|
||||||
|
int mirror_y;
|
||||||
}
|
}
|
||||||
orientations[N_ORIENTATIONS] =
|
orientations[] =
|
||||||
{
|
{
|
||||||
{ CMP_ORIENT_0, 0, 0, 0 },
|
{ CMP_ORIENT_0, 0, 0, 0 },
|
||||||
{ CMP_ORIENT_90, 1, 0, 0 },
|
{ CMP_ORIENT_90, 1, 0, 0 },
|
||||||
|
@ -896,40 +889,36 @@ static void orientComponent( LIB_PART *part, int orientation )
|
||||||
{ CMP_MIRROR_X + CMP_ORIENT_0, 0, 1, 0 },
|
{ CMP_MIRROR_X + CMP_ORIENT_0, 0, 1, 0 },
|
||||||
{ CMP_MIRROR_X + CMP_ORIENT_90, 1, 1, 0 },
|
{ CMP_MIRROR_X + CMP_ORIENT_90, 1, 1, 0 },
|
||||||
{ CMP_MIRROR_Y, 0, 0, 1 },
|
{ CMP_MIRROR_Y, 0, 0, 1 },
|
||||||
{ CMP_MIRROR_X + CMP_ORIENT_270, 3, 1, 0 }
|
{ CMP_MIRROR_X + CMP_ORIENT_270, 3, 1, 0 },
|
||||||
// CMP_MIRROR_Y + CMP_ORIENT_0,
|
{ CMP_MIRROR_Y + CMP_ORIENT_0, 0, 0, 1 },
|
||||||
// CMP_MIRROR_Y + CMP_ORIENT_90,
|
{ CMP_MIRROR_Y + CMP_ORIENT_90, 1, 0, 1 },
|
||||||
// CMP_MIRROR_Y + CMP_ORIENT_180,
|
{ CMP_MIRROR_Y + CMP_ORIENT_180, 2, 0, 1 },
|
||||||
// CMP_MIRROR_Y + CMP_ORIENT_270
|
{ CMP_MIRROR_Y + CMP_ORIENT_270, 3, 0, 1 }
|
||||||
};
|
};
|
||||||
|
|
||||||
ORIENT o;
|
ORIENT o = orientations[ 0 ];
|
||||||
|
|
||||||
for( int i = 0; i < N_ORIENTATIONS; i++ )
|
for( auto& i : orientations )
|
||||||
{
|
{
|
||||||
if( orientations[i].flag == orientation )
|
if( i.flag == orientation )
|
||||||
{
|
{
|
||||||
o = orientations[i];
|
o = i;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//printf("orient %d %d %d\n", o.n_rots, o.mirror_x, o.mirror_y );
|
//printf("orient %d %d %d\n", o.n_rots, o.mirror_x, o.mirror_y );
|
||||||
|
|
||||||
for( int i = 0; i < o.n_rots; i++ )
|
|
||||||
{
|
|
||||||
for( auto& item : part->GetDrawItems() )
|
|
||||||
{
|
|
||||||
item.Rotate( wxPoint(0, 0 ), true );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
for( auto& item : part->GetDrawItems() )
|
for( auto& item : part->GetDrawItems() )
|
||||||
{
|
{
|
||||||
if( orientation & CMP_MIRROR_X )
|
for( int i = 0; i < o.n_rots; i++ )
|
||||||
item.MirrorVertical( wxPoint(0, 0 ) );
|
item.Rotate( wxPoint(0, 0 ), true );
|
||||||
if( orientation & CMP_MIRROR_Y )
|
|
||||||
item.MirrorHorizontal( wxPoint(0, 0 ) );
|
if( o.mirror_x )
|
||||||
|
item.MirrorVertical( wxPoint( 0, 0 ) );
|
||||||
|
|
||||||
|
if( o.mirror_y )
|
||||||
|
item.MirrorHorizontal( wxPoint( 0, 0 ) );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -966,9 +955,9 @@ void SCH_PAINTER::draw( SCH_COMPONENT *aComp, int aLayer )
|
||||||
if( field->GetId() == REFERENCE || !field->IsMoving() )
|
if( field->GetId() == REFERENCE || !field->IsMoving() )
|
||||||
draw( field, aLayer );
|
draw( field, aLayer );
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void SCH_PAINTER::draw( SCH_FIELD *aField, int aLayer )
|
void SCH_PAINTER::draw( SCH_FIELD *aField, int aLayer )
|
||||||
{
|
{
|
||||||
int orient;
|
int orient;
|
||||||
|
@ -1031,13 +1020,16 @@ void SCH_PAINTER::draw( SCH_FIELD *aField, int aLayer )
|
||||||
m_gal->SetStrokeColor( color );
|
m_gal->SetStrokeColor( color );
|
||||||
m_gal->SetIsFill( false );
|
m_gal->SetIsFill( false );
|
||||||
m_gal->SetIsStroke( true );
|
m_gal->SetIsStroke( true );
|
||||||
m_gal->SetTextAttributes( aField );
|
m_gal->SetGlyphSize( VECTOR2D( aField->GetTextSize() ) );
|
||||||
|
m_gal->SetFontBold( aField->IsBold() );
|
||||||
|
m_gal->SetFontItalic( aField->IsItalic() );
|
||||||
|
m_gal->SetTextMirrored( aField->IsMirrored() );
|
||||||
m_gal->SetLineWidth( lineWidth );
|
m_gal->SetLineWidth( lineWidth );
|
||||||
m_gal->StrokeText( aField->GetFullyQualifiedText(), textpos, orient == TEXT_ANGLE_VERT ? -M_PI/2 : 0 );
|
m_gal->StrokeText( aField->GetFullyQualifiedText(), textpos, orient == TEXT_ANGLE_VERT ? M_PI/2 : 0 );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void SCH_PAINTER::draw ( SCH_GLOBALLABEL *aLabel, int aLayer )
|
void SCH_PAINTER::draw( SCH_GLOBALLABEL *aLabel, int aLayer )
|
||||||
{
|
{
|
||||||
std::vector<wxPoint> pts;
|
std::vector<wxPoint> pts;
|
||||||
std::deque<VECTOR2D> pts2;
|
std::deque<VECTOR2D> pts2;
|
||||||
|
@ -1045,10 +1037,11 @@ void SCH_PAINTER::draw ( SCH_GLOBALLABEL *aLabel, int aLayer )
|
||||||
aLabel->CreateGraphicShape( pts, aLabel->GetTextPos() );
|
aLabel->CreateGraphicShape( pts, aLabel->GetTextPos() );
|
||||||
|
|
||||||
for( auto p : pts )
|
for( auto p : pts )
|
||||||
pts2.push_back( VECTOR2D(p.x, p.y ) );
|
pts2.push_back( VECTOR2D( p.x, p.y ) );
|
||||||
|
|
||||||
m_gal->SetIsFill( false );
|
m_gal->SetIsFill( false );
|
||||||
m_gal->SetIsStroke( true );
|
m_gal->SetIsStroke( true );
|
||||||
|
m_gal->SetLineWidth( aLabel->GetThickness() );
|
||||||
m_gal->SetStrokeColor( m_schSettings.GetLayerColor( LAYER_GLOBLABEL ) );
|
m_gal->SetStrokeColor( m_schSettings.GetLayerColor( LAYER_GLOBLABEL ) );
|
||||||
m_gal->DrawPolyline( pts2 );
|
m_gal->DrawPolyline( pts2 );
|
||||||
|
|
||||||
|
@ -1056,7 +1049,7 @@ void SCH_PAINTER::draw ( SCH_GLOBALLABEL *aLabel, int aLayer )
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void SCH_PAINTER::draw ( SCH_HIERLABEL *aLabel, int aLayer )
|
void SCH_PAINTER::draw( SCH_HIERLABEL *aLabel, int aLayer )
|
||||||
{
|
{
|
||||||
std::vector<wxPoint> pts;
|
std::vector<wxPoint> pts;
|
||||||
std::deque<VECTOR2D> pts2;
|
std::deque<VECTOR2D> pts2;
|
||||||
|
@ -1064,10 +1057,11 @@ void SCH_PAINTER::draw ( SCH_HIERLABEL *aLabel, int aLayer )
|
||||||
aLabel->CreateGraphicShape( pts, aLabel->GetTextPos() );
|
aLabel->CreateGraphicShape( pts, aLabel->GetTextPos() );
|
||||||
|
|
||||||
for( auto p : pts )
|
for( auto p : pts )
|
||||||
pts2.push_back( VECTOR2D(p.x, p.y ) );
|
pts2.push_back( VECTOR2D( p.x, p.y ) );
|
||||||
|
|
||||||
m_gal->SetIsFill( false );
|
m_gal->SetIsFill( false );
|
||||||
m_gal->SetIsStroke( true );
|
m_gal->SetIsStroke( true );
|
||||||
|
m_gal->SetLineWidth( aLabel->GetThickness() );
|
||||||
m_gal->SetStrokeColor( m_schSettings.GetLayerColor( LAYER_SHEETLABEL ) );
|
m_gal->SetStrokeColor( m_schSettings.GetLayerColor( LAYER_SHEETLABEL ) );
|
||||||
m_gal->DrawPolyline( pts2 );
|
m_gal->DrawPolyline( pts2 );
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue