KiCad PCB EDA Suite
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 brian@documenteddesigns.com
5  * Copyright (C) 1992-2021 KiCad Developers, see AUTHORS.txt for contributors.
6  * @author Brian Piccioni <brian@documenteddesigns.com>
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, you may find one here:
20  * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
21  * or you may search the http://www.gnu.org website for the version 2 license,
22  * or you may write to the Free Software Foundation, Inc.,
23  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
24  */
25 
26 #ifndef DIALOG_BOARD_REANNOTATE_H_
27 #define DIALOG_BOARD_REANNOTATE_H_
28 
29 #include <board.h>
30 #include <footprint.h>
34 #include <pcb_base_frame.h>
35 #include <pcb_edit_frame.h>
36 #include <project.h>
37 #include <wx_html_report_panel.h>
38 
39 #include <frame_type.h>
40 #include <tool/actions.h>
41 #include <tool/tool_manager.h>
43 
44 #define SORTXFIRST 0b000 // Sort on X
45 #define SORTYFIRST 0b100 // Sort on Y
46 #define ASCENDINGFIRST 0b000 // Sort low to high
47 #define DESCENDINGFIRST 0b010 // Sort high to low
48 #define ASCENDINGSECOND 0b000 // Sort low to high
49 #define DESCENDINGSECOND 0b001 // Sort high to low
50 
51 #define MINGRID 1000
52 #define MAXERROR 10
53 #define VALIDPREFIX "_-+=/\\" // Prefixs can be alpha or these symbols
54 
56 {
61 };
62 
64 {
69 };
70 
72 {
74  wxString NewRefDes; // The new reference designation (F_U21)
75  wxString OldRefDesString; // What the old refdes preamble + number was
76  bool Front; // True if on the front of the board
77  ActionCode Action; // Used to skip (if #, etc)
78 };
79 
80 struct RefDesInfo
81 {
83  bool Front; // True if on the front of the board
84  wxString RefDesString; // What its refdes is R1, C2
85  wxString RefDesType; // ie R, C, etc
86  int x, y; // The coordinates
87  int roundedx, roundedy; // The coordinates after rounding.
88  ActionCode Action; // Used to skip (if #, etc)
90 };
91 
93 {
94  wxString RefDesType;
95  unsigned int RefDesCount;
96 };
97 
98 
100 {
101 public:
102  DIALOG_BOARD_REANNOTATE( PCB_EDIT_FRAME* aParentFrame );
104 
105 private:
106  std::vector<wxRadioButton*> m_sortButtons = {
107  m_Down_Right,
108  m_Right_Down,
109  m_Down_Left,
110  m_Left_Down,
111  m_Up_Right,
112  m_Right_Up,
113  m_Up_Left,
114  m_Left_Up
115  };
116 
117  std::vector<wxRadioButton*> AnnotateWhat = {
122  };
123 
124  std::vector<wxStaticBitmap*> Bitmaps = {
133  };
134 
135  void GetParameters( void );
136 
138  void InitValues( void );
139 
140  void OnApplyClick( wxCommandEvent& event ) override;
141  void OnCloseClick( wxCommandEvent& event ) override;
142  void FilterFrontPrefix( wxCommandEvent& event ) override;
143  void FilterBackPrefix( wxCommandEvent& event ) override;
144 
146  void ShowReport( wxString aMessage, SEVERITY aSeverity );
147 
149  void LogFootprints( const wxString& aMessage, const std::vector<RefDesInfo>& aFootprints );
150 
152  void LogChangePlan( void );
153 
156  bool ReannotateBoard( void );
157 
160  bool BuildFootprintList( std::vector<RefDesInfo>& aBadRefDes );
161 
163  void BuildChangeArray( std::vector<RefDesInfo>& aFootprints, unsigned int aStartRefDes,
164  wxString aPrefix, bool aRemovePrefix,
165  std::vector<RefDesInfo>& aBadRefDes );
166 
168  RefDesChange* GetNewRefDes( FOOTPRINT* aFootprint );
169 
171  int RoundToGrid( int aCoord, int aGrid );
172 
175  wxString CoordTowxString( int aX, int aY );
176 
178  void MakeSampleText( wxString& aMessage );
179 
181  void FilterPrefix( wxTextCtrl* aPrefix );
182 
184  FOOTPRINTS m_footprints;
186 
187  std::vector<RefDesChange> m_changeArray;
188  std::vector<RefDesInfo> m_frontFootprints;
189  std::vector<RefDesInfo> m_backFootprints;
190  std::vector<RefDesTypeStr> m_refDesTypes;
191  std::vector<wxString> m_excludeArray;
192 
197 
198  double m_sortGridx;
199  double m_sortGridy;
200 
203  wxString m_validPrefixes;
204 
206 
208 };
209 
210 #endif /* DIALOG_BOARD_REANNOTATECLASSES_H_ */
bool ReannotateBoard(void)
Actually reannotate the board.
std::vector< wxRadioButton * > m_sortButtons
Class DIALOG_BOARD_REANNOTATE_BASE.
void ShowReport(wxString aMessage, SEVERITY aSeverity)
Break report into strings separated by and sent to the reporter.
void FilterPrefix(wxTextCtrl *aPrefix)
Check to make sure the prefix (if there is one) is properly constructed.
SEVERITY
Definition: ui_common.h:83
void FilterBackPrefix(wxCommandEvent &event) override
void LogFootprints(const wxString &aMessage, const std::vector< RefDesInfo > &aFootprints)
Create a list of the footprints and their coordinates.
bool BuildFootprintList(std::vector< RefDesInfo > &aBadRefDes)
Build the footprint lists, sort it, filter for excludes, then build the change list.
DIALOG_BOARD_REANNOTATE(PCB_EDIT_FRAME *aParentFrame)
A logical library item identifier and consists of various portions much like a URI.
Definition: lib_id.h:51
void BuildChangeArray(std::vector< RefDesInfo > &aFootprints, unsigned int aStartRefDes, wxString aPrefix, bool aRemovePrefix, std::vector< RefDesInfo > &aBadRefDes)
Scan through the footprint arrays and create the from -> to array.
Classes used in Pcbnew, CvPcb and GerbView.
std::vector< wxString > m_excludeArray
RefDesChange * GetNewRefDes(FOOTPRINT *aFootprint)
std::vector< RefDesChange > m_changeArray
Definition: kiid.h:44
void OnApplyClick(wxCommandEvent &event) override
std::vector< RefDesInfo > m_backFootprints
APP_SETTINGS_BASE is a settings class that should be derived for each standalone KiCad application.
Definition: app_settings.h:99
std::vector< RefDesInfo > m_frontFootprints
void InitValues(void)
Copy saved app settings to the dialog.
int RoundToGrid(int aCoord, int aGrid)
Round an int coordinate to a suitable grid.
std::vector< RefDesTypeStr > m_refDesTypes
void OnCloseClick(wxCommandEvent &event) override
void FilterFrontPrefix(wxCommandEvent &event) override
Board layer functions and definitions.
wxString CoordTowxString(int aX, int aY)
Convert coordinates to wxString.
The main frame for Pcbnew.
std::vector< wxRadioButton * > AnnotateWhat
void LogChangePlan(void)
Create an audit trail of the changes.
std::vector< wxStaticBitmap * > Bitmaps
unsigned int RefDesCount
void MakeSampleText(wxString &aMessage)
Make the text to summarize what is about to happen.