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
339dd0da
Commit
339dd0da
authored
Mar 06, 2014
by
Wayne Stambaugh
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Coding policy fixes.
parent
a1b065c1
Changes
3
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
163 additions
and
182 deletions
+163
-182
gen_drill_report_files.cpp
pcbnew/exporters/gen_drill_report_files.cpp
+56
-110
gendrill_Excellon_writer.cpp
pcbnew/exporters/gendrill_Excellon_writer.cpp
+35
-54
gendrill_Excellon_writer.h
pcbnew/exporters/gendrill_Excellon_writer.h
+72
-18
No files found.
pcbnew/exporters/gen_drill_report_files.cpp
View file @
339dd0da
...
...
@@ -55,12 +55,6 @@ inline double diameter_in_mm( double ius )
}
/* Creates a hole map of the board in HPGL, POSTSCRIPT or other supported formats
* Each hole size has a the drill mark symbol (circle, cross X, cross + ...) up to
* PLOTTER::MARKER_COUNT different values.
* If more than PLOTTER::MARKER_COUNT different values,
* these other vaules share the same mark
*/
bool
EXCELLON_WRITER
::
GenDrillMapFile
(
const
wxString
&
aFullFileName
,
const
PAGE_INFO
&
aSheet
,
PlotFormat
aFormat
)
...
...
@@ -87,15 +81,15 @@ bool EXCELLON_WRITER::GenDrillMapFile( const wxString& aFullFileName,
break
;
case
PLOT_FORMAT_HPGL
:
// Scale for HPGL format.
{
HPGL_PLOTTER
*
hpgl_plotter
=
new
HPGL_PLOTTER
;
plotter
=
hpgl_plotter
;
hpgl_plotter
->
SetPenNumber
(
plot_opts
.
GetHPGLPenNum
()
);
hpgl_plotter
->
SetPenSpeed
(
plot_opts
.
GetHPGLPenSpeed
()
);
hpgl_plotter
->
SetPenOverlap
(
0
);
plotter
->
SetPageSettings
(
aSheet
);
plotter
->
SetViewport
(
offset
,
IU_PER_DECIMILS
,
scale
,
false
);
}
{
HPGL_PLOTTER
*
hpgl_plotter
=
new
HPGL_PLOTTER
;
plotter
=
hpgl_plotter
;
hpgl_plotter
->
SetPenNumber
(
plot_opts
.
GetHPGLPenNum
()
);
hpgl_plotter
->
SetPenSpeed
(
plot_opts
.
GetHPGLPenSpeed
()
);
hpgl_plotter
->
SetPenOverlap
(
0
);
plotter
->
SetPageSettings
(
aSheet
);
plotter
->
SetViewport
(
offset
,
IU_PER_DECIMILS
,
scale
,
false
);
}
break
;
...
...
@@ -104,59 +98,59 @@ bool EXCELLON_WRITER::GenDrillMapFile( const wxString& aFullFileName,
// fall through
case
PLOT_FORMAT_PDF
:
case
PLOT_FORMAT_POST
:
{
PAGE_INFO
pageA4
(
wxT
(
"A4"
)
);
wxSize
pageSizeIU
=
pageA4
.
GetSizeIU
();
{
PAGE_INFO
pageA4
(
wxT
(
"A4"
)
);
wxSize
pageSizeIU
=
pageA4
.
GetSizeIU
();
// Reserve a margin around the page.
int
margin
=
KiROUND
(
20
*
IU_PER_MM
);
// Reserve a margin around the page.
int
margin
=
KiROUND
(
20
*
IU_PER_MM
);
// Calculate a scaling factor to print the board on the sheet
double
Xscale
=
double
(
pageSizeIU
.
x
-
(
2
*
margin
)
)
/
bbbox
.
GetWidth
();
// Calculate a scaling factor to print the board on the sheet
double
Xscale
=
double
(
pageSizeIU
.
x
-
(
2
*
margin
)
)
/
bbbox
.
GetWidth
();
// We should print the list of drill sizes, so reserve room for it
// 60% height for board 40% height for list
int
ypagesize_for_board
=
KiROUND
(
pageSizeIU
.
y
*
0.6
);
double
Yscale
=
double
(
ypagesize_for_board
-
margin
)
/
bbbox
.
GetHeight
();
// We should print the list of drill sizes, so reserve room for it
// 60% height for board 40% height for list
int
ypagesize_for_board
=
KiROUND
(
pageSizeIU
.
y
*
0.6
);
double
Yscale
=
double
(
ypagesize_for_board
-
margin
)
/
bbbox
.
GetHeight
();
scale
=
std
::
min
(
Xscale
,
Yscale
);
scale
=
std
::
min
(
Xscale
,
Yscale
);
// Experience shows the scale should not to large, because texts
// create problem (can be to big or too small).
// So the scale is clipped at 3.0;
scale
=
std
::
min
(
scale
,
3.0
);
// Experience shows the scale should not to large, because texts
// create problem (can be to big or too small).
// So the scale is clipped at 3.0;
scale
=
std
::
min
(
scale
,
3.0
);
offset
.
x
=
KiROUND
(
double
(
bbbox
.
Centre
().
x
)
-
(
pageSizeIU
.
x
/
2.0
)
/
scale
);
offset
.
y
=
KiROUND
(
double
(
bbbox
.
Centre
().
y
)
-
(
ypagesize_for_board
/
2.0
)
/
scale
);
offset
.
x
=
KiROUND
(
double
(
bbbox
.
Centre
().
x
)
-
(
pageSizeIU
.
x
/
2.0
)
/
scale
);
offset
.
y
=
KiROUND
(
double
(
bbbox
.
Centre
().
y
)
-
(
ypagesize_for_board
/
2.0
)
/
scale
);
if
(
aFormat
==
PLOT_FORMAT_PDF
)
plotter
=
new
PDF_PLOTTER
;
else
plotter
=
new
PS_PLOTTER
;
if
(
aFormat
==
PLOT_FORMAT_PDF
)
plotter
=
new
PDF_PLOTTER
;
else
plotter
=
new
PS_PLOTTER
;
plotter
->
SetPageSettings
(
pageA4
);
plotter
->
SetViewport
(
offset
,
IU_PER_DECIMILS
,
scale
,
false
);
}
plotter
->
SetPageSettings
(
pageA4
);
plotter
->
SetViewport
(
offset
,
IU_PER_DECIMILS
,
scale
,
false
);
}
break
;
case
PLOT_FORMAT_DXF
:
{
DXF_PLOTTER
*
dxf_plotter
=
new
DXF_PLOTTER
;
plotter
=
dxf_plotter
;
plotter
->
SetPageSettings
(
aSheet
);
plotter
->
SetViewport
(
offset
,
IU_PER_DECIMILS
,
scale
,
false
);
}
{
DXF_PLOTTER
*
dxf_plotter
=
new
DXF_PLOTTER
;
plotter
=
dxf_plotter
;
plotter
->
SetPageSettings
(
aSheet
);
plotter
->
SetViewport
(
offset
,
IU_PER_DECIMILS
,
scale
,
false
);
}
break
;
case
PLOT_FORMAT_SVG
:
{
SVG_PLOTTER
*
svg_plotter
=
new
SVG_PLOTTER
;
plotter
=
svg_plotter
;
plotter
->
SetPageSettings
(
aSheet
);
plotter
->
SetViewport
(
offset
,
IU_PER_DECIMILS
,
scale
,
false
);
}
{
SVG_PLOTTER
*
svg_plotter
=
new
SVG_PLOTTER
;
plotter
=
svg_plotter
;
plotter
->
SetPageSettings
(
aSheet
);
plotter
->
SetViewport
(
offset
,
IU_PER_DECIMILS
,
scale
,
false
);
}
break
;
}
...
...
@@ -239,8 +233,7 @@ bool EXCELLON_WRITER::GenDrillMapFile( const wxString& aFullFileName,
plotY
+=
intervalle
;
plot_diam
=
KiROUND
(
m_toolListBuffer
[
ii
].
m_Diameter
);
x
=
KiROUND
(
plotX
-
textmarginaftersymbol
*
charScale
-
plot_diam
/
2.0
);
x
=
KiROUND
(
plotX
-
textmarginaftersymbol
*
charScale
-
plot_diam
/
2.0
);
y
=
KiROUND
(
plotY
+
charSize
*
charScale
);
plotter
->
Marker
(
wxPoint
(
x
,
y
),
plot_diam
,
ii
);
...
...
@@ -267,10 +260,9 @@ bool EXCELLON_WRITER::GenDrillMapFile( const wxString& aFullFileName,
m_toolListBuffer
[
ii
].
m_OvalCount
);
msg
+=
FROM_UTF8
(
line
);
plotter
->
Text
(
wxPoint
(
plotX
,
y
),
UNSPECIFIED_COLOR
,
msg
,
0
,
wxSize
(
KiROUND
(
charSize
*
charScale
),
KiROUND
(
charSize
*
charScale
)
),
plotter
->
Text
(
wxPoint
(
plotX
,
y
),
UNSPECIFIED_COLOR
,
msg
,
0
,
wxSize
(
KiROUND
(
charSize
*
charScale
),
KiROUND
(
charSize
*
charScale
)
),
GR_TEXT_HJUSTIFY_LEFT
,
GR_TEXT_VJUSTIFY_CENTER
,
TextWidth
,
false
,
false
);
...
...
@@ -287,52 +279,6 @@ bool EXCELLON_WRITER::GenDrillMapFile( const wxString& aFullFileName,
}
/*
* Create a plain text report file giving a list of drill values and drill count
* for through holes, oblong holes, and for buried vias,
* drill values and drill count per layer pair
*/
/* Here is a sample created by this function:
* Drill report for F:/tmp/interf_u/interf_u.brd
* Created on 04/10/2012 20:48:38
* Selected Drill Unit: Imperial (inches)
*
* Drill report for plated through holes :
* T1 0,025" 0,64mm (88 holes)
* T2 0,031" 0,79mm (120 holes)
* T3 0,032" 0,81mm (151 holes) (with 1 slot)
* T4 0,040" 1,02mm (43 holes)
* T5 0,079" 2,00mm (1 hole) (with 1 slot)
* T6 0,120" 3,05mm (1 hole) (with 1 slot)
*
* Total plated holes count 404
*
*
* Drill report for buried and blind vias :
*
* Drill report for holes from layer Soudure to layer Interne1 :
*
* Total plated holes count 0
*
*
* Drill report for holes from layer Interne1 to layer Interne2 :
* T1 0,025" 0,64mm (3 holes)
*
* Total plated holes count 3
*
*
* Drill report for holes from layer Interne2 to layer Composant :
* T1 0,025" 0,64mm (1 hole)
*
* Total plated holes count 1
*
*
* Drill report for unplated through holes :
* T1 0,120" 3,05mm (1 hole) (with 1 slot)
*
* Total unplated holes count 1
*
*/
bool
EXCELLON_WRITER
::
GenDrillReportFile
(
const
wxString
&
aFullFileName
)
{
unsigned
totalHoleCount
;
...
...
@@ -360,7 +306,7 @@ bool EXCELLON_WRITER::GenDrillReportFile( const wxString& aFullFileName )
for
(
;
;
)
{
BuildHolesList
(
layer1
,
layer2
,
gen_through_holes
?
false
:
true
,
gen_NPTH_holes
,
false
);
gen_through_holes
?
false
:
true
,
gen_NPTH_holes
,
false
);
totalHoleCount
=
0
;
...
...
@@ -461,17 +407,17 @@ bool EXCELLON_WRITER::GenDrillReportFile( const wxString& aFullFileName )
return
true
;
}
// Helper function to plot drill marks:
bool
EXCELLON_WRITER
::
PlotDrillMarks
(
PLOTTER
*
aPlotter
)
{
// Plot the drill map:
wxPoint
pos
;
for
(
unsigned
ii
=
0
;
ii
<
m_holeListBuffer
.
size
();
ii
++
)
{
pos
=
m_holeListBuffer
[
ii
].
m_Hole_Pos
;
/* Always plot the drill symbol (for slots identifies the needed
* cutter!) */
// Always plot the drill symbol (for slots identifies the needed cutter!
aPlotter
->
Marker
(
pos
,
m_holeListBuffer
[
ii
].
m_Hole_Diameter
,
m_holeListBuffer
[
ii
].
m_Tool_Reference
-
1
);
...
...
pcbnew/exporters/gendrill_Excellon_writer.cpp
View file @
339dd0da
This diff is collapsed.
Click to expand it.
pcbnew/exporters/gendrill_Excellon_writer.h
View file @
339dd0da
...
...
@@ -60,7 +60,7 @@ public:
* So we must generate a drill file for each layer pair (adjacent layers)
* Not plated holes are always through holes, and must be output on a specific drill file
* because they are drilled after the Pcb process is finished.
*/
*/
class
HOLE_INFO
{
public
:
...
...
@@ -74,6 +74,7 @@ public:
LAYER_NUM
m_Hole_Top_Layer
;
// hole ending layer (usually front layer):
// m_Hole_First_Layer < m_Hole_Last_Layer
bool
m_Hole_NotPlated
;
// hole not plated. Must be in a specific drill file
public
:
HOLE_INFO
()
{
...
...
@@ -88,7 +89,7 @@ class DRILL_PRECISION
{
public
:
int
m_lhs
;
// Left digit number (integer value of coordinates)
int
m_rhs
;
// Right digit number (deci
am
value of coordinates)
int
m_rhs
;
// Right digit number (deci
mal
value of coordinates)
public
:
DRILL_PRECISION
(
int
l
=
2
,
int
r
=
4
)
{
...
...
@@ -120,26 +121,28 @@ public:
SUPPRESS_TRAILING
,
KEEP_ZEROS
};
wxPoint
m_Offset
;
// offset coordinates
bool
m_ShortHeader
;
// true to generate the smallest header (strip comments)
wxPoint
m_Offset
;
// offset coordinates
bool
m_ShortHeader
;
// true to generate the smallest header (strip comments)
private
:
FILE
*
m_file
;
// The output file
BOARD
*
m_pcb
;
bool
m_minimalHeader
;
// True to use minimal h
ae
der
bool
m_minimalHeader
;
// True to use minimal h
ea
der
// in excellon file (strip comments)
bool
m_unitsDecimal
;
// true = decimal, false = inches
zeros_fmt
m_zeroFormat
;
// the zero format option for output file
DRILL_PRECISION
m_precision
;
// The current coordinate precision (not used in decima
t
format)
DRILL_PRECISION
m_precision
;
// The current coordinate precision (not used in decima
l
format)
double
m_conversionUnits
;
// scaling factor to convert the board unites to Excellon units
// (i.e inches or mm)
bool
m_mirror
;
wxPoint
m_offset
;
// Drill offset
o
oordinates
wxPoint
m_offset
;
// Drill offset
c
oordinates
bool
m_mergePTHNPTH
;
std
::
vector
<
HOLE_INFO
>
m_holeListBuffer
;
// Buffer containing holes
std
::
vector
<
DRILL_TOOL
>
m_toolListBuffer
;
// Buffer containing tools
public
:
EXCELLON_WRITER
(
BOARD
*
aPcb
,
wxPoint
aOffset
)
public
:
EXCELLON_WRITER
(
BOARD
*
aPcb
,
wxPoint
aOffset
)
{
m_file
=
NULL
;
m_pcb
=
aPcb
;
...
...
@@ -158,7 +161,7 @@ public: EXCELLON_WRITER( BOARD* aPcb, wxPoint aOffset )
/**
* Return the plot offset (usually the position
* of the auxilia
t
y axis
* of the auxilia
r
y axis
*/
const
wxPoint
GetOffset
()
{
return
m_offset
;
}
...
...
@@ -201,17 +204,16 @@ public: EXCELLON_WRITER( BOARD* aPcb, wxPoint aOffset )
* false to created plated holes list (with no NPTH )
*/
void
BuildHolesList
(
int
aFirstLayer
,
int
aLastLayer
,
bool
aExcludeThroughHoles
,
bool
aGenerateNPTH_list
,
bool
aMergePTHNPTH
);
bool
aExcludeThroughHoles
,
bool
aGenerateNPTH_list
,
bool
aMergePTHNPTH
);
int
GetHolesCount
()
const
{
return
m_holeListBuffer
.
size
();
}
/**
* Function CreateDrillFile
* Creates an Excellon drill file
* @param aFile = an opened file to write to
* will be closed by CreateDrillFile
* @param aFile = an opened file to write to will be closed by CreateDrillFile
* @return hole count
*/
int
CreateDrillFile
(
FILE
*
aFile
);
...
...
@@ -222,6 +224,47 @@ public: EXCELLON_WRITER( BOARD* aPcb, wxPoint aOffset )
* for through holes, oblong holes, and for buried vias,
* drill values and drill count per layer pair
* there is only one report for all drill files even when buried or blinds vias exist
*
* Here is a sample created by this function:
* Drill report for F:/tmp/interf_u/interf_u.brd
* Created on 04/10/2012 20:48:38
* Selected Drill Unit: Imperial (inches)
*
* Drill report for plated through holes :
* T1 0,025" 0,64mm (88 holes)
* T2 0,031" 0,79mm (120 holes)
* T3 0,032" 0,81mm (151 holes) (with 1 slot)
* T4 0,040" 1,02mm (43 holes)
* T5 0,079" 2,00mm (1 hole) (with 1 slot)
* T6 0,120" 3,05mm (1 hole) (with 1 slot)
*
* Total plated holes count 404
*
*
* Drill report for buried and blind vias :
*
* Drill report for holes from layer Soudure to layer Interne1 :
*
* Total plated holes count 0
*
*
* Drill report for holes from layer Interne1 to layer Interne2 :
* T1 0,025" 0,64mm (3 holes)
*
* Total plated holes count 3
*
*
* Drill report for holes from layer Interne2 to layer Composant :
* T1 0,025" 0,64mm (1 hole)
*
* Total plated holes count 1
*
*
* Drill report for unplated through holes :
* T1 0,120" 3,05mm (1 hole) (with 1 slot)
*
* Total unplated holes count 1
*
* @param aFullFileName : the name of the file to create
* m_unitsDecimal = false tu use inches, true to use mm in report file
*
...
...
@@ -233,16 +276,29 @@ public: EXCELLON_WRITER( BOARD* aPcb, wxPoint aOffset )
* Function GenDrillMapFile
* Plot a map of drill marks for holes.
* @param aFullFileNameWithoutExt : the full filename of the file to create,
* without extension (will be added accordin
t ti
the format)
* @param aSheet : the paper sheet touse for plot
* without extension (will be added accordin
g to
the format)
* @param aSheet : the paper sheet to
use for plot
* @param aFormat : one of the supported plot formats (see enum PlotFormat )
*/
bool
GenDrillMapFile
(
const
wxString
&
aFullFileNameWithoutExt
,
const
PAGE_INFO
&
aSheet
,
PlotFormat
aFormat
);
private
:
/* Print the DRILL file header. The full header is:
* M48
* ;DRILL file {PCBNEW (2007-11-29-b)} date 17/1/2008-21:02:35
* ;FORMAT={ <precision> / absolute / <units> / <numbers format>}
* FMAT,2
* INCH,TZ
*/
void
WriteEXCELLONHeader
();
void
WriteEXCELLONEndOfFile
();
/* Created a line like:
* X48000Y19500
* According to the selected format
*/
void
WriteCoordinates
(
char
*
aLine
,
double
aCoordX
,
double
aCoordY
);
/** Helper function.
...
...
@@ -257,6 +313,4 @@ private:
};
#endif // #ifndef _GENDRILL_EXCELLON_WRITER_
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