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 );
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 )
return retv;
@ -1599,11 +1605,15 @@ int SCH_FIELD::compare( const SCH_ITEM& aOther, int aCompareFlags ) const
return GetTextPos().y - tmp->GetTextPos().y;
}
// For ERC tests, the field size has no matter, so do not test it
if( !( aCompareFlags & SCH_ITEM::COMPARE_FLAGS::ERC ) )
{
if( GetTextWidth() != tmp->GetTextWidth() )
return GetTextWidth() - tmp->GetTextWidth();
if( GetTextHeight() != tmp->GetTextHeight() )
return GetTextHeight() - tmp->GetTextHeight();
}
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;
if( IsPrivate() != aOther.IsPrivate() )
return IsPrivate() < aOther.IsPrivate();
return IsPrivate() ? 1 : -1;
if( !( aCompareFlags & SCH_ITEM::COMPARE_FLAGS::SKIP_TST_POS ) )
{
if( GetPosition().x != aOther.GetPosition().x )
return GetPosition().x < aOther.GetPosition().x;
return GetPosition().x - aOther.GetPosition().x;
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 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
* #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.
*
* ERC This flag relaxes constraints on data that is settable in the schematic editor.
* 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
{
UNIT = 0x01,
EQUALITY = 0x02,
ERC = 0x04
ERC = 0x04,
SKIP_TST_POS = 0x08
};
virtual bool operator==( const SCH_ITEM& aOther ) const;