diff --git a/eeschema/sim/netlist_exporter_pspice_sim.cpp b/eeschema/sim/netlist_exporter_pspice_sim.cpp index 23c39bba25..15071ac573 100644 --- a/eeschema/sim/netlist_exporter_pspice_sim.cpp +++ b/eeschema/sim/netlist_exporter_pspice_sim.cpp @@ -23,6 +23,7 @@ */ #include "netlist_exporter_pspice_sim.h" +#include "sim_types.h" wxString NETLIST_EXPORTER_PSPICE_SIM::GetSheetSimCommand() { @@ -32,7 +33,7 @@ wxString NETLIST_EXPORTER_PSPICE_SIM::GetSheetSimCommand() for( const auto& dir : GetDirectives() ) { - if( isSimCommand( dir ) ) + if( IsSimCommand( dir ) ) simCmd += wxString::Format( "%s\r\n", dir ); } @@ -40,6 +41,31 @@ wxString NETLIST_EXPORTER_PSPICE_SIM::GetSheetSimCommand() } +SIM_TYPE NETLIST_EXPORTER_PSPICE_SIM::GetSimType() +{ + return CommandToSimType( m_simCommand.IsEmpty() ? GetSheetSimCommand() : m_simCommand ); +} + + +SIM_TYPE NETLIST_EXPORTER_PSPICE_SIM::CommandToSimType( const wxString& aCmd ) +{ + const std::map simCmds = { + { ".ac", ST_AC }, { ".dc", ST_DC }, { ".disto", ST_DISTORTION }, { ".noise", ST_NOISE }, + { ".op", ST_OP }, { ".pz", ST_POLE_ZERO }, { ".sens", ST_SENSITIVITY }, { ".tf", ST_TRANS_FUNC }, + { ".tran", ST_TRANSIENT } + }; + wxString lcaseCmd = aCmd.Lower(); + + for( const auto& c : simCmds ) + { + if( lcaseCmd.StartsWith( c.first ) ) + return c.second; + } + + return ST_UNKNOWN; +} + + void NETLIST_EXPORTER_PSPICE_SIM::writeDirectives( OUTPUTFORMATTER* aFormatter, unsigned aCtl ) const { if( m_simCommand.IsEmpty() ) @@ -51,29 +77,10 @@ void NETLIST_EXPORTER_PSPICE_SIM::writeDirectives( OUTPUTFORMATTER* aFormatter, // Dump all directives, but simulation commands for( const auto& dir : GetDirectives() ) { - if( !isSimCommand( dir ) ) + if( !IsSimCommand( dir ) ) aFormatter->Print( 0, "%s\n", (const char*) dir.c_str() ); } // Finish with our custom simulation command aFormatter->Print( 0, "%s\n", (const char*) m_simCommand.c_str() ); } - - -bool NETLIST_EXPORTER_PSPICE_SIM::isSimCommand( const wxString& aCmd ) -{ - const std::vector simCmds = { - ".ac", ".dc", ".disto", ".noise", ".op", ".pz", ".sens", ".tf", ".tran", ".pss" - }; - - wxString lcaseCmd = aCmd.Lower(); - - for( const auto& c : simCmds ) - { - if( lcaseCmd.StartsWith( c ) ) - return true; - } - - return false; -} - diff --git a/eeschema/sim/netlist_exporter_pspice_sim.h b/eeschema/sim/netlist_exporter_pspice_sim.h index ae1943e558..d939f56858 100644 --- a/eeschema/sim/netlist_exporter_pspice_sim.h +++ b/eeschema/sim/netlist_exporter_pspice_sim.h @@ -26,6 +26,7 @@ #define NETLIST_EXPORTER_PSPICE_SIM_H #include +#include "sim_types.h" /// Special netlist exporter flavor that allows to override simulation commands class NETLIST_EXPORTER_PSPICE_SIM : public NETLIST_EXPORTER_PSPICE @@ -52,13 +53,21 @@ public: m_simCommand.Clear(); } + SIM_TYPE GetSimType(); + wxString GetSheetSimCommand(); + static bool IsSimCommand( const wxString& aCmd ) + { + return CommandToSimType( aCmd ) != ST_UNKNOWN; + } + + static SIM_TYPE CommandToSimType( const wxString& aCmd ); + protected: void writeDirectives( OUTPUTFORMATTER* aFormatter, unsigned aCtl ) const override; private: - static bool isSimCommand( const wxString& aCmd ); ///> Overridden simulation command wxString m_simCommand; diff --git a/eeschema/sim/sim_types.h b/eeschema/sim/sim_types.h new file mode 100644 index 0000000000..82291be205 --- /dev/null +++ b/eeschema/sim/sim_types.h @@ -0,0 +1,34 @@ +/* + * This program source code file is part of KiCad, a free EDA CAD application. + * + * Copyright (C) 2016 CERN + * @author Maciej Suminski + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, you may find one here: + * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html + * or you may search the http://www.gnu.org website for the version 2 license, + * or you may write to the Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA + */ + +#ifndef SIM_TYPES_H +#define SIM_TYPES_H + +///> Possible simulation types +enum SIM_TYPE { + ST_UNKNOWN, ST_AC, ST_DC, ST_DISTORTION, ST_NOISE, ST_OP, + ST_POLE_ZERO, ST_SENSITIVITY, ST_TRANS_FUNC, ST_TRANSIENT +}; + +#endif /* SIM_TYPES_H */