diff --git a/eeschema/sim/sim_model.cpp b/eeschema/sim/sim_model.cpp index af456bf904..2cac0fa945 100644 --- a/eeschema/sim/sim_model.cpp +++ b/eeschema/sim/sim_model.cpp @@ -993,26 +993,7 @@ wxString SIM_MODEL::GenerateSpiceItemLine( const wxString& aRefName, { wxString result; result << GenerateSpiceItemName( aRefName ) << " "; - - int ncCounter = 0; - - for( const PIN& pin : GetSpicePins() ) - { - auto it = std::find( aSymbolPinNumbers.begin(), aSymbolPinNumbers.end(), - pin.symbolPinNumber ); - - if( it == aSymbolPinNumbers.end() ) - { - LOCALE_IO toggle; - result << wxString::Format( "NC-%s-%u ", aRefName, ncCounter++ ); - } - else - { - long symbolPinIndex = std::distance( aSymbolPinNumbers.begin(), it ); - wxString netName = aPinNetNames.at( symbolPinIndex ); - result << netName << " "; - } - } + result << GenerateSpiceItemPins( aRefName, aModelName, aSymbolPinNumbers, aPinNetNames ); if( requiresSpiceModel() ) result << aModelName << " "; @@ -1265,6 +1246,35 @@ void SIM_MODEL::WriteInferredDataFields( std::vector& aFields, const wxString } +wxString SIM_MODEL::GenerateSpiceItemPins( const wxString& aRefName, + const wxString& aModelName, + const std::vector& aSymbolPinNumbers, + const std::vector& aPinNetNames ) const +{ + wxString result; + int ncCounter = 0; + + for( const PIN& pin : GetSpicePins() ) + { + auto it = std::find( aSymbolPinNumbers.begin(), aSymbolPinNumbers.end(), + pin.symbolPinNumber ); + + if( it == aSymbolPinNumbers.end() ) + { + LOCALE_IO toggle; + result << wxString::Format( "NC-%s-%u ", aRefName, ncCounter++ ); + } + else + { + long symbolPinIndex = std::distance( aSymbolPinNumbers.begin(), it ); + result << aPinNetNames.at( symbolPinIndex ) << " "; + } + } + + return result; +} + + wxString SIM_MODEL::GenerateSpiceItemParamValuePair( const PARAM& aParam, bool& aIsFirst ) const { wxString result; diff --git a/eeschema/sim/sim_model.h b/eeschema/sim/sim_model.h index c144f10645..b41f578c13 100644 --- a/eeschema/sim/sim_model.h +++ b/eeschema/sim/sim_model.h @@ -498,7 +498,6 @@ public: virtual wxString GenerateSpiceModelLine( const wxString& aModelName ) const; virtual wxString GenerateSpiceItemName( const wxString& aRefName ) const; - wxString GenerateSpiceItemLine( const wxString& aRefName, const wxString& aModelName ) const; wxString GenerateSpiceItemLine( const wxString& aRefName, const wxString& aModelName, const std::vector& aSymbolPinNumbers ) const; @@ -573,6 +572,10 @@ protected: template void WriteInferredDataFields( std::vector& aFields, const wxString& aValue ) const; + virtual wxString GenerateSpiceItemPins( const wxString& aRefName, + const wxString& aModelName, + const std::vector& aSymbolPinNumbers, + const std::vector& aPinNetNames ) const; virtual wxString GenerateSpiceItemParamValuePair( const PARAM& aParam, bool& aIsFirst ) const; virtual wxString GenerateParamValuePair( const PARAM& aParam, bool& aIsFirst ) const; diff --git a/eeschema/sim/sim_model_spice.cpp b/eeschema/sim/sim_model_spice.cpp index bf5bc741d4..b3778b3c2d 100644 --- a/eeschema/sim/sim_model_spice.cpp +++ b/eeschema/sim/sim_model_spice.cpp @@ -91,36 +91,13 @@ wxString SIM_MODEL_SPICE::GenerateSpiceItemName( const wxString& aRefName ) cons { wxString elementType = GetParam( static_cast( SPICE_PARAM::TYPE ) ).value->ToString(); - if( !aRefName.IsEmpty() && aRefName.StartsWith( elementType ) ) + if( aRefName != "" && aRefName.StartsWith( elementType ) ) return aRefName; else return elementType + aRefName; } -wxString SIM_MODEL_SPICE::GenerateSpiceItemLine( const wxString& aRefName, - const wxString& aModelName, - const std::vector& aSymbolPinNumbers, - const std::vector& aPinNetNames ) const -{ - wxString result; - result << GenerateSpiceItemName( aRefName ) << " "; - - for( const PIN& pin : GetPins() ) - { - auto it = std::find( aSymbolPinNumbers.begin(), - aSymbolPinNumbers.end(), - pin.symbolPinNumber ); - long symbolPinIndex = std::distance( aSymbolPinNumbers.begin(), it ); - - result << aPinNetNames.at( symbolPinIndex ) << " "; - } - - result << GetParam( static_cast( SPICE_PARAM::MODEL ) ).value->ToString() << "\n"; - return result; -} - - void SIM_MODEL_SPICE::CreatePins( unsigned aSymbolPinCount ) { for( unsigned symbolPinIndex = 0; symbolPinIndex < aSymbolPinCount; ++symbolPinIndex ) @@ -128,6 +105,39 @@ void SIM_MODEL_SPICE::CreatePins( unsigned aSymbolPinCount ) } +wxString SIM_MODEL_SPICE::GenerateSpiceItemPins( const wxString& aRefName, + const wxString& aModelName, + const std::vector& aSymbolPinNumbers, + const std::vector& aPinNetNames ) const +{ + wxString result; + + for( const PIN& pin : GetSpicePins() ) + { + auto it = std::find( aSymbolPinNumbers.begin(), aSymbolPinNumbers.end(), + pin.symbolPinNumber ); + + if( it != aSymbolPinNumbers.end() ) + { + long symbolPinIndex = std::distance( aSymbolPinNumbers.begin(), it ); + result << aPinNetNames.at( symbolPinIndex ) << " "; + } + } + + return result; +} + + +wxString SIM_MODEL_SPICE::GenerateSpiceItemParamValuePair( const PARAM& aParam, + bool& aIsFirst ) const +{ + if( aParam.info.name != "model" ) + return ""; + + return aParam.value->ToString(); +} + + bool SIM_MODEL_SPICE::SetParamFromSpiceCode( const wxString& aParamName, const wxString& aParamValue, SIM_VALUE_GRAMMAR::NOTATION aNotation ) @@ -173,6 +183,7 @@ std::vector SIM_MODEL_SPICE::makeParamInfos() paramInfo.category = SIM_MODEL::PARAM::CATEGORY::PRINCIPAL; paramInfo.defaultValue = ""; paramInfo.description = "Spice element type"; + paramInfo.isSpiceInstanceParam = true; paramInfos.push_back( paramInfo ); break; @@ -184,6 +195,7 @@ std::vector SIM_MODEL_SPICE::makeParamInfos() paramInfo.category = SIM_MODEL::PARAM::CATEGORY::PRINCIPAL; paramInfo.defaultValue = ""; paramInfo.description = "Model name or value"; + paramInfo.isSpiceInstanceParam = true; paramInfos.push_back( paramInfo ); break; @@ -195,6 +207,7 @@ std::vector SIM_MODEL_SPICE::makeParamInfos() paramInfo.category = SIM_MODEL::PARAM::CATEGORY::PRINCIPAL; paramInfo.defaultValue = ""; paramInfo.description = "Library path to include"; + paramInfo.isSpiceInstanceParam = true; paramInfos.push_back( paramInfo ); break; diff --git a/eeschema/sim/sim_model_spice.h b/eeschema/sim/sim_model_spice.h index 53634ee3c4..20956c8ac6 100644 --- a/eeschema/sim/sim_model_spice.h +++ b/eeschema/sim/sim_model_spice.h @@ -56,13 +56,16 @@ public: wxString GenerateSpiceModelLine( const wxString& aModelName ) const override; wxString GenerateSpiceItemName( const wxString& aRefName ) const override; - wxString GenerateSpiceItemLine( const wxString& aRefName, + +protected: + void CreatePins( unsigned aSymbolPinCount ) override; + + wxString GenerateSpiceItemPins( const wxString& aRefName, const wxString& aModelName, const std::vector& aSymbolPinNumbers, const std::vector& aPinNetNames ) const override; -protected: - void CreatePins( unsigned aSymbolPinCount ) override; + wxString GenerateSpiceItemParamValuePair( const PARAM& aParam, bool& aIsFirst ) const override; bool SetParamFromSpiceCode( const wxString& aParamName, const wxString& aParamValue, SIM_VALUE_GRAMMAR::NOTATION aNotation @@ -76,6 +79,8 @@ private: void parseLegacyPinsField( unsigned aSymbolPinCount, const wxString& aLegacyPinsField ); + bool requiresSpiceModel() const override { return false; } + std::vector> m_paramInfos; };