Eeschema: improve merging of overlapping SCH_LINEs.
* Use std::min and std::max to determine the overlapping line end points.
This commit is contained in:
parent
4bf72be9e4
commit
10c8dae794
|
@ -269,17 +269,6 @@ void SCH_LINE::Rotate( wxPoint aPosition )
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
* helper sort function, used by MergeOverlap
|
|
||||||
* sorts ref and test by x values, or (for same x values) by y values
|
|
||||||
*/
|
|
||||||
bool sort_by_ends_position(const wxPoint * ref, const wxPoint * tst )
|
|
||||||
{
|
|
||||||
if( ref->x == tst->x )
|
|
||||||
return ref->y < tst->y;
|
|
||||||
return ref->x < tst->x;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* MergeOverlap try to merge 2 lines that are colinear.
|
* MergeOverlap try to merge 2 lines that are colinear.
|
||||||
* this function expects these 2 lines have at least a common end
|
* this function expects these 2 lines have at least a common end
|
||||||
|
@ -346,16 +335,18 @@ bool SCH_LINE::MergeOverlap( SCH_LINE* aLine )
|
||||||
// for horizontal segments the uppermost and the lowest point
|
// for horizontal segments the uppermost and the lowest point
|
||||||
if( colinear )
|
if( colinear )
|
||||||
{
|
{
|
||||||
std::vector <wxPoint*> candidates;
|
auto less = []( const wxPoint& lhs, const wxPoint& rhs ) -> bool
|
||||||
candidates.reserve( 4 );
|
{
|
||||||
candidates.push_back( &m_start );
|
if( lhs.x == rhs.x )
|
||||||
candidates.push_back( &m_end );
|
return lhs.y < rhs.y;
|
||||||
candidates.push_back( &aLine->m_start );
|
return lhs.x < rhs.x;
|
||||||
candidates.push_back( &aLine->m_end );
|
};
|
||||||
sort( candidates.begin(), candidates.end(), sort_by_ends_position );
|
|
||||||
wxPoint tmp = *candidates[3];
|
wxPoint top_left = std::min( { m_start, m_end, aLine->m_start, aLine->m_end }, less );
|
||||||
m_start = *candidates[0];
|
wxPoint bottom_right = std::max( { m_start, m_end, aLine->m_start, aLine->m_end }, less );
|
||||||
m_end = tmp;
|
|
||||||
|
m_start = top_left;
|
||||||
|
m_end = bottom_right;
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
|
|
Loading…
Reference in New Issue