425 lines
14 KiB
C
425 lines
14 KiB
C
/***************************************/
|
|
/* prototypage des fonctions de PCBNEW */
|
|
/***************************************/
|
|
|
|
#ifndef PROTO_H
|
|
#define PROTO_H
|
|
|
|
/***************/
|
|
/* PAD_CONNECT.CPP */
|
|
/***************/
|
|
LISTE_PAD* CreateSortedPadListByXCoord( BOARD* pcb );
|
|
|
|
/* Create a sorted list of pointers to pads.
|
|
* This list is sorted by X ccordinate value.
|
|
* The list must be freed bu user
|
|
*/
|
|
|
|
/**************/
|
|
/* PCBCFG.CPP */
|
|
/**************/
|
|
bool Read_Config( const wxString& project_name );
|
|
bool Read_Hotkey_Config( WinEDA_DrawFrame* frame, bool verbose );
|
|
|
|
/***************/
|
|
/* TRACEPCB.CPP */
|
|
/***************/
|
|
void Trace_MirePcb( WinEDA_DrawPanel* panel, wxDC* DC, MIREPCB* MirePcb, int mode_color );
|
|
|
|
/***************/
|
|
/* TRPISTE.CPP */
|
|
/***************/
|
|
|
|
void Trace_Pistes( WinEDA_DrawPanel* panel, BOARD* Pcb, wxDC* DC, int drawmode );
|
|
void Trace_Une_Piste( WinEDA_DrawPanel* panel,
|
|
wxDC* DC,
|
|
TRACK* pt_start_piste,
|
|
int nbsegment,
|
|
int mode_color );
|
|
|
|
/* routine de trace de n segments consecutifs en memoire.
|
|
* Utile pour monter une piste en cours de trace car les segments de cette
|
|
* piste sont alors contigus en memoire
|
|
* Parametres :
|
|
* pt_start_piste = adresse de depart de la liste des segments
|
|
* nbsegment = nombre de segments a tracer
|
|
* mode_color = mode ( GrXOR, GrOR..)
|
|
* ATTENTION:
|
|
* le point de depart d'une piste suivante DOIT exister: peut etre
|
|
* donc mis a 0 avant appel a la routine si la piste a tracer est la derniere
|
|
*/
|
|
|
|
void Trace_DrawSegmentPcb( WinEDA_DrawPanel* panel,
|
|
wxDC* DC,
|
|
DRAWSEGMENT* PtDrawSegment,
|
|
int mode_color );
|
|
|
|
|
|
/****************/
|
|
/* TRACEMOD.C : */
|
|
/****************/
|
|
void Trace_Pads_Only( WinEDA_DrawPanel* panel, wxDC* DC, MODULE* Module, int ox, int oy,
|
|
int MasqueLayer, int mode_color );
|
|
|
|
/* Trace les pads d'un module en mode SKETCH.
|
|
* Utilisee pour afficher les pastilles d'un module lorsque celui ci n'est
|
|
* pas affiche par les options d'affichage des Modules
|
|
* Les pads affiches doivent apparaitre sur les couches donnees par
|
|
* MasqueLayer */
|
|
|
|
/****************/
|
|
/* LOCATE.CPP : */
|
|
/****************/
|
|
|
|
MODULE* ReturnModule( BOARD* Pcb, const wxString& name );
|
|
|
|
/* Recherche d'une empreinte par son nom */
|
|
|
|
D_PAD* ReturnPad( MODULE* Module, const wxString& name );
|
|
|
|
/* Recherche d'un pad par son nom, pour le module Module */
|
|
|
|
TRACK* Locate_Via( BOARD* Pcb, const wxPoint& pos, int layer = -1 );
|
|
|
|
TRACK* Locate_Via_Area( BOARD* Pcb, const wxPoint& pos, int layer = -1 );
|
|
|
|
TRACK* Fast_Locate_Via( TRACK* start_adr, TRACK* end_adr,
|
|
const wxPoint& pos, int masquelayer );
|
|
|
|
/* Localise la via de centre le point x,y , sur les couches donnees
|
|
* par masquelayer.
|
|
* la recherche se fait de l'adresse start_adr a end_adr(non comprise)
|
|
*/
|
|
|
|
TRACK* Fast_Locate_Piste( TRACK* start_adr, TRACK* end_adr,
|
|
const wxPoint& ref_pos, int masquelayer );
|
|
|
|
/* Localiste le segment dont une extremite coincide avec le point x,y
|
|
* sur les couches donnees par masquelayer
|
|
* la recherche se fait de l'adresse start_adr a end_adr(non comprise)
|
|
*/
|
|
|
|
TRACK* Locate_Piste_Connectee( TRACK* ptr_piste, TRACK* pt_base,
|
|
TRACK* pt_lim, int extr );
|
|
|
|
/* recherche le segment connecte au segment pointe par
|
|
* ptr_piste:
|
|
* si int = START, le point de debut du segment est utilise
|
|
* si int = END, le point de fin du segment est utilise
|
|
* La recherche ne se fait que sur les EXTREMITES des segments
|
|
* La recherche est limitee a la zone [pt_base...]pt_lim.
|
|
*/
|
|
|
|
TRACK* Locate_Pistes( TRACK* start_adresse, int layer, int typeloc );
|
|
TRACK* Locate_Pistes( TRACK* start_adresse,
|
|
const wxPoint& ref_pos, int layer );
|
|
|
|
/*
|
|
* 1 - routine de localisation du segment de piste pointe par la souris.
|
|
* 2 - routine de localisation du segment de piste pointe par le point
|
|
* ref_pX , ref_pY.
|
|
*
|
|
* Si layer < 0 la couche n'est pas testee.
|
|
*
|
|
* La recherche commence a l'adresse start_adresse
|
|
*/
|
|
|
|
D_PAD* Locate_Pad_Connecte( BOARD* Pcb, TRACK* ptr_segment, int extr );
|
|
|
|
/* localisation de la pastille connectee au debut ou fin du segment
|
|
* entree : pointeur sur le segment, et flag = START ou END
|
|
* retourne:
|
|
* un pointeur sur la description de la pastille si localisation
|
|
* pointeur NULL si pastille non trouvee */
|
|
|
|
D_PAD* Locate_Any_Pad( BOARD* Pcb, int typeloc, bool OnlyCurrentLayer = FALSE );
|
|
D_PAD* Locate_Any_Pad( BOARD* Pcb, const wxPoint& ref_pos, bool OnlyCurrentLayer = FALSE );
|
|
|
|
/*
|
|
* localisation de la pastille pointee par la coordonnee ref_pX,,ref_pY, ou
|
|
* par la souris, recherche faite sur toutes les empreintes.
|
|
* entree : (OVERHAEAD)
|
|
* - coord souris (Curseur_X et Curseur_Y)
|
|
* ou ref_pX, ref_pY
|
|
* retourne:
|
|
* pointeur sur la description de la pastille si localisation
|
|
* pointeur NULL si pastille non trouvee
|
|
*/
|
|
|
|
D_PAD* Locate_Pads( MODULE* Module, int layer, int typeloc );
|
|
D_PAD* Locate_Pads( MODULE* Module, const wxPoint& ref_pos, int layer );
|
|
|
|
/* localisation de la pastille pointee par la coordonnee ref_pX,,ref_pY, ou
|
|
* par la souris, concernant l'empreinte en cours.
|
|
* entree :
|
|
* - parametres generaux de l'empreinte mise a jous par caract()
|
|
* - layer = couche ou doit se trouver la pastille
|
|
* (si layer < 0 ) la couche est ignoree)
|
|
* retourne:
|
|
* un pointeur sur la description de la pastille si localisation
|
|
* pointeur NULL si pastille non trouvee
|
|
*/
|
|
|
|
MODULE* Locate_Prefered_Module( BOARD* Pcb, int typeloc );
|
|
|
|
/* localisation d'une empreinte par son rectangle d'encadrement */
|
|
|
|
D_PAD* Locate_Pads( MODULE* Module, int typeloc );
|
|
|
|
/* localisation de la pastille pointee par la souris, concernant l'empreinte
|
|
* Module.
|
|
* entree :
|
|
* - parametres generaux de l'empreinte mise a jous par caract()
|
|
* retourne:
|
|
* un pointeur sur la description de la pastille si localisation
|
|
* pointeur NULL si pastille non trouvee
|
|
*/
|
|
|
|
TRACK* Locate_Pistes( TRACK* start_adresse, int typeloc );
|
|
|
|
/* routine de localisation du segment de piste pointe par la souris
|
|
* La recherche commence a l'adresse start_adresse */
|
|
|
|
DRAWSEGMENT* Locate_Segment_Pcb( BOARD* Pcb, int LayerSearch, int typeloc );
|
|
|
|
|
|
D_PAD* Fast_Locate_Pad_Connecte( BOARD* Pcb, const wxPoint& ref_pos, int layer );
|
|
|
|
/* Routine cherchant le pad contenant le point px,py, sur la couche layer
|
|
* ( extremite de piste )
|
|
* La liste des pads doit deja exister.
|
|
*
|
|
* retourne :
|
|
* NULL si pas de pad localise.
|
|
* pointeur sur le pad correspondante si pad trouve
|
|
* (bonne position ET bonne couche). */
|
|
|
|
|
|
TRACK* Locate_Zone( TRACK* start_adresse, int layer, int typeloc );
|
|
TRACK* Locate_Zone( TRACK* start_adresse, const wxPoint& ref_pos, int layer );
|
|
|
|
/*
|
|
* 1 - routine de localisation du segment de zone pointe par la souris.
|
|
* 2 - routine de localisation du segment de zone pointe par le point
|
|
* ref_pX , ref_pY.r
|
|
*
|
|
* Si layer == -1 , le tst de la couche n'est pas fait
|
|
*
|
|
* La recherche commence a l'adresse start_adresse
|
|
*/
|
|
|
|
|
|
/*************/
|
|
/* MODULES.C */
|
|
/*************/
|
|
int ChangeSideNumLayer( int oldlayer );
|
|
void DrawModuleOutlines( WinEDA_DrawPanel* panel, wxDC* DC, MODULE* module );
|
|
void Montre_Position_Empreinte( WinEDA_DrawPanel* panel, wxDC* DC, bool erase );
|
|
|
|
|
|
/* LOADCMP.C : */
|
|
MODULE* Load_Module_From_Library( WinEDA_DrawFrame* frame, wxDC* DC );
|
|
|
|
/****************/
|
|
/* EDITRACK.C : */
|
|
/****************/
|
|
|
|
TRACK* LocateIntrusion( TRACK* start, int net, int width );
|
|
|
|
void ShowNewTrackWhenMovingCursor( WinEDA_DrawPanel* panel,
|
|
wxDC* DC, bool erase );
|
|
|
|
void Calcule_Coord_Extremite_45( int ox, int oy, int* fx, int* fy );
|
|
|
|
/* determine les coord fx et fy d'un segment
|
|
* pour avoir un segment oriente a 0, 90 ou 45 degres, selon position
|
|
* du point d'origine (ox,oy) et de la souris */
|
|
|
|
/*****************/
|
|
/* TRACK.CPP : */
|
|
/*****************/
|
|
TRACK* Marque_Une_Piste( WinEDA_BasePcbFrame* frame, wxDC* DC,
|
|
TRACK* pt_segm, int* nb_segm, int flagcolor );
|
|
|
|
/* Routine de Marquage de 1 piste, a partir du segment pointe par pt_segm.
|
|
* le segment pointe est marque puis les segments adjacents
|
|
* jusqu'a un pad ou un point de jonction de plus de 2 segments
|
|
* le marquage est la mise a 1 du bit BUSY du parametre .status
|
|
* Les segments sont ensuite reclasses pour etre contigus en memoire
|
|
* Retourne:
|
|
* adresse du 1er segment de la chaine creee
|
|
* nombre de segments */
|
|
|
|
int ReturnEndsTrack( TRACK* RefTrack, int NbSegm,
|
|
TRACK** StartTrack, TRACK** EndTrack );
|
|
|
|
/* Calcule les coordonnes des extremites d'une piste
|
|
* retourne 1 si OK, 0 si piste bouclee
|
|
* Les coord sont retournees en StartTrack->ox, oy
|
|
* et EndTrack->fx, fy si OK
|
|
* Les segments sont supposes chaines de facon consecutive */
|
|
|
|
void ListSetState( EDA_BaseStruct* Start, int Nbitem, int State, int onoff );
|
|
|
|
/* Met a jour le membre .state d'une chaine de structures */
|
|
|
|
/*****************/
|
|
/* EDITEDGE.CPP : */
|
|
/*****************/
|
|
void Trace_1_Edge( WinEDA_DrawPanel* panel,
|
|
wxDC* DC,
|
|
TRACK* start_edge,
|
|
int nbpoint,
|
|
int mode_color );
|
|
|
|
/************/
|
|
/* DRC.CPP : */
|
|
/************/
|
|
int Drc( WinEDA_BasePcbFrame* frame, wxDC* DC,
|
|
TRACK* pt_segment, TRACK* pt_start_buffer, int show_err );
|
|
|
|
/* Teste le segment pointe par pt_segment:
|
|
* debsegment = adresse du segment a tester
|
|
* pt_start_buffer = adresse de la zone piste
|
|
* show_err (flag) si 0 pas d'affichage d'erreur sur ecran
|
|
* retourne :
|
|
* BAD_DRC (1) si Violation DRC
|
|
* OK_DRC (0) si OK */
|
|
|
|
|
|
/*****************/
|
|
/* TR_MODIF.CPP : */
|
|
/*****************/
|
|
|
|
int EraseOldTrack( WinEDA_BasePcbFrame* frame, BOARD* Pcb, wxDC* DC,
|
|
TRACK* pt_new_track, int nbptnewpiste );
|
|
void Modif_Auto_Route( TRACK* pt_debut_new_piste );
|
|
|
|
|
|
/**************/
|
|
/* CLEAN.CPP : */
|
|
/**************/
|
|
|
|
int Netliste_Controle_piste( WinEDA_PcbFrame* frame, wxDC* DC, int affiche );
|
|
|
|
/* Supprime les segments mal connectes, cad interconnectant des segments
|
|
* de net_code differents */
|
|
|
|
|
|
/************/
|
|
/* BLOCK.CPP */
|
|
/************/
|
|
|
|
void Block_Affiche( int on_off ); /*
|
|
* routine de trace du cadre d'un Block en cours de delimitation
|
|
* Si on_off = 0 : effacement du cadre
|
|
* Si on_off = 1 : affichage du cadre */
|
|
|
|
void Trace_Block( WinEDA_DrawPanel* panel, wxDC* DC, int ox, int oy, int fx, int fy, int color );
|
|
|
|
/* Routine de trace d'un rectangle symbolisant un block
|
|
* (toujours en mode XOR) */
|
|
|
|
/***************/
|
|
/* PLOT_RTN.CPP */
|
|
/***************/
|
|
|
|
void Affiche_erreur( int nb_err );
|
|
|
|
|
|
/*****************************************************************/
|
|
/* AFFICHE.CPP: (Fonctions d'affichage de messages, parametres... */
|
|
/*****************************************************************/
|
|
void Affiche_Infos_Equipot( int netcode, WinEDA_BasePcbFrame* frame );
|
|
|
|
/************/
|
|
/* ZONES.CPP */
|
|
/************/
|
|
int Propagation( WinEDA_PcbFrame* frame );
|
|
|
|
/***************/
|
|
/* ATTRIBUT.CPP */
|
|
/***************/
|
|
|
|
void MasqueAttributs( int* masque_set, int* masque_clr );
|
|
|
|
/* Calcule les attributs a remettre a 0 (masque_clr) et a mettre a 1
|
|
* (masque_set), en fonction des options d'attributs
|
|
*
|
|
* ces attributs sont normalement le membre .flags de la structure TRACK
|
|
* les pointeurs NULLs sont acceptes
|
|
*/
|
|
|
|
|
|
/***************/
|
|
/* DUPLTRAC.CPP */
|
|
/***************/
|
|
|
|
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
|
|
*/
|
|
|
|
|
|
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'ntersection des 2 axes des segments ptsegm et
|
|
* refsegm
|
|
* retourne la valeur exacte de pX et pY
|
|
*/
|
|
|
|
/****************/
|
|
/* CONTROLE.CPP */
|
|
/****************/
|
|
void RemoteCommand( const char* cmdline );
|
|
bool Project( wxPoint* res, wxPoint on_grid, const TRACK* track );
|
|
|
|
|
|
/***************/
|
|
/* AUTOPLACE.CPP */
|
|
/***************/
|
|
int Calcule_Encadrement_EdgeBoard();
|
|
|
|
/***************/
|
|
/* AUTOROUT.CPP */
|
|
/***************/
|
|
void DisplayBoard( WinEDA_DrawPanel* panel, wxDC* DC ); /* routine de Debug */
|
|
|
|
|
|
/**************/
|
|
/* NETLIST.CPP */
|
|
/**************/
|
|
MODULE* ListAndSelectModuleName( COMMAND* Cmd );
|
|
|
|
/* liste les noms des modules du PCB
|
|
* Retourne un pointeur sur le module selectionne
|
|
* ( ou NULL si pas de selection ) */
|
|
|
|
/***************/
|
|
/* LAY2PLOT.CPP */
|
|
/***************/
|
|
|
|
/*****************/
|
|
/* SET_COLOR.CPP */
|
|
/*****************/
|
|
void DisplayColorSetupFrame( WinEDA_DrawFrame* parent,
|
|
const wxPoint& framepos );
|
|
|
|
|
|
#endif /* #define PROTO_H */
|