KiCad PCB EDA Suite
class_zone.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) 2017 Jean-Pierre Charras, jp.charras at wanadoo.fr
5  * Copyright (C) 1992-2017 KiCad Developers, see AUTHORS.txt for contributors.
6  *
7  * This program is free software; you can redistribute it and/or
8  * modify it under the terms of the GNU General Public License
9  * as published by the Free Software Foundation; either version 2
10  * of the License, or (at your option) any later version.
11  *
12  * This program is distributed in the hope that it will be useful,
13  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15  * GNU General Public License for more details.
16  *
17  * You should have received a copy of the GNU General Public License
18  * along with this program; if not, you may find one here:
19  * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
20  * or you may search the http://www.gnu.org website for the version 2 license,
21  * or you may write to the Free Software Foundation, Inc.,
22  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
23  */
24 
30 #ifndef CLASS_ZONE_H_
31 #define CLASS_ZONE_H_
32 
33 
34 #include <vector>
35 #include <gr_basic.h>
36 #include <class_board_item.h>
37 #include <board_connected_item.h>
40 #include <zone_settings.h>
41 
42 
43 class EDA_RECT;
44 class LINE_READER;
45 class EDA_DRAW_PANEL;
46 class PCB_EDIT_FRAME;
47 class BOARD;
48 class ZONE_CONTAINER;
50 
51 typedef std::vector<SEG> ZONE_SEGMENT_FILL;
52 
60 {
61 public:
62 
67 
68  ZONE_CONTAINER( BOARD* parent );
69 
70  ZONE_CONTAINER( const ZONE_CONTAINER& aZone );
71  ZONE_CONTAINER& operator=( const ZONE_CONTAINER &aOther );
72 
74 
75  static inline bool ClassOf( const EDA_ITEM* aItem )
76  {
77  return aItem && ( ( PCB_ZONE_AREA_T == aItem->Type() ) ||
78  ( PCB_SEGZONE_T == aItem->Type() ) );
79  }
80 
93  const wxPoint GetPosition() const override;
94  void SetPosition( const wxPoint& aPos ) override {}
95 
100  void SetPriority( unsigned aPriority ) { m_priority = aPriority; }
101 
106  unsigned GetPriority() const { return m_priority; }
107 
108  void GetMsgPanelInfo( EDA_UNITS_T aUnits, std::vector< MSG_PANEL_ITEM >& aList ) override;
109 
110  void SetLayerSet( LSET aLayerSet );
111 
112  virtual LSET GetLayerSet() const override;
113 
122  void Draw( EDA_DRAW_PANEL* panel,
123  wxDC* DC,
124  GR_DRAWMODE aDrawMode,
125  const wxPoint& offset = ZeroOffset ) override;
126 
135  void DrawFilledArea( EDA_DRAW_PANEL* panel,
136  wxDC* DC,
137  GR_DRAWMODE aDrawMode,
138  const wxPoint& offset = ZeroOffset );
139 
149  void DrawWhileCreateOutline( EDA_DRAW_PANEL* panel, wxDC* DC,
150  GR_DRAWMODE draw_mode = GR_OR );
151 
155  const EDA_RECT GetBoundingBox() const override;
156 
157  int GetClearance( BOARD_CONNECTED_ITEM* aItem = NULL ) const override;
158 
163  bool IsOnCopperLayer() const;
164 
169  bool CommonLayerExists( const LSET aLayerSet ) const;
170 
171  virtual void SetLayer( PCB_LAYER_ID aLayer ) override;
172 
173  virtual PCB_LAYER_ID GetLayer() const override;
174 
175  virtual bool IsOnLayer( PCB_LAYER_ID ) const override;
176 
177  virtual void ViewGetLayers( int aLayers[], int& aCount ) const override;
178 
179  void SetFillMode( ZONE_FILL_MODE aFillMode ) { m_FillMode = aFillMode; }
181 
182  void SetThermalReliefGap( int aThermalReliefGap ) { m_ThermalReliefGap = aThermalReliefGap; }
183  int GetThermalReliefGap( D_PAD* aPad = NULL ) const;
184 
185  void SetThermalReliefCopperBridge( int aThermalReliefCopperBridge )
186  {
187  m_ThermalReliefCopperBridge = aThermalReliefCopperBridge;
188  }
189  int GetThermalReliefCopperBridge( D_PAD* aPad = NULL ) const;
190 
191  void SetArcSegmentCount( int aArcSegCount ) { m_ArcToSegmentsCount = aArcSegCount; }
192  int GetArcSegmentCount() const { return m_ArcToSegmentsCount; }
193 
194  bool IsFilled() const { return m_IsFilled; }
195  void SetIsFilled( bool isFilled ) { m_IsFilled = isFilled; }
196 
197  int GetZoneClearance() const { return m_ZoneClearance; }
198  void SetZoneClearance( int aZoneClearance ) { m_ZoneClearance = aZoneClearance; }
199 
200  ZoneConnection GetPadConnection( D_PAD* aPad = NULL ) const;
201  void SetPadConnection( ZoneConnection aPadConnection ) { m_PadConnection = aPadConnection; }
202 
203  int GetMinThickness() const { return m_ZoneMinThickness; }
204  void SetMinThickness( int aMinThickness ) { m_ZoneMinThickness = aMinThickness; }
205 
206  int GetSelectedCorner() const
207  {
208  // Transform relative indices to global index
209  int globalIndex = -1;
210 
211  if( m_CornerSelection )
212  m_Poly->GetGlobalIndex( *m_CornerSelection, globalIndex );
213 
214  return globalIndex;
215  }
216 
217  void SetSelectedCorner( int aCorner )
218  {
219  SHAPE_POLY_SET::VERTEX_INDEX selectedCorner;
220 
221  // If the global index of the corner is correct, assign it to m_CornerSelection
222  if( m_Poly->GetRelativeIndices( aCorner, &selectedCorner ) )
223  {
224  if( m_CornerSelection == nullptr )
226 
227  *m_CornerSelection = selectedCorner;
228  }
229  else
230  throw( std::out_of_range( "aCorner-th vertex does not exist" ) );
231  }
232 
234  // Like HitTest but selects the current corner to be operated on
235  void SetSelectedCorner( const wxPoint& aPosition, int aAccuracy );
236 
237  int GetLocalFlags() const { return m_localFlgs; }
238  void SetLocalFlags( int aFlags ) { m_localFlgs = aFlags; }
239 
241  const ZONE_SEGMENT_FILL& FillSegments() const { return m_FillSegmList; }
242 
244  const SHAPE_POLY_SET* Outline() const { return const_cast< SHAPE_POLY_SET* >( m_Poly ); }
245 
246  void SetOutline( SHAPE_POLY_SET* aOutline ) { m_Poly = aOutline; }
247 
254  virtual bool HitTest( const wxPoint& aPosition ) const override;
255 
263  bool HitTestInsideZone( const wxPoint& aPosition ) const
264  {
265  return m_Poly->Contains( VECTOR2I( aPosition ), 0 );
266  }
267 
274  bool HitTestFilledArea( const wxPoint& aRefPos ) const;
275 
288  int aCircleToSegmentsCount,
289  double aCorrectionFactor ) const;
290 
306  int aMinClearanceValue,
307  bool aUseNetClearance ) const;
308 
324  int aClearanceValue,
325  int aCircleToSegmentsCount,
326  double aCorrectionFactor,
327  bool ignoreLineWidth = false ) const override;
328 
339  bool HitTestForCorner( const wxPoint& refPos, int aAccuracy,
340  SHAPE_POLY_SET::VERTEX_INDEX& aCornerHit ) const;
341 
350  bool HitTestForCorner( const wxPoint& refPos, int aAccuracy ) const;
351 
361  bool HitTestForEdge( const wxPoint& refPos, int aAccuracy,
362  SHAPE_POLY_SET::VERTEX_INDEX& aCornerHit ) const;
363 
371  bool HitTestForEdge( const wxPoint& refPos, int aAccuracy ) const;
372 
376  bool HitTest( const EDA_RECT& aRect, bool aContained = true, int aAccuracy = 0 ) const override;
377 
378 
385  bool UnFill();
386 
387  /* Geometric transformations: */
388 
394  void Move( const wxPoint& offset ) override;
395 
402  void MoveEdge( const wxPoint& offset, int aEdge );
403 
410  void Rotate( const wxPoint& centre, double angle ) override;
411 
418  virtual void Flip( const wxPoint& aCentre ) override;
419 
426  void Mirror( const wxPoint& mirror_ref );
427 
433  wxString GetClass() const override
434  {
435  return wxT( "ZONE_CONTAINER" );
436  }
437 
442  int GetNumCorners( void ) const
443  {
444  return m_Poly->TotalVertices();
445  }
446 
453  {
454  return m_Poly->Iterate();
455  }
456 
463  {
464  return m_Poly->IterateWithHoles();
465  }
466 
473  {
474  return m_Poly->CIterateWithHoles();
475  }
476 
477  void RemoveAllContours( void )
478  {
480  }
481 
482  const VECTOR2I& GetCornerPosition( int aCornerIndex ) const
483  {
485 
486  // Convert global to relative indices
487  if( !m_Poly->GetRelativeIndices( aCornerIndex, &index ) )
488  throw( std::out_of_range( "aCornerIndex-th vertex does not exist" ) );
489 
490  return m_Poly->CVertex( index );
491  }
492 
493  void SetCornerPosition( int aCornerIndex, wxPoint new_pos )
494  {
495  SHAPE_POLY_SET::VERTEX_INDEX relativeIndices;
496 
497  // Convert global to relative indices
498  if( m_Poly->GetRelativeIndices( aCornerIndex, &relativeIndices ) )
499  {
500  m_Poly->Vertex( relativeIndices ).x = new_pos.x;
501  m_Poly->Vertex( relativeIndices ).y = new_pos.y;
502  }
503  else
504  throw( std::out_of_range( "aCornerIndex-th vertex does not exist" ) );
505  }
506 
511  void NewHole()
512  {
513  m_Poly->NewHole();
514  }
515 
524  bool AppendCorner( wxPoint aPosition, int aHoleIdx, bool aAllowDuplication = false );
525 
527  {
528  return m_hatchStyle;
529  }
530 
531  void SetHatchStyle( HATCH_STYLE aStyle )
532  {
533  m_hatchStyle = aStyle;
534  }
535 
543  bool IsSame( const ZONE_CONTAINER &aZoneToCompare );
544 
550  {
552  }
553 
560  {
561  return m_FilledPolysList;
562  }
563 
567  void CacheTriangulation();
568 
573  void SetFilledPolysList( SHAPE_POLY_SET& aPolysList )
574  {
575  m_FilledPolysList = aPolysList;
576  }
577 
582  void SetRawPolysList( SHAPE_POLY_SET& aPolysList )
583  {
584  m_RawPolysList = aPolysList;
585  }
586 
587 
594  bool BuildSmoothedPoly( SHAPE_POLY_SET& aSmoothedPoly ) const;
595 
596  void SetCornerSmoothingType( int aType ) { m_cornerSmoothingType = aType; };
597 
599 
600  void SetCornerRadius( unsigned int aRadius );
601 
602  unsigned int GetCornerRadius() const { return m_cornerRadius; };
603 
609  void AddPolygon( std::vector< wxPoint >& aPolygon );
610 
611  void SetFillSegments( const ZONE_SEGMENT_FILL& aSegments )
612  {
613  m_FillSegmList = aSegments;
614  }
615 
617  {
618  return m_RawPolysList;
619  }
620 
621  wxString GetSelectMenuText( EDA_UNITS_T aUnits ) const override;
622 
623  BITMAP_DEF GetMenuImage() const override;
624 
625  EDA_ITEM* Clone() const override;
626 
630  bool GetIsKeepout() const { return m_isKeepout; }
632  bool GetDoNotAllowVias() const { return m_doNotAllowVias; }
633  bool GetDoNotAllowTracks() const { return m_doNotAllowTracks; }
634 
635  void SetIsKeepout( bool aEnable ) { m_isKeepout = aEnable; }
636  void SetDoNotAllowCopperPour( bool aEnable ) { m_doNotAllowCopperPour = aEnable; }
637  void SetDoNotAllowVias( bool aEnable ) { m_doNotAllowVias = aEnable; }
638  void SetDoNotAllowTracks( bool aEnable ) { m_doNotAllowTracks = aEnable; }
639 
648  int GetHatchPitch() const;
649 
654  static int GetDefaultHatchPitch();
655 
665  void SetHatch( int aHatchStyle, int aHatchPitch, bool aRebuildHatch );
666 
672  void SetHatchPitch( int aPitch );
673 
678  void UnHatch();
679 
685  void Hatch();
686 
687  const std::vector<SEG>& GetHatchLines() const { return m_HatchLines; }
688 
689  bool GetHV45() const { return m_hv45; }
690  void SetHV45( bool aConstrain ) { m_hv45 = aConstrain; }
691 
692 #if defined(DEBUG)
693  virtual void Show( int nestLevel, std::ostream& os ) const override { ShowDummy( os ); }
694 #endif
695 
696  virtual void SwapData( BOARD_ITEM* aImage ) override;
697 
698 private:
699 
702  unsigned int m_cornerRadius;
703 
705 
706  /* Priority: when a zone outline is inside and other zone, if its priority is higher
707  * the other zone priority, it will be created inside.
708  * if priorities are equal, a DRC error is set
709  */
710  unsigned m_priority;
711 
712  /* A zone outline can be a keepout zone.
713  * It will be never filled, and DRC should test for pads, tracks and vias
714  */
716 
717  /* For keepout zones only:
718  * what is not allowed inside the keepout ( pads, tracks and vias )
719  */
723 
727 
731 
734 
737 
740 
741 
744 
747 
750 
755 
756  /* set of filled polygons used to draw a zone as a filled area.
757  * from outlines (m_Poly) but unlike m_Poly these filled polygons have no hole
758  * (they are all in one piece) In very simple cases m_FilledPolysList is same
759  * as m_Poly. In less simple cases (when m_Poly has holes) m_FilledPolysList is
760  * a polygon equivalent to m_Poly, without holes but with extra outline segment
761  * connecting "holes" with external main outline. In complex cases an outline
762  * described by m_Poly can have many filled areas
763  */
766 
767  HATCH_STYLE m_hatchStyle; // hatch style, see enum above
768  int m_hatchPitch; // for DIAGONAL_EDGE, distance between 2 hatch lines
769  std::vector<SEG> m_HatchLines; // hatch lines
770  std::vector<int> m_insulatedIslands;
771 
772  bool m_hv45; // constrain edges to horizontal, vertical or 45ยบ
773 
797  typedef union {
798  wxPoint wx;
801 
802  // Sanity check: assure that the conversion VECTOR2I->wxPoint using the previous union is
803  // correct, making sure that the access for x and y attributes is still safe.
804  static_assert(offsetof(wxPoint,x) == offsetof(VECTOR2I,x),
805  "wxPoint::x and VECTOR2I::x have different offsets");
806 
807  static_assert(offsetof(wxPoint,y) == offsetof(VECTOR2I,y),
808  "wxPoint::y and VECTOR2I::y have different offsets");
809 
810 };
811 
812 
813 #endif // CLASS_ZONE_H_
void SetFilledPolysList(SHAPE_POLY_SET &aPolysList)
Function SetFilledPolysList sets the list of filled polygons.
Definition: class_zone.h:573
void SetDoNotAllowTracks(bool aEnable)
Definition: class_zone.h:638
int TotalVertices() const
Returns total number of vertices stored in the set.
void MoveEdge(const wxPoint &offset, int aEdge)
Function MoveEdge Move the outline Edge.
Definition: class_zone.cpp:908
int NewHole(int aOutline=-1)
Creates a new hole in a given outline
void SetCornerSmoothingType(int aType)
Definition: class_zone.h:596
bool Contains(const VECTOR2I &aP, int aSubpolyIndex=-1, bool aIgnoreHoles=false) const
Returns true if a given subpolygon contains the point aP.
void SetHatchPitch(int aPitch)
Function SetHatchPitch sets the hatch pitch parameter for the zone.
void Draw(EDA_DRAW_PANEL *panel, wxDC *DC, GR_DRAWMODE aDrawMode, const wxPoint &offset=ZeroOffset) override
Function Draw Draws the zone outline.
Definition: class_zone.cpp:276
Class ZONE_CONTAINER handles a list of polygons defining a copper zone.
Definition: class_zone.h:59
bool IsFilled() const
Definition: class_zone.h:194
virtual void SwapData(BOARD_ITEM *aImage) override
Swap data between aItem and aImage.
std::vector< SEG > ZONE_SEGMENT_FILL
Definition: class_zone.h:49
Class LINE_READER is an abstract class from which implementation specific LINE_READERs may be derived...
Definition: richio.h:81
int m_ZoneClearance
Clearance value in internal units.
Definition: class_zone.h:725
void DrawWhileCreateOutline(EDA_DRAW_PANEL *panel, wxDC *DC, GR_DRAWMODE draw_mode=GR_OR)
Function DrawWhileCreateOutline Draws the zone outline when it is created.
Definition: class_zone.cpp:545
PNG memory record (file in memory).
Definition: bitmap_types.h:43
bool CommonLayerExists(const LSET aLayerSet) const
Function CommonLayerExist Test if this zone shares a common layer with the given layer set...
Definition: class_zone.cpp:194
int GetThermalReliefCopperBridge(D_PAD *aPad=NULL) const
Definition: class_zone.cpp:637
EDA_ITEM * Clone() const override
Function Clone creates a duplicate of this item with linked list members set to NULL.
Definition: class_zone.cpp:150
Class BOARD_ITEM is a base class for any item which can be embedded within the BOARD container class...
bool m_doNotAllowTracks
Definition: class_zone.h:722
const EDA_RECT GetBoundingBox() const override
Function GetBoundingBox (virtual)
Definition: class_zone.cpp:518
const ZONE_SEGMENT_FILL & FillSegments() const
Definition: class_zone.h:241
void SetCornerRadius(unsigned int aRadius)
Definition: class_zone.cpp:646
Classes BOARD_ITEM and BOARD_CONNECTED_ITEM.
void TransformOutlinesShapeWithClearanceToPolygon(SHAPE_POLY_SET &aCornerBuffer, int aMinClearanceValue, bool aUseNetClearance) const
Function TransformOutlinesShapeWithClearanceToPolygon Convert the outlines shape to a polygon with no...
SHAPE_POLY_SET::VERTEX_INDEX * m_CornerSelection
The index of the corner being moved or nullptr if no corner is selected.
Definition: class_zone.h:746
int GetSelectedCorner() const
Definition: class_zone.h:206
const VECTOR2I & CVertex(int aIndex, int aOutline, int aHole) const
Returns the index-th vertex in a given hole outline within a given outline
wxString GetSelectMenuText(EDA_UNITS_T aUnits) const override
Function GetSelectMenuText returns the text to display to be used in the selection clarification cont...
virtual bool IsOnLayer(PCB_LAYER_ID) const override
Function IsOnLayer tests to see if this object is on the given layer.
Definition: class_zone.cpp:265
std::vector< int > m_insulatedIslands
Definition: class_zone.h:770
void DrawFilledArea(EDA_DRAW_PANEL *panel, wxDC *DC, GR_DRAWMODE aDrawMode, const wxPoint &offset=ZeroOffset)
Function DrawDrawFilledArea Draws the filled area for this zone (polygon list .m_FilledPolysList) ...
Definition: class_zone.cpp:406
bool HitTestForCorner(const wxPoint &refPos, int aAccuracy, SHAPE_POLY_SET::VERTEX_INDEX &aCornerHit) const
Function HitTestForCorner tests if the given wxPoint is near a corner.
Definition: class_zone.cpp:677
ZoneConnection
How pads are covered by copper in zone.
Definition: zones.h:50
class ZONE_CONTAINER, a zone area
Definition: typeinfo.h:102
virtual PCB_LAYER_ID GetLayer() const override
Function GetLayer returns the primary layer this item is on.
Definition: class_zone.cpp:175
ZONE_SEGMENT_FILL & FillSegments()
Definition: class_zone.h:240
SHAPE_POLY_SET * Outline()
Definition: class_zone.h:243
CONST_ITERATOR CIterateWithHoles(int aOutline) const
Struct VERTEX_INDEX.
bool HitTestFilledArea(const wxPoint &aRefPos) const
Function HitTestFilledArea tests if the given wxPoint is within the bounds of a filled area of this z...
Definition: class_zone.cpp:801
void SetArcSegmentCount(int aArcSegCount)
Definition: class_zone.h:191
void SetHatch(int aHatchStyle, int aHatchPitch, bool aRebuildHatch)
Function SetHatch sets all hatch parameters for the zone.
void SetFillSegments(const ZONE_SEGMENT_FILL &aSegments)
Definition: class_zone.h:611
ZONE_SEGMENT_FILL m_FillSegmList
Segments used to fill the zone (m_FillMode ==1 ), when fill zone by segment is used.
Definition: class_zone.h:754
ITERATOR Iterate(int aFirst, int aLast, bool aIterateHoles=false)
Function Iterate returns an object to iterate through the points of the polygons between aFirst and a...
int GetThermalReliefGap(D_PAD *aPad=NULL) const
Definition: class_zone.cpp:628
int m_localFlgs
Variable used in polygon calculations.
Definition: class_zone.h:749
VECTOR2< int > VECTOR2I
Definition: vector2d.h:587
static bool ClassOf(const EDA_ITEM *aItem)
Definition: class_zone.h:75
void SetIsFilled(bool isFilled)
Definition: class_zone.h:195
const wxPoint GetPosition() const override
Function GetPosition.
Definition: class_zone.cpp:169
Class BOARD_CONNECTED_ITEM is a base class derived from BOARD_ITEM for items that can be connected an...
void SetOutline(SHAPE_POLY_SET *aOutline)
Definition: class_zone.h:246
static int GetDefaultHatchPitch()
Function GetDefaultHatchPitchMils.
int GetClearance(BOARD_CONNECTED_ITEM *aItem=NULL) const override
Function GetClearance returns the clearance in internal units.
Definition: class_zone.cpp:774
static wxPoint ZeroOffset
A value of wxPoint(0,0) which can be passed to the Draw() functions.
struct SHAPE_POLY_SET::VERTEX_INDEX VERTEX_INDEX
Struct VERTEX_INDEX.
void SetDoNotAllowVias(bool aEnable)
Definition: class_zone.h:637
SHAPE_POLY_SET m_RawPolysList
Definition: class_zone.h:765
bool GetDoNotAllowVias() const
Definition: class_zone.h:632
VECTOR2I & Vertex(int aIndex, int aOutline, int aHole)
Returns the index-th vertex in a given hole outline within a given outline
void SetPriority(unsigned aPriority)
Function SetPriority.
Definition: class_zone.h:100
virtual LSET GetLayerSet() const override
Function GetLayerSet returns a "layer mask", which is a bitmap of all layers on which the TRACK segme...
Definition: class_zone.cpp:230
void SetLayerSet(LSET aLayerSet)
Definition: class_zone.cpp:210
int GetArcSegmentCount() const
Definition: class_zone.h:192
SHAPE_POLY_SET::ITERATOR Iterate()
Function Iterate returns an iterator to visit all points of the zone&#39;s main outline without holes...
Definition: class_zone.h:452
SHAPE_POLY_SET::CONST_ITERATOR CIterateWithHoles() const
Function CIterateWithHoles returns an iterator to visit all points of the zone&#39;s main outline with ho...
Definition: class_zone.h:472
int m_ArcToSegmentsCount
The number of segments to convert a circle to a polygon.
Definition: class_zone.h:730
PCB_LAYER_ID
A quick note on layer IDs:
Class LSET is a set of PCB_LAYER_IDs.
int m_ThermalReliefCopperBridge
Definition: class_zone.h:739
HATCH_STYLE GetHatchStyle() const
Definition: class_zone.h:526
unsigned int GetCornerRadius() const
Definition: class_zone.h:602
std::vector< SEG > m_HatchLines
Definition: class_zone.h:769
ZoneConnection m_PadConnection
Definition: class_zone.h:724
void TransformSolidAreasShapesToPolygonSet(SHAPE_POLY_SET &aCornerBuffer, int aCircleToSegmentsCount, double aCorrectionFactor) const
Function TransformSolidAreasShapesToPolygonSet Convert solid areas full shapes to polygon set (the fu...
ZONE_CONTAINER & operator=(const ZONE_CONTAINER &aOther)
Definition: class_zone.cpp:113
bool IsSame(const ZONE_CONTAINER &aZoneToCompare)
Function IsSame tests if 2 zones are equivalent: 2 zones are equivalent if they have same parameters ...
GR_DRAWMODE
Drawmode. Compositing mode plus a flag or two.
Definition: gr_basic.h:37
ITERATOR IterateWithHoles(int aOutline)
Function IterateWithHoles.
Class SHAPE_POLY_SET.
void NewHole()
Function NewHole creates a new hole on the zone; i.e., a new contour on the zone&#39;s outline...
Definition: class_zone.h:511
ZONE_FILL_MODE GetFillMode() const
Definition: class_zone.h:180
bool m_IsFilled
True when a zone was filled, false after deleting the filled areas.
Definition: class_zone.h:733
virtual void Flip(const wxPoint &aCentre) override
Function Flip Flip this object, i.e.
Definition: class_zone.cpp:951
SHAPE_POLY_SET * m_Poly
Outline of the zone.
Definition: class_zone.h:700
bool GetDoNotAllowCopperPour() const
Definition: class_zone.h:631
ZONE_CONTAINER(BOARD *parent)
Definition: class_zone.cpp:52
unsigned m_priority
Definition: class_zone.h:710
void Rotate(const wxPoint &centre, double angle) override
Function Rotate Move the outlines.
Definition: class_zone.cpp:921
bool m_doNotAllowVias
Definition: class_zone.h:721
virtual void SetLayer(PCB_LAYER_ID aLayer) override
Function SetLayer sets the layer this item is on.
Definition: class_zone.cpp:202
bool UnFill()
Function UnFill Removes the zone filling.
Definition: class_zone.cpp:156
int m_cornerSmoothingType
Definition: class_zone.h:701
int GetNumCorners(void) const
Access to m_Poly parameters.
Definition: class_zone.h:442
void CacheTriangulation()
(re)create a list of triangles that "fill" the solid areas.
bool HitTestInsideZone(const wxPoint &aPosition) const
Function HitTest tests if a point is inside the zone area, i.e.
Definition: class_zone.h:263
HATCH_STYLE
Zone hatch styles.
Definition: class_zone.h:66
void SetZoneClearance(int aZoneClearance)
Definition: class_zone.h:198
virtual void ViewGetLayers(int aLayers[], int &aCount) const override
Function ViewGetLayers() Returns the all the layers within the VIEW the object is painted on...
Definition: class_zone.cpp:244
bool GetRelativeIndices(int aGlobalIdx, VERTEX_INDEX *aRelativeIndices) const
Function GetRelativeIndices.
const std::vector< SEG > & GetHatchLines() const
Definition: class_zone.h:687
void AddPolygon(std::vector< wxPoint > &aPolygon)
add a polygon to the zone outline if the zone outline is empty, this is the main outline else it is a...
int GetCornerSmoothingType() const
Definition: class_zone.h:598
SHAPE_POLY_SET m_FilledPolysList
Definition: class_zone.h:764
void SetSelectedCorner(int aCorner)
Definition: class_zone.h:217
void SetRawPolysList(SHAPE_POLY_SET &aPolysList)
Function SetFilledPolysList sets the list of filled polygons.
Definition: class_zone.h:582
bool GetIsKeepout() const
Accessors to parameters used in Keepout zones:
Definition: class_zone.h:630
unsigned int m_cornerRadius
Definition: class_zone.h:702
bool GetHV45() const
Definition: class_zone.h:689
void SetThermalReliefCopperBridge(int aThermalReliefCopperBridge)
Definition: class_zone.h:185
void Move(const wxPoint &offset) override
Function Move Move the outlines.
Definition: class_zone.cpp:891
bool GetGlobalIndex(VERTEX_INDEX aRelativeIndices, int &aGlobalIdx)
Function GetGlobalIndex computes the global index of a vertex from the relative indices of polygon...
Definition: gr_basic.h:38
HATCH_STYLE m_hatchStyle
Definition: class_zone.h:767
void TransformShapeWithClearanceToPolygon(SHAPE_POLY_SET &aCornerBuffer, int aClearanceValue, int aCircleToSegmentsCount, double aCorrectionFactor, bool ignoreLineWidth=false) const override
Function TransformShapeWithClearanceToPolygon Convert the zone shape to a closed polygon Used in fill...
void SetDoNotAllowCopperPour(bool aEnable)
Definition: class_zone.h:636
bool BuildSmoothedPoly(SHAPE_POLY_SET &aSmoothedPoly) const
Function GetSmoothedPoly returns a pointer to the corner-smoothed version of m_Poly if it exists...
bool m_doNotAllowCopperPour
Definition: class_zone.h:720
wxString GetClass() const override
Function GetClass returns the class name.
Definition: class_zone.h:433
int m_ThermalReliefGap
Width of the copper bridge in thermal reliefs.
Definition: class_zone.h:736
int m_ZoneMinThickness
Minimum thickness value in filled areas.
Definition: class_zone.h:726
void SetFillMode(ZONE_FILL_MODE aFillMode)
Definition: class_zone.h:179
ZONE_FILL_MODE m_FillMode
How to fill areas: ZFM_POLYGONS => use filled polygons, ZFM_SEGMENTS => fill with segments...
Definition: class_zone.h:743
unsigned GetPriority() const
Function GetPriority.
Definition: class_zone.h:106
void SetCornerPosition(int aCornerIndex, wxPoint new_pos)
Definition: class_zone.h:493
Board layer functions and definitions.
void UnHatch()
Function UnHatch clears the zone&#39;s hatch.
ZoneConnection GetPadConnection(D_PAD *aPad=NULL) const
Definition: class_zone.cpp:991
Class BOARD holds information pertinent to a Pcbnew printed circuit board.
Definition: class_board.h:171
SHAPE_POLY_SET::ITERATOR IterateWithHoles()
Function IterateWithHoles returns an iterator to visit all points of the zone&#39;s main outline with hol...
Definition: class_zone.h:462
static DIRECTION_45::AngleType angle(const VECTOR2I &a, const VECTOR2I &b)
Class ITERATOR_TEMPLATE.
virtual bool HitTest(const wxPoint &aPosition) const override
Function HitTest tests if a point is near an outline edge or a corner of this zone.
Definition: class_zone.cpp:652
void RemoveAllContours()
Removes all outlines & holes (clears) the polygon set.
void SetHV45(bool aConstrain)
Definition: class_zone.h:690
Class EDA_RECT handles the component boundary box.
Definition: eda_rect.h:44
Class PCB_EDIT_FRAME is the main frame for Pcbnew.
void Hatch()
Function Hatch computes the hatch lines depending on the hatch parameters and stores it in the zone&#39;s...
int GetHatchPitch() const
Hatch related methods.
void SetHatchStyle(HATCH_STYLE aStyle)
Definition: class_zone.h:531
Class EDA_ITEM is a base class for most all the KiCad significant classes, used in schematics and boa...
Definition: base_struct.h:154
void SetLocalFlags(int aFlags)
Definition: class_zone.h:238
int GetMinThickness() const
Definition: class_zone.h:203
bool GetDoNotAllowTracks() const
Definition: class_zone.h:633
void SetPosition(const wxPoint &aPos) override
Definition: class_zone.h:94
bool AppendCorner(wxPoint aPosition, int aHoleIdx, bool aAllowDuplication=false)
Add a new corner to the zone outline (to the main outline or a hole)
bool HitTestForEdge(const wxPoint &refPos, int aAccuracy, SHAPE_POLY_SET::VERTEX_INDEX &aCornerHit) const
Function HitTestForEdge tests if the given wxPoint is near a segment defined by 2 corners...
Definition: class_zone.cpp:691
const SHAPE_POLY_SET * Outline() const
Definition: class_zone.h:244
int GetZoneClearance() const
Definition: class_zone.h:197
void Mirror(const wxPoint &mirror_ref)
Function Mirror Mirror the outlines , relative to a given horizontal axis the layer is not changed...
Definition: class_zone.cpp:967
Class EDA_MSG_ITEM is used EDA_MSG_PANEL as the item type for displaying messages.
Definition: msgpanel.h:53
void SetIsKeepout(bool aEnable)
Definition: class_zone.h:635
void SetPadConnection(ZoneConnection aPadConnection)
Definition: class_zone.h:201
Class BOARD_CONNECTED_ITEM.
BITMAP_DEF GetMenuImage() const override
Function GetMenuImage returns a pointer to an image to be used in menus.
class SEGZONE, a segment used to fill a zone area (segment on a
Definition: typeinfo.h:97
void SetMinThickness(int aMinThickness)
Definition: class_zone.h:204
SHAPE_POLY_SET & RawPolysList()
Definition: class_zone.h:616
bool IsOnCopperLayer() const
Function IsOnCopperLayer.
Definition: class_zone.cpp:181
const VECTOR2I & GetCornerPosition(int aCornerIndex) const
Definition: class_zone.h:482
ZONE_FILL_MODE
Definition: zone_settings.h:36
void SetThermalReliefGap(int aThermalReliefGap)
Definition: class_zone.h:182
EDA_UNITS_T
Definition: common.h:160
Union to handle conversion between references to wxPoint and to VECTOR2I.
Definition: class_zone.h:797
int GetLocalFlags() const
Definition: class_zone.h:237
void ClearFilledPolysList()
Function ClearFilledPolysList clears the list of filled polygons.
Definition: class_zone.h:549
KICAD_T Type() const
Function Type()
Definition: base_struct.h:201
const SHAPE_POLY_SET & GetFilledPolysList() const
Function GetFilledPolysList returns a reference to the list of filled polygons.
Definition: class_zone.h:559
void RemoveAllContours(void)
Definition: class_zone.h:477
void GetMsgPanelInfo(EDA_UNITS_T aUnits, std::vector< MSG_PANEL_ITEM > &aList) override
Function GetMsgPanelInfo populates aList of MSG_PANEL_ITEM objects with it&#39;s internal state for displ...
Definition: class_zone.cpp:807