small bugs fixed. Added: Support for microvias (see changelog)

This commit is contained in:
CHARRAS 2008-01-12 20:31:56 +00:00
parent a5e2913ded
commit e3a3d16af8
35 changed files with 2700 additions and 1983 deletions

View File

@ -250,7 +250,8 @@ double zpos, height;
int color; int color;
r = via->m_Width * g_Parm_3D_Visu.m_BoardScale / 2; r = via->m_Width * g_Parm_3D_Visu.m_BoardScale / 2;
hole = g_Parm_3D_Visu.m_BoardSettings->m_ViaDrill * g_Parm_3D_Visu.m_BoardScale / 2; hole = via->GetDrillValue();
hole *= g_Parm_3D_Visu.m_BoardScale / 2;
x = via->m_Start.x * g_Parm_3D_Visu.m_BoardScale; x = via->m_Start.x * g_Parm_3D_Visu.m_BoardScale;
y = via->m_Start.y * g_Parm_3D_Visu.m_BoardScale; y = via->m_Start.y * g_Parm_3D_Visu.m_BoardScale;

View File

@ -4,6 +4,16 @@ Started 2007-June-11
Please add newer entries at the top, list the date and your name with Please add newer entries at the top, list the date and your name with
email address. email address.
2007-Dec-12 UPDATE Jean-Pierre Charras <jean-pierre.charras@inpg.fr>
================================================================================
+eeschema:
missing footprints in export netlist (bug 1867321)
Affected: PadsPcb converter did not list all footprints
+pcbnew:
fixed: memory not freeed in block copy (minor bug)
Support for micro vias (generation of drill files not finished)
2008-jan-06 UPDATE Jean-Pierre Charras <jean-pierre.charras@inpg.fr> 2008-jan-06 UPDATE Jean-Pierre Charras <jean-pierre.charras@inpg.fr>
================================================================================ ================================================================================
+pcbnew: +pcbnew:

View File

