/********************************************************/ /* Effacements : Routines de sauvegarde et d'effacement */ /********************************************************/ #include "fctsys.h" #include "common.h" #include "gerbview.h" #include "protos.h" /* Routines externes : */ /* Routines Locales */ /***********************************************/ void WinEDA_GerberFrame::UnDeleteItem(wxDC * DC) /***********************************************/ /* Restitution d'un element (MODULE ou TRACK ) Efface */ { EDA_BaseStruct * PtStruct, *PtNext; TRACK * pt_track; int net_code; if( ! g_UnDeleteStackPtr ) return; g_UnDeleteStackPtr --; PtStruct = g_UnDeleteStack[g_UnDeleteStackPtr]; if ( PtStruct == NULL ) return; // Ne devrait pas se produire switch(PtStruct->m_StructType) { case TYPEVIA: case TYPETRACK: for( ; PtStruct != NULL; PtStruct = PtNext) { PtNext = PtStruct->Pnext; PtStruct->SetState(DELETED,OFF); /* Effacement du bit DELETED */ Trace_Segment(DrawPanel, DC, (TRACK*) PtStruct, GR_OR); } PtStruct = g_UnDeleteStack[g_UnDeleteStackPtr]; net_code = ((TRACK*)PtStruct)->m_NetCode; pt_track = ( (TRACK*) PtStruct)->GetBestInsertPoint(m_Pcb); ((TRACK*)PtStruct)->Insert(m_Pcb, pt_track); g_UnDeleteStack[g_UnDeleteStackPtr] = NULL; break; default: DisplayError(this, wxT("Undelete struct: type Struct inattendu")); break; } } /********************************************************************/ EDA_BaseStruct * SaveItemEfface(EDA_BaseStruct * PtItem, int nbitems) /********************************************************************/ /* Sauvegarde d'un element aux fins de restitution par Undelete Supporte actuellement : Module et segments de piste */ { EDA_BaseStruct * NextS, * PtStruct = PtItem; int ii; if( (PtItem == NULL) || (nbitems == 0) ) return NULL; if (g_UnDeleteStackPtr >= UNDELETE_STACK_SIZE ) { /* Delete last deleted item, and shift stack. */ DeleteStructure(g_UnDeleteStack[0]); for (ii = 0; ii < (g_UnDeleteStackPtr-1); ii++) { g_UnDeleteStack[ii] = g_UnDeleteStack[ii + 1]; } g_UnDeleteStackPtr--;; } g_UnDeleteStack[g_UnDeleteStackPtr++] = PtItem; switch ( PtStruct->m_StructType ) { case TYPEVIA: case TYPETRACK: { EDA_BaseStruct * Back = NULL; g_UnDeleteStack[g_UnDeleteStackPtr-1] = PtStruct; for ( ; nbitems > 0; nbitems--, PtStruct = NextS) { NextS = PtStruct->Pnext; ((TRACK*)PtStruct)->UnLink(); PtStruct->SetState(DELETED, ON); if( nbitems <= 1 ) NextS = NULL; /* fin de chaine */ PtStruct->Pnext = NextS; PtStruct->Pback = Back; Back = PtStruct; if(NextS == NULL) break; } } break; default: break; } return(g_UnDeleteStack[g_UnDeleteStackPtr-1]); }