PCB Fields: fix v7 imported board hidden description field pos

Fixes: https://gitlab.com/kicad/code/kicad/-/issues/17684
This commit is contained in:
Mike Williams 2024-04-09 15:23:02 -04:00
parent 43d4c8d801
commit f29fc2a025
3 changed files with 11 additions and 4 deletions

View File

@ -3196,6 +3196,7 @@ void PCB_IO_KICAD_SEXPR_PARSER::parsePCB_TEXT_effects( PCB_TEXT* aText )
FOOTPRINT* parentFP = dynamic_cast<FOOTPRINT*>( aText->GetParent() );
bool hasAngle = false; // Old files do not have a angle specified.
// in this case it is 0 expected to be 0
bool hasPos = false;
// By default, texts in footprints have a locked rotation (i.e. rot = -90 ... 90 deg)
if( parentFP )
@ -3212,6 +3213,7 @@ void PCB_IO_KICAD_SEXPR_PARSER::parsePCB_TEXT_effects( PCB_TEXT* aText )
{
VECTOR2I pt;
hasPos = true;
pt.x = parseBoardUnits( "X coordinate" );
pt.y = parseBoardUnits( "Y coordinate" );
aText->SetTextPos( pt );
@ -3318,7 +3320,12 @@ void PCB_IO_KICAD_SEXPR_PARSER::parsePCB_TEXT_effects( PCB_TEXT* aText )
// Move and rotate the text to its board coordinates
aText->Rotate( { 0, 0 }, parentFP->GetOrientation() );
aText->Move( parentFP->GetPosition() );
// Only move offset from parent position if we read a position from the file.
// These positions are relative to the parent footprint. If we don't have a position
// then the text defaults to the parent position and moving again will double it.
if (hasPos)
aText->Move( parentFP->GetPosition() );
}
}

View File

@ -47,8 +47,8 @@ PCB_TEXT::PCB_TEXT( BOARD_ITEM* parent, KICAD_T idtype ) :
}
PCB_TEXT::PCB_TEXT( FOOTPRINT* aParent ) :
BOARD_ITEM( aParent, PCB_TEXT_T ),
PCB_TEXT::PCB_TEXT( FOOTPRINT* aParent, KICAD_T idtype) :
BOARD_ITEM( aParent, idtype ),
EDA_TEXT( pcbIUScale )
{
SetKeepUpright( true );

View File

@ -39,7 +39,7 @@ class PCB_TEXT : public BOARD_ITEM, public EDA_TEXT
public:
PCB_TEXT( BOARD_ITEM* parent, KICAD_T idtype = PCB_TEXT_T );
PCB_TEXT( FOOTPRINT* aParent );
PCB_TEXT( FOOTPRINT* aParent, KICAD_T idtype = PCB_TEXT_T );
// Do not create a copy constructor & operator=.
// The ones generated by the compiler are adequate.