Fix parsing of track/via user sizes from legacy boards

Fixes https://gitlab.com/kicad/code/kicad/-/issues/6134
This commit is contained in:
Jon Evans 2021-01-26 21:51:36 -05:00
parent 30f3a7d124
commit bea310569b
4 changed files with 18 additions and 5 deletions

View File

@ -152,7 +152,7 @@ bool NESTED_SETTINGS::SaveToFile( const wxString& aDirectory, bool aForce )
} }
void NESTED_SETTINGS::SetParent( JSON_SETTINGS* aParent ) void NESTED_SETTINGS::SetParent( JSON_SETTINGS* aParent, bool aLoadFromFile )
{ {
m_parent = aParent; m_parent = aParent;
@ -161,6 +161,7 @@ void NESTED_SETTINGS::SetParent( JSON_SETTINGS* aParent )
m_parent->AddNestedSettings( this ); m_parent->AddNestedSettings( this );
// In case we were created after the parent's ctor // In case we were created after the parent's ctor
if( aLoadFromFile )
LoadFromFile(); LoadFromFile();
} }
} }

View File

@ -49,7 +49,7 @@ public:
*/ */
bool SaveToFile( const wxString& aDirectory = "", bool aForce = false ) override; bool SaveToFile( const wxString& aDirectory = "", bool aForce = false ) override;
void SetParent( JSON_SETTINGS* aParent ); void SetParent( JSON_SETTINGS* aParent, bool aLoadFromFile = true );
JSON_SETTINGS* GetParent() JSON_SETTINGS* GetParent()
{ {

View File

@ -151,8 +151,9 @@ void BOARD::SetProject( PROJECT* aProject )
// Link the design settings object to the project file // Link the design settings object to the project file
project.m_BoardSettings = &GetDesignSettings(); project.m_BoardSettings = &GetDesignSettings();
// Set parent, which also will load the values from JSON stored in the project // Set parent, which also will load the values from JSON stored in the project if we don't
project.m_BoardSettings->SetParent( &project ); // have legacy design settings loaded already
project.m_BoardSettings->SetParent( &project, !m_LegacyDesignSettingsLoaded );
// The DesignSettings' netclasses pointer will be pointing to its internal netclasses // The DesignSettings' netclasses pointer will be pointing to its internal netclasses
// list at this point. If we loaded anything into it from a legacy board file then we // list at this point. If we loaded anything into it from a legacy board file then we

View File

@ -1574,10 +1574,16 @@ void PCB_PARSER::parseSetup()
break; break;
case T_user_trace_width: case T_user_trace_width:
{
// Make room for the netclass value
if( designSettings.m_TrackWidthList.empty() )
designSettings.m_TrackWidthList.emplace_back( 0 );
designSettings.m_TrackWidthList.push_back( parseBoardUnits( T_user_trace_width ) ); designSettings.m_TrackWidthList.push_back( parseBoardUnits( T_user_trace_width ) );
m_board->m_LegacyDesignSettingsLoaded = true; m_board->m_LegacyDesignSettingsLoaded = true;
NeedRIGHT(); NeedRIGHT();
break; break;
}
case T_trace_clearance: case T_trace_clearance:
defaultNetClass->SetClearance( parseBoardUnits( T_trace_clearance ) ); defaultNetClass->SetClearance( parseBoardUnits( T_trace_clearance ) );
@ -1656,6 +1662,11 @@ void PCB_PARSER::parseSetup()
{ {
int viaSize = parseBoardUnits( "user via size" ); int viaSize = parseBoardUnits( "user via size" );
int viaDrill = parseBoardUnits( "user via drill" ); int viaDrill = parseBoardUnits( "user via drill" );
// Make room for the netclass value
if( designSettings.m_ViasDimensionsList.empty() )
designSettings.m_ViasDimensionsList.emplace_back( VIA_DIMENSION( 0, 0 ) );
designSettings.m_ViasDimensionsList.emplace_back( VIA_DIMENSION( viaSize, viaDrill ) ); designSettings.m_ViasDimensionsList.emplace_back( VIA_DIMENSION( viaSize, viaDrill ) );
m_board->m_LegacyDesignSettingsLoaded = true; m_board->m_LegacyDesignSettingsLoaded = true;
NeedRIGHT(); NeedRIGHT();