KiCad PCB EDA Suite
Loading...
Searching...
No Matches
dialog_board_reannotate.h
Go to the documentation of this file.
1/*
2 * This program source code file is part of KiCad, a free EDA CAD application.
3 *
4 * Copyright (C) 2020 Brian Piccioni [email protected]
5 * Copyright The KiCad Developers, see AUTHORS.txt for contributors.
6 * @author Brian Piccioni <[email protected]>
7 *
8 * This program is free software; you can redistribute it and/or
9 * modify it under the terms of the GNU General Public License
10 * as published by the Free Software Foundation; either version 2
11 * of the License, or (at your option) any later version.
12 *
13 * This program is distributed in the hope that it will be useful,
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 * GNU General Public License for more details.
17 *
18 * You should have received a copy of the GNU General Public License
19 * along with this program. If not, see <https://www.gnu.org/licenses/>.
20 */
21
22#pragma once
23
25#include <layer_ids.h>
27#include <pcb_base_frame.h>
28#include <pcb_edit_frame.h>
29#include <project.h>
30#include <frame_type.h>
31#include <tool/actions.h>
32#include <tool/tool_manager.h>
34
35#define SORTXFIRST 0b000 // Sort on X
36#define SORTYFIRST 0b100 // Sort on Y
37#define ASCENDINGFIRST 0b000 // Sort low to high
38#define DESCENDINGFIRST 0b010 // Sort high to low
39#define ASCENDINGSECOND 0b000 // Sort low to high
40#define DESCENDINGSECOND 0b001 // Sort high to low
41
42#define MINGRID 1000
43#define MAXERROR 10
44#define VALIDPREFIX "_-+=/\\" // Prefixs can be alpha or these symbols
45
53
55{
57 wxString NewRefDes; // The new reference designation (F_U21)
58 wxString OldRefDesString; // What the old refdes preamble + number was
59 bool Front; // True if on the front of the board
60 ACTION_CODE Action; // Used to skip (if #, etc)
61};
62
64{
66 bool Front; // True if on the front of the board
67 wxString RefDesString; // What its refdes is R1, C2
68 wxString RefDesPrefix; // ie R, C, etc
69 int x, y; // The coordinates
70 int roundedx, roundedy; // The coordinates after rounding.
71 ACTION_CODE Action; // Used to skip (if #, etc)
73};
74
76{
77 wxString RefDesPrefix;
78 unsigned int LastUsedRefDes;
79 std::set<unsigned int> UnavailableRefs;
80};
81
82
84{
85public:
88
89private:
90 std::vector<wxRadioButton*> m_sortButtons = {
99 };
100
101 std::vector<wxRadioButton*> m_scopeRadioButtons = {
106 };
107
118
119 bool TransferDataToWindow() override;
120
121 void OnApplyClick( wxCommandEvent& event ) override;
122 void OnCloseClick( wxCommandEvent& event ) override;
123 void FilterFrontPrefix( wxCommandEvent& event ) override;
124 void FilterBackPrefix( wxCommandEvent& event ) override;
125
127 void ShowReport( const wxString& aMessage, SEVERITY aSeverity );
128
130 void LogFootprints( const std::vector<REFDES_INFO>& aFootprints );
131
133 void LogChangePlan( void );
134
137 bool ReannotateBoard( void );
138
141 bool BuildFootprintList( std::vector<REFDES_INFO>& aBadRefDes );
142
145
147 void BuildChangeArray( std::vector<REFDES_INFO>& aFootprints, unsigned int aStartRefDes,
148 const wxString& aPrefix, bool aRemovePrefix,
149 std::vector<REFDES_INFO>& aBadRefDes );
150
152 REFDES_CHANGE* GetNewRefDes( FOOTPRINT* aFootprint );
153
155 int RoundToGrid( int aCoord, int aGrid );
156
159 wxString CoordTowxString( int aX, int aY );
160
162 void FilterPrefix( wxTextCtrl* aPrefix );
163
166 REFDES_PREFIX_INFO* GetOrBuildRefDesInfo( const wxString& aRefDesPrefix, int aStartRefDes = 1 );
167
168private:
171
172 std::vector<REFDES_CHANGE> m_changeArray;
173 std::vector<REFDES_INFO> m_frontFootprints;
174 std::vector<REFDES_INFO> m_backFootprints;
175 std::vector<REFDES_PREFIX_INFO> m_refDesPrefixInfos;
176 std::vector<wxString> m_excludeArray;
177};
DIALOG_BOARD_REANNOTATE_BASE(wxWindow *parent, wxWindowID id=wxID_ANY, const wxString &title=_("Geographical Reannotation"), const wxPoint &pos=wxDefaultPosition, const wxSize &size=wxSize(-1,-1), long style=wxDEFAULT_DIALOG_STYLE|wxRESIZE_BORDER)
std::vector< REFDES_CHANGE > m_changeArray
std::vector< wxString > m_excludeArray
bool BuildFootprintList(std::vector< REFDES_INFO > &aBadRefDes)
Build the footprint lists, sort it, filter for excludes, then build the change list.
std::vector< wxRadioButton * > m_scopeRadioButtons
void FilterBackPrefix(wxCommandEvent &event) override
std::vector< wxStaticBitmap * > Bitmaps
std::vector< REFDES_INFO > m_frontFootprints
wxString CoordTowxString(int aX, int aY)
Convert coordinates to wxString.
void FilterPrefix(wxTextCtrl *aPrefix)
Check to make sure the prefix (if there is one) is properly constructed.
void BuildChangeArray(std::vector< REFDES_INFO > &aFootprints, unsigned int aStartRefDes, const wxString &aPrefix, bool aRemovePrefix, std::vector< REFDES_INFO > &aBadRefDes)
Scan through the footprint arrays and create the from -> to array.
void LogFootprints(const std::vector< REFDES_INFO > &aFootprints)
Create a list of the footprints and their coordinates.
int RoundToGrid(int aCoord, int aGrid)
Round an int coordinate to a suitable grid.
REFDES_PREFIX_INFO * GetOrBuildRefDesInfo(const wxString &aRefDesPrefix, int aStartRefDes=1)
Get the structure representing the information currently held for aRefDesPrefix or create one if it d...
void BuildUnavailableRefsList()
Build list of unavailable references. E.g. unselected footprints or locked footprints.
~DIALOG_BOARD_REANNOTATE()=default
void LogChangePlan(void)
Create an audit trail of the changes.
void OnCloseClick(wxCommandEvent &event) override
REFDES_CHANGE * GetNewRefDes(FOOTPRINT *aFootprint)
bool ReannotateBoard(void)
Actually reannotate the board.
void ShowReport(const wxString &aMessage, SEVERITY aSeverity)
Break report into strings separated by and sent to the reporter.
std::vector< REFDES_INFO > m_backFootprints
std::vector< REFDES_PREFIX_INFO > m_refDesPrefixInfos
DIALOG_BOARD_REANNOTATE(PCB_EDIT_FRAME *aParentFrame)
void OnApplyClick(wxCommandEvent &event) override
std::vector< wxRadioButton * > m_sortButtons
void FilterFrontPrefix(wxCommandEvent &event) override
Definition kiid.h:44
A logical library item identifier and consists of various portions much like a URI.
Definition lib_id.h:45
The main frame for Pcbnew.
std::deque< FOOTPRINT * > FOOTPRINTS
SEVERITY
std::set< unsigned int > UnavailableRefs