36#include <wx/hyperlink.h>
70 std::vector<ZONE*> toFill;
73 toFill.push_back( zone );
76 std::unique_ptr<WX_PROGRESS_REPORTER>
reporter;
78 m_filler = std::make_unique<ZONE_FILLER>(
frame()->GetBoard(), &commit );
82 m_filler->SetProgressReporter( aReporter );
90 if(
m_filler->Fill( toFill,
true, aCaller ) )
127 std::unique_ptr<WX_PROGRESS_REPORTER>
reporter;
129 std::vector<ZONE*> toFill;
136 toFill.push_back( zone );
138 m_filler = std::make_unique<ZONE_FILLER>(
board(), &commit );
140 if( !aHeadless && !
board()->GetDesignSettings().m_DRCEngine->RulesValid() )
143 wxHyperlinkCtrl* button =
new wxHyperlinkCtrl( infobar, wxID_ANY,
_(
"Show DRC rules" ), wxEmptyString );
145 button->Bind( wxEVT_COMMAND_HYPERLINK,
146 std::function<
void( wxHyperlinkEvent& aEvent )>(
147 [
frame]( wxHyperlinkEvent& aEvent )
149 frame->ShowBoardSetupDialog(
_(
"Rules" ) );
155 infobar->
ShowMessageFor(
_(
"Zone fills may be inaccurate. DRC rules contain errors." ), 10000,
161 m_filler->SetProgressReporter( aReporter );
163 else if( !aHeadless )
165 reporter = std::make_unique<WX_PROGRESS_REPORTER>( aCaller,
_(
"Fill All Zones" ), 5,
PR_CAN_ABORT );
171 if(
m_filler->GetProgressReporter() )
172 m_filler->GetProgressReporter()->AdvancePhase();
176 frame->m_ZoneFillsDirty =
false;
190 frame->UpdateUserInterface();
206 std::vector<ZONE*> toFill;
211 toFill.push_back( zone );
228 std::unique_ptr<WX_PROGRESS_REPORTER>
reporter;
231 m_filler = std::make_unique<ZONE_FILLER>(
board(), &commit );
233 if( !
board()->GetDesignSettings().m_DRCEngine->RulesValid() )
236 wxHyperlinkCtrl* button =
new wxHyperlinkCtrl( infobar, wxID_ANY,
_(
"Show DRC rules" ), wxEmptyString );
238 button->Bind( wxEVT_COMMAND_HYPERLINK,
239 std::function<
void( wxHyperlinkEvent& aLocEvent )>(
240 [
frame]( wxHyperlinkEvent& aLocEvent )
242 frame->ShowBoardSetupDialog(
_(
"Rules" ) );
248 infobar->
ShowMessageFor(
_(
"Zone fills may be inaccurate. DRC rules contain errors." ), 10000,
252 for(
ZONE* zone : toFill )
254 zone->GetLayerSet().RunOnLayers(
257 pts += zone->GetFilledPolysList( layer )->FullPointCount();
262 wxString title = wxString::Format(
_(
"Refill %d Zones" ), (
int) toFill.size() );
282 wxHyperlinkCtrl* button =
new wxHyperlinkCtrl( infobar, wxID_ANY,
_(
"Open Preferences" ),
285 button->Bind( wxEVT_COMMAND_HYPERLINK, std::function<
void( wxHyperlinkEvent& )>(
286 [
this]( wxHyperlinkEvent& )
293 infobar->
ShowMessageFor(
_(
"Automatic refill of zones can be turned off in Preferences if it becomes "
295 10000, wxICON_INFORMATION, WX_INFOBAR::MESSAGE_TYPE::GENERIC );
299 frame->UpdateUserInterface();
320 std::vector<ZONE*> toFill;
324 toFill.push_back( passedZone );
335 if(
ZONE* zone =
dynamic_cast<ZONE*
>( item ) )
336 toFill.push_back( zone );
350 std::unique_ptr<WX_PROGRESS_REPORTER>
reporter;
352 m_filler = std::make_unique<ZONE_FILLER>(
board(), &commit );
390 std::vector<ZONE*> toUnfill;
394 if(
ZONE* zone =
dynamic_cast<ZONE*
>( item ) )
395 toUnfill.push_back( zone );
399 if( toUnfill.empty() )
407 for(
ZONE* zone : toUnfill )
444 return m_filler->GetProgressReporter();
468 return via->GetRemoveUnconnected();
470 else if(
PAD*
pad =
dynamic_cast<PAD*
>( aItem ) )
472 return pad->GetRemoveUnconnected();
#define SKIP_CONNECTIVITY
virtual void Push(const wxString &aMessage=wxEmptyString, int aCommitFlags=0) override
Execute the changes.
virtual void Revert() override
Revert the commit by restoring the modified items state.
bool BuildConnectivity(PROGRESS_REPORTER *aReporter=nullptr)
Build or rebuild the board connectivity database for the board, especially the list of connected item...
void IncrementTimeStamp()
COMMIT & Modify(EDA_ITEM *aItem, BASE_SCREEN *aScreen=nullptr, RECURSE_MODE aRecurse=RECURSE_MODE::NO_RECURSE)
Modify a given item in the model.
virtual void Refresh(bool aEraseBackground=true, const wxRect *aRect=nullptr) override
A base class for most all the KiCad significant classes used in schematics and boards.
static const TOOL_EVENT ConnectivityChangedEvent
Selected item had a property changed (except movement)
Used when the right click button is pressed, or when the select tool is in effect.
An abstract base class for deriving all objects that can be added to a VIEW.
void UpdateAllItemsConditionally(int aUpdateFlags, std::function< bool(VIEW_ITEM *)> aCondition)
Update items in the view according to the given flags and condition.
static TOOL_ACTION zoneFillAll
static TOOL_ACTION zoneFill
static TOOL_ACTION zoneUnfill
static TOOL_ACTION zoneUnfillAll
static TOOL_ACTION zoneFillDirty
virtual KIGFX::PCB_VIEW * GetView() const override
Return a pointer to the #VIEW instance used in the panel.
void RedrawRatsnest()
Return the bounding box of the view that should be used if model is not valid.
The main frame for Pcbnew.
A progress reporter interface for use in multi-threaded environments.
TEARDROP_MANAGER manage and build teardrop areas A teardrop area is a polygonal area (a copper ZONE) ...
void UpdateTeardrops(BOARD_COMMIT &aCommit, const std::vector< BOARD_ITEM * > *dirtyPadsAndVias, const std::set< PCB_TRACK * > *dirtyTracks, bool aForceFullUpdate=false)
Update teardrops on a list of items.
A modified version of the wxInfoBar class that allows us to:
void RemoveAllButtons()
Remove all the buttons that have been added by the user.
void ShowMessageFor(const wxString &aMessage, int aTime, int aFlags=wxICON_INFORMATION, MESSAGE_TYPE aType=WX_INFOBAR::MESSAGE_TYPE::GENERIC)
Show the infobar with the provided message and icon for a specific period of time.
void AddButton(wxButton *aButton)
Add an already created button to the infobar.
Handle a list of polygons defining a copper zone.
PCB_LAYER_ID
A quick note on layer IDs:
@ ALL
All except INITIAL_ADD.
Class to handle a set of BOARD_ITEMs.
int64_t GetRunningMicroSecs()
An alternate way to calculate an elapsed time (in microsecondes) to class PROF_COUNTER.
IbisParser parser & reporter
VECTOR2< int32_t > VECTOR2I