De Morgan conversions are equivalences, not additional items to simulate.
Fixes https://gitlab.com/kicad/code/kicad/issues/14230
This commit is contained in:
parent
7567adc54e
commit
fdcc97e604
|
@ -65,7 +65,12 @@ DIALOG_SIM_MODEL<T_symbol, T_field>::DIALOG_SIM_MODEL( wxWindow* aParent, T_symb
|
||||||
{
|
{
|
||||||
m_browseButton->SetBitmap( KiBitmap( BITMAPS::small_folder ) );
|
m_browseButton->SetBitmap( KiBitmap( BITMAPS::small_folder ) );
|
||||||
|
|
||||||
m_sortedPartPins = m_symbol.GetAllLibPins();
|
for( LIB_PIN* pin : aSymbol.GetAllLibPins() )
|
||||||
|
{
|
||||||
|
// De Morgan conversions are equivalences, not additional items to simulate
|
||||||
|
if( !pin->GetParent()->HasConversion() || pin->GetConvert() < 2 )
|
||||||
|
m_sortedPartPins.push_back( pin );
|
||||||
|
}
|
||||||
|
|
||||||
std::sort( m_sortedPartPins.begin(), m_sortedPartPins.end(),
|
std::sort( m_sortedPartPins.begin(), m_sortedPartPins.end(),
|
||||||
[]( const LIB_PIN* lhs, const LIB_PIN* rhs )
|
[]( const LIB_PIN* lhs, const LIB_PIN* rhs )
|
||||||
|
@ -169,14 +174,6 @@ bool DIALOG_SIM_MODEL<T_symbol, T_field>::TransferDataToWindow()
|
||||||
m_fields[ VALUE_FIELD ].SetText( wxT( "${SIM.PARAMS}" ) );
|
m_fields[ VALUE_FIELD ].SetText( wxT( "${SIM.PARAMS}" ) );
|
||||||
}
|
}
|
||||||
|
|
||||||
std::vector<LIB_PIN*> sourcePins = m_symbol.GetAllLibPins();
|
|
||||||
|
|
||||||
std::sort( sourcePins.begin(), sourcePins.end(),
|
|
||||||
[]( const LIB_PIN* lhs, const LIB_PIN* rhs )
|
|
||||||
{
|
|
||||||
return StrNumCmp( lhs->GetNumber(), rhs->GetNumber(), true ) < 0;
|
|
||||||
} );
|
|
||||||
|
|
||||||
std::string libraryFilename = SIM_MODEL::GetFieldValue( &m_fields, SIM_LIBRARY::LIBRARY_FIELD );
|
std::string libraryFilename = SIM_MODEL::GetFieldValue( &m_fields, SIM_LIBRARY::LIBRARY_FIELD );
|
||||||
|
|
||||||
if( libraryFilename != "" )
|
if( libraryFilename != "" )
|
||||||
|
@ -188,7 +185,7 @@ bool DIALOG_SIM_MODEL<T_symbol, T_field>::TransferDataToWindow()
|
||||||
{
|
{
|
||||||
m_libraryPathText->ChangeValue( libraryFilename );
|
m_libraryPathText->ChangeValue( libraryFilename );
|
||||||
m_curModelType = SIM_MODEL::ReadTypeFromFields( m_fields, &reporter );
|
m_curModelType = SIM_MODEL::ReadTypeFromFields( m_fields, &reporter );
|
||||||
m_libraryModelsMgr.CreateModel( nullptr, sourcePins, m_fields );
|
m_libraryModelsMgr.CreateModel( nullptr, m_sortedPartPins, m_fields );
|
||||||
|
|
||||||
m_modelNameChoice->Append( _( "<unknown>" ) );
|
m_modelNameChoice->Append( _( "<unknown>" ) );
|
||||||
m_modelNameChoice->SetSelection( 0 );
|
m_modelNameChoice->SetSelection( 0 );
|
||||||
|
@ -217,7 +214,7 @@ bool DIALOG_SIM_MODEL<T_symbol, T_field>::TransferDataToWindow()
|
||||||
if( isIbisLoaded() && ( m_modelNameChoice->GetSelection() >= 0 ) )
|
if( isIbisLoaded() && ( m_modelNameChoice->GetSelection() >= 0 ) )
|
||||||
{
|
{
|
||||||
int idx = m_modelNameChoice->GetSelection();
|
int idx = m_modelNameChoice->GetSelection();
|
||||||
auto kibismodel = dynamic_cast<SIM_MODEL_KIBIS*>( &m_libraryModelsMgr.GetModels().at( idx ).get() );
|
auto kibismodel = dynamic_cast<SIM_MODEL_KIBIS*>( &m_libraryModelsMgr.GetModels()[idx].get() );
|
||||||
|
|
||||||
if( kibismodel )
|
if( kibismodel )
|
||||||
{
|
{
|
||||||
|
@ -279,7 +276,7 @@ bool DIALOG_SIM_MODEL<T_symbol, T_field>::TransferDataToWindow()
|
||||||
if( m_useInstanceModelRadioButton->GetValue() && type == m_curModelType )
|
if( m_useInstanceModelRadioButton->GetValue() && type == m_curModelType )
|
||||||
{
|
{
|
||||||
msg.clear();
|
msg.clear();
|
||||||
m_builtinModelsMgr.CreateModel( m_fields, sourcePins, false );
|
m_builtinModelsMgr.CreateModel( m_fields, m_sortedPartPins, false );
|
||||||
|
|
||||||
if( reporter.HasMessage() )
|
if( reporter.HasMessage() )
|
||||||
{
|
{
|
||||||
|
@ -289,7 +286,7 @@ bool DIALOG_SIM_MODEL<T_symbol, T_field>::TransferDataToWindow()
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
m_builtinModelsMgr.CreateModel( type, sourcePins );
|
m_builtinModelsMgr.CreateModel( type, m_sortedPartPins );
|
||||||
}
|
}
|
||||||
|
|
||||||
SIM_MODEL::DEVICE_T deviceTypeT = SIM_MODEL::TypeInfo( type ).deviceType;
|
SIM_MODEL::DEVICE_T deviceTypeT = SIM_MODEL::TypeInfo( type ).deviceType;
|
||||||
|
@ -707,22 +704,14 @@ bool DIALOG_SIM_MODEL<T_symbol, T_field>::loadLibrary( const wxString& aLibraryP
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
std::vector<LIB_PIN*> sourcePins = m_symbol.GetAllLibPins();
|
|
||||||
|
|
||||||
std::sort( sourcePins.begin(), sourcePins.end(),
|
|
||||||
[]( const LIB_PIN* lhs, const LIB_PIN* rhs )
|
|
||||||
{
|
|
||||||
return StrNumCmp( lhs->GetNumber(), rhs->GetNumber(), true ) < 0;
|
|
||||||
} );
|
|
||||||
|
|
||||||
std::string modelName = SIM_MODEL::GetFieldValue( &m_fields, SIM_LIBRARY::NAME_FIELD );
|
std::string modelName = SIM_MODEL::GetFieldValue( &m_fields, SIM_LIBRARY::NAME_FIELD );
|
||||||
|
|
||||||
for( const auto& [baseModelName, baseModel] : library()->GetModels() )
|
for( const auto& [baseModelName, baseModel] : library()->GetModels() )
|
||||||
{
|
{
|
||||||
if( baseModelName == modelName )
|
if( baseModelName == modelName )
|
||||||
m_libraryModelsMgr.CreateModel( &baseModel, sourcePins, m_fields );
|
m_libraryModelsMgr.CreateModel( &baseModel, m_sortedPartPins, m_fields );
|
||||||
else
|
else
|
||||||
m_libraryModelsMgr.CreateModel( &baseModel, sourcePins );
|
m_libraryModelsMgr.CreateModel( &baseModel, m_sortedPartPins );
|
||||||
}
|
}
|
||||||
|
|
||||||
if( reporter.HasMessage() )
|
if( reporter.HasMessage() )
|
||||||
|
@ -1211,13 +1200,6 @@ void DIALOG_SIM_MODEL<T_symbol, T_field>::onTypeChoice( wxCommandEvent& aEvent )
|
||||||
{
|
{
|
||||||
SIM_MODEL::DEVICE_T deviceType = curModel().GetDeviceType();
|
SIM_MODEL::DEVICE_T deviceType = curModel().GetDeviceType();
|
||||||
wxString typeDescription = m_typeChoice->GetString( m_typeChoice->GetSelection() );
|
wxString typeDescription = m_typeChoice->GetString( m_typeChoice->GetSelection() );
|
||||||
std::vector<LIB_PIN*> sourcePins = m_symbol.GetAllLibPins();
|
|
||||||
|
|
||||||
std::sort( sourcePins.begin(), sourcePins.end(),
|
|
||||||
[]( const LIB_PIN* lhs, const LIB_PIN* rhs )
|
|
||||||
{
|
|
||||||
return StrNumCmp( lhs->GetNumber(), rhs->GetNumber(), true ) < 0;
|
|
||||||
} );
|
|
||||||
|
|
||||||
for( SIM_MODEL::TYPE type : SIM_MODEL::TYPE_ITERATOR() )
|
for( SIM_MODEL::TYPE type : SIM_MODEL::TYPE_ITERATOR() )
|
||||||
{
|
{
|
||||||
|
@ -1232,13 +1214,14 @@ void DIALOG_SIM_MODEL<T_symbol, T_field>::onTypeChoice( wxCommandEvent& aEvent )
|
||||||
{
|
{
|
||||||
int idx = m_modelNameChoice->GetSelection();
|
int idx = m_modelNameChoice->GetSelection();
|
||||||
|
|
||||||
auto& baseModel = static_cast<SIM_MODEL_KIBIS&>( m_libraryModelsMgr.GetModels().at( idx ).get() );
|
auto& baseModel = static_cast<SIM_MODEL_KIBIS&>( m_libraryModelsMgr.GetModels()[idx].get() );
|
||||||
|
|
||||||
m_libraryModelsMgr.SetModel( idx, std::make_unique<SIM_MODEL_KIBIS>( type, baseModel ) );
|
m_libraryModelsMgr.SetModel( idx, std::make_unique<SIM_MODEL_KIBIS>( type, baseModel ) );
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
m_libraryModelsMgr.GetModels().at( idx ).get().ReadDataFields( &m_fields, sourcePins );
|
m_libraryModelsMgr.GetModels()[idx].get().ReadDataFields( &m_fields,
|
||||||
|
m_sortedPartPins );
|
||||||
}
|
}
|
||||||
catch( IO_ERROR& err )
|
catch( IO_ERROR& err )
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in New Issue