diff --git a/src/Mod/Path/libarea/Area.cpp b/src/Mod/Path/libarea/Area.cpp index cb5573a0a..36799a786 100644 --- a/src/Mod/Path/libarea/Area.cpp +++ b/src/Mod/Path/libarea/Area.cpp @@ -92,9 +92,13 @@ void CArea::Reorder() // returns 1, if the curves are overlapping CAreaOrderer ao; - for(std::list::iterator It = m_curves.begin(); It != m_curves.end(); It++) + std::list::iterator ItLast = m_curves.end(); + for(std::list::iterator It = m_curves.begin(); It != m_curves.end(); ++It) { CCurve& curve = *It; + if(!It->IsClosed()) + continue; + ItLast = It; ao.Insert(&curve); if(m_set_processing_length_in_split) { @@ -102,7 +106,19 @@ void CArea::Reorder() } } - *this = ao.ResultArea(); + if(ItLast == m_curves.end()) + return; + + if(ao.m_top_level) + ao.m_top_level->GetArea(*this); + + ++ItLast; + for(std::list::iterator It=m_curves.begin(), ItNext=It; It!=ItLast; It=ItNext) + { + ++ItNext; + if(It->IsClosed()) + m_curves.erase(It); + } } class ZigZag