Signals already have gain/phase broken out; user-defined signals don't.

Fixes https://gitlab.com/kicad/code/kicad/-/issues/15903
This commit is contained in:
Jeff Young 2023-10-20 14:08:39 +01:00
parent 1b04d8972e
commit 62eaa7e1c7
1 changed files with 63 additions and 46 deletions

View File

@ -697,6 +697,7 @@ void SIMULATOR_FRAME_UI::rebuildSignalsGrid( wxString aFilter )
if( !plotPanel ) if( !plotPanel )
return; return;
SIM_TYPE simType = plotPanel->GetSimType();
std::vector<wxString> signals; std::vector<wxString> signals;
if( plotPanel->GetSimType() == ST_FFT ) if( plotPanel->GetSimType() == ST_FFT )
@ -711,11 +712,29 @@ void SIMULATOR_FRAME_UI::rebuildSignalsGrid( wxString aFilter )
} }
else else
{ {
// NB: m_signals are already broken out into gain/phase, but m_userDefinedSignals are
// as the user typed them
for( const wxString& signal : m_signals ) for( const wxString& signal : m_signals )
signals.push_back( signal ); signals.push_back( signal );
for( const auto& [ id, signal ] : m_userDefinedSignals ) for( const auto& [ id, signal ] : m_userDefinedSignals )
{
if( simType == ST_AC )
{
signals.push_back( signal + _( " (gain)" ) );
signals.push_back( signal + _( " (phase)" ) );
}
else if( simType == ST_SP )
{
signals.push_back( signal + _( " (amplitude)" ) );
signals.push_back( signal + _( " (phase)" ) );
}
else
{
signals.push_back( signal ); signals.push_back( signal );
}
}
sortSignals( signals ); sortSignals( signals );
} }
@ -2671,40 +2690,49 @@ void SIMULATOR_FRAME_UI::OnSimRefresh( bool aFinal )
for( const auto& [ name, trace ] : plotTab->GetTraces() ) for( const auto& [ name, trace ] : plotTab->GetTraces() )
traceMap[ trace ] = { wxEmptyString, SPT_UNKNOWN, false }; traceMap[ trace ] = { wxEmptyString, SPT_UNKNOWN, false };
auto addSignalToTraceMap = // NB: m_signals are already broken out into gain/phase, but m_userDefinedSignals are
[&]( const wxString& signal, bool clearData ) // as the user typed them
for( const wxString& signal : m_signals )
{
int traceType = SPT_UNKNOWN;
wxString vectorName = vectorNameFromSignalName( plotTab, signal, &traceType );
if( TRACE* trace = plotTab->GetTrace( vectorName, traceType ) )
traceMap[ trace ] = { vectorName, traceType, false };
}
for( const auto& [ id, signal ] : m_userDefinedSignals )
{ {
int traceType = SPT_UNKNOWN; int traceType = SPT_UNKNOWN;
wxString vectorName = vectorNameFromSignalName( plotTab, signal, &traceType ); wxString vectorName = vectorNameFromSignalName( plotTab, signal, &traceType );
if( simType == ST_AC ) if( simType == ST_AC )
{ {
for( int subType : { SPT_AC_GAIN, SPT_AC_PHASE } ) int baseType = traceType &= ~( SPT_AC_GAIN | SPT_AC_PHASE );
for( int subType : { baseType | SPT_AC_GAIN, baseType | SPT_AC_PHASE } )
{ {
if( TRACE* trace = plotTab->GetTrace( vectorName, traceType+subType ) ) if( TRACE* trace = plotTab->GetTrace( vectorName, subType ) )
traceMap[ trace ] = { vectorName, traceType, clearData }; traceMap[ trace ] = { vectorName, subType, !aFinal };
} }
} }
else if( simType == ST_SP ) else if( simType == ST_SP )
{ {
for( int subType : { SPT_SP_AMP, SPT_AC_PHASE } ) int baseType = traceType &= ~( SPT_SP_AMP | SPT_AC_PHASE );
for( int subType : { baseType | SPT_SP_AMP, baseType | SPT_AC_PHASE } )
{ {
if( TRACE* trace = plotTab->GetTrace( vectorName, traceType+subType ) ) if( TRACE* trace = plotTab->GetTrace( vectorName, subType ) )
traceMap[trace] = { vectorName, traceType, clearData }; traceMap[trace] = { vectorName, subType, !aFinal };
} }
} }
else else
{ {
if( TRACE* trace = plotTab->GetTrace( vectorName, traceType ) ) if( TRACE* trace = plotTab->GetTrace( vectorName, traceType ) )
traceMap[ trace ] = { vectorName, traceType, clearData }; traceMap[ trace ] = { vectorName, traceType, !aFinal };
}
} }
};
for( const wxString& signal : m_signals )
addSignalToTraceMap( signal, false );
for( const auto& [ id, signal ] : m_userDefinedSignals )
addSignalToTraceMap( signal, !aFinal );
// Two passes so that DC-sweep sub-traces get deleted and re-created: // Two passes so that DC-sweep sub-traces get deleted and re-created:
@ -2753,21 +2781,10 @@ void SIMULATOR_FRAME_UI::OnSimRefresh( bool aFinal )
switch( type ) switch( type )
{ {
case SPT_VOLTAGE: case SPT_VOLTAGE: value.Append( wxS( "V" ) ); break;
value.Append( wxS( "V" ) ); case SPT_CURRENT: value.Append( wxS( "A" ) ); break;
break; case SPT_POWER: value.Append( wxS( "W" ) ); break;
default: value.Append( wxS( "?" ) ); break;
case SPT_CURRENT:
value.Append( wxS( "A" ) );
break;
case SPT_POWER:
value.Append( wxS( "W" ) );
break;
default:
value.Append( wxS( "?" ) );
break;
} }
msg.Printf( wxT( "%s%s\n" ), msg.Printf( wxT( "%s%s\n" ),