Pcbnew: add option to merge non-plated through holes to drill file. (fixes lp:1133330)
This commit is contained in:
parent
36813fe8ab
commit
b33fa0cc13
|
@ -47,6 +47,7 @@
|
||||||
#define PrecisionKey wxT( "DrilltPrecisionOpt" )
|
#define PrecisionKey wxT( "DrilltPrecisionOpt" )
|
||||||
#define MirrorKey wxT( "DrillMirrorYOpt" )
|
#define MirrorKey wxT( "DrillMirrorYOpt" )
|
||||||
#define MinimalHeaderKey wxT( "DrillMinHeader" )
|
#define MinimalHeaderKey wxT( "DrillMinHeader" )
|
||||||
|
#define MergePTHNPTHKey wxT( "DrillMergePTHNPTH" )
|
||||||
#define UnitDrillInchKey wxT( "DrillUnit" )
|
#define UnitDrillInchKey wxT( "DrillUnit" )
|
||||||
#define DrillOriginIsAuxAxisKey wxT( "DrillAuxAxis" )
|
#define DrillOriginIsAuxAxisKey wxT( "DrillAuxAxis" )
|
||||||
#define DrillMapFileTypeKey wxT( "DrillMapFileType" )
|
#define DrillMapFileTypeKey wxT( "DrillMapFileType" )
|
||||||
|
@ -68,7 +69,6 @@ void PCB_EDIT_FRAME::InstallDrillFrame( wxCommandEvent& event )
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
DIALOG_GENDRILL::DIALOG_GENDRILL( PCB_EDIT_FRAME* parent ) :
|
DIALOG_GENDRILL::DIALOG_GENDRILL( PCB_EDIT_FRAME* parent ) :
|
||||||
DIALOG_GENDRILL_BASE( parent )
|
DIALOG_GENDRILL_BASE( parent )
|
||||||
{
|
{
|
||||||
|
@ -88,6 +88,7 @@ int DIALOG_GENDRILL::m_UnitDrillIsInch = true;
|
||||||
int DIALOG_GENDRILL::m_ZerosFormat = EXCELLON_WRITER::DECIMAL_FORMAT;
|
int DIALOG_GENDRILL::m_ZerosFormat = EXCELLON_WRITER::DECIMAL_FORMAT;
|
||||||
bool DIALOG_GENDRILL::m_MinimalHeader = false;
|
bool DIALOG_GENDRILL::m_MinimalHeader = false;
|
||||||
bool DIALOG_GENDRILL::m_Mirror = false;
|
bool DIALOG_GENDRILL::m_Mirror = false;
|
||||||
|
bool DIALOG_GENDRILL::m_Merge_PTH_NPTH = false;
|
||||||
bool DIALOG_GENDRILL::m_DrillOriginIsAuxAxis = false;
|
bool DIALOG_GENDRILL::m_DrillOriginIsAuxAxis = false;
|
||||||
int DIALOG_GENDRILL::m_mapFileType = 1;
|
int DIALOG_GENDRILL::m_mapFileType = 1;
|
||||||
|
|
||||||
|
@ -102,6 +103,7 @@ void DIALOG_GENDRILL::initDialog()
|
||||||
{
|
{
|
||||||
m_config->Read( ZerosFormatKey, &m_ZerosFormat );
|
m_config->Read( ZerosFormatKey, &m_ZerosFormat );
|
||||||
m_config->Read( MirrorKey, &m_Mirror );
|
m_config->Read( MirrorKey, &m_Mirror );
|
||||||
|
m_config->Read( MergePTHNPTHKey, &m_Merge_PTH_NPTH );
|
||||||
m_config->Read( MinimalHeaderKey, &m_MinimalHeader );
|
m_config->Read( MinimalHeaderKey, &m_MinimalHeader );
|
||||||
m_config->Read( UnitDrillInchKey, &m_UnitDrillIsInch );
|
m_config->Read( UnitDrillInchKey, &m_UnitDrillIsInch );
|
||||||
m_config->Read( DrillOriginIsAuxAxisKey, &m_DrillOriginIsAuxAxis );
|
m_config->Read( DrillOriginIsAuxAxisKey, &m_DrillOriginIsAuxAxis );
|
||||||
|
@ -124,6 +126,7 @@ void DIALOG_GENDRILL::InitDisplayParams()
|
||||||
m_Choice_Drill_Offset->SetSelection( 1 );
|
m_Choice_Drill_Offset->SetSelection( 1 );
|
||||||
|
|
||||||
m_Check_Mirror->SetValue( m_Mirror );
|
m_Check_Mirror->SetValue( m_Mirror );
|
||||||
|
m_Check_Merge_PTH_NPTH->SetValue( m_Merge_PTH_NPTH );
|
||||||
m_Choice_Drill_Map->SetSelection( m_mapFileType );
|
m_Choice_Drill_Map->SetSelection( m_mapFileType );
|
||||||
m_ViaDrillValue->SetLabel( _( "Use Netclasses values" ) );
|
m_ViaDrillValue->SetLabel( _( "Use Netclasses values" ) );
|
||||||
m_MicroViaDrillValue->SetLabel( _( "Use Netclasses values" ) );
|
m_MicroViaDrillValue->SetLabel( _( "Use Netclasses values" ) );
|
||||||
|
@ -213,6 +216,7 @@ void DIALOG_GENDRILL::UpdateConfig()
|
||||||
m_config->Write( ZerosFormatKey, m_ZerosFormat );
|
m_config->Write( ZerosFormatKey, m_ZerosFormat );
|
||||||
m_config->Write( MirrorKey, m_Mirror );
|
m_config->Write( MirrorKey, m_Mirror );
|
||||||
m_config->Write( MinimalHeaderKey, m_MinimalHeader );
|
m_config->Write( MinimalHeaderKey, m_MinimalHeader );
|
||||||
|
m_config->Write( MergePTHNPTHKey, m_Merge_PTH_NPTH );
|
||||||
m_config->Write( UnitDrillInchKey, m_UnitDrillIsInch );
|
m_config->Write( UnitDrillInchKey, m_UnitDrillIsInch );
|
||||||
m_config->Write( DrillOriginIsAuxAxisKey, m_DrillOriginIsAuxAxis );
|
m_config->Write( DrillOriginIsAuxAxisKey, m_DrillOriginIsAuxAxis );
|
||||||
m_config->Write( DrillMapFileTypeKey, m_mapFileType );
|
m_config->Write( DrillMapFileTypeKey, m_mapFileType );
|
||||||
|
@ -229,6 +233,7 @@ void DIALOG_GENDRILL::OnGenMapFile( wxCommandEvent& event )
|
||||||
GenDrillAndMapFiles( false, true);
|
GenDrillAndMapFiles( false, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void DIALOG_GENDRILL::OnGenDrillFile( wxCommandEvent& event )
|
void DIALOG_GENDRILL::OnGenDrillFile( wxCommandEvent& event )
|
||||||
{
|
{
|
||||||
GenDrillAndMapFiles(true, false);
|
GenDrillAndMapFiles(true, false);
|
||||||
|
@ -264,6 +269,7 @@ void DIALOG_GENDRILL::UpdatePrecisionOptions()
|
||||||
m_staticTextPrecision->Enable( true );
|
m_staticTextPrecision->Enable( true );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void DIALOG_GENDRILL::OnOutputDirectoryBrowseClicked( wxCommandEvent& event )
|
void DIALOG_GENDRILL::OnOutputDirectoryBrowseClicked( wxCommandEvent& event )
|
||||||
{
|
{
|
||||||
// Build the absolute path of current output plot directory
|
// Build the absolute path of current output plot directory
|
||||||
|
@ -292,14 +298,14 @@ void DIALOG_GENDRILL::OnOutputDirectoryBrowseClicked( wxCommandEvent& event )
|
||||||
wxString boardFilePath = ( (wxFileName) m_parent->GetBoard()->GetFileName() ).GetPath();
|
wxString boardFilePath = ( (wxFileName) m_parent->GetBoard()->GetFileName() ).GetPath();
|
||||||
|
|
||||||
if( !dirName.MakeRelativeTo( boardFilePath ) )
|
if( !dirName.MakeRelativeTo( boardFilePath ) )
|
||||||
wxMessageBox( _(
|
wxMessageBox( _( "Cannot make path relative. The target volume is different from board file volume!" ),
|
||||||
"Cannot make path relative (target volume different from board file volume)!" ),
|
|
||||||
_( "Plot Output Directory" ), wxOK | wxICON_ERROR );
|
_( "Plot Output Directory" ), wxOK | wxICON_ERROR );
|
||||||
}
|
}
|
||||||
|
|
||||||
m_outputDirectoryName->SetValue( dirName.GetFullPath() );
|
m_outputDirectoryName->SetValue( dirName.GetFullPath() );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void DIALOG_GENDRILL::SetParams()
|
void DIALOG_GENDRILL::SetParams()
|
||||||
{
|
{
|
||||||
wxString msg;
|
wxString msg;
|
||||||
|
@ -315,6 +321,7 @@ void DIALOG_GENDRILL::SetParams()
|
||||||
m_UnitDrillIsInch = (m_Choice_Unit->GetSelection() == 0) ? false : true;
|
m_UnitDrillIsInch = (m_Choice_Unit->GetSelection() == 0) ? false : true;
|
||||||
m_MinimalHeader = m_Check_Minimal->IsChecked();
|
m_MinimalHeader = m_Check_Minimal->IsChecked();
|
||||||
m_Mirror = m_Check_Mirror->IsChecked();
|
m_Mirror = m_Check_Mirror->IsChecked();
|
||||||
|
m_Merge_PTH_NPTH = m_Check_Merge_PTH_NPTH->IsChecked();
|
||||||
m_ZerosFormat = m_Choice_Zeros_Format->GetSelection();
|
m_ZerosFormat = m_Choice_Zeros_Format->GetSelection();
|
||||||
m_DrillOriginIsAuxAxis = m_Choice_Drill_Offset->GetSelection();
|
m_DrillOriginIsAuxAxis = m_Choice_Drill_Offset->GetSelection();
|
||||||
|
|
||||||
|
@ -331,16 +338,7 @@ void DIALOG_GENDRILL::SetParams()
|
||||||
m_board->SetPlotOptions( m_plotOpts );
|
m_board->SetPlotOptions( m_plotOpts );
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Function GenDrillAndMapFiles
|
|
||||||
* Calls the functions to create EXCELLON drill files and/or drill map files
|
|
||||||
* >When all holes are through holes, only one excellon file is created.
|
|
||||||
* >When there are some partial holes (some blind or buried vias),
|
|
||||||
* one excellon file is created, for all plated through holes,
|
|
||||||
* and one file per layer pair, which have one or more holes, excluding
|
|
||||||
* through holes, already in the first file.
|
|
||||||
* one file for all Not Plated through holes
|
|
||||||
*/
|
|
||||||
void DIALOG_GENDRILL::GenDrillAndMapFiles(bool aGenDrill, bool aGenMap)
|
void DIALOG_GENDRILL::GenDrillAndMapFiles(bool aGenDrill, bool aGenMap)
|
||||||
{
|
{
|
||||||
wxString layer_extend; /* added to the Board FileName to
|
wxString layer_extend; /* added to the Board FileName to
|
||||||
|
@ -369,14 +367,14 @@ void DIALOG_GENDRILL::GenDrillAndMapFiles(bool aGenDrill, bool aGenMap)
|
||||||
excellonWriter.SetFormat( !m_UnitDrillIsInch,
|
excellonWriter.SetFormat( !m_UnitDrillIsInch,
|
||||||
(EXCELLON_WRITER::zeros_fmt) m_ZerosFormat,
|
(EXCELLON_WRITER::zeros_fmt) m_ZerosFormat,
|
||||||
m_Precision.m_lhs, m_Precision.m_rhs );
|
m_Precision.m_lhs, m_Precision.m_rhs );
|
||||||
excellonWriter.SetOptions( m_Mirror, m_MinimalHeader, m_FileDrillOffset );
|
excellonWriter.SetOptions( m_Mirror, m_MinimalHeader, m_FileDrillOffset, m_Merge_PTH_NPTH );
|
||||||
|
|
||||||
wxFileName fn;
|
wxFileName fn;
|
||||||
|
|
||||||
for( ; ; )
|
for( ; ; )
|
||||||
{
|
{
|
||||||
excellonWriter.BuildHolesList( layer1, layer2,
|
excellonWriter.BuildHolesList( layer1, layer2, gen_through_holes ? false : true,
|
||||||
gen_through_holes ? false : true, gen_NPTH_holes );
|
gen_NPTH_holes, m_Merge_PTH_NPTH );
|
||||||
|
|
||||||
if( excellonWriter.GetHolesCount() > 0 ) // has holes?
|
if( excellonWriter.GetHolesCount() > 0 ) // has holes?
|
||||||
{
|
{
|
||||||
|
@ -393,6 +391,7 @@ void DIALOG_GENDRILL::GenDrillAndMapFiles(bool aGenDrill, bool aGenMap)
|
||||||
layer_extend << wxT( "-back" );
|
layer_extend << wxT( "-back" );
|
||||||
else
|
else
|
||||||
layer_extend << wxT( "-inner" ) << layer1;
|
layer_extend << wxT( "-inner" ) << layer1;
|
||||||
|
|
||||||
if( layer2 == LAYER_N_FRONT )
|
if( layer2 == LAYER_N_FRONT )
|
||||||
layer_extend << wxT( "-front" );
|
layer_extend << wxT( "-front" );
|
||||||
else
|
else
|
||||||
|
@ -401,6 +400,7 @@ void DIALOG_GENDRILL::GenDrillAndMapFiles(bool aGenDrill, bool aGenMap)
|
||||||
|
|
||||||
fn.SetName( fn.GetName() + layer_extend );
|
fn.SetName( fn.GetName() + layer_extend );
|
||||||
wxString defaultPath = m_plotOpts.GetOutputDirectory();
|
wxString defaultPath = m_plotOpts.GetOutputDirectory();
|
||||||
|
|
||||||
if( defaultPath.IsEmpty() )
|
if( defaultPath.IsEmpty() )
|
||||||
defaultPath = ::wxGetCwd();
|
defaultPath = ::wxGetCwd();
|
||||||
|
|
||||||
|
@ -466,6 +466,7 @@ void DIALOG_GENDRILL::GenDrillAndMapFiles(bool aGenDrill, bool aGenMap)
|
||||||
gen_NPTH_holes = true;
|
gen_NPTH_holes = true;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
layer1++;
|
layer1++;
|
||||||
layer2++; // use next layer pair
|
layer2++; // use next layer pair
|
||||||
|
|
||||||
|
@ -482,11 +483,6 @@ void DIALOG_GENDRILL::GenDrillAndMapFiles(bool aGenDrill, bool aGenMap)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
* 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
|
|
||||||
*/
|
|
||||||
void DIALOG_GENDRILL::OnGenReportFile( wxCommandEvent& event )
|
void DIALOG_GENDRILL::OnGenReportFile( wxCommandEvent& event )
|
||||||
{
|
{
|
||||||
UpdateConfig(); // set params and Save drill options
|
UpdateConfig(); // set params and Save drill options
|
||||||
|
@ -497,6 +493,7 @@ void DIALOG_GENDRILL::OnGenReportFile( wxCommandEvent& event )
|
||||||
fn.SetExt( ReportFileExtension );
|
fn.SetExt( ReportFileExtension );
|
||||||
|
|
||||||
wxString defaultPath = m_plotOpts.GetOutputDirectory();
|
wxString defaultPath = m_plotOpts.GetOutputDirectory();
|
||||||
|
|
||||||
if( defaultPath.IsEmpty() )
|
if( defaultPath.IsEmpty() )
|
||||||
defaultPath = ::wxGetCwd();
|
defaultPath = ::wxGetCwd();
|
||||||
|
|
||||||
|
@ -512,7 +509,7 @@ void DIALOG_GENDRILL::OnGenReportFile( wxCommandEvent& event )
|
||||||
excellonWriter.SetFormat( !m_UnitDrillIsInch,
|
excellonWriter.SetFormat( !m_UnitDrillIsInch,
|
||||||
(EXCELLON_WRITER::zeros_fmt) m_ZerosFormat,
|
(EXCELLON_WRITER::zeros_fmt) m_ZerosFormat,
|
||||||
m_Precision.m_lhs, m_Precision.m_rhs );
|
m_Precision.m_lhs, m_Precision.m_rhs );
|
||||||
excellonWriter.SetOptions( m_Mirror, m_MinimalHeader, m_FileDrillOffset );
|
excellonWriter.SetOptions( m_Mirror, m_MinimalHeader, m_FileDrillOffset, m_Merge_PTH_NPTH );
|
||||||
|
|
||||||
bool success = excellonWriter.GenDrillReportFile( dlg.GetPath() );
|
bool success = excellonWriter.GenDrillReportFile( dlg.GetPath() );
|
||||||
|
|
||||||
|
@ -572,7 +569,7 @@ void DIALOG_GENDRILL::GenDrillMap( const wxString aFullFileNameWithoutExt,
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
wxLogMessage( wxT( "DIALOG_GENDRILL::GenDrillMap() error, fmt % unkown" ), format );
|
wxLogMessage( wxT( "DIALOG_GENDRILL::GenDrillMap() error, fmt % unknown" ), format );
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -581,15 +578,14 @@ void DIALOG_GENDRILL::GenDrillMap( const wxString aFullFileNameWithoutExt,
|
||||||
fullFilename << wxT(".") << ext;
|
fullFilename << wxT(".") << ext;
|
||||||
|
|
||||||
bool success = aExcellonWriter.GenDrillMapFile( fullFilename,
|
bool success = aExcellonWriter.GenDrillMapFile( fullFilename,
|
||||||
m_parent->GetPageSettings(),
|
m_parent->GetPageSettings(),
|
||||||
format );
|
format );
|
||||||
|
|
||||||
wxString msg;
|
wxString msg;
|
||||||
|
|
||||||
if( ! success )
|
if( ! success )
|
||||||
{
|
{
|
||||||
msg.Printf( _( "** Unable to create %s **\n" ),
|
msg.Printf( _( "** Unable to create %s **\n" ), GetChars( fullFilename ) );
|
||||||
GetChars( fullFilename ) );
|
|
||||||
m_messagesBox->AppendText( msg );
|
m_messagesBox->AppendText( msg );
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -598,5 +594,4 @@ void DIALOG_GENDRILL::GenDrillMap( const wxString aFullFileNameWithoutExt,
|
||||||
msg.Printf( _( "Plot: %s OK\n" ), GetChars( fullFilename ) );
|
msg.Printf( _( "Plot: %s OK\n" ), GetChars( fullFilename ) );
|
||||||
m_messagesBox->AppendText( msg );
|
m_messagesBox->AppendText( msg );
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -41,6 +41,7 @@ public:
|
||||||
static int m_ZerosFormat;
|
static int m_ZerosFormat;
|
||||||
static bool m_MinimalHeader;
|
static bool m_MinimalHeader;
|
||||||
static bool m_Mirror;
|
static bool m_Mirror;
|
||||||
|
static bool m_Merge_PTH_NPTH;
|
||||||
static bool m_DrillOriginIsAuxAxis; /* Axis selection (main / auxiliary)
|
static bool m_DrillOriginIsAuxAxis; /* Axis selection (main / auxiliary)
|
||||||
* for drill origin coordinates */
|
* for drill origin coordinates */
|
||||||
DRILL_PRECISION m_Precision; // Selected precision for drill files
|
DRILL_PRECISION m_Precision; // Selected precision for drill files
|
||||||
|
@ -69,15 +70,34 @@ private:
|
||||||
// event functions
|
// event functions
|
||||||
void OnSelDrillUnitsSelected( wxCommandEvent& event );
|
void OnSelDrillUnitsSelected( wxCommandEvent& event );
|
||||||
void OnSelZerosFmtSelected( wxCommandEvent& event );
|
void OnSelZerosFmtSelected( wxCommandEvent& event );
|
||||||
void OnGenDrillFile( wxCommandEvent& event );
|
void OnGenDrillFile( wxCommandEvent& event );
|
||||||
void OnGenMapFile( wxCommandEvent& event );
|
void OnGenMapFile( wxCommandEvent& event );
|
||||||
void OnGenReportFile( wxCommandEvent& event );
|
|
||||||
|
/*
|
||||||
|
* 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
|
||||||
|
*/
|
||||||
|
void OnGenReportFile( wxCommandEvent& event );
|
||||||
|
|
||||||
void OnCancelClick( wxCommandEvent& event );
|
void OnCancelClick( wxCommandEvent& event );
|
||||||
void OnOutputDirectoryBrowseClicked( wxCommandEvent& event );
|
void OnOutputDirectoryBrowseClicked( wxCommandEvent& event );
|
||||||
|
|
||||||
// Specific functions:
|
// Specific functions:
|
||||||
void SetParams( void );
|
void SetParams( void );
|
||||||
void GenDrillAndMapFiles(bool aGenDrill, bool aGenMap);
|
|
||||||
|
/**
|
||||||
|
* Function GenDrillAndMapFiles
|
||||||
|
* Calls the functions to create EXCELLON drill files and/or drill map files
|
||||||
|
* >When all holes are through holes, only one excellon file is created.
|
||||||
|
* >When there are some partial holes (some blind or buried vias),
|
||||||
|
* one excellon file is created, for all plated through holes,
|
||||||
|
* and one file per layer pair, which have one or more holes, excluding
|
||||||
|
* through holes, already in the first file.
|
||||||
|
* one file for all Not Plated through holes
|
||||||
|
*/
|
||||||
|
void GenDrillAndMapFiles( bool aGenDrill, bool aGenMap );
|
||||||
|
|
||||||
void GenDrillMap( const wxString aFileName,
|
void GenDrillMap( const wxString aFileName,
|
||||||
EXCELLON_WRITER& aExcellonWriter,
|
EXCELLON_WRITER& aExcellonWriter,
|
||||||
PlotFormat format );
|
PlotFormat format );
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
///////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////
|
||||||
// C++ code generated with wxFormBuilder (version Oct 8 2012)
|
// C++ code generated with wxFormBuilder (version Feb 26 2014)
|
||||||
// http://www.wxformbuilder.org/
|
// http://www.wxformbuilder.org/
|
||||||
//
|
//
|
||||||
// PLEASE DO "NOT" EDIT THIS FILE!
|
// PLEASE DO "NOT" EDIT THIS FILE!
|
||||||
|
@ -88,6 +88,9 @@ DIALOG_GENDRILL_BASE::DIALOG_GENDRILL_BASE( wxWindow* parent, wxWindowID id, con
|
||||||
m_Check_Minimal = new wxCheckBox( this, wxID_ANY, _("Minimal header"), wxDefaultPosition, wxDefaultSize, 0 );
|
m_Check_Minimal = new wxCheckBox( this, wxID_ANY, _("Minimal header"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||||
sbOptSizer->Add( m_Check_Minimal, 0, wxTOP|wxRIGHT|wxLEFT, 5 );
|
sbOptSizer->Add( m_Check_Minimal, 0, wxTOP|wxRIGHT|wxLEFT, 5 );
|
||||||
|
|
||||||
|
m_Check_Merge_PTH_NPTH = new wxCheckBox( this, wxID_ANY, _("Merge PTH and NPTH holes into one file"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||||
|
sbOptSizer->Add( m_Check_Merge_PTH_NPTH, 0, wxALL, 5 );
|
||||||
|
|
||||||
|
|
||||||
bMiddleBoxSizer->Add( sbOptSizer, 0, wxEXPAND|wxRIGHT|wxLEFT, 5 );
|
bMiddleBoxSizer->Add( sbOptSizer, 0, wxEXPAND|wxRIGHT|wxLEFT, 5 );
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
|
<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
|
||||||
<wxFormBuilder_Project>
|
<wxFormBuilder_Project>
|
||||||
<FileVersion major="1" minor="11" />
|
<FileVersion major="1" minor="12" />
|
||||||
<object class="Project" expanded="1">
|
<object class="Project" expanded="1">
|
||||||
<property name="class_decoration"></property>
|
<property name="class_decoration"></property>
|
||||||
<property name="code_generation">C++</property>
|
<property name="code_generation">C++</property>
|
||||||
|
@ -20,8 +20,10 @@
|
||||||
<property name="path">.</property>
|
<property name="path">.</property>
|
||||||
<property name="precompiled_header"></property>
|
<property name="precompiled_header"></property>
|
||||||
<property name="relative_path">1</property>
|
<property name="relative_path">1</property>
|
||||||
|
<property name="skip_lua_events">1</property>
|
||||||
<property name="skip_php_events">1</property>
|
<property name="skip_php_events">1</property>
|
||||||
<property name="skip_python_events">1</property>
|
<property name="skip_python_events">1</property>
|
||||||
|
<property name="ui_table">UI</property>
|
||||||
<property name="use_enum">0</property>
|
<property name="use_enum">0</property>
|
||||||
<property name="use_microsoft_bom">0</property>
|
<property name="use_microsoft_bom">0</property>
|
||||||
<object class="Dialog" expanded="1">
|
<object class="Dialog" expanded="1">
|
||||||
|
@ -879,6 +881,94 @@
|
||||||
<event name="OnUpdateUI"></event>
|
<event name="OnUpdateUI"></event>
|
||||||
</object>
|
</object>
|
||||||
</object>
|
</object>
|
||||||
|
<object class="sizeritem" expanded="1">
|
||||||
|
<property name="border">5</property>
|
||||||
|
<property name="flag">wxALL</property>
|
||||||
|
<property name="proportion">0</property>
|
||||||
|
<object class="wxCheckBox" expanded="1">
|
||||||
|
<property name="BottomDockable">1</property>
|
||||||
|
<property name="LeftDockable">1</property>
|
||||||
|
<property name="RightDockable">1</property>
|
||||||
|
<property name="TopDockable">1</property>
|
||||||
|
<property name="aui_layer"></property>
|
||||||
|
<property name="aui_name"></property>
|
||||||
|
<property name="aui_position"></property>
|
||||||
|
<property name="aui_row"></property>
|
||||||
|
<property name="best_size"></property>
|
||||||
|
<property name="bg"></property>
|
||||||
|
<property name="caption"></property>
|
||||||
|
<property name="caption_visible">1</property>
|
||||||
|
<property name="center_pane">0</property>
|
||||||
|
<property name="checked">0</property>
|
||||||
|
<property name="close_button">1</property>
|
||||||
|
<property name="context_help"></property>
|
||||||
|
<property name="context_menu">1</property>
|
||||||
|
<property name="default_pane">0</property>
|
||||||
|
<property name="dock">Dock</property>
|
||||||
|
<property name="dock_fixed">0</property>
|
||||||
|
<property name="docking">Left</property>
|
||||||
|
<property name="enabled">1</property>
|
||||||
|
<property name="fg"></property>
|
||||||
|
<property name="floatable">1</property>
|
||||||
|
<property name="font"></property>
|
||||||
|
<property name="gripper">0</property>
|
||||||
|
<property name="hidden">0</property>
|
||||||
|
<property name="id">wxID_ANY</property>
|
||||||
|
<property name="label">Merge PTH and NPTH holes into one file</property>
|
||||||
|
<property name="max_size"></property>
|
||||||
|
<property name="maximize_button">0</property>
|
||||||
|
<property name="maximum_size"></property>
|
||||||
|
<property name="min_size"></property>
|
||||||
|
<property name="minimize_button">0</property>
|
||||||
|
<property name="minimum_size"></property>
|
||||||
|
<property name="moveable">1</property>
|
||||||
|
<property name="name">m_Check_Merge_PTH_NPTH</property>
|
||||||
|
<property name="pane_border">1</property>
|
||||||
|
<property name="pane_position"></property>
|
||||||
|
<property name="pane_size"></property>
|
||||||
|
<property name="permission">protected</property>
|
||||||
|
<property name="pin_button">1</property>
|
||||||
|
<property name="pos"></property>
|
||||||
|
<property name="resize">Resizable</property>
|
||||||
|
<property name="show">1</property>
|
||||||
|
<property name="size"></property>
|
||||||
|
<property name="style"></property>
|
||||||
|
<property name="subclass"></property>
|
||||||
|
<property name="toolbar_pane">0</property>
|
||||||
|
<property name="tooltip"></property>
|
||||||
|
<property name="validator_data_type"></property>
|
||||||
|
<property name="validator_style">wxFILTER_NONE</property>
|
||||||
|
<property name="validator_type">wxDefaultValidator</property>
|
||||||
|
<property name="validator_variable"></property>
|
||||||
|
<property name="window_extra_style"></property>
|
||||||
|
<property name="window_name"></property>
|
||||||
|
<property name="window_style"></property>
|
||||||
|
<event name="OnChar"></event>
|
||||||
|
<event name="OnCheckBox"></event>
|
||||||
|
<event name="OnEnterWindow"></event>
|
||||||
|
<event name="OnEraseBackground"></event>
|
||||||
|
<event name="OnKeyDown"></event>
|
||||||
|
<event name="OnKeyUp"></event>
|
||||||
|
<event name="OnKillFocus"></event>
|
||||||
|
<event name="OnLeaveWindow"></event>
|
||||||
|
<event name="OnLeftDClick"></event>
|
||||||
|
<event name="OnLeftDown"></event>
|
||||||
|
<event name="OnLeftUp"></event>
|
||||||
|
<event name="OnMiddleDClick"></event>
|
||||||
|
<event name="OnMiddleDown"></event>
|
||||||
|
<event name="OnMiddleUp"></event>
|
||||||
|
<event name="OnMotion"></event>
|
||||||
|
<event name="OnMouseEvents"></event>
|
||||||
|
<event name="OnMouseWheel"></event>
|
||||||
|
<event name="OnPaint"></event>
|
||||||
|
<event name="OnRightDClick"></event>
|
||||||
|
<event name="OnRightDown"></event>
|
||||||
|
<event name="OnRightUp"></event>
|
||||||
|
<event name="OnSetFocus"></event>
|
||||||
|
<event name="OnSize"></event>
|
||||||
|
<event name="OnUpdateUI"></event>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
</object>
|
</object>
|
||||||
</object>
|
</object>
|
||||||
<object class="sizeritem" expanded="1">
|
<object class="sizeritem" expanded="1">
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
///////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////
|
||||||
// C++ code generated with wxFormBuilder (version Oct 8 2012)
|
// C++ code generated with wxFormBuilder (version Feb 26 2014)
|
||||||
// http://www.wxformbuilder.org/
|
// http://www.wxformbuilder.org/
|
||||||
//
|
//
|
||||||
// PLEASE DO "NOT" EDIT THIS FILE!
|
// PLEASE DO "NOT" EDIT THIS FILE!
|
||||||
|
@ -48,6 +48,7 @@ class DIALOG_GENDRILL_BASE : public DIALOG_SHIM
|
||||||
wxRadioBox* m_Choice_Drill_Map;
|
wxRadioBox* m_Choice_Drill_Map;
|
||||||
wxCheckBox* m_Check_Mirror;
|
wxCheckBox* m_Check_Mirror;
|
||||||
wxCheckBox* m_Check_Minimal;
|
wxCheckBox* m_Check_Minimal;
|
||||||
|
wxCheckBox* m_Check_Merge_PTH_NPTH;
|
||||||
wxRadioBox* m_Choice_Drill_Offset;
|
wxRadioBox* m_Choice_Drill_Offset;
|
||||||
wxStaticBoxSizer* m_DefaultViasDrillSizer;
|
wxStaticBoxSizer* m_DefaultViasDrillSizer;
|
||||||
wxStaticText* m_ViaDrillValue;
|
wxStaticText* m_ViaDrillValue;
|
||||||
|
|
|
@ -360,7 +360,7 @@ bool EXCELLON_WRITER::GenDrillReportFile( const wxString& aFullFileName )
|
||||||
for( ; ; )
|
for( ; ; )
|
||||||
{
|
{
|
||||||
BuildHolesList( layer1, layer2,
|
BuildHolesList( layer1, layer2,
|
||||||
gen_through_holes ? false : true, gen_NPTH_holes );
|
gen_through_holes ? false : true, gen_NPTH_holes, false);
|
||||||
|
|
||||||
totalHoleCount = 0;
|
totalHoleCount = 0;
|
||||||
|
|
||||||
|
|
|
@ -442,11 +442,13 @@ static bool CmpHoleDiameterValue( const HOLE_INFO& a, const HOLE_INFO& b )
|
||||||
* param aGenerateNPTH_list :
|
* param aGenerateNPTH_list :
|
||||||
* true to create NPTH only list (with no plated holes)
|
* true to create NPTH only list (with no plated holes)
|
||||||
* false to created plated holes list (with no NPTH )
|
* false to created plated holes list (with no NPTH )
|
||||||
|
* param aMergePTHNPTH : if true, merge PTH and NPTH holes into one file by treating all holes as PTH
|
||||||
*/
|
*/
|
||||||
void EXCELLON_WRITER::BuildHolesList( int aFirstLayer,
|
void EXCELLON_WRITER::BuildHolesList( int aFirstLayer,
|
||||||
int aLastLayer,
|
int aLastLayer,
|
||||||
bool aExcludeThroughHoles,
|
bool aExcludeThroughHoles,
|
||||||
bool aGenerateNPTH_list )
|
bool aGenerateNPTH_list,
|
||||||
|
bool aMergePTHNPTH )
|
||||||
{
|
{
|
||||||
HOLE_INFO new_hole;
|
HOLE_INFO new_hole;
|
||||||
int hole_value;
|
int hole_value;
|
||||||
|
@ -460,6 +462,11 @@ void EXCELLON_WRITER::BuildHolesList( int aFirstLayer,
|
||||||
EXCHG( aFirstLayer, aLastLayer );
|
EXCHG( aFirstLayer, aLastLayer );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if ( aGenerateNPTH_list && aMergePTHNPTH )
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
/* build hole list for vias
|
/* build hole list for vias
|
||||||
*/
|
*/
|
||||||
if( ! aGenerateNPTH_list ) // vias are always plated !
|
if( ! aGenerateNPTH_list ) // vias are always plated !
|
||||||
|
@ -507,7 +514,7 @@ void EXCELLON_WRITER::BuildHolesList( int aFirstLayer,
|
||||||
// Read and analyse pads
|
// Read and analyse pads
|
||||||
for( D_PAD* pad = module->Pads(); pad; pad = pad->Next() )
|
for( D_PAD* pad = module->Pads(); pad; pad = pad->Next() )
|
||||||
{
|
{
|
||||||
if( ! aGenerateNPTH_list && pad->GetAttribute() == PAD_HOLE_NOT_PLATED )
|
if( ! aGenerateNPTH_list && pad->GetAttribute() == PAD_HOLE_NOT_PLATED && ! aMergePTHNPTH )
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
if( aGenerateNPTH_list && pad->GetAttribute() != PAD_HOLE_NOT_PLATED )
|
if( aGenerateNPTH_list && pad->GetAttribute() != PAD_HOLE_NOT_PLATED )
|
||||||
|
|
|
@ -135,6 +135,7 @@ private:
|
||||||
// (i.e inches or mm)
|
// (i.e inches or mm)
|
||||||
bool m_mirror;
|
bool m_mirror;
|
||||||
wxPoint m_offset; // Drill offset ooordinates
|
wxPoint m_offset; // Drill offset ooordinates
|
||||||
|
bool m_mergePTHNPTH;
|
||||||
std::vector<HOLE_INFO> m_holeListBuffer; // Buffer containing holes
|
std::vector<HOLE_INFO> m_holeListBuffer; // Buffer containing holes
|
||||||
std::vector<DRILL_TOOL> m_toolListBuffer; // Buffer containing tools
|
std::vector<DRILL_TOOL> m_toolListBuffer; // Buffer containing tools
|
||||||
|
|
||||||
|
@ -146,6 +147,7 @@ public: EXCELLON_WRITER( BOARD* aPcb, wxPoint aOffset )
|
||||||
m_conversionUnits = 0.0001;
|
m_conversionUnits = 0.0001;
|
||||||
m_unitsDecimal = false;
|
m_unitsDecimal = false;
|
||||||
m_mirror = false;
|
m_mirror = false;
|
||||||
|
m_mergePTHNPTH = false;
|
||||||
m_minimalHeader = false;
|
m_minimalHeader = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -177,11 +179,12 @@ public: EXCELLON_WRITER( BOARD* aPcb, wxPoint aOffset )
|
||||||
* @param aMinimalHeader = true to use a minimal header (no comments, no info)
|
* @param aMinimalHeader = true to use a minimal header (no comments, no info)
|
||||||
* @param aOffset = drill coordinates offset
|
* @param aOffset = drill coordinates offset
|
||||||
*/
|
*/
|
||||||
void SetOptions( bool aMirror, bool aMinimalHeader, wxPoint aOffset )
|
void SetOptions( bool aMirror, bool aMinimalHeader, wxPoint aOffset, bool aMergePTHNPTH )
|
||||||
{
|
{
|
||||||
m_mirror = aMirror;
|
m_mirror = aMirror;
|
||||||
m_offset = aOffset;
|
m_offset = aOffset;
|
||||||
m_minimalHeader = aMinimalHeader;
|
m_minimalHeader = aMinimalHeader;
|
||||||
|
m_mergePTHNPTH = aMergePTHNPTH;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -199,7 +202,8 @@ public: EXCELLON_WRITER( BOARD* aPcb, wxPoint aOffset )
|
||||||
*/
|
*/
|
||||||
void BuildHolesList( int aFirstLayer, int aLastLayer,
|
void BuildHolesList( int aFirstLayer, int aLastLayer,
|
||||||
bool aExcludeThroughHoles,
|
bool aExcludeThroughHoles,
|
||||||
bool aGenerateNPTH_list );
|
bool aGenerateNPTH_list,
|
||||||
|
bool aMergePTHNPTH );
|
||||||
|
|
||||||
int GetHolesCount() const { return m_holeListBuffer.size(); }
|
int GetHolesCount() const { return m_holeListBuffer.size(); }
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue