Replace single zone fill under "draft" terminology.

Also sets Autofill Zones to default to on.
This commit is contained in:
Jeff Young 2022-11-29 17:22:25 +00:00
parent 4039b7da6b
commit b6bd74d822
7 changed files with 104 additions and 8 deletions

View File

@ -882,6 +882,8 @@ void PCB_EDIT_FRAME::setupUIConditions()
mgr->SetConditions( PCB_ACTIONS::drawZoneCutout, ENABLE( singleZoneCond ) ); mgr->SetConditions( PCB_ACTIONS::drawZoneCutout, ENABLE( singleZoneCond ) );
mgr->SetConditions( PCB_ACTIONS::drawSimilarZone, ENABLE( singleZoneCond ) ); mgr->SetConditions( PCB_ACTIONS::drawSimilarZone, ENABLE( singleZoneCond ) );
mgr->SetConditions( PCB_ACTIONS::zoneMerge, ENABLE( zoneMergeCond ) ); mgr->SetConditions( PCB_ACTIONS::zoneMerge, ENABLE( zoneMergeCond ) );
mgr->SetConditions( PCB_ACTIONS::zoneFill, ENABLE( SELECTION_CONDITIONS::MoreThan( 0 ) ) );
mgr->SetConditions( PCB_ACTIONS::zoneUnfill, ENABLE( SELECTION_CONDITIONS::MoreThan( 0 ) ) );
mgr->SetConditions( PCB_ACTIONS::toggleHV45Mode, CHECK( cond.Get45degMode() ) ); mgr->SetConditions( PCB_ACTIONS::toggleHV45Mode, CHECK( cond.Get45degMode() ) );

View File

@ -160,7 +160,7 @@ PCBNEW_SETTINGS::PCBNEW_SETTINGS()
&m_Use45DegreeLimit, false ) ); &m_Use45DegreeLimit, false ) );
m_params.emplace_back( new PARAM<bool>( "editing.auto_fill_zones", m_params.emplace_back( new PARAM<bool>( "editing.auto_fill_zones",
&m_AutoRefillZones, false ) ); &m_AutoRefillZones, true ) );
m_params.emplace_back( new PARAM<bool>( "editing.allow_free_pads", m_params.emplace_back( new PARAM<bool>( "editing.allow_free_pads",
&m_AllowFreePads, false ) ); &m_AllowFreePads, false ) );

View File

@ -85,7 +85,9 @@ public:
SetIcon( BITMAPS::add_zone ); SetIcon( BITMAPS::add_zone );
SetTitle( _( "Zones" ) ); SetTitle( _( "Zones" ) );
Add( PCB_ACTIONS::zoneFill );
Add( PCB_ACTIONS::zoneFillAll ); Add( PCB_ACTIONS::zoneFillAll );
Add( PCB_ACTIONS::zoneUnfill );
Add( PCB_ACTIONS::zoneUnfillAll ); Add( PCB_ACTIONS::zoneUnfillAll );
AppendSeparator(); AppendSeparator();
@ -188,10 +190,10 @@ bool BOARD_EDITOR_CONTROL::Init()
// Finally, add the standard zoom & grid items // Finally, add the standard zoom & grid items
getEditFrame<PCB_BASE_FRAME>()->AddStandardSubMenus( m_menu ); getEditFrame<PCB_BASE_FRAME>()->AddStandardSubMenus( m_menu );
auto zoneMenu = std::make_shared<ZONE_CONTEXT_MENU>(); std::shared_ptr<ZONE_CONTEXT_MENU> zoneMenu = std::make_shared<ZONE_CONTEXT_MENU>();
zoneMenu->SetTool( this ); zoneMenu->SetTool( this );
auto lockMenu = std::make_shared<LOCK_CONTEXT_MENU>(); std::shared_ptr<LOCK_CONTEXT_MENU> lockMenu = std::make_shared<LOCK_CONTEXT_MENU>();
lockMenu->SetTool( this ); lockMenu->SetTool( this );
// Add the PCB control menus to relevant other tools // Add the PCB control menus to relevant other tools
@ -212,7 +214,7 @@ bool BOARD_EDITOR_CONTROL::Init()
menu.AddMenu( lockMenu.get(), SELECTION_CONDITIONS::NotEmpty, 100 ); menu.AddMenu( lockMenu.get(), SELECTION_CONDITIONS::NotEmpty, 100 );
menu.AddMenu( zoneMenu.get(), SELECTION_CONDITIONS::OnlyTypes( { PCB_ZONE_T } ), 200 ); menu.AddMenu( zoneMenu.get(), SELECTION_CONDITIONS::OnlyTypes( { PCB_ZONE_T } ), 100 );
} }
DRAWING_TOOL* drawingTool = m_toolMgr->GetTool<DRAWING_TOOL>(); DRAWING_TOOL* drawingTool = m_toolMgr->GetTool<DRAWING_TOOL>();
@ -235,7 +237,7 @@ bool BOARD_EDITOR_CONTROL::Init()
}; };
}; };
menu.AddMenu( zoneMenu.get(), toolActiveFunctor( DRAWING_TOOL::MODE::ZONE ), 200 ); menu.AddMenu( zoneMenu.get(), toolActiveFunctor( DRAWING_TOOL::MODE::ZONE ), 300 );
} }
return true; return true;

