diff --git a/eeschema/sim/sim_model.cpp b/eeschema/sim/sim_model.cpp index 266dbd4b71..73d8bde7e9 100644 --- a/eeschema/sim/sim_model.cpp +++ b/eeschema/sim/sim_model.cpp @@ -1051,7 +1051,7 @@ void SIM_MODEL::doWriteFields( std::vector& aFields ) const } -bool SIM_MODEL::requiresSpiceModelLine() const +bool SIM_MODEL::requiresSpiceModelLine( const SPICE_ITEM& aItem ) const { for( const PARAM& param : GetParams() ) { diff --git a/eeschema/sim/sim_model.h b/eeschema/sim/sim_model.h index 9d5e75ed0e..1363f33a29 100644 --- a/eeschema/sim/sim_model.h +++ b/eeschema/sim/sim_model.h @@ -40,6 +40,7 @@ #include class SIM_LIBRARY; +class SPICE_ITEM; class SPICE_GENERATOR; class SIM_MODEL_SERIALIZER; class PROJECT; @@ -524,7 +525,7 @@ private: template void doWriteFields( std::vector& aFields ) const; - virtual bool requiresSpiceModelLine() const; + virtual bool requiresSpiceModelLine( const SPICE_ITEM& aItem ) const; protected: std::vector m_params; diff --git a/eeschema/sim/sim_model_kibis.h b/eeschema/sim/sim_model_kibis.h index 613d3374b6..d121d96001 100644 --- a/eeschema/sim/sim_model_kibis.h +++ b/eeschema/sim/sim_model_kibis.h @@ -89,7 +89,7 @@ public: bool m_enableDiff; private: - bool requiresSpiceModelLine() const override { return true; } + bool requiresSpiceModelLine( const SPICE_ITEM& aItem ) const override { return true; } static std::vector makeParamInfos( TYPE aType ); static std::vector makeDcWaveformParamInfos(); diff --git a/eeschema/sim/sim_model_ngspice.cpp b/eeschema/sim/sim_model_ngspice.cpp index 2d1a31adde..6d29232ee1 100644 --- a/eeschema/sim/sim_model_ngspice.cpp +++ b/eeschema/sim/sim_model_ngspice.cpp @@ -215,8 +215,12 @@ bool SIM_MODEL_NGSPICE::canSilentlyIgnoreParam( const std::string& aParamName ) } -bool SIM_MODEL_NGSPICE::requiresSpiceModelLine() const +bool SIM_MODEL_NGSPICE::requiresSpiceModelLine( const SPICE_ITEM& aItem ) const { + // Model must be written if there's no base model or the base model is an internal model + if( !m_baseModel || aItem.baseModelName == "" ) + return true; + for( int ii = 0; ii < GetParamCount(); ++ii ) { const PARAM& param = m_params[ii]; @@ -229,10 +233,6 @@ bool SIM_MODEL_NGSPICE::requiresSpiceModelLine() const if ( param.value == "" ) continue; - // Any non-empty parameter must be written if there's no base model - if( !m_baseModel ) - return true; - const SIM_MODEL_NGSPICE* baseModel = dynamic_cast( m_baseModel ); std::string baseValue = baseModel->m_params[ii].value; diff --git a/eeschema/sim/sim_model_ngspice.h b/eeschema/sim/sim_model_ngspice.h index e41fa1143d..deb39f10df 100644 --- a/eeschema/sim/sim_model_ngspice.h +++ b/eeschema/sim/sim_model_ngspice.h @@ -109,7 +109,7 @@ protected: int doFindParam( const std::string& aParamName ) const override; private: - bool requiresSpiceModelLine() const override; + bool requiresSpiceModelLine( const SPICE_ITEM& aItem ) const override; bool canSilentlyIgnoreParam( const std::string& aParamName ); diff --git a/eeschema/sim/sim_model_raw_spice.h b/eeschema/sim/sim_model_raw_spice.h index 6aa0ff4929..6bd87c3b44 100644 --- a/eeschema/sim/sim_model_raw_spice.h +++ b/eeschema/sim/sim_model_raw_spice.h @@ -79,7 +79,7 @@ public: private: static std::vector makeParamInfos(); - bool requiresSpiceModelLine() const override { return false; } + bool requiresSpiceModelLine( const SPICE_ITEM& aItem ) const override { return false; } private: std::string m_spiceCode; diff --git a/eeschema/sim/sim_model_subckt.h b/eeschema/sim/sim_model_subckt.h index c6fa108e55..e0d8515144 100644 --- a/eeschema/sim/sim_model_subckt.h +++ b/eeschema/sim/sim_model_subckt.h @@ -60,7 +60,7 @@ public: std::string GetSpiceCode() const; private: - bool requiresSpiceModelLine() const override { return true; } + bool requiresSpiceModelLine( const SPICE_ITEM& aItem ) const override { return true; } std::vector> m_paramInfos; }; diff --git a/eeschema/sim/sim_model_switch.h b/eeschema/sim/sim_model_switch.h index eac9dfe15f..bc8b033c48 100644 --- a/eeschema/sim/sim_model_switch.h +++ b/eeschema/sim/sim_model_switch.h @@ -51,7 +51,7 @@ public: } private: - bool requiresSpiceModelLine() const override { return true; } + bool requiresSpiceModelLine( const SPICE_ITEM& aItem ) const override { return true; } static const std::vector makeSwVParamInfos(); static const std::vector makeSwIParamInfos(); diff --git a/eeschema/sim/spice_generator.cpp b/eeschema/sim/spice_generator.cpp index 2e952f10a1..3add2bed00 100644 --- a/eeschema/sim/spice_generator.cpp +++ b/eeschema/sim/spice_generator.cpp @@ -44,7 +44,7 @@ std::string SPICE_GENERATOR::ModelName( const SPICE_ITEM& aItem ) const std::string SPICE_GENERATOR::ModelLine( const SPICE_ITEM& aItem ) const { - if( !m_model.requiresSpiceModelLine() ) + if( !m_model.requiresSpiceModelLine( aItem ) ) return ""; std::string result;