beautification, hit test improvements
This commit is contained in:
parent
ea6aba8212
commit
8a8377ff6a
File diff suppressed because it is too large
Load Diff
|
@ -332,9 +332,10 @@ EDA_BaseStruct* BOARD::FindPadOrModule( const wxPoint& refPos, int layer )
|
|||
public:
|
||||
EDA_BaseStruct* found;
|
||||
int layer;
|
||||
int layer_mask;
|
||||
|
||||
PadOrModule( int alayer ) :
|
||||
found(0), layer(alayer)
|
||||
found(0), layer(alayer), layer_mask( g_TabOneLayerMask[alayer] )
|
||||
{}
|
||||
|
||||
SEARCH_RESULT Inspect( EDA_BaseStruct* testItem, const void* testData )
|
||||
|
@ -343,23 +344,33 @@ EDA_BaseStruct* BOARD::FindPadOrModule( const wxPoint& refPos, int layer )
|
|||
|
||||
if( testItem->m_StructType == TYPEPAD )
|
||||
{
|
||||
if( testItem->HitTest( refPos ) )
|
||||
D_PAD* pad = (D_PAD*) testItem;
|
||||
if( pad->HitTest( refPos ) )
|
||||
{
|
||||
if( layer_mask & pad->m_Masque_Layer )
|
||||
{
|
||||
found = testItem;
|
||||
return SEARCH_QUIT;
|
||||
}
|
||||
else if( !found )
|
||||
{
|
||||
MODULE* parent = (MODULE*) pad->m_Parent;
|
||||
if( IsModuleLayerVisible( parent->m_Layer ) )
|
||||
found = testItem;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
else if( testItem->m_StructType == TYPEMODULE )
|
||||
{
|
||||
int mlayer = ((MODULE*)testItem)->m_Layer;
|
||||
MODULE* module = (MODULE*) testItem;
|
||||
|
||||
// consider only visible modules
|
||||
if( IsModuleLayerVisible( mlayer ) )
|
||||
if( IsModuleLayerVisible( module->m_Layer ) )
|
||||
{
|
||||
if( testItem->HitTest( refPos ) )
|
||||
if( module->HitTest( refPos ) )
|
||||
{
|
||||
if( layer == mlayer )
|
||||
if( layer == module->m_Layer )
|
||||
{
|
||||
found = testItem;
|
||||
return SEARCH_QUIT;
|
||||
|
|
|
@ -31,7 +31,9 @@ D_PAD::D_PAD( MODULE* parent ) : EDA_BaseStruct( parent, TYPEPAD )
|
|||
m_Masque_Layer = CUIVRE_LAYER;
|
||||
m_NetCode = 0; /* Numero de net pour comparaisons rapides */
|
||||
m_DrillShape = CIRCLE; // Drill shape = circle
|
||||
|
||||
m_Size.x = m_Size.y = 500;
|
||||
|
||||
if( m_Parent && (m_Parent->m_StructType == TYPEMODULE) )
|
||||
{
|
||||
m_Pos = ( (MODULE*) m_Parent )->m_Pos;
|
||||
|
@ -91,7 +93,8 @@ const wxPoint D_PAD::ReturnShapePos( void )
|
|||
wxPoint shape_pos;
|
||||
int dX, dY;
|
||||
|
||||
dX = m_Offset.x; dY = m_Offset.y;
|
||||
dX = m_Offset.x;
|
||||
dY = m_Offset.y;
|
||||
|
||||
RotatePoint( &dX, &dY, m_Orient );
|
||||
|
||||
|
@ -458,12 +461,13 @@ void D_PAD::Draw( WinEDA_DrawPanel* panel, wxDC* DC, const wxPoint& offset, int
|
|||
|
||||
GRClosedPoly( &panel->m_ClipBox, DC, 4, (int*) coord, 0, color, color );
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
/* Draw the pad hole */
|
||||
int cx0 = m_Pos.x - offset.x;
|
||||
|
|
780
pcbnew/clean.cpp
780
pcbnew/clean.cpp
File diff suppressed because it is too large
Load Diff
|
@ -336,9 +336,11 @@ void WinEDA_BasePcbFrame::GeneralControle( wxDC* DC, wxPoint Mouse )
|
|||
bool keep_on_grid = TRUE;
|
||||
if( m_ID_current_state == ID_PCB_DELETE_ITEM_BUTT )
|
||||
keep_on_grid = FALSE;
|
||||
|
||||
/* Cursor is left off grid if no block in progress and no moving object */
|
||||
if( GetScreen()->BlockLocate.m_State != STATE_NO_BLOCK )
|
||||
keep_on_grid = TRUE;
|
||||
|
||||
EDA_BaseStruct* DrawStruct = GetScreen()->m_CurrentItem;
|
||||
if( DrawStruct && DrawStruct->m_Flags )
|
||||
keep_on_grid = TRUE;
|
||||
|
|
|
@ -35,7 +35,8 @@ void WinEDA_PcbFrame::InstallFindFrame( const wxPoint& pos, wxDC* DC )
|
|||
{
|
||||
WinEDA_PcbFindFrame* frame = new WinEDA_PcbFindFrame( this, DC, pos );
|
||||
|
||||
frame->ShowModal(); frame->Destroy();
|
||||
frame->ShowModal();
|
||||
frame->Destroy();
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -1,16 +1,16 @@
|
|||
/****************************************************/
|
||||
/* Gestion des composants specifiques aux microndes */
|
||||
/* Generation d'une self */
|
||||
/****************************************************/
|
||||
/****************************************************/
|
||||
/* Gestion des composants specifiques aux microndes */
|
||||
/* Generation d'une self */
|
||||
/****************************************************/
|
||||
|
||||
/* Fichier GEN_SELF.H */
|
||||
/* Fichier GEN_SELF.H */
|
||||
|
||||
|
||||
/* Fonctions locales */
|
||||
|
||||
static void Exit_Self(WinEDA_DrawPanel * Panel, wxDC *DC);
|
||||
static EDGE_MODULE * gen_arc(EDGE_MODULE * PtSegm, int cX, int cY, int angle);
|
||||
static void ShowCadreSelf(WinEDA_DrawPanel * panel, wxDC * DC, bool erase);
|
||||
static void Exit_Self( WinEDA_DrawPanel* Panel, wxDC* DC );
|
||||
static EDGE_MODULE* gen_arc( EDGE_MODULE* PtSegm, int cX, int cY, int angle );
|
||||
static void ShowCadreSelf( WinEDA_DrawPanel* panel, wxDC* DC, bool erase );
|
||||
|
||||
|
||||
/* structures locales */
|
||||
|
@ -23,7 +23,7 @@ public:
|
|||
wxPoint m_Start;
|
||||
wxPoint m_End; // Coord du point de depart et d'arrivee
|
||||
wxSize m_Size;
|
||||
D_PAD * pt_pad_start, *pt_pad_end; // Pointeurs sur les pads d'extremite
|
||||
D_PAD* pt_pad_start, * pt_pad_end; // Pointeurs sur les pads d'extremite
|
||||
int lng; // Longueur de la piste constituant la self
|
||||
int m_Width; // m_Size.xur de la piste
|
||||
int nbrin; // Parametres de calcul: nombre de brins
|
||||
|
@ -35,34 +35,35 @@ public:
|
|||
/* Variables locales */
|
||||
static SELFPCB Mself;
|
||||
static int Self_On;
|
||||
static int Bl_X0, Bl_Y0 , Bl_Xf, Bl_Yf; // Coord du cadre insrcivant la self
|
||||
static int Bl_X0, Bl_Y0, Bl_Xf, Bl_Yf; // Coord du cadre insrcivant la self
|
||||
|
||||
|
||||
/*************************************************************************/
|
||||
static void ShowCadreSelf(WinEDA_DrawPanel * panel, wxDC * DC, bool erase)
|
||||
static void ShowCadreSelf( WinEDA_DrawPanel* panel, wxDC* DC, bool erase )
|
||||
/*************************************************************************/
|
||||
/* Routine d'affichage a l'ecran du cadre de la self */
|
||||
{
|
||||
int deltaX, deltaY;
|
||||
int deltaX, deltaY;
|
||||
|
||||
/* Calcul de l'orientation et de la taille de la fenetre:
|
||||
- orient = vert ou Horiz ( dimension max)
|
||||
- Size.x = Size.y / 2
|
||||
* - orient = vert ou Horiz ( dimension max)
|
||||
* - Size.x = Size.y / 2
|
||||
*/
|
||||
|
||||
GRSetDrawMode(DC, GR_XOR);
|
||||
if( erase)/* effacement du cadre */
|
||||
GRSetDrawMode( DC, GR_XOR );
|
||||
if( erase )/* effacement du cadre */
|
||||
{
|
||||
GRRect( & panel->m_ClipBox, DC, Bl_X0, Bl_Y0, Bl_Xf, Bl_Yf, YELLOW);
|
||||
GRRect( &panel->m_ClipBox, DC, Bl_X0, Bl_Y0, Bl_Xf, Bl_Yf, YELLOW );
|
||||
}
|
||||
|
||||
deltaX = (panel->GetScreen()->m_Curseur.x - Mself.m_Start.x) / 4;
|
||||
deltaY = (panel->GetScreen()->m_Curseur.y - Mself.m_Start.y) / 4;
|
||||
|
||||
Mself.orient = 900;
|
||||
if( abs(deltaX) > abs(deltaY) ) Mself.orient = 0;
|
||||
if( abs( deltaX ) > abs( deltaY ) )
|
||||
Mself.orient = 0;
|
||||
|
||||
if(Mself.orient == 0)
|
||||
if( Mself.orient == 0 )
|
||||
{
|
||||
Bl_X0 = Mself.m_Start.x;
|
||||
Bl_Y0 = Mself.m_Start.y - deltaX;
|
||||
|
@ -76,19 +77,19 @@ int deltaX, deltaY;
|
|||
Bl_Xf = Mself.m_Start.x + deltaY;
|
||||
Bl_Yf = panel->GetScreen()->m_Curseur.y;
|
||||
}
|
||||
GRRect( & panel->m_ClipBox, DC, Bl_X0, Bl_Y0, Bl_Xf, Bl_Yf,YELLOW);
|
||||
GRRect( &panel->m_ClipBox, DC, Bl_X0, Bl_Y0, Bl_Xf, Bl_Yf, YELLOW );
|
||||
}
|
||||
|
||||
|
||||
/*************************************************/
|
||||
void Exit_Self(WinEDA_DrawPanel * Panel, wxDC *DC)
|
||||
void Exit_Self( WinEDA_DrawPanel* Panel, wxDC* DC )
|
||||
/*************************************************/
|
||||
/* Routine de fermeture de l'application : ferme les commandes en cours */
|
||||
{
|
||||
if(Self_On)
|
||||
if( Self_On )
|
||||
{
|
||||
Self_On = 0;
|
||||
Panel->ManageCurseur(Panel, DC, 0); /* efface cadre */
|
||||
Panel->ManageCurseur( Panel, DC, 0 ); /* efface cadre */
|
||||
Panel->ManageCurseur = NULL;
|
||||
Panel->ForceCloseManageCurseur = NULL;
|
||||
}
|
||||
|
@ -96,16 +97,16 @@ void Exit_Self(WinEDA_DrawPanel * Panel, wxDC *DC)
|
|||
|
||||
|
||||
/*******************************************/
|
||||
void WinEDA_PcbFrame::Begin_Self( wxDC *DC)
|
||||
void WinEDA_PcbFrame::Begin_Self( wxDC* DC )
|
||||
/*******************************************/
|
||||
/*
|
||||
Routine d'initialisation d'un trace de self
|
||||
*/
|
||||
{
|
||||
|
||||
if ( Self_On )
|
||||
/*
|
||||
* Routine d'initialisation d'un trace de self
|
||||
*/
|
||||
{
|
||||
if( Self_On )
|
||||
{
|
||||
Genere_Self(DC);
|
||||
Genere_Self( DC );
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -122,64 +123,66 @@ Routine d'initialisation d'un trace de self
|
|||
|
||||
DrawPanel->ManageCurseur = ShowCadreSelf;
|
||||
DrawPanel->ForceCloseManageCurseur = Exit_Self;
|
||||
DrawPanel->ManageCurseur(DrawPanel, DC, 0); /* Affiche cadre */
|
||||
DrawPanel->ManageCurseur( DrawPanel, DC, 0 ); /* Affiche cadre */
|
||||
}
|
||||
|
||||
|
||||
/**********************************************/
|
||||
MODULE * WinEDA_PcbFrame::Genere_Self( wxDC *DC)
|
||||
MODULE* WinEDA_PcbFrame::Genere_Self( wxDC* DC )
|
||||
/**********************************************/
|
||||
|
||||
/* Genere une self en forme de serpentin
|
||||
- longueur Mself.lng
|
||||
- Extremites Mself.m_Start et Mself.m_End
|
||||
- Contrainte: m_Start.x = m_End.x ( self verticale )
|
||||
ou m_Start.y = m_End.y ( self horizontale )
|
||||
|
||||
On doit determiner:
|
||||
Mself.nbrin = nombre de segments perpendiculaires a la direction
|
||||
( le serpention aura nbrin + 1 demicercles + 2 1/4 de cercle)
|
||||
Mself.lbrin = longueur d'un brin
|
||||
Mself.rayon = rayon des parties arrondies du serpentin
|
||||
Mself.delta = segments raccord entre extremites et le serpention lui meme
|
||||
|
||||
Les equations sont
|
||||
Mself.m_Size.x = 2*Mself.rayon + Mself.lbrin
|
||||
Mself.m_Size.y = 2*Mself.delta + 2*Mself.nbrin*Mself.rayon
|
||||
Mself.lng = 2*Mself.delta // Raccords au serpentin
|
||||
* - longueur Mself.lng
|
||||
* - Extremites Mself.m_Start et Mself.m_End
|
||||
* - Contrainte: m_Start.x = m_End.x ( self verticale )
|
||||
* ou m_Start.y = m_End.y ( self horizontale )
|
||||
*
|
||||
* On doit determiner:
|
||||
* Mself.nbrin = nombre de segments perpendiculaires a la direction
|
||||
* ( le serpention aura nbrin + 1 demicercles + 2 1/4 de cercle)
|
||||
* Mself.lbrin = longueur d'un brin
|
||||
* Mself.rayon = rayon des parties arrondies du serpentin
|
||||
* Mself.delta = segments raccord entre extremites et le serpention lui meme
|
||||
*
|
||||
* Les equations sont
|
||||
* Mself.m_Size.x = 2*Mself.rayon + Mself.lbrin
|
||||
* Mself.m_Size.y = 2*Mself.delta + 2*Mself.nbrin*Mself.rayon
|
||||
* Mself.lng = 2*Mself.delta // Raccords au serpentin
|
||||
+ (Mself.nbrin-2) * Mself.lbrin //longueur des brins sauf 1er et dernier
|
||||
+ (Mself.nbrin+1) * ( PI * Mself.rayon) // longueur des arrondis
|
||||
+ Mself.lbrin/2 - Melf.rayon*2) // longueur du 1er et dernier brin
|
||||
|
||||
Les contraintes sont:
|
||||
nbrin >= 2
|
||||
Mself.rayon < Mself.m_Size.x
|
||||
Mself.m_Size.y = Mself.rayon*4 + 2*Mself.raccord
|
||||
Mself.lbrin > Mself.rayon *2
|
||||
|
||||
Le calcul est conduit de la facon suivante:
|
||||
Initialement:
|
||||
nbrin = 2
|
||||
rayon = 4 * m_Size.x (valeur fixe arbitraire)
|
||||
puis:
|
||||
on augmente le nombre de brins jusqu'a la longueur desiree
|
||||
( le rayon est diminue si necessaire )
|
||||
|
||||
*/
|
||||
*
|
||||
* Les contraintes sont:
|
||||
* nbrin >= 2
|
||||
* Mself.rayon < Mself.m_Size.x
|
||||
* Mself.m_Size.y = Mself.rayon*4 + 2*Mself.raccord
|
||||
* Mself.lbrin > Mself.rayon *2
|
||||
*
|
||||
* Le calcul est conduit de la facon suivante:
|
||||
* Initialement:
|
||||
* nbrin = 2
|
||||
* rayon = 4 * m_Size.x (valeur fixe arbitraire)
|
||||
* puis:
|
||||
* on augmente le nombre de brins jusqu'a la longueur desiree
|
||||
* ( le rayon est diminue si necessaire )
|
||||
*
|
||||
*/
|
||||
{
|
||||
EDGE_MODULE * PtSegm, * LastSegm, *FirstSegm, * newedge;
|
||||
MODULE * Module;
|
||||
D_PAD * PtPad;
|
||||
int ii, ll, lextbrin;
|
||||
float fcoeff;
|
||||
bool abort = FALSE;
|
||||
wxString msg;
|
||||
EDGE_MODULE* PtSegm, * LastSegm, * FirstSegm, * newedge;
|
||||
MODULE* Module;
|
||||
D_PAD* PtPad;
|
||||
int ii, ll, lextbrin;
|
||||
float fcoeff;
|
||||
bool abort = FALSE;
|
||||
wxString msg;
|
||||
|
||||
DrawPanel->ManageCurseur(DrawPanel, DC, FALSE); /* efface cadre */
|
||||
DrawPanel->ManageCurseur( DrawPanel, DC, FALSE ); /* efface cadre */
|
||||
DrawPanel->ManageCurseur = NULL;
|
||||
DrawPanel->ForceCloseManageCurseur = NULL;
|
||||
|
||||
if(Self_On == 0)
|
||||
if( Self_On == 0 )
|
||||
{
|
||||
DisplayError(this, wxT("Starting point not init..")); return NULL;
|
||||
DisplayError( this, wxT( "Starting point not init.." ) ); return NULL;
|
||||
}
|
||||
|
||||
Self_On = 0;
|
||||
|
@ -189,41 +192,43 @@ wxString msg;
|
|||
/* Agencement des parametres pour simplifier le calcul : */
|
||||
/* le point de depart doit avoir la coord depart < celle du point de fin */
|
||||
|
||||
if(Mself.orient == 0) // Self horizontale
|
||||
if( Mself.orient == 0 ) // Self horizontale
|
||||
{
|
||||
Mself.m_End.y = Mself.m_Start.y;
|
||||
if(Mself.m_Start.x > Mself.m_End.x) EXCHG(Mself.m_Start.x,Mself.m_End.x);
|
||||
if( Mself.m_Start.x > Mself.m_End.x )
|
||||
EXCHG( Mself.m_Start.x, Mself.m_End.x );
|
||||
Mself.m_Size.y = Mself.m_End.x - Mself.m_Start.x;
|
||||
Mself.lng = Mself.m_Size.y;
|
||||
}
|
||||
|
||||
else // Self verticale
|
||||
{
|
||||
Mself.m_End.x = Mself.m_Start.x;
|
||||
if(Mself.m_Start.y > Mself.m_End.y) EXCHG(Mself.m_Start.y,Mself.m_End.y);
|
||||
if( Mself.m_Start.y > Mself.m_End.y )
|
||||
EXCHG( Mself.m_Start.y, Mself.m_End.y );
|
||||
Mself.m_Size.y = Mself.m_End.y - Mself.m_Start.y;
|
||||
Mself.lng = Mself.m_Size.y;
|
||||
}
|
||||
|
||||
/* Entree de la vraie longueur desiree */
|
||||
if( ! g_UnitMetric )
|
||||
if( !g_UnitMetric )
|
||||
{
|
||||
fcoeff = 10000.0 ;
|
||||
msg.Printf( wxT("%1.4f"), Mself.lng /fcoeff);
|
||||
abort = Get_Message(_("Length(inch):"),msg, this);
|
||||
fcoeff = 10000.0;
|
||||
msg.Printf( wxT( "%1.4f" ), Mself.lng / fcoeff );
|
||||
abort = Get_Message( _( "Length(inch):" ), msg, this );
|
||||
}
|
||||
else
|
||||
{
|
||||
fcoeff = 10000.0/25.4 ;
|
||||
msg.Printf( wxT("%2.3f"), Mself.lng /fcoeff);
|
||||
abort = Get_Message( _("Length(mm):"),msg, this);
|
||||
fcoeff = 10000.0 / 25.4;
|
||||
msg.Printf( wxT( "%2.3f" ), Mself.lng / fcoeff );
|
||||
abort = Get_Message( _( "Length(mm):" ), msg, this );
|
||||
}
|
||||
if ( abort ) return NULL;
|
||||
if( abort )
|
||||
return NULL;
|
||||
|
||||
double fval;
|
||||
if ( ! msg.ToDouble(&fval) )
|
||||
if( !msg.ToDouble( &fval ) )
|
||||
{
|
||||
DisplayError(this, _("Incorrect number, abort"));
|
||||
DisplayError( this, _( "Incorrect number, abort" ) );
|
||||
return NULL;
|
||||
}
|
||||
Mself.lng = (int) round( fval * fcoeff );
|
||||
|
@ -231,60 +236,65 @@ wxString msg;
|
|||
/* Controle des valeurs ( ii = valeur minimale de la longueur */
|
||||
if( Mself.lng < Mself.m_Size.y )
|
||||
{
|
||||
DisplayError(this, _("Requested length < minimum length"));
|
||||
DisplayError( this, _( "Requested length < minimum length" ) );
|
||||
return NULL;
|
||||
}
|
||||
|
||||
/* Generation du composant: calcul des elements de la self */
|
||||
Mself.m_Width = g_DesignSettings.m_CurrentTrackWidth;
|
||||
Mself.m_Size.x = Mself.m_Size.y / 2 ;
|
||||
Mself.m_Size.x = Mself.m_Size.y / 2;
|
||||
|
||||
// Choix d'une Valeur de depart raisonnable pour le rayon des arcs de cercle
|
||||
Mself.rayon = min(Mself.m_Width * 5, Mself.m_Size.x/4);
|
||||
Mself.rayon = min( Mself.m_Width * 5, Mself.m_Size.x / 4 );
|
||||
/* Calcul des parametres */
|
||||
|
||||
for ( Mself.nbrin = 2 ; ; Mself.nbrin++)
|
||||
for( Mself.nbrin = 2; ; Mself.nbrin++ )
|
||||
{
|
||||
Mself.delta = (Mself.m_Size.y - ( Mself.rayon * 2 * Mself.nbrin ) ) / 2 ;
|
||||
if(Mself.delta < Mself.m_Size.y / 10) // C.a.d. si m_Size.yeur self > m_Size.yeur specifiee
|
||||
Mself.delta = ( Mself.m_Size.y - ( Mself.rayon * 2 * Mself.nbrin ) ) / 2;
|
||||
if( Mself.delta < Mself.m_Size.y / 10 ) // C.a.d. si m_Size.yeur self > m_Size.yeur specifiee
|
||||
{ // Reduction du rayon des arrondis
|
||||
Mself.delta = Mself.m_Size.y / 10;
|
||||
Mself.rayon = (Mself.m_Size.y - 2*Mself.delta) / ( 2 * Mself.nbrin) ;
|
||||
if(Mself.rayon < Mself.m_Width)
|
||||
Mself.rayon = (Mself.m_Size.y - 2 * Mself.delta) / ( 2 * Mself.nbrin);
|
||||
if( Mself.rayon < Mself.m_Width )
|
||||
{ // Rayon vraiment trop petit...
|
||||
Affiche_Message(_("Unable to create line: Requested length is too big"));
|
||||
Affiche_Message( _( "Unable to create line: Requested length is too big" ) );
|
||||
return NULL;
|
||||
}
|
||||
}
|
||||
Mself.lbrin = Mself.m_Size.x - (Mself.rayon * 2);
|
||||
lextbrin = (Mself.lbrin/2) - Mself.rayon;
|
||||
ll = 2 * lextbrin ; // Longueur du 1er et dernier brin
|
||||
ll += 2 * Mself.delta ; // Longueur des raccord au serpentin
|
||||
lextbrin = (Mself.lbrin / 2) - Mself.rayon;
|
||||
ll = 2 * lextbrin; // Longueur du 1er et dernier brin
|
||||
ll += 2 * Mself.delta; // Longueur des raccord au serpentin
|
||||
ll += Mself.nbrin * (Mself.lbrin - 2); // longueur des autres brins
|
||||
ll += ((Mself.nbrin+1) * 314 * Mself.rayon) /100 ;
|
||||
ll += ( (Mself.nbrin + 1) * 314 * Mself.rayon ) / 100;
|
||||
|
||||
msg.Printf( _("Segm count = %d, Lenght = "), Mself.nbrin);
|
||||
msg.Printf( _( "Segm count = %d, Lenght = " ), Mself.nbrin );
|
||||
wxString stlen;
|
||||
valeur_param(ll, stlen); msg += stlen;
|
||||
Affiche_Message(msg);
|
||||
if ( ll >= Mself.lng) break;
|
||||
valeur_param( ll, stlen ); msg += stlen;
|
||||
Affiche_Message( msg );
|
||||
if( ll >= Mself.lng )
|
||||
break;
|
||||
}
|
||||
|
||||
/* Generation du composant : le calcul est fait self Verticale */
|
||||
if( Create_1_Module(DC, wxEmptyString) == NULL ) return NULL;
|
||||
if( Create_1_Module( DC, wxEmptyString ) == NULL )
|
||||
return NULL;
|
||||
|
||||
Module = m_Pcb->m_Modules;
|
||||
Module->m_LibRef = wxT("MuSelf");
|
||||
Module->m_LibRef = wxT( "MuSelf" );
|
||||
Module->m_Attributs = MOD_VIRTUAL | MOD_CMS;
|
||||
Module->m_Flags = 0;
|
||||
|
||||
Module->Draw(DrawPanel, DC, wxPoint(0,0), GR_XOR);
|
||||
Module->Draw( DrawPanel, DC, wxPoint( 0, 0 ), GR_XOR );
|
||||
|
||||
/* Generation des elements speciaux: drawsegments */
|
||||
LastSegm = (EDGE_MODULE*) Module->m_Drawings;
|
||||
if( LastSegm ) while( LastSegm->Pnext) LastSegm = (EDGE_MODULE*)LastSegm->Pnext;
|
||||
if( LastSegm )
|
||||
while( LastSegm->Pnext )
|
||||
LastSegm = (EDGE_MODULE*) LastSegm->Pnext;
|
||||
|
||||
FirstSegm = PtSegm = new EDGE_MODULE(Module);
|
||||
if (LastSegm )
|
||||
FirstSegm = PtSegm = new EDGE_MODULE( Module );
|
||||
if( LastSegm )
|
||||
{
|
||||
LastSegm->Pnext = PtSegm;
|
||||
PtSegm->Pback = LastSegm;
|
||||
|
@ -300,94 +310,97 @@ wxString msg;
|
|||
PtSegm->m_Layer = Module->m_Layer;
|
||||
PtSegm->m_Shape = S_SEGMENT;
|
||||
|
||||
newedge = new EDGE_MODULE(Module);
|
||||
newedge->Copy(PtSegm);
|
||||
newedge->AddToChain(PtSegm);
|
||||
newedge = new EDGE_MODULE( Module );
|
||||
newedge->Copy( PtSegm );
|
||||
newedge->AddToChain( PtSegm );
|
||||
PtSegm = newedge;
|
||||
PtSegm->m_Start = PtSegm->m_End;
|
||||
PtSegm = gen_arc(PtSegm,PtSegm->m_End.x - Mself.rayon, PtSegm->m_End.y, -900);
|
||||
PtSegm = gen_arc( PtSegm, PtSegm->m_End.x - Mself.rayon, PtSegm->m_End.y, -900 );
|
||||
|
||||
if(lextbrin)
|
||||
if( lextbrin )
|
||||
{
|
||||
newedge = new EDGE_MODULE(Module);
|
||||
newedge->Copy(PtSegm);
|
||||
newedge->AddToChain(PtSegm);
|
||||
newedge = new EDGE_MODULE( Module );
|
||||
newedge->Copy( PtSegm );
|
||||
newedge->AddToChain( PtSegm );
|
||||
PtSegm = newedge;
|
||||
PtSegm->m_Start = PtSegm->m_End;
|
||||
PtSegm->m_End.x -= lextbrin;
|
||||
}
|
||||
|
||||
/* Trace du serpentin */
|
||||
for (ii = 1 ; ii < Mself.nbrin; ii++)
|
||||
for( ii = 1; ii < Mself.nbrin; ii++ )
|
||||
{
|
||||
int arc_angle;
|
||||
newedge = new EDGE_MODULE(Module);
|
||||
newedge->Copy(PtSegm);
|
||||
newedge->AddToChain(PtSegm);
|
||||
newedge = new EDGE_MODULE( Module );
|
||||
newedge->Copy( PtSegm );
|
||||
newedge->AddToChain( PtSegm );
|
||||
PtSegm = newedge;
|
||||
PtSegm->m_Start = PtSegm->m_End;
|
||||
if( ii & 1) /* brin d'ordre impair : cercles de sens > 0 */
|
||||
if( ii & 1 ) /* brin d'ordre impair : cercles de sens > 0 */
|
||||
arc_angle = 1800;
|
||||
else arc_angle = -1800;
|
||||
else
|
||||
arc_angle = -1800;
|
||||
|
||||
PtSegm = gen_arc(PtSegm, PtSegm->m_End.x,
|
||||
PtSegm->m_End.y + Mself.rayon, arc_angle);
|
||||
PtSegm = gen_arc( PtSegm, PtSegm->m_End.x,
|
||||
PtSegm->m_End.y + Mself.rayon, arc_angle );
|
||||
|
||||
if( ii < Mself.nbrin-1)
|
||||
if( ii < Mself.nbrin - 1 )
|
||||
{
|
||||
newedge = new EDGE_MODULE(Module);
|
||||
newedge->Copy(PtSegm);
|
||||
newedge->AddToChain(PtSegm);
|
||||
newedge = new EDGE_MODULE( Module );
|
||||
newedge->Copy( PtSegm );
|
||||
newedge->AddToChain( PtSegm );
|
||||
PtSegm = newedge;
|
||||
PtSegm->m_Start = PtSegm->m_End;
|
||||
if( ii & 1) PtSegm->m_End.x += Mself.lbrin;
|
||||
else PtSegm->m_End.x -= Mself.lbrin;
|
||||
if( ii & 1 )
|
||||
PtSegm->m_End.x += Mself.lbrin;
|
||||
else
|
||||
PtSegm->m_End.x -= Mself.lbrin;
|
||||
}
|
||||
}
|
||||
|
||||
/* Trace du point final */
|
||||
|
||||
if( ii & 1) /* brin final de sens > 0 */
|
||||
if( ii & 1 ) /* brin final de sens > 0 */
|
||||
{
|
||||
if(lextbrin)
|
||||
if( lextbrin )
|
||||
{
|
||||
newedge = new EDGE_MODULE(Module);
|
||||
newedge->Copy(PtSegm);
|
||||
newedge->AddToChain(PtSegm);
|
||||
newedge = new EDGE_MODULE( Module );
|
||||
newedge->Copy( PtSegm );
|
||||
newedge->AddToChain( PtSegm );
|
||||
PtSegm = newedge;
|
||||
PtSegm->m_Start = PtSegm->m_End;
|
||||
PtSegm->m_End.x -= lextbrin;
|
||||
}
|
||||
|
||||
newedge = new EDGE_MODULE(Module);
|
||||
newedge->Copy(PtSegm);
|
||||
newedge->AddToChain(PtSegm);
|
||||
newedge = new EDGE_MODULE( Module );
|
||||
newedge->Copy( PtSegm );
|
||||
newedge->AddToChain( PtSegm );
|
||||
PtSegm = newedge;
|
||||
PtSegm->m_Start.x = PtSegm->m_End.x; PtSegm->m_Start.y = PtSegm->m_End.y;
|
||||
PtSegm = gen_arc(PtSegm, PtSegm->m_End.x, PtSegm->m_End.y + Mself.rayon, 900);
|
||||
PtSegm = gen_arc( PtSegm, PtSegm->m_End.x, PtSegm->m_End.y + Mself.rayon, 900 );
|
||||
}
|
||||
else
|
||||
{
|
||||
if(lextbrin)
|
||||
if( lextbrin )
|
||||
{
|
||||
newedge = new EDGE_MODULE(Module);
|
||||
newedge->Copy(PtSegm);
|
||||
newedge->AddToChain(PtSegm);
|
||||
newedge = new EDGE_MODULE( Module );
|
||||
newedge->Copy( PtSegm );
|
||||
newedge->AddToChain( PtSegm );
|
||||
PtSegm = newedge;
|
||||
PtSegm->m_Start = PtSegm->m_End;
|
||||
PtSegm->m_End.x += lextbrin;
|
||||
}
|
||||
newedge = new EDGE_MODULE(Module);
|
||||
newedge->Copy(PtSegm);
|
||||
newedge->AddToChain(PtSegm);
|
||||
newedge = new EDGE_MODULE( Module );
|
||||
newedge->Copy( PtSegm );
|
||||
newedge->AddToChain( PtSegm );
|
||||
PtSegm = newedge;
|
||||
PtSegm->m_Start = PtSegm->m_End;
|
||||
PtSegm = gen_arc(PtSegm, PtSegm->m_End.x, PtSegm->m_End.y + Mself.rayon, -900);
|
||||
PtSegm = gen_arc( PtSegm, PtSegm->m_End.x, PtSegm->m_End.y + Mself.rayon, -900 );
|
||||
}
|
||||
|
||||
newedge = new EDGE_MODULE(Module);
|
||||
newedge->Copy(PtSegm);
|
||||
newedge->AddToChain(PtSegm);
|
||||
newedge = new EDGE_MODULE( Module );
|
||||
newedge->Copy( PtSegm );
|
||||
newedge->AddToChain( PtSegm );
|
||||
PtSegm = newedge;
|
||||
PtSegm->m_Start = PtSegm->m_End;
|
||||
PtSegm->m_End = Mself.m_End;
|
||||
|
@ -395,14 +408,14 @@ wxString msg;
|
|||
|
||||
/* Rotation de la self si le trace doit etre horizontal : */
|
||||
LastSegm = PtSegm;
|
||||
if ( Mself.orient == 0)
|
||||
if( Mself.orient == 0 )
|
||||
{
|
||||
for( PtSegm = FirstSegm; PtSegm != NULL; PtSegm = (EDGE_MODULE*) PtSegm->Pnext )
|
||||
{
|
||||
RotatePoint(&PtSegm->m_Start.x, &PtSegm->m_Start.y,
|
||||
RotatePoint( &PtSegm->m_Start.x, &PtSegm->m_Start.y,
|
||||
FirstSegm->m_Start.x, FirstSegm->m_Start.y, 900 );
|
||||
if( PtSegm != LastSegm )
|
||||
RotatePoint(&PtSegm->m_End.x, &PtSegm->m_End.y,
|
||||
RotatePoint( &PtSegm->m_End.x, &PtSegm->m_End.y,
|
||||
FirstSegm->m_Start.x, FirstSegm->m_Start.y, 900 );
|
||||
}
|
||||
}
|
||||
|
@ -411,10 +424,10 @@ wxString msg;
|
|||
Module->m_Pos.x = LastSegm->m_End.x; Module->m_Pos.y = LastSegm->m_End.y;
|
||||
|
||||
/* Placement des 2 pads sur extremite */
|
||||
PtPad = new D_PAD(Module);
|
||||
PtPad = new D_PAD( Module );
|
||||
|
||||
Module->m_Pads = PtPad; PtPad->Pback = Module;
|
||||
PtPad->SetPadName( wxT("1") );
|
||||
PtPad->SetPadName( wxT( "1" ) );
|
||||
PtPad->m_Pos.x = LastSegm->m_End.x; PtPad->m_Pos.y = LastSegm->m_End.y;
|
||||
PtPad->m_Pos0.x = PtPad->m_Pos.x - Module->m_Pos.x;
|
||||
PtPad->m_Pos0.y = PtPad->m_Pos.y - Module->m_Pos.y;
|
||||
|
@ -424,19 +437,21 @@ wxString msg;
|
|||
PtPad->m_PadShape = CIRCLE;
|
||||
PtPad->m_Rayon = PtPad->m_Size.x / 2;
|
||||
|
||||
D_PAD * newpad = new D_PAD(Module);
|
||||
newpad->Copy(PtPad);
|
||||
newpad->AddToChain(PtPad);
|
||||
D_PAD* newpad = new D_PAD( Module );
|
||||
newpad->Copy( PtPad );
|
||||
newpad->AddToChain( PtPad );
|
||||
PtPad = newpad;
|
||||
PtPad->SetPadName( wxT("2") );
|
||||
PtPad->SetPadName( wxT( "2" ) );
|
||||
PtPad->m_Pos.x = FirstSegm->m_Start.x; PtPad->m_Pos.y = FirstSegm->m_Start.y;
|
||||
PtPad->m_Pos0.x = PtPad->m_Pos.x - Module->m_Pos.x;
|
||||
PtPad->m_Pos0.y = PtPad->m_Pos.y - Module->m_Pos.y;
|
||||
|
||||
/* Modif des positions textes */
|
||||
Module->Display_Infos(this);
|
||||
Module->m_Value->m_Pos.x = Module->m_Reference->m_Pos.x = ( FirstSegm->m_Start.x + LastSegm->m_End.x ) /2 ;
|
||||
Module->m_Value->m_Pos.y = Module->m_Reference->m_Pos.y = ( FirstSegm->m_Start.y + LastSegm->m_End.y ) /2 ;
|
||||
Module->Display_Infos( this );
|
||||
Module->m_Value->m_Pos.x = Module->m_Reference->m_Pos.x = ( FirstSegm->m_Start.x +
|
||||
LastSegm->m_End.x ) / 2;
|
||||
Module->m_Value->m_Pos.y = Module->m_Reference->m_Pos.y = ( FirstSegm->m_Start.y +
|
||||
LastSegm->m_End.y ) / 2;
|
||||
|
||||
Module->m_Reference->m_Pos.y -= Module->m_Reference->m_Size.y;
|
||||
Module->m_Value->m_Pos.y += Module->m_Value->m_Size.y;
|
||||
|
@ -457,54 +472,55 @@ wxString msg;
|
|||
|
||||
Module->Set_Rectangle_Encadrement();
|
||||
|
||||
Module->Draw(DrawPanel, DC, wxPoint(0,0), GR_OR);
|
||||
Module->Draw( DrawPanel, DC, wxPoint( 0, 0 ), GR_OR );
|
||||
|
||||
return Module;
|
||||
}
|
||||
|
||||
|
||||
/**************************************************************************/
|
||||
static EDGE_MODULE * gen_arc(EDGE_MODULE * PtSegm, int cX, int cY, int angle)
|
||||
static EDGE_MODULE* gen_arc( EDGE_MODULE* PtSegm, int cX, int cY, int angle )
|
||||
/**************************************************************************/
|
||||
|
||||
/* Genere un arc de EDGE_MODULE :
|
||||
de centre cX,cY
|
||||
d'angle "angle"
|
||||
de point de depart donne dans la structure pointee par PtSegm, qui doit
|
||||
entre a jour (type,net..)
|
||||
Retourne un pointeur sur la derniere structure EDGE_MODULE generee
|
||||
*/
|
||||
* de centre cX,cY
|
||||
* d'angle "angle"
|
||||
* de point de depart donne dans la structure pointee par PtSegm, qui doit
|
||||
* entre a jour (type,net..)
|
||||
* Retourne un pointeur sur la derniere structure EDGE_MODULE generee
|
||||
*/
|
||||
{
|
||||
int ii, nb_seg;
|
||||
float alpha, beta, fsin, fcos;
|
||||
int x0, xr0, y0, yr0;
|
||||
EDGE_MODULE * newedge;
|
||||
int ii, nb_seg;
|
||||
float alpha, beta, fsin, fcos;
|
||||
int x0, xr0, y0, yr0;
|
||||
EDGE_MODULE* newedge;
|
||||
|
||||
angle = -angle;
|
||||
y0 = PtSegm->m_Start.x - cX; x0 = PtSegm->m_Start.y - cY;
|
||||
|
||||
nb_seg = (abs(angle)) / 225 ; if(nb_seg == 0) nb_seg = 1 ;
|
||||
alpha = ( (float)angle * 3.14159 / 1800 ) / nb_seg;
|
||||
nb_seg = ( abs( angle ) ) / 225; if( nb_seg == 0 )
|
||||
nb_seg = 1;
|
||||
alpha = ( (float) angle * 3.14159 / 1800 ) / nb_seg;
|
||||
|
||||
for ( ii = 1 ; ii <= nb_seg ; ii++ )
|
||||
for( ii = 1; ii <= nb_seg; ii++ )
|
||||
{
|
||||
if( ii > 1)
|
||||
if( ii > 1 )
|
||||
{
|
||||
newedge = new EDGE_MODULE( (MODULE*) NULL);
|
||||
newedge->Copy(PtSegm);
|
||||
newedge = new EDGE_MODULE( (MODULE*) NULL );
|
||||
newedge->Copy( PtSegm );
|
||||
newedge->m_Parent = PtSegm->m_Parent;
|
||||
newedge->AddToChain(PtSegm);
|
||||
newedge->AddToChain( PtSegm );
|
||||
PtSegm = newedge;
|
||||
PtSegm->m_Start.x = PtSegm->m_End.x; PtSegm->m_Start.y = PtSegm->m_End.y;
|
||||
}
|
||||
|
||||
beta = (alpha * ii);
|
||||
fcos = cos(beta); fsin = sin(beta);
|
||||
fcos = cos( beta ); fsin = sin( beta );
|
||||
|
||||
xr0 = (int)(x0 * fcos + y0 * fsin);
|
||||
yr0 = (int)(y0 * fcos - x0 * fsin);
|
||||
PtSegm->m_End.x = cX + yr0; PtSegm->m_End.y = cY + xr0 ;
|
||||
xr0 = (int) (x0 * fcos + y0 * fsin);
|
||||
yr0 = (int) (y0 * fcos - x0 * fsin);
|
||||
PtSegm->m_End.x = cX + yr0; PtSegm->m_End.y = cY + xr0;
|
||||
}
|
||||
return( PtSegm );
|
||||
}
|
||||
|
||||
return PtSegm;
|
||||
}
|
||||
|
|
|
@ -16,6 +16,7 @@
|
|||
|
||||
/* fonctions locales */
|
||||
EDA_BaseStruct* Locate_MirePcb( EDA_BaseStruct* PtStruct, int LayerSearch, int typeloc );
|
||||
D_PAD* Locate_Any_Pad( BOARD* Pcb, const wxPoint& ref_pos, bool OnlyCurrentLayer );
|
||||
|
||||
|
||||
/**
|
||||
|
@ -390,10 +391,10 @@ DRAWSEGMENT* Locate_Segment_Pcb( BOARD* Pcb, int LayerSearch, int typeloc )
|
|||
}
|
||||
|
||||
|
||||
/*************************************************/
|
||||
/* D_PAD * Locate_Any_Pad(int typeloc, bool OnlyCurrentLayer) */
|
||||
/* D_PAD* Locate_Any_Pad(int ref_pos, bool OnlyCurrentLayer) */
|
||||
/*************************************************/
|
||||
/*************************************************
|
||||
* D_PAD * Locate_Any_Pad(int typeloc, bool OnlyCurrentLayer)
|
||||
* D_PAD* Locate_Any_Pad(int ref_pos, bool OnlyCurrentLayer)
|
||||
*************************************************/
|
||||
|
||||
/*
|
||||
* localisation de la pastille pointee par la coordonnee ref_pos.x,,ref_pos.y, ou
|
||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -1,7 +1,7 @@
|
|||
/****************************************************/
|
||||
/* Edition des pistes */
|
||||
/* Routines de duplication et deplacement de pistes */
|
||||
/****************************************************/
|
||||
/****************************************************/
|
||||
/* Edition des pistes */
|
||||
/* Routines de duplication et deplacement de pistes */
|
||||
/****************************************************/
|
||||
|
||||
#include "fctsys.h"
|
||||
#include "gr_basic.h"
|
||||
|
@ -17,70 +17,75 @@
|
|||
|
||||
/* Routines externes */
|
||||
|
||||
static void Show_MoveTrack(WinEDA_DrawPanel * panel, wxDC * DC, bool erase);
|
||||
static void Exit_MoveTrack(WinEDA_DrawPanel * Panel, wxDC *DC);
|
||||
static void Show_MoveTrack( WinEDA_DrawPanel* panel, wxDC* DC, bool erase );
|
||||
static void Exit_MoveTrack( WinEDA_DrawPanel* Panel, wxDC* DC );
|
||||
|
||||
#if 0
|
||||
/* Routines Locales */
|
||||
static void Duplic_Track(COMMAND * Cmd);
|
||||
static void Place_Dupl_Route(COMMAND * Cmd);
|
||||
static void Duplic_Track( COMMAND* Cmd );
|
||||
static void Place_Dupl_Route( COMMAND* Cmd );
|
||||
|
||||
#endif
|
||||
|
||||
/* variables locales */
|
||||
static wxPoint PosInit, LastPos;
|
||||
static TRACK * NewTrack; /* Nouvelle piste creee ou piste deplacee */
|
||||
static TRACK* NewTrack; /* Nouvelle piste creee ou piste deplacee */
|
||||
static int NbPtNewTrack;
|
||||
static int Old_HightLigth_NetCode;
|
||||
static bool Old_HightLigt_Status;
|
||||
|
||||
|
||||
/**************************************************************/
|
||||
static void Exit_MoveTrack(WinEDA_DrawPanel * Panel, wxDC *DC)
|
||||
static void Exit_MoveTrack( WinEDA_DrawPanel* Panel, wxDC* DC )
|
||||
/***************************************************************/
|
||||
|
||||
/* routine d'annulation de la commande drag, copy ou move track si une piste est en cours
|
||||
de tracage, ou de sortie de l'application EDITRACK.
|
||||
Appel par la touche ESC
|
||||
* de tracage, ou de sortie de l'application EDITRACK.
|
||||
* Appel par la touche ESC
|
||||
*/
|
||||
{
|
||||
TRACK * NextS;
|
||||
int ii;
|
||||
TRACK* NextS;
|
||||
int ii;
|
||||
|
||||
|
||||
/* Effacement du trace en cours */
|
||||
wxPoint oldpos = Panel->GetScreen()->m_Curseur;
|
||||
|
||||
Panel->GetScreen()->m_Curseur = PosInit;
|
||||
Panel->ManageCurseur(Panel, DC, TRUE);
|
||||
Panel->ManageCurseur( Panel, DC, TRUE );
|
||||
Panel->GetScreen()->m_Curseur = oldpos;
|
||||
g_HightLigt_Status = FALSE;
|
||||
( (WinEDA_PcbFrame *)Panel->m_Parent)->DrawHightLight( DC, g_HightLigth_NetCode) ;
|
||||
( (WinEDA_PcbFrame*) Panel->m_Parent )->DrawHightLight( DC, g_HightLigth_NetCode );
|
||||
|
||||
if( NewTrack )
|
||||
{
|
||||
if (NewTrack->m_Flags & IS_NEW )
|
||||
if( NewTrack->m_Flags & IS_NEW )
|
||||
{
|
||||
for( ii = 0; ii < NbPtNewTrack; ii++, NewTrack = NextS)
|
||||
for( ii = 0; ii < NbPtNewTrack; ii++, NewTrack = NextS )
|
||||
{
|
||||
if(NewTrack == NULL) break;
|
||||
if( NewTrack == NULL )
|
||||
break;
|
||||
NextS = (TRACK*) NewTrack->Pnext;
|
||||
delete NewTrack;
|
||||
}
|
||||
}
|
||||
else /* Move : remise en ancienne position */
|
||||
{
|
||||
TRACK * Track = NewTrack;
|
||||
TRACK* Track = NewTrack;
|
||||
int dx = LastPos.x - PosInit.x;
|
||||
int dy = LastPos.y - PosInit.y;
|
||||
for( ii = 0; ii < NbPtNewTrack; ii++, Track = (TRACK*) Track->Pnext)
|
||||
for( ii = 0; ii < NbPtNewTrack; ii++, Track = (TRACK*) Track->Pnext )
|
||||
{
|
||||
if( Track == NULL ) break;
|
||||
if( Track == NULL )
|
||||
break;
|
||||
Track->m_Start.x -= dx;
|
||||
Track->m_Start.y -= dy;
|
||||
Track->m_End.x -= dx;
|
||||
Track->m_End.y -= dy;
|
||||
Track->m_Flags = 0;
|
||||
|
||||
}
|
||||
Trace_Une_Piste(Panel, DC, NewTrack,NbPtNewTrack,GR_OR);
|
||||
|
||||
Trace_Une_Piste( Panel, DC, NewTrack, NbPtNewTrack, GR_OR );
|
||||
}
|
||||
|
||||
NewTrack = NULL;
|
||||
|
@ -92,44 +97,44 @@ int ii;
|
|||
Panel->m_Parent->EraseMsgBox();
|
||||
|
||||
/* Annulation deplacement et Redessin des segments dragges */
|
||||
DRAG_SEGM * pt_drag = g_DragSegmentList;
|
||||
for( ; pt_drag != NULL; pt_drag = pt_drag->Pnext)
|
||||
DRAG_SEGM* pt_drag = g_DragSegmentList;
|
||||
for( ; pt_drag != NULL; pt_drag = pt_drag->Pnext )
|
||||
{
|
||||
TRACK * Track = pt_drag->m_Segm;
|
||||
TRACK* Track = pt_drag->m_Segm;
|
||||
pt_drag->SetInitialValues();
|
||||
Track->SetState(EDIT,OFF);
|
||||
Track->SetState( EDIT, OFF );
|
||||
Track->m_Flags = 0;
|
||||
Track->Draw(Panel, DC, GR_OR);
|
||||
Track->Draw( Panel, DC, GR_OR );
|
||||
}
|
||||
|
||||
g_HightLigth_NetCode = Old_HightLigth_NetCode;
|
||||
g_HightLigt_Status = Old_HightLigt_Status;
|
||||
if(g_HightLigt_Status)
|
||||
( (WinEDA_PcbFrame *)Panel->m_Parent)->DrawHightLight( DC, g_HightLigth_NetCode) ;
|
||||
if( g_HightLigt_Status )
|
||||
( (WinEDA_PcbFrame*) Panel->m_Parent )->DrawHightLight( DC, g_HightLigth_NetCode );
|
||||
|
||||
EraseDragListe();
|
||||
}
|
||||
|
||||
|
||||
|
||||
/*************************************************************************/
|
||||
static void Show_MoveTrack(WinEDA_DrawPanel * panel, wxDC * DC, bool erase)
|
||||
static void Show_MoveTrack( WinEDA_DrawPanel* panel, wxDC* DC, bool erase )
|
||||
/*************************************************************************/
|
||||
/* redessin du contour de la piste lors des deplacements de la souris */
|
||||
{
|
||||
int ii, dx, dy;
|
||||
TRACK * Track;
|
||||
BASE_SCREEN * screen = panel->GetScreen();
|
||||
int track_fill_copy = DisplayOpt.DisplayPcbTrackFill;
|
||||
int ii, dx, dy;
|
||||
TRACK* Track;
|
||||
BASE_SCREEN* screen = panel->GetScreen();
|
||||
int track_fill_copy = DisplayOpt.DisplayPcbTrackFill;
|
||||
|
||||
DisplayOpt.DisplayPcbTrackFill = SKETCH ;
|
||||
DisplayOpt.DisplayPcbTrackFill = SKETCH;
|
||||
|
||||
erase = TRUE;
|
||||
erase = TRUE;
|
||||
|
||||
/* efface ancienne position si elle a ete deja dessinee */
|
||||
if( erase )
|
||||
{
|
||||
if ( NewTrack ) Trace_Une_Piste(panel, DC, NewTrack,NbPtNewTrack,GR_XOR) ;
|
||||
if( NewTrack )
|
||||
Trace_Une_Piste( panel, DC, NewTrack, NbPtNewTrack, GR_XOR );
|
||||
}
|
||||
|
||||
/* mise a jour des coordonnees des segments de la piste */
|
||||
|
@ -140,65 +145,66 @@ erase = TRUE;
|
|||
ii = NbPtNewTrack, Track = NewTrack;
|
||||
for( ; ii > 0; ii--, Track = Track->Next() )
|
||||
{
|
||||
if( Track->m_Flags & STARTPOINT)
|
||||
if( Track->m_Flags & STARTPOINT )
|
||||
{
|
||||
Track->m_Start.x += dx; Track->m_Start.y += dy;
|
||||
}
|
||||
if( Track->m_Flags & ENDPOINT)
|
||||
if( Track->m_Flags & ENDPOINT )
|
||||
{
|
||||
Track->m_End.x += dx; Track->m_End.y += dy;
|
||||
}
|
||||
}
|
||||
|
||||
/* dessin de la nouvelle piste */
|
||||
Trace_Une_Piste(panel, DC, NewTrack,NbPtNewTrack,GR_XOR) ;
|
||||
Trace_Une_Piste( panel, DC, NewTrack, NbPtNewTrack, GR_XOR );
|
||||
|
||||
/* Tracage des segments dragges */
|
||||
DRAG_SEGM * pt_drag = g_DragSegmentList;
|
||||
for( ; pt_drag != NULL; pt_drag = pt_drag->Pnext)
|
||||
DRAG_SEGM* pt_drag = g_DragSegmentList;
|
||||
for( ; pt_drag != NULL; pt_drag = pt_drag->Pnext )
|
||||
{
|
||||
Track = pt_drag->m_Segm;
|
||||
if ( erase ) Track->Draw(panel, DC, GR_XOR);
|
||||
if( Track->m_Flags & STARTPOINT)
|
||||
if( erase )
|
||||
Track->Draw( panel, DC, GR_XOR );
|
||||
if( Track->m_Flags & STARTPOINT )
|
||||
{
|
||||
Track->m_Start.x += dx; Track->m_Start.y += dy;
|
||||
}
|
||||
if( Track->m_Flags & ENDPOINT)
|
||||
if( Track->m_Flags & ENDPOINT )
|
||||
{
|
||||
Track->m_End.x += dx; Track->m_End.y += dy;
|
||||
}
|
||||
Track->Draw(panel, DC, GR_XOR);
|
||||
Track->Draw( panel, DC, GR_XOR );
|
||||
}
|
||||
DisplayOpt.DisplayPcbTrackFill = track_fill_copy ;
|
||||
|
||||
DisplayOpt.DisplayPcbTrackFill = track_fill_copy;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/***********************************************************************************/
|
||||
void WinEDA_PcbFrame::Start_MoveOneTrackSegment(TRACK * track, wxDC * DC, bool Drag)
|
||||
void WinEDA_PcbFrame::Start_MoveOneTrackSegment( TRACK* track, wxDC* DC, bool Drag )
|
||||
/***********************************************************************************/
|
||||
{
|
||||
/* Change hight light net: the new one will be hightlighted */
|
||||
Old_HightLigt_Status = g_HightLigt_Status;
|
||||
Old_HightLigth_NetCode = g_HightLigth_NetCode;
|
||||
if(g_HightLigt_Status) Hight_Light(DC);
|
||||
if( g_HightLigt_Status )
|
||||
Hight_Light( DC );
|
||||
|
||||
if ( Drag && track->m_StructType == TYPEVIA)
|
||||
if( Drag && track->m_StructType == TYPEVIA )
|
||||
{
|
||||
track->m_Flags = IS_DRAGGED|STARTPOINT|ENDPOINT;
|
||||
Collect_TrackSegmentsToDrag(DrawPanel, DC, track->m_Start,
|
||||
track->ReturnMaskLayer(), track->m_NetCode);
|
||||
track->m_Flags = IS_DRAGGED | STARTPOINT | ENDPOINT;
|
||||
Collect_TrackSegmentsToDrag( DrawPanel, DC, track->m_Start,
|
||||
track->ReturnMaskLayer(), track->m_NetCode );
|
||||
NewTrack = track;
|
||||
NbPtNewTrack = 1;
|
||||
PosInit = track->m_Start;
|
||||
}
|
||||
|
||||
else
|
||||
{
|
||||
int diag = track->IsPointOnEnds(GetScreen()->m_Curseur, -1);
|
||||
int diag = track->IsPointOnEnds( GetScreen()->m_Curseur, -1 );
|
||||
wxPoint pos = (diag & STARTPOINT) ? track->m_Start : track->m_End;
|
||||
Collect_TrackSegmentsToDrag(DrawPanel, DC, pos,
|
||||
track->ReturnMaskLayer(), track->m_NetCode);
|
||||
Collect_TrackSegmentsToDrag( DrawPanel, DC, pos,
|
||||
track->ReturnMaskLayer(), track->m_NetCode );
|
||||
track->m_Flags |= IS_DRAGGED;
|
||||
NewTrack = NULL;
|
||||
NbPtNewTrack = 0;
|
||||
|
@ -210,49 +216,52 @@ void WinEDA_PcbFrame::Start_MoveOneTrackSegment(TRACK * track, wxDC * DC, bool D
|
|||
|
||||
g_HightLigth_NetCode = track->m_NetCode;
|
||||
g_HightLigt_Status = TRUE;
|
||||
DrawHightLight( DC, g_HightLigth_NetCode) ;
|
||||
DrawPanel->ManageCurseur(DrawPanel, DC, TRUE);
|
||||
DrawHightLight( DC, g_HightLigth_NetCode );
|
||||
DrawPanel->ManageCurseur( DrawPanel, DC, TRUE );
|
||||
}
|
||||
|
||||
|
||||
|
||||
/**********************************************************************/
|
||||
bool WinEDA_PcbFrame::PlaceDraggedTrackSegment(TRACK * Track, wxDC * DC)
|
||||
bool WinEDA_PcbFrame::PlaceDraggedTrackSegment( TRACK* Track, wxDC* DC )
|
||||
/**********************************************************************/
|
||||
/* Place a dragged track segment or via */
|
||||
{
|
||||
int errdrc;
|
||||
DRAG_SEGM * pt_drag;
|
||||
int errdrc;
|
||||
DRAG_SEGM* pt_drag;
|
||||
|
||||
if(Track == NULL ) return FALSE;
|
||||
if( Track == NULL )
|
||||
return FALSE;
|
||||
|
||||
// DRC control:
|
||||
if(Drc_On)
|
||||
if( Drc_On )
|
||||
{
|
||||
errdrc = Drc(this, DC, Track, m_Pcb->m_Track,1);
|
||||
if(errdrc == BAD_DRC) return FALSE;
|
||||
errdrc = Drc( this, DC, Track, m_Pcb->m_Track, 1 );
|
||||
if( errdrc == BAD_DRC )
|
||||
return FALSE;
|
||||
/* Tracage des segments dragges */
|
||||
pt_drag = g_DragSegmentList;
|
||||
for( ; pt_drag; pt_drag = pt_drag->Pnext)
|
||||
for( ; pt_drag; pt_drag = pt_drag->Pnext )
|
||||
{
|
||||
errdrc = Drc(this, DC, pt_drag->m_Segm, m_Pcb->m_Track,1);
|
||||
if(errdrc == BAD_DRC) return FALSE;
|
||||
errdrc = Drc( this, DC, pt_drag->m_Segm, m_Pcb->m_Track, 1 );
|
||||
if( errdrc == BAD_DRC )
|
||||
return FALSE;
|
||||
}
|
||||
}
|
||||
|
||||
// DRC Ok: place track segments
|
||||
Track->m_Flags = 0;
|
||||
Track->Draw(DrawPanel, DC, GR_OR);
|
||||
Track->Draw( DrawPanel, DC, GR_OR );
|
||||
|
||||
/* Tracage des segments dragges */
|
||||
pt_drag = g_DragSegmentList;
|
||||
for( ; pt_drag; pt_drag = pt_drag->Pnext)
|
||||
for( ; pt_drag; pt_drag = pt_drag->Pnext )
|
||||
{
|
||||
Track = pt_drag->m_Segm;
|
||||
Track->SetState(EDIT,OFF);
|
||||
Track->SetState( EDIT, OFF );
|
||||
Track->m_Flags = 0;
|
||||
Track->Draw(DrawPanel, DC, GR_OR);
|
||||
Track->Draw( DrawPanel, DC, GR_OR );
|
||||
}
|
||||
|
||||
EraseDragListe();
|
||||
|
||||
GetScreen()->SetModify();
|
||||
|
@ -266,83 +275,89 @@ DRAG_SEGM * pt_drag;
|
|||
#if 0
|
||||
|
||||
/***********************************************/
|
||||
void WinEDA_PcbFrame::Place_Dupl_Route(Track * Track, wxDC * DC)
|
||||
void WinEDA_PcbFrame::Place_Dupl_Route( Track* Track, wxDC* DC )
|
||||
/******************************************/
|
||||
|
||||
/*
|
||||
Routine de placement d'une piste (succession de segments)
|
||||
*/
|
||||
* Routine de placement d'une piste (succession de segments)
|
||||
*/
|
||||
{
|
||||
D_PAD * pt_pad;
|
||||
TRACK * pt_track, *Track, * pt_classe, *NextS;
|
||||
int masquelayer;
|
||||
EDA_BaseStruct * LockPoint;
|
||||
int ii, old_net_code, new_net_code, DRC_error = 0;
|
||||
wxDC * DC = Cmd->DC;
|
||||
D_PAD* pt_pad;
|
||||
TRACK* pt_track, * Track, * pt_classe, * NextS;
|
||||
int masquelayer;
|
||||
EDA_BaseStruct* LockPoint;
|
||||
int ii, old_net_code, new_net_code, DRC_error = 0;
|
||||
wxDC* DC = Cmd->DC;
|
||||
|
||||
ActiveDrawPanel->ManageCurseur = NULL;
|
||||
|
||||
if( NewTrack == NULL ) return ;
|
||||
if( NewTrack == NULL )
|
||||
return;
|
||||
|
||||
old_net_code = NewTrack->net_code;
|
||||
|
||||
/* Placement du flag BUSY de la piste originelle, qui ne doit
|
||||
pas etre vue dans les recherches de raccordement suivantes */
|
||||
* pas etre vue dans les recherches de raccordement suivantes */
|
||||
ii = NbPtNewTrack; pt_track = NewTrack;
|
||||
for ( ; ii > 0; ii --, pt_track = (TRACK*) pt_track->Pnext)
|
||||
for( ; ii > 0; ii--, pt_track = (TRACK*) pt_track->Pnext )
|
||||
{
|
||||
pt_track->SetState(BUSY, ON);
|
||||
pt_track->SetState( BUSY, ON );
|
||||
}
|
||||
|
||||
/* Detection du nouveau net_code */
|
||||
ii = NbPtNewTrack; pt_track = NewTrack;
|
||||
for ( ; ii > 0; ii --, pt_track = (TRACK*) pt_track->Pnext)
|
||||
for( ; ii > 0; ii--, pt_track = (TRACK*) pt_track->Pnext )
|
||||
{
|
||||
pt_track->net_code = 0;
|
||||
}
|
||||
|
||||
new_net_code = 0;
|
||||
ii = 0; pt_track = NewTrack;
|
||||
for( ; ii < NbPtNewTrack ; ii++, pt_track = (TRACK*)pt_track->Pnext)
|
||||
for( ; ii < NbPtNewTrack; ii++, pt_track = (TRACK*) pt_track->Pnext )
|
||||
{
|
||||
/* Localisation de la pastille ou segment en debut de segment: */
|
||||
masquelayer = tab_layer[pt_track->Layer];
|
||||
LockPoint = LocateLockPoint(pt_track->m_Start.x,pt_track->m_Start.y,masquelayer);
|
||||
LockPoint = LocateLockPoint( pt_track->m_Start.x, pt_track->m_Start.y, masquelayer );
|
||||
if( LockPoint )
|
||||
{
|
||||
if ( LockPoint->m_StructType == TYPEPAD )
|
||||
if( LockPoint->m_StructType == TYPEPAD )
|
||||
{
|
||||
pt_pad = (D_PAD*) LockPoint;
|
||||
new_net_code = pt_pad->net_code;
|
||||
if ( new_net_code > 0 ) break;
|
||||
if( new_net_code > 0 )
|
||||
break;
|
||||
}
|
||||
else /* debut de piste sur un segment de piste */
|
||||
{
|
||||
Track = (TRACK *) LockPoint;
|
||||
Track = (TRACK*) LockPoint;
|
||||
new_net_code = Track->net_code;
|
||||
if ( new_net_code > 0 ) break;
|
||||
if( new_net_code > 0 )
|
||||
break;
|
||||
}
|
||||
}
|
||||
LockPoint = LocateLockPoint(pt_track->m_End.x,pt_track->m_End.y,masquelayer);
|
||||
LockPoint = LocateLockPoint( pt_track->m_End.x, pt_track->m_End.y, masquelayer );
|
||||
if( LockPoint )
|
||||
{
|
||||
if ( LockPoint->m_StructType == TYPEPAD )
|
||||
if( LockPoint->m_StructType == TYPEPAD )
|
||||
{
|
||||
pt_pad = (D_PAD*) LockPoint;
|
||||
new_net_code = pt_pad->net_code;
|
||||
if ( new_net_code > 0 ) break;
|
||||
if( new_net_code > 0 )
|
||||
break;
|
||||
}
|
||||
else /* debut de piste sur un segment de piste */
|
||||
{
|
||||
Track = (TRACK *) LockPoint;
|
||||
Track = (TRACK*) LockPoint;
|
||||
new_net_code = Track->net_code;
|
||||
if ( new_net_code > 0 ) break;
|
||||
if( new_net_code > 0 )
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* Mise a jour du nouveau net code de la piste */
|
||||
ii = 0; pt_track = NewTrack;
|
||||
for( ; ii < NbPtNewTrack; ii++, pt_track = (TRACK*)pt_track->Pnext)
|
||||
for( ; ii < NbPtNewTrack; ii++, pt_track = (TRACK*) pt_track->Pnext )
|
||||
{
|
||||
pt_track->net_code = new_net_code;
|
||||
}
|
||||
|
@ -352,175 +367,189 @@ wxDC * DC = Cmd->DC;
|
|||
for( ; ii < NbPtNewTrack; ii++, pt_track = pt_track->Next() )
|
||||
{
|
||||
if( Drc_On == RUN )
|
||||
if( drc(DC, pt_track, pt_pcb->Track, 1) == BAD_DRC )
|
||||
if( drc( DC, pt_track, pt_pcb->Track, 1 ) == BAD_DRC )
|
||||
{
|
||||
if( confirmation(" Erreur DRC, Place piste:") == YES ) continue;
|
||||
else { DRC_error = 1; break; }
|
||||
if( confirmation( " Erreur DRC, Place piste:" ) == YES )
|
||||
continue;
|
||||
else
|
||||
{
|
||||
DRC_error = 1; break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if( DRC_error == 0)
|
||||
if( DRC_error == 0 )
|
||||
{
|
||||
if(FlagState == MOVE_ROUTE)
|
||||
if( FlagState == MOVE_ROUTE )
|
||||
{
|
||||
/* copie nouvelle piste */
|
||||
pt_track = NewTrack;
|
||||
NewTrack = pt_track->Copy(NbPtNewTrack);
|
||||
NewTrack = pt_track->Copy( NbPtNewTrack );
|
||||
/* effacement ancienne ( chainage et liens mauvais */
|
||||
ii = NbPtNewTrack;
|
||||
for ( ; ii > 0; ii --, pt_track = NextS)
|
||||
for( ; ii > 0; ii--, pt_track = NextS )
|
||||
{
|
||||
NextS = (TRACK*) pt_track->Pnext;
|
||||
DeleteStructure(pt_track);
|
||||
DeleteStructure( pt_track );
|
||||
}
|
||||
test_1_net_connexion(DC, old_net_code );
|
||||
|
||||
test_1_net_connexion( DC, old_net_code );
|
||||
}
|
||||
|
||||
pt_classe = NewTrack->GetBestInsertPoint();
|
||||
NewTrack->Insert(pt_classe);
|
||||
NewTrack->Insert( pt_classe );
|
||||
|
||||
Trace_Une_Piste(DC, NewTrack,NbPtNewTrack,GR_OR) ;
|
||||
Trace_Une_Piste( DC, NewTrack, NbPtNewTrack, GR_OR );
|
||||
|
||||
/* Mise a jour des connexions sur pads et sur pistes */
|
||||
ii = 0; pt_track = NewTrack;
|
||||
for( ; ii < NbPtNewTrack; ii++, pt_track = NextS)
|
||||
for( ; ii < NbPtNewTrack; ii++, pt_track = NextS )
|
||||
{
|
||||
NextS = (TRACK*)pt_track->Pnext;
|
||||
pt_track->SetState(BEGIN_ONPAD|END_ONPAD, OFF);
|
||||
NextS = (TRACK*) pt_track->Pnext;
|
||||
pt_track->SetState( BEGIN_ONPAD | END_ONPAD, OFF );
|
||||
masquelayer = tab_layer[pt_track->Layer];
|
||||
|
||||
/* Localisation de la pastille ou segment sur debut segment: */
|
||||
LockPoint = LocateLockPoint(pt_track->m_Start.x,pt_track->m_Start.y,masquelayer);
|
||||
LockPoint = LocateLockPoint( pt_track->m_Start.x, pt_track->m_Start.y, masquelayer );
|
||||
if( LockPoint )
|
||||
{
|
||||
pt_track->start = LockPoint;
|
||||
if ( LockPoint->m_StructType == TYPEPAD )
|
||||
if( LockPoint->m_StructType == TYPEPAD )
|
||||
{ /* fin de piste sur un pad */
|
||||
pt_pad = (D_PAD*) LockPoint;
|
||||
pt_track->SetState(BEGIN_ONPAD, ON);
|
||||
pt_track->SetState( BEGIN_ONPAD, ON );
|
||||
}
|
||||
else /* debut de piste sur un segment de piste */
|
||||
{
|
||||
Track = (TRACK *) LockPoint;
|
||||
CreateLockPoint(&pt_track->m_Start.x,&pt_track->m_Start.y,Track,pt_track);
|
||||
Track = (TRACK*) LockPoint;
|
||||
CreateLockPoint( &pt_track->m_Start.x, &pt_track->m_Start.y, Track, pt_track );
|
||||
}
|
||||
}
|
||||
|
||||
/* Localisation de la pastille ou segment sur fin de segment: */
|
||||
LockPoint = LocateLockPoint(pt_track->m_End.x,pt_track->m_End.y,masquelayer);
|
||||
LockPoint = LocateLockPoint( pt_track->m_End.x, pt_track->m_End.y, masquelayer );
|
||||
if( LockPoint )
|
||||
{
|
||||
pt_track->end = LockPoint;
|
||||
if ( LockPoint->m_StructType == TYPEPAD )
|
||||
if( LockPoint->m_StructType == TYPEPAD )
|
||||
{ /* fin de piste sur un pad */
|
||||
pt_pad = (D_PAD*) LockPoint;
|
||||
pt_track->SetState(END_ONPAD, ON);
|
||||
pt_track->SetState( END_ONPAD, ON );
|
||||
}
|
||||
else /* debut de piste sur un segment de piste */
|
||||
{
|
||||
Track = (TRACK *) LockPoint;
|
||||
CreateLockPoint(&pt_track->m_Start.x,&pt_track->m_Start.y,Track,pt_track);
|
||||
Track = (TRACK*) LockPoint;
|
||||
CreateLockPoint( &pt_track->m_Start.x, &pt_track->m_Start.y, Track, pt_track );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* Suppression du flag BUSY */
|
||||
ii = NbPtNewTrack; pt_track = NewTrack;
|
||||
for ( ; ii > 0; ii --, pt_track = (TRACK*) pt_track->Pnext)
|
||||
for( ; ii > 0; ii--, pt_track = (TRACK*) pt_track->Pnext )
|
||||
{
|
||||
pt_track->SetState(BUSY, OFF);
|
||||
pt_track->SetState( BUSY, OFF );
|
||||
}
|
||||
|
||||
test_1_net_connexion(DC, new_net_code );
|
||||
test_1_net_connexion( DC, new_net_code );
|
||||
ActiveScreen->SetModify();
|
||||
}
|
||||
|
||||
else /* Erreur DRC: Annulation commande */
|
||||
{
|
||||
DisplayOpt.DisplayPcbTrackFill = SKETCH ;
|
||||
Trace_Une_Piste(DC, NewTrack,NbPtNewTrack,GR_XOR);
|
||||
DisplayOpt.DisplayPcbTrackFill = Track_fill_copy ;
|
||||
DisplayOpt.DisplayPcbTrackFill = SKETCH;
|
||||
Trace_Une_Piste( DC, NewTrack, NbPtNewTrack, GR_XOR );
|
||||
DisplayOpt.DisplayPcbTrackFill = Track_fill_copy;
|
||||
|
||||
if(FlagState == MOVE_ROUTE)
|
||||
if( FlagState == MOVE_ROUTE )
|
||||
{ /* Remise en position de la piste deplacee */
|
||||
Track = NewTrack;
|
||||
PosInitX -= Track->m_Start.x; PosInitY -= Track->m_Start.y;
|
||||
for( ii = 0; ii < NbPtNewTrack; ii++, Track = (TRACK*) Track->Pnext)
|
||||
for( ii = 0; ii < NbPtNewTrack; ii++, Track = (TRACK*) Track->Pnext )
|
||||
{
|
||||
if( Track == NULL ) break;
|
||||
if( Track == NULL )
|
||||
break;
|
||||
Track->m_Start.x += PosInitX; Track->m_Start.y += PosInitY;
|
||||
Track->m_End.x += PosInitX; Track->m_End.y += PosInitY;
|
||||
Track->SetState(BUSY,OFF);
|
||||
}
|
||||
Trace_Une_Piste(DC, NewTrack,NbPtNewTrack,GR_OR);
|
||||
Track->SetState( BUSY, OFF );
|
||||
}
|
||||
|
||||
if (FlagState == COPY_ROUTE )
|
||||
Trace_Une_Piste( DC, NewTrack, NbPtNewTrack, GR_OR );
|
||||
}
|
||||
|
||||
if( FlagState == COPY_ROUTE )
|
||||
{ /* Suppression copie */
|
||||
for( ii = 0; ii < NbPtNewTrack; NewTrack = NextS)
|
||||
for( ii = 0; ii < NbPtNewTrack; NewTrack = NextS )
|
||||
{
|
||||
if(NewTrack == NULL) break;
|
||||
if( NewTrack == NULL )
|
||||
break;
|
||||
NextS = (TRACK*) NewTrack->Pnext;
|
||||
delete NewTrack;
|
||||
}
|
||||
}
|
||||
}
|
||||
NewTrack = NULL;
|
||||
Affiche_Infos_Status_Pcb(Cmd);
|
||||
if(Etat_Surbrillance) Hight_Light(DC);
|
||||
Affiche_Infos_Status_Pcb( Cmd );
|
||||
if( Etat_Surbrillance )
|
||||
Hight_Light( DC );
|
||||
}
|
||||
|
||||
|
||||
/************************************************/
|
||||
void WinEDA_PcbFrame::Start_CopieMove_Route(TRACK * track, wxDC * DC, bool Drag)
|
||||
void WinEDA_PcbFrame::Start_CopieMove_Route( TRACK* track, wxDC* DC, bool Drag )
|
||||
/************************************************/
|
||||
|
||||
/* Routine permettant la recopie d'une piste (suite de segments) deja tracee
|
||||
*/
|
||||
*/
|
||||
{
|
||||
int ii;
|
||||
TRACK *pt_segm, *pt_track;
|
||||
int masquelayer = tab_layer[ActiveScreen->Active_Layer];
|
||||
wxDC * DC = Cmd->DC;
|
||||
int ii;
|
||||
TRACK* pt_segm, * pt_track;
|
||||
int masquelayer = tab_layer[ActiveScreen->Active_Layer];
|
||||
wxDC* DC = Cmd->DC;
|
||||
|
||||
if( NewTrack ) return;
|
||||
if( NewTrack )
|
||||
return;
|
||||
|
||||
FlagState = (int)Cmd->Menu->param_inf;
|
||||
FlagState = (int) Cmd->Menu->param_inf;
|
||||
|
||||
/* Recherche de la piste sur la couche active (non zone) */
|
||||
for(pt_segm = pt_pcb->Track; pt_segm != NULL; pt_segm = (TRACK*)pt_segm->Pnext)
|
||||
for( pt_segm = pt_pcb->Track; pt_segm != NULL; pt_segm = (TRACK*) pt_segm->Pnext )
|
||||
{
|
||||
pt_segm = Locate_Pistes(pt_segm,masquelayer, CURSEUR_OFF_GRILLE);
|
||||
if( pt_segm == NULL ) break ;
|
||||
break ;
|
||||
pt_segm = Locate_Pistes( pt_segm, masquelayer, CURSEUR_OFF_GRILLE );
|
||||
if( pt_segm == NULL )
|
||||
break;
|
||||
break;
|
||||
}
|
||||
|
||||
if( pt_segm != NULL )
|
||||
{
|
||||
if (FlagState == COPY_ROUTE )
|
||||
pt_track = Marque_Une_Piste(DC, pt_segm, &NbPtNewTrack, 0);
|
||||
else pt_track = Marque_Une_Piste(DC, pt_segm, &NbPtNewTrack, GR_XOR);
|
||||
if( FlagState == COPY_ROUTE )
|
||||
pt_track = Marque_Une_Piste( DC, pt_segm, &NbPtNewTrack, 0 );
|
||||
else
|
||||
pt_track = Marque_Une_Piste( DC, pt_segm, &NbPtNewTrack, GR_XOR );
|
||||
|
||||
if(NbPtNewTrack) /* Il y a NbPtNewTrack segments de piste a traiter */
|
||||
if( NbPtNewTrack ) /* Il y a NbPtNewTrack segments de piste a traiter */
|
||||
{
|
||||
/* effacement du flag BUSY de la piste originelle */
|
||||
ii = NbPtNewTrack; pt_segm = pt_track;
|
||||
for ( ; ii > 0; ii --, pt_segm = (TRACK*) pt_segm->Pnext)
|
||||
for( ; ii > 0; ii--, pt_segm = (TRACK*) pt_segm->Pnext )
|
||||
{
|
||||
pt_segm->SetState(BUSY, OFF);
|
||||
pt_segm->SetState( BUSY, OFF );
|
||||
}
|
||||
|
||||
if (FlagState == COPY_ROUTE )
|
||||
NewTrack = pt_track->Copy(NbPtNewTrack);
|
||||
else NewTrack = pt_track;
|
||||
if( FlagState == COPY_ROUTE )
|
||||
NewTrack = pt_track->Copy( NbPtNewTrack );
|
||||
else
|
||||
NewTrack = pt_track;
|
||||
|
||||
Affiche_Infos_Piste(Cmd, pt_track) ;
|
||||
Affiche_Infos_Piste( Cmd, pt_track );
|
||||
|
||||
startX = ActiveScreen->Curseur_X;
|
||||
startY = ActiveScreen->Curseur_Y;
|
||||
Place_Dupl_Route_Item.State = WAIT;
|
||||
ActiveDrawPanel->ManageCurseur = Show_Move_Piste;
|
||||
DisplayOpt.DisplayPcbTrackFill = SKETCH ;
|
||||
Trace_Une_Piste(DC, NewTrack,NbPtNewTrack,GR_XOR) ;
|
||||
DisplayOpt.DisplayPcbTrackFill = Track_fill_copy ;
|
||||
DisplayOpt.DisplayPcbTrackFill = SKETCH;
|
||||
Trace_Une_Piste( DC, NewTrack, NbPtNewTrack, GR_XOR );
|
||||
DisplayOpt.DisplayPcbTrackFill = Track_fill_copy;
|
||||
PosInitX = NewTrack->m_Start.x; PosInitY = NewTrack->m_Start.y;
|
||||
}
|
||||
}
|
||||
|
@ -530,83 +559,89 @@ wxDC * DC = Cmd->DC;
|
|||
#endif
|
||||
|
||||
/************************************************************************/
|
||||
EDA_BaseStruct * LocateLockPoint(BOARD * Pcb, wxPoint pos, int LayerMask)
|
||||
EDA_BaseStruct* LocateLockPoint( BOARD* Pcb, wxPoint pos, int LayerMask )
|
||||
/************************************************************************/
|
||||
|
||||
/* Routine trouvant le point " d'accrochage " d'une extremite de piste.
|
||||
Ce point peut etre un PAD ou un autre segment de piste
|
||||
Retourne:
|
||||
- pointeur sur ce PAD ou:
|
||||
- pointeur sur le segment ou:
|
||||
- NULL
|
||||
Parametres d'appel:
|
||||
coord pX, pY du point tst
|
||||
masque des couches a tester
|
||||
*/
|
||||
* Ce point peut etre un PAD ou un autre segment de piste
|
||||
* Retourne:
|
||||
* - pointeur sur ce PAD ou:
|
||||
* - pointeur sur le segment ou:
|
||||
* - NULL
|
||||
* Parametres d'appel:
|
||||
* coord pX, pY du point tst
|
||||
* masque des couches a tester
|
||||
*/
|
||||
{
|
||||
D_PAD * pt_pad;
|
||||
TRACK * ptsegm;
|
||||
MODULE * Module;
|
||||
D_PAD* pt_pad;
|
||||
TRACK* ptsegm;
|
||||
MODULE* Module;
|
||||
|
||||
/* detection du point type PAD */
|
||||
pt_pad = NULL;
|
||||
Module = Pcb->m_Modules;
|
||||
for( ; Module != NULL; Module = (MODULE*)Module->Pnext )
|
||||
for( ; Module != NULL; Module = (MODULE*) Module->Pnext )
|
||||
{
|
||||
pt_pad = Locate_Pads(Module, pos, LayerMask);
|
||||
if (pt_pad) return(pt_pad);
|
||||
pt_pad = Locate_Pads( Module, pos, LayerMask );
|
||||
if( pt_pad )
|
||||
return pt_pad;
|
||||
}
|
||||
|
||||
/* ici aucun pad n'a ete localise: detection d'un segment de piste */
|
||||
|
||||
ptsegm = Fast_Locate_Piste( Pcb->m_Track, NULL, pos, LayerMask);
|
||||
ptsegm = Fast_Locate_Piste( Pcb->m_Track, NULL, pos, LayerMask );
|
||||
if( ptsegm == NULL )
|
||||
ptsegm = Locate_Pistes( Pcb->m_Track, pos, LayerMask);
|
||||
return(ptsegm);
|
||||
ptsegm = Locate_Pistes( Pcb->m_Track, pos, LayerMask );
|
||||
return ptsegm;
|
||||
}
|
||||
|
||||
|
||||
/******************************************************************************/
|
||||
TRACK * CreateLockPoint(int *pX, int *pY, TRACK * ptsegm, TRACK * refsegm)
|
||||
TRACK* CreateLockPoint( int* pX, int* pY, TRACK* ptsegm, TRACK* refsegm )
|
||||
/******************************************************************************/
|
||||
|
||||
/* Routine de creation d'un point intermediaire sur un segment
|
||||
le segment ptsegm est casse en 2 segments se raccordant au point pX, pY
|
||||
retourne:
|
||||
NULL si pas de nouveau point ( c.a.d si pX, pY correspondait deja
|
||||
a une extremite ou:
|
||||
pointeur sur le segment cree
|
||||
si refsegm != NULL refsegm est pointeur sur le segment incident,
|
||||
et le point cree est l'intersection des 2 axes des segments ptsegm et
|
||||
refsegm
|
||||
retourne la valeur exacte de pX et pY
|
||||
Si ptsegm pointe sur une via:
|
||||
retourne la valeur exacte de pX et pY et ptsegm,
|
||||
mais ne cree pas de point supplementaire
|
||||
|
||||
*/
|
||||
* le segment ptsegm est casse en 2 segments se raccordant au point pX, pY
|
||||
* retourne:
|
||||
* NULL si pas de nouveau point ( c.a.d si pX, pY correspondait deja
|
||||
* a une extremite ou:
|
||||
* pointeur sur le segment cree
|
||||
* si refsegm != NULL refsegm est pointeur sur le segment incident,
|
||||
* et le point cree est l'intersection des 2 axes des segments ptsegm et
|
||||
* refsegm
|
||||
* retourne la valeur exacte de pX et pY
|
||||
* Si ptsegm pointe sur une via:
|
||||
* retourne la valeur exacte de pX et pY et ptsegm,
|
||||
* mais ne cree pas de point supplementaire
|
||||
*
|
||||
*/
|
||||
{
|
||||
int cX, cY;
|
||||
int dx, dy; /* Coord de l'extremite du segm ptsegm / origine */
|
||||
int ox, oy, fx , fy; /* coord de refsegm / origine de prsegm */
|
||||
TRACK * NewTrack;
|
||||
int cX, cY;
|
||||
int dx, dy; /* Coord de l'extremite du segm ptsegm / origine */
|
||||
int ox, oy, fx, fy; /* coord de refsegm / origine de prsegm */
|
||||
TRACK* NewTrack;
|
||||
|
||||
if( (ptsegm->m_Start.x == *pX) && (ptsegm->m_Start.y == *pY) ) return(NULL);
|
||||
if( (ptsegm->m_End.x == *pX) && (ptsegm->m_End.y == *pY) ) return(NULL);
|
||||
if( (ptsegm->m_Start.x == *pX) && (ptsegm->m_Start.y == *pY) )
|
||||
return NULL;
|
||||
if( (ptsegm->m_End.x == *pX) && (ptsegm->m_End.y == *pY) )
|
||||
return NULL;
|
||||
|
||||
/* le point n'est pas sur une extremite de piste */
|
||||
if(ptsegm->m_StructType == TYPEVIA )
|
||||
if( ptsegm->m_StructType == TYPEVIA )
|
||||
{
|
||||
*pX = ptsegm->m_Start.x; *pY = ptsegm->m_Start.y;
|
||||
return(ptsegm);
|
||||
return ptsegm;
|
||||
}
|
||||
|
||||
/* calcul des coord vraies du point intermediaire dans le repere d'origine
|
||||
= origine de ptsegm */
|
||||
* = origine de ptsegm */
|
||||
cX = *pX - ptsegm->m_Start.x;
|
||||
cY = *pY - ptsegm->m_Start.y;
|
||||
dx = ptsegm->m_End.x - ptsegm->m_Start.x;
|
||||
dy = ptsegm->m_End.y - ptsegm->m_Start.y;
|
||||
|
||||
// ***** A COMPLETER : non utilise
|
||||
if ( refsegm )
|
||||
if( refsegm )
|
||||
{
|
||||
ox = refsegm->m_Start.x - ptsegm->m_Start.x;
|
||||
oy = refsegm->m_Start.y - ptsegm->m_Start.y;
|
||||
|
@ -615,31 +650,30 @@ TRACK * NewTrack;
|
|||
}
|
||||
|
||||
/* pour que le point soit sur le segment ptsegm: cY/cX = dy/dx */
|
||||
if ( dx == 0 ) cX = 0; /* segm horizontal */
|
||||
else cY = (cX * dy) / dx;
|
||||
if( dx == 0 )
|
||||
cX = 0; /* segm horizontal */
|
||||
else
|
||||
cY = (cX * dy) / dx;
|
||||
|
||||
/* creation du point intermediaire ( c'est a dire creation d'un nouveau
|
||||
segment, debutant au point intermediaire */
|
||||
* segment, debutant au point intermediaire */
|
||||
|
||||
cX += ptsegm->m_Start.x; cY += ptsegm->m_Start.y;
|
||||
NewTrack = ptsegm->Copy();
|
||||
|
||||
NewTrack->Insert(NULL, ptsegm);
|
||||
NewTrack->Insert( NULL, ptsegm );
|
||||
/* correction du pointeur de fin du nouveau segment */
|
||||
NewTrack->end = ptsegm->end;
|
||||
|
||||
/* le segment primitif finit au nouveau point : */
|
||||
ptsegm->m_End.x = cX; ptsegm->m_End.y = cY;
|
||||
ptsegm->SetState(END_ONPAD, OFF);
|
||||
ptsegm->SetState( END_ONPAD, OFF );
|
||||
|
||||
/* le nouveau segment debute au nouveau point : */
|
||||
ptsegm = NewTrack;;
|
||||
ptsegm->m_Start.x = cX; ptsegm->m_Start.y = cY;
|
||||
ptsegm->SetState(BEGIN_ONPAD, OFF);
|
||||
ptsegm->SetState( BEGIN_ONPAD, OFF );
|
||||
*pX = cX; *pY = cY;
|
||||
|
||||
return(ptsegm);
|
||||
|
||||
return ptsegm;
|
||||
}
|
||||
|
||||
|
||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -1,4 +1,4 @@
|
|||
/* Set up the basic primitives for Layer control */
|
||||
/* Set up the basic primitives for Layer control */
|
||||
|
||||
#include "fctsys.h"
|
||||
#include "gr_basic.h"
|
||||
|
@ -19,6 +19,7 @@ enum layer_sel_id {
|
|||
ID_LAYER_SELECT_TOP,
|
||||
ID_LAYER_SELECT_BOTTOM,
|
||||
ID_LAYER_SELECT
|
||||
|
||||
};
|
||||
|
||||
|
||||
|
@ -26,79 +27,90 @@ enum layer_sel_id {
|
|||
/* classe pour la frame de selection de layers */
|
||||
/***********************************************/
|
||||
|
||||
class WinEDA_SelLayerFrame: public wxDialog
|
||||
class WinEDA_SelLayerFrame : public wxDialog
|
||||
{
|
||||
private:
|
||||
WinEDA_BasePcbFrame *m_Parent;
|
||||
wxRadioBox * m_LayerList;
|
||||
WinEDA_BasePcbFrame* m_Parent;
|
||||
wxRadioBox* m_LayerList;
|
||||
int m_LayerId[NB_LAYERS];
|
||||
|
||||
public:
|
||||
|
||||
// Constructor and destructor
|
||||
WinEDA_SelLayerFrame(WinEDA_BasePcbFrame *parent, int default_layer,
|
||||
int min_layer, int max_layer);
|
||||
~WinEDA_SelLayerFrame(void) {};
|
||||
WinEDA_SelLayerFrame( WinEDA_BasePcbFrame* parent, int default_layer,
|
||||
int min_layer, int max_layer );
|
||||
~WinEDA_SelLayerFrame( void ) { };
|
||||
|
||||
private:
|
||||
void Sel_Layer(wxCommandEvent& event);
|
||||
void Cancel(wxCommandEvent& event);
|
||||
DECLARE_EVENT_TABLE()
|
||||
void Sel_Layer( wxCommandEvent& event );
|
||||
void Cancel( wxCommandEvent& event );
|
||||
|
||||
DECLARE_EVENT_TABLE()
|
||||
};
|
||||
|
||||
/* Table des evenements pour WinEDA_SelLayerFrame */
|
||||
BEGIN_EVENT_TABLE(WinEDA_SelLayerFrame, wxDialog)
|
||||
EVT_BUTTON(ID_LAYER_OK, WinEDA_SelLayerFrame::Sel_Layer)
|
||||
EVT_BUTTON(ID_LAYER_CANCEL, WinEDA_SelLayerFrame::Cancel)
|
||||
EVT_RADIOBOX(ID_LAYER_SELECT, WinEDA_SelLayerFrame::Sel_Layer)
|
||||
BEGIN_EVENT_TABLE( WinEDA_SelLayerFrame, wxDialog )
|
||||
EVT_BUTTON( ID_LAYER_OK, WinEDA_SelLayerFrame::Sel_Layer )
|
||||
EVT_BUTTON( ID_LAYER_CANCEL, WinEDA_SelLayerFrame::Cancel )
|
||||
EVT_RADIOBOX( ID_LAYER_SELECT, WinEDA_SelLayerFrame::Sel_Layer )
|
||||
END_EVENT_TABLE()
|
||||
|
||||
|
||||
/***********************************************************************************/
|
||||
int WinEDA_BasePcbFrame::SelectLayer(int default_layer, int min_layer, int max_layer)
|
||||
int WinEDA_BasePcbFrame::SelectLayer( int default_layer, int min_layer, int max_layer )
|
||||
/***********************************************************************************/
|
||||
|
||||
/* Install the dialog box for layer selection
|
||||
default_layer = Preselection
|
||||
min_layer = val min de layer selectionnable (-1 si pas de val mini)
|
||||
max_layer = val max de layer selectionnable (-1 si pas de val maxi)
|
||||
*/
|
||||
* default_layer = Preselection
|
||||
* min_layer = val min de layer selectionnable (-1 si pas de val mini)
|
||||
* max_layer = val max de layer selectionnable (-1 si pas de val maxi)
|
||||
*/
|
||||
{
|
||||
int layer;
|
||||
WinEDA_SelLayerFrame * frame =
|
||||
new WinEDA_SelLayerFrame(this, default_layer,min_layer, max_layer);
|
||||
int layer;
|
||||
WinEDA_SelLayerFrame* frame =
|
||||
new WinEDA_SelLayerFrame( this, default_layer, min_layer, max_layer );
|
||||
|
||||
layer = frame->ShowModal(); frame->Destroy();
|
||||
return layer;
|
||||
}
|
||||
|
||||
|
||||
/***********************************************************************/
|
||||
WinEDA_SelLayerFrame::WinEDA_SelLayerFrame(WinEDA_BasePcbFrame *parent,
|
||||
int default_layer, int min_layer, int max_layer):
|
||||
wxDialog(parent, -1, _("Select Layer:"),wxPoint(-1,-1),
|
||||
wxSize(470, 250),
|
||||
WinEDA_SelLayerFrame::WinEDA_SelLayerFrame( WinEDA_BasePcbFrame* parent,
|
||||
int default_layer, int min_layer, int max_layer ) :
|
||||
wxDialog( parent, -1, _( "Select Layer:" ), wxPoint( -1, -1 ),
|
||||
wxSize( 470, 250 ),
|
||||
DIALOG_STYLE )
|
||||
/***********************************************************************/
|
||||
{
|
||||
wxButton * Button;
|
||||
int ii, yy, xx;
|
||||
wxPoint pos;
|
||||
wxString LayerList[NB_LAYERS];
|
||||
int LayerCount, LayerSelect = -1;
|
||||
wxButton* Button;
|
||||
int ii, yy, xx;
|
||||
wxPoint pos;
|
||||
wxString LayerList[NB_LAYERS];
|
||||
int LayerCount, LayerSelect = -1;
|
||||
|
||||
m_Parent = parent;
|
||||
SetFont(*g_DialogFont);
|
||||
SetFont( *g_DialogFont );
|
||||
|
||||
/* Construction de la liste des couches autorisées */
|
||||
/* Construction de la liste des couches autoris<69>s */
|
||||
LayerCount = 0;
|
||||
int Masque_Layer = g_TabAllCopperLayerMask[g_DesignSettings.m_CopperLayerCount-1];
|
||||
int Masque_Layer = g_TabAllCopperLayerMask[g_DesignSettings.m_CopperLayerCount - 1];
|
||||
Masque_Layer += ALL_NO_CU_LAYERS;
|
||||
for ( ii = 0; ii < NB_LAYERS ; ii ++ )
|
||||
for( ii = 0; ii < NB_LAYERS; ii++ )
|
||||
{
|
||||
m_LayerId[ii] = 0;
|
||||
if ( (g_TabOneLayerMask[ii] & Masque_Layer) )
|
||||
if( (g_TabOneLayerMask[ii] & Masque_Layer) )
|
||||
{
|
||||
if ( min_layer > ii ) continue;
|
||||
if ( (max_layer >= 0) && (max_layer < ii) ) break;
|
||||
LayerList[LayerCount] = ReturnPcbLayerName(ii);
|
||||
if ( ii == default_layer ) LayerSelect = LayerCount;
|
||||
if( min_layer > ii )
|
||||
continue;
|
||||
|
||||
if( (max_layer >= 0) && (max_layer < ii) )
|
||||
break;
|
||||
|
||||
LayerList[LayerCount] = ReturnPcbLayerName( ii );
|
||||
if( ii == default_layer )
|
||||
LayerSelect = LayerCount;
|
||||
|
||||
m_LayerId[LayerCount] = ii;
|
||||
LayerCount++;
|
||||
}
|
||||
|
@ -106,42 +118,45 @@ int LayerCount, LayerSelect = -1;
|
|||
|
||||
pos.x = 5; pos.y = 5;
|
||||
|
||||
m_LayerList = new wxRadioBox(this, ID_LAYER_SELECT, _("Layer"),
|
||||
pos, wxSize(-1,-1), LayerCount, LayerList,
|
||||
(LayerCount < 8) ? LayerCount : 8, wxRA_SPECIFY_ROWS);
|
||||
m_LayerList = new wxRadioBox( this, ID_LAYER_SELECT, _( "Layer" ),
|
||||
pos, wxSize( -1, -1 ), LayerCount, LayerList,
|
||||
(LayerCount < 8) ? LayerCount : 8, wxRA_SPECIFY_ROWS );
|
||||
|
||||
if ( LayerSelect >= 0 ) m_LayerList->SetSelection(LayerSelect);
|
||||
if( LayerSelect >= 0 )
|
||||
m_LayerList->SetSelection( LayerSelect );
|
||||
|
||||
m_LayerList->GetSize(&xx, &yy);
|
||||
m_LayerList->GetSize( &xx, &yy );
|
||||
pos.x += xx + 12;
|
||||
Button = new wxButton(this,ID_LAYER_OK,
|
||||
_("OK"), pos);
|
||||
Button->SetForegroundColour(*wxBLUE);
|
||||
Button = new wxButton( this, ID_LAYER_OK,
|
||||
_( "OK" ), pos );
|
||||
Button->SetForegroundColour( *wxBLUE );
|
||||
|
||||
pos.y += Button->GetSize().y + 5;
|
||||
Button = new wxButton(this,ID_LAYER_CANCEL,
|
||||
_("Cancel"), pos);
|
||||
Button->SetForegroundColour(*wxRED);
|
||||
Button = new wxButton( this, ID_LAYER_CANCEL,
|
||||
_( "Cancel" ), pos );
|
||||
Button->SetForegroundColour( *wxRED );
|
||||
|
||||
/* Redimensionnement de la boite de dialogue: */
|
||||
pos.x += Button->GetSize().x + 10;
|
||||
SetSize(-1, -1, pos.x , yy + 35);
|
||||
SetSize( -1, -1, pos.x, yy + 35 );
|
||||
}
|
||||
|
||||
|
||||
/***************************************************************/
|
||||
void WinEDA_SelLayerFrame::Sel_Layer(wxCommandEvent& event)
|
||||
void WinEDA_SelLayerFrame::Sel_Layer( wxCommandEvent& event )
|
||||
/***************************************************************/
|
||||
{
|
||||
int ii = m_LayerId[m_LayerList->GetSelection()];
|
||||
EndModal(ii);
|
||||
int ii = m_LayerId[m_LayerList->GetSelection()];
|
||||
|
||||
EndModal( ii );
|
||||
}
|
||||
|
||||
|
||||
/***************************************************************/
|
||||
void WinEDA_SelLayerFrame::Cancel(wxCommandEvent& event)
|
||||
void WinEDA_SelLayerFrame::Cancel( wxCommandEvent& event )
|
||||
/***************************************************************/
|
||||
{
|
||||
EndModal(-1);
|
||||
EndModal( -1 );
|
||||
}
|
||||
|
||||
|
||||
|
@ -149,42 +164,46 @@ void WinEDA_SelLayerFrame::Cancel(wxCommandEvent& event)
|
|||
/* classe pour la frame de selection de paires de layers */
|
||||
/*********************************************************/
|
||||
|
||||
class WinEDA_SelLayerPairFrame: public wxDialog
|
||||
class WinEDA_SelLayerPairFrame : public wxDialog
|
||||
{
|
||||
private:
|
||||
WinEDA_BasePcbFrame *m_Parent;
|
||||
wxRadioBox * m_LayerListTOP;
|
||||
wxRadioBox * m_LayerListBOTTOM;
|
||||
WinEDA_BasePcbFrame* m_Parent;
|
||||
wxRadioBox* m_LayerListTOP;
|
||||
wxRadioBox* m_LayerListBOTTOM;
|
||||
int m_LayerId[NB_COPPER_LAYERS];
|
||||
|
||||
public:
|
||||
|
||||
// Constructor and destructor
|
||||
WinEDA_SelLayerPairFrame(WinEDA_BasePcbFrame *parent);
|
||||
~WinEDA_SelLayerPairFrame(void) {};
|
||||
WinEDA_SelLayerPairFrame( WinEDA_BasePcbFrame* parent );
|
||||
~WinEDA_SelLayerPairFrame( void ) { };
|
||||
|
||||
private:
|
||||
void Sel_Layer(wxCommandEvent& event);
|
||||
void Cancel(wxCommandEvent& event);
|
||||
DECLARE_EVENT_TABLE()
|
||||
void Sel_Layer( wxCommandEvent& event );
|
||||
void Cancel( wxCommandEvent& event );
|
||||
|
||||
DECLARE_EVENT_TABLE()
|
||||
};
|
||||
|
||||
|
||||
/* Table des evenements pour WinEDA_SelLayerPairFrame */
|
||||
BEGIN_EVENT_TABLE(WinEDA_SelLayerPairFrame, wxDialog)
|
||||
EVT_BUTTON(ID_LAYER_OK, WinEDA_SelLayerPairFrame::Sel_Layer)
|
||||
EVT_BUTTON(ID_LAYER_CANCEL, WinEDA_SelLayerPairFrame::Cancel)
|
||||
EVT_RADIOBOX(ID_LAYER_SELECT, WinEDA_SelLayerPairFrame::Sel_Layer)
|
||||
BEGIN_EVENT_TABLE( WinEDA_SelLayerPairFrame, wxDialog )
|
||||
EVT_BUTTON( ID_LAYER_OK, WinEDA_SelLayerPairFrame::Sel_Layer )
|
||||
EVT_BUTTON( ID_LAYER_CANCEL, WinEDA_SelLayerPairFrame::Cancel )
|
||||
EVT_RADIOBOX( ID_LAYER_SELECT, WinEDA_SelLayerPairFrame::Sel_Layer )
|
||||
END_EVENT_TABLE()
|
||||
|
||||
/***********************************************/
|
||||
void WinEDA_BasePcbFrame::SelectLayerPair(void)
|
||||
void WinEDA_BasePcbFrame::SelectLayerPair( void )
|
||||
/***********************************************/
|
||||
|
||||
/* Affiche une double liste de layers cuivre pour selection d'une paire de layers
|
||||
pour autorutage, vias...
|
||||
*/
|
||||
* pour autorutage, vias...
|
||||
*/
|
||||
{
|
||||
WinEDA_SelLayerPairFrame * frame =
|
||||
new WinEDA_SelLayerPairFrame(this);
|
||||
WinEDA_SelLayerPairFrame* frame =
|
||||
new WinEDA_SelLayerPairFrame( this );
|
||||
|
||||
frame->ShowModal(); frame->Destroy();
|
||||
DrawPanel->MouseToCursorSchema();
|
||||
SetToolbars();
|
||||
|
@ -192,34 +211,34 @@ void WinEDA_BasePcbFrame::SelectLayerPair(void)
|
|||
|
||||
|
||||
/*******************************************************************************/
|
||||
WinEDA_SelLayerPairFrame::WinEDA_SelLayerPairFrame(WinEDA_BasePcbFrame *parent):
|
||||
wxDialog(parent, -1, _("Select Layer Pair:"),wxPoint(-1,-1),
|
||||
wxSize(470, 250), DIALOG_STYLE )
|
||||
WinEDA_SelLayerPairFrame::WinEDA_SelLayerPairFrame( WinEDA_BasePcbFrame* parent ) :
|
||||
wxDialog( parent, -1, _( "Select Layer Pair:" ), wxPoint( -1, -1 ),
|
||||
wxSize( 470, 250 ), DIALOG_STYLE )
|
||||
/*******************************************************************************/
|
||||
{
|
||||
wxButton * Button;
|
||||
int ii, LayerCount;
|
||||
int yy, xx;
|
||||
wxPoint pos;
|
||||
wxString LayerList[NB_COPPER_LAYERS];
|
||||
int LayerTopSelect = 0, LayerBottomSelect = 0 ;
|
||||
wxButton* Button;
|
||||
int ii, LayerCount;
|
||||
int yy, xx;
|
||||
wxPoint pos;
|
||||
wxString LayerList[NB_COPPER_LAYERS];
|
||||
int LayerTopSelect = 0, LayerBottomSelect = 0;
|
||||
|
||||
m_Parent = parent;
|
||||
SetFont(*g_DialogFont);
|
||||
SetFont( *g_DialogFont );
|
||||
|
||||
PCB_SCREEN * screen = (PCB_SCREEN *) m_Parent->m_CurrentScreen;
|
||||
/* Construction de la liste des couches autorisées */
|
||||
int Masque_Layer = g_TabAllCopperLayerMask[g_DesignSettings.m_CopperLayerCount-1];
|
||||
PCB_SCREEN* screen = (PCB_SCREEN*) m_Parent->m_CurrentScreen;
|
||||
/* Construction de la liste des couches autoris<69>s */
|
||||
int Masque_Layer = g_TabAllCopperLayerMask[g_DesignSettings.m_CopperLayerCount - 1];
|
||||
Masque_Layer += ALL_NO_CU_LAYERS;
|
||||
for ( ii = 0, LayerCount = 0; ii < NB_COPPER_LAYERS ; ii ++ )
|
||||
for( ii = 0, LayerCount = 0; ii < NB_COPPER_LAYERS; ii++ )
|
||||
{
|
||||
m_LayerId[ii] = 0;
|
||||
if ( (g_TabOneLayerMask[ii] & Masque_Layer) )
|
||||
if( (g_TabOneLayerMask[ii] & Masque_Layer) )
|
||||
{
|
||||
LayerList[LayerCount] = ReturnPcbLayerName(ii);
|
||||
if ( ii == screen->m_Route_Layer_TOP )
|
||||
LayerList[LayerCount] = ReturnPcbLayerName( ii );
|
||||
if( ii == screen->m_Route_Layer_TOP )
|
||||
LayerTopSelect = LayerCount;
|
||||
if ( ii == screen->m_Route_Layer_BOTTOM )
|
||||
if( ii == screen->m_Route_Layer_BOTTOM )
|
||||
LayerBottomSelect = LayerCount;
|
||||
m_LayerId[LayerCount] = ii;
|
||||
LayerCount++;
|
||||
|
@ -227,51 +246,48 @@ PCB_SCREEN * screen = (PCB_SCREEN *) m_Parent->m_CurrentScreen;
|
|||
}
|
||||
|
||||
pos.x = 5; pos.y = 5;
|
||||
m_LayerListTOP = new wxRadioBox(this, ID_LAYER_SELECT_TOP, _("Top Layer"),
|
||||
pos, wxSize(-1,-1), LayerCount, LayerList,
|
||||
(LayerCount < 8) ? LayerCount : 8, wxRA_SPECIFY_ROWS);
|
||||
m_LayerListTOP->SetSelection(LayerTopSelect);
|
||||
m_LayerListTOP = new wxRadioBox( this, ID_LAYER_SELECT_TOP, _( "Top Layer" ),
|
||||
pos, wxSize( -1, -1 ), LayerCount, LayerList,
|
||||
(LayerCount < 8) ? LayerCount : 8, wxRA_SPECIFY_ROWS );
|
||||
m_LayerListTOP->SetSelection( LayerTopSelect );
|
||||
|
||||
m_LayerListTOP->GetSize(&xx, &yy);
|
||||
m_LayerListTOP->GetSize( &xx, &yy );
|
||||
pos.x += xx + 12;
|
||||
m_LayerListBOTTOM = new wxRadioBox(this, ID_LAYER_SELECT_BOTTOM, _("Bottom Layer"),
|
||||
pos, wxSize(-1,-1), LayerCount, LayerList,
|
||||
(LayerCount < 8) ? LayerCount : 8, wxRA_SPECIFY_ROWS);
|
||||
m_LayerListBOTTOM->SetSelection(LayerBottomSelect);
|
||||
m_LayerListBOTTOM = new wxRadioBox( this, ID_LAYER_SELECT_BOTTOM, _( "Bottom Layer" ),
|
||||
pos, wxSize( -1, -1 ), LayerCount, LayerList,
|
||||
(LayerCount < 8) ? LayerCount : 8, wxRA_SPECIFY_ROWS );
|
||||
m_LayerListBOTTOM->SetSelection( LayerBottomSelect );
|
||||
|
||||
m_LayerListBOTTOM->GetSize(&xx, &yy);
|
||||
m_LayerListBOTTOM->GetSize( &xx, &yy );
|
||||
pos.x += xx + 12;
|
||||
Button = new wxButton(this,ID_LAYER_OK,
|
||||
_("OK"), pos);
|
||||
Button->SetForegroundColour(*wxBLUE);
|
||||
Button = new wxButton( this, ID_LAYER_OK, _( "OK" ), pos );
|
||||
Button->SetForegroundColour( *wxBLUE );
|
||||
|
||||
pos.y += Button->GetSize().y + 5;
|
||||
Button = new wxButton(this,ID_LAYER_CANCEL,
|
||||
_("Cancel"), pos);
|
||||
Button->SetForegroundColour(*wxRED);
|
||||
Button = new wxButton( this, ID_LAYER_CANCEL, _( "Cancel" ), pos );
|
||||
Button->SetForegroundColour( *wxRED );
|
||||
|
||||
/* Redimensionnement de la boite de dialogue: */
|
||||
pos.x += Button->GetSize().x + 10;
|
||||
SetSize(-1, -1, pos.x , yy + 35);
|
||||
SetSize( -1, -1, pos.x, yy + 35 );
|
||||
}
|
||||
|
||||
|
||||
/***************************************************************/
|
||||
void WinEDA_SelLayerPairFrame::Sel_Layer(wxCommandEvent& event)
|
||||
void WinEDA_SelLayerPairFrame::Sel_Layer( wxCommandEvent& event )
|
||||
/***************************************************************/
|
||||
{
|
||||
PCB_SCREEN * screen = (PCB_SCREEN *) m_Parent->m_CurrentScreen;
|
||||
PCB_SCREEN* screen = (PCB_SCREEN*) m_Parent->m_CurrentScreen;
|
||||
|
||||
screen->m_Route_Layer_TOP = m_LayerId[m_LayerListTOP->GetSelection()];
|
||||
screen->m_Route_Layer_BOTTOM = m_LayerId[m_LayerListBOTTOM->GetSelection()];
|
||||
EndModal(0);
|
||||
EndModal( 0 );
|
||||
}
|
||||
|
||||
|
||||
/***************************************************************/
|
||||
void WinEDA_SelLayerPairFrame::Cancel(wxCommandEvent& event)
|
||||
void WinEDA_SelLayerPairFrame::Cancel( wxCommandEvent& event )
|
||||
/***************************************************************/
|
||||
{
|
||||
EndModal(-1);
|
||||
EndModal( -1 );
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
/****************************/
|
||||
/* affichage des empreintes */
|
||||
/****************************/
|
||||
/****************************/
|
||||
/* affichage des empreintes */
|
||||
/****************************/
|
||||
|
||||
#include "fctsys.h"
|
||||
#include "gr_basic.h"
|
||||
|
@ -12,51 +12,57 @@
|
|||
|
||||
#define Pad_fill (Pad_Fill_Item.State == RUN)
|
||||
|
||||
static void Pad_Surbrillance(WinEDA_DrawPanel * panel, wxDC * DC, MODULE * Module, int NetCode);
|
||||
static void Pad_Surbrillance( WinEDA_DrawPanel* panel, wxDC* DC, MODULE* Module, int NetCode );
|
||||
|
||||
/* variables locales : */
|
||||
static int draw_mode ;
|
||||
static int draw_mode;
|
||||
|
||||
|
||||
/*********************************************************/
|
||||
void WinEDA_PcbFrame::Liste_Equipot(wxCommandEvent & event)
|
||||
void WinEDA_PcbFrame::Liste_Equipot( wxCommandEvent& event )
|
||||
/*********************************************************/
|
||||
|
||||
/* Display a filtered list of equipot names
|
||||
if an equipot is selected the corresponding tracks and pads are highlighted
|
||||
*/
|
||||
* if an equipot is selected the corresponding tracks and pads are highlighted
|
||||
*/
|
||||
{
|
||||
EQUIPOT * Equipot ;
|
||||
wxString msg;
|
||||
WinEDA_TextFrame * List;
|
||||
int ii, jj;
|
||||
EQUIPOT* Equipot;
|
||||
wxString msg;
|
||||
WinEDA_TextFrame* List;
|
||||
int ii, jj;
|
||||
|
||||
msg = wxT("*");
|
||||
Get_Message(_("Filter for net names:"),msg, this);
|
||||
if ( msg.IsEmpty() ) return;
|
||||
msg = wxT( "*" );
|
||||
Get_Message( _( "Filter for net names:" ), msg, this );
|
||||
if( msg.IsEmpty() )
|
||||
return;
|
||||
|
||||
List = new WinEDA_TextFrame(this, _("List Nets") );
|
||||
List = new WinEDA_TextFrame( this, _( "List Nets" ) );
|
||||
|
||||
Equipot = (EQUIPOT*) m_Pcb->m_Equipots;
|
||||
for ( ; Equipot != NULL; Equipot = (EQUIPOT*)Equipot->Pnext )
|
||||
for( ; Equipot != NULL; Equipot = (EQUIPOT*) Equipot->Pnext )
|
||||
{
|
||||
wxString Line;
|
||||
/* calcul adr relative du nom de la pastille reference de la piste */
|
||||
if( ! WildCompareString(msg, Equipot->m_Netname, FALSE ) ) continue ;
|
||||
if( !WildCompareString( msg, Equipot->m_Netname, FALSE ) )
|
||||
continue;
|
||||
|
||||
Line.Printf( wxT("net_code = %3.3d [%.16s] "),Equipot->m_NetCode,
|
||||
Equipot->m_Netname.GetData());
|
||||
List->Append(Line);
|
||||
Line.Printf( wxT( "net_code = %3.3d [%.16s] " ), Equipot->m_NetCode,
|
||||
Equipot->m_Netname.GetData() );
|
||||
List->Append( Line );
|
||||
}
|
||||
ii = List->ShowModal(); List->Destroy();
|
||||
if (ii < 0) return;
|
||||
|
||||
/* Recherche du numero de net rellement selectionné */
|
||||
ii = List->ShowModal(); List->Destroy();
|
||||
if( ii < 0 )
|
||||
return;
|
||||
|
||||
/* Recherche du numero de net rellement selectionn<6E>*/
|
||||
Equipot = (EQUIPOT*) m_Pcb->m_Equipots;
|
||||
for ( jj = 0; Equipot != NULL; Equipot = (EQUIPOT*)Equipot->Pnext )
|
||||
for( jj = 0; Equipot != NULL; Equipot = (EQUIPOT*) Equipot->Pnext )
|
||||
{
|
||||
/* calcul adr relative du nom de la pastille reference de la piste */
|
||||
if( ! WildCompareString(msg, Equipot->m_Netname, FALSE) ) continue ;
|
||||
if ( ii == jj )
|
||||
if( !WildCompareString( msg, Equipot->m_Netname, FALSE ) )
|
||||
continue;
|
||||
if( ii == jj )
|
||||
{
|
||||
ii = Equipot->m_NetCode;
|
||||
break;
|
||||
|
@ -64,41 +70,44 @@ int ii, jj;
|
|||
jj++;
|
||||
}
|
||||
|
||||
wxClientDC dc( DrawPanel );
|
||||
|
||||
wxClientDC dc(DrawPanel);
|
||||
DrawPanel->PrepareGraphicContext(&dc);
|
||||
DrawPanel->PrepareGraphicContext( &dc );
|
||||
|
||||
if(g_HightLigt_Status) Hight_Light(&dc);
|
||||
if( g_HightLigt_Status )
|
||||
Hight_Light( &dc );
|
||||
g_HightLigth_NetCode = ii;
|
||||
Hight_Light(&dc);
|
||||
Hight_Light( &dc );
|
||||
}
|
||||
|
||||
|
||||
/**************************************************/
|
||||
int WinEDA_PcbFrame::Select_High_Light(wxDC * DC)
|
||||
int WinEDA_PcbFrame::Select_High_Light( wxDC* DC )
|
||||
/**************************************************/
|
||||
/* Localise track ou pad et met en surbrillance le net correspondant
|
||||
Retourne le netcode, ou -1 si pas de net localisé */
|
||||
{
|
||||
TRACK * pt_piste;
|
||||
D_PAD* pt_pad ;
|
||||
int masquelayer = g_TabOneLayerMask[GetScreen()->m_Active_Layer];
|
||||
int code = -1;
|
||||
|
||||
if ( g_HightLigt_Status ) Hight_Light(DC);
|
||||
pt_piste = Locate_Pistes(m_Pcb->m_Track, masquelayer, CURSEUR_OFF_GRILLE);
|
||||
if ( pt_piste)
|
||||
/* Localise track ou pad et met en surbrillance le net correspondant
|
||||
* Retourne le netcode, ou -1 si pas de net localis<EFBFBD>*/
|
||||
{
|
||||
TRACK* pt_piste;
|
||||
D_PAD* pt_pad;
|
||||
int masquelayer = g_TabOneLayerMask[GetScreen()->m_Active_Layer];
|
||||
int code = -1;
|
||||
|
||||
if( g_HightLigt_Status )
|
||||
Hight_Light( DC );
|
||||
pt_piste = Locate_Pistes( m_Pcb->m_Track, masquelayer, CURSEUR_OFF_GRILLE );
|
||||
if( pt_piste )
|
||||
{
|
||||
code = g_HightLigth_NetCode = pt_piste->m_NetCode;
|
||||
Hight_Light(DC);
|
||||
Hight_Light( DC );
|
||||
}
|
||||
else
|
||||
{
|
||||
pt_pad = Locate_Any_Pad(m_Pcb, CURSEUR_OFF_GRILLE);
|
||||
pt_pad = Locate_Any_Pad( m_Pcb, CURSEUR_OFF_GRILLE );
|
||||
if( pt_pad != NULL )
|
||||
{
|
||||
code = g_HightLigth_NetCode = pt_pad->m_NetCode ;
|
||||
Hight_Light(DC) ;
|
||||
code = g_HightLigth_NetCode = pt_pad->m_NetCode;
|
||||
Hight_Light( DC );
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -107,65 +116,67 @@ int code = -1;
|
|||
|
||||
|
||||
/*******************************************/
|
||||
void WinEDA_PcbFrame::Hight_Light(wxDC * DC)
|
||||
void WinEDA_PcbFrame::Hight_Light( wxDC* DC )
|
||||
/*******************************************/
|
||||
|
||||
/*
|
||||
fonction d'appel de Surbrillance a partir du menu
|
||||
Met ou supprime la surbrillance d'un net pointe par la souris
|
||||
*/
|
||||
* fonction d'appel de Surbrillance a partir du menu
|
||||
* Met ou supprime la surbrillance d'un net pointe par la souris
|
||||
*/
|
||||
{
|
||||
g_HightLigt_Status = !g_HightLigt_Status;
|
||||
DrawHightLight( DC, g_HightLigth_NetCode) ;
|
||||
DrawHightLight( DC, g_HightLigth_NetCode );
|
||||
}
|
||||
|
||||
|
||||
/****************************************************************/
|
||||
void WinEDA_PcbFrame::DrawHightLight( wxDC* DC, int NetCode )
|
||||
/****************************************************************/
|
||||
|
||||
/****************************************************************/
|
||||
void WinEDA_PcbFrame::DrawHightLight(wxDC * DC, int NetCode)
|
||||
/****************************************************************/
|
||||
/* Turn On or OFF the HightLight for trcak and pads with the netcode "NetCode'
|
||||
*/
|
||||
*/
|
||||
{
|
||||
TRACK * pts ;
|
||||
MODULE * Module;
|
||||
TRACK* pts;
|
||||
MODULE* Module;
|
||||
|
||||
if(g_HightLigt_Status ) draw_mode = GR_SURBRILL | GR_OR;
|
||||
else draw_mode = GR_AND | GR_SURBRILL;
|
||||
if( g_HightLigt_Status )
|
||||
draw_mode = GR_SURBRILL | GR_OR;
|
||||
else
|
||||
draw_mode = GR_AND | GR_SURBRILL;
|
||||
|
||||
Module = m_Pcb->m_Modules;
|
||||
|
||||
/* Redraw pads */
|
||||
for( ; Module != NULL; Module = (MODULE*) Module->Pnext )
|
||||
{
|
||||
Pad_Surbrillance(DrawPanel, DC, Module, NetCode) ;
|
||||
Pad_Surbrillance( DrawPanel, DC, Module, NetCode );
|
||||
}
|
||||
|
||||
/* Redraw track and vias: */
|
||||
for ( pts = m_Pcb->m_Track; pts != NULL; pts = (TRACK*) pts->Pnext)
|
||||
for( pts = m_Pcb->m_Track; pts != NULL; pts = (TRACK*) pts->Pnext )
|
||||
{
|
||||
if( pts->m_NetCode == NetCode )
|
||||
{
|
||||
pts->Draw(DrawPanel, DC, draw_mode);
|
||||
pts->Draw( DrawPanel, DC, draw_mode );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/*******************************************************/
|
||||
static void Pad_Surbrillance(WinEDA_DrawPanel * panel,
|
||||
wxDC * DC, MODULE * Module, int NetCode)
|
||||
static void Pad_Surbrillance( WinEDA_DrawPanel* panel,
|
||||
wxDC* DC, MODULE* Module, int NetCode )
|
||||
/*******************************************************/
|
||||
/* Mise en Surbrillance des Pads */
|
||||
{
|
||||
D_PAD * pt_pad ;
|
||||
D_PAD* pt_pad;
|
||||
|
||||
/* trace des pastilles */
|
||||
for(pt_pad = Module->m_Pads; pt_pad != NULL; pt_pad = (D_PAD*)pt_pad->Pnext)
|
||||
for( pt_pad = Module->m_Pads; pt_pad != NULL; pt_pad = (D_PAD*) pt_pad->Pnext )
|
||||
{
|
||||
if ( pt_pad->m_NetCode == NetCode )
|
||||
if( pt_pad->m_NetCode == NetCode )
|
||||
{
|
||||
pt_pad->Draw(panel, DC, wxPoint(0,0),draw_mode);
|
||||
pt_pad->Draw( panel, DC, wxPoint( 0, 0 ), draw_mode );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -51,7 +51,7 @@
|
|||
|
||||
/* Data to build the layer pair indicator button */
|
||||
static wxBitmap* LayerPairBitmap = NULL;
|
||||
static char s_BitmapLayerIcon[16][16] = {
|
||||
static const char s_BitmapLayerIcon[16][16] = {
|
||||
// 0 = draw pixel with active layer color
|
||||
// 1 = draw pixel with top layer color (top/bottom layer used in autoroute and place via)
|
||||
// 2 = draw pixel with bottom layer color
|
||||
|
|
1035
pcbnew/zones.cpp
1035
pcbnew/zones.cpp
File diff suppressed because it is too large
Load Diff
Loading…
Reference in New Issue