fixed a bug in "ratsnest on module or pad", and beautification

This commit is contained in:
dickelbeck 2007-08-04 04:40:07 +00:00
parent 8bb93b8d48
commit f3cd8f57d3
5 changed files with 551 additions and 476 deletions

View File

@ -138,7 +138,8 @@ void WinEDA_BasePcbFrame::GeneralControle( wxDC* DC, wxPoint Mouse )
// Save the board after the time out : // Save the board after the time out :
int CurrentTime = time( NULL ); int CurrentTime = time( NULL );
if( !GetScreen()->IsModify() || GetScreen()->IsSave() ) if( !GetScreen()->IsModify() || GetScreen()->IsSave() )
{ /* If no change, reset the time out */ {
/* If no change, reset the time out */
g_SaveTime = CurrentTime; g_SaveTime = CurrentTime;
} }
@ -147,7 +148,9 @@ void WinEDA_BasePcbFrame::GeneralControle( wxDC* DC, wxPoint Mouse )
wxString tmpFileName = GetScreen()->m_FileName; wxString tmpFileName = GetScreen()->m_FileName;
wxString filename = g_SaveFileName + PcbExtBuffer; wxString filename = g_SaveFileName + PcbExtBuffer;
bool flgmodify = GetScreen()->IsModify(); bool flgmodify = GetScreen()->IsModify();
( (WinEDA_PcbFrame*) this )->SavePcbFile( filename ); ( (WinEDA_PcbFrame*) this )->SavePcbFile( filename );
if( flgmodify ) // Set the flags m_Modify cleared by SavePcbFile() if( flgmodify ) // Set the flags m_Modify cleared by SavePcbFile()
{ {
GetScreen()->SetModify(); GetScreen()->SetModify();

View File

@ -126,6 +126,7 @@ void WinEDA_PcbFrame::OnLeftClick( wxDC* DC, const wxPoint& MousePos )
case ID_PCB_SHOW_1_RATSNEST_BUTT: case ID_PCB_SHOW_1_RATSNEST_BUTT:
DrawStruct = PcbGeneralLocateAndDisplay(); DrawStruct = PcbGeneralLocateAndDisplay();
if( DrawStruct )
Show_1_Ratsnest( DrawStruct, DC ); Show_1_Ratsnest( DrawStruct, DC );
break; break;

View File

@ -20,6 +20,7 @@
/***********************************************/ /***********************************************/
void WinEDA_PcbFrame::DisplayTrackSettings( void ) void WinEDA_PcbFrame::DisplayTrackSettings( void )
/***********************************************/ /***********************************************/
/* Display the current track width and via diameter /* Display the current track width and via diameter
*/ */
{ {
@ -47,14 +48,16 @@ CHEVELU * pt_chevelu;
if( (m_Pcb->m_Status_Pcb & LISTE_CHEVELU_OK) == 0 ) if( (m_Pcb->m_Status_Pcb & LISTE_CHEVELU_OK) == 0 )
{ {
if ( g_Show_Ratsnest ) Compile_Ratsnest( DC, TRUE ); if( g_Show_Ratsnest )
Compile_Ratsnest( DC, TRUE );
return; return;
} }
DrawGeneralRatsnest( DC, 0 ); /* effacement eventuel du chevelu affiche */ DrawGeneralRatsnest( DC, 0 ); /* effacement eventuel du chevelu affiche */
pt_chevelu = m_Pcb->m_Ratsnest; pt_chevelu = m_Pcb->m_Ratsnest;
if ( pt_chevelu == NULL ) return; if( pt_chevelu == NULL )
return;
if( g_Show_Ratsnest ) if( g_Show_Ratsnest )
{ {
@ -62,9 +65,9 @@ CHEVELU * pt_chevelu;
{ {
pt_chevelu->status |= CH_VISIBLE; pt_chevelu->status |= CH_VISIBLE;
} }
DrawGeneralRatsnest( DC, 0 ); DrawGeneralRatsnest( DC, 0 );
} }
else else
{ {
for( ii = m_Pcb->GetNumRatsnests(); ii > 0; pt_chevelu++, ii-- ) for( ii = m_Pcb->GetNumRatsnests(); ii > 0; pt_chevelu++, ii-- )
@ -78,11 +81,12 @@ CHEVELU * pt_chevelu;
/*************************************************************************/ /*************************************************************************/
void WinEDA_PcbFrame::ExChange_Track_Layer( TRACK* pt_segm, wxDC* DC ) void WinEDA_PcbFrame::ExChange_Track_Layer( TRACK* pt_segm, wxDC* DC )
/*************************************************************************/ /*************************************************************************/
/* /*
change de couche la piste pointee par la souris : * change de couche la piste pointee par la souris :
la piste doit etre sur une des couches de travail, * la piste doit etre sur une des couches de travail,
elle est mise sur l'autre couche de travail, si cela est possible * elle est mise sur l'autre couche de travail, si cela est possible
(ou si DRC = Off ). * (ou si DRC = Off ).
*/ */
{ {
int ii; int ii;
@ -99,7 +103,7 @@ int l1, l2 , nb_segm;
pt_track = Marque_Une_Piste( this, DC, pt_segm, &nb_segm, GR_XOR ); pt_track = Marque_Une_Piste( this, DC, pt_segm, &nb_segm, GR_XOR );
/* effacement du flag BUSY et sauvegarde en membre .param de la couche /* effacement du flag BUSY et sauvegarde en membre .param de la couche
initiale */ * initiale */
ii = nb_segm; pt_segm = pt_track; ii = nb_segm; pt_segm = pt_track;
for( ; ii > 0; ii--, pt_segm = (TRACK*) pt_segm->Pnext ) for( ; ii > 0; ii--, pt_segm = (TRACK*) pt_segm->Pnext )
{ {
@ -110,11 +114,14 @@ int l1, l2 , nb_segm;
ii = 0; pt_segm = pt_track; ii = 0; pt_segm = pt_track;
for( ; ii < nb_segm; ii++, pt_segm = (TRACK*) pt_segm->Pnext ) for( ; ii < nb_segm; ii++, pt_segm = (TRACK*) pt_segm->Pnext )
{ {
if( pt_segm->m_StructType == TYPEVIA) continue; if( pt_segm->m_StructType == TYPEVIA )
continue;
/* inversion des couches */ /* inversion des couches */
if( pt_segm->m_Layer == l1 ) pt_segm->m_Layer = l2 ; if( pt_segm->m_Layer == l1 )
else if(pt_segm->m_Layer == l2 ) pt_segm->m_Layer = l1 ; pt_segm->m_Layer = l2;
else if( pt_segm->m_Layer == l2 )
pt_segm->m_Layer = l1;
if( (Drc_On) && ( Drc( this, DC, pt_segm, m_Pcb->m_Track, 1 ) == BAD_DRC ) ) if( (Drc_On) && ( Drc( this, DC, pt_segm, m_Pcb->m_Track, 1 ) == BAD_DRC ) )
{ /* Annulation du changement */ { /* Annulation du changement */
@ -123,11 +130,13 @@ int l1, l2 , nb_segm;
{ {
pt_segm->m_Layer = pt_segm->m_Param; pt_segm->m_Layer = pt_segm->m_Param;
} }
Trace_Une_Piste( DrawPanel, DC, pt_track, nb_segm, GR_OR ); Trace_Une_Piste( DrawPanel, DC, pt_track, nb_segm, GR_OR );
DisplayError( this, _( "Drc error, cancelled" ), 10 ); DisplayError( this, _( "Drc error, cancelled" ), 10 );
return; return;
} }
} }
Trace_Une_Piste( DrawPanel, DC, pt_track, nb_segm, GR_OR | GR_SURBRILL ); Trace_Une_Piste( DrawPanel, DC, pt_track, nb_segm, GR_OR | GR_SURBRILL );
/* controle des extremites de segments: sont-ils sur un pad */ /* controle des extremites de segments: sont-ils sur un pad */
ii = 0; pt_segm = pt_track; ii = 0; pt_segm = pt_track;
@ -136,17 +145,20 @@ int l1, l2 , nb_segm;
pt_segm->start = Locate_Pad_Connecte( m_Pcb, pt_segm, START ); pt_segm->start = Locate_Pad_Connecte( m_Pcb, pt_segm, START );
pt_segm->end = Locate_Pad_Connecte( m_Pcb, pt_segm, END ); pt_segm->end = Locate_Pad_Connecte( m_Pcb, pt_segm, END );
} }
test_1_net_connexion( DC, pt_track->m_NetCode ); test_1_net_connexion( DC, pt_track->m_NetCode );
Affiche_Infos_Piste( this, pt_track ); Affiche_Infos_Piste( this, pt_track );
GetScreen()->SetModify(); GetScreen()->SetModify();
} }
/****************************************************************/ /****************************************************************/
void WinEDA_PcbFrame::Other_Layer_Route( TRACK* track, wxDC* DC ) void WinEDA_PcbFrame::Other_Layer_Route( TRACK* track, wxDC* DC )
/****************************************************************/ /****************************************************************/
/* /*
Change de couche active pour le routage. * Change de couche active pour le routage.
Si une piste est en cours de trace : placement d'une Via * Si une piste est en cours de trace : placement d'une Via
*/ */
{ {
TRACK* pt_segm; TRACK* pt_segm;
@ -158,7 +170,8 @@ int itmp;
{ {
if( GetScreen()->m_Active_Layer != GetScreen()->m_Route_Layer_TOP ) if( GetScreen()->m_Active_Layer != GetScreen()->m_Route_Layer_TOP )
GetScreen()->m_Active_Layer = GetScreen()->m_Route_Layer_TOP; GetScreen()->m_Active_Layer = GetScreen()->m_Route_Layer_TOP;
else GetScreen()->m_Active_Layer = GetScreen()->m_Route_Layer_BOTTOM ; else
GetScreen()->m_Active_Layer = GetScreen()->m_Route_Layer_BOTTOM;
Affiche_Status_Box(); Affiche_Status_Box();
SetToolbars(); SetToolbars();
return; return;
@ -170,10 +183,11 @@ int itmp;
pt_segm = g_FirstTrackSegment; pt_segm = g_FirstTrackSegment;
for( ii = 0; ii < g_TrackSegmentCount - 1; ii++, pt_segm = (TRACK*) pt_segm->Pnext ) for( ii = 0; ii < g_TrackSegmentCount - 1; ii++, pt_segm = (TRACK*) pt_segm->Pnext )
{ {
if( (pt_segm->m_StructType == TYPEVIA) && if( (pt_segm->m_StructType == TYPEVIA)
(g_CurrentTrackSegment->m_End == pt_segm->m_Start) ) && (g_CurrentTrackSegment->m_End == pt_segm->m_Start) )
return; return;
} }
/* Test si segment possible a placer */ /* Test si segment possible a placer */
if( Drc_On ) if( Drc_On )
if( Drc( this, DC, g_CurrentTrackSegment, m_Pcb->m_Track, 1 ) == BAD_DRC ) if( Drc( this, DC, g_CurrentTrackSegment, m_Pcb->m_Track, 1 ) == BAD_DRC )
@ -193,12 +207,14 @@ int itmp;
Via->m_Start = Via->m_End = g_CurrentTrackSegment->m_End; Via->m_Start = Via->m_End = g_CurrentTrackSegment->m_End;
Via->m_Layer = GetScreen()->m_Active_Layer; Via->m_Layer = GetScreen()->m_Active_Layer;
// Provisoirement. indicate the first layer (?) // Provisoirement. indicate the first layer (?)
//swap the layers. //swap the layers.
if( GetScreen()->m_Active_Layer != GetScreen()->m_Route_Layer_TOP ) if( GetScreen()->m_Active_Layer != GetScreen()->m_Route_Layer_TOP )
GetScreen()->m_Active_Layer = GetScreen()->m_Route_Layer_TOP; GetScreen()->m_Active_Layer = GetScreen()->m_Route_Layer_TOP;
else GetScreen()->m_Active_Layer = GetScreen()->m_Route_Layer_BOTTOM ; else
GetScreen()->m_Active_Layer = GetScreen()->m_Route_Layer_BOTTOM;
if( (Via->m_Shape & 15) == VIA_ENTERREE ) if( (Via->m_Shape & 15) == VIA_ENTERREE )
{ {
@ -208,7 +224,8 @@ int itmp;
{ // A revoir! ( la via devrait deboucher sur 1 cote ) { // A revoir! ( la via devrait deboucher sur 1 cote )
Via->m_Layer |= GetScreen()->m_Active_Layer << 4; Via->m_Layer |= GetScreen()->m_Active_Layer << 4;
} }
else Via->m_Layer = 0x0F; else
Via->m_Layer = 0x0F;
if( Drc_On &&( Drc( this, DC, Via, m_Pcb->m_Track, 1 ) == BAD_DRC ) ) if( Drc_On &&( Drc( this, DC, Via, m_Pcb->m_Track, 1 ) == BAD_DRC ) )
{ /* Via impossible a placer ici */ { /* Via impossible a placer ici */
@ -248,27 +265,31 @@ int itmp;
/*************************************************/ /*************************************************/
void WinEDA_PcbFrame::Affiche_Status_Net( wxDC* DC ) void WinEDA_PcbFrame::Affiche_Status_Net( wxDC* DC )
/*************************************************/ /*************************************************/
/* Affiche: /* Affiche:
le status du net en haut d'ecran du segment pointe par la souris * le status du net en haut d'ecran du segment pointe par la souris
ou le status PCB en bas d'ecran si pas de segment pointe * ou le status PCB en bas d'ecran si pas de segment pointe
*/ */
{ {
TRACK* pt_segm; TRACK* pt_segm;
int masquelayer = g_TabOneLayerMask[GetScreen()->m_Active_Layer]; int masquelayer = g_TabOneLayerMask[GetScreen()->m_Active_Layer];
pt_segm = Locate_Pistes( m_Pcb->m_Track, masquelayer, CURSEUR_OFF_GRILLE ); pt_segm = Locate_Pistes( m_Pcb->m_Track, masquelayer, CURSEUR_OFF_GRILLE );
if(pt_segm == NULL) Affiche_Infos_Status_Pcb(this); if( pt_segm == NULL )
else test_1_net_connexion(DC, pt_segm->m_NetCode); Affiche_Infos_Status_Pcb( this );
else
test_1_net_connexion( DC, pt_segm->m_NetCode );
} }
/**********************************************************************/ /**********************************************************************/
void WinEDA_PcbFrame::Show_1_Ratsnest( EDA_BaseStruct* item, wxDC* DC ) void WinEDA_PcbFrame::Show_1_Ratsnest( EDA_BaseStruct* item, wxDC* DC )
/**********************************************************************/ /**********************************************************************/
/* Affiche le ratsnest relatif /* Affiche le ratsnest relatif
au net du pad pointe par la souris * au net du pad pointe par la souris
ou au module localise par la souris * ou au module localise par la souris
Efface le chevelu affiche si aucun module ou pad n'est selectionne * Efface le chevelu affiche si aucun module ou pad n'est selectionne
*/ */
{ {
int ii; int ii;
@ -276,14 +297,18 @@ CHEVELU * pt_chevelu;
D_PAD* pt_pad = NULL; D_PAD* pt_pad = NULL;
MODULE* Module = NULL; MODULE* Module = NULL;
if (g_Show_Ratsnest) return; // Deja Affich<63> if( g_Show_Ratsnest )
return; // Deja Affich<63>
if( !item )
return;
if( (m_Pcb->m_Status_Pcb & LISTE_CHEVELU_OK) == 0 ) if( (m_Pcb->m_Status_Pcb & LISTE_CHEVELU_OK) == 0 )
{ {
Compile_Ratsnest( DC, TRUE ); Compile_Ratsnest( DC, TRUE );
} }
if ( item && (item->m_StructType == TYPEPAD) ) if( item->m_StructType == TYPEPAD )
{ {
pt_pad = (D_PAD*) item; pt_pad = (D_PAD*) item;
Module = (MODULE*) pt_pad->m_Parent; Module = (MODULE*) pt_pad->m_Parent;
@ -297,9 +322,11 @@ MODULE * Module = NULL;
{ {
if( pt_chevelu->m_NetCode == pt_pad->m_NetCode ) if( pt_chevelu->m_NetCode == pt_pad->m_NetCode )
{ {
if( (pt_chevelu->status & CH_VISIBLE) != 0 ) continue; if( (pt_chevelu->status & CH_VISIBLE) != 0 )
continue;
pt_chevelu->status |= CH_VISIBLE; pt_chevelu->status |= CH_VISIBLE;
if( (pt_chevelu->status & CH_ACTIF) == 0 ) continue; if( (pt_chevelu->status & CH_ACTIF) == 0 )
continue;
GRSetDrawMode( DC, GR_XOR ); GRSetDrawMode( DC, GR_XOR );
GRLine( &DrawPanel->m_ClipBox, DC, pt_chevelu->pad_start->m_Pos.x, GRLine( &DrawPanel->m_ClipBox, DC, pt_chevelu->pad_start->m_Pos.x,
@ -313,7 +340,12 @@ MODULE * Module = NULL;
} }
else else
{ {
if ( item && (item->m_StructType == TYPEMODULE) ) if( item->m_StructType == TYPETEXTEMODULE )
{
Module = (MODULE*) item->m_Parent;
}
else if( item->m_StructType == TYPEMODULE )
{ {
Module = (MODULE*) item; Module = (MODULE*) item;
} }
@ -327,12 +359,15 @@ MODULE * Module = NULL;
pt_chevelu = (CHEVELU*) m_Pcb->m_Ratsnest; pt_chevelu = (CHEVELU*) m_Pcb->m_Ratsnest;
for( ii = m_Pcb->GetNumRatsnests(); ii > 0; pt_chevelu++, ii-- ) for( ii = m_Pcb->GetNumRatsnests(); ii > 0; pt_chevelu++, ii-- )
{ {
if( (pt_chevelu->pad_start == pt_pad) || if( (pt_chevelu->pad_start == pt_pad)
(pt_chevelu->pad_end == pt_pad) ) || (pt_chevelu->pad_end == pt_pad) )
{ {
if( pt_chevelu->status & CH_VISIBLE ) continue; if( pt_chevelu->status & CH_VISIBLE )
continue;
pt_chevelu->status |= CH_VISIBLE; pt_chevelu->status |= CH_VISIBLE;
if( (pt_chevelu->status & CH_ACTIF) == 0 ) continue; if( (pt_chevelu->status & CH_ACTIF) == 0 )
continue;
GRSetDrawMode( DC, GR_XOR ); GRSetDrawMode( DC, GR_XOR );
GRLine( &DrawPanel->m_ClipBox, DC, pt_chevelu->pad_start->m_Pos.x, GRLine( &DrawPanel->m_ClipBox, DC, pt_chevelu->pad_start->m_Pos.x,
@ -344,12 +379,13 @@ MODULE * Module = NULL;
} }
} }
} }
pt_pad = NULL; pt_pad = NULL;
} }
} }
/* Effacement complet des selections /* Effacement complet des selections
si aucun pad ou module n'a ete localise */ * si aucun pad ou module n'a ete localise */
if( (pt_pad == NULL) && (Module == NULL) ) if( (pt_pad == NULL) && (Module == NULL) )
{ {
MsgPanel->EraseMsgBox(); MsgPanel->EraseMsgBox();
@ -364,8 +400,9 @@ MODULE * Module = NULL;
/*****************************************************/ /*****************************************************/
void WinEDA_PcbFrame::Affiche_PadsNoConnect( wxDC* DC ) void WinEDA_PcbFrame::Affiche_PadsNoConnect( wxDC* DC )
/*****************************************************/ /*****************************************************/
/* Met en surbrillance les pads non encore connectes ( correspondants aux /* Met en surbrillance les pads non encore connectes ( correspondants aux
chevelus actifs * chevelus actifs
*/ */
{ {
int ii; int ii;
@ -375,7 +412,9 @@ D_PAD * pt_pad;
pt_chevelu = (CHEVELU*) m_Pcb->m_Ratsnest; pt_chevelu = (CHEVELU*) m_Pcb->m_Ratsnest;
for( ii = m_Pcb->GetNumRatsnests(); ii > 0; pt_chevelu++, ii-- ) for( ii = m_Pcb->GetNumRatsnests(); ii > 0; pt_chevelu++, ii-- )
{ {
if( (pt_chevelu->status & CH_ACTIF) == 0 ) continue; if( (pt_chevelu->status & CH_ACTIF) == 0 )
continue;
pt_pad = pt_chevelu->pad_start; pt_pad = pt_chevelu->pad_start;
if( pt_pad ) if( pt_pad )

View File

@ -2,6 +2,7 @@
/* Localisation des elements */ /* Localisation des elements */
/*****************************/ /*****************************/
#include "fctsys.h" #include "fctsys.h"
#include "gr_basic.h" #include "gr_basic.h"
@ -19,14 +20,23 @@ int ux0, uy0, dx, dy, spot_cX, spot_cY; /* Variables utilisees pour
/* fonctions locales */ /* fonctions locales */
EDA_BaseStruct* Locate_MirePcb( EDA_BaseStruct* PtStruct, int LayerSearch, int typeloc ); EDA_BaseStruct* Locate_MirePcb( EDA_BaseStruct* PtStruct, int LayerSearch, int typeloc );
/**/
/* Macro de calcul de la coord de pointage selon le curseur /**
* (ON/OFF grille) choisi * Function RefPos
* returns the reference position, coming from either the mouse position or the
* the cursor position, based on whether the typeloc has the CURSEUR_OFF_GRILLE
* flag ORed in or not.
* @param typeloc int with possible CURSEUR_OFF_GRILLE bit on.
* @return wxPoint - The reference point, either the mouse position or
* the cursor position.
*/ */
#define SET_REF_POS( ref_pos ) if( typeloc == CURSEUR_ON_GRILLE ) \ wxPoint inline RefPos( int typeloc )
{ ref_pos = ActiveScreen->m_Curseur; } \ {
else { ref_pos = ActiveScreen->m_MousePosition; } if( typeloc & CURSEUR_OFF_GRILLE )
return ActiveScreen->m_MousePosition;
else
return ActiveScreen->m_Curseur;
}
/** /**
@ -36,7 +46,8 @@ EDA_BaseStruct* Locate_MirePcb( EDA_BaseStruct* PtStruct, int LayerSearch, int t
* @param layer One of the two allowed layers for modules: CMP_N or CUIVRE_N * @param layer One of the two allowed layers for modules: CMP_N or CUIVRE_N
* @return bool - true if the layer is visible, else false. * @return bool - true if the layer is visible, else false.
*/ */
bool inline IsModuleLayerVisible( int layer ) { bool inline IsModuleLayerVisible( int layer )
{
if( layer==CMP_N ) if( layer==CMP_N )
return DisplayOpt.Show_Modules_Cmp; return DisplayOpt.Show_Modules_Cmp;
@ -146,6 +157,7 @@ EDA_BaseStruct* WinEDA_BasePcbFrame::Locate( int typeloc, int LayerSearch )
if( Track != NULL ) if( Track != NULL )
{ {
TrackLocate = Track; /* a track or a via is found */ TrackLocate = Track; /* a track or a via is found */
/* Search for a via */ /* Search for a via */
while( ( TrackLocate = Locate_Pistes( TrackLocate, while( ( TrackLocate = Locate_Pistes( TrackLocate,
masque_layer, typeloc ) ) != NULL ) masque_layer, typeloc ) ) != NULL )
@ -153,6 +165,7 @@ EDA_BaseStruct* WinEDA_BasePcbFrame::Locate( int typeloc, int LayerSearch )
Track = TrackLocate; Track = TrackLocate;
if( TrackLocate->m_StructType == TYPEVIA ) if( TrackLocate->m_StructType == TYPEVIA )
break; break;
TrackLocate = (TRACK*) TrackLocate->Pnext; TrackLocate = (TRACK*) TrackLocate->Pnext;
} }
@ -169,8 +182,9 @@ EDA_BaseStruct* WinEDA_BasePcbFrame::Locate( int typeloc, int LayerSearch )
/* Search for a footprint text */ /* Search for a footprint text */
// First search: locate texts for footprints on copper or component layer // First search: locate texts for footprints on copper or component layer
// Priority to the active layer (component or copper. // Priority to the active layer (component or copper).
// this is useful for small smd components when 2 texts overlap but are not on the same layer // This is useful for small smd components when 2 texts overlap but are not
// on the same layer
if( LayerSearch == LAYER_CUIVRE_N || LayerSearch == CMP_N ) if( LayerSearch == LAYER_CUIVRE_N || LayerSearch == CMP_N )
{ {
for( module = m_Pcb->m_Modules; module != NULL; module = (MODULE*) module->Pnext ) for( module = m_Pcb->m_Modules; module != NULL; module = (MODULE*) module->Pnext )
@ -316,14 +330,14 @@ EDGE_MODULE* Locate_Edge_Module( MODULE* module, int typeloc )
int uxf, uyf, type_trace; int uxf, uyf, type_trace;
int rayon, dist; int rayon, dist;
wxPoint ref_pos; /* coord du point de localisation */ wxPoint ref_pos; /* coord du point de localisation */
int StAngle, EndAngle, MouseAngle;/* pour localisation d'arcs,
* angle du point de debut, de fin et du point /* pour localisation d'arcs, angle du point de debut, de fin et du point de reference */
* de reference */ int StAngle, EndAngle, MouseAngle;
if( !module ) if( !module )
return NULL; return NULL;
SET_REF_POS( ref_pos ); ref_pos = RefPos( typeloc );
PtStruct = module->m_Drawings; PtStruct = module->m_Drawings;
for( ; PtStruct != NULL; PtStruct = PtStruct->Pnext ) for( ; PtStruct != NULL; PtStruct = PtStruct->Pnext )
@ -397,7 +411,7 @@ EDA_BaseStruct* Locate_Cotation( BOARD* Pcb, int LayerSearch, int typeloc )
wxPoint ref_pos; wxPoint ref_pos;
int ux0, uy0; int ux0, uy0;
SET_REF_POS( ref_pos ); ref_pos = RefPos( typeloc );
PtStruct = Pcb->m_Drawings; PtStruct = Pcb->m_Drawings;
for( ; PtStruct != NULL; PtStruct = PtStruct->Pnext ) for( ; PtStruct != NULL; PtStruct = PtStruct->Pnext )
@ -418,6 +432,7 @@ EDA_BaseStruct* Locate_Cotation( BOARD* Pcb, int LayerSearch, int typeloc )
/* Localisation des SEGMENTS ?) */ /* Localisation des SEGMENTS ?) */
ux0 = Cotation->Barre_ox; uy0 = Cotation->Barre_oy; ux0 = Cotation->Barre_ox; uy0 = Cotation->Barre_oy;
/* recalcul des coordonnees avec ux0, uy0 = origine des coordonnees */ /* recalcul des coordonnees avec ux0, uy0 = origine des coordonnees */
dx = Cotation->Barre_fx - ux0; dy = Cotation->Barre_fy - uy0; dx = Cotation->Barre_fx - ux0; dy = Cotation->Barre_fy - uy0;
spot_cX = ref_pos.x - ux0; spot_cY = ref_pos.y - uy0; spot_cX = ref_pos.x - ux0; spot_cY = ref_pos.y - uy0;
@ -427,6 +442,7 @@ EDA_BaseStruct* Locate_Cotation( BOARD* Pcb, int LayerSearch, int typeloc )
return PtStruct; return PtStruct;
ux0 = Cotation->TraitG_ox; uy0 = Cotation->TraitG_oy; ux0 = Cotation->TraitG_ox; uy0 = Cotation->TraitG_oy;
/* recalcul des coordonnees avec ux0, uy0 = origine des coordonnees */ /* recalcul des coordonnees avec ux0, uy0 = origine des coordonnees */
dx = Cotation->TraitG_fx - ux0; dy = Cotation->TraitG_fy - uy0; dx = Cotation->TraitG_fx - ux0; dy = Cotation->TraitG_fy - uy0;
spot_cX = ref_pos.x - ux0; spot_cY = ref_pos.y - uy0; spot_cX = ref_pos.x - ux0; spot_cY = ref_pos.y - uy0;
@ -436,6 +452,7 @@ EDA_BaseStruct* Locate_Cotation( BOARD* Pcb, int LayerSearch, int typeloc )
return PtStruct; return PtStruct;
ux0 = Cotation->TraitD_ox; uy0 = Cotation->TraitD_oy; ux0 = Cotation->TraitD_ox; uy0 = Cotation->TraitD_oy;
/* recalcul des coordonnees avec ux0, uy0 = origine des coordonnees */ /* recalcul des coordonnees avec ux0, uy0 = origine des coordonnees */
dx = Cotation->TraitD_fx - ux0; dy = Cotation->TraitD_fy - uy0; dx = Cotation->TraitD_fx - ux0; dy = Cotation->TraitD_fy - uy0;
spot_cX = ref_pos.x - ux0; spot_cY = ref_pos.y - uy0; spot_cX = ref_pos.x - ux0; spot_cY = ref_pos.y - uy0;
@ -445,6 +462,7 @@ EDA_BaseStruct* Locate_Cotation( BOARD* Pcb, int LayerSearch, int typeloc )
return PtStruct; return PtStruct;
ux0 = Cotation->FlecheD1_ox; uy0 = Cotation->FlecheD1_oy; ux0 = Cotation->FlecheD1_ox; uy0 = Cotation->FlecheD1_oy;
/* recalcul des coordonnees avec ux0, uy0 = origine des coordonnees */ /* recalcul des coordonnees avec ux0, uy0 = origine des coordonnees */
dx = Cotation->FlecheD1_fx - ux0; dy = Cotation->FlecheD1_fy - uy0; dx = Cotation->FlecheD1_fx - ux0; dy = Cotation->FlecheD1_fy - uy0;
spot_cX = ref_pos.x - ux0; spot_cY = ref_pos.y - uy0; spot_cX = ref_pos.x - ux0; spot_cY = ref_pos.y - uy0;
@ -454,6 +472,7 @@ EDA_BaseStruct* Locate_Cotation( BOARD* Pcb, int LayerSearch, int typeloc )
return PtStruct; return PtStruct;
ux0 = Cotation->FlecheD2_ox; uy0 = Cotation->FlecheD2_oy; ux0 = Cotation->FlecheD2_ox; uy0 = Cotation->FlecheD2_oy;
/* recalcul des coordonnees avec ux0, uy0 = origine des coordonnees */ /* recalcul des coordonnees avec ux0, uy0 = origine des coordonnees */
dx = Cotation->FlecheD2_fx - ux0; dy = Cotation->FlecheD2_fy - uy0; dx = Cotation->FlecheD2_fx - ux0; dy = Cotation->FlecheD2_fy - uy0;
spot_cX = ref_pos.x - ux0; spot_cY = ref_pos.y - uy0; spot_cX = ref_pos.x - ux0; spot_cY = ref_pos.y - uy0;
@ -463,6 +482,7 @@ EDA_BaseStruct* Locate_Cotation( BOARD* Pcb, int LayerSearch, int typeloc )
return PtStruct; return PtStruct;
ux0 = Cotation->FlecheG1_ox; uy0 = Cotation->FlecheG1_oy; ux0 = Cotation->FlecheG1_ox; uy0 = Cotation->FlecheG1_oy;
/* recalcul des coordonnees avec ux0, uy0 = origine des coordonnees */ /* recalcul des coordonnees avec ux0, uy0 = origine des coordonnees */
dx = Cotation->FlecheG1_fx - ux0; dy = Cotation->FlecheG1_fy - uy0; dx = Cotation->FlecheG1_fx - ux0; dy = Cotation->FlecheG1_fy - uy0;
spot_cX = ref_pos.x - ux0; spot_cY = ref_pos.y - uy0; spot_cX = ref_pos.x - ux0; spot_cY = ref_pos.y - uy0;
@ -472,6 +492,7 @@ EDA_BaseStruct* Locate_Cotation( BOARD* Pcb, int LayerSearch, int typeloc )
return PtStruct; return PtStruct;
ux0 = Cotation->FlecheG2_ox; uy0 = Cotation->FlecheG2_oy; ux0 = Cotation->FlecheG2_ox; uy0 = Cotation->FlecheG2_oy;
/* recalcul des coordonnees avec ux0, uy0 = origine des coordonnees */ /* recalcul des coordonnees avec ux0, uy0 = origine des coordonnees */
dx = Cotation->FlecheG2_fx - ux0; dy = Cotation->FlecheG2_fy - uy0; dx = Cotation->FlecheG2_fx - ux0; dy = Cotation->FlecheG2_fy - uy0;
spot_cX = ref_pos.x - ux0; spot_cY = ref_pos.y - uy0; spot_cX = ref_pos.x - ux0; spot_cY = ref_pos.y - uy0;
@ -501,7 +522,7 @@ DRAWSEGMENT* Locate_Segment_Pcb( BOARD* Pcb, int LayerSearch, int typeloc )
wxPoint ref_pos; wxPoint ref_pos;
PCB_SCREEN* screen = (PCB_SCREEN*) ActiveScreen; PCB_SCREEN* screen = (PCB_SCREEN*) ActiveScreen;
SET_REF_POS( ref_pos ); ref_pos = RefPos( typeloc );
PtStruct = Pcb->m_Drawings; PtStruct = Pcb->m_Drawings;
for( ; PtStruct != NULL; PtStruct = PtStruct->Pnext ) for( ; PtStruct != NULL; PtStruct = PtStruct->Pnext )
@ -511,7 +532,9 @@ DRAWSEGMENT* Locate_Segment_Pcb( BOARD* Pcb, int LayerSearch, int typeloc )
pts = (DRAWSEGMENT*) PtStruct; pts = (DRAWSEGMENT*) PtStruct;
if( (pts->m_Layer != LayerSearch) && (LayerSearch != -1) ) if( (pts->m_Layer != LayerSearch) && (LayerSearch != -1) )
continue; continue;
ux0 = pts->m_Start.x; uy0 = pts->m_Start.y; ux0 = pts->m_Start.x; uy0 = pts->m_Start.y;
/* recalcul des coordonnees avec ux0, uy0 = origine des coordonnees */ /* recalcul des coordonnees avec ux0, uy0 = origine des coordonnees */
dx = pts->m_End.x - ux0; dy = pts->m_End.y - uy0; dx = pts->m_End.x - ux0; dy = pts->m_End.y - uy0;
spot_cX = ref_pos.x - ux0; spot_cY = ref_pos.y - uy0; spot_cX = ref_pos.x - ux0; spot_cY = ref_pos.y - uy0;
@ -520,8 +543,10 @@ DRAWSEGMENT* Locate_Segment_Pcb( BOARD* Pcb, int LayerSearch, int typeloc )
if( (pts->m_Shape == S_CIRCLE) || (pts->m_Shape == S_ARC) ) if( (pts->m_Shape == S_CIRCLE) || (pts->m_Shape == S_ARC) )
{ {
int rayon, dist, StAngle, EndAngle, MouseAngle; int rayon, dist, StAngle, EndAngle, MouseAngle;
rayon = (int) hypot( (double) (dx), (double) (dy) ); rayon = (int) hypot( (double) (dx), (double) (dy) );
dist = (int) hypot( (double) (spot_cX), (double) (spot_cY) ); dist = (int) hypot( (double) (spot_cX), (double) (spot_cY) );
if( abs( rayon - dist ) <= (pts->m_Width / 2) ) if( abs( rayon - dist ) <= (pts->m_Width / 2) )
{ {
if( pts->m_Shape == S_CIRCLE ) if( pts->m_Shape == S_CIRCLE )
@ -531,6 +556,7 @@ DRAWSEGMENT* Locate_Segment_Pcb( BOARD* Pcb, int LayerSearch, int typeloc )
else if( !locate_segm ) else if( !locate_segm )
locate_segm = pts; locate_segm = pts;
} }
/* pour un arc, controle complementaire */ /* pour un arc, controle complementaire */
MouseAngle = (int) ArcTangente( spot_cY, spot_cX ); MouseAngle = (int) ArcTangente( spot_cY, spot_cX );
StAngle = (int) ArcTangente( dy, dx ); StAngle = (int) ArcTangente( dy, dx );
@ -586,9 +612,7 @@ DRAWSEGMENT* Locate_Segment_Pcb( BOARD* Pcb, int LayerSearch, int typeloc )
D_PAD* Locate_Any_Pad( BOARD* Pcb, int typeloc, bool OnlyCurrentLayer ) D_PAD* Locate_Any_Pad( BOARD* Pcb, int typeloc, bool OnlyCurrentLayer )
{ {
wxPoint ref_pos; wxPoint ref_pos = RefPos( typeloc );
SET_REF_POS( ref_pos );
return Locate_Any_Pad( Pcb, ref_pos, OnlyCurrentLayer ); return Locate_Any_Pad( Pcb, ref_pos, OnlyCurrentLayer );
} }
@ -635,9 +659,7 @@ D_PAD* Locate_Any_Pad( BOARD* Pcb, const wxPoint& ref_pos, bool OnlyCurrentLayer
D_PAD* Locate_Pads( MODULE* module, int masque_layer, int typeloc ) D_PAD* Locate_Pads( MODULE* module, int masque_layer, int typeloc )
{ {
wxPoint ref_pos; wxPoint ref_pos = RefPos( typeloc );
SET_REF_POS( ref_pos );
return Locate_Pads( module, ref_pos, masque_layer ); return Locate_Pads( module, ref_pos, masque_layer );
} }
@ -713,7 +735,8 @@ MODULE* Locate_Prefered_Module( BOARD* Pcb, int typeloc )
int layer; /* pour calcul de couches prioritaires */ int layer; /* pour calcul de couches prioritaires */
wxPoint ref_pos; /* coord du point de reference pour la localisation */ wxPoint ref_pos; /* coord du point de reference pour la localisation */
SET_REF_POS( ref_pos ); ref_pos = RefPos( typeloc );
pt_module = Pcb->m_Modules; pt_module = Pcb->m_Modules;
for( ; pt_module; pt_module = (MODULE*) pt_module->Pnext ) for( ; pt_module; pt_module = (MODULE*) pt_module->Pnext )
{ {
@ -795,7 +818,8 @@ TEXTE_MODULE* LocateTexteModule( BOARD* Pcb, MODULE** PtModule, int typeloc )
* - pointeur sur le texte localise ( ou NULL ) * - pointeur sur le texte localise ( ou NULL )
* - si Ptmodule != NULL: pointeur sur module module ( non modifie sinon ) * - si Ptmodule != NULL: pointeur sur module module ( non modifie sinon )
* *
* if typeloc bas the flag VISIBLE_ONLY set, only footprints which are "visible" are considered * if typeloc has the flag VISIBLE_ONLY set, only footprints which are
* "visible" are considered
*/ */
{ {
EDA_BaseStruct* PtStruct; EDA_BaseStruct* PtStruct;
@ -803,7 +827,7 @@ TEXTE_MODULE* LocateTexteModule( BOARD* Pcb, MODULE** PtModule, int typeloc )
MODULE* module; MODULE* module;
wxPoint ref_pos; wxPoint ref_pos;
SET_REF_POS( ref_pos ); ref_pos = RefPos( typeloc );
module = *PtModule; module = *PtModule;
if( module == NULL ) if( module == NULL )
@ -831,9 +855,8 @@ TEXTE_MODULE* LocateTexteModule( BOARD* Pcb, MODULE** PtModule, int typeloc )
continue; continue;
} }
// hit-test the reference text
pt_txt_mod = module->m_Reference; pt_txt_mod = module->m_Reference;
/* la souris est-elle dans le rectangle autour du texte*/
if( pt_txt_mod->Locate( ref_pos ) ) if( pt_txt_mod->Locate( ref_pos ) )
{ {
if( PtModule ) if( PtModule )
@ -841,9 +864,8 @@ TEXTE_MODULE* LocateTexteModule( BOARD* Pcb, MODULE** PtModule, int typeloc )
return pt_txt_mod; return pt_txt_mod;
} }
// hit-test the value text
pt_txt_mod = module->m_Value; pt_txt_mod = module->m_Value;
/* la souris est-elle dans le rectangle autour du texte*/
if( pt_txt_mod->Locate( ref_pos ) ) if( pt_txt_mod->Locate( ref_pos ) )
{ {
if( PtModule ) if( PtModule )
@ -851,13 +873,14 @@ TEXTE_MODULE* LocateTexteModule( BOARD* Pcb, MODULE** PtModule, int typeloc )
return pt_txt_mod; return pt_txt_mod;
} }
// hit-test any other texts
PtStruct = module->m_Drawings; PtStruct = module->m_Drawings;
for( ; PtStruct != NULL; PtStruct = PtStruct->Pnext ) for( ; PtStruct != NULL; PtStruct = PtStruct->Pnext )
{ {
if( PtStruct->m_StructType != TYPETEXTEMODULE ) if( PtStruct->m_StructType != TYPETEXTEMODULE )
continue; continue;
pt_txt_mod = (TEXTE_MODULE*) PtStruct; pt_txt_mod = (TEXTE_MODULE*) PtStruct;
/* la souris est-elle dans le rectangle autour du texte*/
if( pt_txt_mod->Locate( ref_pos ) ) if( pt_txt_mod->Locate( ref_pos ) )
{ {
if( PtModule ) if( PtModule )
@ -1014,9 +1037,7 @@ suite1:
TRACK* Locate_Pistes( TRACK* start_adresse, int MasqueLayer, int typeloc ) TRACK* Locate_Pistes( TRACK* start_adresse, int MasqueLayer, int typeloc )
{ {
wxPoint ref_pos; wxPoint ref_pos = RefPos( typeloc );
SET_REF_POS( ref_pos );
return Locate_Pistes( start_adresse, ref_pos, MasqueLayer ); return Locate_Pistes( start_adresse, ref_pos, MasqueLayer );
} }
@ -1082,9 +1103,7 @@ TRACK* Locate_Pistes( TRACK* start_adresse, const wxPoint& ref_pos, int MasqueLa
TRACK* Locate_Zone( TRACK* start_adresse, int layer, int typeloc ) TRACK* Locate_Zone( TRACK* start_adresse, int layer, int typeloc )
{ {
wxPoint ref_pos; wxPoint ref_pos = RefPos( typeloc );
SET_REF_POS( ref_pos );
return Locate_Zone( start_adresse, ref_pos, layer ); return Locate_Zone( start_adresse, ref_pos, layer );
} }
@ -1125,9 +1144,8 @@ TEXTE_PCB* Locate_Texte_Pcb( EDA_BaseStruct* PtStruct, int LayerSearch, int type
* retour : pointeur sur la description du texte localise * retour : pointeur sur la description du texte localise
*/ */
{ {
wxPoint ref; wxPoint ref = RefPos( typeloc );
SET_REF_POS( ref );
for( ; PtStruct != NULL; PtStruct = PtStruct->Pnext ) for( ; PtStruct != NULL; PtStruct = PtStruct->Pnext )
{ {
if( PtStruct->m_StructType != TYPETEXTE ) if( PtStruct->m_StructType != TYPETEXTE )
@ -1279,6 +1297,7 @@ int distance( int seuil )
{ {
if( (cXrot >= 0) && (cXrot <= segX) ) if( (cXrot >= 0) && (cXrot <= segX) )
return 1; return 1;
/* Etude des extremites : cercle de rayon seuil */ /* Etude des extremites : cercle de rayon seuil */
if( (cXrot < 0) && (cXrot >= -seuil) ) if( (cXrot < 0) && (cXrot >= -seuil) )
{ {
@ -1347,18 +1366,21 @@ TRACK* Fast_Locate_Piste( TRACK* start_adr, TRACK* end_adr,
if( start_adr == NULL ) if( start_adr == NULL )
return NULL; return NULL;
for( PtSegm = start_adr; PtSegm != NULL; PtSegm = (TRACK*) PtSegm->Pnext ) for( PtSegm = start_adr; PtSegm != NULL; PtSegm = (TRACK*) PtSegm->Pnext )
{ {
if( PtSegm->GetState( DELETED | BUSY ) == 0 ) if( PtSegm->GetState( DELETED | BUSY ) == 0 )
{ {
if( ref_pos == PtSegm->m_Start ) if( ref_pos == PtSegm->m_Start )
{ /* Test des couches */ {
/* Test des couches */
if( MaskLayer & PtSegm->ReturnMaskLayer() ) if( MaskLayer & PtSegm->ReturnMaskLayer() )
return PtSegm; return PtSegm;
} }
if( ref_pos == PtSegm->m_End ) if( ref_pos == PtSegm->m_End )
{ /* Test des couches */ {
/* Test des couches */
if( MaskLayer & PtSegm->ReturnMaskLayer() ) if( MaskLayer & PtSegm->ReturnMaskLayer() )
return PtSegm; return PtSegm;
} }
@ -1392,7 +1414,8 @@ TRACK* Fast_Locate_Via( TRACK* start_adr, TRACK* end_adr,
if( pos == PtSegm->m_Start ) if( pos == PtSegm->m_Start )
{ {
if( PtSegm->GetState( BUSY | DELETED ) == 0 ) if( PtSegm->GetState( BUSY | DELETED ) == 0 )
{ /* Test des couches */ {
/* Test des couches */
if( MaskLayer & PtSegm->ReturnMaskLayer() ) if( MaskLayer & PtSegm->ReturnMaskLayer() )
return PtSegm; return PtSegm;
} }
@ -1420,13 +1443,14 @@ EDA_BaseStruct* Locate_MirePcb( EDA_BaseStruct* PtStruct, int LayerSearch,
if( PtStruct == NULL ) if( PtStruct == NULL )
return NULL; return NULL;
SET_REF_POS( ref_pos ); ref_pos = RefPos( typeloc );
for( ; PtStruct != NULL; PtStruct = PtStruct->Pnext ) for( ; PtStruct != NULL; PtStruct = PtStruct->Pnext )
{ {
MIREPCB* item; MIREPCB* item;
if( PtStruct->m_StructType != TYPEMIRE ) if( PtStruct->m_StructType != TYPEMIRE )
continue; continue;
item = (MIREPCB*) PtStruct; item = (MIREPCB*) PtStruct;
if( LayerSearch != -1 && item->m_Layer != LayerSearch ) if( LayerSearch != -1 && item->m_Layer != LayerSearch )
continue; continue;
@ -1434,6 +1458,7 @@ EDA_BaseStruct* Locate_MirePcb( EDA_BaseStruct* PtStruct, int LayerSearch,
dX = ref_pos.x - item->m_Pos.x; dX = ref_pos.x - item->m_Pos.x;
dY = ref_pos.y - item->m_Pos.y; dY = ref_pos.y - item->m_Pos.y;
rayon = item->m_Size / 2; rayon = item->m_Size / 2;
if( (abs( dX ) <= rayon ) && ( abs( dY ) <= rayon ) ) if( (abs( dX ) <= rayon ) && ( abs( dY ) <= rayon ) )
break; /* Mire Localisee */ break; /* Mire Localisee */
} }

View File

@ -1,5 +1,5 @@
/**************************************/ /**************************************/
/* PCBNEW.H : déclarations communes */ /* PCBNEW.H : d<>larations communes */
/**************************************/ /**************************************/
#ifndef PCBNEW_H #ifndef PCBNEW_H
#define PCBNEW_H #define PCBNEW_H
@ -14,7 +14,7 @@
#define U_PCB (PCB_INTERNAL_UNIT / EESCHEMA_INTERNAL_UNIT) #define U_PCB (PCB_INTERNAL_UNIT / EESCHEMA_INTERNAL_UNIT)
/* valeur de flag indicant si le pointeur de reference pour une localisation /* valeur de flag indicant si le pointeur de reference pour une localisation
est le curseur sur grille ou le curseur a deplacement fin hors grille */ * est le curseur sur grille ou le curseur a deplacement fin hors grille */
#define CURSEUR_ON_GRILLE (0 << 0) #define CURSEUR_ON_GRILLE (0 << 0)
#define CURSEUR_OFF_GRILLE (1 << 0) #define CURSEUR_OFF_GRILLE (1 << 0)
@ -36,7 +36,7 @@ est le curseur sur grille ou le curseur a deplacement fin hors grille */
#define ZOOM_CENTER -4 #define ZOOM_CENTER -4
#define ZOOM_REDRAW -5 #define ZOOM_REDRAW -5
/* Bits Flags utilisés en édition (membre .m_Flags de EDA_BaseStruct)*/ /* Bits Flags utilis<EFBFBD> en <20>ition (membre .m_Flags de EDA_BaseStruct)*/
#define IS_LINKED 1 #define IS_LINKED 1
#define IN_EDIT 2 #define IN_EDIT 2
#define IS_MOVED 4 #define IS_MOVED 4
@ -65,6 +65,8 @@ eda_global wxSize g_GridList[]
wxSize( 10, 10 ), wxSize( 5, 5 ), wxSize( 2, 2 ), wxSize( 1, 1 ), wxSize( 10, 10 ), wxSize( 5, 5 ), wxSize( 2, 2 ), wxSize( 1, 1 ),
wxSize( -1, -1 ), wxSize( 0, 0 ) wxSize( -1, -1 ), wxSize( 0, 0 )
} }
#endif #endif
; ;
@ -81,7 +83,8 @@ eda_global bool g_ShowGrid
/* Look up Table for conversion one layer number -> one bit layer mask: */ /* Look up Table for conversion one layer number -> one bit layer mask: */
eda_global int g_TabOneLayerMask[LAYER_COUNT] eda_global int g_TabOneLayerMask[LAYER_COUNT]
#if defined MAIN #if defined MAIN
= { 0x00000001,0x00000002,0x00000004,0x00000008, = {
0x00000001, 0x00000002, 0x00000004, 0x00000008,
0x00000010, 0x00000020, 0x00000040, 0x00000080, 0x00000010, 0x00000020, 0x00000040, 0x00000080,
0x00000100, 0x00000200, 0x00000400, 0x00000800, 0x00000100, 0x00000200, 0x00000400, 0x00000800,
0x00001000, 0x00002000, 0x00004000, 0x00008000, 0x00001000, 0x00002000, 0x00004000, 0x00008000,
@ -115,7 +118,7 @@ eda_global bool Drc_On
#endif #endif
; ;
eda_global bool g_AutoDeleteOldTrack /* autorise effacement automatique eda_global bool g_AutoDeleteOldTrack /* autorise effacement automatique
de l'ancienne piste lors des redessins de pistes */ * de l'ancienne piste lors des redessins de pistes */
#ifdef MAIN #ifdef MAIN
= TRUE = TRUE
#endif #endif
@ -135,7 +138,7 @@ eda_global bool g_Raccord_45_Auto
#endif #endif
; ;
eda_global bool g_ShowIsolDuringCreateTrack; /* .State controle l'affichage eda_global bool g_ShowIsolDuringCreateTrack; /* .State controle l'affichage
de l'isolation en trace de piste */ * de l'isolation en trace de piste */
/**************************************************************/ /**************************************************************/
/* Options d'affichages (remplissages des segments, textes..) */ /* Options d'affichages (remplissages des segments, textes..) */
@ -144,9 +147,9 @@ eda_global bool g_ShowIsolDuringCreateTrack; /* .State controle l'affichage
eda_global DISPLAY_OPTIONS DisplayOpt; eda_global DISPLAY_OPTIONS DisplayOpt;
eda_global bool Track_45_Only; /* Flag pour limiter l'inclinaison eda_global bool Track_45_Only; /* Flag pour limiter l'inclinaison
pistes a 45 degres seulement */ * pistes a 45 degres seulement */
eda_global bool Segments_45_Only;/* Flag pour limiter l'inclinaison eda_global bool Segments_45_Only;/* Flag pour limiter l'inclinaison
edge pcb a 45 degres seulement */ * edge pcb a 45 degres seulement */
eda_global wxString PcbExtBuffer eda_global wxString PcbExtBuffer
#ifdef MAIN #ifdef MAIN
( wxT( ".brd" ) ) ( wxT( ".brd" ) )
@ -196,7 +199,7 @@ eda_global char * adr_himem ; /* adresse haute limite de la memoire disponible*
eda_global char* adr_max; /* adresse haute maxi utilisee pour la memoire */ eda_global char* adr_max; /* adresse haute maxi utilisee pour la memoire */
/* variables génerales */ /* variables g<EFBFBD>erales */
eda_global char cbuf[1024]; /* buffer de formatage texte */ eda_global char cbuf[1024]; /* buffer de formatage texte */
eda_global BOARD* g_ModuleEditor_Pcb; /* Pointeur de l'entete pcb de l'editeur de module*/ eda_global BOARD* g_ModuleEditor_Pcb; /* Pointeur de l'entete pcb de l'editeur de module*/
eda_global int g_TimeOut; // Duree entre 2 sauvegardes automatiques eda_global int g_TimeOut; // Duree entre 2 sauvegardes automatiques
@ -224,6 +227,7 @@ eda_global class EDA_BoardDesignSettings g_DesignSettings;
#ifndef GERBVIEW #ifndef GERBVIEW
#ifdef MAIN #ifdef MAIN
D_PAD g_Pad_Master( (MODULE*) NULL ); D_PAD g_Pad_Master( (MODULE*) NULL );
#else #else
extern D_PAD g_Pad_Master; extern D_PAD g_Pad_Master;
#endif #endif
@ -233,7 +237,7 @@ extern D_PAD g_Pad_Master;
eda_global int Route_Layer_TOP; eda_global int Route_Layer_TOP;
eda_global int Route_Layer_BOTTOM; /* couches de routage actif */ eda_global int Route_Layer_BOTTOM; /* couches de routage actif */
eda_global int g_MaxLinksShowed; // determine le nombre max de links affichés eda_global int g_MaxLinksShowed; // determine le nombre max de links affich<63>
// en routage manuel // en routage manuel
eda_global bool g_TwoSegmentTrackBuild // FALSE = 1 segment build, TRUE = 2 45 deg segm build eda_global bool g_TwoSegmentTrackBuild // FALSE = 1 segment build, TRUE = 2 45 deg segm build
#ifdef MAIN #ifdef MAIN
@ -247,6 +251,7 @@ enum MagneticPadOptionValues {
capture_cursor_in_track_tool, capture_cursor_in_track_tool,
capture_always capture_always
}; };
eda_global int g_MagneticPadOption eda_global int g_MagneticPadOption
#ifdef MAIN #ifdef MAIN
= capture_cursor_in_track_tool = capture_cursor_in_track_tool
@ -272,6 +277,8 @@ eda_global wxString g_ViaType_Name[4]
_( "Buried Via" ), // from inner to inner layer _( "Buried Via" ), // from inner to inner layer
_( "Standard Via" ) // Usual via (from TOP to BOTTOM layer) _( "Standard Via" ) // Usual via (from TOP to BOTTOM layer)
} }
#endif #endif
; ;
eda_global int g_ViaHoleLastValue; // Last value for non default value via hole eda_global int g_ViaHoleLastValue; // Last value for non default value via hole