Don't allow pins with NC electrical type to join other nets
Fixes https://gitlab.com/kicad/code/kicad/-/issues/1826
This commit is contained in:
parent
23ce2d2e36
commit
d8be5f9ecf
|
@ -326,6 +326,9 @@ void DIALOG_ERC::TestErc( REPORTER& aReporter )
|
||||||
if( settings.IsTestEnabled( ERCE_UNRESOLVED_VARIABLE ) )
|
if( settings.IsTestEnabled( ERCE_UNRESOLVED_VARIABLE ) )
|
||||||
tester.TestTextVars( m_parent->GetCanvas()->GetView()->GetWorksheet() );
|
tester.TestTextVars( m_parent->GetCanvas()->GetView()->GetWorksheet() );
|
||||||
|
|
||||||
|
if( settings.IsTestEnabled( ERCE_NOCONNECT_CONNECTED ) )
|
||||||
|
tester.TestNoConnectPins();
|
||||||
|
|
||||||
// Display diags:
|
// Display diags:
|
||||||
m_markerTreeModel->SetProvider( m_markerProvider );
|
m_markerTreeModel->SetProvider( m_markerProvider );
|
||||||
|
|
||||||
|
|
|
@ -525,6 +525,46 @@ void ERC_TESTER::TestOthersItems( NETLIST_OBJECT_LIST* aList, unsigned aNetItemR
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
int ERC_TESTER::TestNoConnectPins()
|
||||||
|
{
|
||||||
|
int err_count = 0;
|
||||||
|
|
||||||
|
for( const SCH_SHEET_PATH& sheet : m_schematic->GetSheets() )
|
||||||
|
{
|
||||||
|
std::map<wxPoint, std::vector<SCH_PIN*>> pinMap;
|
||||||
|
|
||||||
|
for( SCH_ITEM* item : sheet.LastScreen()->Items().OfType( SCH_COMPONENT_T ) )
|
||||||
|
{
|
||||||
|
SCH_COMPONENT* comp = static_cast<SCH_COMPONENT*>( item );
|
||||||
|
|
||||||
|
for( SCH_PIN* pin : comp->GetSchPins( &sheet ) )
|
||||||
|
pinMap[pin->GetPosition()].emplace_back( pin );
|
||||||
|
}
|
||||||
|
|
||||||
|
for( auto& pair : pinMap )
|
||||||
|
{
|
||||||
|
if( pair.second.size() > 1 )
|
||||||
|
{
|
||||||
|
err_count++;
|
||||||
|
|
||||||
|
ERC_ITEM* ercItem = ERC_ITEM::Create( ERCE_NOCONNECT_CONNECTED );
|
||||||
|
|
||||||
|
ercItem->SetItems( pair.second[0], pair.second[1],
|
||||||
|
pair.second.size() > 2 ? pair.second[2] : nullptr,
|
||||||
|
pair.second.size() > 3 ? pair.second[3] : nullptr );
|
||||||
|
ercItem->SetErrorMessage( _( "Pins with \"no connection\" type are connected" ) );
|
||||||
|
|
||||||
|
SCH_MARKER* marker = new SCH_MARKER( ercItem, pair.first );
|
||||||
|
sheet.LastScreen()->Append( marker );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return err_count;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
// this code try to detect similar labels, i.e. labels which are identical
|
// this code try to detect similar labels, i.e. labels which are identical
|
||||||
// when they are compared using case insensitive coparisons.
|
// when they are compared using case insensitive coparisons.
|
||||||
|
|
||||||
|
|
|
@ -99,6 +99,13 @@ public:
|
||||||
*/
|
*/
|
||||||
int TestMultiunitFootprints();
|
int TestMultiunitFootprints();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* In KiCad 5 and earlier, you could connect stuff up to pins with NC electrical type.
|
||||||
|
* In KiCad 6, this no longer results in those pins joining the net, so we need to warn about it
|
||||||
|
* @return the error count
|
||||||
|
*/
|
||||||
|
int TestNoConnectPins();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
/**
|
/**
|
||||||
* Performs ERC testing and creates an ERC marker to show the ERC problem for aNetItemRef
|
* Performs ERC testing and creates an ERC marker to show the ERC problem for aNetItemRef
|
||||||
|
|
|
@ -141,4 +141,8 @@ bool SCH_PIN::HitTest( const wxPoint& aPosition, int aAccuracy ) const
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
bool SCH_PIN::ConnectionPropagatesTo( const EDA_ITEM* aItem ) const
|
||||||
|
{
|
||||||
|
// Reciprocal checking is done in CONNECTION_GRAPH anyway
|
||||||
|
return !( m_libPin->GetType() == ELECTRICAL_PINTYPE::PT_NC );
|
||||||
|
}
|
||||||
|
|
|
@ -107,6 +107,8 @@ public:
|
||||||
|
|
||||||
bool IsPowerConnection() const { return m_libPin->IsPowerConnection(); }
|
bool IsPowerConnection() const { return m_libPin->IsPowerConnection(); }
|
||||||
|
|
||||||
|
bool ConnectionPropagatesTo( const EDA_ITEM* aItem ) const override;
|
||||||
|
|
||||||
|
|
||||||
#if defined(DEBUG)
|
#if defined(DEBUG)
|
||||||
void Show( int nestLevel, std::ostream& os ) const override {}
|
void Show( int nestLevel, std::ostream& os ) const override {}
|
||||||
|
|
Loading…
Reference in New Issue