KiCad PCB EDA Suite
CLI::EXPORT_PCB_DRILL_COMMAND Class Reference

#include <command_export_pcb_drill.h>

Inheritance diagram for CLI::EXPORT_PCB_DRILL_COMMAND:
CLI::EXPORT_PCB_BASE_COMMAND CLI::COMMAND

Public Member Functions

 EXPORT_PCB_DRILL_COMMAND ()
 
int Perform (KIWAY &aKiway)
 Entry point to processing commands from args and doing work. More...
 
argparse::ArgumentParser & GetArgParser ()
 
const std::string & GetName () const
 
void PrintHelp ()
 

Protected Member Functions

int doPerform (KIWAY &aKiway) override
 The internal handler that should be overloaded to implement command specific processing and work. More...
 
LSET convertLayerStringList (wxString &aLayerString, bool &aLayerArgSet) const
 
void addLayerArg (bool aRequire)
 

Protected Attributes

std::map< std::string, LSETm_layerMasks
 
LSET m_selectedLayers
 
bool m_selectedLayersSet
 
bool m_hasLayerArg
 
bool m_requireLayers
 
std::string m_name
 
argparse::ArgumentParser m_argParser
 

Detailed Description

Definition at line 28 of file command_export_pcb_drill.h.

Constructor & Destructor Documentation

◆ EXPORT_PCB_DRILL_COMMAND()

CLI::EXPORT_PCB_DRILL_COMMAND::EXPORT_PCB_DRILL_COMMAND ( )

Definition at line 43 of file command_export_pcb_drill.cpp.

43 : EXPORT_PCB_BASE_COMMAND( "drill" )
44{
45 m_argParser.add_argument( ARG_FORMAT )
46 .default_value( std::string( "excellon" ) )
47 .help( UTF8STDSTR( _( "Valid options excellon, gerber." ) ) );
48
50 .default_value( std::string( "decimal" ) )
51 .help( UTF8STDSTR(
52 _( "Valid options are: decimal,suppressleading,suppresstrailing,keep." ) ) );
53
54 m_argParser.add_argument( ARG_DRILL_ORIGIN )
55 .default_value( std::string( "absolute" ) )
56 .help( UTF8STDSTR( _( "Valid options are: absolute,plot" ) ) );
57
58 m_argParser.add_argument( "-u", ARG_UNITS )
59 .default_value( std::string( "in" ) )
60 .help( UTF8STDSTR( _( "Output units, valid options:in,mm" ) ) );
61
62 m_argParser.add_argument( ARG_EXCELLON_MIRRORY )
63 .help( UTF8STDSTR( _( "Mirror Y axis" ) ) )
64 .implicit_value( true )
65 .default_value( false );
66
68 .help( UTF8STDSTR( _( "Minimal header" ) ) )
69 .implicit_value( true )
70 .default_value( false );
71
73 .help( UTF8STDSTR( _( "PTH and NPTH in separate files" ) ) )
74 .implicit_value( true )
75 .default_value( false );
76
77 m_argParser.add_argument( ARG_GENERATE_MAP )
78 .help( UTF8STDSTR( _( "Generate map / summary of drill hits" ) ) )
79 .implicit_value( true )
80 .default_value( false );
81
82 m_argParser.add_argument( ARG_MAP_FORMAT )
83 .default_value( std::string( "pdf" ) )
84 .help( UTF8STDSTR( _( "Valid options: pdf,gerberx2,ps,dxf,svg" ) ) );
85
86 m_argParser.add_argument( ARG_SEPARATE_FILES )
87 .help( UTF8STDSTR( _( "Generate independent files for NPTH and PTH holes" ) ) )
88 .implicit_value( true )
89 .default_value( false );
90
91 m_argParser.add_argument( ARG_GERBER_PRECISION )
92 .help( UTF8STDSTR( _( "Precision of gerber coordinates (5 or 6)" ) ) )
93 .default_value( 5 );
94}
argparse::ArgumentParser m_argParser
Definition: command.h:68
#define UTF8STDSTR(s)
Definition: command.h:27
#define ARG_EXCELLON_SEPARATE_TH
#define ARG_GENERATE_MAP
#define ARG_MAP_FORMAT
#define ARG_SEPARATE_FILES
#define ARG_EXCELLON_MINIMALHEAD
#define ARG_EXCELLON_ZEROS_FORMAT
#define ARG_EXCELLON_MIRRORY
#define ARG_UNITS
#define ARG_GERBER_PRECISION
#define ARG_DRILL_ORIGIN
#define ARG_FORMAT
#define _(s)
EXPORT_PCB_BASE_COMMAND(const std::string &aName, bool aOutputIsDir=false)

