Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
K
kicad-source-mirror
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Commits
Open sidebar
Elphel
kicad-source-mirror
Commits
e0617666
Commit
e0617666
authored
Oct 01, 2010
by
jean-pierre charras
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
added forgotten files
parent
659299ee
Changes
2
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
567 additions
and
0 deletions
+567
-0
class_aperture_macro.cpp
gerbview/class_aperture_macro.cpp
+408
-0
class_aperture_macro.h
gerbview/class_aperture_macro.h
+159
-0
No files found.
gerbview/class_aperture_macro.cpp
0 → 100644
View file @
e0617666
This diff is collapsed.
Click to expand it.
gerbview/class_aperture_macro.h
0 → 100644
View file @
e0617666
/**************************/
/* class_aperture_macro.h */
/**************************/
#ifndef _APERTURE_MACRO_H_
#define _APERTURE_MACRO_H_
/*
* This program source code file is part of KICAD, a free EDA CAD application.
*
* Copyright (C) 1992-2010 Jean-Pierre Charras <jean-pierre.charras@gipsa-lab.inpg.fr>
* Copyright (C) 2010 SoftPLC Corporation, Dick Hollenbeck <dick@softplc.com>
* Copyright (C) 1992-2010 Kicad Developers, see change_log.txt for contributors.
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, you may find one here:
* http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
* or you may search the http://www.gnu.org website for the version 2 license,
* or you may write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
*/
#include <vector>
#include <set>
#include "base_struct.h"
/**
* Enum AM_PRIMITIVE_ID
* is the set of all "aperture macro primitives" (primitive numbers). See
* Table 3 in http://gerbv.sourceforge.net/docs/rs274xrevd_e.pdf
* aperture macro primitives are basic shapes which can be combined to create a complex shape
* This complex shape is flashed.
*/
enum
AM_PRIMITIVE_ID
{
AMP_UNKNOWN
=
0
,
// A value for uninitialized AM_PRIMITIVE.
AMP_CIRCLE
=
1
,
// Circle. (diameter and position)
AMP_LINE2
=
2
,
// Line with rectangle ends. (Width, start and end pos + rotation)
AMP_LINE20
=
20
,
// Same as AMP_LINE2
AMP_LINE_CENTER
=
21
,
// Rectangle. (height, width and center pos + rotation)
AMP_LINE_LOWER_LEFT
=
22
,
// Rectangle. (height, width and left bottom corner pos + rotation)
AMP_EOF
=
3
,
// End Of File marquer: not really a shape
AMP_OUTLINE
=
4
,
// Free polyline (n corners + rotation)
AMP_POLYGON
=
5
,
// Closed regular polygon(diameter, number of vertices (3 to 10), rotation)
AMP_MOIRE
=
6
,
// A cross hair with n concentric circles + rotation
AMP_THERMAL
=
7
,
// Thermal shape (pos, outer and inner diameter, cross hair thickness + rotation)
};
/**
* Struct AM_PRIMITIVE
* holds an aperture macro primitive as given in Table 3 of
* http://gerbv.sourceforge.net/docs/rs274xrevd_e.pdf
*/
class
AM_PRIMITIVE
{
public
:
AM_PRIMITIVE_ID
primitive_id
;
///< The primitive type
DCODE_PARAMS
params
;
///< A sequence of parameters used by
// the primitive
public
:
AM_PRIMITIVE
(
AM_PRIMITIVE_ID
aId
=
AMP_UNKNOWN
)
{
primitive_id
=
aId
;
}
~
AM_PRIMITIVE
()
{}
/**
* Function GetExposure
* returns the first parameter in integer form. Some but not all primitives
* use the first parameter as an exposure control.
*/
int
GetExposure
()
const
{
// No D_CODE* for GetValue()
wxASSERT
(
params
.
size
()
&&
params
[
0
].
IsImmediate
()
);
return
(
int
)
params
[
0
].
GetValue
(
NULL
);
}
/* Draw functions: */
/** function DrawBasicShape
* Draw the primitive shape for flashed items.
*/
void
DrawBasicShape
(
GERBER_DRAW_ITEM
*
aParent
,
EDA_Rect
*
aClipBox
,
wxDC
*
aDC
,
int
aColor
,
wxPoint
aShapePos
,
bool
aFilledShape
);
private
:
/** function ConvertShapeToPolygon
* convert a shape to an equivalent polygon.
* Arcs and circles are approximated by segments
* Useful when a shape is not a graphic primitive (shape with hole,
* rotated shape ... ) and cannot be easily drawn.
*/
void
ConvertShapeToPolygon
(
GERBER_DRAW_ITEM
*
aParent
,
std
::
vector
<
wxPoint
>&
aBuffer
,
bool
aUnitsMetric
);
};
typedef
std
::
vector
<
AM_PRIMITIVE
>
AM_PRIMITIVES
;
/**
* Struct APERTURE_MACRO
* helps support the "aperture macro" defined within standard RS274X.
*/
struct
APERTURE_MACRO
{
wxString
name
;
///< The name of the aperture macro
AM_PRIMITIVES
primitives
;
///< A sequence of AM_PRIMITIVEs
/** function DrawApertureMacroShape
* Draw the primitive shape for flashed items.
* When an item is flashed, this is the shape of the item
*/
void
DrawApertureMacroShape
(
GERBER_DRAW_ITEM
*
aParent
,
EDA_Rect
*
aClipBox
,
wxDC
*
aDC
,
int
aColor
,
wxPoint
aShapePos
,
bool
aFilledShape
);
};
/**
* Struct APERTURE_MACRO_less_than
* is used by std:set<APERTURE_MACRO> instantiation which uses
* APERTURE_MACRO.name as its key.
*/
struct
APERTURE_MACRO_less_than
{
// a "less than" test on two APERTURE_MACROs (.name wxStrings)
bool
operator
()(
const
APERTURE_MACRO
&
am1
,
const
APERTURE_MACRO
&
am2
)
const
{
return
am1
.
name
.
Cmp
(
am2
.
name
)
<
0
;
// case specific wxString compare
}
};
/**
* Type APERTURE_MACRO_SET
* is a sorted collection of APERTURE_MACROS whose key is the name field in
* the APERTURE_MACRO.
*/
typedef
std
::
set
<
APERTURE_MACRO
,
APERTURE_MACRO_less_than
>
APERTURE_MACRO_SET
;
typedef
std
::
pair
<
APERTURE_MACRO_SET
::
iterator
,
bool
>
APERTURE_MACRO_SET_PAIR
;
#endif // ifndef _APERTURE_MACRO_H_
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment