FOOTPRINT: add a method to auto-position Reference and Value.

This commit is contained in:
Alex Shvartzkop 2023-07-29 10:18:13 +05:00
parent 040fd327ab
commit e498f1b9a0
3 changed files with 26 additions and 14 deletions

View File

@ -2179,6 +2179,26 @@ wxString FOOTPRINT::GetNextPadNumber( const wxString& aLastPadNumber ) const
}
void FOOTPRINT::AutoPositionFields()
{
// Auto-position reference and value
BOX2I bbox = GetBoundingBox( false, false );
bbox.Inflate( pcbIUScale.mmToIU( 0.2 ) ); // Gap between graphics and text
if( Reference().GetPosition() == VECTOR2I( 0, 0 ) )
{
Reference().SetX( bbox.GetCenter().x );
Reference().SetY( bbox.GetTop() - Reference().GetTextSize().y / 2 );
}
if( Value().GetPosition() == VECTOR2I( 0, 0 ) )
{
Value().SetX( bbox.GetCenter().x );
Value().SetY( bbox.GetBottom() + Value().GetTextSize().y / 2 );
}
}
void FOOTPRINT::IncrementReference( int aDelta )
{
const wxString& refdes = GetReference();

View File

@ -775,6 +775,11 @@ public:
*/
wxString GetNextPadNumber( const wxString& aLastPadName ) const;
/**
* Position Reference and Value fields at the top and bottom of footprint's bounding box.
*/
void AutoPositionFields();
/**
* Get the type of footprint
* @return "SMD"/"Through hole"/"Other" based on attributes

View File

@ -761,20 +761,7 @@ FOOTPRINT* ALTIUM_PCB::ParseFootprint( const ALTIUM_COMPOUND_FILE& altiumLibFile
}
// Auto-position reference and value
BOX2I bbox = footprint.get()->GetBoundingBox( false, false );
bbox.Inflate( pcbIUScale.mmToIU( 0.2 ) ); // Gap between graphics and text
if( footprint->Reference().GetPosition() == VECTOR2I( 0, 0 ) )
{
footprint->Reference().SetX( bbox.GetCenter().x );
footprint->Reference().SetY( bbox.GetTop() - footprint->Reference().GetTextSize().y / 2 );
}
if( footprint->Value().GetPosition() == VECTOR2I( 0, 0 ) )
{
footprint->Value().SetX( bbox.GetCenter().x );
footprint->Value().SetY( bbox.GetBottom() + footprint->Value().GetTextSize().y / 2 );
}
footprint->AutoPositionFields();
if( parser.HasParsingError() )
{