Eeschema: fix issues related to ERC tests after changes by commit d77eae3e

It also fixes a bug in SCH_FIELD::compare()
This commit is contained in:
jean-pierre charras 2024-04-25 19:44:46 +02:00
parent b22bc2737e
commit 28f48cbec1
3 changed files with 41 additions and 16 deletions

View File

@ -1542,7 +1542,13 @@ int SCH_FIELD::compare( const SCH_ITEM& aOther, int aCompareFlags ) const
{ {
wxASSERT( aOther.Type() == SCH_FIELD_T ); wxASSERT( aOther.Type() == SCH_FIELD_T );
int retv = SCH_ITEM::compare( aOther, aCompareFlags ); int compareFlags = aCompareFlags;
// For ERC tests, the field position has no matter, so do not test it
if( aCompareFlags & SCH_ITEM::COMPARE_FLAGS::ERC )
compareFlags |= SCH_ITEM::COMPARE_FLAGS::SKIP_TST_POS;
int retv = SCH_ITEM::compare( aOther, compareFlags );
if( retv ) if( retv )
return retv; return retv;
@ -1599,11 +1605,15 @@ int SCH_FIELD::compare( const SCH_ITEM& aOther, int aCompareFlags ) const
return GetTextPos().y - tmp->GetTextPos().y; return GetTextPos().y - tmp->GetTextPos().y;
} }
if( GetTextWidth() != tmp->GetTextWidth() ) // For ERC tests, the field size has no matter, so do not test it
return GetTextWidth() - tmp->GetTextWidth(); if( !( aCompareFlags & SCH_ITEM::COMPARE_FLAGS::ERC ) )
{
if( GetTextWidth() != tmp->GetTextWidth() )
return GetTextWidth() - tmp->GetTextWidth();
if( GetTextHeight() != tmp->GetTextHeight() ) if( GetTextHeight() != tmp->GetTextHeight() )
return GetTextHeight() - tmp->GetTextHeight(); return GetTextHeight() - tmp->GetTextHeight();
}
return 0; return 0;
} }

View File

@ -417,18 +417,30 @@ int SCH_ITEM::compare( const SCH_ITEM& aOther, int aCompareFlags ) const
return m_bodyStyle - aOther.m_bodyStyle; return m_bodyStyle - aOther.m_bodyStyle;
if( IsPrivate() != aOther.IsPrivate() ) if( IsPrivate() != aOther.IsPrivate() )
return IsPrivate() < aOther.IsPrivate(); return IsPrivate() ? 1 : -1;
if( GetPosition().x != aOther.GetPosition().x ) if( !( aCompareFlags & SCH_ITEM::COMPARE_FLAGS::SKIP_TST_POS ) )
return GetPosition().x < aOther.GetPosition().x; {
if( GetPosition().x != aOther.GetPosition().x )
return GetPosition().x - aOther.GetPosition().x;
if( GetPosition().y != aOther.GetPosition().y ) if( GetPosition().y != aOther.GetPosition().y )
return GetPosition().y < aOther.GetPosition().y; return GetPosition().y - aOther.GetPosition().y;
}
if( aCompareFlags & SCH_ITEM::COMPARE_FLAGS::EQUALITY ) if( ( aCompareFlags & SCH_ITEM::COMPARE_FLAGS::EQUALITY )
|| ( aCompareFlags & SCH_ITEM::COMPARE_FLAGS::ERC ) )
{
return 0; return 0;
}
return m_Uuid < aOther.m_Uuid; if( m_Uuid < aOther.m_Uuid )
return -1;
if( m_Uuid > aOther.m_Uuid )
return 1;
return 0;
} }

View File

@ -654,17 +654,20 @@ public:
* UNIT This flag relaxes unit, body-style and pin-number constraints. It is used for * UNIT This flag relaxes unit, body-style and pin-number constraints. It is used for
* #SCH_ITEM object unit comparisons. * #SCH_ITEM object unit comparisons.
* *
* EQUALITY This flag relaxes ordering contstraints so that fields, etc. don't have to * EQUALITY This flag relaxes ordering constraints so that fields, etc. don't have to
* appear in the same order to be considered equal. * appear in the same order to be considered equal.
* *
* ERC This flag relaxes constraints on data that is settable in the schematic editor. * ERC This flag relaxes constraints on data that is settable in the schematic editor.
* It compares only symbol-editor-only data. * It compares only symbol-editor-only data.
*
* SKIP_TST_POS This flag relaxes comparisons on position (mainly for fields) for ERC.
*/ */
enum COMPARE_FLAGS : int enum COMPARE_FLAGS : int
{ {
UNIT = 0x01, UNIT = 0x01,
EQUALITY = 0x02, EQUALITY = 0x02,
ERC = 0x04 ERC = 0x04,
SKIP_TST_POS = 0x08
}; };
virtual bool operator==( const SCH_ITEM& aOther ) const; virtual bool operator==( const SCH_ITEM& aOther ) const;