Eeschema: add junction to 3-component/wire connection
Fixes: lp:1737014 * https://bugs.launchpad.net/kicad/+bug/1737014
This commit is contained in:
parent
d205366da7
commit
f0fecba9e1
|
@ -352,24 +352,25 @@ bool SCH_SCREEN::IsJunctionNeeded( const wxPoint& aPosition, bool aNew )
|
|||
bool has_line = false;
|
||||
bool has_nonparallel = false;
|
||||
int end_count = 0;
|
||||
|
||||
int pin_count = 0;
|
||||
std::vector< SCH_LINE* > lines;
|
||||
|
||||
for( SCH_ITEM* item = m_drawList.begin(); item; item = item->Next() )
|
||||
{
|
||||
if( item->GetFlags() & STRUCT_DELETED )
|
||||
continue;
|
||||
|
||||
if( aNew && ( item->Type() == SCH_JUNCTION_T ) && ( item->HitTest( aPosition ) ) )
|
||||
return false;
|
||||
|
||||
if( item->Type() != SCH_LINE_T )
|
||||
continue;
|
||||
|
||||
if( item->GetLayer() != LAYER_WIRE )
|
||||
continue;
|
||||
|
||||
if( item->HitTest( aPosition, 0 ) )
|
||||
if( ( item->Type() == SCH_LINE_T )
|
||||
&& ( item->GetLayer() == LAYER_WIRE )
|
||||
&& ( item->HitTest( aPosition, 0 ) ) )
|
||||
lines.push_back( (SCH_LINE*) item );
|
||||
|
||||
if( ( item->Type() == SCH_COMPONENT_T )
|
||||
&& ( item->IsConnected( aPosition ) ) )
|
||||
pin_count++;
|
||||
}
|
||||
|
||||
BOOST_FOREACH( SCH_LINE* line, lines)
|
||||
|
@ -390,10 +391,12 @@ bool SCH_SCREEN::IsJunctionNeeded( const wxPoint& aPosition, bool aNew )
|
|||
}
|
||||
}
|
||||
|
||||
int has_pin = !!( GetPin( aPosition, NULL, true ) );
|
||||
// If there is line intersecting a pin
|
||||
if( pin_count && has_line )
|
||||
return true;
|
||||
|
||||
// If there is line intersecting a pin or non-parallel end
|
||||
if( has_pin && ( has_line || end_count > 1 ) )
|
||||
// If there are three or more endpoints
|
||||
if( pin_count + end_count > 2 )
|
||||
return true;
|
||||
|
||||
// If there is at least one segment that ends on a non-parallel line or
|
||||
|
|
Loading…
Reference in New Issue