GenCAD export: added a switch to generate unique pin names
This commit is contained in:
parent
c3c5205393
commit
6ba33c8489
|
@ -127,7 +127,8 @@ void DIALOG_GENCAD_EXPORT_OPTIONS::createOptCheckboxes()
|
||||||
{
|
{
|
||||||
std::map<GENCAD_EXPORT_OPT, wxString> opts =
|
std::map<GENCAD_EXPORT_OPT, wxString> opts =
|
||||||
{
|
{
|
||||||
{ FLIP_BOTTOM_LAYERS, _( "Flip layer stack for bottom components" ) }
|
{ FLIP_BOTTOM_LAYERS, _( "Flip layer stack for bottom components" ) },
|
||||||
|
{ UNIQUE_PIN_NAMES, _( "Generate unique pin names" ) }
|
||||||
};
|
};
|
||||||
|
|
||||||
for( const auto& option : opts )
|
for( const auto& option : opts )
|
||||||
|
|
|
@ -33,7 +33,8 @@ class wxTextCtrl;
|
||||||
///> Settings for GenCAD exporter
|
///> Settings for GenCAD exporter
|
||||||
enum GENCAD_EXPORT_OPT
|
enum GENCAD_EXPORT_OPT
|
||||||
{
|
{
|
||||||
FLIP_BOTTOM_LAYERS // invert layer stack for bottom components
|
FLIP_BOTTOM_LAYERS, // invert layer stack for bottom components
|
||||||
|
UNIQUE_PIN_NAMES // generate unique pin names
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -226,6 +226,7 @@ const static double SCALE_FACTOR = 1000.0 * IU_PER_MILS;
|
||||||
|
|
||||||
// Export options
|
// Export options
|
||||||
bool flipBottomLayers;
|
bool flipBottomLayers;
|
||||||
|
bool uniquePins;
|
||||||
|
|
||||||
/* Two helper functions to calculate coordinates of modules in gencad values
|
/* Two helper functions to calculate coordinates of modules in gencad values
|
||||||
* (GenCAD Y axis from bottom to top)
|
* (GenCAD Y axis from bottom to top)
|
||||||
|
@ -261,6 +262,7 @@ void PCB_EDIT_FRAME::ExportToGenCAD( wxCommandEvent& aEvent )
|
||||||
|
|
||||||
// Get options
|
// Get options
|
||||||
flipBottomLayers = optionsDialog.GetOption( FLIP_BOTTOM_LAYERS );
|
flipBottomLayers = optionsDialog.GetOption( FLIP_BOTTOM_LAYERS );
|
||||||
|
uniquePins = optionsDialog.GetOption( UNIQUE_PIN_NAMES );
|
||||||
|
|
||||||
// Switch the locale to standard C (needed to print floating point numbers)
|
// Switch the locale to standard C (needed to print floating point numbers)
|
||||||
LOCALE_IO toggle;
|
LOCALE_IO toggle;
|
||||||
|
@ -637,6 +639,9 @@ static void CreateShapesSection( FILE* aFile, BOARD* aPcb )
|
||||||
|
|
||||||
for( module = aPcb->m_Modules; module; module = module->Next() )
|
for( module = aPcb->m_Modules; module; module = module->Next() )
|
||||||
{
|
{
|
||||||
|
// already emitted pins to check for duplicates
|
||||||
|
std::set<wxString> pins;
|
||||||
|
|
||||||
FootprintWriteShape( aFile, module );
|
FootprintWriteShape( aFile, module );
|
||||||
|
|
||||||
for( pad = module->PadsList(); pad; pad = pad->Next() )
|
for( pad = module->PadsList(); pad; pad = pad->Next() )
|
||||||
|
@ -662,6 +667,23 @@ static void CreateShapesSection( FILE* aFile, BOARD* aPcb )
|
||||||
if( pinname.IsEmpty() )
|
if( pinname.IsEmpty() )
|
||||||
pinname = wxT( "none" );
|
pinname = wxT( "none" );
|
||||||
|
|
||||||
|
if( uniquePins )
|
||||||
|
{
|
||||||
|
int suffix = 0;
|
||||||
|
wxString origPinname( pinname );
|
||||||
|
|
||||||
|
auto it = pins.find( pinname );
|
||||||
|
|
||||||
|
while( it != pins.end() )
|
||||||
|
{
|
||||||
|
pinname = wxString::Format( "%s_%d", origPinname, suffix );
|
||||||
|
++suffix;
|
||||||
|
it = pins.find( pinname );
|
||||||
|
}
|
||||||
|
|
||||||
|
pins.insert( pinname );
|
||||||
|
}
|
||||||
|
|
||||||
double orient = pad->GetOrientation() - module->GetOrientation();
|
double orient = pad->GetOrientation() - module->GetOrientation();
|
||||||
NORMALIZE_ANGLE_POS( orient );
|
NORMALIZE_ANGLE_POS( orient );
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue