KiCad PCB EDA Suite
tracks_cleaner.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) 2019 KiCad Developers, see AUTHORS.txt for contributors.
5  *
6  * This program is free software; you can redistribute it and/or
7  * modify it under the terms of the GNU General Public License
8  * as published by the Free Software Foundation; either version 2
9  * of the License, or (at your option) any later version.
10  *
11  * This program is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14  * GNU General Public License for more details.
15  *
16  * You should have received a copy of the GNU General Public License
17  * along with this program; if not, you may find one here:
18  * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
19  * or you may search the http://www.gnu.org website for the version 2 license,
20  * or you may write to the Free Software Foundation, Inc.,
21  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
22  */
23 
24 #ifndef KICAD_TRACKS_CLEANER_H
25 #define KICAD_TRACKS_CLEANER_H
26 
27 #include <pcb_track.h>
28 #include <board.h>
29 
30 class BOARD_COMMIT;
31 class CLEANUP_ITEM;
32 
33 
34 // Helper class used to clean tracks and vias
36 {
37 public:
38  TRACKS_CLEANER( BOARD* aPcb, BOARD_COMMIT& aCommit );
39 
50  void CleanupBoard( bool aDryRun, std::vector<std::shared_ptr<CLEANUP_ITEM> >* aItemsList, bool aCleanVias,
51  bool aRemoveMisConnected, bool aMergeSegments, bool aDeleteUnconnected,
52  bool aDeleteTracksinPad, bool aDeleteDanglingVias );
53 
54 private:
55  /*
56  * Removes track segments which are connected to more than one net (short circuits).
57  */
59 
66  bool deleteDanglingTracks( bool aTrack, bool aVia );
67 
68  void deleteTracksInPads();
69 
73  void cleanup( bool aDeleteDuplicateVias, bool aDeleteNullSegments,
74  bool aDeleteDuplicateSegments, bool aMergeSegments );
75 
84  bool mergeCollinearSegments( PCB_TRACK* aSeg1, PCB_TRACK* aSeg2 );
85 
92  bool testTrackEndpointIsNode( PCB_TRACK* aTrack, bool aTstStart );
93 
94  void removeItems( std::set<BOARD_ITEM*>& aItems );
95 
96 private:
99  bool m_dryRun;
100  std::vector<std::shared_ptr<CLEANUP_ITEM> >* m_itemsList;
101 };
102 
103 
104 #endif //KICAD_TRACKS_CLEANER_H
TRACKS_CLEANER(BOARD *aPcb, BOARD_COMMIT &aCommit)
void removeShortingTrackSegments()
BOARD_COMMIT & m_commit
void cleanup(bool aDeleteDuplicateVias, bool aDeleteNullSegments, bool aDeleteDuplicateSegments, bool aMergeSegments)
Geometry-based cleanup: duplicate items, null items, colinear items.
bool deleteDanglingTracks(bool aTrack, bool aVia)
Removes tracks or vias only connected on one end.
void removeItems(std::set< BOARD_ITEM * > &aItems)
void CleanupBoard(bool aDryRun, std::vector< std::shared_ptr< CLEANUP_ITEM > > *aItemsList, bool aCleanVias, bool aRemoveMisConnected, bool aMergeSegments, bool aDeleteUnconnected, bool aDeleteTracksinPad, bool aDeleteDanglingVias)
the cleanup function.
std::vector< std::shared_ptr< CLEANUP_ITEM > > * m_itemsList
Information pertinent to a Pcbnew printed circuit board.
Definition: board.h:190
bool mergeCollinearSegments(PCB_TRACK *aSeg1, PCB_TRACK *aSeg2)
helper function merge aTrackRef and aCandidate, when possible, i.e.
bool testTrackEndpointIsNode(PCB_TRACK *aTrack, bool aTstStart)