Speed up zone fill calculations after a zone parameters edition.
This commit is contained in:
parent
67a152ee8d
commit
82174b5b2d
|
@ -47,6 +47,8 @@
|
||||||
#include <drc_stuff.h>
|
#include <drc_stuff.h>
|
||||||
#include <connectivity_data.h>
|
#include <connectivity_data.h>
|
||||||
|
|
||||||
|
#include <widgets/progress_reporter.h>
|
||||||
|
|
||||||
#include <zone_filler.h>
|
#include <zone_filler.h>
|
||||||
|
|
||||||
// Outline creation:
|
// Outline creation:
|
||||||
|
@ -924,6 +926,8 @@ void PCB_EDIT_FRAME::Edit_Zone_Params( wxDC* DC, ZONE_CONTAINER* aZone )
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
wxBusyCursor dummy;
|
||||||
|
|
||||||
// Undraw old zone outlines
|
// Undraw old zone outlines
|
||||||
for( int ii = 0; ii < GetBoard()->GetAreaCount(); ii++ )
|
for( int ii = 0; ii < GetBoard()->GetAreaCount(); ii++ )
|
||||||
{
|
{
|
||||||
|
@ -952,9 +956,11 @@ void PCB_EDIT_FRAME::Edit_Zone_Params( wxDC* DC, ZONE_CONTAINER* aZone )
|
||||||
UpdateCopyOfZonesList( s_PickedList, s_AuxiliaryList, GetBoard() );
|
UpdateCopyOfZonesList( s_PickedList, s_AuxiliaryList, GetBoard() );
|
||||||
|
|
||||||
// refill zones with the new properties applied
|
// refill zones with the new properties applied
|
||||||
|
std::vector<ZONE_CONTAINER*> zones_to_refill;
|
||||||
|
|
||||||
for( unsigned i = 0; i < s_PickedList.GetCount(); ++i )
|
for( unsigned i = 0; i < s_PickedList.GetCount(); ++i )
|
||||||
{
|
{
|
||||||
auto zone = dyn_cast<ZONE_CONTAINER*>( s_PickedList.GetPickedItem( i ) );
|
ZONE_CONTAINER* zone = dyn_cast<ZONE_CONTAINER*>( s_PickedList.GetPickedItem( i ) );
|
||||||
|
|
||||||
if( zone == nullptr )
|
if( zone == nullptr )
|
||||||
{
|
{
|
||||||
|
@ -963,10 +969,19 @@ void PCB_EDIT_FRAME::Edit_Zone_Params( wxDC* DC, ZONE_CONTAINER* aZone )
|
||||||
}
|
}
|
||||||
|
|
||||||
if( zone->IsFilled() )
|
if( zone->IsFilled() )
|
||||||
{
|
zones_to_refill.push_back( zone );
|
||||||
ZONE_FILLER filler ( GetBoard() );
|
}
|
||||||
filler.Fill( { zone } );
|
|
||||||
}
|
if( zones_to_refill.size() )
|
||||||
|
{
|
||||||
|
ZONE_FILLER filler ( GetBoard() );
|
||||||
|
wxString title;
|
||||||
|
title.Printf( _( "Refill %d Zones" ), (int)zones_to_refill.size() );
|
||||||
|
std::unique_ptr<WX_PROGRESS_REPORTER> progressReporter(
|
||||||
|
new WX_PROGRESS_REPORTER( this, title, 3 ) );
|
||||||
|
|
||||||
|
filler.SetProgressReporter( progressReporter.get() );
|
||||||
|
filler.Fill( zones_to_refill );
|
||||||
}
|
}
|
||||||
|
|
||||||
commit.Stage( s_PickedList );
|
commit.Stage( s_PickedList );
|
||||||
|
|
|
@ -92,6 +92,8 @@ void PCB_EDIT_FRAME::Delete_OldZone_Fill( SEGZONE* aZone, timestamp_t aTimestamp
|
||||||
|
|
||||||
int PCB_EDIT_FRAME::Fill_All_Zones( wxWindow * aActiveWindow, bool aVerbose )
|
int PCB_EDIT_FRAME::Fill_All_Zones( wxWindow * aActiveWindow, bool aVerbose )
|
||||||
{
|
{
|
||||||
|
wxBusyCursor dummy;
|
||||||
|
|
||||||
std::vector<ZONE_CONTAINER*> toFill;
|
std::vector<ZONE_CONTAINER*> toFill;
|
||||||
|
|
||||||
for( auto zone : GetBoard()->Zones() )
|
for( auto zone : GetBoard()->Zones() )
|
||||||
|
|
Loading…
Reference in New Issue