@ -250,7 +250,8 @@ void Write_GENERIC_NetList( WinEDA_SchematicFrame* frame,
/* Create netlist module section */ /* Create netlist module section */
fprintf( tmpfile, "$BeginComponentList\n" ); fprintf( tmpfile, "$BeginComponentList\n" );
for( CurrScreen = ScreenSch; CurrScreen != NULL; CurrScreen = (BASE_SCREEN*) CurrScreen->Pnext ) EDA_ScreenList ScreenList( NULL );
for( CurrScreen = ScreenList.GetFirst(); CurrScreen != NULL; CurrScreen = ScreenList.GetNext() )
{ {
for( DrawList = CurrScreen->EEDrawList; DrawList != NULL; DrawList = DrawList->Pnext ) for( DrawList = CurrScreen->EEDrawList; DrawList != NULL; DrawList = DrawList->Pnext )
{ {

View File

@ -181,7 +181,7 @@ static int SavePcbFormatAscii( WinEDA_GerberFrame* frame, FILE* aFile,
newtrack->SetLayer( 0x0F ); // Layers are 0 to 15 (Cu/Cmp) newtrack->SetLayer( 0x0F ); // Layers are 0 to 15 (Cu/Cmp)
newtrack->m_Drill = -1; newtrack->SetDrillDefault();
// Compute the via position from track position ( Via position is the // Compute the via position from track position ( Via position is the
// position of the middle of the track segment ) // position of the middle of the track segment )

View File

@ -577,6 +577,7 @@ enum main_id {
ID_POPUP_PCB_EDIT_COTATION, ID_POPUP_PCB_EDIT_COTATION,
ID_POPUP_PCB_END_TRACK, ID_POPUP_PCB_END_TRACK,
ID_POPUP_PCB_PLACE_VIA, ID_POPUP_PCB_PLACE_VIA,
ID_POPUP_PCB_PLACE_MICROVIA,
ID_POPUP_PCB_IMPORT_PAD_SETTINGS, ID_POPUP_PCB_IMPORT_PAD_SETTINGS,
ID_POPUP_PCB_EXPORT_PAD_SETTINGS, ID_POPUP_PCB_EXPORT_PAD_SETTINGS,

View File

@ -150,7 +150,10 @@ class EDA_BoardDesignSettings
public: public:
int m_CopperLayerCount; // Number of copper layers for this design int m_CopperLayerCount; // Number of copper layers for this design
int m_ViaDrill; // via drill (for the entire board) int m_ViaDrill; // via drill (for the entire board)
int m_MicroViaDrill; // micro via drill (for the entire board)
int m_CurrentViaSize; // Current via size int m_CurrentViaSize; // Current via size
int m_CurrentMicroViaSize; // Current micro via size
bool m_MicroViasAllowed; // true to allow micro vias
int m_ViaSizeHistory[HIST0RY_NUMBER]; // Last HIST0RY_NUMBER used via sizes int m_ViaSizeHistory[HIST0RY_NUMBER]; // Last HIST0RY_NUMBER used via sizes
int m_CurrentViaType; // via type (BLIND, TROUGHT ...), bits 1 and 2 (not 0 and 1) int m_CurrentViaType; // via type (BLIND, TROUGHT ...), bits 1 and 2 (not 0 and 1)
int m_CurrentTrackWidth; // current track width int m_CurrentTrackWidth; // current track width
@ -222,6 +225,14 @@ public:
* @return BOARD_ITEM* - the one selected, or NULL. * @return BOARD_ITEM* - the one selected, or NULL.
*/ */
BOARD_ITEM* GetCurItem() const { return (BOARD_ITEM*) BASE_SCREEN::GetCurItem(); } BOARD_ITEM* GetCurItem() const { return (BOARD_ITEM*) BASE_SCREEN::GetCurItem(); }
/* Return true if a microvia can be put on board
* A microvia ia a small via restricted to 2 near neighbour layers
* because its is hole is made by laser which can penetrate only one layer
* It is mainly used to connect BGA to the first inner layer
* And it is allowed from an external layer to the first inner layer
*/
bool IsMicroViaAcceptable(void);
}; };
/**********************************/ /**********************************/

Binary file not shown.

File diff suppressed because it is too large Load Diff

View File

@ -110,6 +110,12 @@ void BOARD::UnLink()
void BOARD::Add( BOARD_ITEM* aBoardItem, int aControl ) void BOARD::Add( BOARD_ITEM* aBoardItem, int aControl )
{ {
if ( aBoardItem == NULL )
{
wxFAIL_MSG( wxT("BOARD::Add() param error: aBoardItem NULL") );
return;
}
switch( aBoardItem->Type() ) switch( aBoardItem->Type() )
{ {
// this one uses a vector // this one uses a vector

View File

@ -199,10 +199,10 @@ wxString BOARD_ITEM::MenuText( const BOARD* aPcb ) const
text << _( "Via" ) << wxT( " " ) << via->ShowWidth(); text << _( "Via" ) << wxT( " " ) << via->ShowWidth();
int shape = via->Shape(); int shape = via->Shape();
if( shape == VIA_BURIED ) if( shape == VIA_BLIND_BURIED )
text << wxT(" ") << _( "Blind" ); text << wxT(" ") << _( "Blind/Buried" );
else if( shape == VIA_BLIND ) else if( shape == VIA_MICROVIA )
text << wxT(" ") << _("Buried"); text << wxT(" ") << _("Micro Via");
// else say nothing about normal (through) vias // else say nothing about normal (through) vias
net = aPcb->FindNet( via->GetNet() ); net = aPcb->FindNet( via->GetNet() );

View File

@ -65,6 +65,8 @@ wxString DRC_ITEM::GetErrorText() const
return wxString( _("Pad near pad") ); return wxString( _("Pad near pad") );
case DRCE_VIA_HOLE_BIGGER: case DRCE_VIA_HOLE_BIGGER:
return wxString( _("Via hole > diameter")); return wxString( _("Via hole > diameter"));
case DRCE_MICRO_VIA_INCORRECT_LAYER_PAIR:
return wxString( _("Micro Via: incorrect layer pairs (not adjacent)"));
case COPPERAREA_INSIDE_COPPERAREA: case COPPERAREA_INSIDE_COPPERAREA:
return wxString( _("Copper area inside copper area")); return wxString( _("Copper area inside copper area"));
case COPPERAREA_CLOSE_TO_COPPERAREA: case COPPERAREA_CLOSE_TO_COPPERAREA:

View File

@ -68,6 +68,16 @@ MARKER::MARKER( int aErrorCode, const wxPoint& aMarkerPos,
bText, bPos ); bText, bPos );
} }
MARKER::MARKER( int aErrorCode, const wxPoint& aMarkerPos,
const wxString& aText, const wxPoint& aPos ) :
BOARD_ITEM( NULL, TYPEMARKER ) // parent set during BOARD::Add()
{
init();
SetData( aErrorCode, aMarkerPos,
aText, aPos );
}
/* Effacement memoire de la structure */ /* Effacement memoire de la structure */
MARKER::~MARKER() MARKER::~MARKER()
@ -91,6 +101,17 @@ void MARKER::SetData( int aErrorCode, const wxPoint& aMarkerPos,
} }
void MARKER::SetData( int aErrorCode, const wxPoint& aMarkerPos,
const wxString& aText, const wxPoint& aPos )
{
m_drc.SetData( aErrorCode, aMarkerPos,
aText, aPos );
// @todo: switch on error code to set error code specific color, and possibly bitmap.
m_Color = WHITE;
}
/* supprime du chainage la structure Struct /* supprime du chainage la structure Struct
* les structures arrieres et avant sont chainees directement * les structures arrieres et avant sont chainees directement
*/ */
@ -122,7 +143,8 @@ void MARKER::Display_Infos( WinEDA_DrawFrame* frame )
txtA << DRC_ITEM::ShowCoord( rpt.GetPointA() ) << wxT(": ") << rpt.GetTextA(); txtA << DRC_ITEM::ShowCoord( rpt.GetPointA() ) << wxT(": ") << rpt.GetTextA();
wxString txtB; wxString txtB;
txtB << DRC_ITEM::ShowCoord( rpt.GetPointB() ) << wxT(": ") << rpt.GetTextB(); if ( rpt.AsSecondItem() )
txtB << DRC_ITEM::ShowCoord( rpt.GetPointB() ) << wxT(": ") << rpt.GetTextB();
text_pos = 25; text_pos = 25;
Affiche_1_Parametre( frame, text_pos, txtA, txtB, DARKBROWN ); Affiche_1_Parametre( frame, text_pos, txtA, txtB, DARKBROWN );

View File

@ -37,8 +37,18 @@ public:
MARKER( int aErrorCode, const wxPoint& aMarkerPos, MARKER( int aErrorCode, const wxPoint& aMarkerPos,
const wxString& aText, const wxPoint& aPos, const wxString& aText, const wxPoint& aPos,
const wxString& bText, const wxPoint& bPos ); const wxString& bText, const wxPoint& bPos );
/**
~MARKER(); * Constructor
* @param aErrorCode The categorizing identifier for an error
* @param aMarkerPos The position of the MARKER on the BOARD
* @param aText Text describing the object
* @param aPos The position of the object
*/
MARKER( int aErrorCode, const wxPoint& aMarkerPos,
const wxString& aText, const wxPoint& aPos );
~MARKER();
void UnLink(); void UnLink();
void Draw( WinEDA_DrawPanel* panel, wxDC* DC, int DrawMode ); void Draw( WinEDA_DrawPanel* panel, wxDC* DC, int DrawMode );
@ -78,6 +88,17 @@ public:
const wxString& aText, const wxPoint& aPos, const wxString& aText, const wxPoint& aPos,
const wxString& bText, const wxPoint& bPos ); const wxString& bText, const wxPoint& bPos );
/**
* Function SetData
* fills in all the reportable data associated with a MARKER.
* @param aErrorCode The categorizing identifier for an error
* @param aMarkerPos The position of the MARKER on the BOARD
* @param aText Text describing the object
* @param aPos The position of the object
*/
void SetData( int aErrorCode, const wxPoint& aMarkerPos,
const wxString& aText, const wxPoint& aPos );
/** /**
* Function GetReporter * Function GetReporter

View File

@ -52,7 +52,7 @@ TRACK::TRACK( BOARD_ITEM* StructFather, KICAD_T idtype ) :
start = end = NULL; start = end = NULL;
SetNet( 0 ); SetNet( 0 );
SetSubNet( 0 ); SetSubNet( 0 );
m_Drill = -1; SetDrillDefault();
m_Param = 0; m_Param = 0;
} }
@ -131,6 +131,24 @@ TRACK* TRACK::Copy() const
} }
/**
* Function GetDrillValue
* calculate the drill value for vias (m-Drill if > 0, or default drill value for the board
* @return real drill_value
*/
int TRACK::GetDrillValue(void)
{
if ( Type() != TYPEVIA ) return 0;
if ( m_Drill >= 0 ) return m_Drill;
if ( m_Shape == VIA_MICROVIA )
return g_DesignSettings.m_MicroViaDrill;
return g_DesignSettings.m_ViaDrill;
}
/***********************/ /***********************/
bool TRACK::IsNull() bool TRACK::IsNull()
/***********************/ /***********************/
@ -253,7 +271,7 @@ int TRACK::ReturnMaskLayer()
if( via_type == VIA_THROUGH ) if( via_type == VIA_THROUGH )
return ALL_CU_LAYERS; return ALL_CU_LAYERS;
// VIA_BLIND or VIA_BURIED: // VIA_BLIND_BURIED or VIA_MICRVIA:
int bottom_layer, top_layer; int bottom_layer, top_layer;
@ -522,33 +540,6 @@ TRACK* TRACK::GetEndNetCode( int NetCode )
} }
#if 0 // replaced by Save()
/********************************************/
bool TRACK::WriteTrackDescr( FILE* File )
/********************************************/
/* write a via description on file
*/
{
int type = 0;
if( Type() == TYPEVIA )
type = 1;
if( GetState( DELETED ) )
return FALSE;
fprintf( File, "Po %d %d %d %d %d %d %d\n", m_Shape,
m_Start.x, m_Start.y, m_End.x, m_End.y, m_Width, m_Drill );
fprintf( File, "De %d %d %d %lX %X\n",
m_Layer, type, GetNet(),
m_TimeStamp, ReturnStatus() );
return TRUE;
}
#endif
bool TRACK::Save( FILE* aFile ) const bool TRACK::Save( FILE* aFile ) const
{ {
int type = 0; int type = 0;
@ -631,21 +622,18 @@ void TRACK::Draw( WinEDA_DrawPanel* panel, wxDC* DC, int draw_mode )
GRCircle( &panel->m_ClipBox, DC, m_Start.x, m_Start.y, rayon, color ); GRCircle( &panel->m_ClipBox, DC, m_Start.x, m_Start.y, rayon, color );
if( rayon > (4 * zoom) ) if( rayon > (4 * zoom) )
{ {
int drill_rayon, inner_rayon = rayon - (2 * zoom); int drill_rayon = GetDrillValue() / 2;
int inner_rayon = rayon - (2 * zoom);
GRCircle( &panel->m_ClipBox, DC, m_Start.x, m_Start.y, GRCircle( &panel->m_ClipBox, DC, m_Start.x, m_Start.y,
inner_rayon, color ); inner_rayon, color );
// Draw the via hole if the display option allows it // Draw the via hole if the display option allows it
if( DisplayOpt.m_DisplayViaMode != VIA_HOLE_NOT_SHOW ) if( DisplayOpt.m_DisplayViaMode != VIA_HOLE_NOT_SHOW )
{ {
if( (DisplayOpt.m_DisplayViaMode == ALL_VIA_HOLE_SHOW) if( (DisplayOpt.m_DisplayViaMode == ALL_VIA_HOLE_SHOW) || // Display all drill holes requested
|| ( m_Drill > 0 ) ) ( (drill_rayon > 0 ) && ! IsDrillDefault() ) ) // Or Display non default holes requested
{ {
if( m_Drill > 0 ) if( drill_rayon < inner_rayon ) // We can show the via hole
drill_rayon = m_Drill / 2;
else
drill_rayon = g_DesignSettings.m_ViaDrill / 2;
if( drill_rayon < inner_rayon ) // We can show the via hole
{ {
GRCircle( &panel->m_ClipBox, DC, m_Start.x, m_Start.y, GRCircle( &panel->m_ClipBox, DC, m_Start.x, m_Start.y,
drill_rayon, color ); drill_rayon, color );
@ -656,6 +644,33 @@ void TRACK::Draw( WinEDA_DrawPanel* panel, wxDC* DC, int draw_mode )
if( DisplayOpt.DisplayTrackIsol ) if( DisplayOpt.DisplayTrackIsol )
GRCircle( &panel->m_ClipBox, DC, m_Start.x, m_Start.y, GRCircle( &panel->m_ClipBox, DC, m_Start.x, m_Start.y,
rayon + g_DesignSettings.m_TrackClearence, color ); rayon + g_DesignSettings.m_TrackClearence, color );
// for Micro Vias, draw a partial cross :
// X on component layer, or + on copper layer
// (so we can see 2 superimposed microvias ):
if ( Shape() == VIA_MICROVIA )
{
int ax, ay, bx, by;
if ( IsOnLayer(COPPER_LAYER_N) )
{
ax = rayon; ay = 0;
bx = drill_rayon; by = 0;
}
else
{
ax = ay = (rayon * 707) / 1000;
bx = by = (drill_rayon * 707) / 1000;
}
/* lines | or \ */
GRLine( &panel->m_ClipBox, DC, m_Start.x - ax , m_Start.y - ay,
m_Start.x - bx , m_Start.y - by, 0, color );
GRLine( &panel->m_ClipBox, DC, m_Start.x + bx , m_Start.y + by,
m_Start.x + ax , m_Start.y + ay, 0, color );
/* lines - or / */
GRLine( &panel->m_ClipBox, DC, m_Start.x + ay, m_Start.y - ax ,
m_Start.x + by, m_Start.y - bx, 0, color );
GRLine( &panel->m_ClipBox, DC, m_Start.x - by, m_Start.y + bx ,
m_Start.x - ay, m_Start.y + ax, 0, color );
}
} }
return; return;
} }
@ -813,8 +828,7 @@ void TRACK::Display_Infos( WinEDA_DrawFrame* frame )
{ {
Affiche_1_Parametre( frame, text_pos, _( "Diam" ), msg, DARKCYAN ); Affiche_1_Parametre( frame, text_pos, _( "Diam" ), msg, DARKCYAN );
int drill_value = m_Drill >= 0 ? int drill_value = GetDrillValue();
m_Drill : g_DesignSettings.m_ViaDrill;
valeur_param( (unsigned) drill_value, msg ); valeur_param( (unsigned) drill_value, msg );
@ -909,7 +923,7 @@ void TRACK::Show( int nestLevel, std::ostream& os )
" layer=\"" << m_Layer << '"' << " layer=\"" << m_Layer << '"' <<
" width=\"" << m_Width << '"' << " width=\"" << m_Width << '"' <<
// " drill=\"" << m_Drill << '"' << // " drill=\"" << GetDrillValue() << '"' <<
" netcode=\"" << GetNet() << "\">" << " netcode=\"" << GetNet() << "\">" <<
"<start" << m_Start << "/>" << "<start" << m_Start << "/>" <<
"<end" << m_End << "/>"; "<end" << m_End << "/>";
@ -935,12 +949,12 @@ void SEGVIA::Show( int nestLevel, std::ostream& os )
cp = "through"; cp = "through";
break; break;
case VIA_BURIED: case VIA_BLIND_BURIED:
cp = "blind"; cp = "blind/buried";
break; break;
case VIA_BLIND: case VIA_MICROVIA:
cp = "buried"; cp = "micro via";
break; break;
default: default:
@ -959,7 +973,7 @@ void SEGVIA::Show( int nestLevel, std::ostream& os )
" layers=\"" << ReturnPcbLayerName( topLayer ).Trim().mb_str() << "," " layers=\"" << ReturnPcbLayerName( topLayer ).Trim().mb_str() << ","
<< ReturnPcbLayerName( botLayer ).Trim().mb_str() << '"' << << ReturnPcbLayerName( botLayer ).Trim().mb_str() << '"' <<
" width=\"" << m_Width << '"' << " width=\"" << m_Width << '"' <<
" drill=\"" << m_Drill << '"' << " drill=\"" << GetDrillValue() << '"' <<
" netcode=\"" << GetNet() << "\">" << " netcode=\"" << GetNet() << "\">" <<
"<pos" << m_Start << "/>"; "<pos" << m_Start << "/>";

View File

@ -9,10 +9,10 @@
// Via attributes (m_Shape parmeter) // Via attributes (m_Shape parmeter)
#define VIA_THROUGH 3 /* Always a through hole via */ #define VIA_THROUGH 3 /* Always a through hole via */
#define VIA_BURIED 2 /* this via can be on internal layers */ #define VIA_BLIND_BURIED 2 /* this via can be on internal layers */
#define VIA_BLIND 1 /* this via which connect from internal layers to an external layer */ #define VIA_MICROVIA 1 /* this via which connect from an external layer to the near neightbour internal layer */
#define VIA_NOT_DEFINED 0 /* reserved (unused) */ #define VIA_NOT_DEFINED 0 /* not yet used */
/***/ /***/
@ -22,10 +22,12 @@ public:
int m_Width; // 0 = line, > 0 = tracks, bus ... int m_Width; // 0 = line, > 0 = tracks, bus ...
wxPoint m_Start; // Line start point wxPoint m_Start; // Line start point
wxPoint m_End; // Line end point wxPoint m_End; // Line end point
int m_Shape; // vias: shape and type, Track = shape.. int m_Shape; // vias: shape and type, Track = shape..
int m_Drill; // for vias: via drill (- 1 for default value)
protected:
int m_Drill; // for vias: via drill (- 1 for default value)
public:
BOARD_ITEM* start; // pointers to a connected item (pad or track) BOARD_ITEM* start; // pointers to a connected item (pad or track)
BOARD_ITEM* end; BOARD_ITEM* end;
@ -64,20 +66,20 @@ public:
{ {
return m_Start; // it had to be start or end. return m_Start; // it had to be start or end.
} }
/* supprime du chainage la structure Struct */ /* supprime du chainage la structure Struct */
void UnLink(); void UnLink();
/** /**
* Function Save * Function Save
* writes the data structures for this object out to a FILE in "*.brd" format. * writes the data structures for this object out to a FILE in "*.brd" format.
* @param aFile The FILE to write to. * @param aFile The FILE to write to.
* @return bool - true if success writing else false. * @return bool - true if success writing else false.
*/ */
bool Save( FILE* aFile ) const; bool Save( FILE* aFile ) const;
/** /**
* Function Insert * Function Insert
* inserts a single TRACK, SEGVIA or SEGZONE, or a list of such, * inserts a single TRACK, SEGVIA or SEGZONE, or a list of such,
@ -90,13 +92,13 @@ public:
* @param InsertPoint See above * @param InsertPoint See above
*/ */
void Insert( BOARD* aPcb, BOARD_ITEM* InsertPoint ); void Insert( BOARD* aPcb, BOARD_ITEM* InsertPoint );
/** /**
* Function GetBestInsertPoint * Function GetBestInsertPoint
* searches the "best" insertion point within the track linked list. * searches the "best" insertion point within the track linked list.
* The best point is the begging of the corresponding net code section. * The best point is the begging of the corresponding net code section.
* (The BOARD::m_Track and BOARD::m_Zone lists are sorted by netcode.) * (The BOARD::m_Track and BOARD::m_Zone lists are sorted by netcode.)
* @param aPcb The BOARD to search for the insertion point. * @param aPcb The BOARD to search for the insertion point.
* @return TRACK* - the item found in the linked list (or NULL if no track) * @return TRACK* - the item found in the linked list (or NULL if no track)
*/ */
TRACK* GetBestInsertPoint( BOARD* aPcb ); TRACK* GetBestInsertPoint( BOARD* aPcb );
@ -134,8 +136,9 @@ public:
*/ */
double GetLength() const double GetLength() const
{ {
int dx = m_Start.x - m_End.x; int dx = m_Start.x - m_End.x;
int dy = m_Start.y - m_End.y; int dy = m_Start.y - m_End.y;
return hypot( dx, dy ); return hypot( dx, dy );
} }
@ -145,6 +148,32 @@ public:
/* divers */ /* divers */
int Shape() const { return m_Shape & 0xFF; } int Shape() const { return m_Shape & 0xFF; }
/**
* Function SetDrillValue
* Set the drill value for vias
* @param drill_value = new drill value
*/
void SetDrillValue(int drill_value) { m_Drill = drill_value; }
/**
* Function SetDrillDefault
* Set the drill value for vias at default value (-1)
*/
void SetDrillDefault(void) { m_Drill = -1; }
/**
* Function IsDrillDefault
* @return true if the drill value is default value (-1)
*/
bool IsDrillDefault(void) { return m_Drill < 0; }
/**
* Function GetDrillValue
* calculate the drill value for vias (m-Drill if > 0, or default drill value for the board
* @return real drill_value
*/
int GetDrillValue(void);
/** /**
* Function ReturnMaskLayer * Function ReturnMaskLayer
@ -203,13 +232,13 @@ public:
/** /**
* Function HitTest (overlayed) * Function HitTest (overlayed)
* tests if the given wxRect intersect this object. * tests if the given wxRect intersect this object.
* For now, an ending point must be inside this rect. * For now, an ending point must be inside this rect.
* @param refPos A wxPoint to test * @param refPos A wxPoint to test
* @return bool - true if a hit, else false * @return bool - true if a hit, else false
*/ */
bool HitTest( EDA_Rect& refArea ); bool HitTest( EDA_Rect& refArea );
/** /**
* Function GetClass * Function GetClass
* returns the class name. * returns the class name.
* @return wxString * @return wxString
@ -284,12 +313,14 @@ public:
* returns the position of this object. * returns the position of this object.
* @return const wxPoint& - The position of this object. * @return const wxPoint& - The position of this object.
*/ */
wxPoint& GetPosition() wxPoint& GetPosition()
{ {
return m_Start; return m_Start;
} }
void SetPosition( const wxPoint& aPoint ) { m_Start=aPoint; m_End=aPoint; }
void SetPosition( const wxPoint& aPoint ) { m_Start = aPoint; m_End = aPoint; }
/** /**
* Function GetClass * Function GetClass
* returns the class name. * returns the class name.

View File

@ -19,6 +19,8 @@
#include "trigo.h" #include "trigo.h"
/**************************************************************/ /**************************************************************/
void EDA_BaseStruct::Place( WinEDA_DrawFrame* frame, wxDC* DC ) void EDA_BaseStruct::Place( WinEDA_DrawFrame* frame, wxDC* DC )
/**************************************************************/ /**************************************************************/
@ -301,6 +303,29 @@ void PCB_SCREEN::Init()
} }
/* Return true if a microvia can be put on board
* A microvia ia a small via restricted to 2 near neighbour layers
* because its is hole is made by laser which can penetrate only one layer
* It is mainly used to connect BGA to the first inner layer
* And it is allowed from an external layer to the first inner layer
*/
bool PCB_SCREEN::IsMicroViaAcceptable(void)
{
int copperlayercnt = g_DesignSettings.m_CopperLayerCount;
if ( ! g_DesignSettings.m_MicroViasAllowed )
return false; // Obvious..
if ( copperlayercnt < 4 )
return false; // Only on multilayer boards..
if ( (m_Active_Layer == COPPER_LAYER_N) ||
(m_Active_Layer == LAYER_CMP_N) ||
(m_Active_Layer == g_DesignSettings.m_CopperLayerCount - 2) ||
(m_Active_Layer == LAYER_N_2) )
return true;
return false;
}
/*************************/ /*************************/
/* class DISPLAY_OPTIONS */ /* class DISPLAY_OPTIONS */
/*************************/ /*************************/
@ -381,8 +406,9 @@ EDA_BoardDesignSettings::EDA_BoardDesignSettings()
m_LayerColor[ii] = default_layer_color[ii]; m_LayerColor[ii] = default_layer_color[ii];
// Layer colors (tracks and graphic items) // Layer colors (tracks and graphic items)
m_ViaColor[VIA_BLIND] = CYAN; m_ViaColor[VIA_NOT_DEFINED] = DARKGRAY;
m_ViaColor[VIA_BURIED] = BROWN; m_ViaColor[VIA_MICROVIA] = CYAN;
m_ViaColor[VIA_BLIND_BURIED] = BROWN;
m_ViaColor[VIA_THROUGH] = WHITE; m_ViaColor[VIA_THROUGH] = WHITE;
m_ModuleTextCMPColor = LIGHTGRAY; // Text module color for modules on the COMPONENT layer m_ModuleTextCMPColor = LIGHTGRAY; // Text module color for modules on the COMPONENT layer
m_ModuleTextCUColor = MAGENTA; // Text module color for modules on the COPPER layer m_ModuleTextCUColor = MAGENTA; // Text module color for modules on the COPPER layer

View File

@ -49,6 +49,8 @@ BEGIN_EVENT_TABLE( WinEDA_PcbTracksDialog, wxDialog )
////@begin WinEDA_PcbTracksDialog event table entries ////@begin WinEDA_PcbTracksDialog event table entries
EVT_INIT_DIALOG( WinEDA_PcbTracksDialog::OnInitDialog ) EVT_INIT_DIALOG( WinEDA_PcbTracksDialog::OnInitDialog )
EVT_CHECKBOX( ID_CHECKBOX_ALLOWS_MICROVIA, WinEDA_PcbTracksDialog::OnCheckboxAllowsMicroviaClick )
EVT_BUTTON( wxID_OK, WinEDA_PcbTracksDialog::OnOkClick ) EVT_BUTTON( wxID_OK, WinEDA_PcbTracksDialog::OnOkClick )
EVT_BUTTON( wxID_CANCEL, WinEDA_PcbTracksDialog::OnCancelClick ) EVT_BUTTON( wxID_CANCEL, WinEDA_PcbTracksDialog::OnCancelClick )
@ -86,6 +88,11 @@ bool WinEDA_PcbTracksDialog::Create( wxWindow* parent, wxWindowID id, const wxSt
m_ViaAltDrillValueTitle = NULL; m_ViaAltDrillValueTitle = NULL;
m_OptCustomViaDrill = NULL; m_OptCustomViaDrill = NULL;
m_OptViaType = NULL; m_OptViaType = NULL;
m_MicroViaSizeTitle = NULL;
m_MicroViaSizeCtrl = NULL;
m_MicroViaDrillTitle = NULL;
m_MicroViaDrillCtrl = NULL;
m_AllowMicroViaCtrl = NULL;
m_TrackWidthTitle = NULL; m_TrackWidthTitle = NULL;
m_OptTrackWidth = NULL; m_OptTrackWidth = NULL;
m_TrackClearanceTitle = NULL; m_TrackClearanceTitle = NULL;
@ -117,80 +124,101 @@ void WinEDA_PcbTracksDialog::CreateControls()
SetFont(*g_DialogFont); SetFont(*g_DialogFont);
////@begin WinEDA_PcbTracksDialog content construction ////@begin WinEDA_PcbTracksDialog content construction
// Generated by DialogBlocks, Sun 25 Nov 2007 15:41:58 CST (unregistered) // Generated by DialogBlocks, 11/01/2008 21:51:48 (unregistered)
WinEDA_PcbTracksDialog* itemDialog1 = this; WinEDA_PcbTracksDialog* itemDialog1 = this;
wxBoxSizer* itemBoxSizer2 = new wxBoxSizer(wxHORIZONTAL); wxBoxSizer* itemBoxSizer2 = new wxBoxSizer(wxHORIZONTAL);
itemDialog1->SetSizer(itemBoxSizer2); itemDialog1->SetSizer(itemBoxSizer2);
wxBoxSizer* itemBoxSizer3 = new wxBoxSizer(wxVERTICAL); wxStaticBox* itemStaticBoxSizer3Static = new wxStaticBox(itemDialog1, wxID_ANY, _("Vias:"));
itemBoxSizer2->Add(itemBoxSizer3, 0, wxGROW|wxALL, 5); wxStaticBoxSizer* itemStaticBoxSizer3 = new wxStaticBoxSizer(itemStaticBoxSizer3Static, wxVERTICAL);
itemBoxSizer2->Add(itemStaticBoxSizer3, 0, wxGROW|wxALL, 5);
m_ViaSizeTitle = new wxStaticText( itemDialog1, wxID_STATIC, _("Via Size"), wxDefaultPosition, wxDefaultSize, 0 ); m_ViaSizeTitle = new wxStaticText( itemDialog1, wxID_STATIC, _("Via Size"), wxDefaultPosition, wxDefaultSize, 0 );
itemBoxSizer3->Add(m_ViaSizeTitle, 0, wxALIGN_LEFT|wxLEFT|wxRIGHT|wxTOP|wxADJUST_MINSIZE, 5); itemStaticBoxSizer3->Add(m_ViaSizeTitle, 0, wxALIGN_LEFT|wxLEFT|wxRIGHT|wxTOP|wxADJUST_MINSIZE, 5);
m_OptViaSize = new wxTextCtrl( itemDialog1, ID_TEXTCTRL, _T(""), wxDefaultPosition, wxDefaultSize, 0 ); m_OptViaSize = new wxTextCtrl( itemDialog1, ID_TEXTCTRL, _T(""), wxDefaultPosition, wxDefaultSize, 0 );
itemBoxSizer3->Add(m_OptViaSize, 0, wxGROW|wxLEFT|wxRIGHT|wxBOTTOM, 5); itemStaticBoxSizer3->Add(m_OptViaSize, 0, wxGROW|wxLEFT|wxRIGHT|wxBOTTOM, 5);
m_ViaDefaultDrillValueTitle = new wxStaticText( itemDialog1, wxID_STATIC, _("Default Via Drill"), wxDefaultPosition, wxDefaultSize, 0 ); m_ViaDefaultDrillValueTitle = new wxStaticText( itemDialog1, wxID_STATIC, _("Default Via Drill"), wxDefaultPosition, wxDefaultSize, 0 );
itemBoxSizer3->Add(m_ViaDefaultDrillValueTitle, 0, wxALIGN_LEFT|wxLEFT|wxRIGHT|wxTOP|wxADJUST_MINSIZE, 5); itemStaticBoxSizer3->Add(m_ViaDefaultDrillValueTitle, 0, wxALIGN_LEFT|wxLEFT|wxRIGHT|wxTOP|wxADJUST_MINSIZE, 5);
m_OptViaDrill = new wxTextCtrl( itemDialog1, ID_TEXTCTRL1, _T(""), wxDefaultPosition, wxDefaultSize, 0 ); m_OptViaDrill = new wxTextCtrl( itemDialog1, ID_TEXTCTRL1, _T(""), wxDefaultPosition, wxDefaultSize, 0 );
itemBoxSizer3->Add(m_OptViaDrill, 0, wxGROW|wxLEFT|wxRIGHT|wxBOTTOM, 5); itemStaticBoxSizer3->Add(m_OptViaDrill, 0, wxGROW|wxLEFT|wxRIGHT|wxBOTTOM, 5);
m_ViaAltDrillValueTitle = new wxStaticText( itemDialog1, wxID_STATIC, _("Alternate Via Drill"), wxDefaultPosition, wxDefaultSize, 0 ); m_ViaAltDrillValueTitle = new wxStaticText( itemDialog1, wxID_STATIC, _("Alternate Via Drill"), wxDefaultPosition, wxDefaultSize, 0 );
itemBoxSizer3->Add(m_ViaAltDrillValueTitle, 0, wxALIGN_LEFT|wxLEFT|wxRIGHT|wxTOP|wxADJUST_MINSIZE, 5); itemStaticBoxSizer3->Add(m_ViaAltDrillValueTitle, 0, wxALIGN_LEFT|wxLEFT|wxRIGHT|wxTOP|wxADJUST_MINSIZE, 5);
m_OptCustomViaDrill = new wxTextCtrl( itemDialog1, ID_TEXTCTRL2, _T(""), wxDefaultPosition, wxDefaultSize, 0 ); m_OptCustomViaDrill = new wxTextCtrl( itemDialog1, ID_TEXTCTRL2, _T(""), wxDefaultPosition, wxDefaultSize, 0 );
itemBoxSizer3->Add(m_OptCustomViaDrill, 0, wxGROW|wxLEFT|wxRIGHT|wxBOTTOM, 5); itemStaticBoxSizer3->Add(m_OptCustomViaDrill, 0, wxGROW|wxLEFT|wxRIGHT|wxBOTTOM, 5);
itemBoxSizer3->Add(5, 5, 0, wxALIGN_CENTER_HORIZONTAL|wxALL, 5);
wxArrayString m_OptViaTypeStrings; wxArrayString m_OptViaTypeStrings;
m_OptViaTypeStrings.Add(_("Blind Via")); m_OptViaTypeStrings.Add(_("Through Via"));
m_OptViaTypeStrings.Add(_("Buried Via")); m_OptViaTypeStrings.Add(_("Blind or Buried Via "));
m_OptViaTypeStrings.Add(_("Standard Via")); m_OptViaType = new wxRadioBox( itemDialog1, ID_VIA_TYPE_SELECTION, _("Default Via Type"), wxDefaultPosition, wxDefaultSize, m_OptViaTypeStrings, 1, wxRA_SPECIFY_COLS );
m_OptViaType = new wxRadioBox( itemDialog1, ID_VIA_TYPE_SELECTION, _("Via Type"), wxDefaultPosition, wxDefaultSize, m_OptViaTypeStrings, 1, wxRA_SPECIFY_COLS );
m_OptViaType->SetSelection(0); m_OptViaType->SetSelection(0);
itemBoxSizer3->Add(m_OptViaType, 0, wxGROW|wxALL, 5); itemStaticBoxSizer3->Add(m_OptViaType, 0, wxGROW|wxALL, 5);
itemBoxSizer2->Add(5, 5, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5); wxStaticBox* itemStaticBoxSizer11Static = new wxStaticBox(itemDialog1, wxID_ANY, _("Micro Vias:"));
wxStaticBoxSizer* itemStaticBoxSizer11 = new wxStaticBoxSizer(itemStaticBoxSizer11Static, wxVERTICAL);
itemBoxSizer2->Add(itemStaticBoxSizer11, 0, wxGROW|wxALL, 5);
wxBoxSizer* itemBoxSizer13 = new wxBoxSizer(wxVERTICAL); m_MicroViaSizeTitle = new wxStaticText( itemDialog1, wxID_STATIC, _("Micro Via Size"), wxDefaultPosition, wxDefaultSize, 0 );
itemBoxSizer2->Add(itemBoxSizer13, 0, wxGROW|wxALL, 5); itemStaticBoxSizer11->Add(m_MicroViaSizeTitle, 0, wxGROW|wxLEFT|wxRIGHT|wxTOP, 5);
m_MicroViaSizeCtrl = new wxTextCtrl( itemDialog1, ID_TEXTCTRL7, _T(""), wxDefaultPosition, wxDefaultSize, 0 );
itemStaticBoxSizer11->Add(m_MicroViaSizeCtrl, 0, wxGROW|wxLEFT|wxRIGHT|wxBOTTOM, 5);
m_MicroViaDrillTitle = new wxStaticText( itemDialog1, wxID_STATIC, _("Micro Via Drill"), wxDefaultPosition, wxDefaultSize, 0 );
itemStaticBoxSizer11->Add(m_MicroViaDrillTitle, 0, wxGROW|wxLEFT|wxRIGHT|wxTOP, 5);
m_MicroViaDrillCtrl = new wxTextCtrl( itemDialog1, ID_TEXTCTRL6, _T(""), wxDefaultPosition, wxDefaultSize, 0 );
itemStaticBoxSizer11->Add(m_MicroViaDrillCtrl, 0, wxGROW|wxLEFT|wxRIGHT|wxBOTTOM, 5);
itemStaticBoxSizer11->Add(5, 5, 0, wxGROW|wxALL, 5);
m_AllowMicroViaCtrl = new wxCheckBox( itemDialog1, ID_CHECKBOX_ALLOWS_MICROVIA, _("Allows Micro Vias"), wxDefaultPosition, wxDefaultSize, 0 );
m_AllowMicroViaCtrl->SetValue(false);
m_AllowMicroViaCtrl->SetHelpText(_("Allows use of micro vias\nThey are very small vias only from an external copper layer to its near neightbour\n"));
if (WinEDA_PcbTracksDialog::ShowToolTips())
m_AllowMicroViaCtrl->SetToolTip(_("Allows use of micro vias\nThey are very small vias only from an external copper layer to its near neightbour\n"));
itemStaticBoxSizer11->Add(m_AllowMicroViaCtrl, 0, wxGROW|wxALL, 5);
wxBoxSizer* itemBoxSizer18 = new wxBoxSizer(wxVERTICAL);
itemBoxSizer2->Add(itemBoxSizer18, 0, wxGROW|wxALL, 5);
m_TrackWidthTitle = new wxStaticText( itemDialog1, wxID_STATIC, _("Track Width"), wxDefaultPosition, wxDefaultSize, 0 ); m_TrackWidthTitle = new wxStaticText( itemDialog1, wxID_STATIC, _("Track Width"), wxDefaultPosition, wxDefaultSize, 0 );
itemBoxSizer13->Add(m_TrackWidthTitle, 0, wxALIGN_LEFT|wxLEFT|wxRIGHT|wxTOP|wxADJUST_MINSIZE, 5); itemBoxSizer18->Add(m_TrackWidthTitle, 0, wxALIGN_LEFT|wxLEFT|wxRIGHT|wxTOP|wxADJUST_MINSIZE, 5);
m_OptTrackWidth = new wxTextCtrl( itemDialog1, ID_TEXTCTRL3, _T(""), wxDefaultPosition, wxDefaultSize, 0 ); m_OptTrackWidth = new wxTextCtrl( itemDialog1, ID_TEXTCTRL3, _T(""), wxDefaultPosition, wxDefaultSize, 0 );
itemBoxSizer13->Add(m_OptTrackWidth, 0, wxGROW|wxLEFT|wxRIGHT|wxBOTTOM, 5); itemBoxSizer18->Add(m_OptTrackWidth, 0, wxGROW|wxLEFT|wxRIGHT|wxBOTTOM, 5);
m_TrackClearanceTitle = new wxStaticText( itemDialog1, wxID_STATIC, _("Clearance"), wxDefaultPosition, wxDefaultSize, 0 ); m_TrackClearanceTitle = new wxStaticText( itemDialog1, wxID_STATIC, _("Clearance"), wxDefaultPosition, wxDefaultSize, 0 );
itemBoxSizer13->Add(m_TrackClearanceTitle, 0, wxALIGN_LEFT|wxLEFT|wxRIGHT|wxTOP|wxADJUST_MINSIZE, 5); itemBoxSizer18->Add(m_TrackClearanceTitle, 0, wxALIGN_LEFT|wxLEFT|wxRIGHT|wxTOP|wxADJUST_MINSIZE, 5);
m_OptTrackClearance = new wxTextCtrl( itemDialog1, ID_TEXTCTRL4, _T(""), wxDefaultPosition, wxDefaultSize, 0 ); m_OptTrackClearance = new wxTextCtrl( itemDialog1, ID_TEXTCTRL4, _T(""), wxDefaultPosition, wxDefaultSize, 0 );
itemBoxSizer13->Add(m_OptTrackClearance, 0, wxGROW|wxLEFT|wxRIGHT|wxBOTTOM, 5); itemBoxSizer18->Add(m_OptTrackClearance, 0, wxGROW|wxLEFT|wxRIGHT|wxBOTTOM, 5);
m_MaskClearanceTitle = new wxStaticText( itemDialog1, wxID_STATIC, _("Mask clearance"), wxDefaultPosition, wxDefaultSize, 0 ); m_MaskClearanceTitle = new wxStaticText( itemDialog1, wxID_STATIC, _("Mask clearance"), wxDefaultPosition, wxDefaultSize, 0 );
itemBoxSizer13->Add(m_MaskClearanceTitle, 0, wxALIGN_LEFT|wxLEFT|wxRIGHT|wxTOP|wxADJUST_MINSIZE, 5); itemBoxSizer18->Add(m_MaskClearanceTitle, 0, wxALIGN_LEFT|wxLEFT|wxRIGHT|wxTOP|wxADJUST_MINSIZE, 5);
m_OptMaskMargin = new wxTextCtrl( itemDialog1, ID_TEXTCTRL5, _T(""), wxDefaultPosition, wxDefaultSize, 0 ); m_OptMaskMargin = new wxTextCtrl( itemDialog1, ID_TEXTCTRL5, _T(""), wxDefaultPosition, wxDefaultSize, 0 );
itemBoxSizer13->Add(m_OptMaskMargin, 0, wxGROW|wxLEFT|wxRIGHT|wxBOTTOM, 5); itemBoxSizer18->Add(m_OptMaskMargin, 0, wxGROW|wxLEFT|wxRIGHT|wxBOTTOM, 5);
itemBoxSizer13->Add(5, 5, 0, wxALIGN_CENTER_HORIZONTAL|wxALL, 5); wxBoxSizer* itemBoxSizer25 = new wxBoxSizer(wxVERTICAL);
itemBoxSizer2->Add(itemBoxSizer25, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5);
wxBoxSizer* itemBoxSizer21 = new wxBoxSizer(wxVERTICAL); wxButton* itemButton26 = new wxButton( itemDialog1, wxID_OK, _("&OK"), wxDefaultPosition, wxDefaultSize, 0 );
itemBoxSizer13->Add(itemBoxSizer21, 0, wxALIGN_CENTER_HORIZONTAL|wxALL, 5); itemButton26->SetForegroundColour(wxColour(210, 0, 0));
itemBoxSizer25->Add(itemButton26, 0, wxGROW|wxALL, 5);
wxButton* itemButton22 = new wxButton( itemDialog1, wxID_OK, _("&OK"), wxDefaultPosition, wxDefaultSize, 0 ); wxButton* itemButton27 = new wxButton( itemDialog1, wxID_CANCEL, _("&Cancel"), wxDefaultPosition, wxDefaultSize, wxBU_LEFT );
itemButton22->SetForegroundColour(wxColour(210, 0, 0)); itemButton27->SetForegroundColour(wxColour(0, 0, 255));
itemBoxSizer21->Add(itemButton22, 0, wxGROW|wxALL, 5); itemBoxSizer25->Add(itemButton27, 0, wxGROW|wxALL, 5);
wxButton* itemButton23 = new wxButton( itemDialog1, wxID_CANCEL, _("&Cancel"), wxDefaultPosition, wxDefaultSize, wxBU_LEFT );
itemButton23->SetForegroundColour(wxColour(0, 0, 255));
itemBoxSizer21->Add(itemButton23, 0, wxGROW|wxALL, 5);
// Set validators
m_AllowMicroViaCtrl->SetValidator( wxGenericValidator(& g_DesignSettings.m_MicroViasAllowed) );
////@end WinEDA_PcbTracksDialog content construction ////@end WinEDA_PcbTracksDialog content construction
SetDisplayValue(); SetDisplayValue();
} }
@ -235,7 +263,9 @@ void WinEDA_PcbTracksDialog::SetDisplayValue()
/*************************************************/ /*************************************************/
{ {
AddUnitSymbol(*m_ViaSizeTitle); AddUnitSymbol(*m_ViaSizeTitle);
AddUnitSymbol(*m_MicroViaSizeTitle);
AddUnitSymbol(*m_ViaDefaultDrillValueTitle); AddUnitSymbol(*m_ViaDefaultDrillValueTitle);
AddUnitSymbol(*m_MicroViaDrillTitle);
AddUnitSymbol(*m_ViaAltDrillValueTitle); AddUnitSymbol(*m_ViaAltDrillValueTitle);
AddUnitSymbol(*m_TrackWidthTitle); AddUnitSymbol(*m_TrackWidthTitle);
AddUnitSymbol(*m_TrackClearanceTitle); AddUnitSymbol(*m_TrackClearanceTitle);
@ -243,32 +273,50 @@ void WinEDA_PcbTracksDialog::SetDisplayValue()
int Internal_Unit = m_Parent->m_InternalUnits; int Internal_Unit = m_Parent->m_InternalUnits;
PutValueInLocalUnits(*m_OptViaSize, g_DesignSettings.m_CurrentViaSize, Internal_Unit); PutValueInLocalUnits(*m_OptViaSize, g_DesignSettings.m_CurrentViaSize, Internal_Unit);
PutValueInLocalUnits(*m_MicroViaSizeCtrl, g_DesignSettings.m_CurrentMicroViaSize, Internal_Unit);
PutValueInLocalUnits(*m_OptViaDrill, g_DesignSettings.m_ViaDrill, Internal_Unit); PutValueInLocalUnits(*m_OptViaDrill, g_DesignSettings.m_ViaDrill, Internal_Unit);
PutValueInLocalUnits(*m_MicroViaDrillCtrl, g_DesignSettings.m_MicroViaDrill, Internal_Unit);
PutValueInLocalUnits(*m_OptCustomViaDrill, g_ViaHoleLastValue, Internal_Unit); PutValueInLocalUnits(*m_OptCustomViaDrill, g_ViaHoleLastValue, Internal_Unit);
PutValueInLocalUnits(*m_OptTrackWidth, g_DesignSettings.m_CurrentTrackWidth, Internal_Unit); PutValueInLocalUnits(*m_OptTrackWidth, g_DesignSettings.m_CurrentTrackWidth, Internal_Unit);
PutValueInLocalUnits(*m_OptTrackClearance, g_DesignSettings.m_TrackClearence, Internal_Unit); PutValueInLocalUnits(*m_OptTrackClearance, g_DesignSettings.m_TrackClearence, Internal_Unit);
PutValueInLocalUnits(*m_OptMaskMargin, g_DesignSettings.m_MaskMargin, Internal_Unit); PutValueInLocalUnits(*m_OptMaskMargin, g_DesignSettings.m_MaskMargin, Internal_Unit);
m_OptViaType->SetSelection(g_DesignSettings.m_CurrentViaType - 1); if ( g_DesignSettings.m_CurrentViaType != VIA_THROUGH )
m_OptViaType->SetSelection(1);
m_MicroViaSizeTitle->Enable(g_DesignSettings.m_MicroViasAllowed);
m_MicroViaSizeCtrl->Enable(g_DesignSettings.m_MicroViasAllowed);
m_MicroViaDrillTitle->Enable(g_DesignSettings.m_MicroViasAllowed);
m_MicroViaDrillCtrl->Enable(g_DesignSettings.m_MicroViasAllowed);
} }
/*******************************************************************/ /*******************************************************************/
void WinEDA_PcbTracksDialog::AcceptPcbOptions(wxCommandEvent& event) void WinEDA_PcbTracksDialog::AcceptPcbOptions(wxCommandEvent& event)
/*******************************************************************/ /*******************************************************************/
{ {
g_DesignSettings.m_CurrentViaType = m_OptViaType->GetSelection() + 1; g_DesignSettings.m_CurrentViaType = VIA_THROUGH;
if ( m_OptViaType->GetSelection() > 0 )
g_DesignSettings.m_CurrentViaType = VIA_BLIND_BURIED;
if ( g_DesignSettings.m_CurrentViaType != VIA_THROUGH ) if ( g_DesignSettings.m_CurrentViaType != VIA_THROUGH )
{ {
if( ! IsOK(this, if( ! IsOK(this,
_("You have selected VIA Blind or VIA Buried\nWARNING: this feature is EXPERIMENTAL!!! Accept ?") ) ) _("You have selected VIA Blind and Buried\nWARNING: this feature is EXPERIMENTAL!!! Accept ?") ) )
g_DesignSettings.m_CurrentViaType = VIA_THROUGH; g_DesignSettings.m_CurrentViaType = VIA_THROUGH;
} }
g_DesignSettings.m_CurrentViaSize = g_DesignSettings.m_CurrentViaSize =
ReturnValueFromTextCtrl(*m_OptViaSize, m_Parent->m_InternalUnits); ReturnValueFromTextCtrl(*m_OptViaSize, m_Parent->m_InternalUnits);
g_DesignSettings.m_CurrentMicroViaSize =
ReturnValueFromTextCtrl(*m_MicroViaSizeCtrl, m_Parent->m_InternalUnits);
g_DesignSettings.m_MicroViaDrill =
ReturnValueFromTextCtrl(*m_MicroViaDrillCtrl, m_Parent->m_InternalUnits);
g_DesignSettings.m_ViaDrill = g_DesignSettings.m_ViaDrill =
ReturnValueFromTextCtrl(*m_OptViaDrill, m_Parent->m_InternalUnits); ReturnValueFromTextCtrl(*m_OptViaDrill, m_Parent->m_InternalUnits);
g_ViaHoleLastValue = g_ViaHoleLastValue =
ReturnValueFromTextCtrl(*m_OptCustomViaDrill, m_Parent->m_InternalUnits); ReturnValueFromTextCtrl(*m_OptCustomViaDrill, m_Parent->m_InternalUnits);
g_DesignSettings.m_MicroViasAllowed = m_AllowMicroViaCtrl->IsChecked();
g_DesignSettings.m_CurrentTrackWidth = g_DesignSettings.m_CurrentTrackWidth =
ReturnValueFromTextCtrl(*m_OptTrackWidth, m_Parent->m_InternalUnits); ReturnValueFromTextCtrl(*m_OptTrackWidth, m_Parent->m_InternalUnits);
g_DesignSettings.m_TrackClearence = g_DesignSettings.m_TrackClearence =
@ -391,3 +439,17 @@ void WinEDA_PcbTracksDialog::OnInitDialog( wxInitDialogEvent& event )
event.Skip(); event.Skip();
} }
/*!
* wxEVT_COMMAND_CHECKBOX_CLICKED event handler for ID_CHECKBOX_ALLOWS_MICROVIA
*/
void WinEDA_PcbTracksDialog::OnCheckboxAllowsMicroviaClick( wxCommandEvent& event )
{
bool state = m_AllowMicroViaCtrl->IsChecked();
m_MicroViaSizeTitle->Enable(state);
m_MicroViaSizeCtrl->Enable(state);
m_MicroViaDrillTitle->Enable(state);
m_MicroViaDrillCtrl->Enable(state);
}

View File

@ -23,6 +23,7 @@
*/ */
////@begin includes ////@begin includes
#include "wx/valgen.h"
////@end includes ////@end includes
/*! /*!
@ -42,6 +43,9 @@
#define ID_TEXTCTRL1 10002 #define ID_TEXTCTRL1 10002
#define ID_TEXTCTRL2 10003 #define ID_TEXTCTRL2 10003
#define ID_VIA_TYPE_SELECTION 10004 #define ID_VIA_TYPE_SELECTION 10004
#define ID_TEXTCTRL7 10008
#define ID_TEXTCTRL6 10010
#define ID_CHECKBOX_ALLOWS_MICROVIA 10009
#define ID_TEXTCTRL3 10005 #define ID_TEXTCTRL3 10005
#define ID_TEXTCTRL4 10006 #define ID_TEXTCTRL4 10006
#define ID_TEXTCTRL5 10007 #define ID_TEXTCTRL5 10007
@ -85,6 +89,9 @@ public:
/// wxEVT_INIT_DIALOG event handler for ID_DIALOG /// wxEVT_INIT_DIALOG event handler for ID_DIALOG
void OnInitDialog( wxInitDialogEvent& event ); void OnInitDialog( wxInitDialogEvent& event );
/// wxEVT_COMMAND_CHECKBOX_CLICKED event handler for ID_CHECKBOX_ALLOWS_MICROVIA
void OnCheckboxAllowsMicroviaClick( wxCommandEvent& event );
/// wxEVT_COMMAND_BUTTON_CLICKED event handler for wxID_OK /// wxEVT_COMMAND_BUTTON_CLICKED event handler for wxID_OK
void OnOkClick( wxCommandEvent& event ); void OnOkClick( wxCommandEvent& event );
@ -115,6 +122,11 @@ public:
wxStaticText* m_ViaAltDrillValueTitle; wxStaticText* m_ViaAltDrillValueTitle;
wxTextCtrl* m_OptCustomViaDrill; wxTextCtrl* m_OptCustomViaDrill;
wxRadioBox* m_OptViaType; wxRadioBox* m_OptViaType;
wxStaticText* m_MicroViaSizeTitle;
wxTextCtrl* m_MicroViaSizeCtrl;
wxStaticText* m_MicroViaDrillTitle;
wxTextCtrl* m_MicroViaDrillCtrl;
wxCheckBox* m_AllowMicroViaCtrl;
wxStaticText* m_TrackWidthTitle; wxStaticText* m_TrackWidthTitle;
wxTextCtrl* m_OptTrackWidth; wxTextCtrl* m_OptTrackWidth;
wxStaticText* m_TrackClearanceTitle; wxStaticText* m_TrackClearanceTitle;

View File

@ -108,10 +108,12 @@
<bool name="use_resource_archive">0</bool> <bool name="use_resource_archive">0</bool>
<bool name="use_generated_xrc_cpp">0</bool> <bool name="use_generated_xrc_cpp">0</bool>
<bool name="always_generate_xrc">1</bool> <bool name="always_generate_xrc">1</bool>
<bool name="use_id_name_for_name">0</bool>
<bool name="archive_xrc_files">1</bool> <bool name="archive_xrc_files">1</bool>
<bool name="archive_image_files">1</bool> <bool name="archive_image_files">1</bool>
<bool name="archive_all_image_files">0</bool> <bool name="archive_all_image_files">0</bool>
<bool name="xrc_retain_relative_paths">1</bool> <bool name="xrc_retain_relative_paths">1</bool>
<bool name="xrc_generate_id_tags">0</bool>
</header> </header>
<data> <data>
<document> <document>
@ -247,7 +249,6 @@
<bool name="proxy-wxDEFAULT_DIALOG_STYLE">0</bool> <bool name="proxy-wxDEFAULT_DIALOG_STYLE">0</bool>
<bool name="proxy-wxCAPTION">1</bool> <bool name="proxy-wxCAPTION">1</bool>
<bool name="proxy-wxRESIZE_BORDER">0</bool> <bool name="proxy-wxRESIZE_BORDER">0</bool>
<bool name="proxy-wxTHICK_FRAME">0</bool>
<bool name="proxy-wxSYSTEM_MENU">1</bool> <bool name="proxy-wxSYSTEM_MENU">1</bool>
<bool name="proxy-wxSTAY_ON_TOP">0</bool> <bool name="proxy-wxSTAY_ON_TOP">0</bool>
<bool name="proxy-wxDIALOG_NO_PARENT">0</bool> <bool name="proxy-wxDIALOG_NO_PARENT">0</bool>
@ -295,7 +296,7 @@
<bool name="proxy-wxFIXED_MINSIZE">0</bool> <bool name="proxy-wxFIXED_MINSIZE">0</bool>
<string name="proxy-Platform">"&lt;Any platform&gt;"</string> <string name="proxy-Platform">"&lt;Any platform&gt;"</string>
<document> <document>
<string name="title">"wxBoxSizer V"</string> <string name="title">"wxStaticBoxSizer V"</string>
<string name="type">"dialog-control-document"</string> <string name="type">"dialog-control-document"</string>
<string name="filename">""</string> <string name="filename">""</string>
<string name="icon-name">"sizer"</string> <string name="icon-name">"sizer"</string>
@ -304,9 +305,18 @@
<long name="title-mode">0</long> <long name="title-mode">0</long>
<long name="locked">0</long> <long name="locked">0</long>
<string name="created">"24/4/2006"</string> <string name="created">"24/4/2006"</string>
<string name="proxy-type">"wbBoxSizerProxy"</string> <string name="proxy-type">"wbStaticBoxSizerProxy"</string>
<string name="proxy-Orientation">"Vertical"</string> <string name="proxy-Id name">"wxID_ANY"</string>
<long name="proxy-Id value">-1</long>
<string name="proxy-Label">"Vias:"</string>
<string name="proxy-Member variable name">""</string> <string name="proxy-Member variable name">""</string>
<string name="proxy-Sizer member variable name">""</string>
<string name="proxy-Foreground colour">""</string>
<string name="proxy-Font">""</string>
<bool name="proxy-Hidden">0</bool>
<bool name="proxy-Enabled">1</bool>
<string name="proxy-Static box class">"wxStaticBox"</string>
<string name="proxy-Orientation">"Vertical"</string>
<string name="proxy-AlignH">"Centre"</string> <string name="proxy-AlignH">"Centre"</string>
<string name="proxy-AlignV">"Expand"</string> <string name="proxy-AlignV">"Expand"</string>
<long name="proxy-Stretch factor">0</long> <long name="proxy-Stretch factor">0</long>
@ -328,7 +338,7 @@
<long name="owns-file">1</long> <long name="owns-file">1</long>
<long name="title-mode">0</long> <long name="title-mode">0</long>
<long name="locked">0</long> <long name="locked">0</long>
<string name="created">"24/4/2006"</string> <string name="created">"11/1/2008"</string>
<string name="proxy-type">"wbStaticTextProxy"</string> <string name="proxy-type">"wbStaticTextProxy"</string>
<string name="proxy-Id name">"wxID_STATIC"</string> <string name="proxy-Id name">"wxID_STATIC"</string>
<long name="proxy-Id value">5105</long> <long name="proxy-Id value">5105</long>
@ -398,7 +408,7 @@
<long name="owns-file">1</long> <long name="owns-file">1</long>
<long name="title-mode">0</long> <long name="title-mode">0</long>
<long name="locked">0</long> <long name="locked">0</long>
<string name="created">"24/4/2006"</string> <string name="created">"11/1/2008"</string>
<string name="proxy-type">"wbTextCtrlProxy"</string> <string name="proxy-type">"wbTextCtrlProxy"</string>
<string name="proxy-Id name">"ID_TEXTCTRL"</string> <string name="proxy-Id name">"ID_TEXTCTRL"</string>
<long name="proxy-Id value">10001</long> <long name="proxy-Id value">10001</long>
@ -470,7 +480,6 @@
<bool name="proxy-wxFIXED_MINSIZE">0</bool> <bool name="proxy-wxFIXED_MINSIZE">0</bool>
<string name="proxy-Custom arguments">""</string> <string name="proxy-Custom arguments">""</string>
<string name="proxy-Custom ctor arguments">""</string> <string name="proxy-Custom ctor arguments">""</string>
<bool name="proxy-wxTE_LINEWRAP">0</bool>
</document> </document>
<document> <document>
<string name="title">"wxStaticText: wxID_STATIC"</string> <string name="title">"wxStaticText: wxID_STATIC"</string>
@ -481,7 +490,7 @@
<long name="owns-file">1</long> <long name="owns-file">1</long>
<long name="title-mode">0</long> <long name="title-mode">0</long>
<long name="locked">0</long> <long name="locked">0</long>
<string name="created">"24/4/2006"</string> <string name="created">"11/1/2008"</string>
<string name="proxy-type">"wbStaticTextProxy"</string> <string name="proxy-type">"wbStaticTextProxy"</string>
<string name="proxy-Id name">"wxID_STATIC"</string> <string name="proxy-Id name">"wxID_STATIC"</string>
<long name="proxy-Id value">5105</long> <long name="proxy-Id value">5105</long>
@ -551,7 +560,7 @@
<long name="owns-file">1</long> <long name="owns-file">1</long>
<long name="title-mode">0</long> <long name="title-mode">0</long>
<long name="locked">0</long> <long name="locked">0</long>
<string name="created">"24/4/2006"</string> <string name="created">"11/1/2008"</string>
<string name="proxy-type">"wbTextCtrlProxy"</string> <string name="proxy-type">"wbTextCtrlProxy"</string>
<string name="proxy-Id name">"ID_TEXTCTRL1"</string> <string name="proxy-Id name">"ID_TEXTCTRL1"</string>
<long name="proxy-Id value">10002</long> <long name="proxy-Id value">10002</long>
@ -623,7 +632,6 @@
<bool name="proxy-wxFIXED_MINSIZE">0</bool> <bool name="proxy-wxFIXED_MINSIZE">0</bool>
<string name="proxy-Custom arguments">""</string> <string name="proxy-Custom arguments">""</string>
<string name="proxy-Custom ctor arguments">""</string> <string name="proxy-Custom ctor arguments">""</string>
<bool name="proxy-wxTE_LINEWRAP">0</bool>
</document> </document>
<document> <document>
<string name="title">"wxStaticText: wxID_STATIC"</string> <string name="title">"wxStaticText: wxID_STATIC"</string>
@ -634,7 +642,7 @@
<long name="owns-file">1</long> <long name="owns-file">1</long>
<long name="title-mode">0</long> <long name="title-mode">0</long>
<long name="locked">0</long> <long name="locked">0</long>
<string name="created">"24/4/2006"</string> <string name="created">"11/1/2008"</string>
<string name="proxy-type">"wbStaticTextProxy"</string> <string name="proxy-type">"wbStaticTextProxy"</string>
<string name="proxy-Id name">"wxID_STATIC"</string> <string name="proxy-Id name">"wxID_STATIC"</string>
<long name="proxy-Id value">5105</long> <long name="proxy-Id value">5105</long>
@ -704,7 +712,7 @@
<long name="owns-file">1</long> <long name="owns-file">1</long>
<long name="title-mode">0</long> <long name="title-mode">0</long>
<long name="locked">0</long> <long name="locked">0</long>
<string name="created">"24/4/2006"</string> <string name="created">"11/1/2008"</string>
<string name="proxy-type">"wbTextCtrlProxy"</string> <string name="proxy-type">"wbTextCtrlProxy"</string>
<string name="proxy-Id name">"ID_TEXTCTRL2"</string> <string name="proxy-Id name">"ID_TEXTCTRL2"</string>
<long name="proxy-Id value">10003</long> <long name="proxy-Id value">10003</long>
@ -776,33 +784,6 @@
<bool name="proxy-wxFIXED_MINSIZE">0</bool> <bool name="proxy-wxFIXED_MINSIZE">0</bool>
<string name="proxy-Custom arguments">""</string> <string name="proxy-Custom arguments">""</string>
<string name="proxy-Custom ctor arguments">""</string> <string name="proxy-Custom ctor arguments">""</string>
<bool name="proxy-wxTE_LINEWRAP">0</bool>
</document>
<document>
<string name="title">"Spacer"</string>
<string name="type">"dialog-control-document"</string>
<string name="filename">""</string>
<string name="icon-name">"spacer"</string>
<long name="is-transient">0</long>
<long name="owns-file">1</long>
<long name="title-mode">0</long>
<long name="locked">0</long>
<string name="created">"24/4/2006"</string>
<string name="proxy-type">"wbSpacerProxy"</string>
<long name="proxy-Width">5</long>
<long name="proxy-Height">5</long>
<string name="proxy-AlignH">"Centre"</string>
<string name="proxy-AlignV">"Centre"</string>
<long name="proxy-Stretch factor">0</long>
<long name="proxy-Border">5</long>
<bool name="proxy-wxLEFT">1</bool>
<bool name="proxy-wxRIGHT">1</bool>
<bool name="proxy-wxTOP">1</bool>
<bool name="proxy-wxBOTTOM">1</bool>
<bool name="proxy-wxSHAPED">0</bool>
<bool name="proxy-wxADJUST_MINSIZE">0</bool>
<bool name="proxy-wxFIXED_MINSIZE">0</bool>
<string name="proxy-Platform">"&lt;Any platform&gt;"</string>
</document> </document>
<document> <document>
<string name="title">"wxRadioBox: ID_VIA_TYPE_SELECTION"</string> <string name="title">"wxRadioBox: ID_VIA_TYPE_SELECTION"</string>
@ -813,7 +794,7 @@
<long name="owns-file">1</long> <long name="owns-file">1</long>
<long name="title-mode">0</long> <long name="title-mode">0</long>
<long name="locked">0</long> <long name="locked">0</long>
<string name="created">"24/4/2006"</string> <string name="created">"11/1/2008"</string>
<string name="proxy-type">"wbRadioBoxProxy"</string> <string name="proxy-type">"wbRadioBoxProxy"</string>
<string name="proxy-Id name">"ID_VIA_TYPE_SELECTION"</string> <string name="proxy-Id name">"ID_VIA_TYPE_SELECTION"</string>
<long name="proxy-Id value">10004</long> <long name="proxy-Id value">10004</long>
@ -825,9 +806,9 @@
<string name="proxy-Implementation filename">""</string> <string name="proxy-Implementation filename">""</string>
<string name="proxy-Header filename">""</string> <string name="proxy-Header filename">""</string>
<string name="proxy-Member variable name">"m_OptViaType"</string> <string name="proxy-Member variable name">"m_OptViaType"</string>
<string name="proxy-Label">"Via Type"</string> <string name="proxy-Label">"Default Via Type"</string>
<long name="proxy-Major dimension count">1</long> <long name="proxy-Major dimension count">1</long>
<string name="proxy-Items">"Blind Via|Buried Via|Standard Via"</string> <string name="proxy-Items">"Through Via|Blind or Buried Via "</string>
<long name="proxy-Initial value">0</long> <long name="proxy-Initial value">0</long>
<string name="proxy-Help text">""</string> <string name="proxy-Help text">""</string>
<string name="proxy-Tooltip text">""</string> <string name="proxy-Tooltip text">""</string>
@ -870,20 +851,29 @@
</document> </document>
</document> </document>
<document> <document>
<string name="title">"Spacer"</string> <string name="title">"wxStaticBoxSizer V"</string>
<string name="type">"dialog-control-document"</string> <string name="type">"dialog-control-document"</string>
<string name="filename">""</string> <string name="filename">""</string>
<string name="icon-name">"spacer"</string> <string name="icon-name">"sizer"</string>
<long name="is-transient">0</long> <long name="is-transient">0</long>
<long name="owns-file">1</long> <long name="owns-file">1</long>
<long name="title-mode">0</long> <long name="title-mode">0</long>
<long name="locked">0</long> <long name="locked">0</long>
<string name="created">"24/4/2006"</string> <string name="created">"11/1/2008"</string>
<string name="proxy-type">"wbSpacerProxy"</string> <string name="proxy-type">"wbStaticBoxSizerProxy"</string>
<long name="proxy-Width">5</long> <string name="proxy-Id name">"wxID_ANY"</string>
<long name="proxy-Height">5</long> <long name="proxy-Id value">-1</long>
<string name="proxy-Label">"Micro Vias:"</string>
<string name="proxy-Member variable name">""</string>
<string name="proxy-Sizer member variable name">""</string>
<string name="proxy-Foreground colour">""</string>
<string name="proxy-Font">""</string>
<bool name="proxy-Hidden">0</bool>
<bool name="proxy-Enabled">1</bool>
<string name="proxy-Static box class">"wxStaticBox"</string>
<string name="proxy-Orientation">"Vertical"</string>
<string name="proxy-AlignH">"Centre"</string> <string name="proxy-AlignH">"Centre"</string>
<string name="proxy-AlignV">"Centre"</string> <string name="proxy-AlignV">"Expand"</string>
<long name="proxy-Stretch factor">0</long> <long name="proxy-Stretch factor">0</long>
<long name="proxy-Border">5</long> <long name="proxy-Border">5</long>
<bool name="proxy-wxLEFT">1</bool> <bool name="proxy-wxLEFT">1</bool>
@ -894,6 +884,403 @@
<bool name="proxy-wxADJUST_MINSIZE">0</bool> <bool name="proxy-wxADJUST_MINSIZE">0</bool>
<bool name="proxy-wxFIXED_MINSIZE">0</bool> <bool name="proxy-wxFIXED_MINSIZE">0</bool>
<string name="proxy-Platform">"&lt;Any platform&gt;"</string> <string name="proxy-Platform">"&lt;Any platform&gt;"</string>
<document>
<string name="title">"wxStaticText: wxID_STATIC"</string>
<string name="type">"dialog-control-document"</string>
<string name="filename">""</string>
<string name="icon-name">"statictext"</string>
<long name="is-transient">0</long>
<long name="owns-file">1</long>
<long name="title-mode">0</long>
<long name="locked">0</long>
<string name="created">"11/1/2008"</string>
<string name="proxy-type">"wbStaticTextProxy"</string>
<string name="proxy-Id name">"wxID_STATIC"</string>
<long name="proxy-Id value">5105</long>
<string name="proxy-Name">""</string>
<string name="proxy-Class">"wxStaticText"</string>
<string name="proxy-Base class">"wxStaticText"</string>
<bool name="proxy-External implementation">1</bool>
<bool name="proxy-Separate files">0</bool>
<string name="proxy-Implementation filename">""</string>
<string name="proxy-Header filename">""</string>
<string name="proxy-Member variable name">"m_MicroViaSizeTitle"</string>
<string name="proxy-Label">"Micro Via Size"</string>
<long name="proxy-Wrapping width">-1</long>
<string name="proxy-Help text">""</string>
<string name="proxy-Tooltip text">""</string>
<string name="proxy-Background colour">""</string>
<string name="proxy-Foreground colour">""</string>
<string name="proxy-Font">""</string>
<bool name="proxy-Hidden">0</bool>
<bool name="proxy-Enabled">1</bool>
<string name="proxy-Platform">"&lt;Any platform&gt;"</string>
<string name="proxy-Data variable">""</string>
<string name="proxy-Data validator">""</string>
<string name="proxy-Data source">""</string>
<string name="proxy-Data class name">""</string>
<string name="proxy-Data class implementation filename">""</string>
<string name="proxy-Data class header filename">""</string>
<string name="proxy-Data class manager window">""</string>
<bool name="proxy-wxALIGN_LEFT">0</bool>
<bool name="proxy-wxALIGN_RIGHT">0</bool>
<bool name="proxy-wxALIGN_CENTRE">0</bool>
<bool name="proxy-wxST_NO_AUTORESIZE">0</bool>
<bool name="proxy-wxNO_BORDER">0</bool>
<bool name="proxy-wxSIMPLE_BORDER">0</bool>
<bool name="proxy-wxDOUBLE_BORDER">0</bool>
<bool name="proxy-wxSUNKEN_BORDER">0</bool>
<bool name="proxy-wxRAISED_BORDER">0</bool>
<bool name="proxy-wxSTATIC_BORDER">0</bool>
<bool name="proxy-wxWANTS_CHARS">0</bool>
<bool name="proxy-wxNO_FULL_REPAINT_ON_RESIZE">0</bool>
<bool name="proxy-wxFULL_REPAINT_ON_RESIZE">0</bool>
<string name="proxy-Custom styles">""</string>
<long name="proxy-X">-1</long>
<long name="proxy-Y">-1</long>
<long name="proxy-Width">-1</long>
<long name="proxy-Height">-1</long>
<string name="proxy-AlignH">"Expand"</string>
<string name="proxy-AlignV">"Centre"</string>
<long name="proxy-Stretch factor">0</long>
<long name="proxy-Border">5</long>
<bool name="proxy-wxLEFT">1</bool>
<bool name="proxy-wxRIGHT">1</bool>
<bool name="proxy-wxTOP">1</bool>
<bool name="proxy-wxBOTTOM">0</bool>
<bool name="proxy-wxSHAPED">0</bool>
<bool name="proxy-wxADJUST_MINSIZE">0</bool>
<bool name="proxy-wxFIXED_MINSIZE">0</bool>
<string name="proxy-Custom arguments">""</string>
<string name="proxy-Custom ctor arguments">""</string>
</document>
<document>
<string name="title">"wxTextCtrl: ID_TEXTCTRL7"</string>
<string name="type">"dialog-control-document"</string>
<string name="filename">""</string>
<string name="icon-name">"textctrl"</string>
<long name="is-transient">0</long>
<long name="owns-file">1</long>
<long name="title-mode">0</long>
<long name="locked">0</long>
<string name="created">"11/1/2008"</string>
<string name="proxy-type">"wbTextCtrlProxy"</string>
<string name="proxy-Id name">"ID_TEXTCTRL7"</string>
<long name="proxy-Id value">10008</long>
<string name="proxy-Name">""</string>
<string name="proxy-Class">"wxTextCtrl"</string>
<string name="proxy-Base class">"wxTextCtrl"</string>
<bool name="proxy-External implementation">1</bool>
<bool name="proxy-Separate files">0</bool>
<string name="proxy-Implementation filename">""</string>
<string name="proxy-Header filename">""</string>
<string name="proxy-Member variable name">"m_MicroViaSizeCtrl"</string>
<string name="proxy-Initial value">""</string>
<long name="proxy-Max length">0</long>
<string name="proxy-Help text">""</string>
<string name="proxy-Tooltip text">""</string>
<string name="proxy-Background colour">""</string>
<string name="proxy-Foreground colour">""</string>
<string name="proxy-Font">""</string>
<bool name="proxy-Hidden">0</bool>
<bool name="proxy-Enabled">1</bool>
<string name="proxy-Platform">"&lt;Any platform&gt;"</string>
<string name="proxy-Data variable">""</string>
<string name="proxy-Data validator">""</string>
<string name="proxy-Data source">""</string>
<string name="proxy-Data class name">""</string>
<string name="proxy-Data class implementation filename">""</string>
<string name="proxy-Data class header filename">""</string>
<string name="proxy-Data class manager window">""</string>
<bool name="proxy-wxTE_MULTILINE">0</bool>
<bool name="proxy-wxTE_PROCESS_ENTER">0</bool>
<bool name="proxy-wxTE_PROCESS_TAB">0</bool>
<bool name="proxy-wxTE_PASSWORD">0</bool>
<bool name="proxy-wxTE_READONLY">0</bool>
<bool name="proxy-wxTE_RICH">0</bool>
<bool name="proxy-wxTE_RICH2">0</bool>
<bool name="proxy-wxTE_AUTO_URL">0</bool>
<bool name="proxy-wxTE_NOHIDESEL">0</bool>
<bool name="proxy-wxTE_LEFT">0</bool>
<bool name="proxy-wxTE_CENTRE">0</bool>
<bool name="proxy-wxTE_RIGHT">0</bool>
<bool name="proxy-wxHSCROLL">0</bool>
<bool name="proxy-wxTE_CHARWRAP">0</bool>
<bool name="proxy-wxTE_WORDWRAP">0</bool>
<bool name="proxy-wxTE_CAPITALIZE">0</bool>
<bool name="proxy-wxNO_BORDER">0</bool>
<bool name="proxy-wxSIMPLE_BORDER">0</bool>
<bool name="proxy-wxDOUBLE_BORDER">0</bool>
<bool name="proxy-wxSUNKEN_BORDER">0</bool>
<bool name="proxy-wxRAISED_BORDER">0</bool>
<bool name="proxy-wxSTATIC_BORDER">0</bool>
<bool name="proxy-wxWANTS_CHARS">0</bool>
<bool name="proxy-wxNO_FULL_REPAINT_ON_RESIZE">0</bool>
<bool name="proxy-wxFULL_REPAINT_ON_RESIZE">0</bool>
<string name="proxy-Custom styles">""</string>
<long name="proxy-X">-1</long>
<long name="proxy-Y">-1</long>
<long name="proxy-Width">-1</long>
<long name="proxy-Height">-1</long>
<string name="proxy-AlignH">"Expand"</string>
<string name="proxy-AlignV">"Centre"</string>
<long name="proxy-Stretch factor">0</long>
<long name="proxy-Border">5</long>
<bool name="proxy-wxLEFT">1</bool>
<bool name="proxy-wxRIGHT">1</bool>
<bool name="proxy-wxTOP">0</bool>
<bool name="proxy-wxBOTTOM">1</bool>
<bool name="proxy-wxSHAPED">0</bool>
<bool name="proxy-wxADJUST_MINSIZE">0</bool>
<bool name="proxy-wxFIXED_MINSIZE">0</bool>
<string name="proxy-Custom arguments">""</string>
<string name="proxy-Custom ctor arguments">""</string>
</document>
<document>
<string name="title">"wxStaticText: wxID_STATIC"</string>
<string name="type">"dialog-control-document"</string>
<string name="filename">""</string>
<string name="icon-name">"statictext"</string>
<long name="is-transient">0</long>
<long name="owns-file">1</long>
<long name="title-mode">0</long>
<long name="locked">0</long>
<string name="created">"11/1/2008"</string>
<string name="proxy-type">"wbStaticTextProxy"</string>
<string name="proxy-Id name">"wxID_STATIC"</string>
<long name="proxy-Id value">5105</long>
<string name="proxy-Name">""</string>
<string name="proxy-Class">"wxStaticText"</string>
<string name="proxy-Base class">"wxStaticText"</string>
<bool name="proxy-External implementation">1</bool>
<bool name="proxy-Separate files">0</bool>
<string name="proxy-Implementation filename">""</string>
<string name="proxy-Header filename">""</string>
<string name="proxy-Member variable name">"m_MicroViaDrillTitle"</string>
<string name="proxy-Label">"Micro Via Drill"</string>
<long name="proxy-Wrapping width">-1</long>
<string name="proxy-Help text">""</string>
<string name="proxy-Tooltip text">""</string>
<string name="proxy-Background colour">""</string>
<string name="proxy-Foreground colour">""</string>
<string name="proxy-Font">""</string>
<bool name="proxy-Hidden">0</bool>
<bool name="proxy-Enabled">1</bool>
<string name="proxy-Platform">"&lt;Any platform&gt;"</string>
<string name="proxy-Data variable">""</string>
<string name="proxy-Data validator">""</string>
<string name="proxy-Data source">""</string>
<string name="proxy-Data class name">""</string>
<string name="proxy-Data class implementation filename">""</string>
<string name="proxy-Data class header filename">""</string>
<string name="proxy-Data class manager window">""</string>
<bool name="proxy-wxALIGN_LEFT">0</bool>
<bool name="proxy-wxALIGN_RIGHT">0</bool>
<bool name="proxy-wxALIGN_CENTRE">0</bool>
<bool name="proxy-wxST_NO_AUTORESIZE">0</bool>
<bool name="proxy-wxNO_BORDER">0</bool>
<bool name="proxy-wxSIMPLE_BORDER">0</bool>
<bool name="proxy-wxDOUBLE_BORDER">0</bool>
<bool name="proxy-wxSUNKEN_BORDER">0</bool>
<bool name="proxy-wxRAISED_BORDER">0</bool>
<bool name="proxy-wxSTATIC_BORDER">0</bool>
<bool name="proxy-wxWANTS_CHARS">0</bool>
<bool name="proxy-wxNO_FULL_REPAINT_ON_RESIZE">0</bool>
<bool name="proxy-wxFULL_REPAINT_ON_RESIZE">0</bool>
<string name="proxy-Custom styles">""</string>
<long name="proxy-X">-1</long>
<long name="proxy-Y">-1</long>
<long name="proxy-Width">-1</long>
<long name="proxy-Height">-1</long>
<string name="proxy-AlignH">"Expand"</string>
<string name="proxy-AlignV">"Centre"</string>
<long name="proxy-Stretch factor">0</long>
<long name="proxy-Border">5</long>
<bool name="proxy-wxLEFT">1</bool>
<bool name="proxy-wxRIGHT">1</bool>
<bool name="proxy-wxTOP">1</bool>
<bool name="proxy-wxBOTTOM">0</bool>
<bool name="proxy-wxSHAPED">0</bool>
<bool name="proxy-wxADJUST_MINSIZE">0</bool>
<bool name="proxy-wxFIXED_MINSIZE">0</bool>
<string name="proxy-Custom arguments">""</string>
<string name="proxy-Custom ctor arguments">""</string>
</document>
<document>
<string name="title">"wxTextCtrl: ID_TEXTCTRL6"</string>
<string name="type">"dialog-control-document"</string>
<string name="filename">""</string>
<string name="icon-name">"textctrl"</string>
<long name="is-transient">0</long>
<long name="owns-file">1</long>
<long name="title-mode">0</long>
<long name="locked">0</long>
<string name="created">"11/1/2008"</string>
<string name="proxy-type">"wbTextCtrlProxy"</string>
<string name="proxy-Id name">"ID_TEXTCTRL6"</string>
<long name="proxy-Id value">10010</long>
<string name="proxy-Name">""</string>
<string name="proxy-Class">"wxTextCtrl"</string>
<string name="proxy-Base class">"wxTextCtrl"</string>
<bool name="proxy-External implementation">1</bool>
<bool name="proxy-Separate files">0</bool>
<string name="proxy-Implementation filename">""</string>
<string name="proxy-Header filename">""</string>
<string name="proxy-Member variable name">"m_MicroViaDrillCtrl"</string>
<string name="proxy-Initial value">""</string>
<long name="proxy-Max length">0</long>
<string name="proxy-Help text">""</string>
<string name="proxy-Tooltip text">""</string>
<string name="proxy-Background colour">""</string>
<string name="proxy-Foreground colour">""</string>
<string name="proxy-Font">""</string>
<bool name="proxy-Hidden">0</bool>
<bool name="proxy-Enabled">1</bool>
<string name="proxy-Platform">"&lt;Any platform&gt;"</string>
<string name="proxy-Data variable">""</string>
<string name="proxy-Data validator">""</string>
<string name="proxy-Data source">""</string>
<string name="proxy-Data class name">""</string>
<string name="proxy-Data class implementation filename">""</string>
<string name="proxy-Data class header filename">""</string>
<string name="proxy-Data class manager window">""</string>
<bool name="proxy-wxTE_MULTILINE">0</bool>
<bool name="proxy-wxTE_PROCESS_ENTER">0</bool>
<bool name="proxy-wxTE_PROCESS_TAB">0</bool>
<bool name="proxy-wxTE_PASSWORD">0</bool>
<bool name="proxy-wxTE_READONLY">0</bool>
<bool name="proxy-wxTE_RICH">0</bool>
<bool name="proxy-wxTE_RICH2">0</bool>
<bool name="proxy-wxTE_AUTO_URL">0</bool>
<bool name="proxy-wxTE_NOHIDESEL">0</bool>
<bool name="proxy-wxTE_LEFT">0</bool>
<bool name="proxy-wxTE_CENTRE">0</bool>
<bool name="proxy-wxTE_RIGHT">0</bool>
<bool name="proxy-wxHSCROLL">0</bool>
<bool name="proxy-wxTE_CHARWRAP">0</bool>
<bool name="proxy-wxTE_WORDWRAP">0</bool>
<bool name="proxy-wxTE_CAPITALIZE">0</bool>
<bool name="proxy-wxNO_BORDER">0</bool>
<bool name="proxy-wxSIMPLE_BORDER">0</bool>
<bool name="proxy-wxDOUBLE_BORDER">0</bool>
<bool name="proxy-wxSUNKEN_BORDER">0</bool>
<bool name="proxy-wxRAISED_BORDER">0</bool>
<bool name="proxy-wxSTATIC_BORDER">0</bool>
<bool name="proxy-wxWANTS_CHARS">0</bool>
<bool name="proxy-wxNO_FULL_REPAINT_ON_RESIZE">0</bool>
<bool name="proxy-wxFULL_REPAINT_ON_RESIZE">0</bool>
<string name="proxy-Custom styles">""</string>
<long name="proxy-X">-1</long>
<long name="proxy-Y">-1</long>
<long name="proxy-Width">-1</long>
<long name="proxy-Height">-1</long>
<string name="proxy-AlignH">"Expand"</string>
<string name="proxy-AlignV">"Centre"</string>
<long name="proxy-Stretch factor">0</long>
<long name="proxy-Border">5</long>
<bool name="proxy-wxLEFT">1</bool>
<bool name="proxy-wxRIGHT">1</bool>
<bool name="proxy-wxTOP">0</bool>
<bool name="proxy-wxBOTTOM">1</bool>
<bool name="proxy-wxSHAPED">0</bool>
<bool name="proxy-wxADJUST_MINSIZE">0</bool>
<bool name="proxy-wxFIXED_MINSIZE">0</bool>
<string name="proxy-Custom arguments">""</string>
<string name="proxy-Custom ctor arguments">""</string>
</document>
<document>
<string name="title">"Spacer"</string>
<string name="type">"dialog-control-document"</string>
<string name="filename">""</string>
<string name="icon-name">"spacer"</string>
<long name="is-transient">0</long>
<long name="owns-file">1</long>
<long name="title-mode">0</long>
<long name="locked">0</long>
<string name="created">"11/1/2008"</string>
<string name="proxy-type">"wbSpacerProxy"</string>
<long name="proxy-Width">5</long>
<long name="proxy-Height">5</long>
<string name="proxy-AlignH">"Expand"</string>
<string name="proxy-AlignV">"Centre"</string>
<long name="proxy-Stretch factor">0</long>
<long name="proxy-Border">5</long>
<bool name="proxy-wxLEFT">1</bool>
<bool name="proxy-wxRIGHT">1</bool>
<bool name="proxy-wxTOP">1</bool>
<bool name="proxy-wxBOTTOM">1</bool>
<bool name="proxy-wxSHAPED">0</bool>
<bool name="proxy-wxADJUST_MINSIZE">0</bool>
<bool name="proxy-wxFIXED_MINSIZE">0</bool>
<string name="proxy-Platform">"&lt;Any platform&gt;"</string>
</document>
<document>
<string name="title">"wxCheckBox: ID_CHECKBOX_ALLOWS_MICROVIA"</string>
<string name="type">"dialog-control-document"</string>
<string name="filename">""</string>
<string name="icon-name">"checkbox"</string>
<long name="is-transient">0</long>
<long name="owns-file">1</long>
<long name="title-mode">0</long>
<long name="locked">0</long>
<string name="created">"11/1/2008"</string>
<string name="proxy-type">"wbCheckBoxProxy"</string>
<string name="event-handler-0">"wxEVT_COMMAND_CHECKBOX_CLICKED|OnCheckboxAllowsMicroviaClick|NONE||WinEDA_PcbTracksDialog"</string>
<string name="proxy-Id name">"ID_CHECKBOX_ALLOWS_MICROVIA"</string>
<long name="proxy-Id value">10009</long>
<string name="proxy-Name">""</string>
<string name="proxy-Class">"wxCheckBox"</string>
<string name="proxy-Base class">"wxCheckBox"</string>
<bool name="proxy-External implementation">1</bool>
<bool name="proxy-Separate files">0</bool>
<string name="proxy-Implementation filename">""</string>
<string name="proxy-Header filename">""</string>
<string name="proxy-Member variable name">"m_AllowMicroViaCtrl"</string>
<string name="proxy-Label">"Allows Micro Vias"</string>
<bool name="proxy-Initial value">0</bool>
<string name="proxy-Help text">"Allows use of micro vias
They are very small vias only from an external copper layer to its near neightbour
"</string>
<string name="proxy-Tooltip text">""</string>
<string name="proxy-Data variable">"g_DesignSettings.m_MicroViasAllowed"</string>
<string name="proxy-Data validator">"wxGenericValidator(&amp; %VARIABLE%)"</string>
<string name="proxy-Data source">""</string>
<string name="proxy-Data class name">""</string>
<string name="proxy-Data class implementation filename">""</string>
<string name="proxy-Data class header filename">""</string>
<string name="proxy-Data class manager window">""</string>
<string name="proxy-Background colour">""</string>
<string name="proxy-Foreground colour">""</string>
<string name="proxy-Font">""</string>
<bool name="proxy-Hidden">0</bool>
<bool name="proxy-Enabled">1</bool>
<string name="proxy-Platform">"&lt;Any platform&gt;"</string>
<bool name="proxy-wxALIGN_RIGHT">0</bool>
<bool name="proxy-wxCHK_2STATE">0</bool>
<bool name="proxy-wxCHK_3STATE">0</bool>
<bool name="proxy-wxCHK_ALLOW_3RD_STATE_FOR_USER">0</bool>
<bool name="proxy-wxWANTS_CHARS">0</bool>
<bool name="proxy-wxNO_FULL_REPAINT_ON_RESIZE">0</bool>
<bool name="proxy-wxFULL_REPAINT_ON_RESIZE">0</bool>
<string name="proxy-Custom styles">""</string>
<long name="proxy-X">-1</long>
<long name="proxy-Y">-1</long>
<long name="proxy-Width">-1</long>
<long name="proxy-Height">-1</long>
<string name="proxy-AlignH">"Expand"</string>
<string name="proxy-AlignV">"Centre"</string>
<long name="proxy-Stretch factor">0</long>
<long name="proxy-Border">5</long>
<bool name="proxy-wxLEFT">1</bool>
<bool name="proxy-wxRIGHT">1</bool>
<bool name="proxy-wxTOP">1</bool>
<bool name="proxy-wxBOTTOM">1</bool>
<bool name="proxy-wxSHAPED">0</bool>
<bool name="proxy-wxADJUST_MINSIZE">0</bool>
<bool name="proxy-wxFIXED_MINSIZE">0</bool>
<string name="proxy-Custom arguments">""</string>
<string name="proxy-Custom ctor arguments">""</string>
</document>
</document> </document>
<document> <document>
<string name="title">"wxBoxSizer V"</string> <string name="title">"wxBoxSizer V"</string>
@ -1379,20 +1766,86 @@
<string name="proxy-Custom ctor arguments">""</string> <string name="proxy-Custom ctor arguments">""</string>
<bool name="proxy-wxTE_LINEWRAP">0</bool> <bool name="proxy-wxTE_LINEWRAP">0</bool>
</document> </document>
</document>
<document>
<string name="title">"wxBoxSizer V"</string>
<string name="type">"dialog-control-document"</string>
<string name="filename">""</string>
<string name="icon-name">"sizer"</string>
<long name="is-transient">0</long>
<long name="owns-file">1</long>
<long name="title-mode">0</long>
<long name="locked">0</long>
<string name="created">"11/1/2008"</string>
<string name="proxy-type">"wbBoxSizerProxy"</string>
<string name="proxy-Orientation">"Vertical"</string>
<string name="proxy-Member variable name">""</string>
<string name="proxy-AlignH">"Centre"</string>
<string name="proxy-AlignV">"Centre"</string>
<long name="proxy-Stretch factor">0</long>
<long name="proxy-Border">5</long>
<bool name="proxy-wxLEFT">1</bool>
<bool name="proxy-wxRIGHT">1</bool>
<bool name="proxy-wxTOP">1</bool>
<bool name="proxy-wxBOTTOM">1</bool>
<bool name="proxy-wxSHAPED">0</bool>
<bool name="proxy-wxADJUST_MINSIZE">0</bool>
<bool name="proxy-wxFIXED_MINSIZE">0</bool>
<string name="proxy-Platform">"&lt;Any platform&gt;"</string>
<document> <document>
<string name="title">"Spacer"</string> <string name="title">"wxButton: wxID_OK"</string>
<string name="type">"dialog-control-document"</string> <string name="type">"dialog-control-document"</string>
<string name="filename">""</string> <string name="filename">""</string>
<string name="icon-name">"spacer"</string> <string name="icon-name">"dialogcontrol"</string>
<long name="is-transient">0</long> <long name="is-transient">0</long>
<long name="owns-file">1</long> <long name="owns-file">1</long>
<long name="title-mode">0</long> <long name="title-mode">0</long>
<long name="locked">0</long> <long name="locked">0</long>
<string name="created">"24/4/2006"</string> <string name="created">"11/1/2008"</string>
<string name="proxy-type">"wbSpacerProxy"</string> <string name="proxy-type">"wbButtonProxy"</string>
<long name="proxy-Width">5</long> <string name="event-handler-0">"wxEVT_COMMAND_BUTTON_CLICKED|OnOkClick"</string>
<long name="proxy-Height">5</long> <string name="proxy-Id name">"wxID_OK"</string>
<string name="proxy-AlignH">"Centre"</string> <long name="proxy-Id value">5100</long>
<string name="proxy-Name">""</string>
<string name="proxy-Class">"wxButton"</string>
<string name="proxy-Base class">"wxButton"</string>
<bool name="proxy-External implementation">1</bool>
<bool name="proxy-Separate files">0</bool>
<string name="proxy-Implementation filename">""</string>
<string name="proxy-Header filename">""</string>
<string name="proxy-Member variable name">""</string>
<string name="proxy-Label">"&amp;OK"</string>
<bool name="proxy-Default">0</bool>
<string name="proxy-Help text">""</string>
<string name="proxy-Tooltip text">""</string>
<string name="proxy-Data variable">""</string>
<string name="proxy-Data validator">""</string>
<string name="proxy-Data source">""</string>
<string name="proxy-Data class name">""</string>
<string name="proxy-Data class implementation filename">""</string>
<string name="proxy-Data class header filename">""</string>
<string name="proxy-Data class manager window">""</string>
<string name="proxy-Background colour">""</string>
<string name="proxy-Foreground colour">"D20000"</string>
<string name="proxy-Font">""</string>
<bool name="proxy-Hidden">0</bool>
<bool name="proxy-Enabled">1</bool>
<string name="proxy-Platform">"&lt;Any platform&gt;"</string>
<bool name="proxy-wxBU_LEFT">0</bool>
<bool name="proxy-wxBU_RIGHT">0</bool>
<bool name="proxy-wxBU_TOP">0</bool>
<bool name="proxy-wxBU_BOTTOM">0</bool>
<bool name="proxy-wxBU_EXACTFIT">0</bool>
<bool name="proxy-wxNO_BORDER">0</bool>
<bool name="proxy-wxWANTS_CHARS">0</bool>
<bool name="proxy-wxNO_FULL_REPAINT_ON_RESIZE">0</bool>
<bool name="proxy-wxFULL_REPAINT_ON_RESIZE">0</bool>
<string name="proxy-Custom styles">""</string>
<long name="proxy-X">-1</long>
<long name="proxy-Y">-1</long>
<long name="proxy-Width">-1</long>
<long name="proxy-Height">-1</long>
<string name="proxy-AlignH">"Expand"</string>
<string name="proxy-AlignV">"Centre"</string> <string name="proxy-AlignV">"Centre"</string>
<long name="proxy-Stretch factor">0</long> <long name="proxy-Stretch factor">0</long>
<long name="proxy-Border">5</long> <long name="proxy-Border">5</long>
@ -1403,22 +1856,63 @@
<bool name="proxy-wxSHAPED">0</bool> <bool name="proxy-wxSHAPED">0</bool>
<bool name="proxy-wxADJUST_MINSIZE">0</bool> <bool name="proxy-wxADJUST_MINSIZE">0</bool>
<bool name="proxy-wxFIXED_MINSIZE">0</bool> <bool name="proxy-wxFIXED_MINSIZE">0</bool>
<string name="proxy-Platform">"&lt;Any platform&gt;"</string> <string name="proxy-Custom arguments">""</string>
<string name="proxy-Custom ctor arguments">""</string>
</document> </document>
<document> <document>
<string name="title">"wxBoxSizer V"</string> <string name="title">"wxButton: wxID_CANCEL"</string>
<string name="type">"dialog-control-document"</string> <string name="type">"dialog-control-document"</string>
<string name="filename">""</string> <string name="filename">""</string>
<string name="icon-name">"sizer"</string> <string name="icon-name">"dialogcontrol"</string>
<long name="is-transient">0</long> <long name="is-transient">0</long>
<long name="owns-file">1</long> <long name="owns-file">1</long>
<long name="title-mode">0</long> <long name="title-mode">0</long>
<long name="locked">0</long> <long name="locked">0</long>
<string name="created">"25/2/2006"</string> <string name="created">"11/1/2008"</string>
<string name="proxy-type">"wbBoxSizerProxy"</string> <string name="proxy-type">"wbButtonProxy"</string>
<string name="proxy-Orientation">"Vertical"</string> <string name="event-handler-0">"wxEVT_COMMAND_BUTTON_CLICKED|OnCancelClick"</string>
<string name="proxy-Id name">"wxID_CANCEL"</string>
<long name="proxy-Id value">5101</long>
<string name="proxy-Name">""</string>
<string name="proxy-Class">"wxButton"</string>
<string name="proxy-Base class">"wxButton"</string>
<bool name="proxy-External implementation">1</bool>
<bool name="proxy-Separate files">0</bool>
<string name="proxy-Implementation filename">""</string>
<string name="proxy-Header filename">""</string>
<string name="proxy-Member variable name">""</string> <string name="proxy-Member variable name">""</string>
<string name="proxy-AlignH">"Centre"</string> <string name="proxy-Label">"&amp;Cancel"</string>
<bool name="proxy-Default">0</bool>
<string name="proxy-Help text">""</string>
<string name="proxy-Tooltip text">""</string>
<string name="proxy-Data variable">""</string>
<string name="proxy-Data validator">""</string>
<string name="proxy-Data source">""</string>
<string name="proxy-Data class name">""</string>
<string name="proxy-Data class implementation filename">""</string>
<string name="proxy-Data class header filename">""</string>
<string name="proxy-Data class manager window">""</string>
<string name="proxy-Background colour">""</string>
<string name="proxy-Foreground colour">"0000FF"</string>
<string name="proxy-Font">""</string>
<bool name="proxy-Hidden">0</bool>
<bool name="proxy-Enabled">1</bool>
<string name="proxy-Platform">"&lt;Any platform&gt;"</string>
<bool name="proxy-wxBU_LEFT">1</bool>
<bool name="proxy-wxBU_RIGHT">0</bool>
<bool name="proxy-wxBU_TOP">0</bool>
<bool name="proxy-wxBU_BOTTOM">0</bool>
<bool name="proxy-wxBU_EXACTFIT">0</bool>
<bool name="proxy-wxNO_BORDER">0</bool>
<bool name="proxy-wxWANTS_CHARS">0</bool>
<bool name="proxy-wxNO_FULL_REPAINT_ON_RESIZE">0</bool>
<bool name="proxy-wxFULL_REPAINT_ON_RESIZE">0</bool>
<string name="proxy-Custom styles">""</string>
<long name="proxy-X">-1</long>
<long name="proxy-Y">-1</long>
<long name="proxy-Width">-1</long>
<long name="proxy-Height">-1</long>
<string name="proxy-AlignH">"Expand"</string>
<string name="proxy-AlignV">"Centre"</string> <string name="proxy-AlignV">"Centre"</string>
<long name="proxy-Stretch factor">0</long> <long name="proxy-Stretch factor">0</long>
<long name="proxy-Border">5</long> <long name="proxy-Border">5</long>
@ -1429,141 +1923,8 @@
<bool name="proxy-wxSHAPED">0</bool> <bool name="proxy-wxSHAPED">0</bool>
<bool name="proxy-wxADJUST_MINSIZE">0</bool> <bool name="proxy-wxADJUST_MINSIZE">0</bool>
<bool name="proxy-wxFIXED_MINSIZE">0</bool> <bool name="proxy-wxFIXED_MINSIZE">0</bool>
<string name="proxy-Platform">"&lt;Any platform&gt;"</string> <string name="proxy-Custom arguments">""</string>
<document> <string name="proxy-Custom ctor arguments">""</string>
<string name="title">"wxButton: wxID_OK"</string>
<string name="type">"dialog-control-document"</string>
<string name="filename">""</string>
<string name="icon-name">"dialogcontrol"</string>
<long name="is-transient">0</long>
<long name="owns-file">1</long>
<long name="title-mode">0</long>
<long name="locked">0</long>
<string name="created">"25/2/2006"</string>
<string name="proxy-type">"wbButtonProxy"</string>
<string name="event-handler-0">"wxEVT_COMMAND_BUTTON_CLICKED|OnOkClick"</string>
<string name="proxy-Id name">"wxID_OK"</string>
<long name="proxy-Id value">5100</long>
<string name="proxy-Name">""</string>
<string name="proxy-Class">"wxButton"</string>
<string name="proxy-Base class">"wxButton"</string>
<bool name="proxy-External implementation">1</bool>
<bool name="proxy-Separate files">0</bool>
<string name="proxy-Implementation filename">""</string>
<string name="proxy-Header filename">""</string>
<string name="proxy-Member variable name">""</string>
<string name="proxy-Label">"&amp;OK"</string>
<bool name="proxy-Default">0</bool>
<string name="proxy-Help text">""</string>
<string name="proxy-Tooltip text">""</string>
<string name="proxy-Data variable">""</string>
<string name="proxy-Data validator">""</string>
<string name="proxy-Data source">""</string>
<string name="proxy-Data class name">""</string>
<string name="proxy-Data class implementation filename">""</string>
<string name="proxy-Data class header filename">""</string>
<string name="proxy-Data class manager window">""</string>
<string name="proxy-Background colour">""</string>
<string name="proxy-Foreground colour">"D20000"</string>
<string name="proxy-Font">""</string>
<bool name="proxy-Hidden">0</bool>
<bool name="proxy-Enabled">1</bool>
<string name="proxy-Platform">"&lt;Any platform&gt;"</string>
<bool name="proxy-wxBU_LEFT">0</bool>
<bool name="proxy-wxBU_RIGHT">0</bool>
<bool name="proxy-wxBU_TOP">0</bool>
<bool name="proxy-wxBU_BOTTOM">0</bool>
<bool name="proxy-wxBU_EXACTFIT">0</bool>
<bool name="proxy-wxNO_BORDER">0</bool>
<bool name="proxy-wxWANTS_CHARS">0</bool>
<bool name="proxy-wxNO_FULL_REPAINT_ON_RESIZE">0</bool>
<bool name="proxy-wxFULL_REPAINT_ON_RESIZE">0</bool>
<string name="proxy-Custom styles">""</string>
<long name="proxy-X">-1</long>
<long name="proxy-Y">-1</long>
<long name="proxy-Width">-1</long>
<long name="proxy-Height">-1</long>
<string name="proxy-AlignH">"Expand"</string>
<string name="proxy-AlignV">"Centre"</string>
<long name="proxy-Stretch factor">0</long>
<long name="proxy-Border">5</long>
<bool name="proxy-wxLEFT">1</bool>
<bool name="proxy-wxRIGHT">1</bool>
<bool name="proxy-wxTOP">1</bool>
<bool name="proxy-wxBOTTOM">1</bool>
<bool name="proxy-wxSHAPED">0</bool>
<bool name="proxy-wxADJUST_MINSIZE">0</bool>
<bool name="proxy-wxFIXED_MINSIZE">0</bool>
<string name="proxy-Custom arguments">""</string>
<string name="proxy-Custom ctor arguments">""</string>
</document>
<document>
<string name="title">"wxButton: wxID_CANCEL"</string>
<string name="type">"dialog-control-document"</string>
<string name="filename">""</string>
<string name="icon-name">"dialogcontrol"</string>
<long name="is-transient">0</long>
<long name="owns-file">1</long>
<long name="title-mode">0</long>
<long name="locked">0</long>
<string name="created">"25/2/2006"</string>
<string name="proxy-type">"wbButtonProxy"</string>
<string name="event-handler-0">"wxEVT_COMMAND_BUTTON_CLICKED|OnCancelClick"</string>
<string name="proxy-Id name">"wxID_CANCEL"</string>
<long name="proxy-Id value">5101</long>
<string name="proxy-Name">""</string>
<string name="proxy-Class">"wxButton"</string>
<string name="proxy-Base class">"wxButton"</string>
<bool name="proxy-External implementation">1</bool>
<bool name="proxy-Separate files">0</bool>
<string name="proxy-Implementation filename">""</string>
<string name="proxy-Header filename">""</string>
<string name="proxy-Member variable name">""</string>
<string name="proxy-Label">"&amp;Cancel"</string>
<bool name="proxy-Default">0</bool>
<string name="proxy-Help text">""</string>
<string name="proxy-Tooltip text">""</string>
<string name="proxy-Data variable">""</string>
<string name="proxy-Data validator">""</string>
<string name="proxy-Data source">""</string>
<string name="proxy-Data class name">""</string>
<string name="proxy-Data class implementation filename">""</string>
<string name="proxy-Data class header filename">""</string>
<string name="proxy-Data class manager window">""</string>
<string name="proxy-Background colour">""</string>
<string name="proxy-Foreground colour">"0000FF"</string>
<string name="proxy-Font">""</string>
<bool name="proxy-Hidden">0</bool>
<bool name="proxy-Enabled">1</bool>
<string name="proxy-Platform">"&lt;Any platform&gt;"</string>
<bool name="proxy-wxBU_LEFT">1</bool>
<bool name="proxy-wxBU_RIGHT">0</bool>
<bool name="proxy-wxBU_TOP">0</bool>
<bool name="proxy-wxBU_BOTTOM">0</bool>
<bool name="proxy-wxBU_EXACTFIT">0</bool>
<bool name="proxy-wxNO_BORDER">0</bool>
<bool name="proxy-wxWANTS_CHARS">0</bool>
<bool name="proxy-wxNO_FULL_REPAINT_ON_RESIZE">0</bool>
<bool name="proxy-wxFULL_REPAINT_ON_RESIZE">0</bool>
<string name="proxy-Custom styles">""</string>
<long name="proxy-X">-1</long>
<long name="proxy-Y">-1</long>
<long name="proxy-Width">-1</long>
<long name="proxy-Height">-1</long>
<string name="proxy-AlignH">"Expand"</string>
<string name="proxy-AlignV">"Centre"</string>
<long name="proxy-Stretch factor">0</long>
<long name="proxy-Border">5</long>
<bool name="proxy-wxLEFT">1</bool>
<bool name="proxy-wxRIGHT">1</bool>
<bool name="proxy-wxTOP">1</bool>
<bool name="proxy-wxBOTTOM">1</bool>
<bool name="proxy-wxSHAPED">0</bool>
<bool name="proxy-wxADJUST_MINSIZE">0</bool>
<bool name="proxy-wxFIXED_MINSIZE">0</bool>
<string name="proxy-Custom arguments">""</string>
<string name="proxy-Custom ctor arguments">""</string>
</document>
</document> </document>
</document> </document>
</document> </document>

View File

@ -215,8 +215,8 @@ void DRC::testTracks()
if( !doTrackDrc( segm, segm->Next() ) ) if( !doTrackDrc( segm, segm->Next() ) )
{ {
wxASSERT( m_currentMarker ); wxASSERT( m_currentMarker );
m_pcb->Add( m_currentMarker ); m_pcb->Add( m_currentMarker );
m_currentMarker = 0; m_currentMarker = 0;
} }
} }
} }
@ -367,13 +367,25 @@ MARKER* DRC::fillMarker( TRACK* aTrack, BOARD_ITEM* aItem, int aErrorCode, MARKE
if( fillMe ) if( fillMe )
fillMe->SetData( aErrorCode, position, {
if ( aItem )
fillMe->SetData( aErrorCode, position,
textA, aTrack->GetPosition(), textA, aTrack->GetPosition(),
textB, posB ); textB, posB );
else
fillMe->SetData( aErrorCode, position,
textA, aTrack->GetPosition() );
}
else else
fillMe = new MARKER( aErrorCode, position, {
if ( aItem )
fillMe = new MARKER( aErrorCode, position,
textA, aTrack->GetPosition(), textA, aTrack->GetPosition(),
textB, posB ); textB, posB );
else
fillMe = new MARKER( aErrorCode, position,
textA, aTrack->GetPosition() );
}
return fillMe; return fillMe;
} }
@ -421,23 +433,41 @@ bool DRC::doTrackDrc( TRACK* aRefSeg, TRACK* aStart )
m_segmAngle = 0; m_segmAngle = 0;
// @todo: is this necessary? /* Phase 0 : Test vias : */
/**************************************************************/
/* Phase 0 : test if via's hole is bigger than its diameter : */
/**************************************************************/
if( aRefSeg->Type() == TYPEVIA ) if( aRefSeg->Type() == TYPEVIA )
{ {
// test if via's hole is bigger than its diameter
// This test seems necessary since the dialog box that displays the // This test seems necessary since the dialog box that displays the
// desired via hole size and width does not enforce a hole size smaller // desired via hole size and width does not enforce a hole size smaller
// than the via's diameter. // than the via's diameter.
if( aRefSeg->m_Drill > aRefSeg->m_Width ) if( aRefSeg->GetDrillValue() > aRefSeg->m_Width )
{ {
m_currentMarker = fillMarker( aRefSeg, NULL, m_currentMarker = fillMarker( aRefSeg, NULL,
DRCE_VIA_HOLE_BIGGER, m_currentMarker ); DRCE_VIA_HOLE_BIGGER, m_currentMarker );
return false; return false;
} }
// For microvias: test if they are blindvias and only between 2 layers
// because they are used for very small drill size and are drill by laser
// and **only** one layer can be drilled
if( aRefSeg->Shape() == VIA_MICROVIA )
{
int layer1, layer2;
bool err = true;
((SEGVIA*)aRefSeg)->ReturnLayerPair(&layer1, &layer2);
if (layer1> layer2 ) EXCHG(layer1,layer2);
// test:
if (layer1 == COPPER_LAYER_N && layer2 == LAYER_N_2 ) err = false;
if (layer1 == (g_DesignSettings.m_CopperLayerCount - 2 ) && layer2 == LAYER_CMP_N ) err = false;
if ( err )
{
m_currentMarker = fillMarker( aRefSeg, NULL,
DRCE_MICRO_VIA_INCORRECT_LAYER_PAIR, m_currentMarker );
return false;
}
}
} }
// for a non horizontal or vertical segment Compute the segment angle // for a non horizontal or vertical segment Compute the segment angle

View File

@ -34,28 +34,29 @@
/// DRC error codes: /// DRC error codes:
#define DRCE_ 1 // not used yet #define DRCE_ 1 // not used yet
#define DRCE_UNCONNECTED_PADS 2 ///< pads are unconnected #define DRCE_UNCONNECTED_PADS 2 ///< pads are unconnected
#define DRCE_TRACK_NEAR_THROUGH_HOLE 3 ///< thru hole is too close to track #define DRCE_TRACK_NEAR_THROUGH_HOLE 3 ///< thru hole is too close to track
#define DRCE_TRACK_NEAR_PAD 4 ///< pad too close to track #define DRCE_TRACK_NEAR_PAD 4 ///< pad too close to track
#define DRCE_TRACK_NEAR_VIA 5 ///< track too close to via #define DRCE_TRACK_NEAR_VIA 5 ///< track too close to via
#define DRCE_VIA_NEAR_VIA 6 ///< via too close to via #define DRCE_VIA_NEAR_VIA 6 ///< via too close to via
#define DRCE_VIA_NEAR_TRACK 7 ///< via too close to track #define DRCE_VIA_NEAR_TRACK 7 ///< via too close to track
#define DRCE_TRACK_ENDS1 8 ///< @todo say what this problem is #define DRCE_TRACK_ENDS1 8 ///< @todo say what this problem is
#define DRCE_TRACK_ENDS2 9 ///< @todo say what this problem is #define DRCE_TRACK_ENDS2 9 ///< @todo say what this problem is
#define DRCE_TRACK_ENDS3 10 ///< @todo say what this problem is #define DRCE_TRACK_ENDS3 10 ///< @todo say what this problem is
#define DRCE_TRACK_ENDS4 11 ///< @todo say what this problem is #define DRCE_TRACK_ENDS4 11 ///< @todo say what this problem is
#define DRCE_TRACK_UNKNOWN1 12 ///< @todo check source code and change this comment #define DRCE_TRACK_UNKNOWN1 12 ///< @todo check source code and change this comment
#define DRCE_TRACKS_CROSSING 13 ///< tracks are crossing #define DRCE_TRACKS_CROSSING 13 ///< tracks are crossing
#define DRCE_ENDS_PROBLEM1 14 ///< track ends are too close #define DRCE_ENDS_PROBLEM1 14 ///< track ends are too close
#define DRCE_ENDS_PROBLEM2 15 ///< track ends are too close #define DRCE_ENDS_PROBLEM2 15 ///< track ends are too close
#define DRCE_ENDS_PROBLEM3 16 ///< track ends are too close #define DRCE_ENDS_PROBLEM3 16 ///< track ends are too close
#define DRCE_ENDS_PROBLEM4 17 ///< track ends are too close #define DRCE_ENDS_PROBLEM4 17 ///< track ends are too close
#define DRCE_ENDS_PROBLEM5 18 ///< track ends are too close #define DRCE_ENDS_PROBLEM5 18 ///< track ends are too close
#define DRCE_PAD_NEAR_PAD1 19 ///< pad too close to pad #define DRCE_PAD_NEAR_PAD1 19 ///< pad too close to pad
#define DRCE_VIA_HOLE_BIGGER 20 ///< via's hole is bigger than its diameter #define DRCE_VIA_HOLE_BIGGER 20 ///< via's hole is bigger than its diameter
#define COPPERAREA_INSIDE_COPPERAREA 21 ///< copper area outlines intersect #define DRCE_MICRO_VIA_INCORRECT_LAYER_PAIR 21 ///< micro via's layer pair incorrect (layers must be adjacent)
#define COPPERAREA_CLOSE_TO_COPPERAREA 22 ///< copper area outlines are too close #define COPPERAREA_INSIDE_COPPERAREA 22 ///< copper area outlines intersect
#define COPPERAREA_CLOSE_TO_COPPERAREA 23 ///< copper area outlines are too close
/** /**
* Class DRC_ITEM * Class DRC_ITEM
@ -64,48 +65,67 @@
* information held is the board coordinate and the MenuText for each item. * information held is the board coordinate and the MenuText for each item.
* Also held is the type of error by number and the location of the MARKER. * Also held is the type of error by number and the location of the MARKER.
* A function is provided to translate that number into text. * A function is provided to translate that number into text.
* Some errors involve only one item (item with an incorrect param) so m_AsSecondItem is set to false in this case
*/ */
class DRC_ITEM class DRC_ITEM
{ {
protected: protected:
int m_ErrorCode; ///< the error code's numeric value int m_ErrorCode; ///< the error code's numeric value
wxPoint m_Pos; ///< position of the issue wxPoint m_Pos; ///< position of the issue
wxString m_AText; ///< text for the first BOARD_ITEM wxString m_AText; ///< text for the first BOARD_ITEM
wxString m_BText; ///< text for the second BOARD_ITEM wxString m_BText; ///< text for the second BOARD_ITEM
wxPoint m_APos; ///< the location of the first BOARD_ITEM wxPoint m_APos; ///< the location of the first (or main ) BOARD_ITEM
wxPoint m_BPos; ///< the location of the first BOARD_ITEM wxPoint m_BPos; ///< the location of the second BOARD_ITEM
bool m_AsSecondItem; ///< true when 2 items create a DRC error, false if only one item
public: public:
DRC_ITEM() : DRC_ITEM() :
m_ErrorCode(0) m_ErrorCode( 0 )
{ {
} }
DRC_ITEM( int aErrorCode, const wxPoint& aIssuePos,
const wxString& aText, const wxString& bText, DRC_ITEM( int aErrorCode, const wxPoint& aIssuePos,
const wxPoint& aPos, const wxPoint& bPos ) const wxString& aText, const wxString& bText,
const wxPoint& aPos, const wxPoint& bPos )
{ {
SetData( aErrorCode, aIssuePos, SetData( aErrorCode, aIssuePos,
aText, bText, aText, bText,
aPos, bPos ); aPos, bPos );
} }
void SetData( int aErrorCode, const wxPoint& aIssuePos, DRC_ITEM( int aErrorCode, const wxPoint& aIssuePos,
const wxString& aText, const wxString& bText, const wxString& aText, const wxPoint& aPos )
const wxPoint& aPos, const wxPoint& bPos ) {
SetData( aErrorCode, aIssuePos, aText, aPos );
}
void SetData( int aErrorCode, const wxPoint& aIssuePos,
const wxString& aText, const wxPoint& aPos )
{
SetData( aErrorCode, aIssuePos,
aText, aText,
aPos, aPos );
m_AsSecondItem = false;
}
void SetData( int aErrorCode, const wxPoint& aIssuePos,
const wxString& aText, const wxString& bText,
const wxPoint& aPos, const wxPoint& bPos )
{ {
m_ErrorCode = aErrorCode; m_ErrorCode = aErrorCode;
m_Pos = aIssuePos; m_Pos = aIssuePos;
m_AText = aText; m_AText = aText;
m_BText = bText; m_BText = bText;
m_APos = aPos; m_APos = aPos;
m_BPos = bPos; m_BPos = bPos;
m_AsSecondItem = true;
} }
bool AsSecondItem(void) const { return m_AsSecondItem; }
/** /**
* Function ShowHtml * Function ShowHtml
* translates this object into a fragment of HTML suitable for the * translates this object into a fragment of HTML suitable for the
@ -118,16 +138,16 @@ public:
// an html fragment for the entire message in the listbox. feel free // an html fragment for the entire message in the listbox. feel free
// to add color if you want: // to add color if you want:
ret.Printf( _("ErrType(%d): <b>%s</b><ul><li> %s: %s </li><li> %s: %s </li></ul>"), ret.Printf( _( "ErrType(%d): <b>%s</b><ul><li> %s: %s </li><li> %s: %s </li></ul>" ),
m_ErrorCode, m_ErrorCode,
GetErrorText().GetData(), GetErrorText().GetData(),
ShowCoord( m_APos ).GetData(), m_AText.GetData(), ShowCoord( m_APos ).GetData(), m_AText.GetData(),
ShowCoord( m_BPos ).GetData(), m_BText.GetData() ); ShowCoord( m_BPos ).GetData(), m_BText.GetData() );
return ret; return ret;
} }
/** /**
* Function ShowReport * Function ShowReport
* translates this object into a text string suitable for saving * translates this object into a text string suitable for saving
@ -138,15 +158,16 @@ public:
{ {
wxString ret; wxString ret;
ret.Printf( wxT("ErrType(%d): %s\n %s: %s\n %s: %s\n"), ret.Printf( wxT( "ErrType(%d): %s\n %s: %s\n %s: %s\n" ),
m_ErrorCode, m_ErrorCode,
GetErrorText().GetData(), GetErrorText().GetData(),
ShowCoord( m_APos ).GetData(), m_AText.GetData(), ShowCoord( m_APos ).GetData(), m_AText.GetData(),
ShowCoord( m_BPos ).GetData(), m_BText.GetData() ); ShowCoord( m_BPos ).GetData(), m_BText.GetData() );
return ret; return ret;
} }
/** /**
* Function GetErrorCode * Function GetErrorCode
* returns the error code. * returns the error code.
@ -156,7 +177,7 @@ public:
return m_ErrorCode; return m_ErrorCode;
} }
/** /**
* Function GetErrorText * Function GetErrorText
* returns the string form of a drc error code. * returns the string form of a drc error code.
@ -167,33 +188,37 @@ public:
{ {
return m_AText; return m_AText;
} }
const wxString& GetTextB() const const wxString& GetTextB() const
{ {
return m_BText; return m_BText;
} }
const wxPoint& GetPointA() const const wxPoint& GetPointA() const
{ {
return m_APos; return m_APos;
} }
const wxPoint& GetPointB() const
const wxPoint& GetPointB() const
{ {
return m_BPos; return m_BPos;
} }
/** /**
* Function GetPosition * Function GetPosition
* @return wxPoint& - the position of this report item within * @return wxPoint& - the position of this report item within
* the drawing. * the drawing.
*/ */
const wxPoint& GetPosition() const const wxPoint& GetPosition() const
{ {
return m_Pos; return m_Pos;
} }
/** /**
* Function ShowCoord * Function ShowCoord
* formats a coordinate or position to text. * formats a coordinate or position to text.
@ -225,7 +250,7 @@ public:
* removes and deletes all the items in the list. * removes and deletes all the items in the list.
*/ */
virtual void DeleteAllItems() = 0; virtual void DeleteAllItems() = 0;
/** /**
* Function GetItem * Function GetItem
* retrieves a DRC_ITEM by pointer. The actual item remains owned by the * retrieves a DRC_ITEM by pointer. The actual item remains owned by the
@ -233,12 +258,12 @@ public:
* @param aIndex The 0 based index into the list of the desired item. * @param aIndex The 0 based index into the list of the desired item.
* @return const DRC_ITEM* - the desired item or NULL if aIndex is out of range. * @return const DRC_ITEM* - the desired item or NULL if aIndex is out of range.
*/ */
virtual const DRC_ITEM* GetItem( int aIndex ) = 0; virtual const DRC_ITEM* GetItem( int aIndex ) = 0;
/** /**
* Function DeleteAllItems * Function DeleteAllItems
* removes and deletes desired item from the list. * removes and deletes desired item from the list.
* @param aIndex The 0 based index into the list of the desired item which * @param aIndex The 0 based index into the list of the desired item which
* is to be deleted. * is to be deleted.
*/ */
virtual void DeleteItem( int aIndex ) = 0; virtual void DeleteItem( int aIndex ) = 0;
@ -247,13 +272,13 @@ public:
* Function GetCount * Function GetCount
* returns the number of items in the list. * returns the number of items in the list.
*/ */
virtual int GetCount() = 0; virtual int GetCount() = 0;
virtual ~DRC_ITEM_LIST() {} virtual ~DRC_ITEM_LIST() { }
}; };
typedef std::vector<DRC_ITEM*> DRC_LIST; typedef std::vector<DRC_ITEM*> DRC_LIST;
/** /**
@ -264,88 +289,89 @@ typedef std::vector<DRC_ITEM*> DRC_LIST;
* be sent to a text file on disk. * be sent to a text file on disk.
* This class is given access to the windows and the BOARD * This class is given access to the windows and the BOARD
* that it needs via its constructor or public access functions. * that it needs via its constructor or public access functions.
*/ */
class DRC class DRC
{ {
friend class DrcDialog; friend class DrcDialog;
private:
// protected or private functions() are lowercase first character.
bool m_doPad2PadTest;
bool m_doUnconnectedTest;
bool m_doZonesTest;
bool m_doCreateRptFile;
wxString m_rptFilename;
// int m_errorCount;
MARKER* m_currentMarker;
bool m_aboartDRC;
bool m_drcInProgress;
int m_spotcx;
int m_spotcy;
int m_finx;
int m_finy; // coord relatives de l'extremite du segm de reference
int m_segmAngle; // angle d'inclinaison du segment de reference en 0,1 degre
int m_segmLength; // length of the reference segment
int m_xcliplo;
int m_ycliplo;
int m_xcliphi;
int m_ycliphi; // coord de la surface de securite du segment a comparer
WinEDA_PcbFrame* m_mainWindow;
WinEDA_DrawPanel* m_drawPanel;
BOARD* m_pcb;
DrcDialog* m_ui;
DRC_LIST m_unconnected; ///< list of unconnected pads, as DRC_ITEMs private:
// protected or private functions() are lowercase first character.
/**
bool m_doPad2PadTest;
bool m_doUnconnectedTest;
bool m_doZonesTest;
bool m_doCreateRptFile;
wxString m_rptFilename;
// int m_errorCount;
MARKER* m_currentMarker;
bool m_aboartDRC;
bool m_drcInProgress;
int m_spotcx;
int m_spotcy;
int m_finx;
int m_finy; // coord relatives de l'extremite du segm de reference
int m_segmAngle; // angle d'inclinaison du segment de reference en 0,1 degre
int m_segmLength; // length of the reference segment
int m_xcliplo;
int m_ycliplo;
int m_xcliphi;
int m_ycliphi; // coord de la surface de securite du segment a comparer
WinEDA_PcbFrame* m_mainWindow;
WinEDA_DrawPanel* m_drawPanel;
BOARD* m_pcb;
DrcDialog* m_ui;
DRC_LIST m_unconnected; ///< list of unconnected pads, as DRC_ITEMs
/**
* Function updatePointers * Function updatePointers
* is a private helper function used to update needed pointers from the * is a private helper function used to update needed pointers from the
* one pointer which is known not to change, m_mainWindow. * one pointer which is known not to change, m_mainWindow.
*/ */
void updatePointers(); void updatePointers();
/** /**
* Function fillMarker * Function fillMarker
* optionally creates a marker and fills it in with information, * optionally creates a marker and fills it in with information,
* but does not add it to the BOARD. Use this to report any kind of * but does not add it to the BOARD. Use this to report any kind of
* DRC problem, or unconnected pad problem. * DRC problem, or unconnected pad problem.
* *
* @param aTrack The reference track * @param aTrack The reference track
* @param aItem Another item on the BOARD, such as a SEGVIA, SEGZONE, * @param aItem Another item on the BOARD, such as a SEGVIA, SEGZONE,
* or TRACK. * or TRACK.
* @param aErrorCode A categorizing identifier for the particular type * @param aErrorCode A categorizing identifier for the particular type
* of error that is being reported. * of error that is being reported.
* @param fillMe A MARKER* which is to be filled in, or NULL if one is to * @param fillMe A MARKER* which is to be filled in, or NULL if one is to
* first be allocated, then filled. * first be allocated, then filled.
*/ */
MARKER* fillMarker( TRACK* aTrack, BOARD_ITEM* aItem, int aErrorCode, MARKER* fillMe ); MARKER* fillMarker( TRACK* aTrack, BOARD_ITEM* aItem, int aErrorCode, MARKER* fillMe );
MARKER* fillMarker( D_PAD* aPad, D_PAD* bPad, int aErrorCode, MARKER* fillMe ); MARKER* fillMarker( D_PAD* aPad, D_PAD* bPad, int aErrorCode, MARKER* fillMe );
//-----<categorical group tests>-----------------------------------------
void testTracks();
void testPad2Pad();
void testUnconnected(); //-----<categorical group tests>-----------------------------------------
void testZones(); void testTracks();
void testPad2Pad();
void testUnconnected();
void testZones();
//-----<single "item" tests>-----------------------------------------
//-----<single "item" tests>-----------------------------------------
/** /**
* Function doPadToPadsDrc * Function doPadToPadsDrc
* tests the clearance between aRefPad and other pads. * tests the clearance between aRefPad and other pads.
@ -355,18 +381,18 @@ private:
* @param aEnd Marks the end of the list and is not included * @param aEnd Marks the end of the list and is not included
* @param max_size The size of the biggest pad (used to stop the test when the X distance is > max_size) * @param max_size The size of the biggest pad (used to stop the test when the X distance is > max_size)
*/ */
bool doPadToPadsDrc( D_PAD* aRefPad, LISTE_PAD* aStart, bool doPadToPadsDrc( D_PAD* aRefPad, LISTE_PAD* aStart,
LISTE_PAD* aEnd, int max_size ); LISTE_PAD* aEnd, int max_size );
/** /**
* Function DoTrackDrc * Function DoTrackDrc
* tests the current segment. * tests the current segment.
* @param aRefSeg The segment to test * @param aRefSeg The segment to test
* @param aStart The head of a list of tracks to test against (usually BOARD::m_Track) * @param aStart The head of a list of tracks to test against (usually BOARD::m_Track)
* @return bool - true if no poblems, else false and m_currentMarker is * @return bool - true if no poblems, else false and m_currentMarker is
* filled in with the problem information. * filled in with the problem information.
*/ */
bool doTrackDrc( TRACK* aRefSeg, TRACK* aStart ); bool doTrackDrc( TRACK* aRefSeg, TRACK* aStart );
//-----<single tests>---------------------------------------------- //-----<single tests>----------------------------------------------
@ -377,9 +403,9 @@ private:
* @param aPad Another pad to check against * @param aPad Another pad to check against
* @return bool - true if clearance between aRefPad and pad is >= dist_min, else false * @return bool - true if clearance between aRefPad and pad is >= dist_min, else false
*/ */
bool checkClearancePadToPad( D_PAD* aRefPad, D_PAD* aPad, const int dist_min ); bool checkClearancePadToPad( D_PAD* aRefPad, D_PAD* aPad, const int dist_min );
/** /**
* Function checkClearanceSegmToPad * Function checkClearanceSegmToPad
* check the distance from a pad to segment. This function uses several * check the distance from a pad to segment. This function uses several
@ -390,30 +416,30 @@ private:
* spot_cX, spot_cY = position of pad / origin of segment * spot_cX, spot_cY = position of pad / origin of segment
* @param pad_to_test Is the pad involved in the check * @param pad_to_test Is the pad involved in the check
* @param w_segm Hhalf width of the segment to test * @param w_segm Hhalf width of the segment to test
* @param dist_min Is the minimum clearance needed * @param dist_min Is the minimum clearance needed
* *
* @return false distance >= dist_min, * @return false distance >= dist_min,
* true if distance < dist_min * true if distance < dist_min
*/ */
bool checkClearanceSegmToPad( const D_PAD* pad_to_test, int w_segm, int dist_min ); bool checkClearanceSegmToPad( const D_PAD* pad_to_test, int w_segm, int dist_min );
/** /**
* Function checkMarginToCircle * Function checkMarginToCircle
* @todo this translation is no good, fix this: * @todo this translation is no good, fix this:
* calculates the distance from a circle (via or round end of track) to the * calculates the distance from a circle (via or round end of track) to the
* segment of reference on the right hand side. * segment of reference on the right hand side.
* *
* @param cx The x coordinate of the circle's center * @param cx The x coordinate of the circle's center
* @param cy The y coordinate of the circle's center * @param cy The y coordinate of the circle's center
* @param radius A "keep out" radius centered over the circle * @param radius A "keep out" radius centered over the circle
* @param length The length of the segment (i.e. coordinate of end) * @param length The length of the segment (i.e. coordinate of end)
* @return bool - true if distance >= radius, else * @return bool - true if distance >= radius, else
* false when distance < radius * false when distance < radius
*/ */
static bool checkMarginToCircle( int cx, int cy, int radius, int length ); static bool checkMarginToCircle( int cx, int cy, int radius, int length );
/** /**
* Function checkLine * Function checkLine
* tests to see if one track is in contact with another track. * tests to see if one track is in contact with another track.
@ -422,15 +448,15 @@ private:
* dans le cadre (xcliplo,ycliplo xcliphi,ycliphi) (variables globales, * dans le cadre (xcliplo,ycliplo xcliphi,ycliphi) (variables globales,
* locales a ce fichier) * locales a ce fichier)
*/ */
bool checkLine( int x1, int y1, int x2, int y2 ); bool checkLine( int x1, int y1, int x2, int y2 );
//-----</single tests>--------------------------------------------- //-----</single tests>---------------------------------------------
public: public:
DRC( WinEDA_PcbFrame* aPcbWindow ); DRC( WinEDA_PcbFrame* aPcbWindow );
~DRC(); ~DRC();
/** /**
* Function Drc * Function Drc
* tests the current segment and returns the result and displays the error * tests the current segment and returns the result and displays the error
@ -441,10 +467,10 @@ public:
*/ */
int Drc( TRACK* aRefSeg, TRACK* aList ); int Drc( TRACK* aRefSeg, TRACK* aList );
/** /**
* Function DrcBlind * Function DrcBlind
* tests the current segment and returns the result. Any error is not * tests the current segment and returns the result. Any error is not
* displayed in the status panel. * displayed in the status panel.
* @param aRefSeg The current segment to test. * @param aRefSeg The current segment to test.
* @param aList The track list to test (usually m_Pcb->m_Track) * @param aList The track list to test (usually m_Pcb->m_Track)
@ -453,18 +479,18 @@ public:
int DrcBlind( TRACK* aRefSeg, TRACK* aList ) int DrcBlind( TRACK* aRefSeg, TRACK* aList )
{ {
updatePointers(); updatePointers();
return doTrackDrc( aRefSeg, aList ) ? OK_DRC : BAD_DRC; return doTrackDrc( aRefSeg, aList ) ? OK_DRC : BAD_DRC;
} }
/** /**
* Function ShowDialog * Function ShowDialog
* opens a dialog and prompts the user, then if a test run button is * opens a dialog and prompts the user, then if a test run button is
* clicked, runs the test(s) and creates the MARKERS. The dialog is only * clicked, runs the test(s) and creates the MARKERS. The dialog is only
* created if it is not already in existence. * created if it is not already in existence.
*/ */
void ShowDialog(); void ShowDialog();
/** /**
@ -473,9 +499,9 @@ public:
* the state of the dialog's existence. * the state of the dialog's existence.
* @param aReason Indication of which button was clicked to cause the destruction. * @param aReason Indication of which button was clicked to cause the destruction.
*/ */
void DestroyDialog( int aReason ); void DestroyDialog( int aReason );
/** /**
* Function SetSettings * Function SetSettings
* saves all the UI or test settings and may be called before running the tests. * saves all the UI or test settings and may be called before running the tests.
@ -483,38 +509,36 @@ public:
* @param aUnconnectedTest Tells whether to list unconnected pads. * @param aUnconnectedTest Tells whether to list unconnected pads.
* @param aZonesTest Tells whether to test zones. * @param aZonesTest Tells whether to test zones.
* @param aReportName A string telling the disk file report name entered. * @param aReportName A string telling the disk file report name entered.
* @param aSaveReport A boolean telling whether to generate disk file report. * @param aSaveReport A boolean telling whether to generate disk file report.
*/ */
void SetSettings( bool aPad2PadTest, bool aUnconnectedTest, void SetSettings( bool aPad2PadTest, bool aUnconnectedTest,
bool aZonesTest, const wxString& aReportName, bool aSaveReport ) bool aZonesTest, const wxString& aReportName, bool aSaveReport )
{ {
m_doPad2PadTest = aPad2PadTest; m_doPad2PadTest = aPad2PadTest;
m_doUnconnectedTest = aUnconnectedTest; m_doUnconnectedTest = aUnconnectedTest;
m_doZonesTest = aZonesTest; m_doZonesTest = aZonesTest;
m_rptFilename = aReportName; m_rptFilename = aReportName;
m_doCreateRptFile = aSaveReport; m_doCreateRptFile = aSaveReport;
} }
/** /**
* Function RunTests * Function RunTests
* will actually run all the tests specified with a previous call to * will actually run all the tests specified with a previous call to
* SetSettings() * SetSettings()
*/ */
void RunTests(); void RunTests();
/** /**
* Function ListUnconnectedPad * Function ListUnconnectedPad
* gathers a list of all the unconnected pads and shows them in the * gathers a list of all the unconnected pads and shows them in the
* dialog, and optionally prints a report of such. * dialog, and optionally prints a report of such.
*/ */
void ListUnconnectedPads(); void ListUnconnectedPads();
}; };
#endif // _DRC_STUFF_H #endif // _DRC_STUFF_H
//EOF //EOF

View File

@ -61,6 +61,7 @@ void WinEDA_PcbFrame::Process_Special_Functions( wxCommandEvent& event )
case ID_POPUP_PCB_STOP_CURRENT_DRAWING: case ID_POPUP_PCB_STOP_CURRENT_DRAWING:
case ID_POPUP_PCB_END_TRACK: case ID_POPUP_PCB_END_TRACK:
case ID_POPUP_PCB_PLACE_VIA: case ID_POPUP_PCB_PLACE_VIA:
case ID_POPUP_PCB_PLACE_MICROVIA:
case ID_POPUP_PCB_IMPORT_PAD_SETTINGS: case ID_POPUP_PCB_IMPORT_PAD_SETTINGS:
case ID_POPUP_PCB_EXPORT_PAD_SETTINGS: case ID_POPUP_PCB_EXPORT_PAD_SETTINGS:
case ID_POPUP_PCB_GLOBAL_IMPORT_PAD_SETTINGS: case ID_POPUP_PCB_GLOBAL_IMPORT_PAD_SETTINGS:
@ -372,6 +373,9 @@ void WinEDA_PcbFrame::Process_Special_Functions( wxCommandEvent& event )
} }
break; break;
case ID_POPUP_PCB_PLACE_MICROVIA:
if ( ! GetScreen()->IsMicroViaAcceptable() )
break;
case ID_POPUP_PCB_PLACE_VIA: case ID_POPUP_PCB_PLACE_VIA:
DrawPanel->MouseToCursorSchema(); DrawPanel->MouseToCursorSchema();
if( GetCurItem()->m_Flags & IS_DRAGGED ) if( GetCurItem()->m_Flags & IS_DRAGGED )
@ -380,13 +384,17 @@ void WinEDA_PcbFrame::Process_Special_Functions( wxCommandEvent& event )
} }
else else
{ {
int v_type = g_DesignSettings.m_CurrentViaType;
if ( id == ID_POPUP_PCB_PLACE_MICROVIA )
g_DesignSettings.m_CurrentViaType = VIA_MICROVIA; // place micro via and switch layer
Other_Layer_Route( (TRACK*) GetCurItem(), &dc ); Other_Layer_Route( (TRACK*) GetCurItem(), &dc );
g_DesignSettings.m_CurrentViaType = v_type;
if( DisplayOpt.ContrastModeDisplay ) if( DisplayOpt.ContrastModeDisplay )
GetScreen()->SetRefreshReq(); GetScreen()->SetRefreshReq();
} }
break; break;
case ID_POPUP_PCB_DELETE_TRACKSEG: case ID_POPUP_PCB_DELETE_TRACKSEG:
if( GetCurItem() == NULL ) if( GetCurItem() == NULL )
break; break;
DrawPanel->MouseToCursorSchema(); DrawPanel->MouseToCursorSchema();

View File

@ -34,6 +34,8 @@ int WinEDA_PcbFrame::Edit_TrackSegm_Width( wxDC* DC, TRACK* pt_segm )
if( pt_segm->Type() == TYPEVIA ) if( pt_segm->Type() == TYPEVIA )
{ {
consigne = pt_segm->m_Width = g_DesignSettings.m_CurrentViaSize; consigne = pt_segm->m_Width = g_DesignSettings.m_CurrentViaSize;
if ( pt_segm->m_Shape == VIA_MICROVIA )
consigne = pt_segm->m_Width = g_DesignSettings.m_CurrentMicroViaSize;
} }
if( old_w < consigne ) /* DRC utile puisque augm de dimension */ if( old_w < consigne ) /* DRC utile puisque augm de dimension */

View File

@ -210,11 +210,10 @@ bool WinEDA_PcbFrame::Other_Layer_Route( TRACK* track, wxDC* DC )
/* create the via */ /* create the via */
Via = new SEGVIA( m_Pcb ); Via = new SEGVIA( m_Pcb );
Via->m_Flags = IS_NEW; Via->m_Flags = IS_NEW;
Via->m_Width = g_DesignSettings.m_CurrentViaSize;
Via->m_Shape = g_DesignSettings.m_CurrentViaType; Via->m_Shape = g_DesignSettings.m_CurrentViaType;
Via->m_Width = g_DesignSettings.m_CurrentViaSize;
Via->SetNet( g_HightLigth_NetCode ); Via->SetNet( g_HightLigth_NetCode );
Via->m_Start = Via->m_End = g_CurrentTrackSegment->m_End; Via->m_Start = Via->m_End = g_CurrentTrackSegment->m_End;
int old_layer = GetScreen()->m_Active_Layer; int old_layer = GetScreen()->m_Active_Layer;
//swap the layers. //swap the layers.
@ -224,21 +223,30 @@ bool WinEDA_PcbFrame::Other_Layer_Route( TRACK* track, wxDC* DC )
GetScreen()->m_Active_Layer = GetScreen()->m_Route_Layer_BOTTOM; GetScreen()->m_Active_Layer = GetScreen()->m_Route_Layer_BOTTOM;
/* Adjust the via layer pair */ /* Adjust the via layer pair */
if( Via->Shape() == VIA_BURIED ) switch ( Via->Shape() )
{ {
Via->SetLayerPair( old_layer, GetScreen()->m_Active_Layer ); case VIA_BLIND_BURIED:
} Via->SetLayerPair( old_layer, GetScreen()->m_Active_Layer );
break;
case VIA_MICROVIA: // from external to the near neghbour inner layer
if ( old_layer == COPPER_LAYER_N )
GetScreen()->m_Active_Layer = LAYER_N_2;
else if ( old_layer == LAYER_CMP_N )
GetScreen()->m_Active_Layer = m_Pcb->m_BoardSettings->m_CopperLayerCount - 2;
else if ( old_layer == LAYER_N_2 )
GetScreen()->m_Active_Layer = COPPER_LAYER_N;
else if ( old_layer == m_Pcb->m_BoardSettings->m_CopperLayerCount - 2 )
GetScreen()->m_Active_Layer = LAYER_CMP_N;
// else error
Via->SetLayerPair( old_layer, GetScreen()->m_Active_Layer );
Via->m_Width = g_DesignSettings.m_CurrentMicroViaSize;
break;
else if( Via->Shape() == VIA_BLIND ) //blind via default:
{ // Usual via is from copper to component; layer pair is 0 and 0x0F.
// A revoir! ( la via devrait deboucher sur 1 cote ) Via->SetLayerPair( COPPER_LAYER_N, LAYER_CMP_N );
Via->SetLayerPair( old_layer, GetScreen()->m_Active_Layer ); break;
}
else
{
// Usual via is from copper to component; layer pair is 0 and 0x0F.
Via->SetLayerPair( COPPER_LAYER_N, LAYER_CMP_N );
} }
if( Drc_On && BAD_DRC==m_drc->Drc( Via, m_Pcb->m_Track ) ) if( Drc_On && BAD_DRC==m_drc->Drc( Via, m_Pcb->m_Track ) )

View File

@ -469,7 +469,7 @@ void WinEDA_DrillFrame::UpdatePrecisionOptions( wxCommandEvent& event )
int WinEDA_DrillFrame::Gen_Drill_File_EXCELLON( FORET* buffer ) int WinEDA_DrillFrame::Gen_Drill_File_EXCELLON( FORET* buffer )
/***************************************************************/ /***************************************************************/
/* Create the drill file in EXECELLON format /* Create the drill file in EXCELLON format
* Return hole count * Return hole count
* buffer: Drill tools list * buffer: Drill tools list
*/ */
@ -497,10 +497,10 @@ int WinEDA_DrillFrame::Gen_Drill_File_EXCELLON( FORET* buffer )
{ {
if( pt_piste->Type() != TYPEVIA ) if( pt_piste->Type() != TYPEVIA )
continue; continue;
if( pt_piste->m_Drill == 0 ) int via_drill = pt_piste->GetDrillValue();
if( via_drill == 0 )
continue; continue;
int via_drill = ( pt_piste->m_Drill <
0 ) ? g_DesignSettings.m_ViaDrill : pt_piste->m_Drill;
if( foret->m_Diameter != via_drill ) if( foret->m_Diameter != via_drill )
continue; continue;
@ -789,11 +789,9 @@ int WinEDA_DrillFrame::Gen_Liste_Forets( FORET* buffer, bool print_header )
{ {
if( pt_piste->Type() != TYPEVIA ) if( pt_piste->Type() != TYPEVIA )
continue; continue;
if( pt_piste->m_Drill == 0 ) int via_drill = pt_piste->GetDrillValue();
if( via_drill == 0 )
continue; continue;
int via_drill = g_DesignSettings.m_ViaDrill;
if( pt_piste->m_Drill > 0 ) // Drill value is not the default value
via_drill = pt_piste->m_Drill;
foret = GetOrAddForet( buffer, via_drill ); foret = GetOrAddForet( buffer, via_drill );
if( foret ) if( foret )
foret->m_TotalCount++; foret->m_TotalCount++;
@ -1343,9 +1341,7 @@ int WinEDA_DrillFrame::Plot_Drill_PcbMap( FORET* buffer, int format )
{ {
if( pt_piste->Type() != TYPEVIA ) if( pt_piste->Type() != TYPEVIA )
continue; continue;
int via_drill = g_DesignSettings.m_ViaDrill; int via_drill = pt_piste->GetDrillValue();
if( pt_piste->m_Drill >= 0 )
via_drill = pt_piste->m_Drill;
if( via_drill != foret->m_Diameter ) if( via_drill != foret->m_Diameter )
continue; continue;
pos = pt_piste->m_Start; pos = pt_piste->m_Start;

View File

@ -69,7 +69,8 @@ static Ki_HotkeyInfo HkSavefile( wxT( "Save board" ), HK_SAVE_BOARD, 'S' + GR_KB
static Ki_HotkeyInfo HkLoadfile( wxT( "Load board" ), HK_LOAD_BOARD, 'L' + GR_KB_CTRL ); static Ki_HotkeyInfo HkLoadfile( wxT( "Load board" ), HK_LOAD_BOARD, 'L' + GR_KB_CTRL );
static Ki_HotkeyInfo HkFindItem( wxT( "Find Item" ), HK_FIND_ITEM, 'F' + GR_KB_CTRL ); static Ki_HotkeyInfo HkFindItem( wxT( "Find Item" ), HK_FIND_ITEM, 'F' + GR_KB_CTRL );
static Ki_HotkeyInfo HkBackspace( wxT( "Delete track segment" ), HK_BACK_SPACE, WXK_BACK ); static Ki_HotkeyInfo HkBackspace( wxT( "Delete track segment" ), HK_BACK_SPACE, WXK_BACK );
static Ki_HotkeyInfo HkAddVia( wxT( "Add Via" ), HK_ADD_VIA, 'V' ); static Ki_HotkeyInfo HkAddMicroVia( wxT( "Add Via" ), HK_ADD_VIA, 'V' );
static Ki_HotkeyInfo HkAddVia( wxT( "Add MicroVia" ), HK_ADD_MICROVIA, 'V' + GR_KB_CTRL );
static Ki_HotkeyInfo HkEndTrack( wxT( "End Track" ), HK_END_TRACK, WXK_END ); static Ki_HotkeyInfo HkEndTrack( wxT( "End Track" ), HK_END_TRACK, WXK_END );
static Ki_HotkeyInfo HkFlipFootprint( wxT( "Flip Footprint" ), HK_FLIP_FOOTPRINT, 'F' ); static Ki_HotkeyInfo HkFlipFootprint( wxT( "Flip Footprint" ), HK_FLIP_FOOTPRINT, 'F' );
static Ki_HotkeyInfo HkRotateFootprint( wxT( "Rotate Footprint" ), HK_ROTATE_FOOTPRINT, 'R' ); static Ki_HotkeyInfo HkRotateFootprint( wxT( "Rotate Footprint" ), HK_ROTATE_FOOTPRINT, 'R' );
@ -105,7 +106,9 @@ Ki_HotkeyInfo* s_Common_Hotkey_List[] = {
Ki_HotkeyInfo* s_board_edit_Hotkey_List[] = { Ki_HotkeyInfo* s_board_edit_Hotkey_List[] = {
&HkTrackDisplayMode, &HkTrackDisplayMode,
&HkDelete, &HkBackspace, &HkDelete, &HkBackspace,
&HkAddVia, &HkEndTrack, &HkAddVia,
&HkAddMicroVia,
&HkEndTrack,
&HkMoveFootprint, &HkFlipFootprint, &HkMoveFootprint, &HkFlipFootprint,
&HkRotateFootprint, &HkDragFootprint, &HkRotateFootprint, &HkDragFootprint,
&HkGetAndMoveFootprint, &HkGetAndMoveFootprint,
@ -382,6 +385,28 @@ void WinEDA_PcbFrame::OnHotKey( wxDC* DC, int hotkey,
} }
break; break;
case HK_ADD_MICROVIA: // Place a micro via if a track is in progress
if( m_ID_current_state != ID_TRACK_BUTT )
return;
if( ItemFree ) // no track in progress: nothing to do
break;
if( GetCurItem()->Type() != TYPETRACK ) // Should not occur
return;
if( (GetCurItem()->m_Flags & IS_NEW) == 0 )
return;
// place micro via and switch layer
if ( GetScreen()->IsMicroViaAcceptable() )
{
int v_type = g_DesignSettings.m_CurrentViaType;
g_DesignSettings.m_CurrentViaType = VIA_MICROVIA;
Other_Layer_Route( (TRACK*) GetCurItem(), DC );
g_DesignSettings.m_CurrentViaType = v_type;
if( DisplayOpt.ContrastModeDisplay )
GetScreen()->SetRefreshReq();
}
break;
case HK_ADD_VIA: // Switch to alternate layer and Place a via if a track is in progress case HK_ADD_VIA: // Switch to alternate layer and Place a via if a track is in progress
if( m_ID_current_state != ID_TRACK_BUTT ) if( m_ID_current_state != ID_TRACK_BUTT )
return; return;

View File

@ -22,7 +22,9 @@ enum hotkey_id_commnand {
HK_FLIP_FOOTPRINT, HK_FLIP_FOOTPRINT,
HK_GET_AND_MOVE_FOOTPRINT, HK_GET_AND_MOVE_FOOTPRINT,
HK_LOCK_UNLOCK_FOOTPRINT, HK_LOCK_UNLOCK_FOOTPRINT,
HK_ADD_VIA, HK_END_TRACK, HK_ADD_VIA,
HK_ADD_MICROVIA,
HK_END_TRACK,
HK_SAVE_BOARD, HK_LOAD_BOARD, HK_SAVE_BOARD, HK_LOAD_BOARD,
HK_SWITCH_UNITS, HK_SWITCH_UNITS,
HK_SWITCH_TRACK_DISPLAY_MODE, HK_SWITCH_TRACK_DISPLAY_MODE,

View File

@ -88,7 +88,7 @@ int WinEDA_BasePcbFrame::ReadListeSegmentDescr( FILE* File,
* @return items count or - count if no end block ($End...) found. * @return items count or - count if no end block ($End...) found.
*/ */
{ {
int shape, width, layer, type, flags, net_code; int shape, width, drill, layer, type, flags, net_code;
int ii = 0; int ii = 0;
char line1[256]; char line1[256];
char line2[256]; char line2[256];
@ -149,13 +149,15 @@ int WinEDA_BasePcbFrame::ReadListeSegmentDescr( FILE* File,
int arg_count = sscanf( line1 + 2, " %d %d %d %d %d %d %d", &shape, int arg_count = sscanf( line1 + 2, " %d %d %d %d %d %d %d", &shape,
&PtSegm->m_Start.x, &PtSegm->m_Start.y, &PtSegm->m_Start.x, &PtSegm->m_Start.y,
&PtSegm->m_End.x, &PtSegm->m_End.y, &width, &PtSegm->m_End.x, &PtSegm->m_End.y, &width,
&PtSegm->m_Drill ); &drill );
PtSegm->m_Width = width; PtSegm->m_Width = width;
PtSegm->m_Shape = shape; PtSegm->m_Shape = shape;
if( arg_count < 7 ) if( arg_count < 7 || drill <= 0 )
PtSegm->m_Drill = -1; PtSegm->SetDrillDefault();
else
PtSegm->SetDrillValue(drill);
PtSegm->SetLayer( layer ); PtSegm->SetLayer( layer );
PtSegm->SetNet( net_code ); PtSegm->SetNet( net_code );
@ -399,6 +401,12 @@ int WinEDA_BasePcbFrame::ReadSetup( FILE* File, int* LineNum )
continue; continue;
} }
if( stricmp( Line, "MicroViaSize" ) == 0 )
{
g_DesignSettings.m_CurrentMicroViaSize = atoi( data );
continue;
}
if( stricmp( Line, "ViaSizeHistory" ) == 0 ) if( stricmp( Line, "ViaSizeHistory" ) == 0 )
{ {
int tmp = atoi( data ); int tmp = atoi( data );
@ -412,6 +420,18 @@ int WinEDA_BasePcbFrame::ReadSetup( FILE* File, int* LineNum )
continue; continue;
} }
if( stricmp( Line, "MicroViaDrill" ) == 0 )
{
g_DesignSettings.m_MicroViaDrill = atoi( data );
continue;
}
if( stricmp( Line, "MicroViasAllowed" ) == 0 )
{
g_DesignSettings.m_MicroViasAllowed = atoi( data );
continue;
}
if( stricmp( Line, "TextPcbWidth" ) == 0 ) if( stricmp( Line, "TextPcbWidth" ) == 0 )
{ {
g_DesignSettings.m_PcbTextWidth = atoi( data ); g_DesignSettings.m_PcbTextWidth = atoi( data );
@ -521,6 +541,10 @@ static int WriteSetup( FILE* File, WinEDA_BasePcbFrame* frame )
fprintf( File, "ViaSizeHistory %d\n", g_DesignSettings.m_ViaSizeHistory[ii] ); fprintf( File, "ViaSizeHistory %d\n", g_DesignSettings.m_ViaSizeHistory[ii] );
} }
fprintf( File, "MicroViaSize %d\n", g_DesignSettings.m_CurrentMicroViaSize);
fprintf( File, "MicroViaDrill %d\n", g_DesignSettings.m_MicroViaDrill);
fprintf( File, "MicroViasAllowed %d\n", g_DesignSettings.m_MicroViasAllowed);
fprintf( File, "TextPcbWidth %d\n", g_DesignSettings.m_PcbTextWidth ); fprintf( File, "TextPcbWidth %d\n", g_DesignSettings.m_PcbTextWidth );
fprintf( File, "TextPcbSize %d %d\n", fprintf( File, "TextPcbSize %d %d\n",
g_DesignSettings.m_PcbTextSize.x, g_DesignSettings.m_PcbTextSize.y ); g_DesignSettings.m_PcbTextSize.x, g_DesignSettings.m_PcbTextSize.y );

View File

@ -515,7 +515,7 @@ void WinEDA_PcbFrame::createPopupMenuForTracks( TRACK* Track, wxMenu* PopMenu )
_( "Export via hole to others id vias" ), global_options_pad_xpm ); _( "Export via hole to others id vias" ), global_options_pad_xpm );
ADD_MENUITEM( via_mnu, ID_POPUP_PCB_VIA_HOLE_RESET_TO_DEFAULT, ADD_MENUITEM( via_mnu, ID_POPUP_PCB_VIA_HOLE_RESET_TO_DEFAULT,
_( "Set ALL via holes to default" ), apply_xpm ); _( "Set ALL via holes to default" ), apply_xpm );
if( Track->m_Drill <= 0 ) if( ! Track->IsDrillDefault() )
{ {
via_mnu->Enable( ID_POPUP_PCB_VIA_HOLE_EXPORT, FALSE ); via_mnu->Enable( ID_POPUP_PCB_VIA_HOLE_EXPORT, FALSE );
} }
@ -559,6 +559,12 @@ void WinEDA_PcbFrame::createPopupMenuForTracks( TRACK* Track, wxMenu* PopMenu )
} }
msg = AddHotkeyName( _( "Place Via" ), s_Board_Editor_Hokeys_Descr, HK_ADD_VIA ); msg = AddHotkeyName( _( "Place Via" ), s_Board_Editor_Hokeys_Descr, HK_ADD_VIA );
PopMenu->Append( ID_POPUP_PCB_PLACE_VIA, msg ); PopMenu->Append( ID_POPUP_PCB_PLACE_VIA, msg );
// See if we can place a Micro Via (4 or more layers, and start from an external layer):
if ( GetScreen()->IsMicroViaAcceptable() )
{
msg = AddHotkeyName( _( "Place Micro Via" ), s_Board_Editor_Hokeys_Descr, HK_ADD_MICROVIA );
PopMenu->Append( ID_POPUP_PCB_PLACE_MICROVIA, msg );
}
} }
// track Width control : // track Width control :

View File

@ -20,21 +20,21 @@ static int Pcbdiv_grille; /* memorisation temporaire */
static PARAM_CFG_WXSTRING UserLibDirBufCfg static PARAM_CFG_WXSTRING UserLibDirBufCfg
( (
wxT( "LibDir" ), /* Keyword */ wxT( "LibDir" ), /* Keyword */
& g_UserLibDirBuffer, /* Parameter address */ &g_UserLibDirBuffer, /* Parameter address */
GROUPLIB GROUPLIB
); );
static PARAM_CFG_LIBNAME_LIST LibNameBufCfg static PARAM_CFG_LIBNAME_LIST LibNameBufCfg
( (
wxT( "LibName" ), /* Keyword */ wxT( "LibName" ), /* Keyword */
& g_LibName_List, /* Parameter address */ &g_LibName_List, /* Parameter address */
GROUPLIB GROUPLIB
); );
static PARAM_CFG_INT PadDrillCfg static PARAM_CFG_INT PadDrillCfg
( (
wxT( "PadDrlX" ), /* Keyword */ wxT( "PadDrlX" ), /* Keyword */
& g_Pad_Master.m_Drill.x, /* Parameter address */ &g_Pad_Master.m_Drill.x, /* Parameter address */
320, /* Default value */ 320, /* Default value */
0, 0x7FFF /* Valeurs extremes */ 0, 0x7FFF /* Valeurs extremes */
); );
@ -42,7 +42,7 @@ static PARAM_CFG_INT PadDrillCfg
static PARAM_CFG_INT PadDimHCfg //Pad Diameter / H Size static PARAM_CFG_INT PadDimHCfg //Pad Diameter / H Size
( (
wxT( "PadDimH" ), /* Keyword */ wxT( "PadDimH" ), /* Keyword */
& g_Pad_Master.m_Size.x, /* Parameter address */ &g_Pad_Master.m_Size.x, /* Parameter address */
550, /* Default value */ 550, /* Default value */
0, 0x7FFF /* Valeurs extremes */ 0, 0x7FFF /* Valeurs extremes */
); );
@ -50,7 +50,7 @@ static PARAM_CFG_INT PadDimHCfg //Pad Diameter / H Size
static PARAM_CFG_INT PadDimVCfg static PARAM_CFG_INT PadDimVCfg
( (
wxT( "PadDimV" ), /* Keyword */ wxT( "PadDimV" ), /* Keyword */
& g_Pad_Master.m_Size.y, /* Parameter address */ &g_Pad_Master.m_Size.y, /* Parameter address */
550, /* Default value */ 550, /* Default value */
0, 0x7FFF /* Valeurs extremes */ 0, 0x7FFF /* Valeurs extremes */
); );
@ -59,7 +59,7 @@ static PARAM_CFG_INT PadDimVCfg
static PARAM_CFG_INT PadFormeCfg static PARAM_CFG_INT PadFormeCfg
( (
wxT( "PadForm" ), /* Keyword */ wxT( "PadForm" ), /* Keyword */
& g_Pad_Master.m_PadShape, /* Parameter address */ &g_Pad_Master.m_PadShape, /* Parameter address */
PAD_CIRCLE, /* Default value */ PAD_CIRCLE, /* Default value */
0, 0x7F /* Valeurs extremes */ 0, 0x7F /* Valeurs extremes */
); );
@ -67,14 +67,14 @@ static PARAM_CFG_INT PadFormeCfg
static PARAM_CFG_INT PadMasqueLayerCfg static PARAM_CFG_INT PadMasqueLayerCfg
( (
wxT( "PadMask" ), /* Keyword */ wxT( "PadMask" ), /* Keyword */
& g_Pad_Master.m_Masque_Layer, /* Parameter address */ &g_Pad_Master.m_Masque_Layer, /* Parameter address */
0x0000FFFF /* Default value */ 0x0000FFFF /* Default value */
); );
static PARAM_CFG_INT ViaDiametreCfg static PARAM_CFG_INT ViaDiametreCfg
( (
wxT( "ViaDiam" ), /* Keyword */ wxT( "ViaDiam" ), /* Keyword */
& g_DesignSettings.m_CurrentViaSize, /* Parameter address */ &g_DesignSettings.m_CurrentViaSize, /* Parameter address */
450, /* Default value */ 450, /* Default value */
0, 0xFFFF /* Valeurs extremes */ 0, 0xFFFF /* Valeurs extremes */
); );
@ -82,15 +82,32 @@ static PARAM_CFG_INT ViaDiametreCfg
static PARAM_CFG_INT ViaDrillCfg static PARAM_CFG_INT ViaDrillCfg
( (
wxT( "ViaDril" ), /* Keyword */ wxT( "ViaDril" ), /* Keyword */
& g_DesignSettings.m_ViaDrill, /* Parameter address */ &g_DesignSettings.m_ViaDrill, /* Parameter address */
250, /* Default value */ 250, /* Default value */
0, 0xFFFF /* Valeurs extremes */ 0, 0xFFFF /* Valeurs extremes */
); );
static PARAM_CFG_INT MicroViaDiametreCfg
(
wxT( "MViaDia" ), /* Keyword */
&g_DesignSettings.m_CurrentMicroViaSize, /* Parameter address */
200, /* Default value */
0, 1000 /* Valeurs extremes */
);
static PARAM_CFG_INT MicroViaDrillCfg
(
wxT( "MViaDrl" ), /* Keyword */
&g_DesignSettings.m_MicroViaDrill, /* Parameter address */
80, /* Default value */
0, 800 /* Valeurs extremes */
);
static PARAM_CFG_INT ViaShowHoleCfg static PARAM_CFG_INT ViaShowHoleCfg
( (
INSETUP, INSETUP,
wxT( "ViaSHole" ), /* Keyword */ wxT( "ViaSHole" ), /* Keyword */
& DisplayOpt.m_DisplayViaMode, /* Parameter address */ &DisplayOpt.m_DisplayViaMode, /* Parameter address */
VIA_SPECIAL_HOLE_SHOW, /* Default value */ VIA_SPECIAL_HOLE_SHOW, /* Default value */
VIA_HOLE_NOT_SHOW, /* Valeurs extremes */ VIA_HOLE_NOT_SHOW, /* Valeurs extremes */
OPT_VIA_HOLE_END - 1 /* Valeurs extremes */ OPT_VIA_HOLE_END - 1 /* Valeurs extremes */
@ -99,7 +116,7 @@ static PARAM_CFG_INT ViaShowHoleCfg
static PARAM_CFG_INT TrackClearenceCfg static PARAM_CFG_INT TrackClearenceCfg
( (
wxT( "Isol" ), /* Keyword */ wxT( "Isol" ), /* Keyword */
& g_DesignSettings.m_TrackClearence, /* Parameter address */ &g_DesignSettings.m_TrackClearence, /* Parameter address */
120, /* Default value */ 120, /* Default value */
0, 0xFFFF /* Valeurs extremes */ 0, 0xFFFF /* Valeurs extremes */
); );
@ -107,15 +124,15 @@ static PARAM_CFG_INT TrackClearenceCfg
static PARAM_CFG_INT LayerCountCfg // Mask Working Layers static PARAM_CFG_INT LayerCountCfg // Mask Working Layers
( (
wxT( "Countlayer" ), /* Keyword */ wxT( "Countlayer" ), /* Keyword */
& g_DesignSettings.m_CopperLayerCount, /* Parameter address */ &g_DesignSettings.m_CopperLayerCount, /* Parameter address */
2, /* Default value */ 2, /* Default value */
1, NB_COPPER_LAYERS /* Valeurs extremes */ 1, NB_COPPER_LAYERS /* Valeurs extremes */
); );
static PARAM_CFG_INT TrackWidthCfg static PARAM_CFG_INT TrackWidthCfg
( (
wxT( "Lpiste" ), /* Keyword */ wxT( "Lpiste" ), /* Keyword */
& g_DesignSettings.m_CurrentTrackWidth, /* Parameter address */ &g_DesignSettings.m_CurrentTrackWidth, /* Parameter address */
170, /* Default value */ 170, /* Default value */
2, 0xFFFF /* Valeurs extremes */ 2, 0xFFFF /* Valeurs extremes */
); );
@ -123,7 +140,7 @@ static PARAM_CFG_INT TrackWidthCfg
static PARAM_CFG_INT RouteLayTopCfg // First current working layer static PARAM_CFG_INT RouteLayTopCfg // First current working layer
( (
wxT( "RouteTo" ), /* Keyword */ wxT( "RouteTo" ), /* Keyword */
& Route_Layer_TOP, /* Parameter address */ &Route_Layer_TOP, /* Parameter address */
15, /* Default value */ 15, /* Default value */
0, 15 /* Valeurs extremes */ 0, 15 /* Valeurs extremes */
); );
@ -131,7 +148,7 @@ static PARAM_CFG_INT RouteLayTopCfg // First current working layer
static PARAM_CFG_INT RouteLayBotCfg // second current working layer static PARAM_CFG_INT RouteLayBotCfg // second current working layer
( (
wxT( "RouteBo" ), /* Keyword */ wxT( "RouteBo" ), /* Keyword */
& Route_Layer_BOTTOM, /* Parameter address */ &Route_Layer_BOTTOM, /* Parameter address */
0, /* Default value */ 0, /* Default value */
0, 15 /* Valeurs extremes */ 0, 15 /* Valeurs extremes */
); );
@ -139,7 +156,7 @@ static PARAM_CFG_INT RouteLayBotCfg // second current working layer
static PARAM_CFG_INT TypeViaCfg static PARAM_CFG_INT TypeViaCfg
( (
wxT( "TypeVia" ), /* Keyword */ wxT( "TypeVia" ), /* Keyword */
& g_DesignSettings.m_CurrentViaType, /* Parameter address */ &g_DesignSettings.m_CurrentViaType, /* Parameter address */
VIA_THROUGH, /* Default value */ VIA_THROUGH, /* Default value */
0, 3 /* Valeurs extremes */ 0, 3 /* Valeurs extremes */
); );
@ -147,70 +164,70 @@ static PARAM_CFG_INT TypeViaCfg
static PARAM_CFG_BOOL Segm45Cfg // Segm Pistes a 0, 45, 90 degres uniquement static PARAM_CFG_BOOL Segm45Cfg // Segm Pistes a 0, 45, 90 degres uniquement
( (
wxT( "Segm45" ), /* Keyword */ wxT( "Segm45" ), /* Keyword */
& Track_45_Only, /* Parameter address */ &Track_45_Only, /* Parameter address */
TRUE /* Default value */ TRUE /* Default value */
); );
static PARAM_CFG_BOOL Raccord45Cfg // Generation automatique des Raccords a 45 degres static PARAM_CFG_BOOL Raccord45Cfg // Generation automatique des Raccords a 45 degres
( (
wxT( "Racc45" ), /* Keyword */ wxT( "Racc45" ), /* Keyword */
& g_Raccord_45_Auto, /* Parameter address */ &g_Raccord_45_Auto, /* Parameter address */
TRUE /* Default value */ TRUE /* Default value */
); );
static PARAM_CFG_INT UnitCfg // Units: 0 inch, 1 mm static PARAM_CFG_INT UnitCfg // Units: 0 inch, 1 mm
( (
wxT( "Unite" ), /* Keyword */ wxT( "Unite" ), /* Keyword */
& g_UnitMetric, /* Parameter address */ &g_UnitMetric, /* Parameter address */
FALSE /* Default value */ FALSE /* Default value */
); );
static PARAM_CFG_BOOL SegmFillCfg static PARAM_CFG_BOOL SegmFillCfg
( (
wxT( "SegFill" ), /* Keyword */ wxT( "SegFill" ), /* Keyword */
& DisplayOpt.DisplayPcbTrackFill, /* Parameter address */ &DisplayOpt.DisplayPcbTrackFill, /* Parameter address */
TRUE /* Default value */ TRUE /* Default value */
); );
static PARAM_CFG_BOOL NewTrackAfficheGardeCfg static PARAM_CFG_BOOL NewTrackAfficheGardeCfg
( (
wxT( "NewAffG" ), /* Keyword */ wxT( "NewAffG" ), /* Keyword */
& g_ShowIsolDuringCreateTrack, /* Parameter address */ &g_ShowIsolDuringCreateTrack, /* Parameter address */
TRUE /* Default value */ TRUE /* Default value */
); );
static PARAM_CFG_BOOL TrackAfficheGardeCfg static PARAM_CFG_BOOL TrackAfficheGardeCfg
( (
wxT( "SegAffG" ), /* Keyword */ wxT( "SegAffG" ), /* Keyword */
& DisplayOpt.DisplayTrackIsol, /* Parameter address */ &DisplayOpt.DisplayTrackIsol, /* Parameter address */
FALSE /* Default value */ FALSE /* Default value */
); );
static PARAM_CFG_BOOL PadFillCfg static PARAM_CFG_BOOL PadFillCfg
( (
wxT( "PadFill" ), /* Keyword */ wxT( "PadFill" ), /* Keyword */
& DisplayOpt.DisplayPadFill, /* Parameter address */ &DisplayOpt.DisplayPadFill, /* Parameter address */
TRUE /* Default value */ TRUE /* Default value */
); );
static PARAM_CFG_BOOL PadAfficheGardeCfg static PARAM_CFG_BOOL PadAfficheGardeCfg
( (
wxT( "PadAffG" ), /* Keyword */ wxT( "PadAffG" ), /* Keyword */
& DisplayOpt.DisplayPadIsol, /* Parameter address */ &DisplayOpt.DisplayPadIsol, /* Parameter address */
TRUE /* Default value */ TRUE /* Default value */
); );
static PARAM_CFG_BOOL PadShowNumCfg static PARAM_CFG_BOOL PadShowNumCfg
( (
wxT( "PadSNum" ), /* Keyword */ wxT( "PadSNum" ), /* Keyword */
& DisplayOpt.DisplayPadNum, /* Parameter address */ &DisplayOpt.DisplayPadNum, /* Parameter address */
TRUE /* Default value */ TRUE /* Default value */
); );
static PARAM_CFG_INT AfficheContourModuleCfg // Module Edges: fill/line/sketch static PARAM_CFG_INT AfficheContourModuleCfg // Module Edges: fill/line/sketch
( (
wxT( "ModAffC" ), /* Keyword */ wxT( "ModAffC" ), /* Keyword */
& DisplayOpt.DisplayModEdge, /* Parameter address */ &DisplayOpt.DisplayModEdge, /* Parameter address */
FILAIRE, /* Default value */ FILAIRE, /* Default value */
0, 2 /* Valeurs extremes */ 0, 2 /* Valeurs extremes */
); );
@ -218,7 +235,7 @@ static PARAM_CFG_INT AfficheContourModuleCfg // Module Edges: fill/line/sketc
static PARAM_CFG_INT AfficheTexteModuleCfg // Module Texts: fill/line/sketch static PARAM_CFG_INT AfficheTexteModuleCfg // Module Texts: fill/line/sketch
( (
wxT( "ModAffT" ), /* Keyword */ wxT( "ModAffT" ), /* Keyword */
& DisplayOpt.DisplayModText, /* Parameter address */ &DisplayOpt.DisplayModText, /* Parameter address */
FILAIRE, /* Default value */ FILAIRE, /* Default value */
0, 2 /* Valeurs extremes */ 0, 2 /* Valeurs extremes */
); );
@ -226,7 +243,7 @@ static PARAM_CFG_INT AfficheTexteModuleCfg // Module Texts: fill/line/sketch
static PARAM_CFG_INT AfficheTextePcbCfg // PCB Texts: fill/line/sketch static PARAM_CFG_INT AfficheTextePcbCfg // PCB Texts: fill/line/sketch
( (
wxT( "PcbAffT" ), /* Keyword */ wxT( "PcbAffT" ), /* Keyword */
& DisplayOpt.DisplayDrawItems, /* Parameter address */ &DisplayOpt.DisplayDrawItems, /* Parameter address */
FILAIRE, /* Default value */ FILAIRE, /* Default value */
0, 2 /* Valeurs extremes */ 0, 2 /* Valeurs extremes */
); );
@ -234,14 +251,14 @@ static PARAM_CFG_INT AfficheTextePcbCfg // PCB Texts: fill/line/sketch
static PARAM_CFG_BOOL SegmPcb45Cfg // Force 45 degrees for segments static PARAM_CFG_BOOL SegmPcb45Cfg // Force 45 degrees for segments
( (
wxT( "SgPcb45" ), /* Keyword */ wxT( "SgPcb45" ), /* Keyword */
& Segments_45_Only, /* Parameter address */ &Segments_45_Only, /* Parameter address */
TRUE /* Default value */ TRUE /* Default value */
); );
static PARAM_CFG_INT TextePcbDimVCfg static PARAM_CFG_INT TextePcbDimVCfg
( (
wxT( "TxtPcbV" ), /* Keyword */ wxT( "TxtPcbV" ), /* Keyword */
& g_DesignSettings.m_PcbTextSize.y, /* Parameter address */ &g_DesignSettings.m_PcbTextSize.y, /* Parameter address */
600, /* Default value */ 600, /* Default value */
10, 2000 /* Valeurs extremes */ 10, 2000 /* Valeurs extremes */
); );
@ -249,7 +266,7 @@ static PARAM_CFG_INT TextePcbDimVCfg
static PARAM_CFG_INT TextePcbDimHCfg static PARAM_CFG_INT TextePcbDimHCfg
( (
wxT( "TxtPcbH" ), /* Keyword */ wxT( "TxtPcbH" ), /* Keyword */
& g_DesignSettings.m_PcbTextSize.x, /* Parameter address */ &g_DesignSettings.m_PcbTextSize.x, /* Parameter address */
600, /* Default value */ 600, /* Default value */
10, 2000 /* Valeurs extremes */ 10, 2000 /* Valeurs extremes */
); );
@ -258,7 +275,7 @@ static PARAM_CFG_SETCOLOR ColorLayer0Cfg // CU Layer Color
( (
INSETUP, INSETUP,
wxT( "ColLay0" ), /* Keyword */ wxT( "ColLay0" ), /* Keyword */
& g_DesignSettings.m_LayerColor[0], /* Parameter address */ &g_DesignSettings.m_LayerColor[0], /* Parameter address */
GREEN /* Default value */ GREEN /* Default value */
); );
@ -266,7 +283,7 @@ static PARAM_CFG_SETCOLOR ColorLayer1Cfg
( (
INSETUP, INSETUP,
wxT( "ColLay1" ), /* Keyword */ wxT( "ColLay1" ), /* Keyword */
& g_DesignSettings.m_LayerColor[1], /* Parameter address */ &g_DesignSettings.m_LayerColor[1], /* Parameter address */
BLUE /* Default value */ BLUE /* Default value */
); );
@ -274,7 +291,7 @@ static PARAM_CFG_SETCOLOR ColorLayer2Cfg
( (
INSETUP, INSETUP,
wxT( "ColLay2" ), /* Keyword */ wxT( "ColLay2" ), /* Keyword */
& g_DesignSettings.m_LayerColor[2], /* Parameter address */ &g_DesignSettings.m_LayerColor[2], /* Parameter address */
LIGHTGRAY /* Default value */ LIGHTGRAY /* Default value */
); );
@ -282,7 +299,7 @@ static PARAM_CFG_SETCOLOR ColorLayer3Cfg
( (
INSETUP, INSETUP,
wxT( "ColLay3" ), /* Keyword */ wxT( "ColLay3" ), /* Keyword */
& g_DesignSettings.m_LayerColor[3], /* Parameter address */ &g_DesignSettings.m_LayerColor[3], /* Parameter address */
5 /* Default value */ 5 /* Default value */
); );
@ -290,7 +307,7 @@ static PARAM_CFG_SETCOLOR ColorLayer4Cfg
( (
INSETUP, INSETUP,
wxT( "ColLay4" ), /* Keyword */ wxT( "ColLay4" ), /* Keyword */
& g_DesignSettings.m_LayerColor[4], /* Parameter address */ &g_DesignSettings.m_LayerColor[4], /* Parameter address */
4 /* Default value */ 4 /* Default value */
); );
@ -298,7 +315,7 @@ static PARAM_CFG_SETCOLOR ColorLayer5Cfg
( (
INSETUP, INSETUP,
wxT( "ColLay5" ), /* Keyword */ wxT( "ColLay5" ), /* Keyword */
& g_DesignSettings.m_LayerColor[5], /* Parameter address */ &g_DesignSettings.m_LayerColor[5], /* Parameter address */
5 /* Default value */ 5 /* Default value */
); );
@ -306,7 +323,7 @@ static PARAM_CFG_SETCOLOR ColorLayer6Cfg
( (
INSETUP, INSETUP,
wxT( "ColLay6" ), /* Keyword */ wxT( "ColLay6" ), /* Keyword */
& g_DesignSettings.m_LayerColor[6], /* Parameter address */ &g_DesignSettings.m_LayerColor[6], /* Parameter address */
6 /* Default value */ 6 /* Default value */
); );
@ -314,7 +331,7 @@ static PARAM_CFG_SETCOLOR ColorLayer7Cfg
( (
INSETUP, INSETUP,
wxT( "ColLay7" ), /* Keyword */ wxT( "ColLay7" ), /* Keyword */
& g_DesignSettings.m_LayerColor[7], /* Parameter address */ &g_DesignSettings.m_LayerColor[7], /* Parameter address */
5 /* Default value */ 5 /* Default value */
); );
@ -322,7 +339,7 @@ static PARAM_CFG_SETCOLOR ColorLayer8Cfg
( (
INSETUP, INSETUP,
wxT( "ColLay8" ), /* Keyword */ wxT( "ColLay8" ), /* Keyword */
& g_DesignSettings.m_LayerColor[8], /* Parameter address */ &g_DesignSettings.m_LayerColor[8], /* Parameter address */
7 /* Default value */ 7 /* Default value */
); );
@ -330,7 +347,7 @@ static PARAM_CFG_SETCOLOR ColorLayer9Cfg
( (
INSETUP, INSETUP,
wxT( "ColLay9" ), /* Keyword */ wxT( "ColLay9" ), /* Keyword */
& g_DesignSettings.m_LayerColor[9], /* Parameter address */ &g_DesignSettings.m_LayerColor[9], /* Parameter address */
1 /* Default value */ 1 /* Default value */
); );
@ -338,7 +355,7 @@ static PARAM_CFG_SETCOLOR ColorLayer10Cfg
( (
INSETUP, INSETUP,
wxT( "ColLayA" ), /* Keyword */ wxT( "ColLayA" ), /* Keyword */
& g_DesignSettings.m_LayerColor[10], /* Parameter address */ &g_DesignSettings.m_LayerColor[10], /* Parameter address */
2 /* Default value */ 2 /* Default value */
); );
@ -346,7 +363,7 @@ static PARAM_CFG_SETCOLOR ColorLayer11Cfg
( (
INSETUP, INSETUP,
wxT( "ColLayB" ), /* Keyword */ wxT( "ColLayB" ), /* Keyword */
& g_DesignSettings.m_LayerColor[11], /* Parameter address */ &g_DesignSettings.m_LayerColor[11], /* Parameter address */
3 /* Default value */ 3 /* Default value */
); );
@ -354,7 +371,7 @@ static PARAM_CFG_SETCOLOR ColorLayer12Cfg
( (
INSETUP, INSETUP,
wxT( "ColLayC" ), /* Keyword */ wxT( "ColLayC" ), /* Keyword */
& g_DesignSettings.m_LayerColor[12], /* Parameter address */ &g_DesignSettings.m_LayerColor[12], /* Parameter address */
12 /* Default value */ 12 /* Default value */
); );
@ -362,7 +379,7 @@ static PARAM_CFG_SETCOLOR ColorLayer13Cfg
( (
INSETUP, INSETUP,
wxT( "ColLayD" ), /* Keyword */ wxT( "ColLayD" ), /* Keyword */
& g_DesignSettings.m_LayerColor[13], /* Parameter address */ &g_DesignSettings.m_LayerColor[13], /* Parameter address */
13 /* Default value */ 13 /* Default value */
); );
@ -370,7 +387,7 @@ static PARAM_CFG_SETCOLOR ColorLayer14Cfg
( (
INSETUP, INSETUP,
wxT( "ColLayE" ), /* Keyword */ wxT( "ColLayE" ), /* Keyword */
& g_DesignSettings.m_LayerColor[14], /* Parameter address */ &g_DesignSettings.m_LayerColor[14], /* Parameter address */
14 /* Default value */ 14 /* Default value */
); );
@ -378,7 +395,7 @@ static PARAM_CFG_SETCOLOR ColorLayer15Cfg // CMP Layer Color
( (
INSETUP, INSETUP,
wxT( "ColLayF" ), /* Keyword */ wxT( "ColLayF" ), /* Keyword */
& g_DesignSettings.m_LayerColor[15], /* Parameter address */ &g_DesignSettings.m_LayerColor[15], /* Parameter address */
RED /* Default value */ RED /* Default value */
); );
@ -386,7 +403,7 @@ static PARAM_CFG_SETCOLOR ColorLayer16Cfg // Adhesive CU Layer Color
( (
INSETUP, INSETUP,
wxT( "ColLayG" ), /* Keyword */ wxT( "ColLayG" ), /* Keyword */
& g_DesignSettings.m_LayerColor[16], /* Parameter address */ &g_DesignSettings.m_LayerColor[16], /* Parameter address */
1 /* Default value */ 1 /* Default value */
); );
@ -394,7 +411,7 @@ static PARAM_CFG_SETCOLOR ColorLayer17Cfg // Adhesive CMP Layer Color
( (
INSETUP, INSETUP,
wxT( "ColLayH" ), /* Keyword */ wxT( "ColLayH" ), /* Keyword */
& g_DesignSettings.m_LayerColor[17], /* Parameter address */ &g_DesignSettings.m_LayerColor[17], /* Parameter address */
5 /* Default value */ 5 /* Default value */
); );
@ -402,7 +419,7 @@ static PARAM_CFG_SETCOLOR ColorLayer18Cfg // Solder Mask CU Layer Color
( (
INSETUP, INSETUP,
wxT( "ColLayI" ), /* Keyword */ wxT( "ColLayI" ), /* Keyword */
& g_DesignSettings.m_LayerColor[18], /* Parameter address */ &g_DesignSettings.m_LayerColor[18], /* Parameter address */
11 /* Default value */ 11 /* Default value */
); );
@ -410,7 +427,7 @@ static PARAM_CFG_SETCOLOR ColorLayer19Cfg // Solder Mask CMP Layer Color
( (
INSETUP, INSETUP,
wxT( "ColLayJ" ), /* Keyword */ wxT( "ColLayJ" ), /* Keyword */
& g_DesignSettings.m_LayerColor[19], /* Parameter address */ &g_DesignSettings.m_LayerColor[19], /* Parameter address */
4 /* Default value */ 4 /* Default value */
); );
@ -418,7 +435,7 @@ static PARAM_CFG_SETCOLOR ColorLayer20Cfg // Silk Screen CU Layer Color
( (
INSETUP, INSETUP,
wxT( "ColLayK" ), /* Keyword */ wxT( "ColLayK" ), /* Keyword */
& g_DesignSettings.m_LayerColor[20], /* Parameter address */ &g_DesignSettings.m_LayerColor[20], /* Parameter address */
5 /* Default value */ 5 /* Default value */
); );
@ -426,7 +443,7 @@ static PARAM_CFG_SETCOLOR ColorLayer21Cfg // Silk Screen CMP Layer Color
( (
INSETUP, INSETUP,
wxT( "ColLayL" ), /* Keyword */ wxT( "ColLayL" ), /* Keyword */
& g_DesignSettings.m_LayerColor[21], /* Parameter address */ &g_DesignSettings.m_LayerColor[21], /* Parameter address */
3 /* Default value */ 3 /* Default value */
); );
@ -434,7 +451,7 @@ static PARAM_CFG_SETCOLOR ColorLayer22Cfg // Mask CU Layer Color
( (
INSETUP, INSETUP,
wxT( "ColLayM" ), /* Keyword */ wxT( "ColLayM" ), /* Keyword */
& g_DesignSettings.m_LayerColor[22], /* Parameter address */ &g_DesignSettings.m_LayerColor[22], /* Parameter address */
6 /* Default value */ 6 /* Default value */
); );
@ -442,7 +459,7 @@ static PARAM_CFG_SETCOLOR ColorLayer23Cfg // Mask CMP Layer Color
( (
INSETUP, INSETUP,
wxT( "ColLayN" ), /* Keyword */ wxT( "ColLayN" ), /* Keyword */
& g_DesignSettings.m_LayerColor[23], /* Parameter address */ &g_DesignSettings.m_LayerColor[23], /* Parameter address */
5 /* Default value */ 5 /* Default value */
); );
@ -450,7 +467,7 @@ static PARAM_CFG_SETCOLOR ColorLayer24Cfg // DRAW Layer Color
( (
INSETUP, INSETUP,
wxT( "ColLayO" ), /* Keyword */ wxT( "ColLayO" ), /* Keyword */
& g_DesignSettings.m_LayerColor[24], /* Parameter address */ &g_DesignSettings.m_LayerColor[24], /* Parameter address */
LIGHTGRAY /* Default value */ LIGHTGRAY /* Default value */
); );
@ -458,7 +475,7 @@ static PARAM_CFG_SETCOLOR ColorLayer25Cfg // Comment Layer Color
( (
INSETUP, INSETUP,
wxT( "ColLayP" ), /* Keyword */ wxT( "ColLayP" ), /* Keyword */
& g_DesignSettings.m_LayerColor[25], /* Parameter address */ &g_DesignSettings.m_LayerColor[25], /* Parameter address */
1 /* Default value */ 1 /* Default value */
); );
@ -466,7 +483,7 @@ static PARAM_CFG_SETCOLOR ColorLayer26Cfg // ECO1 Layer Color
( (
INSETUP, INSETUP,
wxT( "ColLayQ" ), /* Keyword */ wxT( "ColLayQ" ), /* Keyword */
& g_DesignSettings.m_LayerColor[26], /* Parameter address */ &g_DesignSettings.m_LayerColor[26], /* Parameter address */
2 /* Default value */ 2 /* Default value */
); );
@ -474,7 +491,7 @@ static PARAM_CFG_SETCOLOR ColorLayer27Cfg //ECO2 Layer Color
( (
INSETUP, INSETUP,
wxT( "ColLayR" ), /* Keyword */ wxT( "ColLayR" ), /* Keyword */
& g_DesignSettings.m_LayerColor[27], /* Parameter address */ &g_DesignSettings.m_LayerColor[27], /* Parameter address */
14 /* Default value */ 14 /* Default value */
); );
@ -482,7 +499,7 @@ static PARAM_CFG_SETCOLOR ColorLayer28Cfg // EDGES Layer Color
( (
INSETUP, INSETUP,
wxT( "ColLayS" ), /* Keyword */ wxT( "ColLayS" ), /* Keyword */
& g_DesignSettings.m_LayerColor[28], /* Parameter address */ &g_DesignSettings.m_LayerColor[28], /* Parameter address */
YELLOW /* Default value */ YELLOW /* Default value */
); );
@ -490,7 +507,7 @@ static PARAM_CFG_SETCOLOR ColorLayer29Cfg
( (
INSETUP, INSETUP,
wxT( "ColLayT" ), /* Keyword */ wxT( "ColLayT" ), /* Keyword */
& g_DesignSettings.m_LayerColor[29], /* Parameter address */ &g_DesignSettings.m_LayerColor[29], /* Parameter address */
13 /* Default value */ 13 /* Default value */
); );
@ -498,7 +515,7 @@ static PARAM_CFG_SETCOLOR ColorLayer30Cfg
( (
INSETUP, INSETUP,
wxT( "ColLayU" ), /* Keyword */ wxT( "ColLayU" ), /* Keyword */
& g_DesignSettings.m_LayerColor[30], /* Parameter address */ &g_DesignSettings.m_LayerColor[30], /* Parameter address */
14 /* Default value */ 14 /* Default value */
); );
@ -506,7 +523,7 @@ static PARAM_CFG_SETCOLOR ColorLayer31Cfg
( (
INSETUP, INSETUP,
wxT( "ColLayV" ), /* Keyword */ wxT( "ColLayV" ), /* Keyword */
& g_DesignSettings.m_LayerColor[31], /* Parameter address */ &g_DesignSettings.m_LayerColor[31], /* Parameter address */
7 /* Default value */ 7 /* Default value */
); );
@ -514,7 +531,7 @@ static PARAM_CFG_SETCOLOR ColorTxtModCmpCfg
( (
INSETUP, INSETUP,
wxT( "CTxtMoC" ), /* Keyword */ wxT( "CTxtMoC" ), /* Keyword */
& g_ModuleTextCMPColor, /* Parameter address */ &g_ModuleTextCMPColor, /* Parameter address */
LIGHTGRAY /* Default value */ LIGHTGRAY /* Default value */
); );
@ -522,7 +539,7 @@ static PARAM_CFG_SETCOLOR ColorTxtModCuCfg
( (
INSETUP, INSETUP,
wxT( "CTxtMoS" ), /* Keyword */ wxT( "CTxtMoS" ), /* Keyword */
& g_ModuleTextCUColor, /* Parameter address */ &g_ModuleTextCUColor, /* Parameter address */
1 /* Default value */ 1 /* Default value */
); );
@ -530,14 +547,14 @@ static PARAM_CFG_SETCOLOR VisibleTxtModCfg
( (
INSETUP, INSETUP,
wxT( "CTxtVis" ), /* Keyword */ wxT( "CTxtVis" ), /* Keyword */
& g_ModuleTextNOVColor, /* Parameter address */ &g_ModuleTextNOVColor, /* Parameter address */
DARKGRAY /* Default value */ DARKGRAY /* Default value */
); );
static PARAM_CFG_INT TexteModDimVCfg static PARAM_CFG_INT TexteModDimVCfg
( (
wxT( "TxtModV" ), /* Keyword */ wxT( "TxtModV" ), /* Keyword */
& ModuleTextSize.y, /* Parameter address */ &ModuleTextSize.y, /* Parameter address */
500, /* Default value */ 500, /* Default value */
1, 20000 /* Valeurs extremes */ 1, 20000 /* Valeurs extremes */
); );
@ -545,7 +562,7 @@ static PARAM_CFG_INT TexteModDimVCfg
static PARAM_CFG_INT TexteModDimHCfg static PARAM_CFG_INT TexteModDimHCfg
( (
wxT( "TxtModH" ), /* Keyword */ wxT( "TxtModH" ), /* Keyword */
& ModuleTextSize.x, /* Parameter address */ &ModuleTextSize.x, /* Parameter address */
500, /* Default value */ 500, /* Default value */
1, 20000 /* Valeurs extremes */ 1, 20000 /* Valeurs extremes */
); );
@ -553,7 +570,7 @@ static PARAM_CFG_INT TexteModDimHCfg
static PARAM_CFG_INT TexteModWidthCfg static PARAM_CFG_INT TexteModWidthCfg
( (
wxT( "TxtModW" ), /* Keyword */ wxT( "TxtModW" ), /* Keyword */
& ModuleTextWidth, /* Parameter address */ &ModuleTextWidth, /* Parameter address */
100, /* Default value */ 100, /* Default value */
1, 10000 /* Valeurs extremes */ 1, 10000 /* Valeurs extremes */
); );
@ -562,7 +579,7 @@ static PARAM_CFG_SETCOLOR ColorAncreModCfg
( (
INSETUP, INSETUP,
wxT( "CAncreM" ), /* Keyword */ wxT( "CAncreM" ), /* Keyword */
& g_AnchorColor, /* Parameter address */ &g_AnchorColor, /* Parameter address */
BLUE /* Default value */ BLUE /* Default value */
); );
@ -570,7 +587,7 @@ static PARAM_CFG_SETCOLOR ColorPadCuCfg
( (
INSETUP, INSETUP,
wxT( "CoPadCu" ), /* Keyword */ wxT( "CoPadCu" ), /* Keyword */
& g_PadCUColor, /* Parameter address */ &g_PadCUColor, /* Parameter address */
GREEN /* Default value */ GREEN /* Default value */
); );
@ -578,39 +595,39 @@ static PARAM_CFG_SETCOLOR ColorPadCmpCfg
( (
INSETUP, INSETUP,
wxT( "CoPadCm" ), /* Keyword */ wxT( "CoPadCm" ), /* Keyword */
& g_PadCMPColor, /* Parameter address */ &g_PadCMPColor, /* Parameter address */
RED /* Default value */ RED /* Default value */
); );
static PARAM_CFG_SETCOLOR ColorViaNormCfg static PARAM_CFG_SETCOLOR ColorViaThroughCfg
( (
INSETUP, INSETUP,
wxT( "CoViaNo" ), /* Keyword */ wxT( "CoViaTh" ), /* Keyword */
& g_DesignSettings.m_ViaColor[VIA_THROUGH], /* Parameter address */ &g_DesignSettings.m_ViaColor[VIA_THROUGH], /* Parameter address */
LIGHTGRAY /* Default value */ LIGHTGRAY /* Default value */
); );
static PARAM_CFG_SETCOLOR ColorViaborgneCfg static PARAM_CFG_SETCOLOR ColorViaBlindBuriedCfg
( (
INSETUP, INSETUP,
wxT( "CoViaBo" ), /* Keyword */ wxT( "CoViaBu" ), /* Keyword */
& g_DesignSettings.m_ViaColor[VIA_BURIED], /* Parameter address */ &g_DesignSettings.m_ViaColor[VIA_BLIND_BURIED], /* Parameter address */
CYAN /* Default value */ BROWN /* Default value */
); );
static PARAM_CFG_SETCOLOR ColorViaEnterreeCfg // Buried Via Color static PARAM_CFG_SETCOLOR ColorViaMicroViaCfg // Buried Via Color
( (
INSETUP, INSETUP,
wxT( "CoViaEn" ), /* Keyword */ wxT( "CoViaMi" ), /* Keyword */
& g_DesignSettings.m_ViaColor[VIA_BLIND], /* Parameter address */ &g_DesignSettings.m_ViaColor[VIA_MICROVIA], /* Parameter address */
BROWN /* Default value */ CYAN /* Default value */
); );
static PARAM_CFG_SETCOLOR ColorpcbGrilleCfg static PARAM_CFG_SETCOLOR ColorpcbGrilleCfg
( (
INSETUP, INSETUP,
wxT( "CoPcbGr" ), /* Keyword */ wxT( "CoPcbGr" ), /* Keyword */
& g_GridColor, /* Parameter address */ &g_GridColor, /* Parameter address */
DARKGRAY /* Default value */ DARKGRAY /* Default value */
); );
@ -618,14 +635,14 @@ static PARAM_CFG_SETCOLOR ColorCheveluCfg
( (
INSETUP, INSETUP,
wxT( "CoRatsN" ), /* Keyword */ wxT( "CoRatsN" ), /* Keyword */
& g_DesignSettings.m_RatsnestColor, /* Parameter address */ &g_DesignSettings.m_RatsnestColor, /* Parameter address */
WHITE /* Default value */ WHITE /* Default value */
); );
static PARAM_CFG_INT HPGLpenNumCfg static PARAM_CFG_INT HPGLpenNumCfg
( (
wxT( "HPGLnum" ), /* Keyword */ wxT( "HPGLnum" ), /* Keyword */
& g_HPGL_Pen_Num, /* Parameter address */ &g_HPGL_Pen_Num, /* Parameter address */
1, /* Default value */ 1, /* Default value */
1, 16 /* Valeurs extremes */ 1, 16 /* Valeurs extremes */
); );
@ -633,7 +650,7 @@ static PARAM_CFG_INT HPGLpenNumCfg
static PARAM_CFG_INT HPGLdiamCfg // HPGL pen size (mils) static PARAM_CFG_INT HPGLdiamCfg // HPGL pen size (mils)
( (
wxT( "HPGdiam" ), /* Keyword */ wxT( "HPGdiam" ), /* Keyword */
& g_HPGL_Pen_Diam, /* Parameter address */ &g_HPGL_Pen_Diam, /* Parameter address */
15, /* Default value */ 15, /* Default value */
0, 100 /* Valeurs extremes */ 0, 100 /* Valeurs extremes */
); );
@ -641,7 +658,7 @@ static PARAM_CFG_INT HPGLdiamCfg // HPGL pen size (mils)
static PARAM_CFG_INT HPGLspeedCfg //HPGL pen speed (cm/s) static PARAM_CFG_INT HPGLspeedCfg //HPGL pen speed (cm/s)
( (
wxT( "HPGLSpd" ), /* Keyword */ wxT( "HPGLSpd" ), /* Keyword */
& g_HPGL_Pen_Speed, /* Parameter address */ &g_HPGL_Pen_Speed, /* Parameter address */
20, /* Default value */ 20, /* Default value */
0, 1000 /* Valeurs extremes */ 0, 1000 /* Valeurs extremes */
); );
@ -649,7 +666,7 @@ static PARAM_CFG_INT HPGLspeedCfg //HPGL pen speed (cm/s)
static PARAM_CFG_INT HPGLrecouvrementCfg static PARAM_CFG_INT HPGLrecouvrementCfg
( (
wxT( "HPGLrec" ), /* Keyword */ wxT( "HPGLrec" ), /* Keyword */
& g_HPGL_Pen_Recouvrement, /* Parameter address */ &g_HPGL_Pen_Recouvrement, /* Parameter address */
2, /* Default value */ 2, /* Default value */
0, 0x100 /* Valeurs extremes */ 0, 0x100 /* Valeurs extremes */
); );
@ -657,14 +674,14 @@ static PARAM_CFG_INT HPGLrecouvrementCfg
static PARAM_CFG_BOOL HPGLcenterCfg //HPGL Org Coord ( 0 normal, 1 Centre) static PARAM_CFG_BOOL HPGLcenterCfg //HPGL Org Coord ( 0 normal, 1 Centre)
( (
wxT( "HPGLorg" ), /* Keyword */ wxT( "HPGLorg" ), /* Keyword */
& HPGL_Org_Centre, /* Parameter address */ &HPGL_Org_Centre, /* Parameter address */
FALSE /* Default value */ FALSE /* Default value */
); );
static PARAM_CFG_INT GERBERSpotMiniCfg //Aperture Mini (mils) static PARAM_CFG_INT GERBERSpotMiniCfg //Aperture Mini (mils)
( (
wxT( "GERBmin" ), /* Keyword */ wxT( "GERBmin" ), /* Keyword */
& spot_mini, /* Parameter address */ &spot_mini, /* Parameter address */
15, /* Default value */ 15, /* Default value */
1, 100 /* Valeurs extremes */ 1, 100 /* Valeurs extremes */
); );
@ -672,7 +689,7 @@ static PARAM_CFG_INT GERBERSpotMiniCfg //Aperture Mini (mils)
static PARAM_CFG_INT VernisEpargneGardeCfg static PARAM_CFG_INT VernisEpargneGardeCfg
( (
wxT( "VEgarde" ), /* Keyword */ wxT( "VEgarde" ), /* Keyword */
& g_DesignSettings.m_MaskMargin, /* Parameter address */ &g_DesignSettings.m_MaskMargin, /* Parameter address */
100, /* Default value */ 100, /* Default value */
0, 0xFFFF /* Valeurs extremes */ 0, 0xFFFF /* Valeurs extremes */
); );
@ -680,7 +697,7 @@ static PARAM_CFG_INT VernisEpargneGardeCfg
static PARAM_CFG_INT DrawSegmLargeurCfg static PARAM_CFG_INT DrawSegmLargeurCfg
( (
wxT( "DrawLar" ), /* Keyword */ wxT( "DrawLar" ), /* Keyword */
& g_DesignSettings.m_DrawSegmentWidth, /* Parameter address */ &g_DesignSettings.m_DrawSegmentWidth, /* Parameter address */
120, /* Default value */ 120, /* Default value */
0, 0xFFFF /* Valeurs extremes */ 0, 0xFFFF /* Valeurs extremes */
); );
@ -688,7 +705,7 @@ static PARAM_CFG_INT DrawSegmLargeurCfg
static PARAM_CFG_INT EdgeSegmLargeurCfg static PARAM_CFG_INT EdgeSegmLargeurCfg
( (
wxT( "EdgeLar" ), /* Keyword */ wxT( "EdgeLar" ), /* Keyword */
& g_DesignSettings.m_EdgeSegmentWidth, /* Parameter address */ &g_DesignSettings.m_EdgeSegmentWidth, /* Parameter address */
120, /* Default value */ 120, /* Default value */
0, 0xFFFF /* Valeurs extremes */ 0, 0xFFFF /* Valeurs extremes */
); );
@ -696,7 +713,7 @@ static PARAM_CFG_INT EdgeSegmLargeurCfg
static PARAM_CFG_INT TexteSegmLargeurCfg static PARAM_CFG_INT TexteSegmLargeurCfg
( (
wxT( "TxtLar" ), /* Keyword */ wxT( "TxtLar" ), /* Keyword */
& g_DesignSettings.m_PcbTextWidth, /* Parameter address */ &g_DesignSettings.m_PcbTextWidth, /* Parameter address */
120, /* Default value */ 120, /* Default value */
0, 0xFFFF /* Valeurs extremes */ 0, 0xFFFF /* Valeurs extremes */
); );
@ -704,7 +721,7 @@ static PARAM_CFG_INT TexteSegmLargeurCfg
static PARAM_CFG_INT ModuleSegmWidthCfg static PARAM_CFG_INT ModuleSegmWidthCfg
( (
wxT( "MSegLar" ), /* Keyword */ wxT( "MSegLar" ), /* Keyword */
& ModuleSegmentWidth, /* Parameter address */ &ModuleSegmentWidth, /* Parameter address */
120, /* Default value */ 120, /* Default value */
0, 0xFFFF /* Valeurs extremes */ 0, 0xFFFF /* Valeurs extremes */
); );
@ -712,7 +729,7 @@ static PARAM_CFG_INT ModuleSegmWidthCfg
static PARAM_CFG_INT FormatPlotCfg static PARAM_CFG_INT FormatPlotCfg
( (
wxT( "ForPlot" ), /* Keyword */ wxT( "ForPlot" ), /* Keyword */
& format_plot, /* Parameter address */ &format_plot, /* Parameter address */
1, /* Default value */ 1, /* Default value */
0, 3 /* Valeurs extremes */ 0, 3 /* Valeurs extremes */
); );
@ -720,7 +737,7 @@ static PARAM_CFG_INT FormatPlotCfg
static PARAM_CFG_INT WTraitSerigraphiePlotCfg static PARAM_CFG_INT WTraitSerigraphiePlotCfg
( (
wxT( "WpenSer" ), /* Keyword */ wxT( "WpenSer" ), /* Keyword */
& g_PlotLine_Width, /* Parameter address */ &g_PlotLine_Width, /* Parameter address */
10, /* Default value */ 10, /* Default value */
1, 10000 /* Valeurs extremes */ 1, 10000 /* Valeurs extremes */
); );
@ -728,7 +745,7 @@ static PARAM_CFG_INT WTraitSerigraphiePlotCfg
static PARAM_CFG_DOUBLE UserGrilleXCfg static PARAM_CFG_DOUBLE UserGrilleXCfg
( (
wxT( "UserGrX" ), /* Keyword */ wxT( "UserGrX" ), /* Keyword */
& g_UserGrid.x, /* Parameter address */ &g_UserGrid.x, /* Parameter address */
0.01, /* Default value */ 0.01, /* Default value */
0.0001, 100.0 /* Valeurs extremes (inches)*/ 0.0001, 100.0 /* Valeurs extremes (inches)*/
); );
@ -736,7 +753,7 @@ static PARAM_CFG_DOUBLE UserGrilleXCfg
static PARAM_CFG_DOUBLE UserGrilleYCfg static PARAM_CFG_DOUBLE UserGrilleYCfg
( (
wxT( "UserGrY" ), /* Keyword */ wxT( "UserGrY" ), /* Keyword */
& g_UserGrid.y, /* Parameter address */ &g_UserGrid.y, /* Parameter address */
0.01, /* Default value */ 0.01, /* Default value */
0.0001, 100.0 /* Valeurs extremes (inches)*/ 0.0001, 100.0 /* Valeurs extremes (inches)*/
); );
@ -744,7 +761,7 @@ static PARAM_CFG_DOUBLE UserGrilleYCfg
static PARAM_CFG_INT UserGrilleUnitCfg static PARAM_CFG_INT UserGrilleUnitCfg
( (
wxT( "UserGrU" ), /* Keyword */ wxT( "UserGrU" ), /* Keyword */
& g_UserGrid_Unit, /* Parameter address */ &g_UserGrid_Unit, /* Parameter address */
1, /* Default value */ 1, /* Default value */
0, 1 /* Valeurs extremes */ 0, 1 /* Valeurs extremes */
); );
@ -752,7 +769,7 @@ static PARAM_CFG_INT UserGrilleUnitCfg
static PARAM_CFG_INT DivGrillePcbCfg static PARAM_CFG_INT DivGrillePcbCfg
( (
wxT( "DivGrPc" ), /* Keyword */ wxT( "DivGrPc" ), /* Keyword */
& Pcbdiv_grille, /* Parameter address */ &Pcbdiv_grille, /* Parameter address */
1, /* Default value */ 1, /* Default value */
1, 10 /* Valeurs extremes */ 1, 10 /* Valeurs extremes */
); );
@ -760,7 +777,7 @@ static PARAM_CFG_INT DivGrillePcbCfg
static PARAM_CFG_INT TimeOutCfg //Duree entre Sauvegardes auto en secondes static PARAM_CFG_INT TimeOutCfg //Duree entre Sauvegardes auto en secondes
( (
wxT( "TimeOut" ), /* Keyword */ wxT( "TimeOut" ), /* Keyword */
& g_TimeOut, /* Parameter address */ &g_TimeOut, /* Parameter address */
600, /* Default value */ 600, /* Default value */
0, 60000 /* Valeurs extremes */ 0, 60000 /* Valeurs extremes */
); );
@ -769,7 +786,7 @@ static PARAM_CFG_BOOL DisplPolairCfg
( (
INSETUP, INSETUP,
wxT( "DPolair" ), /* Keyword */ wxT( "DPolair" ), /* Keyword */
& DisplayOpt.DisplayPolarCood, /* Parameter address */ &DisplayOpt.DisplayPolarCood, /* Parameter address */
FALSE /* Default value */ FALSE /* Default value */
); );
@ -777,7 +794,7 @@ static PARAM_CFG_INT CursorShapeCfg
( (
INSETUP, INSETUP,
wxT( "CuShape" ), /* Keyword */ wxT( "CuShape" ), /* Keyword */
& g_CursorShape, /* Parameter address */ &g_CursorShape, /* Parameter address */
0, /* Default value */ 0, /* Default value */
0, 1 /* Valeurs extremes */ 0, 1 /* Valeurs extremes */
); );
@ -785,7 +802,7 @@ static PARAM_CFG_INT CursorShapeCfg
static PARAM_CFG_INT PrmMaxLinksShowed static PARAM_CFG_INT PrmMaxLinksShowed
( (
wxT( "MaxLnkS" ), /* Keyword */ wxT( "MaxLnkS" ), /* Keyword */
& g_MaxLinksShowed, /* Parameter address */ &g_MaxLinksShowed, /* Parameter address */
3, /* Default value */ 3, /* Default value */
0, 15 /* Valeurs extremes */ 0, 15 /* Valeurs extremes */
); );
@ -793,14 +810,14 @@ static PARAM_CFG_INT PrmMaxLinksShowed
static PARAM_CFG_BOOL ShowRatsnestCfg static PARAM_CFG_BOOL ShowRatsnestCfg
( (
wxT( "ShowRat" ), /* Keyword */ wxT( "ShowRat" ), /* Keyword */
& g_Show_Ratsnest, /* Parameter address */ &g_Show_Ratsnest, /* Parameter address */
FALSE /* Default value */ FALSE /* Default value */
); );
static PARAM_CFG_BOOL ShowModuleRatsnestCfg static PARAM_CFG_BOOL ShowModuleRatsnestCfg
( (
wxT( "ShowMRa" ), /* Keyword */ wxT( "ShowMRa" ), /* Keyword */
& g_Show_Module_Ratsnest, /* Parameter address */ &g_Show_Module_Ratsnest, /* Parameter address */
TRUE /* Default value */ TRUE /* Default value */
); );
@ -808,7 +825,7 @@ static PARAM_CFG_BOOL TwoSegmentTrackBuildCfg
( (
INSETUP, INSETUP,
wxT( "TwoSegT" ), /* Keyword */ wxT( "TwoSegT" ), /* Keyword */
& g_TwoSegmentTrackBuild, /* Parameter address */ &g_TwoSegmentTrackBuild, /* Parameter address */
TRUE /* Default value */ TRUE /* Default value */
); );
@ -823,6 +840,8 @@ PARAM_CFG_BASE* ParamCfgList[] =
&PadMasqueLayerCfg, &PadMasqueLayerCfg,
&ViaDiametreCfg, &ViaDiametreCfg,
&ViaDrillCfg, &ViaDrillCfg,
&MicroViaDiametreCfg,
&MicroViaDrillCfg,
&ViaShowHoleCfg, &ViaShowHoleCfg,
&TrackClearenceCfg, &TrackClearenceCfg,
&LayerCountCfg, &LayerCountCfg,
@ -886,9 +905,9 @@ PARAM_CFG_BASE* ParamCfgList[] =
&ColorAncreModCfg, &ColorAncreModCfg,
&ColorPadCuCfg, &ColorPadCuCfg,
&ColorPadCmpCfg, &ColorPadCmpCfg,
&ColorViaNormCfg, &ColorViaThroughCfg,
&ColorViaborgneCfg, &ColorViaBlindBuriedCfg,
&ColorViaEnterreeCfg, &ColorViaMicroViaCfg,
&ColorpcbGrilleCfg, &ColorpcbGrilleCfg,
&ColorCheveluCfg, &ColorCheveluCfg,
&HPGLpenNumCfg, &HPGLpenNumCfg,

View File

@ -109,7 +109,7 @@ eda_global bool Drc_On
#endif #endif
; ;
eda_global bool g_AutoDeleteOldTrack /* Allows automatic deletion of the old track after eda_global bool g_AutoDeleteOldTrack /* Allows automatic deletion of the old track after
creation of a new track */ * creation of a new track */
#ifdef MAIN #ifdef MAIN
= TRUE = TRUE
#endif #endif
@ -157,9 +157,9 @@ bool inline IsModuleLayerVisible( int layer ) {
eda_global bool Track_45_Only; /* Flag pour limiter l'inclinaison eda_global bool Track_45_Only; /* Flag pour limiter l'inclinaison
* pistes a 45 degres seulement */ * pistes a 45 degres seulement */
eda_global bool Segments_45_Only;/* Flag pour limiter l'inclinaison eda_global bool Segments_45_Only; /* Flag pour limiter l'inclinaison
* edge pcb a 45 degres seulement */ * edge pcb a 45 degres seulement */
eda_global wxString PcbExtBuffer // Board file extension eda_global wxString PcbExtBuffer // Board file extension
#ifdef MAIN #ifdef MAIN
( wxT( ".brd" ) ) ( wxT( ".brd" ) )
#endif #endif
@ -169,13 +169,13 @@ eda_global wxString g_SaveFileName // File Name for periodic saving
( wxT( "$savepcb" ) ) ( wxT( "$savepcb" ) )
#endif #endif
; ;
eda_global wxString NetNameBuffer; // Netlist file extension eda_global wxString NetNameBuffer; // Netlist file extension
eda_global wxString NetExtBuffer eda_global wxString NetExtBuffer
#ifdef MAIN #ifdef MAIN
( wxT( ".net" ) ) ( wxT( ".net" ) )
#endif #endif
; ;
eda_global wxString NetCmpExtBuffer // cmp/footprint association file extension eda_global wxString NetCmpExtBuffer // cmp/footprint association file extension
#ifdef MAIN #ifdef MAIN
( wxT( ".cmp" ) ) ( wxT( ".cmp" ) )
#endif #endif
@ -187,7 +187,7 @@ eda_global wxString LibExtBuffer
( wxT( ".mod" ) ) ( wxT( ".mod" ) )
#endif #endif
; ;
eda_global wxString g_Shapes3DExtBuffer //3D shape file extension eda_global wxString g_Shapes3DExtBuffer //3D shape file extension
#ifdef MAIN #ifdef MAIN
( wxT( ".wrl" ) ) ( wxT( ".wrl" ) )
#endif #endif
@ -237,7 +237,7 @@ eda_global class EDA_BoardDesignSettings g_DesignSettings;
// Default values for pad editions // Default values for pad editions
#ifndef GERBVIEW #ifndef GERBVIEW
#ifdef MAIN #ifdef MAIN
D_PAD g_Pad_Master( (MODULE*) NULL ); D_PAD g_Pad_Master( (MODULE*) NULL );
#else #else
extern D_PAD g_Pad_Master; extern D_PAD g_Pad_Master;
@ -285,10 +285,10 @@ eda_global int g_TrackSegmentCount; // New created segment count
eda_global wxString g_ViaType_Name[4] eda_global wxString g_ViaType_Name[4]
#if defined MAIN #if defined MAIN
= { = {
wxT( "???" ), // Unused _( "??? Via" ), // Not used yet
_( "Blind Via" ), // from inner layer to external layer (TOP or BOTTOM) _( "Micro Via" ), // from external layer (TOP or BOTTOM) from the near neightbour inner layer only
_( "Buried Via" ), // from inner to inner layer _( "Blind/Buried Via" ), // from inner or external to inner or external layer (no restriction)
_( "Standard Via" ) // Usual via (from TOP to BOTTOM layer) _( "Through Via" ) // Usual via (from TOP to BOTTOM layer only )
} }

View File

@ -464,12 +464,8 @@ static void PrintDrillMark( BOARD* Pcb )
if( g_DrillShapeOpt == DRILL_MARK ) if( g_DrillShapeOpt == DRILL_MARK )
diam.x = diam.y = SMALL_DRILL; diam.x = diam.y = SMALL_DRILL;
else else
{ diam.x = diam.y = pts->GetDrillValue();
if( pts->m_Drill < 0 )
diam.x = diam.y = g_DesignSettings.m_ViaDrill;
else
diam.x = diam.y = pts->m_Drill;
}
trace_1_pastille_RONDE_POST( pos, diam.x, FILLED ); trace_1_pastille_RONDE_POST( pos, diam.x, FILLED );
} }

View File

@ -606,7 +606,7 @@ void WinEDA_PcbFrame::ReadAutoroutedTracks( wxDC* DC )
if( NewVia->GetLayer() == 0x0F || NewVia->GetLayer() == 0xF0 ) if( NewVia->GetLayer() == 0x0F || NewVia->GetLayer() == 0xF0 )
NewVia->m_Shape = VIA_THROUGH; NewVia->m_Shape = VIA_THROUGH;
else else
NewVia->m_Shape = VIA_BURIED; NewVia->m_Shape = VIA_BLIND_BURIED;
NewVia->Insert( m_Pcb, NULL ); NewVia->Insert( m_Pcb, NULL );
NbTrack++; NbTrack++;

View File

@ -336,19 +336,19 @@ static ColorButton VIA_THROUGH_Butt =
TRUE // Toggle ITEM_NOT_SHOW bit of the color variable TRUE // Toggle ITEM_NOT_SHOW bit of the color variable
}; };
static ColorButton Via_Aveugle_Butt = static ColorButton VIA_BLIND_BURIED_Butt =
{ {
wxT( "*" ), wxT( "*" ),
VIA_BLIND, // Layer VIA_BLIND_BURIED, // Layer
&g_DesignSettings.m_ViaColor[VIA_BLIND], // Address of optional parameter &g_DesignSettings.m_ViaColor[VIA_BLIND_BURIED], // Address of optional parameter
TRUE // Toggle ITEM_NOT_SHOW bit of the color variable TRUE // Toggle ITEM_NOT_SHOW bit of the color variable
}; };
static ColorButton BLIND_VIA_Butt = static ColorButton MICRO_VIA_Butt =
{ {
wxT( "*" ), wxT( "*" ),
VIA_BURIED, // Layer VIA_MICROVIA, // Layer
&g_DesignSettings.m_ViaColor[VIA_BURIED], // Address of optional parameter &g_DesignSettings.m_ViaColor[VIA_MICROVIA], // Address of optional parameter
TRUE // Toggle ITEM_NOT_SHOW bit of the color variable TRUE // Toggle ITEM_NOT_SHOW bit of the color variable
}; };
@ -491,8 +491,8 @@ static ColorButton* laytool_list[] = {
// &Layer_32_Butt, // &Layer_32_Butt,
&VIA_THROUGH_Butt, &VIA_THROUGH_Butt,
&Via_Aveugle_Butt, &VIA_BLIND_BURIED_Butt,
&BLIND_VIA_Butt, &MICRO_VIA_Butt,
&Ratsnest_Butt, &Ratsnest_Butt,
&Pad_Cu_Butt, &Pad_Cu_Butt,
&Pad_Cmp_Butt, &Pad_Cmp_Butt,

View File

@ -1,6 +1,6 @@
/**********************************************/ /**********************************************/
/* vi_edit.cpp: som editing function for vias */ /* vi_edit.cpp: som editing function for vias */
/**********************************************/ /**********************************************/
#include "fctsys.h" #include "fctsys.h"
#include "gr_basic.h" #include "gr_basic.h"
@ -12,93 +12,102 @@
/**********************************************************************************/ /**********************************************************************************/
void WinEDA_PcbFrame::Via_Edit_Control(wxDC * DC, int command_type, SEGVIA * via) void WinEDA_PcbFrame::Via_Edit_Control( wxDC* DC, int command_type, SEGVIA* via )
/**********************************************************************************/ /**********************************************************************************/
/*
Execute edit commands relative to vias
*/
{
int ii;
TRACK * via_struct ;
switch ( command_type )
{
case ID_POPUP_PCB_SELECT_VIASIZE1:
case ID_POPUP_PCB_SELECT_VIASIZE2:
case ID_POPUP_PCB_SELECT_VIASIZE3:
case ID_POPUP_PCB_SELECT_VIASIZE4:
case ID_POPUP_PCB_SELECT_VIASIZE5:
case ID_POPUP_PCB_SELECT_VIASIZE6:
case ID_POPUP_PCB_SELECT_VIASIZE7:
case ID_POPUP_PCB_SELECT_VIASIZE8: // selec the new current value for via size (via diameter)
DrawPanel->MouseToCursorSchema();
ii = command_type - ID_POPUP_PCB_SELECT_VIASIZE1;
g_DesignSettings.m_CurrentViaSize = g_DesignSettings.m_ViaSizeHistory[ii];
DisplayTrackSettings();
break;
case ID_POPUP_PCB_VIA_HOLE_ENTER_VALUE: // Enter a new alternate value for drill via
InstallPcbOptionsFrame(wxDefaultPosition, DC, ID_PCB_TRACK_SIZE_SETUP);
DrawPanel->MouseToCursorSchema();
case ID_POPUP_PCB_VIA_HOLE_TO_VALUE: // Set the drill via to custom
if ( (g_ViaHoleLastValue > 0) && (g_ViaHoleLastValue < via->m_Width) )
{
via->Draw(DrawPanel, DC, GR_XOR);
via->m_Drill = g_ViaHoleLastValue;
via->Draw(DrawPanel, DC, GR_OR);
GetScreen()->SetModify();
}
else DisplayError(this, _("Incorrect value for Via drill. No via drill change"));
break;
case ID_POPUP_PCB_VIA_HOLE_EXPORT: // Export the current drill value as the new custom value
if ( via->m_Drill > 0 ) g_ViaHoleLastValue = via->m_Drill;
break;
case ID_POPUP_PCB_VIA_HOLE_EXPORT_TO_OTHERS:// Export the current drill value to via which héave the same size
if ( via->m_Drill > 0 ) g_ViaHoleLastValue = via->m_Drill;
via_struct = m_Pcb->m_Track ;
for ( ; via_struct != NULL; via_struct = (TRACK*) via_struct->Pnext )
{
if( via_struct->Type() == TYPEVIA ) /* mise a jour du diametre de la via */
{
if ( via_struct->m_Width != via->m_Width ) continue;
via_struct->Draw(DrawPanel, DC, GR_XOR);
via_struct->m_Drill = via->m_Drill;
via_struct->Draw(DrawPanel, DC, GR_OR);
}
}
GetScreen()->SetModify();
break;
case ID_POPUP_PCB_VIA_HOLE_TO_DEFAULT: /*
via->Draw(DrawPanel, DC, GR_XOR); * Execute edit commands relative to vias
via->m_Drill = -1; */
via->Draw(DrawPanel, DC, GR_OR); {
GetScreen()->SetModify(); int ii;
break; TRACK* via_struct;
case ID_POPUP_PCB_VIA_HOLE_RESET_TO_DEFAULT: // Reset all via hole to default value switch( command_type )
via_struct = m_Pcb->m_Track ; {
for ( ; via_struct != NULL; via_struct = (TRACK*) via_struct->Pnext ) case ID_POPUP_PCB_SELECT_VIASIZE1:
{ case ID_POPUP_PCB_SELECT_VIASIZE2:
if( via_struct->Type() == TYPEVIA ) /* mise a jour du diametre de la via */ case ID_POPUP_PCB_SELECT_VIASIZE3:
{ case ID_POPUP_PCB_SELECT_VIASIZE4:
if( via_struct->m_Drill != -1 ) case ID_POPUP_PCB_SELECT_VIASIZE5:
{ case ID_POPUP_PCB_SELECT_VIASIZE6:
via_struct->Draw(DrawPanel, DC, GR_XOR); case ID_POPUP_PCB_SELECT_VIASIZE7:
via_struct->m_Drill = -1; case ID_POPUP_PCB_SELECT_VIASIZE8: // selec the new current value for via size (via diameter)
via_struct->Draw(DrawPanel, DC, GR_OR); DrawPanel->MouseToCursorSchema();
} ii = command_type - ID_POPUP_PCB_SELECT_VIASIZE1;
} g_DesignSettings.m_CurrentViaSize = g_DesignSettings.m_ViaSizeHistory[ii];
} DisplayTrackSettings();
GetScreen()->SetModify(); break;
break;
case ID_POPUP_PCB_VIA_HOLE_ENTER_VALUE: // Enter a new alternate value for drill via
default: InstallPcbOptionsFrame( wxDefaultPosition, DC, ID_PCB_TRACK_SIZE_SETUP );
DisplayError( this, wxT("WinEDA_PcbFrame::Via_Edition() error: unknown command")); DrawPanel->MouseToCursorSchema();
break;
} case ID_POPUP_PCB_VIA_HOLE_TO_VALUE: // Set the drill via to custom
DrawPanel->MouseToCursorSchema(); if( (g_ViaHoleLastValue > 0) && (g_ViaHoleLastValue < via->m_Width) )
{
via->Draw( DrawPanel, DC, GR_XOR );
via->SetDrillValue( g_ViaHoleLastValue );
via->Draw( DrawPanel, DC, GR_OR );
GetScreen()->SetModify();
}
else
DisplayError( this, _( "Incorrect value for Via drill. No via drill change" ) );
break;
case ID_POPUP_PCB_VIA_HOLE_EXPORT: // Export the current drill value as the new custom value
if( via->GetDrillValue() > 0 )
g_ViaHoleLastValue = via->GetDrillValue();
break;
case ID_POPUP_PCB_VIA_HOLE_EXPORT_TO_OTHERS: // Export the current drill value to via which héave the same size
if( via->GetDrillValue() > 0 )
g_ViaHoleLastValue = via->GetDrillValue();
via_struct = m_Pcb->m_Track;
for( ; via_struct != NULL; via_struct = (TRACK*) via_struct->Pnext )
{
if( via_struct->Type() == TYPEVIA ) /* mise a jour du diametre de la via */
{
if( via_struct->m_Width != via->m_Width )
continue;
via_struct->Draw( DrawPanel, DC, GR_XOR );
via_struct->SetDrillValue( via->GetDrillValue() );
via_struct->Draw( DrawPanel, DC, GR_OR );
}
}
GetScreen()->SetModify();
break;
case ID_POPUP_PCB_VIA_HOLE_TO_DEFAULT:
via->Draw( DrawPanel, DC, GR_XOR );
via->SetDrillDefault();
via->Draw( DrawPanel, DC, GR_OR );
GetScreen()->SetModify();
break;
case ID_POPUP_PCB_VIA_HOLE_RESET_TO_DEFAULT: // Reset all via hole to default value
via_struct = m_Pcb->m_Track;
for( ; via_struct != NULL; via_struct = (TRACK*) via_struct->Pnext )
{
if( via_struct->Type() == TYPEVIA ) /* mise a jour du diametre de la via */
{
if( via_struct->IsDrillDefault() )
{
via_struct->Draw( DrawPanel, DC, GR_XOR );
via_struct->SetDrillDefault();
via_struct->Draw( DrawPanel, DC, GR_OR );
}
}
}
GetScreen()->SetModify();
break;
default:
DisplayError( this, wxT( "WinEDA_PcbFrame::Via_Edition() error: unknown command" ) );
break;
}
DrawPanel->MouseToCursorSchema();
} }