bug fix 2660689 Unconnected pads in RC4

This commit is contained in:
charras 2009-03-05 15:58:06 +00:00
parent eb4c5eba6f
commit cbca180a12
4 changed files with 20 additions and 11 deletions

View File

@ -17,6 +17,7 @@ email address.
So they are temporary disabled (see my comments in these functions) So they are temporary disabled (see my comments in these functions)
bug fix in Marque_Une_Piste(): the last segments created can be see as part of the flagged track: bug fix in Marque_Une_Piste(): the last segments created can be see as part of the flagged track:
so delete track (or edit track width) deletes the track and some others segments (last created) so delete track (or edit track width) deletes the track and some others segments (last created)
bug fix 2660689 Unconnected pads in RC4. Also fixed some no deletion of the old track when creating a new track
2009-Feb-25 UPDATE Wayne Stambaugh <stambaughw@verizon.net> 2009-Feb-25 UPDATE Wayne Stambaugh <stambaughw@verizon.net>

View File

@ -346,9 +346,7 @@ void WinEDA_BasePcbFrame::test_1_net_connexion( wxDC* DC, int net_code )
if( m_Pcb->m_Track ) if( m_Pcb->m_Track )
{ {
TRACK* pt_start_conn; TRACK* pt_start_conn;
TRACK* pt_end_conn; TRACK* pt_end_conn = NULL;
pt_end_conn = NULL;
pt_start_conn = m_Pcb->m_Track.GetFirst()->GetStartNetCode( net_code ); pt_start_conn = m_Pcb->m_Track.GetFirst()->GetStartNetCode( net_code );
if( pt_start_conn ) if( pt_start_conn )
@ -441,6 +439,7 @@ static void Build_Pads_Info_Connections_By_Tracks( TRACK* pt_start_conn, TRACK*
{ {
Track->end = Locate_Piste_Connectee( Track, Track, pt_end_conn, END ); Track->end = Locate_Piste_Connectee( Track, Track, pt_end_conn, END );
} }
if( Track == pt_end_conn ) if( Track == pt_end_conn )
break; break;
} }

View File

@ -505,6 +505,7 @@ void WinEDA_PcbFrame::End_Route( TRACK* aTrack, wxDC* DC )
for( track=firstTrack; track && i<newCount; ++i, track = track->Next() ) for( track=firstTrack; track && i<newCount; ++i, track = track->Next() )
{ {
track->m_Flags = 0; track->m_Flags = 0;
track->SetState( BUSY, OFF );
} }
// erase the old track, if exists // erase the old track, if exists

View File

@ -81,10 +81,12 @@ int EraseOldTrack( WinEDA_BasePcbFrame* frame, BOARD* Pcb, wxDC* DC,
BufEnd = BufDeb->GetEndNetCode( netcode ); BufEnd = BufDeb->GetEndNetCode( netcode );
/* nettoyage des flags pour tout le net */ /* nettoyage des flags pour tout le net */
for( pt_del = BufDeb; pt_del && pt_del != BufEnd; pt_del = pt_del->Next() ) for( pt_del = BufDeb; pt_del; pt_del = pt_del->Next() )
{ {
D(printf("track %p turning off BUSY | EDIT | CHAIN\n", pt_del );) D(printf("track %p turning off BUSY | EDIT | CHAIN\n", pt_del );)
pt_del->SetState( BUSY | EDIT | CHAIN, OFF ); pt_del->SetState( BUSY | EDIT | CHAIN, OFF );
if( pt_del == BufEnd ) // Last segment reached
break;
} }
/* Calcul des points limites de la nouvelle piste */ /* Calcul des points limites de la nouvelle piste */
@ -173,10 +175,12 @@ int EraseOldTrack( WinEDA_BasePcbFrame* frame, BOARD* Pcb, wxDC* DC,
if( nbconnect == 0 ) if( nbconnect == 0 )
{ {
/* nettoyage des flags */ /* Clear used flagss */
for( pt_del = BufDeb; pt_del && pt_del != BufEnd; pt_del = pt_del->Next() ) for( pt_del = BufDeb; pt_del; pt_del = pt_del->Next() )
{ {
pt_del->SetState( DELETED | EDIT | CHAIN, OFF ); pt_del->SetState( BUSY | DELETED | EDIT | CHAIN, OFF );
if( pt_del == BufEnd ) // Last segment reached
break;
} }
return 0; return 0;
@ -191,10 +195,12 @@ int EraseOldTrack( WinEDA_BasePcbFrame* frame, BOARD* Pcb, wxDC* DC,
/* Examen de tous les segments marques */ /* Examen de tous les segments marques */
while( nbconnect ) while( nbconnect )
{ {
for( pt_del = BufDeb; pt_del && pt_del != BufEnd; pt_del = pt_del->Next() ) for( pt_del = BufDeb; pt_del; pt_del = pt_del->Next() )
{ {
if( pt_del->GetState( CHAIN ) ) if( pt_del->GetState( CHAIN ) )
break; break;
if( pt_del == BufEnd ) // Last segment reached
break;
} }
nbconnect--; nbconnect--;
@ -244,10 +250,12 @@ int EraseOldTrack( WinEDA_BasePcbFrame* frame, BOARD* Pcb, wxDC* DC,
ListSetState( pt_del, nb_segm, BUSY, OFF ); ListSetState( pt_del, nb_segm, BUSY, OFF );
} }
/* nettoyage des flags */ /* Clear used flags */
for( pt_del = Pcb->m_Track; pt_del && pt_del != BufEnd; pt_del = pt_del->Next() ) for( pt_del = Pcb->m_Track; pt_del; pt_del = pt_del->Next() )
{ {
pt_del->SetState( DELETED | EDIT | CHAIN, OFF ); pt_del->SetState( BUSY | DELETED | EDIT | CHAIN, OFF );
if( pt_del == BufEnd ) // Last segment reached
break;
} }
return 0; return 0;