Fix undo issue with merging lines into rectangles.

This commit is contained in:
Jeff Young 2020-06-29 22:58:05 +01:00
parent 36e94773a3
commit d67f404dec
2 changed files with 14 additions and 36 deletions

View File

@ -134,8 +134,6 @@ bool GRAPHICS_CLEANER::areEquivalent( DRAWSEGMENT* aSegment1, DRAWSEGMENT* aSegm
void GRAPHICS_CLEANER::cleanupSegments()
{
std::set<BOARD_ITEM*> toRemove;
// Remove duplicate segments (2 superimposed identical segments):
for( auto it = m_drawings.begin(); it != m_drawings.end(); it++ )
{
@ -150,7 +148,9 @@ void GRAPHICS_CLEANER::cleanupSegments()
item->SetItems( segment );
m_itemsList->push_back( item );
toRemove.insert( segment );
if( !m_dryRun )
m_commit.Removed( segment );
continue;
}
@ -168,13 +168,12 @@ void GRAPHICS_CLEANER::cleanupSegments()
m_itemsList->push_back( item );
segment2->SetFlags( IS_DELETED );
toRemove.insert( segment2 );
if( !m_dryRun )
m_commit.Removed( segment2 );
}
}
}
if( !m_dryRun )
removeItems( toRemove );
}
@ -196,14 +195,6 @@ void GRAPHICS_CLEANER::mergeRects()
DRAWSEGMENT* seg;
};
std::set<BOARD_ITEM*> toRemove;
auto markForRemoval = [&]( SIDE_CANDIDATE* aSide )
{
toRemove.insert( aSide->seg );
aSide->seg->SetFlags( IS_DELETED );
};
std::vector<SIDE_CANDIDATE*> sides;
std::map<wxPoint, std::vector<SIDE_CANDIDATE*>> ptMap;
@ -295,10 +286,10 @@ void GRAPHICS_CLEANER::mergeRects()
if( right && bottom )
{
markForRemoval( left );
markForRemoval( top );
markForRemoval( right );
markForRemoval( bottom );
left->seg->SetFlags( IS_DELETED );
top->seg->SetFlags( IS_DELETED );
right->seg->SetFlags( IS_DELETED );
bottom->seg->SetFlags( IS_DELETED );
CLEANUP_ITEM* item = new CLEANUP_ITEM( CLEANUP_LINES_TO_RECT );
item->SetItems( left->seg, top->seg, right->seg, bottom->seg );
@ -320,28 +311,16 @@ void GRAPHICS_CLEANER::mergeRects()
rect->SetWidth( top->seg->GetWidth() );
m_commit.Add( rect );
m_commit.Remove( left->seg );
m_commit.Remove( top->seg );
m_commit.Remove( right->seg );
m_commit.Remove( bottom->seg );
}
}
}
}
if( !m_dryRun )
removeItems( toRemove );
for( SIDE_CANDIDATE* side : sides )
delete side;
}
void GRAPHICS_CLEANER::removeItems( std::set<BOARD_ITEM*>& aItems )
{
for( BOARD_ITEM* item : aItems )
{
if( m_parentModule )
m_parentModule->Remove( item );
else
item->GetParent()->Remove( item );
m_commit.Removed( item );
}
}

View File

@ -51,7 +51,6 @@ private:
void cleanupSegments();
void mergeRects();
void removeItems( std::set<BOARD_ITEM*>& aItems );
private:
DRAWINGS& m_drawings;