References _, ARG_DRILL_ORIGIN, ARG_EXCELLON_MINIMALHEAD, ARG_EXCELLON_MIRRORY, ARG_EXCELLON_SEPARATE_TH, ARG_EXCELLON_ZEROS_FORMAT, ARG_FORMAT, ARG_GENERATE_MAP, ARG_GERBER_PRECISION, ARG_MAP_FORMAT, ARG_SEPARATE_FILES, ARG_UNITS, CLI::COMMAND::m_argParser, and UTF8STDSTR.

Member Function Documentation

◆ addLayerArg()

void CLI::EXPORT_PCB_BASE_COMMAND::addLayerArg ( bool  aRequire)
protectedinherited

Definition at line 102 of file command_export_pcb_base.cpp.

103{
104 m_argParser.add_argument( "-l", ARG_LAYERS )
105 .default_value( std::string() )
106 .help( UTF8STDSTR(
107 _( "Comma separated list of untranslated layer names to include such as "
108 "F.Cu,B.Cu" ) ) );
109
110 m_hasLayerArg = true;
111 m_requireLayers = aRequire;
112}
#define ARG_LAYERS

References _, ARG_LAYERS, and UTF8STDSTR.

Referenced by CLI::EXPORT_PCB_DXF_COMMAND::EXPORT_PCB_DXF_COMMAND(), CLI::EXPORT_PCB_GERBER_COMMAND::EXPORT_PCB_GERBER_COMMAND(), CLI::EXPORT_PCB_PDF_COMMAND::EXPORT_PCB_PDF_COMMAND(), CLI::EXPORT_PCB_SVG_COMMAND::EXPORT_PCB_SVG_COMMAND(), and CLI::FP_EXPORT_SVG_COMMAND::FP_EXPORT_SVG_COMMAND().

◆ convertLayerStringList()

LSET CLI::EXPORT_PCB_BASE_COMMAND::convertLayerStringList ( wxString &  aLayerString,
bool &  aLayerArgSet 
) const
protectedinherited

Definition at line 75 of file command_export_pcb_base.cpp.

76{
77 LSET layerMask;
78
79 if( !aLayerString.IsEmpty() )
80 {
81 layerMask.reset();
82 wxStringTokenizer layerTokens( aLayerString, "," );
83 while( layerTokens.HasMoreTokens() )
84 {
85 std::string token = TO_UTF8( layerTokens.GetNextToken() );
86 if( m_layerMasks.count( token ) )
87 {
88 layerMask |= m_layerMasks.at(token);
89 aLayerArgSet = true;
90 }
91 else
92 {
93 wxFprintf( stderr, _( "Invalid layer name \"%s\"\n" ), token );
94 }
95 }
96 }
97
98 return layerMask;
99}
LSET is a set of PCB_LAYER_IDs.
Definition: layer_ids.h:532
#define TO_UTF8(wxstring)
Convert a wxString to a UTF8 encoded C string for all wxWidgets build modes.
Definition: macros.h:96
std::map< std::string, LSET > m_layerMasks

References _, and TO_UTF8.

◆ doPerform()

int CLI::EXPORT_PCB_DRILL_COMMAND::doPerform ( KIWAY aKiway)
overrideprotectedvirtual

The internal handler that should be overloaded to implement command specific processing and work.

If not overloaded, the command will simply emit the help options by default

Reimplemented from CLI::EXPORT_PCB_BASE_COMMAND.

Definition at line 97 of file command_export_pcb_drill.cpp.

