Commit 5f777f8c authored by charras's avatar charras

pcbnew: bug solved: pad holes not printed

parent f98fd09f
...@@ -5,6 +5,12 @@ Started 2007-June-11 ...@@ -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>
================================================================================ ================================================================================
......
...@@ -320,10 +320,22 @@ void GRSetBrush( wxDC* DC, int Color, int fill ) ...@@ -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 */
......
...@@ -67,7 +67,16 @@ int GRGetDrawMode(wxDC * DC); ...@@ -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);
......
...@@ -571,7 +571,7 @@ int MODULE::ReadDescr( FILE* File, int* LineNum ) ...@@ -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 ) ...@@ -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 ) ...@@ -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 */
......
...@@ -550,7 +550,15 @@ void D_PAD::Draw( WinEDA_DrawPanel* panel, wxDC* DC, int draw_mode, const wxPoin ...@@ -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 ...@@ -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 );
......
This diff is collapsed.
...@@ -46,20 +46,20 @@ public: ...@@ -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: ...@@ -67,10 +67,11 @@ public:
*/ */
EDA_Rect GetBoundingBox(); EDA_Rect GetBoundingBox();
void SetDrawCoord(); // mise a jour des coordonn�s absolues de trac� void SetDrawCoord(); // mise a jour des coordonn�s absolues de trac�
// a partir des coord relatives
void SetLocalCoord(); // mise a jour des coordonn�s relatives // a partir des coord relatives
void SetLocalCoord(); // mise a jour des coordonn�s relatives
/** /**
* Function Save * Function Save
...@@ -78,13 +79,23 @@ public: ...@@ -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: ...@@ -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: ...@@ -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: ...@@ -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: ...@@ -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: ...@@ -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
...@@ -108,10 +108,12 @@ void WinEDA_DrawPanel::PrintPage( wxDC* DC, bool Print_Sheet_Ref, int printmaskl ...@@ -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 ...@@ -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, ...@@ -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 );
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment