109 lines
2.7 KiB
C++
109 lines
2.7 KiB
C++
/********************************************************/
|
|
/* 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]);
|
|
}
|
|
|
|
|