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
5944f4c4
Commit
5944f4c4
authored
Nov 24, 2010
by
jean-pierre charras
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Pcbnew: gen drill functions: morecode cleanup
parent
259d9a02
Changes
5
Expand all
Show whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
327 additions
and
192 deletions
+327
-192
dialog_gendrill.cpp
pcbnew/dialogs/dialog_gendrill.cpp
+6
-7
dialog_gendrill.h
pcbnew/dialogs/dialog_gendrill.h
+59
-36
gen_holes_and_tools_lists_for_drill.cpp
pcbnew/gen_holes_and_tools_lists_for_drill.cpp
+0
-3
gendrill.cpp
pcbnew/gendrill.cpp
+143
-110
gendrill.h
pcbnew/gendrill.h
+119
-36
No files found.
pcbnew/dialogs/dialog_gendrill.cpp
View file @
5944f4c4
/////////////////////////////////////////////////////////////////////////////
// Name: dialog_gendrill.cpp
// Author: jean-pierre Charras
// Licence: GPL
...
...
@@ -50,7 +48,7 @@ DIALOG_GENDRILL::DIALOG_GENDRILL( WinEDA_PcbFrame* parent ) :
// Static members of DIALOG_GENDRILL
int
DIALOG_GENDRILL
::
m_UnitDrillIsInch
=
true
;
int
DIALOG_GENDRILL
::
m_ZerosFormat
=
DECIMAL_FORMAT
;
int
DIALOG_GENDRILL
::
m_ZerosFormat
=
EXCELLON_WRITER
::
DECIMAL_FORMAT
;
bool
DIALOG_GENDRILL
::
m_MinimalHeader
=
false
;
bool
DIALOG_GENDRILL
::
m_Mirror
=
true
;
bool
DIALOG_GENDRILL
::
m_DrillOriginIsAuxAxis
=
false
;
...
...
@@ -96,7 +94,7 @@ void DIALOG_GENDRILL::InitDisplayParams( void )
m_Choice_Unit
->
SetSelection
(
m_UnitDrillIsInch
?
1
:
0
);
m_Choice_Precision
->
SetSelection
(
m_PrecisionFormat
);
m_Choice_Zeros_Format
->
SetSelection
(
m_ZerosFormat
);
if
(
m_ZerosFormat
==
DECIMAL_FORMAT
)
if
(
m_ZerosFormat
==
EXCELLON_WRITER
::
DECIMAL_FORMAT
)
m_Choice_Precision
->
Enable
(
false
);
UpdatePrecisionOptions
(
);
...
...
@@ -209,7 +207,8 @@ void DIALOG_GENDRILL::OnSelDrillUnitsSelected( wxCommandEvent& event )
void
DIALOG_GENDRILL
::
OnOkClick
(
wxCommandEvent
&
event
)
{
GenDrillOrReportFiles
(
);
GenDrillAndReportFiles
(
);
EndModal
(
wxID_OK
);
}
...
...
@@ -220,7 +219,7 @@ void DIALOG_GENDRILL::OnOkClick( wxCommandEvent& event )
void
DIALOG_GENDRILL
::
OnCancelClick
(
wxCommandEvent
&
event
)
{
UpdateConfig
();
/* Save drill options: */
event
.
Skip
(
);
// Process the default cancel event (close dialog)
EndModal
(
wxID_CANCEL
);
// Process the default cancel event (close dialog)
}
...
...
@@ -248,7 +247,7 @@ void DIALOG_GENDRILL::UpdatePrecisionOptions( )
m_Choice_Precision
->
SetString
(
0
,
precisionListForMetric
[
0
].
GetPrecisionString
()
);
m_Choice_Precision
->
SetString
(
1
,
precisionListForMetric
[
1
].
GetPrecisionString
()
);
}
if
(
m_Choice_Zeros_Format
->
GetSelection
()
==
DECIMAL_FORMAT
)
if
(
m_Choice_Zeros_Format
->
GetSelection
()
==
EXCELLON_WRITER
::
DECIMAL_FORMAT
)
m_Choice_Precision
->
Enable
(
false
);
else
m_Choice_Precision
->
Enable
(
true
);
...
...
pcbnew/dialogs/dialog_gendrill.h
View file @
5944f4c4
/////////////////////////////////////////////////////////////////////////////
/**
*@file dialog_gendrill.h
*/
// Name: dialog_gendrill.h
// Author: jean-pierre Charras
// Created: 2010 apr 30
// Licence: GPL
/////////////////////////////////////////////////////////////////////////////
/*
* This program source code file is part of KICAD, a free EDA CAD application.
*
* Copyright (C) 1992-2010 Jean_Pierre Charras <jp.charras@iut.ujf-grenoble.fr>
* 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
*/
#ifndef _DIALOG_GENDRILL_H_
#define _DIALOG_GENDRILL_H_
...
...
@@ -35,30 +55,33 @@ public: DIALOG_GENDRILL( WinEDA_PcbFrame* parent );
~
DIALOG_GENDRILL
();
private
:
// Initialises member variables
void
initDialog
();
void
InitDisplayParams
(
void
);
// event functions
void
OnSelDrillUnitsSelected
(
wxCommandEvent
&
event
);
void
OnSelZerosFmtSelected
(
wxCommandEvent
&
event
);
void
OnOkClick
(
wxCommandEvent
&
event
);
void
OnCancelClick
(
wxCommandEvent
&
event
);
// Specific functions:
void
SetParams
(
void
);
void
GenDrillOr
ReportFiles
();
void
GenDrillAnd
ReportFiles
();
void
GenDrillMap
(
const
wxString
aFileName
,
std
::
vector
<
HOLE_INFO
>&
aHoleListBuffer
,
std
::
vector
<
DRILL_TOOL
>&
aToolListBuffer
,
int
format
);
void
UpdatePrecisionOptions
(
);
void
UpdatePrecisionOptions
(
);
void
UpdateConfig
();
void
Write_Excellon_Header
(
FILE
*
aFile
,
bool
aMinimalHeader
,
zeros_fmt
aFormat
);
void
GenDrillReport
(
const
wxString
aFileName
);
int
Create_Drill_File_EXCELLON
(
FILE
*
aFile
,
wxPoint
aOffset
,
std
::
vector
<
HOLE_INFO
>&
aHoleListBuffer
,
std
::
vector
<
DRILL_TOOL
>&
aToolListBuffer
);
int
Gen_Liste_Tools
(
std
::
vector
<
DRILL_TOOL
>&
buffer
,
bool
print_header
);
/**
* Return the selected format for coordinates, if not decimal
*/
...
...
pcbnew/gen_holes_and_tools_lists_for_drill.cpp
View file @
5944f4c4
...
...
@@ -4,8 +4,6 @@
#include "fctsys.h"
using
namespace
std
;
#include <algorithm> // sort
#include <vector>
...
...
@@ -42,7 +40,6 @@ static bool CmpHoleDiameterValue( const HOLE_INFO& a, const HOLE_INFO& b )
* @param aToolListBuffer : the std::vector<DRILL_TOOL> to fill with tools to use
* @param aFirstLayer = first layer to consider. if < 0 aFirstLayer is ignored (used to creates report file)
* @param aLastLayer = last layer to consider. if < 0 aLastLayer is ignored
* @param aLastLayer = last layer to consider. if < 0 aLastLayer is ignored
* @param aExcludeThroughHoles : if true, exclude through holes ( pads and vias through )
*/
void
Build_Holes_List
(
BOARD
*
aPcb
,
...
...
pcbnew/gendrill.cpp
View file @
5944f4c4
This diff is collapsed.
Click to expand it.
pcbnew/gendrill.h
View file @
5944f4c4
...
...
@@ -12,8 +12,7 @@ public:
int
m_Diameter
;
// the diameter of the used tool (for oblong, the smaller size)
int
m_TotalCount
;
// how many times it is used (round and oblong)
int
m_OvalCount
;
// oblong count
public
:
DRILL_TOOL
(
int
diametre
)
public
:
DRILL_TOOL
(
int
diametre
)
{
m_TotalCount
=
0
;
m_OvalCount
=
0
;
...
...
@@ -40,39 +39,123 @@ public:
/* the DRILL_PRECISION helper class to handle drill precision format in excellon files
*/
*/
class
DRILL_PRECISION
{
public
:
int
m_lhs
;
// Left digit number (integer value of coordinates)
int
m_rhs
;
// Right digit number (deciam value of coordinates)
public
:
DRILL_PRECISION
(
int
l
=
2
,
int
r
=
4
)
public
:
DRILL_PRECISION
(
int
l
=
2
,
int
r
=
4
)
{
m_lhs
=
l
;
m_rhs
=
r
;
}
wxString
GetPrecisionString
()
{
wxString
text
;
text
<<
m_lhs
<<
wxT
(
":"
)
<<
m_rhs
;
text
<<
m_lhs
<<
wxT
(
":"
)
<<
m_rhs
;
return
text
;
}
};
/* zeros format */
enum
zeros_fmt
{
// A helper class to create Excellon drill files
class
EXCELLON_WRITER
{
public
:
enum
zeros_fmt
{
// Zero format in coordinates
DECIMAL_FORMAT
,
SUPPRESS_LEADING
,
SUPPRESS_TRAILING
,
KEEP_ZEROS
};
};
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 haeder
// 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 decimat 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 ooordinates
std
::
vector
<
HOLE_INFO
>*
m_holeListBuffer
;
// Buffer containing holes
std
::
vector
<
DRILL_TOOL
>*
m_toolListBuffer
;
// Buffer containing tools
public
:
EXCELLON_WRITER
(
BOARD
*
aPcb
,
FILE
*
aFile
,
wxPoint
aOffset
,
std
::
vector
<
HOLE_INFO
>*
aHoleListBuffer
,
std
::
vector
<
DRILL_TOOL
>*
aToolListBuffer
)
{
m_file
=
aFile
;
m_pcb
=
aPcb
;
m_zeroFormat
=
DECIMAL_FORMAT
;
m_holeListBuffer
=
aHoleListBuffer
;
m_toolListBuffer
=
aToolListBuffer
;
m_conversionUnits
=
0
.
0001
;
m_unitsDecimal
=
false
;
m_mirror
=
false
;
m_minimalHeader
=
false
;
}
~
EXCELLON_WRITER
()
{
}
/**
* SetFormat
* Initialize internal parameters to match the given format
* @param aMetric = true for metric coordinates, false for imperial units
* @param aZerosFmt = DECIMAL_FORMAT, SUPPRESS_LEADING, SUPPRESS_TRAILING, KEEP_ZEROS
* @param aLeftDigits = number of digits for integer part of coordinates
* @param aRightDigits = number of digits for mantissa part of coordinates
*/
void
SetFormat
(
bool
aMetric
,
zeros_fmt
aZerosFmt
,
int
aLeftDigits
,
int
aRightDigits
);
/**
* SetOptions
* Initialize internal parameters to match drill options
* @param aMetric = true for metric coordinates, false for imperial units
* @param aZerosFmt = DECIMAL_FORMAT, SUPPRESS_LEADING, SUPPRESS_TRAILING, KEEP_ZEROS
* @param aLeftDigits = number of digits for integer part of coordinates
* @param aRightDigits = number of digits for mantissa part of coordinates
*/
void
SetOptions
(
bool
aMirror
,
bool
aMinimalHeader
,
wxPoint
aOffset
)
{
m_mirror
=
aMirror
;
m_offset
=
aOffset
;
m_minimalHeader
=
aMinimalHeader
;
}
/**
* CreateDrillFile
* Creates an Excellon drill file
* @return hole count
*/
int
CreateDrillFile
();
private
:
void
WriteHeader
();
void
WriteEndOfFile
();
void
WriteCoordinates
(
char
*
aLine
,
double
aCoordX
,
double
aCoordY
);
};
/**
* Function BuildHolesList
* Create the list of holes and tools for a given board
* The list is sorted by incr
aesin
drill values
* The list is sorted by incr
easing
drill values
* Only holes from aFirstLayer to aLastLayer copper layers are listed (for vias, because pad holes are always through holes)
* @param Pcb : the given board
* @param aHoleListBuffer : the std::vector<HOLE_INFO> to fill with pcb holes info
...
...
@@ -89,7 +172,7 @@ void Build_Holes_List( BOARD* Pcb, std::vector<HOLE_INFO>& aHoleListBuffer,
void
GenDrillMapFile
(
BOARD
*
aPcb
,
FILE
*
aFile
,
const
wxString
&
aFullFileName
,
Ki_PageDescr
*
aSheet
,
Ki_PageDescr
*
aSheet
,
std
::
vector
<
HOLE_INFO
>
aHoleListBuffer
,
std
::
vector
<
DRILL_TOOL
>
aToolListBuffer
,
bool
aUnit_Drill_is_Inch
,
...
...
@@ -97,15 +180,15 @@ void GenDrillMapFile( BOARD* aPcb,
void
Gen_Drill_PcbMap
(
BOARD
*
aPcb
,
PLOTTER
*
plotter
,
std
::
vector
<
HOLE_INFO
>&
aHoleListBuffer
,
std
::
vector
<
DRILL_TOOL
>&
aToolListBuffer
);
std
::
vector
<
DRILL_TOOL
>&
aToolListBuffer
);
/*
* Create a list of drill values and drill count
* there is only one report for all drill files even when buried or blinds vias exist
*/
void
GenDrillReportFile
(
FILE
*
aFile
,
BOARD
*
aPcb
,
const
wxString
&
aBoardFilename
,
void
GenDrillReportFile
(
FILE
*
aFile
,
BOARD
*
aPcb
,
const
wxString
&
aBoardFilename
,
bool
aUnit_Drill_is_Inch
,
std
::
vector
<
HOLE_INFO
>
&
aHoleListBuffer
,
std
::
vector
<
HOLE_INFO
>
&
aHoleListBuffer
,
std
::
vector
<
DRILL_TOOL
>&
aToolListBuffer
);
...
...
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