SCH_GLOBALLABEL: fix broken position of IREF, creating a broken bounding box.

Note also the bounding box is too large when the IREF  is not shown, because
IREF is always included, even if not shown.
Fixes #7864
https://gitlab.com/kicad/code/kicad/issues/7864
This commit is contained in:
jean-pierre charras 2021-03-10 17:56:09 +01:00
parent 068e85c567
commit d295b5d6de
2 changed files with 26 additions and 3 deletions

View File

@ -1105,7 +1105,7 @@ void SCH_GLOBALLABEL::UpdateIntersheetRefProps()
void SCH_GLOBALLABEL::AutoplaceFields( SCH_SCREEN* aScreen, bool aManual ) void SCH_GLOBALLABEL::AutoplaceFields( SCH_SCREEN* aScreen, bool aManual )
{ {
int margin = GetTextOffset(); int margin = GetTextOffset();
int labelLen = GetBoundingBox().GetSizeMax(); int labelLen = GetBoundingBoxBase().GetSizeMax();
int penOffset = GetPenWidth() / 2; int penOffset = GetPenWidth() / 2;
// Set both axes to penOffset; we're going to overwrite the text axis below // Set both axes to penOffset; we're going to overwrite the text axis below
@ -1296,8 +1296,10 @@ void SCH_GLOBALLABEL::CreateGraphicShape( const RENDER_SETTINGS* aRenderSettings
} }
const EDA_RECT SCH_GLOBALLABEL::GetBoundingBox() const const EDA_RECT SCH_GLOBALLABEL::GetBoundingBoxBase() const
{ {
// build the bounding box on the global label only, without taking in account
// the intersheets references, just the bounding box of the graphic shape
int x = GetTextPos().x; int x = GetTextPos().x;
int y = GetTextPos().y; int y = GetTextPos().y;
int penWidth = GetEffectiveTextPenWidth(); int penWidth = GetEffectiveTextPenWidth();
@ -1339,6 +1341,18 @@ const EDA_RECT SCH_GLOBALLABEL::GetBoundingBox() const
EDA_RECT box( wxPoint( x, y ), wxSize( dx, dy ) ); EDA_RECT box( wxPoint( x, y ), wxSize( dx, dy ) );
box.Normalize();
return box;
}
const EDA_RECT SCH_GLOBALLABEL::GetBoundingBox() const
{
// build the bounding box on the global label only, including the intersheets references
// full bounding box
EDA_RECT box( GetBoundingBoxBase() );
box.Merge( m_intersheetRefsField.GetBoundingBox() ); box.Merge( m_intersheetRefsField.GetBoundingBox() );
box.Normalize(); box.Normalize();

View File

@ -413,6 +413,15 @@ public:
wxPoint GetSchematicTextOffset( const RENDER_SETTINGS* aSettings ) const override; wxPoint GetSchematicTextOffset( const RENDER_SETTINGS* aSettings ) const override;
/**
* Returns the bounding box on the global label only, without taking in account
* the intersheets references
*/
const EDA_RECT GetBoundingBoxBase() const;
/**
* Returns the bounding box on the global label only, including the intersheets references
*/
const EDA_RECT GetBoundingBox() const override; const EDA_RECT GetBoundingBox() const override;
void CreateGraphicShape( const RENDER_SETTINGS* aRenderSettings, void CreateGraphicShape( const RENDER_SETTINGS* aRenderSettings,