20#include <wx/filename.h>
31std::vector<wxString>
UniqueNames(
const std::vector<wxString>& aBases,
const std::set<wxString>& aReserved,
38 wxString
LegalName(
const wxString& aName )
const;
40 wxString
Join(
const std::vector<wxString>& aNames )
const;
42 std::vector<std::pair<wxString, wxString>>
m_names;
170int IpcViaType(
const DRILL_OPERATION& aOperation,
bool aTop );
171bool ViaInPad(
const PCB_VIA& aVia );
186wxString
Double2String(
const ODB_FORMAT& aFormat,
double aVal );
190wxString
Data2String(
const ODB_FORMAT& aFormat,
double aVal );
194std::pair<wxString, wxString>
AddXY(
const ODB_FORMAT& aFormat,
const VECTOR2I& aVec );
203 static std::map<T, std::string>&
GetMap()
205 static_assert( std::is_enum_v<T>,
"Template parameter T must be an enum type" );
207 static std::map<T, std::string> map = []()
209 std::map<T, std::string>
result;
211 if constexpr( std::is_same_v<T, ODB_POLARITY> )
217 if constexpr( std::is_same_v<T, ODB_CONTEXT> )
223 if constexpr( std::is_same_v<T, ODB_TYPE> )
243 if constexpr( std::is_same_v<T, ODB_SUBTYPE> )
257 if constexpr( std::is_same_v<T, ODB_DIELECTRIC_TYPE> )
264 if constexpr( std::is_same_v<T, ODB_FID_TYPE> )
282 auto it = map.find( value );
283 if( it != map.end() )
289 throw std::out_of_range(
"Enum value not found in map" );
379 template <
typename T>
440 ODB_DRILL_TOOLS(
const wxString& aUnits,
const wxString& aThickness =
"0",
441 const wxString& aUserParams = wxEmptyString );
451 const wxString& aType2 = wxT(
"STANDARD" ) );
constexpr double PCB_IU_PER_MM
Pcbnew IU is 1 nanometer.
constexpr double PL_IU_PER_MM
Internal units in micron (should be enough).
Information pertinent to a Pcbnew printed circuit board.
Store all of the related component information found in a netlist.
static std::map< T, std::string > & GetMap()
ODB_FILE_WRITER & operator=(ODB_FILE_WRITER const &)=delete
ODB_TREE_WRITER & m_treeWriter
ODB_FILE_WRITER(ODB_FILE_WRITER &&)=delete
virtual ~ODB_FILE_WRITER()
ODB_FILE_WRITER(ODB_TREE_WRITER &aTreeWriter, const wxString &aFileName)
ODB_FILE_WRITER & operator=(ODB_FILE_WRITER &&)=delete
ODB_FILE_WRITER(ODB_FILE_WRITER const &)=delete
void CreateODBFile(const wxString &aFileName)
std::ostream & GetStream()
ARRAY_PROXY(ARRAY_PROXY &&)=delete
ARRAY_PROXY & operator=(ARRAY_PROXY const &)=delete
ARRAY_PROXY & operator=(ARRAY_PROXY &&)=delete
ARRAY_PROXY(ARRAY_PROXY const &)=delete
ARRAY_PROXY(ODB_TEXT_WRITER &aWriter, const std::string &aStr)
ODB_TEXT_WRITER & m_writer
void WriteEquationLine(const std::string &var, int value)
ARRAY_PROXY MakeArrayProxy(const std::string &aStr)
virtual ~ODB_TEXT_WRITER()
void write_line_enum(const std::string &var, const T &value)
ODB_TEXT_WRITER(std::ostream &aStream)
void BeginArray(const std::string &a)
const wxString GetRootPath() const
void CreateEntityDirectory(const wxString &aPareDir, const wxString &aSubDir=wxEmptyString)
ODB_FILE_WRITER CreateFileProxy(const wxString &aFileName)
void SetRootPath(const wxString &aDir)
ODB_TREE_WRITER(const wxString &aPareDir, const wxString &aSubDir)
virtual ~ODB_TREE_WRITER()
void SetCurrentPath(const wxString &aDir)
const wxString GetCurrentPath() const
ODB_TREE_WRITER(const wxString &aDir)
Hole classification and drill span, shared by the drill model and the drill writers.
PCB_LAYER_ID
A quick note on layer IDs:
SECTION
Schema sections of the IPC-2581C function mode table, Table 4 p 80.
std::string Enum2String(T value)
wxString GenLegalComponentName(const wxString &aStr)
std::vector< ODB_TYPE > OverridableLayerTypes(PCB_LAYER_ID aLayer)
Matrix types a layer override may assign to aLayer.
std::pair< wxString, wxString > AddXY(const ODB_FORMAT &aFormat, const VECTOR2I &aVec)
void RemoveWhitespace(wxString &aStr)
std::vector< wxString > UniqueNames(const std::vector< wxString > &aBases, const std::set< wxString > &aReserved, size_t aMaxLength)
wxString GenODBString(const wxString &aStr)
wxString Data2String(const ODB_FORMAT &aFormat, double aVal)
int IpcViaType(const DRILL_OPERATION &aOperation, bool aTop)
std::pair< wxString, wxString > AddRelativeXY(const ODB_FORMAT &aFormat, const VECTOR2I &aVec)
wxString GenLegalEntityName(const wxString &aStr)
wxString GenLegalNetName(const wxString &aStr)
bool ViaInPad(const PCB_VIA &aVia)
VECTOR2I GetShapePosition(const PCB_SHAPE &aShape)
wxString SymDouble2String(const ODB_FORMAT &aFormat, double aVal)
wxString Double2String(const ODB_FORMAT &aFormat, double aVal)
std::tuple< ODB_AUX_LAYER_TYPE, PCB_LAYER_ID, PCB_LAYER_ID > ODB_AUX_LAYER_KEY
One machining action, which is also one NC hit and one tool assignment.
std::vector< std::pair< wxString, wxString > > m_names
wxString Join(const std::vector< wxString > &aNames) const
wxString LegalName(const wxString &aName) const
wxString SelectedName(const wxString &aName) const
std::vector< wxString > m_renamed
static VARIANT_NAMES Build(const std::vector< wxString > &aNames)
What a caller asks of one ODB++ export.
std::optional< wxString > m_variant
Unset exports the current variant of the board.
JOB_EXPORT_PCB_ODB::ORIGIN m_origin
std::optional< FAB::SECTION_SET > m_sections
Unset exports every section.
wxString m_productModelName
std::vector< ODB_LAYER_OVERRIDE > m_layerOverrides
wxString result
Test unit parsing edge cases and error handling.
VECTOR2< int32_t > VECTOR2I