7
mirror of https://gitlab.com/kicad/code/kicad.git synced 2025-04-21 09:41:41 +00:00

Compare SCH_SHAPE UUIDs after comparing shape object coordinates.

Fixes https://gitlab.com/kicad/code/kicad/-/issues/19716
This commit is contained in:
Wayne Stambaugh 2025-01-27 09:13:45 -05:00
parent b2ef81808b
commit 048669eced

View File

@ -642,12 +642,36 @@ double SCH_SHAPE::Similarity( const SCH_ITEM& aOther ) const
int SCH_SHAPE::compare( const SCH_ITEM& aOther, int aCompareFlags ) const
{
int retv = SCH_ITEM::compare( aOther, aCompareFlags );
int cmpFlags = aCompareFlags;
// The object UUIDs must be compared after the shape coordinates because shapes do not
// have immutable UUIDs.
if( !( cmpFlags & ( SCH_ITEM::COMPARE_FLAGS::EQUALITY | SCH_ITEM::COMPARE_FLAGS::ERC ) ) )
cmpFlags |= SCH_ITEM::COMPARE_FLAGS::EQUALITY;
int retv = SCH_ITEM::compare( aOther, cmpFlags );
if( retv )
return retv;
return EDA_SHAPE::Compare( &static_cast<const SCH_SHAPE&>( aOther ) );
retv = EDA_SHAPE::Compare( &static_cast<const SCH_SHAPE&>( aOther ) );
if( retv )
return retv;
if( ( aCompareFlags & SCH_ITEM::COMPARE_FLAGS::EQUALITY )
|| ( aCompareFlags & SCH_ITEM::COMPARE_FLAGS::ERC ) )
{
return 0;
}
if( m_Uuid < aOther.m_Uuid )
return -1;
if( m_Uuid > aOther.m_Uuid )
return 1;
return 0;
}