Browse Source

Compare SCH_SHAPE UUIDs after comparing shape object coordinates.

Fixes https://gitlab.com/kicad/code/kicad/-/issues/19716
pcb_db
Wayne Stambaugh 9 months ago
parent
commit
048669eced
  1. 28
      eeschema/sch_shape.cpp

28
eeschema/sch_shape.cpp

@ -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;
retv = EDA_SHAPE::Compare( &static_cast<const SCH_SHAPE&>( aOther ) );
if( retv )
return retv;
return EDA_SHAPE::Compare( &static_cast<const SCH_SHAPE&>( aOther ) );
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;
}

Loading…
Cancel
Save