KiCad PCB EDA Suite
dcode.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) 1992-2010 Jean-Pierre Charras <jean-pierre.charras@gipsa-lab.inpg.fr>
5  * Copyright (C) 2010 SoftPLC Corporation, Dick Hollenbeck <dick@softplc.com>
6  * Copyright (C) 1992-2010 KiCad Developers, see change_log.txt for contributors.
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 
30 #ifndef _DCODE_H_
31 #define _DCODE_H_
32 
33 #include <vector>
34 
35 #include <base_struct.h>
36 #include <gal/color4d.h>
37 
38 using KIGFX::COLOR4D;
39 
40 class wxDC;
41 class GERBER_DRAW_ITEM;
42 
43 
49 enum APERTURE_T {
50  APT_CIRCLE = 'C', // Flashed shape: Circle with or without hole
51  APT_RECT = 'R', // Flashed shape: Rectangle with or without hole
52  APT_OVAL = '0', // Flashed shape: Oval with or without hole
53  APT_POLYGON = 'P', // Flashed shape: Regular polygon (3 to 12 edges)
54  // with or without hole. Can be rotated
55  APT_MACRO = 'M' // Complex shape given by a macro definition (see AM_PRIMITIVE_ID)
56 };
57 
58 // In aperture definition, round, oval and rectangular flashed shapes
59 // can have a hole (round or rectangular)
60 // this option is stored in .m_DrillShape D_CODE member
65 };
66 
67 /* define min and max values for D Codes values.
68  * note: values >= 0 and > FIRST_DCODE can be used for special purposes
69  */
70 #define FIRST_DCODE 10
71 #define LAST_DCODE 999
72 #define TOOLS_MAX_COUNT (LAST_DCODE + 1)
73 
74 struct APERTURE_MACRO;
75 
76 
81 class D_CODE
82 {
83 private:
85  // GERBER.m_aperture_macros element
90  std::vector<double> m_am_params;
91 
92  std::vector <wxPoint> m_PolyCorners; /* Polygon used to draw APT_POLYGON shape and some other
93  * complex shapes which are converted to polygon
94  * (shapes with hole )
95  */
96 
97 public:
98  wxSize m_Size;
101  wxSize m_Drill;
103  double m_Rotation;
105  bool m_InUse;
107  bool m_Defined;
109  wxString m_AperFunction;
110 
112 
113 public:
114  D_CODE( int num_dcode );
115  ~D_CODE();
116  void Clear_D_CODE_Data();
117 
123  void AppendParam( double aValue )
124  {
125  m_am_params.push_back( aValue );
126  }
127 
132  unsigned GetParamCount() const
133  {
134  return m_am_params.size();
135  }
136 
142  double GetParam( unsigned aIdx ) const
143  {
144  wxASSERT( aIdx <= m_am_params.size() );
145  if( aIdx <= m_am_params.size() )
146  return m_am_params[aIdx - 1];
147  else
148  return 0;
149  }
150 
151 
152  void SetMacro( APERTURE_MACRO* aMacro )
153  {
154  m_Macro = aMacro;
155  }
156 
157 
158  APERTURE_MACRO* GetMacro() const { return m_Macro; }
159 
165  static const wxChar* ShowApertureType( APERTURE_T aType );
166 
178  void DrawFlashedShape( GERBER_DRAW_ITEM* aParent, EDA_RECT* aClipBox,
179  wxDC* aDC, COLOR4D aColor,
180  wxPoint aShapePos, bool aFilledShape );
181 
195  void DrawFlashedPolygon( GERBER_DRAW_ITEM* aParent,
196  EDA_RECT* aClipBox, wxDC* aDC, COLOR4D aColor,
197  bool aFilled, const wxPoint& aPosition );
198 
206  void ConvertShapeToPolygon();
207 
219  int GetShapeDim( GERBER_DRAW_ITEM* aParent );
220 };
221 
222 
223 #endif // ifndef _DCODE_H_
double GetParam(unsigned aIdx) const
GetParam() Returns a parameter stored in parameter list.
Definition: dcode.h:142
wxSize m_Size
Horizontal and vertical dimensions.
Definition: dcode.h:98
Definition: dcode.h:52
bool m_InUse
false if the aperure (previously defined) is not used to draw something
Definition: dcode.h:106
APERTURE_T m_Shape
shape ( Line, rectangle, circle , oval .. )
Definition: dcode.h:99
double m_Rotation
shape rotation in degrees
Definition: dcode.h:103
APERTURE_MACRO * m_Macro
no ownership, points to
Definition: dcode.h:84
wxSize m_Drill
dimension of the hole (if any) (draill file)
Definition: dcode.h:101
Definition: dcode.h:51
APERTURE_DEF_HOLETYPE
Definition: dcode.h:61
bool m_Defined
false if the aperture is not defined in the header
Definition: dcode.h:108
D_CODE(int num_dcode)
Definition: dcode.cpp:66
void AppendParam(double aValue)
AppendParam() Add a parameter to the D_CODE parameter list.
Definition: dcode.h:123
std::vector< wxPoint > m_PolyCorners
Definition: dcode.h:92
APERTURE_T
Enum APERTURE_T is the set of all gerber aperture types allowed, according to page 16 of http://gerbv...
Definition: dcode.h:49
int m_Num_Dcode
D code value ( >= 10 )
Definition: dcode.h:100
static const wxChar * ShowApertureType(APERTURE_T aType)
Function ShowApertureType returns a character string telling what type of aperture type aType is...
Definition: dcode.cpp:94
unsigned GetParamCount() const
GetParamCount() Returns the number of parameters stored in parameter list.
Definition: dcode.h:132
void DrawFlashedPolygon(GERBER_DRAW_ITEM *aParent, EDA_RECT *aClipBox, wxDC *aDC, COLOR4D aColor, bool aFilled, const wxPoint &aPosition)
Function DrawFlashedPolygon a helper function used to draw the polygon stored ion m_PolyCorners Draw ...
Definition: dcode.cpp:269
wxString m_AperFunction
the aperture attribute (created by a TA.AperFunction command) attached to the D_CODE ...
Definition: dcode.h:109
APERTURE_DEF_HOLETYPE m_DrillShape
shape of the hole (0 = no hole, round = 1, rect = 2) */
Definition: dcode.h:102
Class D_CODE holds a gerber DCODE (also called Aperture) definition.
Definition: dcode.h:81
std::vector< double > m_am_params
parameters used only when this D_CODE holds a reference to an aperture macro, and these parameters wo...
Definition: dcode.h:90
void DrawFlashedShape(GERBER_DRAW_ITEM *aParent, EDA_RECT *aClipBox, wxDC *aDC, COLOR4D aColor, wxPoint aShapePos, bool aFilledShape)
Function DrawFlashedShape Draw the dcode shape for flashed items.
Definition: dcode.cpp:153
Class EDA_RECT handles the component boundary box.
void SetMacro(APERTURE_MACRO *aMacro)
Definition: dcode.h:152
int m_EdgesCount
in aperture definition Polygon only: number of edges for the polygon
Definition: dcode.h:104
APERTURE_MACRO * GetMacro() const
Definition: dcode.h:158
void ConvertShapeToPolygon()
Function ConvertShapeToPolygon convert a shape to an equivalent polygon.
Definition: dcode.cpp:300
Struct APERTURE_MACRO helps support the "aperture macro" defined within standard RS274X.
Basic classes for most KiCad items.
int GetShapeDim(GERBER_DRAW_ITEM *aParent)
Function GetShapeDim calculates a value that can be used to evaluate the size of text when displaying...
Definition: dcode.cpp:122
~D_CODE()
Definition: dcode.cpp:73
void Clear_D_CODE_Data()
Definition: dcode.cpp:78
Class COLOR4D is the color representation with 4 components: red, green, blue, alpha.
Definition: color4d.h:39