From 4fe025909ddf43fc761e1be0cf257b2bce1caa45 Mon Sep 17 00:00:00 2001 From: Jeff Young Date: Wed, 27 Oct 2021 13:54:28 +0100 Subject: [PATCH] Fix centered rotated text in Pcbnew Eagle importer. Fixes https://gitlab.com/kicad/code/kicad/issues/9466 --- common/plugins/eagle/eagle_parser.h | 2 +- pcbnew/plugins/eagle/eagle_plugin.cpp | 37 ++++++++++++++++++++++++--- 2 files changed, 34 insertions(+), 5 deletions(-) diff --git a/common/plugins/eagle/eagle_parser.h b/common/plugins/eagle/eagle_parser.h index 1472bea2ba..cc5559594c 100644 --- a/common/plugins/eagle/eagle_parser.h +++ b/common/plugins/eagle/eagle_parser.h @@ -646,7 +646,7 @@ struct ETEXT opt_erot rot; enum { // for align - CENTER, + CENTER = 0, CENTER_LEFT, TOP_CENTER, TOP_LEFT, diff --git a/pcbnew/plugins/eagle/eagle_plugin.cpp b/pcbnew/plugins/eagle/eagle_plugin.cpp index 6b95fc828e..a75aaf275f 100644 --- a/pcbnew/plugins/eagle/eagle_plugin.cpp +++ b/pcbnew/plugins/eagle/eagle_plugin.cpp @@ -767,13 +767,17 @@ void EAGLE_PLUGIN::loadPlain( wxXmlNode* aGraphics ) double degrees = t.rot->degrees; if( degrees == 90 || t.rot->spin ) + { pcbtxt->SetTextAngle( sign * t.rot->degrees * 10 ); + } else if( degrees == 180 ) - align = ETEXT::TOP_RIGHT; + { + align = -align; + } else if( degrees == 270 ) { pcbtxt->SetTextAngle( sign * 90 * 10 ); - align = ETEXT::TOP_RIGHT; + align = -align; } else { @@ -804,18 +808,22 @@ void EAGLE_PLUGIN::loadPlain( wxXmlNode* aGraphics ) switch( align ) { case ETEXT::CENTER: - // this was the default in pcbtxt's constructor + pcbtxt->SetHorizJustify( GR_TEXT_HJUSTIFY_CENTER ); + pcbtxt->SetVertJustify( GR_TEXT_VJUSTIFY_CENTER ); break; case ETEXT::CENTER_LEFT: pcbtxt->SetHorizJustify( GR_TEXT_HJUSTIFY_LEFT ); + pcbtxt->SetVertJustify( GR_TEXT_VJUSTIFY_CENTER ); break; case ETEXT::CENTER_RIGHT: pcbtxt->SetHorizJustify( GR_TEXT_HJUSTIFY_RIGHT ); + pcbtxt->SetVertJustify( GR_TEXT_VJUSTIFY_CENTER ); break; case ETEXT::TOP_CENTER: + pcbtxt->SetHorizJustify( GR_TEXT_HJUSTIFY_CENTER ); pcbtxt->SetVertJustify( GR_TEXT_VJUSTIFY_TOP ); break; @@ -830,6 +838,7 @@ void EAGLE_PLUGIN::loadPlain( wxXmlNode* aGraphics ) break; case ETEXT::BOTTOM_CENTER: + pcbtxt->SetHorizJustify( GR_TEXT_HJUSTIFY_CENTER ); pcbtxt->SetVertJustify( GR_TEXT_VJUSTIFY_BOTTOM ); break; @@ -1651,6 +1660,21 @@ void EAGLE_PLUGIN::orientFPText( FOOTPRINT* aFootprint, const EELEMENT& e, FP_TE aFPText->SetVertJustify( GR_TEXT_VJUSTIFY_BOTTOM ); break; + case ETEXT::CENTER: + aFPText->SetHorizJustify( GR_TEXT_HJUSTIFY_CENTER ); + aFPText->SetVertJustify( GR_TEXT_VJUSTIFY_CENTER ); + break; + + case ETEXT::CENTER_LEFT: + aFPText->SetHorizJustify( GR_TEXT_HJUSTIFY_LEFT ); + aFPText->SetVertJustify( GR_TEXT_VJUSTIFY_CENTER ); + break; + + case ETEXT::CENTER_RIGHT: + aFPText->SetHorizJustify( GR_TEXT_HJUSTIFY_RIGHT ); + aFPText->SetVertJustify( GR_TEXT_VJUSTIFY_CENTER ); + break; + default: ; } @@ -1960,18 +1984,22 @@ void EAGLE_PLUGIN::packageText( FOOTPRINT* aFootprint, wxXmlNode* aTree ) const switch( align ) { case ETEXT::CENTER: - // this was the default in pcbtxt's constructor + txt->SetHorizJustify( GR_TEXT_HJUSTIFY_CENTER ); + txt->SetVertJustify( GR_TEXT_VJUSTIFY_CENTER ); break; case ETEXT::CENTER_LEFT: txt->SetHorizJustify( GR_TEXT_HJUSTIFY_LEFT ); + txt->SetVertJustify( GR_TEXT_VJUSTIFY_CENTER ); break; case ETEXT::CENTER_RIGHT: txt->SetHorizJustify( GR_TEXT_HJUSTIFY_RIGHT ); + txt->SetVertJustify( GR_TEXT_VJUSTIFY_CENTER ); break; case ETEXT::TOP_CENTER: + txt->SetHorizJustify( GR_TEXT_HJUSTIFY_CENTER ); txt->SetVertJustify( GR_TEXT_VJUSTIFY_TOP ); break; @@ -1986,6 +2014,7 @@ void EAGLE_PLUGIN::packageText( FOOTPRINT* aFootprint, wxXmlNode* aTree ) const break; case ETEXT::BOTTOM_CENTER: + txt->SetHorizJustify( GR_TEXT_HJUSTIFY_CENTER ); txt->SetVertJustify( GR_TEXT_VJUSTIFY_BOTTOM ); break;