/*********************************************/ /* Edition des pistes: Routines d'effacement */ /* Effacement de segment, piste, net et zone */ /*********************************************/ #include "fctsys.h" #include "common.h" #include "gerbview.h" #include "protos.h" /* Routines externes : */ /* Routines Locales */ /* Variables locales */ /****************************************************************************************/ void WinEDA_GerberFrame::Delete_DCode_Items( wxDC* DC, int dcode_value, int layer_number ) /****************************************************************************************/ { if( dcode_value < FIRST_DCODE ) // No tool selected return; BOARD* Pcb = m_Pcb; TRACK* track = Pcb->m_Track, * next_track; for( ; track != NULL; track = next_track ) { next_track = track->Next(); if( dcode_value != track->m_NetCode ) continue; if( layer_number >= 0 && layer_number != track->GetLayer() ) continue; Delete_Segment( DC, track ); } GetScreen()->SetCurItem( NULL ); } /*****************************************************************/ TRACK* WinEDA_GerberFrame::Delete_Segment( wxDC* DC, TRACK* Track ) /*****************************************************************/ /* Supprime 1 segment de piste. * 2 Cas possibles: * Si On est en trace de nouvelle piste: Effacement du segment en * cours de trace * Sinon : Effacment du segment sous le curseur. */ { if( Track == NULL ) return NULL; if( Track->m_Flags & IS_NEW ) // Trace en cours, on peut effacer le dernier segment { if( g_TrackSegmentCount > 0 ) { // modification du trace Track = g_CurrentTrackSegment; g_CurrentTrackSegment = (TRACK*) g_CurrentTrackSegment->Pback; delete Track; g_TrackSegmentCount--; if( g_TrackSegmentCount && (g_CurrentTrackSegment->Type() == TYPEVIA) ) { Track = g_CurrentTrackSegment; g_CurrentTrackSegment = (TRACK*) g_CurrentTrackSegment->Pback; delete Track; g_TrackSegmentCount--; } if( g_CurrentTrackSegment ) g_CurrentTrackSegment->Pnext = NULL; Affiche_Status_Box(); if( g_TrackSegmentCount == 0 ) { DrawPanel->ManageCurseur = NULL; DrawPanel->ForceCloseManageCurseur = NULL; return NULL; } else { if( DrawPanel->ManageCurseur ) DrawPanel->ManageCurseur( DrawPanel, DC, FALSE ); return g_CurrentTrackSegment; } } return NULL; } // Fin traitement si trace en cours Trace_Segment( DrawPanel, DC, Track, GR_XOR ); SaveItemEfface( Track, 1 ); GetScreen()->SetModify(); return NULL; }