KiCad PCB EDA Suite
am_primitive.h
Go to the documentation of this file.
1 
5 #ifndef AM_PRIMITIVE_H
6 #define AM_PRIMITIVE_H
7 
8 /*
9  * This program source code file is part of KiCad, a free EDA CAD application.
10  *
11  * Copyright (C) 1992-2010 Jean-Pierre Charras <jp.charras at wanadoo.fr>
12  * Copyright (C) 2010 SoftPLC Corporation, Dick Hollenbeck <dick@softplc.com>
13  * Copyright (C) 1992-2010 KiCad Developers, see AUTHORS.txt for contributors.
14  *
15  * This program is free software; you can redistribute it and/or
16  * modify it under the terms of the GNU General Public License
17  * as published by the Free Software Foundation; either version 2
18  * of the License, or (at your option) any later version.
19  *
20  * This program is distributed in the hope that it will be useful,
21  * but WITHOUT ANY WARRANTY; without even the implied warranty of
22  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
23  * GNU General Public License for more details.
24  *
25  * You should have received a copy of the GNU General Public License
26  * along with this program; if not, you may find one here:
27  * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
28  * or you may search the http://www.gnu.org website for the version 2 license,
29  * or you may write to the Free Software Foundation, Inc.,
30  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
31  */
32 
33 #include <vector>
34 #include <set>
35 
36 #include <am_param.h>
37 #include <eda_rect.h>
38 
39 class SHAPE_POLY_SET;
40 
41 /*
42  * An aperture macro defines a complex shape and is a list of aperture primitives.
43  * Each aperture primitive defines a simple shape (circle, rect, regular polygon...)
44  * Inside a given aperture primitive, a fixed list of parameters defines info
45  * about the shape: size, thickness, number of vertex ...
46  *
47  * Each parameter can be an immediate value or a defered value.
48  * When value is defered, it is defined when the aperture macro is instancied by
49  * an ADD macro command
50  * Note also a defered parameter can be defined in aperture macro,
51  * but outside aperture primitives. Example
52  * %AMRECTHERM*
53  * $4=$3/2* parameter $4 is half value of parameter $3
54  * 21,1,$1-$3,$2-$3,0-$1/2-$4,0-$2/2-$4,0*
55  * For the aperture primitive, parameters $1 to $3 will be defined in ADD command,
56  * and $4 is defined inside the macro
57  *
58  * Each basic shape can be a positive shape or a negative shape.
59  * a negative shape is "local" to the whole shape.
60  * It must be seen like a hole in the shape, and not like a standard negative object.
61  */
62 
71  AMP_UNKNOWN = -1, // A value for uninitialized AM_PRIMITIVE.
72  AMP_COMMENT = 0, // A primitive description is not really a primitive, this is a comment
73  AMP_CIRCLE = 1, // Circle. (diameter and position)
74  AMP_LINE2 = 2, // Line with rectangle ends. (Width, start and end pos + rotation)
75  AMP_LINE20 = 20, // Same as AMP_LINE2
76  AMP_LINE_CENTER = 21, // Rectangle. (height, width and center pos + rotation)
77  AMP_LINE_LOWER_LEFT = 22, // Rectangle. (height, width and left bottom corner pos + rotation)
78  AMP_EOF = 3, // End Of File marquer: not really a shape
79  AMP_OUTLINE = 4, // Free polyline (n corners + rotation)
80  AMP_POLYGON = 5, // Closed regular polygon(diameter, number of vertices (3 to 10), rotation)
81  AMP_MOIRE = 6, // A cross hair with n concentric circles + rotation
82  AMP_THERMAL = 7 // Thermal shape (pos, outer and inner diameter, cross hair thickness + rotation)
83 };
84 
85 
92 {
93 public:
96  // the primitive
97  bool m_GerbMetric; // units for this primitive:
98  // false = Inches, true = metric
99 public: AM_PRIMITIVE( bool aGerbMetric, AM_PRIMITIVE_ID aId = AMP_UNKNOWN )
100  {
101  primitive_id = aId;
102  m_GerbMetric = aGerbMetric;
103  }
104 
105 
107 
116  bool IsAMPrimitiveExposureOn( const GERBER_DRAW_ITEM* aParent ) const;
117 
118  /* Draw functions: */
119 
130  int GetShapeDim( const GERBER_DRAW_ITEM* aParent );
131 
139  void DrawBasicShape( const GERBER_DRAW_ITEM* aParent,
140  SHAPE_POLY_SET& aShapeBuffer,
141  wxPoint aShapePos );
142 private:
143 
151  void ConvertShapeToPolygon( const GERBER_DRAW_ITEM* aParent,
152  std::vector<wxPoint>& aBuffer );
153 };
154 
155 
156 typedef std::vector<AM_PRIMITIVE> AM_PRIMITIVES;
157 
163 {
164  wxString name;
166 
167  /* A defered parameter can be defined in aperture macro,
168  * but outside aperture primitives. Example
169  * %AMRECTHERM*
170  * $4=$3/2* parameter $4 is half value of parameter $3
171  * m_localparamStack handle a list of local defered parameters
172  */
174 
177 
189  double GetLocalParam( const D_CODE* aDcode, unsigned aParamId ) const;
190 
191 
199  SHAPE_POLY_SET* GetApertureMacroShape( const GERBER_DRAW_ITEM* aParent, wxPoint aShapePos );
200 
212  void DrawApertureMacroShape( GERBER_DRAW_ITEM* aParent, EDA_RECT* aClipBox, wxDC* aDC,
213  COLOR4D aColor, wxPoint aShapePos, bool aFilledShape );
214 
227  int GetShapeDim( GERBER_DRAW_ITEM* aParent );
228 
231  {
232  return m_boundingBox;
233  }
234 };
235 
236 
243 {
244  // a "less than" test on two APERTURE_MACROs (.name wxStrings)
245  bool operator()( const APERTURE_MACRO& am1, const APERTURE_MACRO& am2 ) const
246  {
247  return am1.name.Cmp( am2.name ) < 0; // case specific wxString compare
248  }
249 };
250 
251 
257 typedef std::set<APERTURE_MACRO, APERTURE_MACRO_less_than> APERTURE_MACRO_SET;
258 typedef std::pair<APERTURE_MACRO_SET::iterator, bool> APERTURE_MACRO_SET_PAIR;
259 
260 
261 #endif // ifndef AM_PRIMITIVE_H
bool m_GerbMetric
Definition: am_primitive.h:97
wxString name
The name of the aperture macro.
Definition: am_primitive.h:164
void DrawBasicShape(const GERBER_DRAW_ITEM *aParent, SHAPE_POLY_SET &aShapeBuffer, wxPoint aShapePos)
Function drawBasicShape Draw (in fact generate the actual polygonal shape of) the primitive shape of ...
void DrawApertureMacroShape(GERBER_DRAW_ITEM *aParent, EDA_RECT *aClipBox, wxDC *aDC, COLOR4D aColor, wxPoint aShapePos, bool aFilledShape)
Function DrawApertureMacroShape Draw the primitive shape for flashed items.
bool IsAMPrimitiveExposureOn(const GERBER_DRAW_ITEM *aParent) const
Function IsAMPrimitiveExposureOn.
EDA_RECT m_boundingBox
The bounding box of the item, calculated by GetApertureMacroShape.
Definition: am_primitive.h:176
std::vector< AM_PRIMITIVE > AM_PRIMITIVES
Definition: am_primitive.h:156
double GetLocalParam(const D_CODE *aDcode, unsigned aParamId) const
function GetLocalParam Usually, parameters are defined inside the aperture primitive using immediate ...
int GetShapeDim(const GERBER_DRAW_ITEM *aParent)
GetShapeDim Calculate a value that can be used to evaluate the size of text when displaying the D-Cod...
AM_PARAMS m_localparamStack
Definition: am_primitive.h:173
Struct APERTURE_MACRO_less_than is used by std:set<APERTURE_MACRO> instantiation which uses APERTURE_...
Definition: am_primitive.h:242
void ConvertShapeToPolygon(const GERBER_DRAW_ITEM *aParent, std::vector< wxPoint > &aBuffer)
Function ConvertShapeToPolygon convert a shape to an equivalent polygon.
SHAPE_POLY_SET * GetApertureMacroShape(const GERBER_DRAW_ITEM *aParent, wxPoint aShapePos)
Function GetApertureMacroShape Calculate the primitive shape for flashed items.
std::vector< AM_PARAM > AM_PARAMS
Definition: am_param.h:341
EDA_RECT GetBoundingBox() const
Returns the bounding box of the shape.
Definition: am_primitive.h:230
Represent a set of closed polygons.
std::set< APERTURE_MACRO, APERTURE_MACRO_less_than > APERTURE_MACRO_SET
Type APERTURE_MACRO_SET is a sorted collection of APERTURE_MACROS whose key is the name field in the ...
Definition: am_primitive.h:257
SHAPE_POLY_SET m_shape
The shape of the item, calculated by GetApertureMacroShape.
Definition: am_primitive.h:175
AM_PRIMITIVE(bool aGerbMetric, AM_PRIMITIVE_ID aId=AMP_UNKNOWN)
Definition: am_primitive.h:99
AM_PRIMITIVES primitives
A sequence of AM_PRIMITIVEs.
Definition: am_primitive.h:165
D_CODE holds a gerber DCODE (also called Aperture) definition.
Definition: dcode.h:82
Handle the component boundary box.
Definition: eda_rect.h:42
Struct AM_PRIMITIVE holds an aperture macro primitive as given in Table 3 of http://gerbv....
Definition: am_primitive.h:91
std::pair< APERTURE_MACRO_SET::iterator, bool > APERTURE_MACRO_SET_PAIR
Definition: am_primitive.h:258
AM_PRIMITIVE_ID
Enum AM_PRIMITIVE_ID is the set of all "aperture macro primitives" (primitive numbers).
Definition: am_primitive.h:70
Struct APERTURE_MACRO helps support the "aperture macro" defined within standard RS274X.
Definition: am_primitive.h:162
int GetShapeDim(GERBER_DRAW_ITEM *aParent)
Function GetShapeDim Calculate a value that can be used to evaluate the size of text when displaying ...
AM_PARAMS params
A sequence of parameters used by.
Definition: am_primitive.h:95
bool operator()(const APERTURE_MACRO &am1, const APERTURE_MACRO &am2) const
Definition: am_primitive.h:245
AM_PRIMITIVE_ID primitive_id
The primitive type.
Definition: am_primitive.h:94
A color representation with 4 components: red, green, blue, alpha.
Definition: color4d.h:98