View File

@ -1369,6 +1369,12 @@ TOOL_ACTION PCB_ACTIONS::filterSelection( "pcbnew.InteractiveSelection.FilterSel
// ZONE_FILLER_TOOL // ZONE_FILLER_TOOL
// //
TOOL_ACTION PCB_ACTIONS::zoneFill( "pcbnew.ZoneFiller.zoneFill",
AS_GLOBAL, 0, "",
_( "Draft Fill Selected Zone(s)" ),
_( "Update copper fill of selected zone(s) without regard to other interacting zones" ),
BITMAPS::fill_zone );
TOOL_ACTION PCB_ACTIONS::zoneFillAll( "pcbnew.ZoneFiller.zoneFillAll", TOOL_ACTION PCB_ACTIONS::zoneFillAll( "pcbnew.ZoneFiller.zoneFillAll",
AS_GLOBAL, AS_GLOBAL,
'B', LEGACY_HK_NAME( "Fill or Refill All Zones" ), 'B', LEGACY_HK_NAME( "Fill or Refill All Zones" ),
@ -1378,6 +1384,11 @@ TOOL_ACTION PCB_ACTIONS::zoneFillAll( "pcbnew.ZoneFiller.zoneFillAll",
TOOL_ACTION PCB_ACTIONS::zoneFillDirty( "pcbnew.ZoneFiller.zoneFillDirty", TOOL_ACTION PCB_ACTIONS::zoneFillDirty( "pcbnew.ZoneFiller.zoneFillDirty",
AS_CONTEXT ); AS_CONTEXT );
TOOL_ACTION PCB_ACTIONS::zoneUnfill( "pcbnew.ZoneFiller.zoneUnfill",
AS_GLOBAL, 0, "",
_( "Unfill Selected Zone(s)" ), _( "Remove copper fill from selected zone(s)" ),
BITMAPS::zone_unfill );
TOOL_ACTION PCB_ACTIONS::zoneUnfillAll( "pcbnew.ZoneFiller.zoneUnfillAll", TOOL_ACTION PCB_ACTIONS::zoneUnfillAll( "pcbnew.ZoneFiller.zoneUnfillAll",
AS_GLOBAL, AS_GLOBAL,
MD_CTRL + 'B', LEGACY_HK_NAME( "Remove Filled Areas in All Zones" ), MD_CTRL + 'B', LEGACY_HK_NAME( "Remove Filled Areas in All Zones" ),

View File

@ -336,8 +336,10 @@ public:
static TOOL_ACTION assignNetClass; static TOOL_ACTION assignNetClass;
// Zone actions // Zone actions
static TOOL_ACTION zoneFill;
static TOOL_ACTION zoneFillAll; static TOOL_ACTION zoneFillAll;
static TOOL_ACTION zoneFillDirty; static TOOL_ACTION zoneFillDirty;
static TOOL_ACTION zoneUnfill;
static TOOL_ACTION zoneUnfillAll; static TOOL_ACTION zoneUnfillAll;
static TOOL_ACTION zoneMerge; static TOOL_ACTION zoneMerge;

View File

@ -276,6 +276,58 @@ int ZONE_FILLER_TOOL::ZoneFillDirty( const TOOL_EVENT& aEvent )
} }
int ZONE_FILLER_TOOL::ZoneFill( const TOOL_EVENT& aEvent )
{
if( m_fillInProgress )
{
wxBell();
return -1;
}
m_fillInProgress = true;
std::vector<ZONE*> toFill;
if( ZONE* passedZone = aEvent.Parameter<ZONE*>() )
{
toFill.push_back( passedZone );
}
else
{
for( EDA_ITEM* item : selection() )
{
if( ZONE* zone = dynamic_cast<ZONE*>( item ) )
toFill.push_back( zone );
}
}
BOARD_COMMIT commit( this );
std::unique_ptr<WX_PROGRESS_REPORTER> reporter;
ZONE_FILLER filler( board(), &commit );
reporter = std::make_unique<WX_PROGRESS_REPORTER>( frame(), _( "Fill Zone" ), 5 );
filler.SetProgressReporter( reporter.get() );
if( filler.Fill( toFill ) )
{
reporter->AdvancePhase();
commit.Push( _( "Fill Zone(s)" ), SKIP_CONNECTIVITY | ZONE_FILL_OP );
}
else
{
commit.Revert();
}
board()->BuildConnectivity( reporter.get() );
m_toolMgr->PostEvent( EVENTS::ConnectivityChangedEvent );
refresh();
m_fillInProgress = false;
return 0;
}
int ZONE_FILLER_TOOL::ZoneFillAll( const TOOL_EVENT& aEvent ) int ZONE_FILLER_TOOL::ZoneFillAll( const TOOL_EVENT& aEvent )
{ {
FillAllZones( frame() ); FillAllZones( frame() );
@ -283,6 +335,29 @@ int ZONE_FILLER_TOOL::ZoneFillAll( const TOOL_EVENT& aEvent )
} }
int ZONE_FILLER_TOOL::ZoneUnfill( const TOOL_EVENT& aEvent )
{
BOARD_COMMIT commit( this );
for( EDA_ITEM* item : selection() )
{
assert( item->Type() == PCB_ZONE_T || item->Type() == PCB_FP_ZONE_T );
ZONE* zone = static_cast<ZONE*>( item );
commit.Modify( zone );
zone->UnFill();
}
commit.Push( _( "Unfill Zone" ), ZONE_FILL_OP );
refresh();
return 0;
}
int ZONE_FILLER_TOOL::ZoneUnfillAll( const TOOL_EVENT& aEvent ) int ZONE_FILLER_TOOL::ZoneUnfillAll( const TOOL_EVENT& aEvent )
{ {
BOARD_COMMIT commit( this ); BOARD_COMMIT commit( this );
@ -334,7 +409,9 @@ bool ZONE_FILLER_TOOL::IsZoneFillAction( const TOOL_EVENT* aEvent )
void ZONE_FILLER_TOOL::setTransitions() void ZONE_FILLER_TOOL::setTransitions()
{ {
// Zone actions // Zone actions
Go( &ZONE_FILLER_TOOL::ZoneFillAll, PCB_ACTIONS::zoneFillAll.MakeEvent() ); Go( &ZONE_FILLER_TOOL::ZoneFill, PCB_ACTIONS::zoneFill.MakeEvent() );
Go( &ZONE_FILLER_TOOL::ZoneFillDirty, PCB_ACTIONS::zoneFillDirty.MakeEvent() ); Go( &ZONE_FILLER_TOOL::ZoneFillAll, PCB_ACTIONS::zoneFillAll.MakeEvent() );
Go( &ZONE_FILLER_TOOL::ZoneUnfillAll, PCB_ACTIONS::zoneUnfillAll.MakeEvent() ); Go( &ZONE_FILLER_TOOL::ZoneFillDirty, PCB_ACTIONS::zoneFillDirty.MakeEvent() );
Go( &ZONE_FILLER_TOOL::ZoneUnfill, PCB_ACTIONS::zoneUnfill.MakeEvent() );
Go( &ZONE_FILLER_TOOL::ZoneUnfillAll, PCB_ACTIONS::zoneUnfillAll.MakeEvent() );
} }

View File

@ -51,8 +51,10 @@ public:
void CheckAllZones( wxWindow* aCaller, PROGRESS_REPORTER* aReporter = nullptr ); void CheckAllZones( wxWindow* aCaller, PROGRESS_REPORTER* aReporter = nullptr );
void FillAllZones( wxWindow* aCaller, PROGRESS_REPORTER* aReporter = nullptr ); void FillAllZones( wxWindow* aCaller, PROGRESS_REPORTER* aReporter = nullptr );
int ZoneFill( const TOOL_EVENT& aEvent );
int ZoneFillAll( const TOOL_EVENT& aEvent ); int ZoneFillAll( const TOOL_EVENT& aEvent );
int ZoneFillDirty( const TOOL_EVENT& aEvent ); int ZoneFillDirty( const TOOL_EVENT& aEvent );
int ZoneUnfill( const TOOL_EVENT& aEvent );
int ZoneUnfillAll( const TOOL_EVENT& aEvent ); int ZoneUnfillAll( const TOOL_EVENT& aEvent );
bool IsBusy() { return m_fillInProgress; } bool IsBusy() { return m_fillInProgress; }