Browse Source

PCB Fields: fix v7 imported board hidden description field pos

Fixes: https://gitlab.com/kicad/code/kicad/-/issues/17684
newinvert
Mike Williams 2 years ago
parent
commit
e2f1da60d9
  1. 9
      pcbnew/pcb_io/kicad_sexpr/pcb_io_kicad_sexpr_parser.cpp
  2. 4
      pcbnew/pcb_text.cpp
  3. 2
      pcbnew/pcb_text.h

9
pcbnew/pcb_io/kicad_sexpr/pcb_io_kicad_sexpr_parser.cpp

@ -3224,6 +3224,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 )
@ -3240,6 +3241,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 );
@ -3346,7 +3348,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() );
}
}

4
pcbnew/pcb_text.cpp

@ -55,8 +55,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 );

2
pcbnew/pcb_text.h

@ -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.

Loading…
Cancel
Save