98{
99 std::unique_ptr<JOB_EXPORT_PCB_DRILL> drillJob( new JOB_EXPORT_PCB_DRILL( true ) );
100
101 drillJob->m_filename = FROM_UTF8( m_argParser.get<std::string>( ARG_INPUT ).c_str() );
102 drillJob->m_outputDir = FROM_UTF8( m_argParser.get<std::string>( ARG_OUTPUT ).c_str() );
103
104 if( !drillJob->m_outputDir.IsEmpty() )
105 {
106 wxFileName fn( drillJob->m_outputDir );
107 if( !fn.IsDir() )
108 {
109 wxFprintf( stderr, _( "Output must be a directory\n" ) );
111 }
112 }
113
114 wxString format = FROM_UTF8( m_argParser.get<std::string>( ARG_FORMAT ).c_str() );
115 if( format == "excellon" )
116 {
118 }
119 else if( format == "gerber" )
120 {
122 }
123 else
124 {
125 wxFprintf( stderr, _( "Invalid drill format\n" ) );
127 }
128
129 wxString units = FROM_UTF8( m_argParser.get<std::string>( ARG_UNITS ).c_str() );
130
131 if( units == wxS( "mm" ) )
132 {
133 drillJob->m_drillUnits = JOB_EXPORT_PCB_DRILL::DRILL_UNITS::MILLIMETERS;
134 }
135 else if( units == wxS( "in" ) )
136 {
137 drillJob->m_drillUnits = JOB_EXPORT_PCB_DRILL::DRILL_UNITS::INCHES;
138 }
139 else
140 {
141 wxFprintf( stderr, _( "Invalid units specified\n" ) );
143 }
144
145 wxString zeroFormat = FROM_UTF8( m_argParser.get<std::string>( ARG_EXCELLON_ZEROS_FORMAT ).c_str() );
146
147 if( zeroFormat == wxS( "decimal" ) )
148 {
149 drillJob->m_zeroFormat = JOB_EXPORT_PCB_DRILL::ZEROS_FORMAT::DECIMAL;
150 }
151 else if( zeroFormat == wxS( "suppressleading" ) )
152 {
154 }
155 else if( zeroFormat == wxS( "suppresstrailing" ) )
156 {
158 }
159 else if( zeroFormat == wxS( "keep" ) )
160 {
161 drillJob->m_zeroFormat = JOB_EXPORT_PCB_DRILL::ZEROS_FORMAT::KEEP_ZEROS;
162 }
163 else
164 {
165 wxFprintf( stderr, _( "Invalid zeros format specified\n" ) );
167 }
168
169 wxString mapFormat = FROM_UTF8( m_argParser.get<std::string>( ARG_MAP_FORMAT ).c_str() );
170
171 if( mapFormat == wxS( "pdf" ) )
172 {
173 drillJob->m_mapFormat = JOB_EXPORT_PCB_DRILL::MAP_FORMAT::PDF;
174 }
175 else if( mapFormat == wxS( "ps" ) )
176 {
177 drillJob->m_mapFormat = JOB_EXPORT_PCB_DRILL::MAP_FORMAT::POSTSCRIPT;
178 }
179 else if( mapFormat == wxS( "gerberx2" ) )
180 {
181 drillJob->m_mapFormat = JOB_EXPORT_PCB_DRILL::MAP_FORMAT::GERBER_X2;
182 }
183 else if( mapFormat == wxS( "dxf" ) )
184 {
185 drillJob->m_mapFormat = JOB_EXPORT_PCB_DRILL::MAP_FORMAT::DXF;
186 }
187 else if( mapFormat == wxS( "svg" ) )
188 {
189 drillJob->m_mapFormat = JOB_EXPORT_PCB_DRILL::MAP_FORMAT::SVG;
190 }
191 else
192 {
193 wxFprintf( stderr, _( "Invalid map format specified\n" ) );
195 }
196
197 wxString origin = FROM_UTF8( m_argParser.get<std::string>( ARG_DRILL_ORIGIN ).c_str() );
198
199 if( origin == wxS( "absolute" ) )
200 {
201 drillJob->m_drillOrigin = JOB_EXPORT_PCB_DRILL::DRILL_ORIGIN::ABSOLUTE;
202 }
203 else if( origin == wxS( "plot" ) )
204 {
205 drillJob->m_drillOrigin = JOB_EXPORT_PCB_DRILL::DRILL_ORIGIN::PLOT;
206 }
207 else
208 {
209 wxFprintf( stderr, _( "Invalid origin mode specified\n" ) );
211 }
212
213 drillJob->m_excellonMirrorY = m_argParser.get<bool>( ARG_EXCELLON_MIRRORY );
214 drillJob->m_excellonMinimalHeader = m_argParser.get<bool>( ARG_EXCELLON_MINIMALHEAD );
215 drillJob->m_excellonCombinePTHNPTH = !m_argParser.get<bool>( ARG_EXCELLON_SEPARATE_TH );
216 drillJob->m_generateMap = m_argParser.get<bool>( ARG_GENERATE_MAP );
217
218 if( drillJob->m_gerberPrecision != 5 && drillJob->m_gerberPrecision != 6 )
219 {
220 wxFprintf( stderr, _( "Gerber coordinate precision should be either 5 or 6\n" ) );
222 }
223
224 int exitCode = aKiway.ProcessJob( KIWAY::FACE_PCB, drillJob.get() );
225
226 return exitCode;
227}
int ProcessJob(KIWAY::FACE_T aFace, JOB *job)
Definition: kiway.cpp:660
@ FACE_PCB
pcbnew DSO
Definition: kiway.h:287
#define ARG_OUTPUT
#define ARG_INPUT
static wxString FROM_UTF8(const char *cstring)
Convert a UTF8 encoded C string to a wxString for all wxWidgets build modes.
Definition: macros.h:110
static const int ERR_ARGS
Definition: exit_codes.h:31

