eeschema: remove TRACE_DESC from SIM_WORKBOOK
This commit is contained in:
parent
3ff670d2a4
commit
917e329bdf
|
@ -86,13 +86,8 @@ SIM_NOPLOT_PANEL::SIM_NOPLOT_PANEL( wxString aCommand, wxWindow* parent, wxWindo
|
||||||
m_textInfo->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), wxFONTFAMILY_DEFAULT,
|
m_textInfo->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), wxFONTFAMILY_DEFAULT,
|
||||||
wxFONTSTYLE_NORMAL, wxFONTWEIGHT_BOLD, false, wxEmptyString ) );
|
wxFONTSTYLE_NORMAL, wxFONTWEIGHT_BOLD, false, wxEmptyString ) );
|
||||||
m_textInfo->SetForegroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_GRAYTEXT ) );
|
m_textInfo->SetForegroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_GRAYTEXT ) );
|
||||||
|
|
||||||
//ST_UNKNOWN serves purpose of a welcome panel
|
|
||||||
m_textInfo->SetLabel(
|
m_textInfo->SetLabel(
|
||||||
( GetType() == ST_UNKNOWN )
|
_( "This simulation provide no plots. Please refer to console window for results" ) );
|
||||||
? _( "Start the simulation by clicking the Run Simulation button" )
|
|
||||||
: _( "This simulation provide no plots. Please refer to console window for "
|
|
||||||
"results" ) );
|
|
||||||
|
|
||||||
m_sizer->Add( m_textInfo, 1, wxALL | wxEXPAND, 5 );
|
m_sizer->Add( m_textInfo, 1, wxALL | wxEXPAND, 5 );
|
||||||
m_sizer->Add( 0, 1, 1, wxEXPAND, 5 );
|
m_sizer->Add( 0, 1, 1, wxEXPAND, 5 );
|
||||||
|
|
|
@ -649,26 +649,22 @@ void SIM_PLOT_FRAME::addPlot( const wxString& aName, SIM_PLOT_TYPE aType, const
|
||||||
if( !plotPanel ) // Something is wrong
|
if( !plotPanel ) // Something is wrong
|
||||||
return;
|
return;
|
||||||
|
|
||||||
TRACE_DESC descriptor( *m_exporter, aName, aType, aParam );
|
|
||||||
|
|
||||||
bool updated = false;
|
bool updated = false;
|
||||||
SIM_PLOT_TYPE xAxisType = GetXAxisType( simType );
|
SIM_PLOT_TYPE xAxisType = GetXAxisType( simType );
|
||||||
|
|
||||||
if( xAxisType == SPT_LIN_FREQUENCY || xAxisType == SPT_LOG_FREQUENCY )
|
if( xAxisType == SPT_LIN_FREQUENCY || xAxisType == SPT_LOG_FREQUENCY )
|
||||||
{
|
{
|
||||||
int baseType = descriptor.GetType() & ~( SPT_AC_MAG | SPT_AC_PHASE );
|
int baseType = aType & ~( SPT_AC_MAG | SPT_AC_PHASE );
|
||||||
|
|
||||||
// Add two plots: magnitude & phase
|
// Add two plots: magnitude & phase
|
||||||
TRACE_DESC mag_desc( *m_exporter, descriptor, (SIM_PLOT_TYPE)( baseType | SPT_AC_MAG ) );
|
updated |=
|
||||||
TRACE_DESC phase_desc( *m_exporter, descriptor,
|
updatePlot( aName, ( SIM_PLOT_TYPE )( baseType | SPT_AC_MAG ), aParam, plotPanel );
|
||||||
(SIM_PLOT_TYPE)( baseType | SPT_AC_PHASE ) );
|
updated |= updatePlot( aName, ( SIM_PLOT_TYPE )( baseType | SPT_AC_PHASE ), aParam,
|
||||||
|
plotPanel );
|
||||||
updated |= updatePlot( mag_desc, plotPanel );
|
|
||||||
updated |= updatePlot( phase_desc, plotPanel );
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
updated = updatePlot( descriptor, plotPanel );
|
updated = updatePlot( aName, aType, aParam, plotPanel );
|
||||||
}
|
}
|
||||||
|
|
||||||
if( updated )
|
if( updated )
|
||||||
|
@ -708,11 +704,11 @@ void SIM_PLOT_FRAME::updateNetlistExporter()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
bool SIM_PLOT_FRAME::updatePlot( const TRACE_DESC& aDescriptor, SIM_PLOT_PANEL* aPanel )
|
bool SIM_PLOT_FRAME::updatePlot( const wxString& aName, SIM_PLOT_TYPE aType, const wxString& aParam,
|
||||||
|
SIM_PLOT_PANEL* aPanel )
|
||||||
{
|
{
|
||||||
SIM_TYPE simType = m_exporter->GetSimType();
|
SIM_TYPE simType = m_exporter->GetSimType();
|
||||||
wxString spiceVector = m_exporter->ComponentToVector(
|
wxString spiceVector = m_exporter->ComponentToVector( aName, aType, aParam );
|
||||||
aDescriptor.GetName(), aDescriptor.GetType(), aDescriptor.GetParam() );
|
|
||||||
|
|
||||||
if( !SIM_PANEL_BASE::IsPlottable( simType ) )
|
if( !SIM_PANEL_BASE::IsPlottable( simType ) )
|
||||||
{
|
{
|
||||||
|
@ -734,19 +730,18 @@ bool SIM_PLOT_FRAME::updatePlot( const TRACE_DESC& aDescriptor, SIM_PLOT_PANEL*
|
||||||
if( data_x.empty() )
|
if( data_x.empty() )
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
SIM_PLOT_TYPE plotType = aDescriptor.GetType();
|
|
||||||
std::vector<double> data_y;
|
std::vector<double> data_y;
|
||||||
|
|
||||||
// Now, Y axis data
|
// Now, Y axis data
|
||||||
switch( m_exporter->GetSimType() )
|
switch( m_exporter->GetSimType() )
|
||||||
{
|
{
|
||||||
case ST_AC:
|
case ST_AC:
|
||||||
wxASSERT_MSG( !( ( plotType & SPT_AC_MAG ) && ( plotType & SPT_AC_PHASE ) ),
|
wxASSERT_MSG( !( ( aType & SPT_AC_MAG ) && ( aType & SPT_AC_PHASE ) ),
|
||||||
"Cannot set both AC_PHASE and AC_MAG bits" );
|
"Cannot set both AC_PHASE and AC_MAG bits" );
|
||||||
|
|
||||||
if( plotType & SPT_AC_MAG )
|
if( aType & SPT_AC_MAG )
|
||||||
data_y = m_simulator->GetMagPlot( (const char*) spiceVector.c_str() );
|
data_y = m_simulator->GetMagPlot( (const char*) spiceVector.c_str() );
|
||||||
else if( plotType & SPT_AC_PHASE )
|
else if( aType & SPT_AC_PHASE )
|
||||||
data_y = m_simulator->GetPhasePlot( (const char*) spiceVector.c_str() );
|
data_y = m_simulator->GetPhasePlot( (const char*) spiceVector.c_str() );
|
||||||
else
|
else
|
||||||
wxASSERT_MSG( false, "Plot type missing AC_PHASE or AC_MAG bit" );
|
wxASSERT_MSG( false, "Plot type missing AC_PHASE or AC_MAG bit" );
|
||||||
|
@ -788,17 +783,15 @@ bool SIM_PLOT_FRAME::updatePlot( const TRACE_DESC& aDescriptor, SIM_PLOT_PANEL*
|
||||||
|
|
||||||
for( size_t idx = 0; idx <= outer; idx++ )
|
for( size_t idx = 0; idx <= outer; idx++ )
|
||||||
{
|
{
|
||||||
name = wxString::Format( "%s (%s = %s V)", aDescriptor.GetTitle(),
|
name = wxString::Format( "%s (%s = %s V)", aName, source2.m_source, v.ToString() );
|
||||||
source2.m_source, v.ToString() );
|
|
||||||
|
|
||||||
std::vector<double> sub_x( data_x.begin() + offset,
|
std::vector<double> sub_x( data_x.begin() + offset,
|
||||||
data_x.begin() + offset + inner );
|
data_x.begin() + offset + inner );
|
||||||
std::vector<double> sub_y( data_y.begin() + offset,
|
std::vector<double> sub_y( data_y.begin() + offset,
|
||||||
data_y.begin() + offset + inner );
|
data_y.begin() + offset + inner );
|
||||||
|
|
||||||
if( aPanel->AddTrace( name, inner,
|
if( aPanel->AddTrace( name, inner, sub_x.data(), sub_y.data(), aType, aParam ) )
|
||||||
sub_x.data(), sub_y.data(), aDescriptor.GetType() ) )
|
m_workbook->AddTrace( aPanel, name );
|
||||||
m_workbook->AddTrace( aPanel, name, aDescriptor );
|
|
||||||
|
|
||||||
v = v + source2.m_vincrement;
|
v = v + source2.m_vincrement;
|
||||||
offset += inner;
|
offset += inner;
|
||||||
|
@ -809,9 +802,8 @@ bool SIM_PLOT_FRAME::updatePlot( const TRACE_DESC& aDescriptor, SIM_PLOT_PANEL*
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if( aPanel->AddTrace( aDescriptor.GetTitle(), size,
|
if( aPanel->AddTrace( aName, size, data_x.data(), data_y.data(), aType, aParam ) )
|
||||||
data_x.data(), data_y.data(), aDescriptor.GetType() ) )
|
m_workbook->AddTrace( aPanel, aName );
|
||||||
m_workbook->AddTrace( aPanel, aDescriptor.GetTitle(), aDescriptor );
|
|
||||||
|
|
||||||
updateFrame();
|
updateFrame();
|
||||||
return true;
|
return true;
|
||||||
|
@ -876,7 +868,7 @@ void SIM_PLOT_FRAME::updateSignalList()
|
||||||
// calculated from the trace name index
|
// calculated from the trace name index
|
||||||
int imgidx = 0;
|
int imgidx = 0;
|
||||||
|
|
||||||
for( const auto& trace : m_workbook->GetTraces( plotPanel ) )
|
for( const auto& trace : plotPanel->GetTraces() )
|
||||||
{
|
{
|
||||||
m_signals->InsertItem( imgidx, trace.first, imgidx );
|
m_signals->InsertItem( imgidx, trace.first, imgidx );
|
||||||
imgidx++;
|
imgidx++;
|
||||||
|
@ -1040,13 +1032,20 @@ bool SIM_PLOT_FRAME::saveWorkbook( const wxString& aPath )
|
||||||
|
|
||||||
file.AddLine( wxString::Format( "%d", plotPanel->GetType() ) );
|
file.AddLine( wxString::Format( "%d", plotPanel->GetType() ) );
|
||||||
file.AddLine( plot.m_simCommand );
|
file.AddLine( plot.m_simCommand );
|
||||||
file.AddLine( wxString::Format( "%llu", plot.m_traces.size() ) );
|
|
||||||
|
|
||||||
for( const auto& trace : plot.m_traces )
|
const SIM_PLOT_PANEL* panel = dynamic_cast<const SIM_PLOT_PANEL*>( plotPanel );
|
||||||
|
if( !panel )
|
||||||
|
file.AddLine( wxString::Format( "%llu", 0ull ) );
|
||||||
|
else
|
||||||
{
|
{
|
||||||
file.AddLine( wxString::Format( "%d", trace.second.GetType() ) );
|
file.AddLine( wxString::Format( "%llu", panel->GetTraces().size() ) );
|
||||||
file.AddLine( trace.second.GetName() );
|
|
||||||
file.AddLine( trace.second.GetParam() );
|
for( const auto& trace : panel->GetTraces() )
|
||||||
|
{
|
||||||
|
file.AddLine( wxString::Format( "%d", trace.second->GetType() ) );
|
||||||
|
file.AddLine( trace.second->GetName() );
|
||||||
|
file.AddLine( trace.second->GetParam() );
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1653,18 +1652,37 @@ void SIM_PLOT_FRAME::onSimFinished( wxCommandEvent& aEvent )
|
||||||
SIM_PLOT_PANEL* plotPanel = dynamic_cast<SIM_PLOT_PANEL*>( plotPanelWindow );
|
SIM_PLOT_PANEL* plotPanel = dynamic_cast<SIM_PLOT_PANEL*>( plotPanelWindow );
|
||||||
wxCHECK_RET( plotPanel, "not a SIM_PLOT_PANEL" );
|
wxCHECK_RET( plotPanel, "not a SIM_PLOT_PANEL" );
|
||||||
|
|
||||||
|
struct TRACE_DESC
|
||||||
for( auto it = m_workbook->TracesBegin( plotPanel );
|
|
||||||
it != m_workbook->TracesEnd( plotPanel ); )
|
|
||||||
{
|
{
|
||||||
if( !updatePlot( it->second, plotPanel ) )
|
///< Name of the measured net/device
|
||||||
|
wxString m_name;
|
||||||
|
|
||||||
|
///< Type of the signal
|
||||||
|
SIM_PLOT_TYPE m_type;
|
||||||
|
|
||||||
|
///< Name of the signal parameter
|
||||||
|
wxString m_param;
|
||||||
|
};
|
||||||
|
|
||||||
|
std::vector<struct TRACE_DESC> traceInfo;
|
||||||
|
|
||||||
|
// Get information about all the traces on the plot, remove and add again
|
||||||
|
for( auto& trace : plotPanel->GetTraces() )
|
||||||
|
{
|
||||||
|
struct TRACE_DESC placeholder;
|
||||||
|
placeholder.m_name = trace.second->GetName();
|
||||||
|
placeholder.m_type = trace.second->GetType();
|
||||||
|
placeholder.m_param = trace.second->GetParam();
|
||||||
|
|
||||||
|
traceInfo.push_back( placeholder );
|
||||||
|
}
|
||||||
|
|
||||||
|
for( auto& trace : traceInfo )
|
||||||
|
{
|
||||||
|
if( !updatePlot( trace.m_name, trace.m_type, trace.m_param, plotPanel ) )
|
||||||
{
|
{
|
||||||
removePlot( it->first, false );
|
removePlot( trace.m_name, false );
|
||||||
it = m_workbook->RemoveTrace( plotPanel, it );
|
m_workbook->RemoveTrace( plotPanel, trace.m_name );
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
++it;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -203,7 +203,8 @@ private:
|
||||||
* @param aPanel is the panel that should receive the update.
|
* @param aPanel is the panel that should receive the update.
|
||||||
* @return True if a plot was successfully added/updated.
|
* @return True if a plot was successfully added/updated.
|
||||||
*/
|
*/
|
||||||
bool updatePlot( const TRACE_DESC& aDescriptor, SIM_PLOT_PANEL* aPanel );
|
bool updatePlot( const wxString& aName, SIM_PLOT_TYPE aType, const wxString& aParam,
|
||||||
|
SIM_PLOT_PANEL* aPanel );
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Update the list of currently plotted signals.
|
* Update the list of currently plotted signals.
|
||||||
|
|
|
@ -433,21 +433,27 @@ void SIM_PLOT_PANEL::UpdatePlotColors()
|
||||||
|
|
||||||
void SIM_PLOT_PANEL::UpdateTraceStyle( TRACE* trace )
|
void SIM_PLOT_PANEL::UpdateTraceStyle( TRACE* trace )
|
||||||
{
|
{
|
||||||
int flags = trace->GetFlags();
|
int type = trace->GetType();
|
||||||
wxPenStyle penStyle = ( ( flags & SPT_AC_PHASE || flags & SPT_CURRENT ) && m_dotted_cp ) ?
|
wxPenStyle penStyle = ( ( type & SPT_AC_PHASE || type & SPT_CURRENT ) && m_dotted_cp )
|
||||||
wxPENSTYLE_DOT :
|
? wxPENSTYLE_DOT
|
||||||
wxPENSTYLE_SOLID;
|
: wxPENSTYLE_SOLID;
|
||||||
trace->SetPen( wxPen( trace->GetTraceColour(), 2, penStyle ) );
|
trace->SetPen( wxPen( trace->GetTraceColour(), 2, penStyle ) );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
bool SIM_PLOT_PANEL::AddTrace( const wxString& aName, int aPoints,
|
bool SIM_PLOT_PANEL::AddTrace( const wxString& aName, int aPoints, const double* aX,
|
||||||
const double* aX, const double* aY, SIM_PLOT_TYPE aFlags )
|
const double* aY, SIM_PLOT_TYPE aType, const wxString& aParam )
|
||||||
{
|
{
|
||||||
TRACE* trace = NULL;
|
TRACE* trace = NULL;
|
||||||
|
wxString name = aName;
|
||||||
|
|
||||||
|
if( aType & SPT_AC_MAG )
|
||||||
|
name += " (mag)";
|
||||||
|
else if( aType & SPT_AC_PHASE )
|
||||||
|
name += " (phase)";
|
||||||
|
|
||||||
// Find previous entry, if there is one
|
// Find previous entry, if there is one
|
||||||
auto prev = m_traces.find( aName );
|
auto prev = m_traces.find( name );
|
||||||
bool addedNewEntry = ( prev == m_traces.end() );
|
bool addedNewEntry = ( prev == m_traces.end() );
|
||||||
|
|
||||||
if( addedNewEntry )
|
if( addedNewEntry )
|
||||||
|
@ -458,7 +464,7 @@ bool SIM_PLOT_PANEL::AddTrace( const wxString& aName, int aPoints,
|
||||||
|
|
||||||
for( const auto& tr : m_traces )
|
for( const auto& tr : m_traces )
|
||||||
{
|
{
|
||||||
if( !( tr.second->GetFlags() & SPT_CURRENT ) )
|
if( !( tr.second->GetType() & SPT_CURRENT ) )
|
||||||
{
|
{
|
||||||
hasVoltageTraces = true;
|
hasVoltageTraces = true;
|
||||||
break;
|
break;
|
||||||
|
@ -472,10 +478,10 @@ bool SIM_PLOT_PANEL::AddTrace( const wxString& aName, int aPoints,
|
||||||
}
|
}
|
||||||
|
|
||||||
// New entry
|
// New entry
|
||||||
trace = new TRACE( aName );
|
trace = new TRACE( aName, aType, aParam );
|
||||||
trace->SetTraceColour( m_colors.GenerateColor( m_traces ) );
|
trace->SetTraceColour( m_colors.GenerateColor( m_traces ) );
|
||||||
UpdateTraceStyle( trace );
|
UpdateTraceStyle( trace );
|
||||||
m_traces[aName] = trace;
|
m_traces[name] = trace;
|
||||||
|
|
||||||
// It is a trick to keep legend & coords always on the top
|
// It is a trick to keep legend & coords always on the top
|
||||||
for( mpLayer* l : m_topLevel )
|
for( mpLayer* l : m_topLevel )
|
||||||
|
@ -495,7 +501,7 @@ bool SIM_PLOT_PANEL::AddTrace( const wxString& aName, int aPoints,
|
||||||
|
|
||||||
if( GetType() == ST_AC )
|
if( GetType() == ST_AC )
|
||||||
{
|
{
|
||||||
if( aFlags & SPT_AC_PHASE )
|
if( aType & SPT_AC_PHASE )
|
||||||
{
|
{
|
||||||
for( int i = 0; i < aPoints; i++ )
|
for( int i = 0; i < aPoints; i++ )
|
||||||
tmp[i] = tmp[i] * 180.0 / M_PI; // convert to degrees
|
tmp[i] = tmp[i] * 180.0 / M_PI; // convert to degrees
|
||||||
|
@ -509,13 +515,11 @@ bool SIM_PLOT_PANEL::AddTrace( const wxString& aName, int aPoints,
|
||||||
|
|
||||||
trace->SetData( std::vector<double>( aX, aX + aPoints ), tmp );
|
trace->SetData( std::vector<double>( aX, aX + aPoints ), tmp );
|
||||||
|
|
||||||
if( ( aFlags & SPT_AC_PHASE ) || ( aFlags & SPT_CURRENT ) )
|
if( ( aType & SPT_AC_PHASE ) || ( aType & SPT_CURRENT ) )
|
||||||
trace->SetScale( m_axis_x, m_axis_y2 );
|
trace->SetScale( m_axis_x, m_axis_y2 );
|
||||||
else
|
else
|
||||||
trace->SetScale( m_axis_x, m_axis_y1 );
|
trace->SetScale( m_axis_x, m_axis_y1 );
|
||||||
|
|
||||||
trace->SetFlags( aFlags );
|
|
||||||
|
|
||||||
m_plotWin->UpdateAll();
|
m_plotWin->UpdateAll();
|
||||||
|
|
||||||
return addedNewEntry;
|
return addedNewEntry;
|
||||||
|
|
|
@ -94,8 +94,8 @@ private:
|
||||||
class TRACE : public mpFXYVector
|
class TRACE : public mpFXYVector
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
TRACE( const wxString& aName ) :
|
TRACE( const wxString& aName, SIM_PLOT_TYPE aType, const wxString& aParam ) :
|
||||||
mpFXYVector( aName ), m_cursor( nullptr ), m_flags( 0 )
|
mpFXYVector( aName ), m_cursor( nullptr ), m_type( aType ), m_param( aParam )
|
||||||
{
|
{
|
||||||
SetContinuity( true );
|
SetContinuity( true );
|
||||||
SetDrawOutsideMargins( false );
|
SetDrawOutsideMargins( false );
|
||||||
|
@ -141,14 +141,9 @@ public:
|
||||||
return m_cursor;
|
return m_cursor;
|
||||||
}
|
}
|
||||||
|
|
||||||
void SetFlags( int aFlags )
|
SIM_PLOT_TYPE GetType() const
|
||||||
{
|
{
|
||||||
m_flags = aFlags;
|
return m_type;
|
||||||
}
|
|
||||||
|
|
||||||
int GetFlags() const
|
|
||||||
{
|
|
||||||
return m_flags;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void SetTraceColour( wxColour aColour )
|
void SetTraceColour( wxColour aColour )
|
||||||
|
@ -161,10 +156,20 @@ public:
|
||||||
return m_traceColour;
|
return m_traceColour;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const wxString& GetParam() const
|
||||||
|
{
|
||||||
|
return m_param;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
CURSOR* m_cursor;
|
CURSOR* m_cursor;
|
||||||
int m_flags;
|
SIM_PLOT_TYPE m_type;
|
||||||
wxColour m_traceColour;
|
wxColour m_traceColour;
|
||||||
|
|
||||||
|
private:
|
||||||
|
///< Name of the signal parameter
|
||||||
|
wxString m_param;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
@ -198,8 +203,8 @@ public:
|
||||||
return m_axis_y2 ? m_axis_y2->GetName() : "";
|
return m_axis_y2 ? m_axis_y2->GetName() : "";
|
||||||
}
|
}
|
||||||
|
|
||||||
bool AddTrace( const wxString& aName, int aPoints, const double* aX,
|
bool AddTrace( const wxString& aName, int aPoints, const double* aX, const double* aY,
|
||||||
const double* aY, SIM_PLOT_TYPE aFlags );
|
SIM_PLOT_TYPE aType, const wxString& aParam );
|
||||||
|
|
||||||
bool DeleteTrace( const wxString& aName );
|
bool DeleteTrace( const wxString& aName );
|
||||||
|
|
||||||
|
|
|
@ -24,21 +24,6 @@
|
||||||
|
|
||||||
#include <sim/sim_workbook.h>
|
#include <sim/sim_workbook.h>
|
||||||
|
|
||||||
TRACE_DESC::TRACE_DESC( const NETLIST_EXPORTER_PSPICE_SIM& aExporter, const wxString& aName,
|
|
||||||
SIM_PLOT_TYPE aType, const wxString& aParam ) :
|
|
||||||
m_name( aName ),
|
|
||||||
m_type( aType ),
|
|
||||||
m_param( aParam )
|
|
||||||
{
|
|
||||||
// Title generation
|
|
||||||
m_title = wxString::Format( "%s(%s)", aParam, aName );
|
|
||||||
|
|
||||||
if( aType & SPT_AC_MAG )
|
|
||||||
m_title += " (mag)";
|
|
||||||
else if( aType & SPT_AC_PHASE )
|
|
||||||
m_title += " (phase)";
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
SIM_WORKBOOK::SIM_WORKBOOK() :
|
SIM_WORKBOOK::SIM_WORKBOOK() :
|
||||||
m_flagModified( false )
|
m_flagModified( false )
|
||||||
|
@ -87,30 +72,14 @@ std::vector<const SIM_PANEL_BASE*> SIM_WORKBOOK::GetSortedPlotPanels() const
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void SIM_WORKBOOK::AddTrace( const SIM_PANEL_BASE* aPlotPanel, const wxString& aName,
|
void SIM_WORKBOOK::AddTrace( const SIM_PANEL_BASE* aPlotPanel, const wxString& aName )
|
||||||
const TRACE_DESC& aTrace )
|
|
||||||
{
|
{
|
||||||
m_plots.at( aPlotPanel ).m_traces.insert(
|
|
||||||
std::make_pair( aName, aTrace ) );
|
|
||||||
|
|
||||||
m_flagModified = true;
|
m_flagModified = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void SIM_WORKBOOK::RemoveTrace( const SIM_PANEL_BASE* aPlotPanel, const wxString& aName )
|
void SIM_WORKBOOK::RemoveTrace( const SIM_PANEL_BASE* aPlotPanel, const wxString& aName )
|
||||||
{
|
{
|
||||||
auto& traceMap = m_plots.at( aPlotPanel ).m_traces;
|
|
||||||
auto traceIt = traceMap.find( aName );
|
|
||||||
wxASSERT( traceIt != traceMap.end() );
|
|
||||||
traceMap.erase( traceIt );
|
|
||||||
|
|
||||||
m_flagModified = true;
|
m_flagModified = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
SIM_WORKBOOK::TRACE_MAP::const_iterator SIM_WORKBOOK::RemoveTrace( const SIM_PANEL_BASE* aPlotPanel,
|
|
||||||
TRACE_MAP::const_iterator aIt )
|
|
||||||
{
|
|
||||||
m_flagModified = true;
|
|
||||||
return m_plots.at( aPlotPanel ).m_traces.erase( aIt );
|
|
||||||
}
|
|
||||||
|
|
|
@ -27,76 +27,20 @@
|
||||||
#include <sim/sim_plot_panel.h>
|
#include <sim/sim_plot_panel.h>
|
||||||
|
|
||||||
|
|
||||||
///< Trace descriptor class
|
|
||||||
class TRACE_DESC
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
TRACE_DESC( const NETLIST_EXPORTER_PSPICE_SIM& aExporter, const wxString& aName,
|
|
||||||
SIM_PLOT_TYPE aType, const wxString& aParam );
|
|
||||||
|
|
||||||
///< Modifies an existing TRACE_DESC simulation type
|
|
||||||
TRACE_DESC( const NETLIST_EXPORTER_PSPICE_SIM& aExporter,
|
|
||||||
const TRACE_DESC& aDescription, SIM_PLOT_TYPE aNewType )
|
|
||||||
: TRACE_DESC( aExporter, aDescription.GetName(), aNewType, aDescription.GetParam() )
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
const wxString& GetTitle() const
|
|
||||||
{
|
|
||||||
return m_title;
|
|
||||||
}
|
|
||||||
|
|
||||||
const wxString& GetName() const
|
|
||||||
{
|
|
||||||
return m_name;
|
|
||||||
}
|
|
||||||
|
|
||||||
const wxString& GetParam() const
|
|
||||||
{
|
|
||||||
return m_param;
|
|
||||||
}
|
|
||||||
|
|
||||||
SIM_PLOT_TYPE GetType() const
|
|
||||||
{
|
|
||||||
return m_type;
|
|
||||||
}
|
|
||||||
|
|
||||||
private:
|
|
||||||
// Three basic parameters
|
|
||||||
///< Name of the measured net/device
|
|
||||||
wxString m_name;
|
|
||||||
|
|
||||||
///< Type of the signal
|
|
||||||
SIM_PLOT_TYPE m_type;
|
|
||||||
|
|
||||||
///< Name of the signal parameter
|
|
||||||
wxString m_param;
|
|
||||||
|
|
||||||
// Generated data
|
|
||||||
///< Title displayed in the signal list/plot legend
|
|
||||||
wxString m_title;
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
class SIM_WORKBOOK
|
class SIM_WORKBOOK
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
typedef std::map<wxString, TRACE_DESC> TRACE_MAP;
|
|
||||||
|
|
||||||
struct PLOT_INFO
|
struct PLOT_INFO
|
||||||
{
|
{
|
||||||
///< Map of the traces displayed on the plot
|
|
||||||
TRACE_MAP m_traces;
|
|
||||||
|
|
||||||
///< Spice directive used to execute the simulation
|
///< Spice directive used to execute the simulation
|
||||||
|
///< TODO: use SIM_PANEL_BASE::m_simCommand instead
|
||||||
wxString m_simCommand;
|
wxString m_simCommand;
|
||||||
|
|
||||||
///< The current position of the plot in the notebook
|
///< The current position of the plot in the notebook
|
||||||
unsigned int pos;
|
unsigned int pos;
|
||||||
};
|
};
|
||||||
|
|
||||||
typedef std::map<const SIM_PANEL_BASE*, PLOT_INFO> PLOT_MAP;
|
|
||||||
|
|
||||||
SIM_WORKBOOK();
|
SIM_WORKBOOK();
|
||||||
|
|
||||||
void Clear();
|
void Clear();
|
||||||
|
@ -111,20 +55,8 @@ public:
|
||||||
return m_plots.count( aPlotPanel ) == 1;
|
return m_plots.count( aPlotPanel ) == 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
void AddTrace( const SIM_PANEL_BASE* aPlotPanel, const wxString& aName,
|
void AddTrace( const SIM_PANEL_BASE* aPlotPanel, const wxString& aName );
|
||||||
const TRACE_DESC& aTrace );
|
|
||||||
void RemoveTrace( const SIM_PANEL_BASE* aPlotPanel, const wxString& aName );
|
void RemoveTrace( const SIM_PANEL_BASE* aPlotPanel, const wxString& aName );
|
||||||
TRACE_MAP::const_iterator RemoveTrace( const SIM_PANEL_BASE* aPlotPanel, TRACE_MAP::const_iterator aIt );
|
|
||||||
|
|
||||||
TRACE_MAP::const_iterator TracesBegin( const SIM_PANEL_BASE* aPlotPanel ) const
|
|
||||||
{
|
|
||||||
return m_plots.at( aPlotPanel ).m_traces.cbegin();
|
|
||||||
}
|
|
||||||
|
|
||||||
TRACE_MAP::const_iterator TracesEnd( const SIM_PANEL_BASE* aPlotPanel ) const
|
|
||||||
{
|
|
||||||
return m_plots.at( aPlotPanel ).m_traces.cend();
|
|
||||||
}
|
|
||||||
|
|
||||||
void SetPlotPanelPosition( const SIM_PANEL_BASE* aPlotPanel, unsigned int pos )
|
void SetPlotPanelPosition( const SIM_PANEL_BASE* aPlotPanel, unsigned int pos )
|
||||||
{
|
{
|
||||||
|
@ -152,11 +84,6 @@ public:
|
||||||
return m_plots.at( aPlotPanel );
|
return m_plots.at( aPlotPanel );
|
||||||
}
|
}
|
||||||
|
|
||||||
const TRACE_MAP GetTraces( const SIM_PANEL_BASE* aPlotPanel ) const
|
|
||||||
{
|
|
||||||
return m_plots.at( aPlotPanel ).m_traces;
|
|
||||||
}
|
|
||||||
|
|
||||||
void ClrModified() { m_flagModified = false; }
|
void ClrModified() { m_flagModified = false; }
|
||||||
bool IsModified() const { return m_flagModified; }
|
bool IsModified() const { return m_flagModified; }
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue