pcbnew: bug solved: pad holes not printed

This commit is contained in:
charras 2008-08-09 08:05:42 +00:00
parent f98fd09f84
commit 5f777f8c60
8 changed files with 232 additions and 127 deletions

View File

@ -5,6 +5,12 @@ 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.
2008-Aug-09 UPDATE Jean-Pierre Charras <jean-pierre.charras@inpg.fr>
================================================================================
+pcbnew:
bug solved: pads holes not printed.
+eeschema
enforced controls against malformed libraries
2008-Aug-06 UPDATE Jean-Pierre Charras <jean-pierre.charras@inpg.fr> 2008-Aug-06 UPDATE Jean-Pierre Charras <jean-pierre.charras@inpg.fr>
================================================================================ ================================================================================

View File

@ -320,10 +320,22 @@ void GRSetBrush( wxDC* DC, int Color, int fill )
/*************************************/ /*************************************/
void GRForceBlackPen( bool flagforce ) void GRForceBlackPen( bool flagforce )
/*************************************/ /*************************************/
/** function GRForceBlackPen
* @param flagforce True to force a black pen whenever the asked color
*/
{ {
ForceBlackPen = flagforce; ForceBlackPen = flagforce;
} }
/***********************************/
bool GetGRForceBlackPenState( void )
/***********************************/
/** function GetGRForceBlackPenState
* @return ForceBlackPen (True if a black pen was forced)
*/
{
return ForceBlackPen;
}
/************************************************************/ /************************************************************/
/* routines de controle et positionnement du curseur souris */ /* routines de controle et positionnement du curseur souris */

View File

@ -67,7 +67,16 @@ int GRGetDrawMode(wxDC * DC);
void GRResetPenAndBrush(wxDC * DC); void GRResetPenAndBrush(wxDC * DC);
void GRSetColorPen(wxDC * DC, int Color , int width = 1, int stype = wxSOLID); void GRSetColorPen(wxDC * DC, int Color , int width = 1, int stype = wxSOLID);
void GRSetBrush(wxDC * DC, int Color , int fill = 0); void GRSetBrush(wxDC * DC, int Color , int fill = 0);
/** function GRForceBlackPen
* @param flagforce True to force a black pen whenever the asked color
*/
void GRForceBlackPen(bool flagforce ); void GRForceBlackPen(bool flagforce );
/** function GetGRForceBlackPenState
* @return ForceBlackPen (True if a black pen was forced)
*/
bool GetGRForceBlackPenState( void );
void SetPenMinWidth(int minwidth); /* ajustage de la largeur mini de plume */ void SetPenMinWidth(int minwidth); /* ajustage de la largeur mini de plume */
void GRLine(EDA_Rect * ClipBox, wxDC * DC, int x1, int y1, int x2, int y2, int width, int Color); void GRLine(EDA_Rect * ClipBox, wxDC * DC, int x1, int y1, int x2, int y2, int width, int Color);

View File

@ -571,7 +571,7 @@ int MODULE::ReadDescr( FILE* File, int* LineNum )
EDA_BaseStruct* LastModStruct = NULL; EDA_BaseStruct* LastModStruct = NULL;
EDGE_MODULE* DrawSegm; EDGE_MODULE* DrawSegm;
TEXTE_MODULE* DrawText; TEXTE_MODULE* DrawText;
char Line[256], BufLine[256], BufCar1[128], BufCar2[128], * PtLine; char Line[256], BufLine[256], BufCar1[128], * PtLine;
int itmp1, itmp2; int itmp1, itmp2;
while( GetLine( File, Line, LineNum, sizeof(Line) - 1 ) != NULL ) while( GetLine( File, Line, LineNum, sizeof(Line) - 1 ) != NULL )
@ -672,7 +672,7 @@ int MODULE::ReadDescr( FILE* File, int* LineNum )
} }
break; break;
case 'T': /* lecture des textes modules */ case 'T': /* Read a footprint text description (ref, value, or drawing */
sscanf( Line + 1, "%d", &itmp1 ); sscanf( Line + 1, "%d", &itmp1 );
if( itmp1 == TEXT_is_REFERENCE ) if( itmp1 == TEXT_is_REFERENCE )
DrawText = m_Reference; DrawText = m_Reference;
@ -694,48 +694,7 @@ int MODULE::ReadDescr( FILE* File, int* LineNum )
LastModStruct = DrawText; LastModStruct = DrawText;
} }
int layer; DrawText->ReadDescr( Line, File, LineNum );
sscanf( Line + 1, "%d %d %d %d %d %d %d %s %s %d",
&itmp1,
&DrawText->m_Pos0.x, &DrawText->m_Pos0.y,
&DrawText->m_Size.y, &DrawText->m_Size.x,
&DrawText->m_Orient, &DrawText->m_Width,
BufCar1, BufCar2, &layer );
DrawText->m_Type = itmp1;
DrawText->m_Orient -= m_Orient; // m_Orient texte relative au module
if( BufCar1[0] == 'M' )
DrawText->m_Miroir = 0;
else
DrawText->m_Miroir = 1;
if( BufCar2[0] == 'I' )
DrawText->m_NoShow = 1;
else
DrawText->m_NoShow = 0;
if( layer == COPPER_LAYER_N )
layer = SILKSCREEN_N_CU;
else if( layer == CMP_N )
layer = SILKSCREEN_N_CMP;
DrawText->SetLayer( layer );
/* calcul de la position vraie */
DrawText->SetDrawCoord();
/* Lecture de la chaine "text" */
ReadDelimitedText( BufLine, Line, sizeof(BufLine) );
DrawText->m_Text = CONV_FROM_UTF8( BufLine );
// Test for a reasonnable width:
if( DrawText->m_Width <= 1 )
DrawText->m_Width = 1;
if( DrawText->m_Width > TEXTS_MAX_WIDTH )
DrawText->m_Width = TEXTS_MAX_WIDTH;
// Test for a reasonnable size:
if ( DrawText->m_Size.x < TEXTS_MIN_SIZE )
DrawText->m_Size.x = TEXTS_MIN_SIZE;
if ( DrawText->m_Size.y < TEXTS_MIN_SIZE )
DrawText->m_Size.y = TEXTS_MIN_SIZE;
break; break;
case 'D': /* lecture du contour */ case 'D': /* lecture du contour */

View File

@ -550,7 +550,15 @@ void D_PAD::Draw( WinEDA_DrawPanel* panel, wxDC* DC, int draw_mode, const wxPoin
if( fillpad && hole ) if( fillpad && hole )
{ {
color = g_IsPrinting ? WHITE : BLACK; // ou DARKGRAY; bool blackpenstate = false;
if ( g_IsPrinting )
{
blackpenstate = GetGRForceBlackPenState( );
GRForceBlackPen( false );
color = WHITE;
}
else
color = BLACK; // or DARKGRAY;
if( draw_mode != GR_XOR ) if( draw_mode != GR_XOR )
GRSetDrawMode( DC, GR_COPY ); GRSetDrawMode( DC, GR_COPY );
@ -589,6 +597,8 @@ void D_PAD::Draw( WinEDA_DrawPanel* panel, wxDC* DC, int draw_mode, const wxPoin
default: default:
break; break;
} }
if ( g_IsPrinting )
GRForceBlackPen( blackpenstate );
} }
GRSetDrawMode( DC, draw_mode ); GRSetDrawMode( DC, draw_mode );

View File

@ -45,7 +45,7 @@ TEXTE_MODULE::TEXTE_MODULE( MODULE* parent, int text_type ) :
SetLayer( SILKSCREEN_N_CMP ); SetLayer( SILKSCREEN_N_CMP );
if( Module && (Module->Type() == TYPEMODULE) ) if( Module && (Module->Type() == TYPEMODULE) )
{ {
m_Pos = Module->m_Pos; m_Pos = Module->m_Pos;
int moduleLayer = Module->GetLayer(); int moduleLayer = Module->GetLayer();
@ -57,8 +57,8 @@ TEXTE_MODULE::TEXTE_MODULE( MODULE* parent, int text_type ) :
SetLayer( moduleLayer ); SetLayer( moduleLayer );
if( moduleLayer == SILKSCREEN_N_CU if( moduleLayer == SILKSCREEN_N_CU
|| moduleLayer == ADHESIVE_N_CU || moduleLayer == ADHESIVE_N_CU
|| moduleLayer == COPPER_LAYER_N ) || moduleLayer == COPPER_LAYER_N )
{ {
m_Miroir = 0; m_Miroir = 0;
} }
@ -74,6 +74,13 @@ TEXTE_MODULE::~TEXTE_MODULE()
/*******************************************/ /*******************************************/
bool TEXTE_MODULE::Save( FILE* aFile ) const bool TEXTE_MODULE::Save( FILE* aFile ) const
/*******************************************/ /*******************************************/
/**
* Function Save
* writes the data structures for this object out to a FILE in "*.brd" format.
* @param aFile The FILE to write to.
* @return bool - true if success writing else false.
*/
{ {
MODULE* parent = (MODULE*) GetParent(); MODULE* parent = (MODULE*) GetParent();
int orient = m_Orient; int orient = m_Orient;
@ -82,25 +89,106 @@ bool TEXTE_MODULE::Save( FILE* aFile ) const
orient += parent->m_Orient; orient += parent->m_Orient;
int ret = fprintf( aFile, "T%d %d %d %d %d %d %d %c %c %d \"%s\"\n", int ret = fprintf( aFile, "T%d %d %d %d %d %d %d %c %c %d \"%s\"\n",
m_Type, m_Type,
m_Pos0.x, m_Pos0.y, m_Pos0.x, m_Pos0.y,
m_Size.y, m_Size.x, m_Size.y, m_Size.x,
orient, orient,
m_Width, m_Width,
m_Miroir ? 'N' : 'M', m_NoShow ? 'I' : 'V', m_Miroir ? 'N' : 'M', m_NoShow ? 'I' : 'V',
GetLayer(), GetLayer(),
CONV_TO_UTF8( m_Text ) ); CONV_TO_UTF8( m_Text ) );
return (ret > 20); return ret > 20;
} }
void TEXTE_MODULE::Copy( TEXTE_MODULE* source ) // copy structure /*********************************************************************/
int TEXTE_MODULE::ReadDescr( char* aLine, FILE* aFile, int* aLineNum )
/*********************************************************************/
/**
* Function ReadLineDescr
* Read description from a given line in "*.brd" format.
* @param aLine The current line which contains the first line of description.
* @param aLine The FILE to read next lines (currently not used).
* @param LineNum a point to the line count (currently not used).
* @return int - > 0 if success reading else 0.
*/
{
int success = true;
int type;
int layer;
char BufCar1[128], BufCar2[128], BufLine[256];
layer = SILKSCREEN_N_CMP;
BufCar1[0] = 0;
BufCar2[0] = 0;
if ( sscanf( aLine + 1, "%d %d %d %d %d %d %d %s %s %d",
&type,
&m_Pos0.x, &m_Pos0.y,
&m_Size.y, &m_Size.x,
&m_Orient, &m_Width,
BufCar1, BufCar2, &layer ) < 10 )
success = true;
if( (type != TEXT_is_REFERENCE) && (type != TEXT_is_VALUE) )
type = TEXT_is_DIVERS;
m_Type = type;
// .m_Orient member must be relative to the parent module
m_Orient -= ((MODULE * )m_Parent)->m_Orient;
if( BufCar1[0] == 'M' )
m_Miroir = 0;
else
m_Miroir = 1;
if( BufCar2[0] == 'I' )
m_NoShow = 1;
else
m_NoShow = 0;
// Test for a reasonnable layer:
if( layer < 0 )
layer = 0;
if( layer > LAST_NO_COPPER_LAYER )
layer = LAST_NO_COPPER_LAYER;
if( layer == COPPER_LAYER_N )
layer = SILKSCREEN_N_CU;
else if( layer == CMP_N )
layer = SILKSCREEN_N_CMP;
SetLayer( layer );
/* calcul de la position vraie */
SetDrawCoord();
/* Lecture de la chaine "text" */
ReadDelimitedText( BufLine, aLine, sizeof(BufLine) );
m_Text = CONV_FROM_UTF8( BufLine );
// Test for a reasonnable width:
if( m_Width <= 1 )
m_Width = 1;
if( m_Width > TEXTS_MAX_WIDTH )
m_Width = TEXTS_MAX_WIDTH;
// Test for a reasonnable size:
if( m_Size.x < TEXTS_MIN_SIZE )
m_Size.x = TEXTS_MIN_SIZE;
if( m_Size.y < TEXTS_MIN_SIZE )
m_Size.y = TEXTS_MIN_SIZE;
return success;
}
/**********************************************/
void TEXTE_MODULE::Copy( TEXTE_MODULE* source )
/**********************************************/
// copy structure
{ {
if( source == NULL ) if( source == NULL )
return; return;
m_Pos = source->m_Pos; m_Pos = source->m_Pos;
SetLayer( source->GetLayer() ); SetLayer( source->GetLayer() );
m_Miroir = source->m_Miroir; // Show normal / mirror m_Miroir = source->m_Miroir; // Show normal / mirror
@ -201,27 +289,29 @@ void TEXTE_MODULE:: SetLocalCoord()
/** Function GetTextRect /** Function GetTextRect
* @return an EDA_Rect which gives the position and size of the text area (for the O orient footprint) * @return an EDA_Rect which gives the position and size of the text area (for the O orient footprint)
*/ */
EDA_Rect TEXTE_MODULE::GetTextRect(void) EDA_Rect TEXTE_MODULE::GetTextRect( void )
{ {
EDA_Rect area; EDA_Rect area;
int dx, dy; int dx, dy;
dx = ( m_Size.x * GetLength() ) / 2;
dx = (dx * 10) / 9 ; /* letter size = 10/9 */
dx += m_Width / 2;
dy = ( m_Size.y + m_Width ) / 2;
wxPoint Org = m_Pos; // This is the position of the centre of the area dx = ( m_Size.x * GetLength() ) / 2;
dx = (dx * 10) / 9; /* letter size = 10/9 */
dx += m_Width / 2;
dy = ( m_Size.y + m_Width ) / 2;
wxPoint Org = m_Pos; // This is the position of the centre of the area
Org.x -= dx; Org.x -= dx;
Org.y -= dy; Org.y -= dy;
area.SetOrigin( Org); area.SetOrigin( Org );
area.SetHeight(2 * dy); area.SetHeight( 2 * dy );
area.SetWidth(2 * dx); area.SetWidth( 2 * dx );
area.Normalize(); area.Normalize();
return area; return area;
} }
/** /**
* Function HitTest * Function HitTest
* tests if the given wxPoint is within the bounds of this object. * tests if the given wxPoint is within the bounds of this object.
@ -230,21 +320,22 @@ EDA_Rect TEXTE_MODULE::GetTextRect(void)
*/ */
bool TEXTE_MODULE::HitTest( const wxPoint& refPos ) bool TEXTE_MODULE::HitTest( const wxPoint& refPos )
{ {
wxPoint rel_pos; wxPoint rel_pos;
EDA_Rect area = GetTextRect(); EDA_Rect area = GetTextRect();
/* Rotate refPos to - angle /* Rotate refPos to - angle
* to test if refPos is within area (which is relative to an horizontal text) * to test if refPos is within area (which is relative to an horizontal text)
*/ */
rel_pos = refPos; rel_pos = refPos;
RotatePoint( &rel_pos, m_Pos, - GetDrawRotation() ); RotatePoint( &rel_pos, m_Pos, -GetDrawRotation() );
if( area.Inside(rel_pos) ) if( area.Inside( rel_pos ) )
return true; return true;
return false; return false;
} }
/** /**
* Function GetBoundingBox * Function GetBoundingBox
* returns the bounding box of this Text (according to text and footprint orientation) * returns the bounding box of this Text (according to text and footprint orientation)
@ -253,23 +344,24 @@ EDA_Rect TEXTE_MODULE::GetBoundingBox()
{ {
// Calculate area without text fielsd: // Calculate area without text fielsd:
EDA_Rect text_area; EDA_Rect text_area;
int angle = GetDrawRotation(); int angle = GetDrawRotation();
wxPoint textstart, textend; wxPoint textstart, textend;
text_area = GetTextRect(); text_area = GetTextRect();
textstart = text_area.GetOrigin(); textstart = text_area.GetOrigin();
textend = text_area.GetEnd(); textend = text_area.GetEnd();
RotatePoint( &textstart, m_Pos, angle); RotatePoint( &textstart, m_Pos, angle );
RotatePoint( &textend, m_Pos, angle); RotatePoint( &textend, m_Pos, angle );
text_area.SetOrigin(textstart); text_area.SetOrigin( textstart );
text_area.SetEnd(textend); text_area.SetEnd( textend );
text_area.Normalize(); text_area.Normalize();
return text_area; return text_area;
} }
/******************************************************************************************/ /******************************************************************************************/
void TEXTE_MODULE::Draw( WinEDA_DrawPanel* panel, wxDC* DC, int draw_mode, const wxPoint& offset ) void TEXTE_MODULE::Draw( WinEDA_DrawPanel* panel, wxDC* DC, int draw_mode, const wxPoint& offset )
/******************************************************************************************/ /******************************************************************************************/
/** Function Draw /** Function Draw
@ -316,11 +408,11 @@ void TEXTE_MODULE::Draw( WinEDA_DrawPanel* panel, wxDC* DC, int draw_mode, cons
{ {
int anchor_size = 2 * zoom; int anchor_size = 2 * zoom;
GRLine( &panel->m_ClipBox, DC, GRLine( &panel->m_ClipBox, DC,
pos.x - anchor_size, pos.y, pos.x - anchor_size, pos.y,
pos.x + anchor_size, pos.y, 0, g_AnchorColor ); pos.x + anchor_size, pos.y, 0, g_AnchorColor );
GRLine( &panel->m_ClipBox, DC, GRLine( &panel->m_ClipBox, DC,
pos.x, pos.y - anchor_size, pos.x, pos.y - anchor_size,
pos.x, pos.y + anchor_size, 0, g_AnchorColor ); pos.x, pos.y + anchor_size, 0, g_AnchorColor );
} }
color = g_DesignSettings.m_LayerColor[Module->GetLayer()]; color = g_DesignSettings.m_LayerColor[Module->GetLayer()];
@ -346,7 +438,7 @@ void TEXTE_MODULE::Draw( WinEDA_DrawPanel* panel, wxDC* DC, int draw_mode, cons
/* Trace du texte */ /* Trace du texte */
DrawGraphicText( panel, DC, pos, color, m_Text, DrawGraphicText( panel, DC, pos, color, m_Text,
orient, size, GR_TEXT_HJUSTIFY_CENTER, GR_TEXT_VJUSTIFY_CENTER, width ); orient, size, GR_TEXT_HJUSTIFY_CENTER, GR_TEXT_VJUSTIFY_CENTER, width );
} }
@ -382,18 +474,19 @@ void TEXTE_MODULE::Display_Infos( WinEDA_DrawFrame* frame )
wxString msg, Line; wxString msg, Line;
int ii; int ii;
MODULE* module = (MODULE*) m_Parent; MODULE* module = (MODULE*) m_Parent;
wxASSERT( module ); wxASSERT( module );
if( !module ) if( !module )
return; return;
BOARD* board = (BOARD*) module->m_Parent; BOARD* board = (BOARD*) module->m_Parent;
wxASSERT( board ); wxASSERT( board );
static const wxString text_type_msg[3] = { static const wxString text_type_msg[3] = {
_( "Ref." ), _( "Value" ), _( "Text" ) }; _( "Ref." ), _( "Value" ), _( "Text" )
};
frame->MsgPanel->EraseMsgBox(); frame->MsgPanel->EraseMsgBox();
@ -409,11 +502,11 @@ void TEXTE_MODULE::Display_Infos( WinEDA_DrawFrame* frame )
Affiche_1_Parametre( frame, 20, _( "Type" ), text_type_msg[ii], DARKGREEN ); Affiche_1_Parametre( frame, 20, _( "Type" ), text_type_msg[ii], DARKGREEN );
Affiche_1_Parametre( frame, 25, _( "Display" ), wxEmptyString, DARKGREEN );
if( m_NoShow ) if( m_NoShow )
Affiche_1_Parametre( frame, -1, wxEmptyString, _( "No" ), DARKGREEN ); msg = _( "No" );
else else
Affiche_1_Parametre( frame, -1, wxEmptyString, _( "Yes" ), DARKGREEN ); msg = _( "Yes" );
Affiche_1_Parametre( frame, 25, _( "Display" ), msg, DARKGREEN );
ii = m_Layer; ii = m_Layer;
if( ii < NB_LAYERS ) if( ii < NB_LAYERS )
@ -431,16 +524,16 @@ void TEXTE_MODULE::Display_Infos( WinEDA_DrawFrame* frame )
Affiche_1_Parametre( frame, 36, _( "Mirror" ), msg, DARKGREEN ); Affiche_1_Parametre( frame, 36, _( "Mirror" ), msg, DARKGREEN );
msg.Printf( wxT( "%.1f" ), (float) m_Orient / 10 ); msg.Printf( wxT( "%.1f" ), (float) m_Orient / 10 );
Affiche_1_Parametre( frame, 42, _( "Orient" ), msg, DARKGREEN ); Affiche_1_Parametre( frame, 43, _( "Orient" ), msg, DARKGREEN );
valeur_param( m_Width, msg ); valeur_param( m_Width, msg );
Affiche_1_Parametre( frame, 48, _( "Width" ), msg, DARKGREEN ); Affiche_1_Parametre( frame, 51, _( "Width" ), msg, DARKGREEN );
valeur_param( m_Size.x, msg ); valeur_param( m_Size.x, msg );
Affiche_1_Parametre( frame, 56, _( "H Size" ), msg, RED ); Affiche_1_Parametre( frame, 60, _( "H Size" ), msg, RED );
valeur_param( m_Size.y, msg ); valeur_param( m_Size.y, msg );
Affiche_1_Parametre( frame, 64, _( "V Size" ), msg, RED ); Affiche_1_Parametre( frame, 69, _( "V Size" ), msg, RED );
} }
@ -459,7 +552,6 @@ bool TEXTE_MODULE::IsOnLayer( int aLayer ) const
if( m_Layer==ADHESIVE_N_CU || m_Layer==SILKSCREEN_N_CU ) if( m_Layer==ADHESIVE_N_CU || m_Layer==SILKSCREEN_N_CU )
return true; return true;
} }
else if( aLayer == CMP_N ) else if( aLayer == CMP_N )
{ {
if( m_Layer==ADHESIVE_N_CMP || m_Layer==SILKSCREEN_N_CMP ) if( m_Layer==ADHESIVE_N_CMP || m_Layer==SILKSCREEN_N_CMP )
@ -471,14 +563,15 @@ bool TEXTE_MODULE::IsOnLayer( int aLayer ) const
/* see class_text_mod.h /* see class_text_mod.h
bool TEXTE_MODULE::IsOnOneOfTheseLayers( int aLayerMask ) const * bool TEXTE_MODULE::IsOnOneOfTheseLayers( int aLayerMask ) const
{ * {
*
} * }
*/ */
#if defined(DEBUG) #if defined (DEBUG)
/** /**
* Function Show * Function Show
* is used to output the object tree, currently for debugging only. * is used to output the object tree, currently for debugging only.
@ -490,8 +583,10 @@ void TEXTE_MODULE::Show( int nestLevel, std::ostream& os )
{ {
// for now, make it look like XML: // for now, make it look like XML:
NestedSpace( nestLevel, os ) << '<' << GetClass().Lower().mb_str() << NestedSpace( nestLevel, os ) << '<' << GetClass().Lower().mb_str() <<
" string=\"" << m_Text.mb_str() << "\"/>\n"; " string=\"" << m_Text.mb_str() << "\"/>\n";
// NestedSpace( nestLevel, os ) << "</" << GetClass().Lower().mb_str() << ">\n"; // NestedSpace( nestLevel, os ) << "</" << GetClass().Lower().mb_str() << ">\n";
} }
#endif #endif

View File

@ -46,20 +46,20 @@ public:
/* supprime du chainage la structure Struct */ /* supprime du chainage la structure Struct */
void UnLink(); void UnLink();
void Copy( TEXTE_MODULE* source ); // copy structure void Copy( TEXTE_MODULE* source ); // copy structure
/* Gestion du texte */ /* Gestion du texte */
void SetWidth( int new_width ); void SetWidth( int new_width );
int GetLength(); /* text length */ int GetLength(); /* text length */
int Pitch(); /* retourne le pas entre 2 caracteres */ int Pitch(); /* retourne le pas entre 2 caracteres */
int GetDrawRotation(); // Return text rotation for drawings and plotting int GetDrawRotation(); // Return text rotation for drawings and plotting
/** Function GetTextRect /** Function GetTextRect
* @return an EDA_Rect which gives the position and size of the text area (for the 0 orient text and footprint) * @return an EDA_Rect which gives the position and size of the text area (for the 0 orient text and footprint)
*/ */
EDA_Rect GetTextRect(void); EDA_Rect GetTextRect( void );
/** /**
* Function GetBoundingBox * Function GetBoundingBox
@ -67,10 +67,11 @@ public:
*/ */
EDA_Rect GetBoundingBox(); EDA_Rect GetBoundingBox();
void SetDrawCoord(); // mise a jour des coordonn<6E>s absolues de trac<61> void SetDrawCoord(); // mise a jour des coordonn<6E>s absolues de trac<61>
// a partir des coord relatives
void SetLocalCoord(); // mise a jour des coordonn<6E>s relatives // a partir des coord relatives
void SetLocalCoord(); // mise a jour des coordonn<6E>s relatives
/** /**
* Function Save * Function Save
@ -78,13 +79,23 @@ public:
* @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;
/**
int ReadDescr( FILE* File, int* LineNum = NULL ); * Function ReadLineDescr
* Read description from a given line in "*.brd" format.
* @param aLine The current line which contains the first line of description.
* @param aLine The FILE to read next lines (currently not used).
* @param LineNum a point to the line count (currently not used).
* @return int - > 0 if success reading else 0.
*/
int ReadDescr( char* aLine, FILE* aFile, int* aLineNum = NULL );
/* drawing functions */ /* drawing functions */
void Draw( WinEDA_DrawPanel* panel, wxDC* DC, int aDrawMode, const wxPoint& offset = ZeroOffset ); void Draw( WinEDA_DrawPanel* panel,
wxDC* DC,
int aDrawMode,
const wxPoint& offset = ZeroOffset );
/** /**
@ -94,7 +105,7 @@ public:
* Is virtual from EDA_BaseStruct. * Is virtual from EDA_BaseStruct.
* @param frame A WinEDA_DrawFrame in which to print status information. * @param frame A WinEDA_DrawFrame in which to print status information.
*/ */
void Display_Infos( WinEDA_DrawFrame* frame ); void Display_Infos( WinEDA_DrawFrame* frame );
/** /**
@ -103,7 +114,7 @@ public:
* @param posref A wxPoint to test * @param posref A wxPoint to test
* @return bool - true if a hit, else false * @return bool - true if a hit, else false
*/ */
bool HitTest( const wxPoint& posref ); bool HitTest( const wxPoint& posref );
/** /**
* Function IsOnLayer * Function IsOnLayer
@ -124,12 +135,10 @@ public:
* virtual inheritance from BOARD_ITEM. * virtual inheritance from BOARD_ITEM.
* @param aLayerMask The bit-mapped set of layers to test for. * @param aLayerMask The bit-mapped set of layers to test for.
* @return bool - true if on one of the given layers, else false. * @return bool - true if on one of the given layers, else false.
bool IsOnOneOfTheseLayers( int aLayerMask ) const; * bool IsOnOneOfTheseLayers( int aLayerMask ) const;
*/ */
/** /**
* Function GetClass * Function GetClass
* returns the class name. * returns the class name.
@ -140,7 +149,9 @@ public:
return wxT( "MTEXT" ); return wxT( "MTEXT" );
} }
#if defined(DEBUG)
#if defined (DEBUG)
/** /**
* Function Show * Function Show
* is used to output the object tree, currently for debugging only. * is used to output the object tree, currently for debugging only.
@ -149,8 +160,8 @@ public:
* @param os The ostream& to output to. * @param os The ostream& to output to.
*/ */
virtual void Show( int nestLevel, std::ostream& os ); virtual void Show( int nestLevel, std::ostream& os );
#endif #endif
}; };
#endif // TEXT_MODULE_H #endif // TEXT_MODULE_H

View File

@ -108,10 +108,12 @@ void WinEDA_DrawPanel::PrintPage( wxDC* DC, bool Print_Sheet_Ref, int printmaskl
Plot_Module( this, DC, Module, drawmode, printmasklayer ); Plot_Module( this, DC, Module, drawmode, printmasklayer );
} }
/* draw the via holes */ /* draw the via holes in white color*/
pt_piste = Pcb->m_Track; pt_piste = Pcb->m_Track;
int rayon = g_DesignSettings.m_ViaDrill / 2; int rayon = g_DesignSettings.m_ViaDrill / 2;
int color = WHITE; int color = WHITE;
bool blackpenstate = GetGRForceBlackPenState( );
GRForceBlackPen( FALSE );
for( ; pt_piste != NULL; pt_piste = (TRACK*) pt_piste->Pnext ) for( ; pt_piste != NULL; pt_piste = (TRACK*) pt_piste->Pnext )
{ {
if( ( printmasklayer & pt_piste->ReturnMaskLayer() ) == 0 ) if( ( printmasklayer & pt_piste->ReturnMaskLayer() ) == 0 )
@ -123,6 +125,7 @@ void WinEDA_DrawPanel::PrintPage( wxDC* DC, bool Print_Sheet_Ref, int printmaskl
rayon, 0, color, color ); rayon, 0, color, color );
} }
} }
GRForceBlackPen( blackpenstate );
if( Print_Sheet_Ref ) if( Print_Sheet_Ref )
m_Parent->TraceWorkSheet( DC, ActiveScreen, 0 ); m_Parent->TraceWorkSheet( DC, ActiveScreen, 0 );
@ -159,7 +162,7 @@ static void Plot_Module( WinEDA_DrawPanel* panel, wxDC* DC,
pt_pad->Draw( panel, DC, draw_mode ); pt_pad->Draw( panel, DC, draw_mode );
((WinEDA_BasePcbFrame*)panel->m_Parent)->m_DisplayPadFill = tmp_fill; ((WinEDA_BasePcbFrame*)panel->m_Parent)->m_DisplayPadFill = tmp_fill;
} }
else // on copper layer, draw pads accordint to current options else // on copper layer, draw pads according to current options
pt_pad->Draw( panel, DC, draw_mode ); pt_pad->Draw( panel, DC, draw_mode );
} }