27#include <boost/algorithm/string/predicate.hpp>
28#include <boost/algorithm/string/trim.hpp>
35 return fmt::format(
"__{}", aItem.
refName );
51 result.append( fmt::format(
".model {} ", aItem.
modelName ) );
52 size_t indentLength = result.length();
58 result.append( fmt::format(
" level={}", spiceInfo.
level ) );
60 if ( !spiceInfo.
version.empty() )
61 result.append( fmt::format(
" version={}", spiceInfo.
version ) );
63 result.append(
"\n" );
67 if( param.info.isSpiceInstanceParam )
73 if( !param.info.spiceModelName.empty() )
75 name = param.info.spiceModelName;
81 if( boost::ends_with( param.info.name,
"_" ) )
82 name = param.info.name.substr( 0, param.info.name.length() - 1 );
84 name = param.info.name;
92 result.append( fmt::format(
"+{}{}={}\n",
93 std::string( indentLength - 1,
' ' ),
109 item.
pinNumbers.push_back( fmt::format(
"{}", i + 1 ) );
123 result.append(
"\n" );
145 pin.symbolPinNumber );
149 result.append( fmt::format(
" NC-{}-{}", aItem.
refName, ncCounter++ ) );
154 result.append( fmt::format(
" {}", aItem.
pinNetNames.at( symbolPinIndex ) ) );
164 return fmt::format(
" {}", aItem.
modelName );
174 std::string
name = param.info.spiceInstanceName.empty() ? param.info.name
175 : param.info.spiceInstanceName;
179 result.append( fmt::format(
" {}={}",
name, value ) );
195 return { fmt::format(
"I({})",
ItemName( aItem ) ) };
201 std::string spiceCode =
ModelLine( aItem );
203 std::string itemLine =
ItemLine( aItem );
205 if( spiceCode !=
"" )
206 spiceCode.append(
"\n" );
208 spiceCode.append( itemLine );
209 return boost::trim_copy( spiceCode );
215 std::vector<std::reference_wrapper<const SIM_MODEL::PARAM>> instanceParams;
219 if( param.info.isSpiceInstanceParam )
220 instanceParams.emplace_back( param );
223 return instanceParams;
virtual bool requiresSpiceModelLine(const SPICE_ITEM &aItem) const
SPICE_INFO GetSpiceInfo() const
std::vector< std::reference_wrapper< const PARAM > > GetParams() const
static std::string ToSpice(const std::string &aString)
virtual std::string ItemName(const SPICE_ITEM &aItem) const
virtual std::vector< std::reference_wrapper< const SIM_MODEL::PARAM > > GetInstanceParams() const
virtual std::string ItemPins(const SPICE_ITEM &aItem) const
virtual std::string ItemLine(const SPICE_ITEM &aItem) const
virtual std::string ModelLine(const SPICE_ITEM &aItem) const
virtual std::vector< std::reference_wrapper< const SIM_MODEL::PIN > > GetPins() const
virtual std::string ItemParams() const
const SIM_MODEL & m_model
virtual std::string Preview(const SPICE_ITEM &aItem) const
virtual std::string ItemModelName(const SPICE_ITEM &aItem) const
virtual std::string TunerCommand(const SPICE_ITEM &aItem, double aValue) const
virtual std::string ModelName(const SPICE_ITEM &aItem) const
virtual std::vector< std::string > CurrentNames(const SPICE_ITEM &aItem) const
static float distance(const SFVEC2UI &a, const SFVEC2UI &b)
std::vector< std::string > pinNetNames
std::string baseModelName
std::vector< std::string > pinNumbers