References _, JOB_EXPORT_PCB_DRILL::ABSOLUTE, ARG_DRILL_ORIGIN, ARG_EXCELLON_MINIMALHEAD, ARG_EXCELLON_MIRRORY, ARG_EXCELLON_SEPARATE_TH, ARG_EXCELLON_ZEROS_FORMAT, ARG_FORMAT, ARG_GENERATE_MAP, ARG_INPUT, ARG_MAP_FORMAT, ARG_OUTPUT, ARG_UNITS, JOB_EXPORT_PCB_DRILL::DECIMAL, JOB_EXPORT_PCB_DRILL::DXF, CLI::EXIT_CODES::ERR_ARGS, JOB_EXPORT_PCB_DRILL::EXCELLON, KIWAY::FACE_PCB, FROM_UTF8(), JOB_EXPORT_PCB_DRILL::GERBER, JOB_EXPORT_PCB_DRILL::GERBER_X2, JOB_EXPORT_PCB_DRILL::INCHES, JOB_EXPORT_PCB_DRILL::KEEP_ZEROS, JOB_EXPORT_PCB_DRILL::MILLIMETERS, JOB_EXPORT_PCB_DRILL::PDF, JOB_EXPORT_PCB_DRILL::PLOT, JOB_EXPORT_PCB_DRILL::POSTSCRIPT, KIWAY::ProcessJob(), JOB_EXPORT_PCB_DRILL::SUPPRESS_LEADING, JOB_EXPORT_PCB_DRILL::SUPPRESS_TRAILING, and JOB_EXPORT_PCB_DRILL::SVG.

◆ GetArgParser()

argparse::ArgumentParser & CLI::COMMAND::GetArgParser ( )
inlineinherited

Definition at line 54 of file command.h.

54{ return m_argParser; }

References CLI::COMMAND::m_argParser.

Referenced by recurseArgParserBuild(), and recurseArgParserSubCommandUsed().

◆ GetName()

const std::string & CLI::COMMAND::GetName ( void  ) const
inlineinherited

Definition at line 55 of file command.h.

55{ return m_name; }
std::string m_name
Definition: command.h:67

References CLI::COMMAND::m_name.

Referenced by recurseArgParserSubCommandUsed().

◆ Perform()

int CLI::COMMAND::Perform ( KIWAY aKiway)
inherited

Entry point to processing commands from args and doing work.

Definition at line 49 of file command.cpp.

50{
51 if( m_argParser[ARG_HELP] == true )
52 {
53 PrintHelp();
54
55 return 0;
56 }
57
58 return doPerform( aKiway );
59}
virtual int doPerform(KIWAY &aKiway)
The internal handler that should be overloaded to implement command specific processing and work.
Definition: command.cpp:62
void PrintHelp()
Definition: command.cpp:41
#define ARG_HELP
Definition: command.h:30

References ARG_HELP.

◆ PrintHelp()

void CLI::COMMAND::PrintHelp ( )
inherited

Definition at line 41 of file command.cpp.

42{
43 std::stringstream ss;
44 ss << m_argParser;
45 wxPrintf( FROM_UTF8( ss.str().c_str() ) );
46}

References FROM_UTF8().

Member Data Documentation

◆ m_argParser

◆ m_hasLayerArg

bool CLI::EXPORT_PCB_BASE_COMMAND::m_hasLayerArg
protectedinherited

◆ m_layerMasks

std::map<std::string, LSET> CLI::EXPORT_PCB_BASE_COMMAND::m_layerMasks
protectedinherited

◆ m_name

std::string CLI::COMMAND::m_name
protectedinherited

Definition at line 67 of file command.h.

Referenced by CLI::COMMAND::GetName().

◆ m_requireLayers

bool CLI::EXPORT_PCB_BASE_COMMAND::m_requireLayers
protectedinherited

◆ m_selectedLayers

LSET CLI::EXPORT_PCB_BASE_COMMAND::m_selectedLayers
protectedinherited

Definition at line 51 of file command_export_pcb_base.h.

◆ m_selectedLayersSet

bool CLI::EXPORT_PCB_BASE_COMMAND::m_selectedLayersSet
protectedinherited

The documentation for this class was generated from the following files: