KiCad PCB EDA Suite
CLI::EXPORT_PCB_POS_COMMAND Class Reference

#include <command_export_pcb_pos.h>

Inheritance diagram for CLI::EXPORT_PCB_POS_COMMAND:
CLI::EXPORT_PCB_BASE_COMMAND CLI::COMMAND

Public Member Functions

 EXPORT_PCB_POS_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_pos.h.

Constructor & Destructor Documentation

◆ EXPORT_PCB_POS_COMMAND()

CLI::EXPORT_PCB_POS_COMMAND::EXPORT_PCB_POS_COMMAND ( )

Definition at line 42 of file command_export_pcb_pos.cpp.

43{
44 m_argParser.add_description( UTF8STDSTR( _( "Generate Position File" ) ) );
45
46 m_argParser.add_argument( ARG_SIDE )
47 .default_value( std::string( "both" ) )
48 .help( UTF8STDSTR( _(
49 "Valid options: front,back,both. Gerber format only supports \"both\"." ) ) );
50
51 m_argParser.add_argument( ARG_FORMAT )
52 .default_value( std::string( "ascii" ) )
53 .help( UTF8STDSTR( _( "Valid options: ascii,csv,gerber" ) ) );
54
55 m_argParser.add_argument( ARG_UNITS )
56 .default_value( std::string( "in" ) )
57 .help( UTF8STDSTR( _( "Output units; ascii or csv format only; valid options: in,mm" ) ) );
58
59 m_argParser.add_argument( ARG_NEGATE_BOTTOM_X )
60 .help( UTF8STDSTR( _( "Use negative X coordinates for footprints on bottom layer "
61 "(ascii or csv formats only)" ) ) )
62 .implicit_value( true )
63 .default_value( false );
64
66 .help( UTF8STDSTR( _( "Use drill/place file origin (ascii or csv only)" ) ) )
67 .implicit_value( true )
68 .default_value( false );
69
70 m_argParser.add_argument( ARG_SMD_ONLY )
71 .help( UTF8STDSTR( _( "Include only SMD footprints (ascii or csv only)" ) ) )
72 .implicit_value( true )
73 .default_value( false );
74
76 .help( UTF8STDSTR(
77 _( "Exclude all footprints with through-hole pads (ascii or csv only)" ) ) )
78 .implicit_value( true )
79 .default_value( false );
80
82 .help( UTF8STDSTR( _( "Include board edge layer (gerber only)" ) ) )
83 .implicit_value( true )
84 .default_value( false );
85}
argparse::ArgumentParser m_argParser
Definition: command.h:68
#define UTF8STDSTR(s)
Definition: command.h:27
#define ARG_EXCLUDE_FOOTPRINTS_TH
#define ARG_GERBER_BOARD_EDGE
#define ARG_NEGATE_BOTTOM_X
#define ARG_UNITS
#define ARG_USE_DRILL_FILE_ORIGIN
#define ARG_SIDE
#define ARG_SMD_ONLY
#define ARG_FORMAT
#define _(s)
EXPORT_PCB_BASE_COMMAND(const std::string &aName, bool aOutputIsDir=false)

References _, ARG_EXCLUDE_FOOTPRINTS_TH, ARG_FORMAT, ARG_GERBER_BOARD_EDGE, ARG_NEGATE_BOTTOM_X, ARG_SIDE, ARG_SMD_ONLY, ARG_UNITS, ARG_USE_DRILL_FILE_ORIGIN, 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_POS_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 88 of file command_export_pcb_pos.cpp.

89{
90 int baseExit = EXPORT_PCB_BASE_COMMAND::doPerform( aKiway );
91 if( baseExit != EXIT_CODES::OK )
92 return baseExit;
93
94 std::unique_ptr<JOB_EXPORT_PCB_POS> aPosJob( new JOB_EXPORT_PCB_POS( true ) );
95
96 aPosJob->m_filename = FROM_UTF8( m_argParser.get<std::string>( ARG_INPUT ).c_str() );
97 aPosJob->m_outputFile = FROM_UTF8( m_argParser.get<std::string>( ARG_OUTPUT ).c_str() );
98
99 if( !wxFile::Exists( aPosJob->m_filename ) )
100 {
101 wxFprintf( stderr, _( "Board file does not exist or is not accessible\n" ) );
103 }
104
105 aPosJob->m_negateBottomX = m_argParser.get<bool>( ARG_NEGATE_BOTTOM_X );
106 aPosJob->m_smdOnly = m_argParser.get<bool>( ARG_SMD_ONLY );
107 aPosJob->m_excludeFootprintsWithTh = m_argParser.get<bool>( ARG_EXCLUDE_FOOTPRINTS_TH );
108 aPosJob->m_useDrillPlaceFileOrigin = m_argParser.get<bool>( ARG_USE_DRILL_FILE_ORIGIN );
109 aPosJob->m_gerberBoardEdge = m_argParser.get<bool>( ARG_GERBER_BOARD_EDGE );
110
111 wxString format = FROM_UTF8( m_argParser.get<std::string>( ARG_FORMAT ).c_str() );
112 if( format == wxS( "ascii" ) )
113 {
114 aPosJob->m_format = JOB_EXPORT_PCB_POS::FORMAT::ASCII;
115 }
116 else if( format == wxS( "csv" ) )
117 {
118 aPosJob->m_format = JOB_EXPORT_PCB_POS::FORMAT::CSV;
119 }
120 else if( format == wxS( "gerber" ) )
121 {
122 aPosJob->m_format = JOB_EXPORT_PCB_POS::FORMAT::GERBER;
123 }
124 else
125 {
126 wxFprintf( stderr, _( "Invalid format\n" ) );
128 }
129
130 wxString units = FROM_UTF8( m_argParser.get<std::string>( ARG_UNITS ).c_str() );
131
132 if( units == wxS( "mm" ) )
133 {
135 }
136 else if( units == wxS( "in" ) )
137 {
138 aPosJob->m_units = JOB_EXPORT_PCB_POS::UNITS::INCHES;
139 }
140 else
141 {
142 wxFprintf( stderr, _( "Invalid units specified\n" ) );
144 }
145
146 wxString side = FROM_UTF8( m_argParser.get<std::string>( ARG_SIDE ).c_str() );
147
148 if( side == wxS( "both" ) )
149 {
150 if( aPosJob->m_format == JOB_EXPORT_PCB_POS::FORMAT::GERBER )
151 {
152 wxFprintf( stderr, _( "\"both\" not supported for gerber format\n" ) );
154 }
155
156 aPosJob->m_side = JOB_EXPORT_PCB_POS::SIDE::BOTH;
157 }
158 else if( side == wxS( "front" ) )
159 {
160 aPosJob->m_side = JOB_EXPORT_PCB_POS::SIDE::FRONT;
161 }
162 else if( side == wxS( "back" ) )
163 {
164 aPosJob->m_side = JOB_EXPORT_PCB_POS::SIDE::BACK;
165 }
166 else
167 {
168 wxFprintf( stderr, _( "Invalid side specified\n" ) );
170 }
171
172
174 int exitCode = aKiway.ProcessJob( KIWAY::FACE_PCB, aPosJob.get() );
175
176 return exitCode;
177}
int ProcessJob(KIWAY::FACE_T aFace, JOB *job)
Definition: kiway.cpp:660
@ FACE_PCB
pcbnew DSO
Definition: kiway.h:287
Instantiate the current locale within a scope in which you are expecting exceptions to be thrown.
Definition: locale_io.h:41
#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
static const int OK
Definition: exit_codes.h:30
static const int ERR_INVALID_INPUT_FILE
Definition: exit_codes.h:33
std::vector< FAB_LAYER_COLOR > dummy
int doPerform(KIWAY &aKiway) override
The internal handler that should be overloaded to implement command specific processing and work.

References _, ARG_EXCLUDE_FOOTPRINTS_TH, ARG_FORMAT, ARG_GERBER_BOARD_EDGE, ARG_INPUT, ARG_NEGATE_BOTTOM_X, ARG_OUTPUT, ARG_SIDE, ARG_SMD_ONLY, ARG_UNITS, ARG_USE_DRILL_FILE_ORIGIN, JOB_EXPORT_PCB_POS::ASCII, JOB_EXPORT_PCB_POS::BACK, JOB_EXPORT_PCB_POS::BOTH, JOB_EXPORT_PCB_POS::CSV, CLI::EXPORT_PCB_BASE_COMMAND::doPerform(), dummy, CLI::EXIT_CODES::ERR_ARGS, CLI::EXIT_CODES::ERR_INVALID_INPUT_FILE, KIWAY::FACE_PCB, FROM_UTF8(), JOB_EXPORT_PCB_POS::FRONT, JOB_EXPORT_PCB_POS::GERBER, JOB_EXPORT_PCB_POS::INCHES, JOB_EXPORT_PCB_POS::MILLIMETERS, CLI::EXIT_CODES::OK, and KIWAY::ProcessJob().

◆ 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: