Code cleaning. Removed obscure code to draw texts

This commit is contained in:
charras 2008-12-16 19:44:57 +00:00
parent de78cdb12e
commit beeaf53a0b
19 changed files with 495 additions and 633 deletions

View File

@ -308,6 +308,7 @@ void Pcb3D_GLCanvas::Draw3D_Via( SEGVIA* via )
continue; continue;
SetGLColor( color ); SetGLColor( color );
// SetGLColor( LIGHTGRAY ); // SetGLColor( LIGHTGRAY );
glNormal3f( 0.0, 0.0, (layer == COPPER_LAYER_N) ? -1.0 : 1.0 ); glNormal3f( 0.0, 0.0, (layer == COPPER_LAYER_N) ? -1.0 : 1.0 );
if( layer == COPPER_LAYER_N ) if( layer == COPPER_LAYER_N )
@ -395,52 +396,48 @@ void Pcb3D_GLCanvas::Draw3D_DrawSegment( DRAWSEGMENT* segment )
} }
/* function to draw 3D segments, called by DrawGraphicText
* When DrawGraphicText is called to draw a text to an OpenGL DC
* it calls Draw3dTextSegm to each segment to draw.
* 2 parameters used by Draw3D_FilledSegment are not handled by DrawGraphicText
* but are used in Draw3D_FilledSegment().
* they are 2 local variables. This is an ugly, but trivial code.
* Using DrawGraphicText to draw all texts ensure texts have the same shape
* in all contexts
*/
static double s_Text3DWidth, s_Text3DZPos;
static void Draw3dTextSegm( int x0, int y0, int xf, int yf )
{
double startx = x0 * g_Parm_3D_Visu.m_BoardScale;
double starty = y0 * g_Parm_3D_Visu.m_BoardScale;
double endx = xf * g_Parm_3D_Visu.m_BoardScale;
double endy = yf * g_Parm_3D_Visu.m_BoardScale;
Draw3D_FilledSegment( startx, -starty, endx, -endy, s_Text3DWidth, s_Text3DZPos );
}
/*************************************************************/ /*************************************************************/
void Pcb3D_GLCanvas::Draw3D_DrawText( TEXTE_PCB* text ) void Pcb3D_GLCanvas::Draw3D_DrawText( TEXTE_PCB* text )
/*************************************************************/ /*************************************************************/
{ {
if( !Get3DLayerEnable( layer ) )
return;
int layer = text->GetLayer(); int layer = text->GetLayer();
double x, y, xf, yf;
double zpos, w;
int color = g_Parm_3D_Visu.m_BoardSettings->m_LayerColor[layer]; int color = g_Parm_3D_Visu.m_BoardSettings->m_LayerColor[layer];
#define BUFFSIZE 50
int coord[(BUFFSIZE+2)*2];
int ii, jj, kk, ll, nbpoints;
if( Get3DLayerEnable( layer ) )
{
zpos = g_Parm_3D_Visu.m_LayerZcoord[layer];
glNormal3f( 0.0, 0.0, Get3DLayerSide( layer ) );
jj = 5; ii = jj + 1;
while( ii < text->m_TextDrawingsSize )
{
nbpoints = text->m_TextDrawings[jj];
if( nbpoints > BUFFSIZE )
nbpoints = BUFFSIZE;
for( kk = 0, ll = 0; (kk < nbpoints) && (ii < text->m_TextDrawingsSize); kk++ )
{
coord[ll++] = text->m_TextDrawings[ii++] + text->m_Pos.x;
coord[ll++] = text->m_TextDrawings[ii++] + text->m_Pos.y;
}
jj = ii++;
for( kk = 0, ll = 0; kk < (nbpoints - 1); kk++, ll += 2 )
{
SetGLColor( color ); SetGLColor( color );
w = text->m_Width * g_Parm_3D_Visu.m_BoardScale; s_Text3DZPos = g_Parm_3D_Visu.m_LayerZcoord[layer];
x = coord[ll] * g_Parm_3D_Visu.m_BoardScale; s_Text3DWidth = text->m_Width * g_Parm_3D_Visu.m_BoardScale;
y = coord[ll + 1] * g_Parm_3D_Visu.m_BoardScale; glNormal3f( 0.0, 0.0, Get3DLayerSide( layer ) );
xf = coord[ll + 2] * g_Parm_3D_Visu.m_BoardScale; DrawGraphicText( NULL, NULL,
yf = coord[ll + 3] * g_Parm_3D_Visu.m_BoardScale; text->m_Pos, (EDA_Colors) color, text->m_Text,
text->m_Orient, text->m_Size,
Draw3D_FilledSegment( x, -y, xf, -yf, w, zpos ); text->m_HJustify,
} text->m_VJustify,
} text->m_Width, text->m_Italic,
} Draw3dTextSegm );
} }

View File

@ -147,11 +147,14 @@ void EDA_BaseStruct::Show( int nestLevel, std::ostream& os )
std::ostream& EDA_BaseStruct::NestedSpace( int nestLevel, std::ostream& os ) std::ostream& EDA_BaseStruct::NestedSpace( int nestLevel, std::ostream& os )
{ {
for( int i = 0; i<nestLevel; ++i ) for( int i = 0; i<nestLevel; ++i )
os << " "; // number of spaces here controls indent per nest level os << " ";
// number of spaces here controls indent per nest level
return os; return os;
} }
#endif #endif
@ -163,25 +166,17 @@ EDA_TextStruct::EDA_TextStruct( const wxString& text )
m_Size.x = m_Size.y = DEFAULT_SIZE_TEXT; /* XY size of font */ m_Size.x = m_Size.y = DEFAULT_SIZE_TEXT; /* XY size of font */
m_Orient = 0; /* Orient in 0.1 degrees */ m_Orient = 0; /* Orient in 0.1 degrees */
m_Attributs = 0; m_Attributs = 0;
m_Miroir = 0; // vue normale / miroir m_Miroir = 0; // display mirror if 1
m_HJustify = GR_TEXT_HJUSTIFY_CENTER; m_HJustify = GR_TEXT_HJUSTIFY_CENTER;
m_VJustify = GR_TEXT_VJUSTIFY_CENTER; /* Justifications Horiz et Vert du texte */ m_VJustify = GR_TEXT_VJUSTIFY_CENTER; /* Justifications Horiz et Vert du texte */
m_Width = 0; /* epaisseur du trait */ m_Width = 0; /* thickness */
m_CharType = 0; /* normal, bold, italic ... */ m_Italic = false; /* true = italic shape */
m_Text = text; m_Text = text;
m_ZoomLevelDrawable = 0; /* Niveau de zoom acceptable pour affichage normal */
m_TextDrawings = NULL; /* Pointeur sur le dessin du caractere */
m_TextDrawingsSize = 0; /* taille du tableau point<6E>*/
} }
EDA_TextStruct::~EDA_TextStruct() EDA_TextStruct::~EDA_TextStruct()
{ {
if( m_TextDrawings ) /* pointeur sur la liste des segments de dessin */
{
free( m_TextDrawings ); m_TextDrawings = NULL;
}
m_TextDrawingsSize = 0; /* nombre de sommets a dessiner */
} }
@ -259,337 +254,62 @@ int EDA_TextStruct::Pitch()
/***************************************************************/ /***************************************************************/
void EDA_TextStruct::Draw( WinEDA_DrawPanel* panel, wxDC* DC, void EDA_TextStruct::Draw( WinEDA_DrawPanel* aPanel, wxDC* aDC,
const wxPoint& offset, int color, int draw_mode, const wxPoint& aOffset, EDA_Colors aColor,
int display_mode, int anchor_color ) int aDrawMode,
GRFillMode aDisplayMode, EDA_Colors aAnchor_color )
/***************************************************************/ /***************************************************************/
/* /** Function Draw
* Trace de 1 texte type EDA_TextStruct. * @param aPanel = the current DrawPanel
* offset = Offset de trace (usuellement (0,0) * @param aDC = the current Device Context
* color = couleur du texte * @param aOffset = draw offset (usually (0,0))
* draw_mode = GR_OR, GR_XOR.., -1 si mode courant. * @param EDA_Colors aColor = text color
* display_mode = FILAIRE, FILLED ou SKETCH * @param aDrawMode = GR_OR, GR_XOR.., -1 to use the current mode.
* anchor_color = couleur de l'ancre ( -1 si pas d'ancre ). * @param aDisplayMode = FILAIRE, FILLED or SKETCH
* @param EDA_Colors aAnchor_color = anchor color ( UNSPECIFIED_COLOR = do not draw anchor ).
*/ */
{ {
int zoom; int zoom;
int coord[104];
int ii, jj, kk, ll, nbpoints;
int width; int width;
if( m_TextDrawings == NULL ) /* pointeur sur la liste des segments de dessin */ zoom = aPanel->GetZoom();
CreateDrawData(); width = m_Width;
if( aDisplayMode == FILAIRE )
if( m_TextDrawings == NULL )
return;
zoom = panel->GetZoom();
width = m_Width / zoom;
if( display_mode == FILAIRE )
width = 0; width = 0;
/* choix de la couleur du texte : */ if( aDrawMode != -1 )
if( draw_mode != -1 ) GRSetDrawMode( aDC, aDrawMode );
GRSetDrawMode( DC, draw_mode );
/* trace du texte */ /* Draw text anchor, if allowed */
if( zoom > m_ZoomLevelDrawable ) if( aAnchor_color != UNSPECIFIED_COLOR )
{
GRLine( &panel->m_ClipBox, DC,
m_TextDrawings[1] + offset.x + m_Pos.x,
m_TextDrawings[2] + offset.y + m_Pos.y,
m_TextDrawings[3] + offset.x + m_Pos.x,
m_TextDrawings[4] + offset.y + m_Pos.y,
width, color );
}
else
{
/* trace ancre du texte ? */
if( anchor_color != -1 )
{ {
int anchor_size = 2 * zoom; int anchor_size = 2 * zoom;
anchor_color &= MASKCOLOR; aAnchor_color = (EDA_Colors) (aAnchor_color & MASKCOLOR);
/* calcul de la position du texte */ int cX = m_Pos.x + aOffset.x;
int cX = m_Pos.x - offset.x; int cY = m_Pos.y + aOffset.y;
int cY = m_Pos.y - offset.y;
/* trace ancre du texte */ GRLine( &aPanel->m_ClipBox, aDC, cX - anchor_size, cY,
GRLine( &panel->m_ClipBox, DC, cX - anchor_size, cY, cX + anchor_size, cY, 0, aAnchor_color );
cX + anchor_size, cY, 0, anchor_color );
GRLine( &panel->m_ClipBox, DC, cX, cY - anchor_size, GRLine( &aPanel->m_ClipBox, aDC, cX, cY - anchor_size,
cX, cY + anchor_size, 0, anchor_color ); cX, cY + anchor_size, 0, aAnchor_color );
}
jj = 5; ii = jj + 1;
while( ii < m_TextDrawingsSize )
{
nbpoints = m_TextDrawings[jj];
if( nbpoints > 50 )
nbpoints = 50;
for( kk = 0, ll = 0; (kk < nbpoints) && (ii < m_TextDrawingsSize); kk++ )
{
coord[ll++] = m_TextDrawings[ii++] + offset.x + m_Pos.x;
coord[ll++] = m_TextDrawings[ii++] + offset.y + m_Pos.y;
} }
jj = ii++; if( aDisplayMode == SKETCH )
width = -width;
if( width > 2 ) DrawGraphicText( aPanel, aDC,
{ aOffset + m_Pos, aColor, m_Text,
for( kk = 0, ll = 0; kk < (nbpoints - 1); kk++, ll += 2 ) m_Orient, m_Size,
{ m_HJustify, m_VJustify, width, m_Italic );
if( display_mode == SKETCH )
GRCSegm( &panel->m_ClipBox, DC,
coord[ll], coord[ll + 1],
coord[ll + 2], coord[ll + 3],
m_Width, color );
else
GRFillCSegm( &panel->m_ClipBox, DC,
coord[ll], coord[ll + 1],
coord[ll + 2], coord[ll + 3],
m_Width, color );
}
}
else
GRPoly( &panel->m_ClipBox, DC, nbpoints, coord, 0, 0, color, color );
}
}
} }
/****************************************/ /******************/
void EDA_TextStruct::CreateDrawData() /* Class EDA_Rect */
/****************************************/ /******************/
/* Cree le tableau de donn<6E>s n<>essaire au trace d'un texte (pcb, module..)
* Met a jour:
* m_ZoomLevelDrawable Niveau de zoom acceptable pour affichage normal
* m_TextDrawings Pointeur sur le tableau de donn<EFBFBD>s
* m_TextDrawingsSize taille (en int) du tableau
* Codage dans le tableau:
* Suite des coord des sommets des polygones a tracer pr<EFBFBD><EFBFBD><EFBFBD>du nombre de sommets
* nn xx1 yy1 xx2 yy2 .. xxn yyn mm xx1 yy1 xx2 yy2 .. xxm yym
* les 2 premiers sommets sont le segment symbolisant le texte pour les
* affichages a trop petite echelle
*/
{
int ii, jj, kk, nbchar, nbpoints, AsciiCode, endcar;
int k1, k2, x0, y0;
int size_h, size_v, espacement;
char f_cod, plume = 'U';
const wxChar* ptr;
const SH_CODE* ptcar;
int ux0, uy0, dx, dy; // Coord de trace des segments de texte & variables de calcul */
int cX, cY; // Centre du texte
int ox, oy; // coord de trace du caractere courant
int* coord; // liste des coord des segments a tracer
int coord_count_max = 1000;
if( m_TextDrawings ) /* pointeur sur la liste des segments de dessin */
{
free( m_TextDrawings ); m_TextDrawings = 0;
}
m_TextDrawingsSize = 0; /* nombre de segments a dessiner */
nbchar = m_Text.Length();
if( nbchar == 0 )
return;
size_h = m_Size.x;
size_v = m_Size.y;
espacement = Pitch();
if( m_Miroir == 0 )
{
size_h = -size_h; espacement = -espacement;
}
kk = 0; ptr = m_Text.GetData(); /* ptr pointe 1er caractere du texte */
/* calcul de la position du debut des textes: ox et oy */
ox = cX = 0; oy = cY = 0;
/* Calcul du cadrage du texte */
dx = (espacement * nbchar) / 2;
dy = size_v / 2; /* Decalage du debut du texte / centre */
ux0 = uy0 = 0; /* Decalage du centre du texte / ccord de ref */
if( (m_Orient == 0) || (m_Orient == 1800) ) /* Texte Horizontal */
{
switch( m_HJustify )
{
case GR_TEXT_HJUSTIFY_CENTER:
break;
case GR_TEXT_HJUSTIFY_RIGHT:
ux0 = -dx;
break;
case GR_TEXT_HJUSTIFY_LEFT:
ux0 = dx;
break;
}
switch( m_VJustify )
{
case GR_TEXT_VJUSTIFY_CENTER:
break;
case GR_TEXT_VJUSTIFY_TOP:
uy0 = dy;
break;
case GR_TEXT_VJUSTIFY_BOTTOM:
uy0 = -dy;
break;
}
}
else /* Texte Vertical */
{
switch( m_HJustify )
{
case GR_TEXT_HJUSTIFY_CENTER:
break;
case GR_TEXT_HJUSTIFY_RIGHT:
ux0 = -dy;
break;
case GR_TEXT_HJUSTIFY_LEFT:
ux0 = dy;
break;
}
switch( m_VJustify )
{
case GR_TEXT_VJUSTIFY_CENTER:
break;
case GR_TEXT_VJUSTIFY_TOP:
uy0 = dx;
break;
case GR_TEXT_VJUSTIFY_BOTTOM:
uy0 = -dx;
break;
}
}
cX += ux0; cY += uy0;
ox = cX - dx;; oy = cY + dy;
/* lorsque les chars sont trop petits pour etre dessines,
* le texte est symbolise par une barre */
m_ZoomLevelDrawable = MAX( ABS(m_Size.x), ABS(m_Size.y) ) / 3;
dx = (espacement * nbchar) / 2;
dy = size_v / 2; /* Decalage du debut du texte / centre */
ux0 = cX - dx;
uy0 = cY;
dx += cX;
dy = cY;
RotatePoint( &ux0, &uy0, cX, cY, m_Orient );
RotatePoint( &dx, &dy, cX, cY, m_Orient );
coord = (int*) MyMalloc( (coord_count_max + 2) * sizeof(int) );
coord[0] = 2;
coord[1] = ux0; coord[2] = uy0;
coord[3] = dx; coord[4] = dy;
jj = 5; ii = jj + 1; nbpoints = 0;
while( kk++ < nbchar )
{
x0 = 0; y0 = 0;
#if defined(wxUSE_UNICODE) && defined(KICAD_CYRILLIC)
AsciiCode = (*ptr) & 0x7FF;
if ( AsciiCode > 0x40F && AsciiCode < 0x450 ) // big small Cyr
AsciiCode = utf8_to_ascii[AsciiCode - 0x410] & 0xFF;
else
AsciiCode = AsciiCode & 0xFF;
#else
AsciiCode = (*ptr) & 255;
#endif
ptcar = graphic_fonte_shape[AsciiCode]; /* ptcar pointe la description
* du caractere a dessiner */
for( endcar = FALSE; !endcar; ptcar++ )
{
f_cod = *ptcar;
/* get code n de la forme selectionnee */
switch( f_cod )
{
case 'X':
endcar = TRUE; /* fin du caractere */
break;
case 'U':
if( nbpoints && (plume == 'D' ) )
{
if( jj >= coord_count_max )
{
coord_count_max *= 2;
coord = (int*) realloc( coord, coord_count_max * sizeof(int) );
}
coord[jj] = nbpoints;
jj = ii++;
}
plume = f_cod;
nbpoints = 0;
break;
case 'D':
plume = f_cod;
nbpoints = 1; /* 1 point va suivre (origine du trac<61> */
break;
default:
{
k1 = f_cod; /* trace sur axe V */
k1 = -( (k1 * size_v) / 9 );
ptcar++;
f_cod = *ptcar;
k2 = f_cod; /* trace sur axe H */
k2 = (k2 * size_h) / 9;
dx = k2 + ox;
dy = k1 + oy;
RotatePoint( &dx, &dy, cX, cY, m_Orient );
if( ii >= coord_count_max )
{
coord_count_max *= 2;
coord = (int*) realloc( coord, coord_count_max * sizeof(int) );
}
coord[ii++] = dx;
coord[ii++] = dy;
nbpoints++;
break;
}
}
/* end switch */
}
/* end boucle for = end trace de 1 caractere */
ptr++;
ox += espacement;
}
/* end trace du texte */
m_TextDrawings = (int*) realloc( coord, ii * sizeof(int) );
m_TextDrawingsSize = ii; //taille (en int) du tableau
}
/******************************/ /******************************/
void EDA_Rect::Normalize() void EDA_Rect::Normalize()
@ -646,15 +366,6 @@ bool EDA_Rect::Intersects( const EDA_Rect aRect ) const
// this logic taken from wxWidgets' geometry.cpp file: // this logic taken from wxWidgets' geometry.cpp file:
bool rc; bool rc;
#if 0 && defined(DEBUG)
std::cout << "this: ";
std::cout << m_Pos << m_Size << '\n';
std::cout << "aRect: ";
std::cout << aRect.m_Pos << aRect.m_Size;
#endif
int left = MAX( m_Pos.x, aRect.m_Pos.x ); int left = MAX( m_Pos.x, aRect.m_Pos.x );
int right = MIN( m_Pos.x + m_Size.x, aRect.m_Pos.x + aRect.m_Size.x ); int right = MIN( m_Pos.x + m_Size.x, aRect.m_Pos.x + aRect.m_Size.x );
int top = MAX( m_Pos.y, aRect.m_Pos.y ); int top = MAX( m_Pos.y, aRect.m_Pos.y );
@ -665,8 +376,6 @@ bool EDA_Rect::Intersects( const EDA_Rect aRect ) const
else else
rc = false; rc = false;
//D( std::cout << "rc=" << rc << '\n'; )
return rc; return rc;
} }
@ -771,4 +480,3 @@ void EDA_Rect::Merge( const EDA_Rect& aRect )
end.y = MAX( end.y, rect_end.y ); end.y = MAX( end.y, rect_end.y );
SetEnd( end ); SetEnd( end );
} }

View File

@ -23,25 +23,34 @@
/****************************************************************************************************/ /****************************************************************************************************/
void DrawGraphicText( WinEDA_DrawPanel* aPanel, wxDC* DC, void DrawGraphicText( WinEDA_DrawPanel* aPanel, wxDC* DC,
const wxPoint& aPos, enum EDA_Colors aColor, const wxString& aText, const wxPoint& aPos, EDA_Colors aColor, const wxString& aText,
int aOrient, const wxSize& aSize, int aH_justify, int aV_justify, int aWidth ) int aOrient, const wxSize& aSize,
enum GRTextHorizJustifyType aH_justify,
enum GRTextVertJustifyType aV_justify,
int aWidth, bool aItalic,
void (* aCallback) (int x0, int y0, int xf, int yf))
/****************************************************************************************************/ /****************************************************************************************************/
/** Function DrawGraphicText /** Function DrawGraphicText
* Draw a graphic text (like module texts)
* Draw a graphic text (like module texts) * Draw a graphic text (like module texts)
* @param aPanel = the current DrawPanel * @param aPanel = the current DrawPanel
* @param aPos = text position (according to aH_justify, aV_justify) * @param aPos = text position (according to h_justify, v_justify)
* @param aColor (enum EDA_Colors) = text color * @param aColor (enum EDA_Colors) = text color
* @param aText = text to draw * @param aText = text to draw
* @param aOrient = angle in 0.1 degree * @param aOrient = angle in 0.1 degree
* @param aSize = text size (size.x or size.y can be < 0 for mirrored texts) * @param aSize = text size (size.x or size.y can be < 0 for mirrored texts)
* @param aH_justify = horizontal justification (Left, center, right) * @param aH_justify = horizontal justification (Left, center, right)
* @param aV_justify = vertical justification (bottom, center, top) * @param aV_justify = vertical justification (bottom, center, top)
* @param aWidth = line aWidth (pen aWidth) (default = 0) * @param aWidth = line width (pen width) (default = 0)
* if width < 0 : draw segments in sketch mode, width = abs(width)
* @param aItalic = true to simulate an italic font
* @param aCallback() = function called (if non null) to draw each segment.
* used only to draw 3D texts
*/ */
{ {
int ii, kk, nbchar, AsciiCode, endcar; int ii, kk, char_count, AsciiCode, endcar;
int k1, k2, x0, y0; int x0, y0;
int zoom; int zoom;
int size_h, size_v, espacement; int size_h, size_v, espacement;
SH_CODE f_cod, plume = 'U'; SH_CODE f_cod, plume = 'U';
@ -51,9 +60,12 @@ void DrawGraphicText( WinEDA_DrawPanel* aPanel, wxDC* DC,
int cX, cY; // Texte center int cX, cY; // Texte center
int ox, oy; // Draw coordinates for the current char int ox, oy; // Draw coordinates for the current char
int coord[100]; // Buffer coordinate used to draw polylines (char shapes) int coord[100]; // Buffer coordinate used to draw polylines (char shapes)
bool sketch_mode = FALSE; bool sketch_mode = false;
if ( aPanel )
zoom = aPanel->GetZoom(); zoom = aPanel->GetZoom();
else
zoom = 1;
size_h = aSize.x; size_h = aSize.x;
size_v = aSize.y; size_v = aSize.y;
@ -63,14 +75,20 @@ void DrawGraphicText( WinEDA_DrawPanel* aPanel, wxDC* DC,
aWidth = -aWidth; aWidth = -aWidth;
sketch_mode = TRUE; sketch_mode = TRUE;
} }
kk = 0; kk = 0;
ptr = 0; /* ptr = text index */ ptr = 0; /* ptr = text index */
nbchar = aText.Len(); char_count = aText.Len();
if( nbchar == 0 ) if( char_count == 0 )
return; return;
espacement = (10 * size_h ) / 9; // this is the pitch between chars espacement = (10 * size_h ) / 9; // this is the pitch between chars
if ( espacement > 0 )
espacement += ABS(aWidth);
else
espacement -= ABS(aWidth);
ox = cX = aPos.x; ox = cX = aPos.x;
oy = cY = aPos.y; oy = cY = aPos.y;
@ -79,7 +97,7 @@ void DrawGraphicText( WinEDA_DrawPanel* aPanel, wxDC* DC,
{ {
int xm, ym, ll, xc, yc; int xm, ym, ll, xc, yc;
int textsize = ABS( espacement ); int textsize = ABS( espacement );
ll = (textsize * nbchar) / zoom; ll = (textsize * char_count) / zoom;
xc = GRMapX( cX ); xc = GRMapX( cX );
yc = GRMapY( cY ); yc = GRMapY( cY );
@ -101,7 +119,7 @@ void DrawGraphicText( WinEDA_DrawPanel* aPanel, wxDC* DC,
/* Compute the position ux0, uy0 of the first letter , next */ /* Compute the position ux0, uy0 of the first letter , next */
dx = (espacement * nbchar) / 2; dx = (espacement * char_count) / 2;
dy = size_v / 2; /* dx, dy = draw offset between first letter and text center */ dy = size_v / 2; /* dx, dy = draw offset between first letter and text center */
ux0 = uy0 = 0; /* Decalage du centre du texte / coord de ref */ ux0 = uy0 = 0; /* Decalage du centre du texte / coord de ref */
@ -178,7 +196,7 @@ void DrawGraphicText( WinEDA_DrawPanel* aPanel, wxDC* DC,
if( ABS( (aSize.x / zoom) ) < 3 ) /* chars trop petits pour etre dessines */ if( ABS( (aSize.x / zoom) ) < 3 ) /* chars trop petits pour etre dessines */
{ /* le texte est symbolise par une barre */ { /* le texte est symbolise par une barre */
dx = (espacement * nbchar) / 2; dx = (espacement * char_count) / 2;
dy = size_v / 2; /* Decalage du debut du texte / centre */ dy = size_v / 2; /* Decalage du debut du texte / centre */
ux0 = cX - dx; ux0 = cX - dx;
@ -190,34 +208,15 @@ void DrawGraphicText( WinEDA_DrawPanel* aPanel, wxDC* DC,
RotatePoint( &ux0, &uy0, cX, cY, aOrient ); RotatePoint( &ux0, &uy0, cX, cY, aOrient );
RotatePoint( &dx, &dy, cX, cY, aOrient ); RotatePoint( &dx, &dy, cX, cY, aOrient );
if ( aCallback )
aCallback( ux0, uy0, dx, dy );
else
GRLine( &aPanel->m_ClipBox, DC, ux0, uy0, dx, dy, aWidth, aColor ); GRLine( &aPanel->m_ClipBox, DC, ux0, uy0, dx, dy, aWidth, aColor );
return; return;
} }
#if 0 while( kk++ < char_count )
dx = (espacement * nbchar) / 2;
dy = size_v / 2;/* Decalage du debut du texte / centre */
ux0 = cX - dx;
uy0 = cY;
dx += cX;
dy = cY;
RotatePoint( &ux0, &uy0, cX, cY, aOrient );
RotatePoint( &dx, &dy, cX, cY, aOrient );
DC->SetTextForeground( wxColour(
ColorRefs[aColor].r,
ColorRefs[aColor].g,
ColorRefs[aColor].b ) );
DC->DrawRotatedText( Text, GRMapX( ux0 ), GRMapY( uy0 ), (double) aOrient / 10.0 );
return;
#endif
while( kk++ < nbchar )
{ {
x0 = 0; y0 = 0; x0 = 0; y0 = 0;
#if defined(wxUSE_UNICODE) && defined(KICAD_CYRILLIC) #if defined(wxUSE_UNICODE) && defined(KICAD_CYRILLIC)
@ -247,8 +246,16 @@ void DrawGraphicText( WinEDA_DrawPanel* aPanel, wxDC* DC,
if( ii && (plume == 'D' ) ) if( ii && (plume == 'D' ) )
{ {
if( aWidth <= 1 ) if( aWidth <= 1 )
GRPoly( &aPanel->m_ClipBox, DC, ii / 2, coord, 0, 0, aWidth = 0;
aColor, aColor ); if ( aCallback )
{
int ik, * coordptr;
coordptr = coord;
for( ik = 0; ik < (ii - 2); ik += 2, coordptr += 2 )
aCallback( *coordptr, *(coordptr + 1),
*(coordptr + 2), *(coordptr + 3) );
}
else if( sketch_mode ) else if( sketch_mode )
{ {
int ik, * coordptr; int ik, * coordptr;
@ -270,7 +277,8 @@ void DrawGraphicText( WinEDA_DrawPanel* aPanel, wxDC* DC,
default: default:
{ {
k1 = f_cod; /* trace sur axe V */ int y, k1, k2;
y = k1 = f_cod; /* trace sur axe V */
k1 = -( (k1 * size_v) / 9 ); k1 = -( (k1 * size_v) / 9 );
ptcar++; ptcar++;
@ -278,6 +286,9 @@ void DrawGraphicText( WinEDA_DrawPanel* aPanel, wxDC* DC,
k2 = f_cod; /* trace sur axe H */ k2 = f_cod; /* trace sur axe H */
k2 = (k2 * size_h) / 9; k2 = (k2 * size_h) / 9;
// To simulate an italic font, add a x offset depending on the y offset
if ( aItalic )
k2 -= k1/8;
dx = k2 + ox; dy = k1 + oy; dx = k2 + ox; dy = k1 + oy;
RotatePoint( &dx, &dy, cX, cY, aOrient ); RotatePoint( &dx, &dy, cX, cY, aOrient );
@ -290,19 +301,20 @@ void DrawGraphicText( WinEDA_DrawPanel* aPanel, wxDC* DC,
/* end switch */ /* end switch */
} }
/* end boucle for = end trace de 1 caractere */ /* end draw 1 char */
ptr++; ox += espacement; ptr++; ox += espacement;
} }
/* end trace du texte */
} }
/******************************************************************************************/ /******************************************************************************************/
void PlotGraphicText( int aFormat_plot, const wxPoint& aPos, enum EDA_Colors aColor, void PlotGraphicText( int aFormat_plot, const wxPoint& aPos, enum EDA_Colors aColor,
const wxString& aText, const wxString& aText,
int aOrient, const wxSize& aSize, int aH_justify, int aV_justify ) int aOrient, const wxSize& aSize,
enum GRTextHorizJustifyType aH_justify,
enum GRTextVertJustifyType aV_justify,
bool aItalic )
/******************************************************************************************/ /******************************************************************************************/
/** Function PlotGraphicText /** Function PlotGraphicText
@ -317,7 +329,7 @@ void PlotGraphicText( int aFormat_plot, const wxPoint& aPos, enum EDA_Colors aCo
* @param aV_justify = vertical justification (bottom, center, top) * @param aV_justify = vertical justification (bottom, center, top)
*/ */
{ {
int kk, nbchar, end, AsciiCode; int kk, char_count, end, AsciiCode;
int k1, k2, x0, y0, ox, oy; int k1, k2, x0, y0, ox, oy;
int size_h, size_v, espacement; int size_h, size_v, espacement;
SH_CODE f_cod, plume = 'U'; SH_CODE f_cod, plume = 'U';
@ -357,14 +369,14 @@ void PlotGraphicText( int aFormat_plot, const wxPoint& aPos, enum EDA_Colors aCo
ptr = 0; /* ptr = text index */ ptr = 0; /* ptr = text index */
/* calcul de la position du debut des textes: ox et oy */ /* calcul de la position du debut des textes: ox et oy */
nbchar = aText.Len(); char_count = aText.Len();
espacement = (10 * size_h ) / 9; espacement = (10 * size_h ) / 9;
ox = cX = aPos.x; ox = cX = aPos.x;
oy = cY = aPos.y; oy = cY = aPos.y;
/* Calcul du cadrage du texte */ /* Calcul du cadrage du texte */
dx = (espacement * nbchar) / 2; dx = (espacement * char_count) / 2;
dy = size_v / 2; /* Decalage du debut du texte / centre */ dy = size_v / 2; /* Decalage du debut du texte / centre */
ux0 = uy0 = 0; /* Decalage du centre du texte / ccord de ref */ ux0 = uy0 = 0; /* Decalage du centre du texte / ccord de ref */
@ -438,7 +450,7 @@ void PlotGraphicText( int aFormat_plot, const wxPoint& aPos, enum EDA_Colors aCo
FctPlume( wxPoint( 0, 0 ), 'Z' ); FctPlume( wxPoint( 0, 0 ), 'Z' );
while( kk++ < nbchar ) while( kk++ < char_count )
{ {
#if defined(wxUSE_UNICODE) && defined(KICAD_CYRILLIC) #if defined(wxUSE_UNICODE) && defined(KICAD_CYRILLIC)
AsciiCode = aText.GetChar(ptr) & 0x7FF; AsciiCode = aText.GetChar(ptr) & 0x7FF;
@ -474,6 +486,9 @@ void PlotGraphicText( int aFormat_plot, const wxPoint& aPos, enum EDA_Colors aCo
k2 = f_cod; /* trace sur axe H */ k2 = f_cod; /* trace sur axe H */
k2 = (k2 * size_h) / 9; k2 = (k2 * size_h) / 9;
// To simulate an italic font, add a x offset depending on the y offset
if ( aItalic )
k2 -= k1/8;
dx = k2 + ox; dx = k2 + ox;
dy = k1 + oy; dy = k1 + oy;

View File

@ -72,7 +72,7 @@ void Hierarchical_PIN_Sheet_Struct::Draw( WinEDA_DrawPanel* panel, wxDC* DC, con
/********************************************************************************************/ /********************************************************************************************/
/* Routine de dessin des Labels type hierarchie */ /* Routine de dessin des Labels type hierarchie */
{ {
int side; GRTextHorizJustifyType side;
EDA_Colors txtcolor; EDA_Colors txtcolor;
int posx, tposx, posy, size2; int posx, tposx, posy, size2;
wxSize size; wxSize size;

View File

@ -53,36 +53,12 @@ void SCH_CMP_FIELD::SwapData( SCH_CMP_FIELD* copyitem )
EXCHG( m_Orient, copyitem->m_Orient ); EXCHG( m_Orient, copyitem->m_Orient );
EXCHG( m_Miroir, copyitem->m_Miroir ); EXCHG( m_Miroir, copyitem->m_Miroir );
EXCHG( m_Attributs, copyitem->m_Attributs ); EXCHG( m_Attributs, copyitem->m_Attributs );
EXCHG( m_CharType, copyitem->m_CharType ); EXCHG( m_Italic, copyitem->m_Italic );
EXCHG( m_HJustify, copyitem->m_HJustify ); EXCHG( m_HJustify, copyitem->m_HJustify );
EXCHG( m_VJustify, copyitem->m_VJustify ); EXCHG( m_VJustify, copyitem->m_VJustify );
EXCHG( m_ZoomLevelDrawable, copyitem->m_ZoomLevelDrawable );
EXCHG( m_TextDrawings, copyitem->m_TextDrawings );
EXCHG( m_TextDrawingsSize, copyitem->m_TextDrawingsSize );
} }
#if 0
/***********************************************************/
void SCH_CMP_FIELD::PartTextCopy( SCH_CMP_FIELD* target )
/***********************************************************/
{
target->m_Text = m_Text;
if( m_FieldId >= FIELD1 )
target->m_Name = m_Name;
target->m_Layer = m_Layer;
target->m_Pos = m_Pos;
target->m_Size = m_Size;
target->m_Attributs = m_Attributs;
target->m_FieldId = m_FieldId;
target->m_Orient = m_Orient;
target->m_HJustify = m_HJustify;
target->m_VJustify = m_VJustify;
target->m_Flags = m_Flags;
}
#endif
/*********************************/ /*********************************/
bool SCH_CMP_FIELD::IsVoid() bool SCH_CMP_FIELD::IsVoid()
/*********************************/ /*********************************/
@ -92,8 +68,8 @@ bool SCH_CMP_FIELD::IsVoid()
*/ */
{ {
if( m_Text.IsEmpty() || m_Text == wxT( "~" ) ) if( m_Text.IsEmpty() || m_Text == wxT( "~" ) )
return TRUE; return true;
return FALSE; return false;
} }
@ -142,7 +118,7 @@ EDA_Rect SCH_CMP_FIELD::GetBoundaryBox() const
y2 = pos.y + (DrawLibItem->m_Transform[1][0] * x1) y2 = pos.y + (DrawLibItem->m_Transform[1][0] * x1)
+ (DrawLibItem->m_Transform[1][1] * y1); + (DrawLibItem->m_Transform[1][1] * y1);
/* If the component orientation is +/- 90 deg, the text orienation must be changed */ /* If the component orientation is +/- 90 deg, the text orientation must be changed */
if( DrawLibItem->m_Transform[0][1] ) if( DrawLibItem->m_Transform[0][1] )
{ {
if( orient == TEXT_ORIENT_HORIZ ) if( orient == TEXT_ORIENT_HORIZ )
@ -206,7 +182,9 @@ EDA_Rect SCH_CMP_FIELD::GetBoundaryBox() const
} }
/*********************************************/
bool SCH_CMP_FIELD::Save( FILE* aFile ) const bool SCH_CMP_FIELD::Save( FILE* aFile ) const
/*********************************************/
{ {
char hjustify = 'C'; char hjustify = 'C';
if( m_HJustify == GR_TEXT_HJUSTIFY_LEFT ) if( m_HJustify == GR_TEXT_HJUSTIFY_LEFT )

View File

@ -44,7 +44,6 @@ public:
} }
void PartTextCopy( SCH_CMP_FIELD* target );
void Place( WinEDA_SchematicFrame* frame, wxDC* DC ); void Place( WinEDA_SchematicFrame* frame, wxDC* DC );
EDA_Rect GetBoundaryBox() const; EDA_Rect GetBoundaryBox() const;

View File

@ -202,6 +202,7 @@ public:
return wxT( "LibDrawPin" ); return wxT( "LibDrawPin" );
} }
/** /**
* 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.
@ -253,6 +254,8 @@ public:
{ {
return wxT( "LibDrawArc" ); return wxT( "LibDrawArc" );
} }
/** /**
* 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.
@ -263,6 +266,7 @@ public:
LibDrawArc* GenCopy(); LibDrawArc* GenCopy();
void Draw( WinEDA_DrawPanel * aPanel, wxDC * aDC, const wxPoint &aOffset, int aColor, void Draw( WinEDA_DrawPanel * aPanel, wxDC * aDC, const wxPoint &aOffset, int aColor,
int aDrawMode, void* aData, int aTransformMatrix[2][2] ); int aDrawMode, void* aData, int aTransformMatrix[2][2] );
}; };
@ -282,6 +286,8 @@ public:
{ {
return wxT( "LibDrawCircle" ); return wxT( "LibDrawCircle" );
} }
/** /**
* 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.
@ -292,6 +298,7 @@ public:
LibDrawCircle* GenCopy(); LibDrawCircle* GenCopy();
void Draw( WinEDA_DrawPanel * aPanel, wxDC * aDC, const wxPoint &aOffset, int aColor, void Draw( WinEDA_DrawPanel * aPanel, wxDC * aDC, const wxPoint &aOffset, int aColor,
int aDrawMode, void* aData, int aTransformMatrix[2][2] ); int aDrawMode, void* aData, int aTransformMatrix[2][2] );
}; };
@ -318,6 +325,8 @@ public:
{ {
return wxT( "LibDrawText" ); return wxT( "LibDrawText" );
} }
/** /**
* 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.
@ -328,6 +337,7 @@ public:
LibDrawText* GenCopy(); LibDrawText* GenCopy();
void Draw( WinEDA_DrawPanel * aPanel, wxDC * aDC, const wxPoint &aOffset, int aColor, void Draw( WinEDA_DrawPanel * aPanel, wxDC * aDC, const wxPoint &aOffset, int aColor,
int aDrawMode, void* aData, int aTransformMatrix[2][2] ); int aDrawMode, void* aData, int aTransformMatrix[2][2] );
}; };
@ -348,6 +358,8 @@ public:
{ {
return wxT( "LibDrawSquare" ); return wxT( "LibDrawSquare" );
} }
/** /**
* 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.
@ -358,6 +370,7 @@ public:
LibDrawSquare* GenCopy(); LibDrawSquare* GenCopy();
void Draw( WinEDA_DrawPanel * aPanel, wxDC * aDC, const wxPoint &aOffset, int aColor, void Draw( WinEDA_DrawPanel * aPanel, wxDC * aDC, const wxPoint &aOffset, int aColor,
int aDrawMode, void* aData, int aTransformMatrix[2][2] ); int aDrawMode, void* aData, int aTransformMatrix[2][2] );
}; };
@ -377,6 +390,8 @@ public:
{ {
return wxT( "LibDrawSegment" ); return wxT( "LibDrawSegment" );
} }
/** /**
* 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.
@ -387,6 +402,7 @@ public:
LibDrawSegment* GenCopy(); LibDrawSegment* GenCopy();
void Draw( WinEDA_DrawPanel * aPanel, wxDC * aDC, const wxPoint &aOffset, int aColor, void Draw( WinEDA_DrawPanel * aPanel, wxDC * aDC, const wxPoint &aOffset, int aColor,
int aDrawMode, void* aData, int aTransformMatrix[2][2] ); int aDrawMode, void* aData, int aTransformMatrix[2][2] );
}; };
@ -414,6 +430,7 @@ public:
return wxT( "LibDrawPolyline" ); return wxT( "LibDrawPolyline" );
} }
/** /**
* 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.
@ -424,6 +441,7 @@ public:
LibDrawPolyline* GenCopy(); LibDrawPolyline* GenCopy();
void AddPoint( const wxPoint& point ); void AddPoint( const wxPoint& point );
void Draw( WinEDA_DrawPanel * aPanel, wxDC * aDC, const wxPoint &aOffset, int aColor, void Draw( WinEDA_DrawPanel * aPanel, wxDC * aDC, const wxPoint &aOffset, int aColor,
int aDrawMode, void* aData, int aTransformMatrix[2][2] ); int aDrawMode, void* aData, int aTransformMatrix[2][2] );
}; };
@ -450,7 +468,8 @@ public:
wxSize m_Size; wxSize m_Size;
int m_Orient; /* Orientation */ int m_Orient; /* Orientation */
int m_Attributs; /* Attributes (Non visible ...) */ int m_Attributs; /* Attributes (Non visible ...) */
int m_HJustify, m_VJustify; /* Horiz and Vert Text Justifications */ enum GRTextHorizJustifyType m_HJustify; /* Horizontal Text Justify */
enum GRTextVertJustifyType m_VJustify; /* Vertical Text Justify */
wxString m_Text; /* Field Data */ wxString m_Text; /* Field Data */
wxString m_Name; /* Field Name */ wxString m_Name; /* Field Name */
@ -466,6 +485,8 @@ public:
{ {
return wxT( "LibDrawField" ); return wxT( "LibDrawField" );
} }
/** /**
* 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.
@ -477,8 +498,10 @@ public:
LibDrawField* GenCopy(); LibDrawField* GenCopy();
void Copy( LibDrawField* Target ); void Copy( LibDrawField* Target );
void Draw( WinEDA_DrawPanel * aPanel, wxDC * aDC, const wxPoint &aOffset, int aColor, void Draw( WinEDA_DrawPanel * aPanel, wxDC * aDC, const wxPoint &aOffset, int aColor,
int aDrawMode, void* aData, int aTransformMatrix[2][2] ); int aDrawMode, void* aData, int aTransformMatrix[2][2] );
/** /**
* 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.

View File

@ -106,11 +106,11 @@ void WinEDA_PartPropertiesFrame::CopyBufferToFieldData( LibDrawField* Field )
* field "Field" * field "Field"
*/ */
{ {
int hjustify[3] = { GRTextHorizJustifyType hjustify[3] = {
GR_TEXT_HJUSTIFY_LEFT, GR_TEXT_HJUSTIFY_CENTER, GR_TEXT_HJUSTIFY_LEFT, GR_TEXT_HJUSTIFY_CENTER,
GR_TEXT_HJUSTIFY_RIGHT GR_TEXT_HJUSTIFY_RIGHT
}; };
int vjustify[3] = { GRTextVertJustifyType vjustify[3] = {
GR_TEXT_VJUSTIFY_BOTTOM, GR_TEXT_VJUSTIFY_CENTER, GR_TEXT_VJUSTIFY_BOTTOM, GR_TEXT_VJUSTIFY_CENTER,
GR_TEXT_VJUSTIFY_TOP GR_TEXT_VJUSTIFY_TOP
}; };

View File

@ -253,7 +253,8 @@ void SCH_CMP_FIELD::Draw( WinEDA_DrawPanel* panel,
EDA_Colors color; EDA_Colors color;
wxPoint pos; /* Position des textes */ wxPoint pos; /* Position des textes */
SCH_COMPONENT* DrawLibItem = (SCH_COMPONENT*) m_Parent; SCH_COMPONENT* DrawLibItem = (SCH_COMPONENT*) m_Parent;
int hjustify, vjustify; GRTextHorizJustifyType hjustify;
GRTextVertJustifyType vjustify;
int LineWidth = MAX( m_Width, g_DrawMinimunLineWidth ); int LineWidth = MAX( m_Width, g_DrawMinimunLineWidth );
if( m_Attributs & TEXT_NO_VISIBLE ) if( m_Attributs & TEXT_NO_VISIBLE )
@ -280,19 +281,61 @@ void SCH_CMP_FIELD::Draw( WinEDA_DrawPanel* panel,
else else
orient = TEXT_ORIENT_HORIZ; orient = TEXT_ORIENT_HORIZ;
/* Y a t-il rotation, miroir (pour les justifications)*/ /* Y a t-il rotation, miroir (pour les justifications)*/
EXCHG( hjustify, vjustify ); GRTextHorizJustifyType tmp = hjustify;
hjustify = (GRTextHorizJustifyType) vjustify;
vjustify = (GRTextVertJustifyType) tmp;
if( DrawLibItem->m_Transform[1][0] < 0 ) if( DrawLibItem->m_Transform[1][0] < 0 )
vjustify = -vjustify; switch ( vjustify )
{
case GR_TEXT_VJUSTIFY_BOTTOM:
vjustify = GR_TEXT_VJUSTIFY_TOP;
break;
case GR_TEXT_VJUSTIFY_TOP:
vjustify = GR_TEXT_VJUSTIFY_BOTTOM;
break;
default:
break;
}
if( DrawLibItem->m_Transform[1][0] > 0 ) if( DrawLibItem->m_Transform[1][0] > 0 )
hjustify = -hjustify; switch ( hjustify )
{
case GR_TEXT_HJUSTIFY_LEFT:
hjustify = GR_TEXT_HJUSTIFY_RIGHT;
break;
case GR_TEXT_HJUSTIFY_RIGHT:
hjustify = GR_TEXT_HJUSTIFY_LEFT;
break;
default:
break;
}
} }
else else
{ {
/* Texte horizontal: Y a t-il miroir (pour les justifications)*/ /* Texte horizontal: Y a t-il miroir (pour les justifications)*/
if( DrawLibItem->m_Transform[0][0] < 0 ) if( DrawLibItem->m_Transform[0][0] < 0 )
hjustify = -hjustify; switch ( hjustify )
{
case GR_TEXT_HJUSTIFY_LEFT:
hjustify = GR_TEXT_HJUSTIFY_RIGHT;
break;
case GR_TEXT_HJUSTIFY_RIGHT:
hjustify = GR_TEXT_HJUSTIFY_LEFT;
break;
default:
break;
}
if( DrawLibItem->m_Transform[1][1] > 0 ) if( DrawLibItem->m_Transform[1][1] > 0 )
vjustify = -vjustify; switch ( vjustify )
{
case GR_TEXT_VJUSTIFY_BOTTOM:
vjustify = GR_TEXT_VJUSTIFY_TOP;
break;
case GR_TEXT_VJUSTIFY_TOP:
vjustify = GR_TEXT_VJUSTIFY_BOTTOM;
break;
default:
break;
}
} }
if( m_FieldId == REFERENCE ) if( m_FieldId == REFERENCE )
@ -309,9 +352,9 @@ void SCH_CMP_FIELD::Draw( WinEDA_DrawPanel* panel,
m_Size, m_Size,
hjustify, vjustify, LineWidth ); hjustify, vjustify, LineWidth );
} }
else // Si il y a plusieurs parts par boitier, ajouter a la reference l'identification de la selection ( A, B ... ) else // For more than one part per package, we must add the part selection to the reference )
{ {
/* On ajoute alors A ou B ... a la reference */ /* Adding A ou B ... or .1 .2 ... to the reference */
wxString fulltext = m_Text; wxString fulltext = m_Text;
#if defined(KICAD_GOST) #if defined(KICAD_GOST)
fulltext.Append( '.'); fulltext.Append( '.');
@ -320,7 +363,7 @@ void SCH_CMP_FIELD::Draw( WinEDA_DrawPanel* panel,
fulltext.Append( 'A' - 1 + DrawLibItem->m_Multi ); fulltext.Append( 'A' - 1 + DrawLibItem->m_Multi );
#endif #endif
DrawGraphicText( panel, DC, pos, color, fulltext.GetData(), DrawGraphicText( panel, DC, pos, color, fulltext,
orient ? TEXT_ORIENT_VERT : TEXT_ORIENT_HORIZ, orient ? TEXT_ORIENT_VERT : TEXT_ORIENT_HORIZ,
m_Size, m_Size,
hjustify, vjustify, LineWidth ); hjustify, vjustify, LineWidth );

View File

@ -871,7 +871,7 @@ GetLibEntryField (EDA_LibComponentStruct* LibEntry,
* ou n = 0 (REFERENCE), 1 (VALUE) , 2 .. 11 = autres champs, facultatifs * ou n = 0 (REFERENCE), 1 (VALUE) , 2 .. 11 = autres champs, facultatifs
*/ */
{ {
int posx, posy, size, orient, hjustify, vjustify; int posx, posy, size, orient;
bool draw; bool draw;
char* Text, char* Text,
Char1[256], Char2[256], Char1[256], Char2[256],
@ -919,8 +919,8 @@ GetLibEntryField (EDA_LibComponentStruct* LibEntry,
draw = TRUE; if( Char2[0] == 'I' ) draw = TRUE; if( Char2[0] == 'I' )
draw = FALSE; draw = FALSE;
hjustify = GR_TEXT_HJUSTIFY_CENTER; GRTextHorizJustifyType hjustify = GR_TEXT_HJUSTIFY_CENTER;
vjustify = GR_TEXT_VJUSTIFY_CENTER; GRTextVertJustifyType vjustify = GR_TEXT_VJUSTIFY_CENTER;
if( nbparam >= 6 ) if( nbparam >= 6 )
{ {

View File

@ -670,8 +670,8 @@ static int ReadPartDescr( wxWindow* frame, char* Line, FILE* f,
int fieldNdx; int fieldNdx;
char FieldUserName[1024]; char FieldUserName[1024];
int hjustify = GR_TEXT_HJUSTIFY_CENTER; GRTextHorizJustifyType hjustify = GR_TEXT_HJUSTIFY_CENTER;
int vjustify = GR_TEXT_VJUSTIFY_CENTER; GRTextVertJustifyType vjustify = GR_TEXT_VJUSTIFY_CENTER;
FieldUserName[0] = 0; FieldUserName[0] = 0;

View File

@ -376,7 +376,6 @@ static void PlotTextField( SCH_COMPONENT* DrawLibItem,
{ {
wxPoint textpos; /* Position des textes */ wxPoint textpos; /* Position des textes */
SCH_CMP_FIELD* field = DrawLibItem->GetField( FieldNumber ); SCH_CMP_FIELD* field = DrawLibItem->GetField( FieldNumber );
int hjustify, vjustify;
int orient; int orient;
EDA_Colors color = UNSPECIFIED_COLOR; EDA_Colors color = UNSPECIFIED_COLOR;
@ -391,7 +390,8 @@ static void PlotTextField( SCH_COMPONENT* DrawLibItem,
/* Calcul de la position des textes, selon orientation du composant */ /* Calcul de la position des textes, selon orientation du composant */
orient = field->m_Orient; orient = field->m_Orient;
hjustify = field->m_HJustify; vjustify = field->m_VJustify; GRTextHorizJustifyType hjustify = field->m_HJustify;
GRTextVertJustifyType vjustify = field->m_VJustify;
textpos = field->m_Pos - DrawLibItem->m_Pos; // textpos is the text position relative to the component anchor textpos = field->m_Pos - DrawLibItem->m_Pos; // textpos is the text position relative to the component anchor
textpos = TransformCoordinate( DrawLibItem->m_Transform, textpos ) + DrawLibItem->m_Pos; textpos = TransformCoordinate( DrawLibItem->m_Transform, textpos ) + DrawLibItem->m_Pos;
@ -404,19 +404,62 @@ static void PlotTextField( SCH_COMPONENT* DrawLibItem,
else else
orient = TEXT_ORIENT_HORIZ; orient = TEXT_ORIENT_HORIZ;
/* Y a t-il rotation, miroir (pour les justifications)*/ /* Y a t-il rotation, miroir (pour les justifications)*/
EXCHG( hjustify, vjustify ); GRTextHorizJustifyType tmp = hjustify;
hjustify = (GRTextHorizJustifyType) vjustify;
vjustify = (GRTextVertJustifyType) tmp;
if( DrawLibItem->m_Transform[1][0] < 0 ) if( DrawLibItem->m_Transform[1][0] < 0 )
vjustify = -vjustify; switch ( vjustify )
{
case GR_TEXT_VJUSTIFY_BOTTOM:
vjustify = GR_TEXT_VJUSTIFY_TOP;
break;
case GR_TEXT_VJUSTIFY_TOP:
vjustify = GR_TEXT_VJUSTIFY_BOTTOM;
break;
default:
break;
}
if( DrawLibItem->m_Transform[1][0] > 0 ) if( DrawLibItem->m_Transform[1][0] > 0 )
hjustify = -hjustify; switch ( hjustify )
{
case GR_TEXT_HJUSTIFY_LEFT:
hjustify = GR_TEXT_HJUSTIFY_RIGHT;
break;
case GR_TEXT_HJUSTIFY_RIGHT:
hjustify = GR_TEXT_HJUSTIFY_LEFT;
break;
default:
break;
}
} }
else else
{ {
/* Texte horizontal: Y a t-il miroir (pour les justifications)*/ /* Texte horizontal: Y a t-il miroir (pour les justifications)*/
if( DrawLibItem->m_Transform[0][0] < 0 ) if( DrawLibItem->m_Transform[0][0] < 0 )
hjustify = -hjustify; switch ( hjustify )
{
case GR_TEXT_HJUSTIFY_LEFT:
hjustify = GR_TEXT_HJUSTIFY_RIGHT;
break;
case GR_TEXT_HJUSTIFY_RIGHT:
hjustify = GR_TEXT_HJUSTIFY_LEFT;
break;
default:
break;
}
if( DrawLibItem->m_Transform[1][1] > 0 ) if( DrawLibItem->m_Transform[1][1] > 0 )
vjustify = -vjustify; switch ( vjustify )
{
case GR_TEXT_VJUSTIFY_BOTTOM:
vjustify = GR_TEXT_VJUSTIFY_TOP;
break;
case GR_TEXT_VJUSTIFY_TOP:
vjustify = GR_TEXT_VJUSTIFY_BOTTOM;
break;
default:
break;
}
} }
SetCurrentLineWidth( -1 ); SetCurrentLineWidth( -1 );
@ -686,7 +729,6 @@ static void PlotSheetLabelStruct( Hierarchical_PIN_Sheet_Struct* Struct )
/***********************************************************************/ /***********************************************************************/
/* Routine de dessin des Sheet Labels type hierarchie */ /* Routine de dessin des Sheet Labels type hierarchie */
{ {
int side;
EDA_Colors txtcolor = UNSPECIFIED_COLOR; EDA_Colors txtcolor = UNSPECIFIED_COLOR;
int posx, tposx, posy, size, size2; int posx, tposx, posy, size, size2;
int coord[16]; int coord[16];
@ -695,6 +737,7 @@ static void PlotSheetLabelStruct( Hierarchical_PIN_Sheet_Struct* Struct )
txtcolor = ReturnLayerColor( Struct->GetLayer() ); txtcolor = ReturnLayerColor( Struct->GetLayer() );
posx = Struct->m_Pos.x; posy = Struct->m_Pos.y; size = Struct->m_Size.x; posx = Struct->m_Pos.x; posy = Struct->m_Pos.y; size = Struct->m_Size.x;
GRTextHorizJustifyType side;
if( Struct->m_Edge ) if( Struct->m_Edge )
{ {
tposx = posx - size; tposx = posx - size;

View File

@ -5,6 +5,7 @@
#ifndef BASE_STRUCT_H #ifndef BASE_STRUCT_H
#define BASE_STRUCT_H #define BASE_STRUCT_H
#include "colors.h"
#if defined (DEBUG) #if defined (DEBUG)
#include <iostream> // needed for Show() #include <iostream> // needed for Show()
@ -127,7 +128,6 @@ public:
}; };
/** /**
* Class EDA_Rect * Class EDA_Rect
* handles the component boundary box. * handles the component boundary box.
@ -144,7 +144,8 @@ public:
EDA_Rect() { }; EDA_Rect() { };
EDA_Rect( const wxPoint& aPos, const wxSize& aSize ) : EDA_Rect( const wxPoint& aPos, const wxSize& aSize ) :
m_Pos( aPos ), m_Size( aSize ) m_Pos( aPos )
, m_Size( aSize )
{ } { }
wxPoint Centre() wxPoint Centre()
@ -182,6 +183,7 @@ public:
m_Size.x = pos.x - m_Pos.x; m_Size.y = pos.y - m_Pos.y; m_Size.x = pos.x - m_Pos.x; m_Size.y = pos.y - m_Pos.y;
} }
/** /**
* Function Intersects * Function Intersects
* @return bool - true if the argument rectangle intersects this rectangle. * @return bool - true if the argument rectangle intersects this rectangle.
@ -203,7 +205,6 @@ public:
* @param aRect = given rect to merge with this * @param aRect = given rect to merge with this
*/ */
void Merge( const EDA_Rect& aRect ); void Merge( const EDA_Rect& aRect );
}; };
@ -320,6 +321,7 @@ public:
m_Status = new_status; m_Status = new_status;
} }
/** /**
* Function Display_Infos * Function Display_Infos
* has knowledge about the frame and how and where to put status information * has knowledge about the frame and how and where to put status information
@ -343,6 +345,7 @@ public:
return false; // derived classes should override this function return false; // derived classes should override this function
} }
/** /**
* Function HitTest (overlayed) * Function HitTest (overlayed)
* tests if the given EDA_Rect intersect this object. * tests if the given EDA_Rect intersect this object.
@ -355,6 +358,7 @@ public:
return false; // derived classes should override this function return false; // derived classes should override this function
} }
/** /**
* Function GetBoundingBox * Function GetBoundingBox
* returns the orthogonal, bounding box of this object for display purposes. * returns the orthogonal, bounding box of this object for display purposes.
@ -368,11 +372,13 @@ public:
printf( "Missing GetBoundingBox()\n" ); printf( "Missing GetBoundingBox()\n" );
Show( 0, std::cout ); // tell me which classes still need GetBoundingBox support Show( 0, std::cout ); // tell me which classes still need GetBoundingBox support
#endif #endif
// return a zero-sized box per default. derived classes should override this // return a zero-sized box per default. derived classes should override this
EDA_Rect ret( wxPoint( 0, 0 ), wxSize( 0, 0 ) ); EDA_Rect ret( wxPoint( 0, 0 ), wxSize( 0, 0 ) );
return ret; return ret;
} }
/** /**
* Function IterateForward * Function IterateForward
* walks through the object tree calling the inspector() on each object * walks through the object tree calling the inspector() on each object
@ -449,26 +455,27 @@ public:
}; };
// Text justify: // Graphic Text justify:
// Values -1,0,1 are used in computations, do not change them // Values -1,0,1 are used in computations, do not change them
typedef enum { enum GRTextHorizJustifyType {
GR_TEXT_HJUSTIFY_LEFT = -1, GR_TEXT_HJUSTIFY_LEFT = -1,
GR_TEXT_HJUSTIFY_CENTER = 0, GR_TEXT_HJUSTIFY_CENTER = 0,
GR_TEXT_HJUSTIFY_RIGHT = 1 GR_TEXT_HJUSTIFY_RIGHT = 1
} GRTextHorizJustifyType; };
typedef enum { enum GRTextVertJustifyType {
GR_TEXT_VJUSTIFY_TOP = -1, GR_TEXT_VJUSTIFY_TOP = -1,
GR_TEXT_VJUSTIFY_CENTER = 0, GR_TEXT_VJUSTIFY_CENTER = 0,
GR_TEXT_VJUSTIFY_BOTTOM = 1 GR_TEXT_VJUSTIFY_BOTTOM = 1
} GRTextVertJustifyType; };
/* Options to show solid segments (segments, texts...) */
/* controle des remplissages a l'ecran (Segments textes...)*/ enum GRFillMode {
#define FILAIRE 0 FILAIRE = 0, // segments are drawn as lines
#define FILLED 1 FILLED, // normal mode: segments have thickness
#define SKETCH 2 SKETCH // skect mode: segments have thickness, but are not filled
};
#define DEFAULT_SIZE_TEXT 60 /* default text height (in mils or 1/1000") */ #define DEFAULT_SIZE_TEXT 60 /* default text height (in mils or 1/1000") */
@ -489,18 +496,13 @@ public:
int m_Orient; /* Orient in 0.1 degrees */ int m_Orient; /* Orient in 0.1 degrees */
int m_Miroir; // Display Normal / mirror int m_Miroir; // Display Normal / mirror
int m_Attributs; /* flags (visible...) */ int m_Attributs; /* flags (visible...) */
int m_CharType; /* normal, bold, italic ... */ bool m_Italic; /* true to simulate an italic font... */
int m_HJustify, m_VJustify; /* Horiz and Vert Justifications */ GRTextHorizJustifyType m_HJustify; /* Horiz Justify */
int m_ZoomLevelDrawable; /* zoom level to draw text. GRTextVertJustifyType m_VJustify; /* Vertical and Vert Justify */
* if zoom < m_ZoomLevelDrawable: the text is drawn as a single line
*/
int* m_TextDrawings; /* list of segments to draw, for the Draw function */
int m_TextDrawingsSize; /* segment count */
public: public:
EDA_TextStruct( const wxString& text = wxEmptyString ); EDA_TextStruct( const wxString& text = wxEmptyString );
virtual ~EDA_TextStruct(); virtual ~EDA_TextStruct();
void CreateDrawData();
int GetLength() const { return m_Text.Length(); }; int GetLength() const { return m_Text.Length(); };
@ -510,9 +512,19 @@ public:
*/ */
int Pitch(); int Pitch();
void Draw( WinEDA_DrawPanel* panel, wxDC* DC, /** Function Draw
const wxPoint& offset, int color, * @param aPanel = the current DrawPanel
int draw_mode, int display_mode = FILAIRE, int anchor_color = -1 ); * @param aDC = the current Device Context
* @param aOffset = draw offset (usually (0,0))
* @param EDA_Colors aColor = text color
* @param aDraw_mode = GR_OR, GR_XOR.., -1 to use the current mode.
* @param GRFillMode aDisplay_mode = FILAIRE, FILLED or SKETCH
* @param EDA_Colors aAnchor_color = anchor color ( UNSPECIFIED_COLOR = do not draw anchor ).
*/
void Draw( WinEDA_DrawPanel* aPanel, wxDC* aDC,
const wxPoint& aOffset, EDA_Colors aColor,
int aDisplayMode, GRFillMode aDisplay_mode = FILAIRE,
EDA_Colors aAnchor_color = UNSPECIFIED_COLOR );
/** /**
* Function HitTest * Function HitTest

View File

@ -439,10 +439,17 @@ double round( double aNumber );
* @param aV_justify = vertical justification (bottom, center, top) * @param aV_justify = vertical justification (bottom, center, top)
* @param aWidth = line width (pen width) (default = 0) * @param aWidth = line width (pen width) (default = 0)
* if width < 0 : draw segments in sketch mode, width = abs(width) * if width < 0 : draw segments in sketch mode, width = abs(width)
* @param aItalic = true to simulate an italic font
* @param aCallback() = function called (if non null) to draw each segment.
* used only to draw 3D texts
*/ */
void DrawGraphicText( WinEDA_DrawPanel* aPanel, wxDC* aDC, void DrawGraphicText( WinEDA_DrawPanel* aPanel, wxDC* aDC,
const wxPoint& aPos, enum EDA_Colors aColor, const wxString& aText, const wxPoint& aPos, enum EDA_Colors aColor, const wxString& aText,
int aOrient, const wxSize& aSize, int aH_justify, int aV_justify, int aWidth = 0); int aOrient, const wxSize& aSize,
enum GRTextHorizJustifyType aH_justify,
enum GRTextVertJustifyType aV_justify,
int aWidth = 0, bool aItalic = false,
void (*aCallback)(int x0, int y0, int xf, int yf) = NULL);
/** Function PlotGraphicText /** Function PlotGraphicText
* same as DrawGraphicText, but plot graphic text insteed of draw it * same as DrawGraphicText, but plot graphic text insteed of draw it
@ -454,10 +461,14 @@ void DrawGraphicText( WinEDA_DrawPanel* aPanel, wxDC* aDC,
* @param aSize = text size (size.x or size.y can be < 0 for mirrored texts) * @param aSize = text size (size.x or size.y can be < 0 for mirrored texts)
* @param aH_justify = horizontal justification (Left, center, right) * @param aH_justify = horizontal justification (Left, center, right)
* @param aV_justify = vertical justification (bottom, center, top) * @param aV_justify = vertical justification (bottom, center, top)
* @param aItalic = true to simulate an italic font
*/ */
void PlotGraphicText( int aFormat_plot, const wxPoint& aPos, enum EDA_Colors aColor, void PlotGraphicText( int aFormat_plot, const wxPoint& aPos, enum EDA_Colors aColor,
const wxString& aText, const wxString& aText,
int aOrient, const wxSize& aSize, int aH_justify, int aV_justify ); int aOrient, const wxSize& aSize,
enum GRTextHorizJustifyType aH_justify,
enum GRTextVertJustifyType aV_justify,
bool aItalic = false );
/***************/ /***************/
/* CONFIRM.CPP */ /* CONFIRM.CPP */

View File

@ -710,8 +710,6 @@ void WinEDA_BasePcbFrame::Block_Rotate( wxDC* DC )
STRUCT->m_Orient += 900; STRUCT->m_Orient += 900;
if( STRUCT->m_Orient >= 3600 ) if( STRUCT->m_Orient >= 3600 )
STRUCT->m_Orient -= 3600; STRUCT->m_Orient -= 3600;
STRUCT->CreateDrawData();
break; break;
case TYPE_MIRE: case TYPE_MIRE:
@ -896,7 +894,6 @@ void WinEDA_BasePcbFrame::Block_Invert( wxDC* DC )
STRUCT->m_Miroir ^= 1; /* inverse miroir */ STRUCT->m_Miroir ^= 1; /* inverse miroir */
} }
STRUCT->SetLayer( ChangeSideNumLayer( STRUCT->GetLayer() ) ); STRUCT->SetLayer( ChangeSideNumLayer( STRUCT->GetLayer() ) );
STRUCT->CreateDrawData();
break; break;
case TYPE_MIRE: case TYPE_MIRE:

View File

@ -40,7 +40,7 @@ void TEXTE_PCB::Copy( TEXTE_PCB* source )
m_Layer = source->m_Layer; m_Layer = source->m_Layer;
m_Width = source->m_Width; m_Width = source->m_Width;
m_Attributs = source->m_Attributs; m_Attributs = source->m_Attributs;
m_CharType = source->m_CharType; m_Italic = source->m_Italic;
m_HJustify = source->m_HJustify; m_HJustify = source->m_HJustify;
m_VJustify = source->m_VJustify; m_VJustify = source->m_VJustify;
@ -135,9 +135,9 @@ void TEXTE_PCB::Draw( WinEDA_DrawPanel* panel, wxDC* DC,
if( color & ITEM_NOT_SHOW ) if( color & ITEM_NOT_SHOW )
return; return;
EDA_TextStruct::Draw( panel, DC, offset, color, EDA_TextStruct::Draw( panel, DC, offset, (EDA_Colors) color,
DrawMode, DisplayOpt.DisplayDrawItems, DrawMode, (GRFillMode)DisplayOpt.DisplayDrawItems,
(g_AnchorColor & ITEM_NOT_SHOW) ? -1 : (g_AnchorColor & MASKCOLOR) ); (g_AnchorColor & ITEM_NOT_SHOW) ? UNSPECIFIED_COLOR : (EDA_Colors)g_AnchorColor );
} }

View File

@ -635,6 +635,49 @@ void TRACK::Draw( WinEDA_DrawPanel* panel, wxDC* DC, int draw_mode, const wxPoin
m_End.x, m_End.y, m_End.x, m_End.y,
m_Width + (g_DesignSettings.m_TrackClearence * 2), color ); m_Width + (g_DesignSettings.m_TrackClearence * 2), color );
} }
/* Display the short netname:
* we must filter tracks, to avoid a lot of texts.
* - only horizontal or vertical tracks are eligible
* - only tracks with a length > 10 * thickness are eligible
*/
#define THRESHOLD 10
if( (m_End.x - m_Start.x) != 0 && (m_End.y - m_Start.y) != 0 )
return;
int len = ABS( (m_End.x - m_Start.x) + (m_End.y - m_Start.y) );
if( len < THRESHOLD * m_Width )
return;
if( GetNet() == 0 )
return;
EQUIPOT* net = ( (BOARD*) GetParent() )->FindNet( GetNet() );
if( net == NULL )
return;
int textlen = net->GetShortNetname().Len();
if( textlen > 0 )
{
// calculate a good size for the text
int tsize = MIN( m_Width, len / textlen );
wxPoint tpos = m_Start + m_End;
tpos.x /= 2;
tpos.y /= 2;
// Calculate angle: if the track segment is vertical, angle = 90 degrees
int angle = 0;
if ( (m_End.x - m_Start.x) == 0 ) // Vertical segment
angle = 900; // angle is in 0.1 degree
if( ( tsize / zoom) >= 6 )
{
tsize = (tsize * 8) / 10; // small reduction to give a better look
DrawGraphicText( panel, DC, tpos,
WHITE, net->GetShortNetname(), angle, wxSize( tsize, tsize ),
GR_TEXT_HJUSTIFY_CENTER, GR_TEXT_VJUSTIFY_CENTER, tsize / 7 );
}
}
} }

View File

@ -178,8 +178,6 @@ void WinEDA_CotationPropertiesFrame::OnOkClick( wxCommandEvent& event )
CurrentCotation->SetLayer( m_SelLayerBox->GetChoice() + FIRST_NO_COPPER_LAYER ); CurrentCotation->SetLayer( m_SelLayerBox->GetChoice() + FIRST_NO_COPPER_LAYER );
CurrentCotation->m_Text->SetLayer( m_SelLayerBox->GetChoice() + FIRST_NO_COPPER_LAYER ); CurrentCotation->m_Text->SetLayer( m_SelLayerBox->GetChoice() + FIRST_NO_COPPER_LAYER );
CurrentCotation->m_Text->CreateDrawData();
if( m_DC ) // Affichage nouveau texte if( m_DC ) // Affichage nouveau texte
{ {
/* Redessin du Texte */ /* Redessin du Texte */
@ -482,5 +480,4 @@ static void Ajuste_Details_Cotation( COTATION* Cotation )
Cotation->m_Value = mesure; Cotation->m_Value = mesure;
valeur_param( Cotation->m_Value, msg ); valeur_param( Cotation->m_Value, msg );
Cotation->SetText( msg ); Cotation->SetText( msg );
Cotation->m_Text->CreateDrawData();
} }

View File

@ -233,7 +233,6 @@ void WinEDA_TextPCBPropertiesFrame::OnOkClick( wxCommandEvent& event )
CurrentTextPCB->m_Miroir = (m_Mirror->GetSelection() == 0) ? 1 : 0; CurrentTextPCB->m_Miroir = (m_Mirror->GetSelection() == 0) ? 1 : 0;
CurrentTextPCB->m_Orient = m_Orient->GetSelection() * 900; CurrentTextPCB->m_Orient = m_Orient->GetSelection() * 900;
CurrentTextPCB->SetLayer( m_SelLayerBox->GetChoice() ); CurrentTextPCB->SetLayer( m_SelLayerBox->GetChoice() );
CurrentTextPCB->CreateDrawData();
if( m_DC ) // Affichage nouveau texte if( m_DC ) // Affichage nouveau texte
{ {
@ -283,7 +282,6 @@ void WinEDA_PcbFrame::Place_Texte_Pcb( TEXTE_PCB* TextePcb, wxDC* DC )
if( TextePcb == NULL ) if( TextePcb == NULL )
return; return;
TextePcb->CreateDrawData();
TextePcb->Draw( DrawPanel, DC, GR_OR ); TextePcb->Draw( DrawPanel, DC, GR_OR );
DrawPanel->ManageCurseur = NULL; DrawPanel->ManageCurseur = NULL;
DrawPanel->ForceCloseManageCurseur = NULL; DrawPanel->ForceCloseManageCurseur = NULL;
@ -407,8 +405,6 @@ void WinEDA_PcbFrame::Rotate_Texte_Pcb( TEXTE_PCB* TextePcb, wxDC* DC )
if( TextePcb->m_Orient < 0 ) if( TextePcb->m_Orient < 0 )
TextePcb->m_Orient += 3600; TextePcb->m_Orient += 3600;
TextePcb->CreateDrawData();
/* Redessin du Texte */ /* Redessin du Texte */
TextePcb->Draw( DrawPanel, DC, drawmode ); TextePcb->Draw( DrawPanel, DC, drawmode );
TextePcb->Display_Infos( this ); TextePcb->Display_Infos( this );