/**************************************/ /* PCBNEW.H : headers */ /**************************************/ #ifndef PCBNEW_H #define PCBNEW_H #ifndef eda_global #define eda_global extern #endif #include "pcbstruct.h" #include "macros.h" #define U_PCB (PCB_INTERNAL_UNIT / EESCHEMA_INTERNAL_UNIT) /* Flag used in locate functions * the locate ref point is the on grid cursor or the off grid mouse cursor */ #define CURSEUR_ON_GRILLE (0 << 0) #define CURSEUR_OFF_GRILLE (1 << 0) #define IGNORE_LOCKED (1 << 1) ///< if module is locked, do not select for single module operation #define MATCH_LAYER (1 << 2) ///< if module not on current layer, do not select #define VISIBLE_ONLY (1 << 3) ///< if module not on a visible layer, do not select #define START 0 /* Flag used in locale routines */ #define END 1 #define DIM_ANCRE_MODULE 3 /* Anchor size (footprint centre) */ #define DIM_ANCRE_TEXTE 2 /* Anchor size (Text centre) */ #define TEXTS_MIN_SIZE 50 // Min size in pcbnew units value (50 * 0.0001 mils) #define TEXTS_MAX_SIZE 100000 // Min size in pcbnew units value (1 inch) ) #define TEXTS_MAX_WIDTH 5000 // Max width in pcbnew units value (0.5 inches) /* Used in Zoom menu */ #define ZOOM_PLUS -1 #define ZOOM_MOINS -2 #define ZOOM_AUTO -3 #define ZOOM_CENTER -4 #define ZOOM_REDRAW -5 /* Flag to force the SKETCH mode to display items (.flags member) */ #define FORCE_SKETCH (DRAG | EDIT ) /* Flags used in read board file */ #define APPEND_PCB 1 /* used to append the new board to the existing board */ #define NEWPCB 0 /* used for normal load file */ eda_global wxArrayString g_LibName_List; // library list to load #define UNDELETE_STACK_SIZE 10 eda_global BOARD_ITEM* g_UnDeleteStack[UNDELETE_STACK_SIZE]; // Linked list of deleted items eda_global int g_UnDeleteStackPtr; eda_global bool g_ShowGrid #ifdef MAIN = TRUE #endif ; /* Look up Table for conversion one layer number -> one bit layer mask: */ eda_global int g_TabOneLayerMask[LAYER_COUNT] #if defined MAIN = { 0x00000001, 0x00000002, 0x00000004, 0x00000008, 0x00000010, 0x00000020, 0x00000040, 0x00000080, 0x00000100, 0x00000200, 0x00000400, 0x00000800, 0x00001000, 0x00002000, 0x00004000, 0x00008000, 0x00010000, 0x00020000, 0x00040000, 0x00080000, 0x00100000, 0x00200000, 0x00400000, 0x00800000, 0x01000000, 0x02000000, 0x04000000, 0x08000000, 0x10000000, 0x20000000, 0x40000000, 0x80000000 } #endif ; /* Look up Table for conversion copper layer count -> general copper layer mask: */ eda_global int g_TabAllCopperLayerMask[NB_COPPER_LAYERS] #if defined MAIN = { 0x0001, 0x8001, 0x8003, 0x8007, 0x800F, 0x801F, 0x803F, 0x807F, 0x80FF, 0x81FF, 0x83FF, 0x87FF, 0x8FFF, 0x9FFF, 0xCFFF, 0xFFFF }; #endif ; /* variables */ extern wxString g_Main_Title; eda_global bool Drc_On #ifdef MAIN = TRUE #endif ; eda_global bool g_AutoDeleteOldTrack /* Allows automatic deletion of the old track after * creation of a new track */ #ifdef MAIN = TRUE #endif ; eda_global bool g_No_Via_Route; eda_global bool g_Drag_Pistes_On; eda_global bool g_Show_Ratsnest; eda_global bool g_Show_Module_Ratsnest; eda_global bool g_Show_Pads_Module_in_Move #ifdef MAIN = TRUE #endif ; eda_global bool g_Raccord_45_Auto #ifdef MAIN = TRUE #endif ; eda_global bool g_ShowIsolDuringCreateTrack; /* Show clearance while track creation */ /*********************************/ /* Display options for board items */ /*********************************/ eda_global DISPLAY_OPTIONS DisplayOpt; /** * Function IsModuleLayerVisible * expects either of the two layers on which a module can reside, and returns * whether that layer is visible. * @param layer One of the two allowed layers for modules: CMP_N or COPPER_LAYER_N * @return bool - true if the layer is visible, else false. */ bool inline IsModuleLayerVisible( int layer ) { if( layer==CMP_N ) return DisplayOpt.Show_Modules_Cmp; else if( layer==COPPER_LAYER_N ) return DisplayOpt.Show_Modules_Cu; else return true; } eda_global bool Track_45_Only; /* Flag pour limiter l'inclinaison * pistes a 45 degres seulement */ eda_global bool Segments_45_Only; /* Flag pour limiter l'inclinaison * edge pcb a 45 degres seulement */ eda_global wxString PcbExtBuffer // Board file extension #ifdef MAIN ( wxT( ".brd" ) ) #endif ; eda_global wxString g_SaveFileName // File Name for periodic saving #ifdef MAIN ( wxT( "$savepcb" ) ) #endif ; eda_global wxString NetExtBuffer // Netlist file extension #ifdef MAIN ( wxT( ".net" ) ) #endif ; eda_global wxString NetCmpExtBuffer // cmp/footprint association file extension #ifdef MAIN ( wxT( ".cmp" ) ) #endif ; // Gestion de la liste des librairies eda_global wxString LibExtBuffer #ifdef MAIN ( wxT( ".mod" ) ) #endif ; eda_global wxString g_Shapes3DExtBuffer //3D shape file extension #ifdef MAIN ( wxT( ".wrl" ) ) #endif ; eda_global int g_CurrentVersionPCB #ifdef MAIN = 1 #endif ; /* A buffer used in some computations (will be removed in next cleanup code, do not use) */ #define BUFMEMSIZE 256000 /* buffer size (in bytes) */ eda_global char* buf_work; /* pointeur sur le buffer de travail */ eda_global char* adr_lowmem; /* adresse de base memoire de calcul disponible*/ eda_global char* adr_himem; /* adresse haute limite de la memoire disponible*/ eda_global char* adr_max; /* adresse haute maxi utilisee pour la memoire */ /* variables generales */ eda_global int g_TimeOut; // Timer for automatic saving eda_global int g_SaveTime; // Time for next saving /* Variables used in footprint handling */ extern int Angle_Rot_Module; eda_global wxSize ModuleTextSize; /* Default footprint texts size */ eda_global int ModuleTextWidth; eda_global int ModuleSegmentWidth; eda_global int Texte_Module_Type; /***********************/ /* pistes , vias , pads*/ /***********************/ #define L_MIN_DESSIN 1 /* Min width segments to allow draws with tickness */ // Current designe settings: eda_global class EDA_BoardDesignSettings g_DesignSettings; // Default values for pad editions #ifndef GERBVIEW #ifdef MAIN D_PAD g_Pad_Master( (MODULE*) NULL ); #else extern D_PAD g_Pad_Master; #endif #endif /* Layer pair for auto routing and switch layers by hotkey */ eda_global int Route_Layer_TOP; eda_global int Route_Layer_BOTTOM; eda_global int g_MaxLinksShowed; // Mxa count links showed in routing eda_global bool g_TwoSegmentTrackBuild // FALSE = 1 segment build, TRUE = 2 45 deg segm build #ifdef MAIN = TRUE #endif ; /* How to handle magnetic pads & tracks: feature to move the pcb cursor on a pad center / track length */ enum MagneticPadOptionValues { no_effect, capture_cursor_in_track_tool, capture_always }; eda_global int g_MagneticPadOption #ifdef MAIN = capture_cursor_in_track_tool #endif ; eda_global int g_MagneticTrackOption #ifdef MAIN = capture_cursor_in_track_tool #endif ; /* Variables to handle hightlight nets */ eda_global bool g_HightLigt_Status; eda_global int g_HightLigth_NetCode #ifdef MAIN = -1 #endif ; /** * Used in track creation, a list of track segments currently being created, * with the newest track at the end of the list, sorted by new-ness. e.g. use * TRACK->Back() to get the next older track, TRACK->Next() to get the next * newer track. */ eda_global DLIST g_CurrentTrackList; #define g_CurrentTrackSegment g_CurrentTrackList.GetLast() ///< most recently created segment #define g_FirstTrackSegment g_CurrentTrackList.GetFirst() ///< first segment created eda_global wxString g_ViaType_Name[4] #if defined MAIN = { _( "??? Via" ), // Not used yet _( "Micro Via" ), // from external layer (TOP or BOTTOM) from the near neightbour inner layer only _( "Blind/Buried Via" ), // from inner or external to inner or external layer (no restriction) _( "Through Via" ) // Usual via (from TOP to BOTTOM layer only ) } #endif ; /* couleurs des autres items des empreintes */ #if defined MAIN int g_PadCMPColor = RED; int g_PadCUColor = GREEN; int g_AnchorColor = BLUE; int g_ModuleTextCMPColor = LIGHTGRAY; int g_ModuleTextCUColor = MAGENTA; int g_ModuleTextNOVColor = DARKGRAY; #else eda_global int g_ModuleTextCMPColor; eda_global int g_ModuleTextCUColor; eda_global int g_ModuleTextNOVColor; eda_global int g_AnchorColor; eda_global int g_PadCUColor; eda_global int g_PadCMPColor; #endif eda_global PCB_SCREEN* ScreenPcb; /* Ecran principal */ eda_global BOARD* g_ModuleEditor_Pcb; /* board used to edit footprints (used by modedit)*/ eda_global PCB_SCREEN* ScreenModule; /* Ecran de l'editeur de modules */ /****************************************************/ /* Gestion du deplacement des modules et des pistes */ /****************************************************/ eda_global wxPoint g_Offset_Module; /* Offset de trace du modul en depl */ /* Pad editing */ eda_global wxString g_Current_PadName; // Last used pad name (pad num) #endif /* PCBNEW_H */