97 lines
2.5 KiB
C++
97 lines
2.5 KiB
C++
/*********************************************/
|
|
/* 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->m_Layer ) continue;
|
|
Delete_Segment(DC, track);
|
|
}
|
|
GetScreen()->m_CurrentItem = 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->m_StructType == 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;
|
|
}
|
|
|
|
|
|
|
|
|