diff --git a/pcbnew/tools/drawing_tool.cpp b/pcbnew/tools/drawing_tool.cpp index f7e36278fe..4fd6652a53 100644 --- a/pcbnew/tools/drawing_tool.cpp +++ b/pcbnew/tools/drawing_tool.cpp @@ -3089,26 +3089,32 @@ int DRAWING_TOOL::DrawVia( const TOOL_EVENT& aEvent ) track->SetStart( trackStart ); track->SetEnd( *joint1 ); + if( *joint1 != viaPos ) + { + PCB_TRACK* newTrack = dynamic_cast( track->Clone() ); + wxCHECK( newTrack, /* void */ ); + const_cast( newTrack->m_Uuid ) = KIID(); + + newTrack->SetStart( *joint1 ); + newTrack->SetEnd( viaPos ); + aCommit.Add( newTrack ); + } + + if( *joint2 != viaPos ) + { + PCB_TRACK* newTrack = dynamic_cast( track->Clone() ); + wxCHECK( newTrack, /* void */ ); + const_cast( newTrack->m_Uuid ) = KIID(); + + newTrack->SetStart( viaPos ); + newTrack->SetEnd( *joint2 ); + aCommit.Add( newTrack ); + } + PCB_TRACK* newTrack = dynamic_cast( track->Clone() ); wxCHECK( newTrack, /* void */ ); const_cast( newTrack->m_Uuid ) = KIID(); - newTrack->SetStart( *joint1 ); - newTrack->SetEnd( viaPos ); - aCommit.Add( newTrack ); - - newTrack = dynamic_cast( track->Clone() ); - wxCHECK( newTrack, /* void */ ); - const_cast( newTrack->m_Uuid ) = KIID(); - - newTrack->SetStart( viaPos ); - newTrack->SetEnd( *joint2 ); - aCommit.Add( newTrack ); - - newTrack = dynamic_cast( track->Clone() ); - wxCHECK( newTrack, /* void */ ); - const_cast( newTrack->m_Uuid ) = KIID(); - newTrack->SetStart( *joint2 ); newTrack->SetEnd( trackEnd ); aCommit.Add( newTrack );