KiCad PCB EDA Suite
zone_filler.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) 2014-2017 CERN
5  * Copyright (C) 2014-2017 KiCad Developers, see AUTHORS.txt for contributors.
6  * @author Tomasz W┼éostowski <tomasz.wlostowski@cern.ch>
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 __ZONE_FILLER_H
27 #define __ZONE_FILLER_H
28 
29 #include <vector>
30 #include <class_zone.h>
31 
33 class BOARD;
34 class COMMIT;
35 class SHAPE_POLY_SET;
36 class SHAPE_LINE_CHAIN;
37 
38 
40 {
41 public:
42  ZONE_FILLER( BOARD* aBoard, COMMIT* aCommit = nullptr );
43  ~ZONE_FILLER();
44 
45  void InstallNewProgressReporter( wxWindow* aParent, const wxString& aTitle, int aNumPhases );
46  bool Fill( const std::vector<ZONE_CONTAINER*>& aZones, bool aCheck = false );
47 
48 private:
49 
50  void addKnockout( D_PAD* aPad, int aGap, SHAPE_POLY_SET& aHoles );
51 
52  void addKnockout( BOARD_ITEM* aItem, int aGap, bool aIgnoreLineWidth, SHAPE_POLY_SET& aHoles );
53 
54  void knockoutThermalReliefs( const ZONE_CONTAINER* aZone, PCB_LAYER_ID aLayer,
55  SHAPE_POLY_SET& aFill );
56 
57  void buildCopperItemClearances( const ZONE_CONTAINER* aZone, PCB_LAYER_ID aLayer,
58  SHAPE_POLY_SET& aHoles );
59 
71  void computeRawFilledArea( const ZONE_CONTAINER* aZone, PCB_LAYER_ID aLayer,
72  const SHAPE_POLY_SET& aSmoothedOutline,
73  std::set<VECTOR2I>* aPreserveCorners,
74  SHAPE_POLY_SET& aRawPolys, SHAPE_POLY_SET& aFinalPolys );
75 
80  void buildThermalSpokes( const ZONE_CONTAINER* aZone, PCB_LAYER_ID aLayer,
81  std::deque<SHAPE_LINE_CHAIN>& aSpokes );
82 
97  bool fillSingleZone( ZONE_CONTAINER* aZone, PCB_LAYER_ID aLayer, SHAPE_POLY_SET& aRawPolys,
98  SHAPE_POLY_SET& aFinalPolys );
99 
107  void addHatchFillTypeOnZone( const ZONE_CONTAINER* aZone, PCB_LAYER_ID aLayer,
108  SHAPE_POLY_SET& aRawPolys );
109 
111  SHAPE_POLY_SET m_boardOutline; // The board outlines, if exists
112  bool m_brdOutlinesValid; // true if m_boardOutline can be calculated
113  // false if not (not closed outlines for instance)
116  std::unique_ptr<WX_PROGRESS_REPORTER> m_uniqueReporter;
117 
118  // m_high_def can be used to define a high definition arc to polygon approximation
120 
121  // m_low_def can be used to define a low definition arc to polygon approximation
122  // Used when converting some pad shapes that can accept lower resolution, vias and track ends.
123  // Rect pads use m_low_def to reduce the number of segments. For these shapes a low def
124  // gives a good shape, because the arc is small (90 degrees) and a small part of the shape.
126 };
127 
128 #endif
ZONE_CONTAINER handles a list of polygons defining a copper zone.
Definition: class_zone.h:61
BOARD_ITEM is a base class for any item which can be embedded within the BOARD container class,...
BOARD * m_board
Definition: zone_filler.h:110
void addKnockout(D_PAD *aPad, int aGap, SHAPE_POLY_SET &aHoles)
Add a knockout for a pad.
WX_PROGRESS_REPORTER * m_progressReporter
Definition: zone_filler.h:115
void computeRawFilledArea(const ZONE_CONTAINER *aZone, PCB_LAYER_ID aLayer, const SHAPE_POLY_SET &aSmoothedOutline, std::set< VECTOR2I > *aPreserveCorners, SHAPE_POLY_SET &aRawPolys, SHAPE_POLY_SET &aFinalPolys)
Function computeRawFilledArea Add non copper areas polygons (pads and tracks with clearance) to a fil...
COMMIT.
Definition: commit.h:71
std::unique_ptr< WX_PROGRESS_REPORTER > m_uniqueReporter
Definition: zone_filler.h:116
void buildCopperItemClearances(const ZONE_CONTAINER *aZone, PCB_LAYER_ID aLayer, SHAPE_POLY_SET &aHoles)
Removes clearance from the shape for copper items which share the zone's layer but are not connected ...
void InstallNewProgressReporter(wxWindow *aParent, const wxString &aTitle, int aNumPhases)
Definition: zone_filler.cpp:93
PCB_LAYER_ID
A quick note on layer IDs:
COMMIT * m_commit
Definition: zone_filler.h:114
SHAPE_POLY_SET.
ZONE_FILLER(BOARD *aBoard, COMMIT *aCommit=nullptr)
Definition: zone_filler.cpp:77
void addHatchFillTypeOnZone(const ZONE_CONTAINER *aZone, PCB_LAYER_ID aLayer, SHAPE_POLY_SET &aRawPolys)
for zones having the ZONE_FILL_MODE::ZONE_FILL_MODE::HATCH_PATTERN, create a grid pattern in filled a...
bool fillSingleZone(ZONE_CONTAINER *aZone, PCB_LAYER_ID aLayer, SHAPE_POLY_SET &aRawPolys, SHAPE_POLY_SET &aFinalPolys)
Build the filled solid areas polygons from zone outlines (stored in m_Poly) The solid areas can be mo...
bool Fill(const std::vector< ZONE_CONTAINER * > &aZones, bool aCheck=false)
void buildThermalSpokes(const ZONE_CONTAINER *aZone, PCB_LAYER_ID aLayer, std::deque< SHAPE_LINE_CHAIN > &aSpokes)
Function buildThermalSpokes Constructs a list of all thermal spokes for the given zone.
void knockoutThermalReliefs(const ZONE_CONTAINER *aZone, PCB_LAYER_ID aLayer, SHAPE_POLY_SET &aFill)
Removes thermal reliefs from the shape for any pads connected to the zone.
BOARD holds information pertinent to a Pcbnew printed circuit board.
Definition: class_board.h:180
SHAPE_LINE_CHAIN.
SHAPE_POLY_SET m_boardOutline
Definition: zone_filler.h:111
bool m_brdOutlinesValid
Definition: zone_filler.h:112