KiCad PCB EDA Suite
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Modules Pages Concepts
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 The KiCad Developers, see AUTHORS.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 <gal/color4d.h>
37
38using KIGFX::COLOR4D;
39
40class wxDC;
42
43
49 APT_CIRCLE = 'C', // Flashed shape: Circle with or without hole
50 APT_RECT = 'R', // Flashed shape: Rectangle with or without hole
51 APT_OVAL = '0', // Flashed shape: Oval with or without hole
52 APT_POLYGON = 'P', // Flashed shape: Regular polygon (3 to 12 edges)
53 // with or without hole. Can be rotated
54 APT_MACRO = 'M' // Complex shape given by a macro definition (see AM_PRIMITIVE_ID)
55};
56
57// In aperture definition, round, oval and rectangular flashed shapes
58// can have a hole (round or rectangular)
59// this option is stored in .m_DrillShape D_CODE member
64};
65
66/* define min and max values for D Codes values.
67 * note: values >= 0 and < FIRST_DCODE can be used for special purposes (plot commands)
68 * Revision I1 permits apertures up to 2^31-1.
69 */
70#define FIRST_DCODE 10
71#define LAST_DCODE 0x7FFFFFFF
72
73class APERTURE_MACRO;
74
75
79class D_CODE
80{
81public:
82 D_CODE( int num_dcode );
83 ~D_CODE();
84
90 static bool IsValidDcodeValue( int aDcodeValue )
91 {
92 return aDcodeValue >= FIRST_DCODE;
93 }
94
95 void Clear_D_CODE_Data();
96
102 void AppendParam( double aValue )
103 {
104 m_am_params.push_back( aValue );
105 }
106
110 unsigned GetParamCount() const
111 {
112 return m_am_params.size();
113 }
114
121 double GetParam( unsigned aIdx ) const
122 {
123 wxASSERT( aIdx <= m_am_params.size() );
124
125 if( aIdx <= m_am_params.size() )
126 return m_am_params[aIdx - 1];
127 else
128 return 0;
129 }
130
131 void SetMacro( APERTURE_MACRO* aMacro )
132 {
133 m_Macro = aMacro;
134 }
135
136 APERTURE_MACRO* GetMacro() const { return m_Macro; }
137
143 static const wxChar* ShowApertureType( APERTURE_T aType );
144
156 void DrawFlashedShape( const GERBER_DRAW_ITEM* aParent, wxDC* aDC,
157 const COLOR4D& aColor,
158 const VECTOR2I& aShapePos, bool aFilledShape );
159
173 void DrawFlashedPolygon( const GERBER_DRAW_ITEM* aParent, wxDC* aDC,
174 const COLOR4D& aColor,
175 bool aFilled, const VECTOR2I& aPosition );
176
185 void ConvertShapeToPolygon( const GERBER_DRAW_ITEM* aParent );
186
198 int GetShapeDim( GERBER_DRAW_ITEM* aParent );
199
200public:
211 bool m_InUse;
214 wxString m_AperFunction;
217 SHAPE_POLY_SET m_Polygon; /* Polygon used to draw APT_POLYGON shape and some other
218 * complex shapes which are converted to polygon
219 * (shapes with hole )
220 */
221
222private:
224
229 std::vector<double> m_am_params;
230};
231
232
233#endif // ifndef _DCODE_H_
Support the "aperture macro" defined within standard RS274X.
A gerber DCODE (also called Aperture) definition.
Definition: dcode.h:80
APERTURE_MACRO * GetMacro() const
Definition: dcode.h:136
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:229
void Clear_D_CODE_Data()
Definition: dcode.cpp:70
double GetParam(unsigned aIdx) const
Return a parameter stored in parameter list.
Definition: dcode.h:121
void DrawFlashedShape(const GERBER_DRAW_ITEM *aParent, wxDC *aDC, const COLOR4D &aColor, const VECTOR2I &aShapePos, bool aFilledShape)
Draw the dcode shape for flashed items.
Definition: dcode.cpp:153
wxString m_AperFunction
the aperture attribute (created by a TA.AperFunction command).
Definition: dcode.h:214
int m_Num_Dcode
D code value ( >= 10 )
Definition: dcode.h:204
int GetShapeDim(GERBER_DRAW_ITEM *aParent)
Calculate a value that can be used to evaluate the size of text when displaying the D-Code of an item...
Definition: dcode.cpp:115
~D_CODE()
Definition: dcode.cpp:65
static bool IsValidDcodeValue(int aDcodeValue)
Definition: dcode.h:90
void DrawFlashedPolygon(const GERBER_DRAW_ITEM *aParent, wxDC *aDC, const COLOR4D &aColor, bool aFilled, const VECTOR2I &aPosition)
A helper function used to draw the polygon stored in m_PolyCorners.
Definition: dcode.cpp:266
EDA_ANGLE m_Rotation
shape rotation
Definition: dcode.h:208
VECTOR2I m_Drill
dimension of the hole (if any) (drill file)
Definition: dcode.h:205
void SetMacro(APERTURE_MACRO *aMacro)
Definition: dcode.h:131
int m_EdgesCount
in aperture definition Polygon only: number of edges for the polygon
Definition: dcode.h:209
static const wxChar * ShowApertureType(APERTURE_T aType)
Return a character string telling what type of aperture type aType is.
Definition: dcode.cpp:86
VECTOR2I m_Size
Horizontal and vertical dimensions.
Definition: dcode.h:201
APERTURE_T m_ApertType
Aperture type ( Line, rectangle, circle, oval poly, macro )
Definition: dcode.h:202
bool m_Defined
false if the aperture is not defined in the header
Definition: dcode.h:213
APERTURE_DEF_HOLETYPE m_DrillShape
shape of the hole (0 = no hole, round = 1, rect = 2).
Definition: dcode.h:206
SHAPE_POLY_SET m_Polygon
Definition: dcode.h:217
bool m_InUse
false if the aperture (previously defined) is not used to draw something
Definition: dcode.h:211
void AppendParam(double aValue)
Add a parameter to the D_CODE parameter list.
Definition: dcode.h:102
unsigned GetParamCount() const
Return the number of parameters stored in parameter list.
Definition: dcode.h:110
APERTURE_MACRO * m_Macro
no ownership, points to GERBER.m_aperture_macros element.
Definition: dcode.h:223
void ConvertShapeToPolygon(const GERBER_DRAW_ITEM *aParent)
Convert a shape to an equivalent polygon.
Definition: dcode.cpp:297
A color representation with 4 components: red, green, blue, alpha.
Definition: color4d.h:104
Represent a set of closed polygons.
APERTURE_DEF_HOLETYPE
Definition: dcode.h:60
@ APT_DEF_NO_HOLE
Definition: dcode.h:61
@ APT_DEF_ROUND_HOLE
Definition: dcode.h:62
@ APT_DEF_RECT_HOLE
Definition: dcode.h:63
APERTURE_T
The set of all gerber aperture types allowed from ADD dcode command, like ADD11C,0....
Definition: dcode.h:48
@ APT_RECT
Definition: dcode.h:50
@ APT_OVAL
Definition: dcode.h:51
@ APT_POLYGON
Definition: dcode.h:52
@ APT_CIRCLE
Definition: dcode.h:49
@ APT_MACRO
Definition: dcode.h:54
#define FIRST_DCODE
Definition: dcode.h:70