diff --git a/3d-viewer/3d_draw.cpp b/3d-viewer/3d_draw.cpp index d234e3d854..f90b71e8e1 100644 --- a/3d-viewer/3d_draw.cpp +++ b/3d-viewer/3d_draw.cpp @@ -92,18 +92,18 @@ GLuint Pcb3D_GLCanvas::CreateDrawGL_List() */ { WinEDA_BasePcbFrame* pcbframe = m_Parent->m_Parent; - BOARD* pcb = pcbframe->m_Pcb; - TRACK* track; - SEGZONE* segzone; - int ii; + BOARD* pcb = pcbframe->m_Pcb; + TRACK* track; + SEGZONE* segzone; + int ii; - wxBusyCursor dummy; + wxBusyCursor dummy; m_gllist = glGenLists( 1 ); pcb->ComputeBoundaryBox(); g_Parm_3D_Visu.m_BoardSettings = pcb->m_BoardSettings; - g_Parm_3D_Visu.m_BoardSize = pcb->m_BoundaryBox.GetSize(); + g_Parm_3D_Visu.m_BoardSize = pcb->m_BoundaryBox.GetSize(); g_Parm_3D_Visu.m_BoardPos = pcb->m_BoundaryBox.Centre(); g_Parm_3D_Visu.m_BoardPos.y = -g_Parm_3D_Visu.m_BoardPos.y; g_Parm_3D_Visu.m_Layers = pcb->m_BoardSettings->m_CopperLayerCount; @@ -232,7 +232,7 @@ GLuint Pcb3D_GLCanvas::CreateDrawGL_List() } /* draw footprints */ - MODULE* Module = pcb->m_Modules; + MODULE* Module = pcb->m_Modules; for( ; Module != NULL; Module = Module->Next() ) { Module->Draw3D( this ); @@ -291,8 +291,8 @@ void Pcb3D_GLCanvas::Draw3D_Via( SEGVIA* via ) r = via->m_Width * g_Parm_3D_Visu.m_BoardScale / 2; hole = via->GetDrillValue(); hole *= g_Parm_3D_Visu.m_BoardScale / 2; - x = via->m_Start.x * g_Parm_3D_Visu.m_BoardScale; - y = via->m_Start.y * g_Parm_3D_Visu.m_BoardScale; + x = via->m_Start.x * g_Parm_3D_Visu.m_BoardScale; + y = via->m_Start.y * g_Parm_3D_Visu.m_BoardScale; via->ReturnLayerPair( &top_layer, &bottom_layer ); @@ -308,6 +308,7 @@ void Pcb3D_GLCanvas::Draw3D_Via( SEGVIA* via ) continue; SetGLColor( color ); + // SetGLColor( LIGHTGRAY ); glNormal3f( 0.0, 0.0, (layer == COPPER_LAYER_N) ? -1.0 : 1.0 ); 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 ) /*************************************************************/ { - int layer = text->GetLayer(); - double x, y, xf, yf; - double zpos, w; - 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 ) ) + return; + int layer = text->GetLayer(); + int color = g_Parm_3D_Visu.m_BoardSettings->m_LayerColor[layer]; - 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 ); - w = text->m_Width * g_Parm_3D_Visu.m_BoardScale; - x = coord[ll] * g_Parm_3D_Visu.m_BoardScale; - y = coord[ll + 1] * g_Parm_3D_Visu.m_BoardScale; - xf = coord[ll + 2] * g_Parm_3D_Visu.m_BoardScale; - yf = coord[ll + 3] * g_Parm_3D_Visu.m_BoardScale; - - Draw3D_FilledSegment( x, -y, xf, -yf, w, zpos ); - } - } - } + SetGLColor( color ); + s_Text3DZPos = g_Parm_3D_Visu.m_LayerZcoord[layer]; + s_Text3DWidth = text->m_Width * g_Parm_3D_Visu.m_BoardScale; + glNormal3f( 0.0, 0.0, Get3DLayerSide( layer ) ); + DrawGraphicText( NULL, NULL, + text->m_Pos, (EDA_Colors) color, text->m_Text, + text->m_Orient, text->m_Size, + text->m_HJustify, + text->m_VJustify, + text->m_Width, text->m_Italic, + Draw3dTextSegm ); } @@ -473,7 +470,7 @@ void MODULE::Draw3D( Pcb3D_GLCanvas* glcanvas ) /* Draw module shape: 3D shape if exists (or module edge if not exists) */ S3D_MASTER* Struct3D = m_3D_Drawings; - bool As3dShape = FALSE; + bool As3dShape = FALSE; if( g_Parm_3D_Visu.m_Draw3DModule ) { glPushMatrix(); @@ -591,7 +588,7 @@ void D_PAD::Draw3D( Pcb3D_GLCanvas* glcanvas ) int angle, delta_angle; int coord[4][2]; double fcoord[8][2], f_hole_coord[8][2]; - double scale; + double scale; double zpos; wxPoint shape_pos; double x, y, r, w, hole, holeX, holeY; @@ -682,10 +679,10 @@ void D_PAD::Draw3D( Pcb3D_GLCanvas* glcanvas ) RotatePoint( &delta_cx, &delta_cy, angle ); { double ox, oy, fx, fy; - ox = (double) (ux0 + delta_cx) * scale; - oy = (double) (uy0 + delta_cy) * scale; - fx = (double) (ux0 - delta_cx) * scale; - fy = (double) (uy0 - delta_cy) * scale; + ox = (double) ( ux0 + delta_cx ) * scale; + oy = (double) ( uy0 + delta_cy ) * scale; + fx = (double) ( ux0 - delta_cx ) * scale; + fy = (double) ( uy0 - delta_cy ) * scale; for( layer = FIRST_COPPER_LAYER; layer <= LAST_COPPER_LAYER; layer++ ) { if( layer && (layer == nlmax) ) @@ -738,8 +735,8 @@ void D_PAD::Draw3D( Pcb3D_GLCanvas* glcanvas ) coord[ii][0] += ux0; coord[ii][1] += uy0; ll = ii * 2; - fcoord[ll][0] = coord[ii][0] * scale; - fcoord[ll][1] = coord[ii][1] * scale; + fcoord[ll][0] = coord[ii][0] *scale; + fcoord[ll][1] = coord[ii][1] *scale; } for( ii = 0; ii < 7; ii += 2 ) @@ -794,7 +791,7 @@ void D_PAD::Draw3D( Pcb3D_GLCanvas* glcanvas ) glEnd(); } } - break; + break; default: break; @@ -896,8 +893,8 @@ static void Draw3D_FilledSegment( double startx, double starty, dy = endy - starty; angle = (int) ( ( atan2( dy, dx ) * 1800 / M_PI ) + 0.5 ); - RotatePoint( &dx, &dy, angle ); // apres rotation: dx = longueur du segment - // dy = 0; + RotatePoint( &dx, &dy, angle ); // apres rotation: dx = longueur du segment + // dy = 0; width /= 2; glBegin( GL_POLYGON ); @@ -962,8 +959,8 @@ static void Draw3D_FilledSegmentWithHole( double startx, holey -= starty; angle = (int) ( ( atan2( endy, endx ) * 1800 / M_PI ) + 0.5 ); - RotatePoint( &endx, &endy, angle ); // apres rotation: endx = longueur du segment - // endy = 0; + RotatePoint( &endx, &endy, angle ); // apres rotation: endx = longueur du segment + // endy = 0; RotatePoint( &holex, &holey, angle ); width /= 2; @@ -999,8 +996,8 @@ static void Draw3D_FilledSegmentWithHole( double startx, for( ii = 0; ii <= 8; ii++ ) { theta = -ii * 225; - x = 0.0; - y = width; + x = 0.0; + y = width; RotatePoint( &x, &y, -angle + theta ); xin = 0.0; yin = holeradius; diff --git a/common/base_struct.cpp b/common/base_struct.cpp index 0cd7187094..a10d487235 100644 --- a/common/base_struct.cpp +++ b/common/base_struct.cpp @@ -132,8 +132,8 @@ void EDA_BaseStruct::Show( int nestLevel, std::ostream& os ) wxString s = GetClass(); NestedSpace( nestLevel, os ) << '<' << s.Lower().mb_str() << ">" - << " Need ::Show() override for this class " - << "\n"; + << " Need ::Show() override for this class " + << "\n"; } @@ -147,11 +147,14 @@ void EDA_BaseStruct::Show( int nestLevel, std::ostream& os ) std::ostream& EDA_BaseStruct::NestedSpace( int nestLevel, std::ostream& os ) { for( int i = 0; iGetZoom(); - width = m_Width / zoom; - if( display_mode == FILAIRE ) + zoom = aPanel->GetZoom(); + width = m_Width; + if( aDisplayMode == FILAIRE ) width = 0; - /* choix de la couleur du texte : */ - if( draw_mode != -1 ) - GRSetDrawMode( DC, draw_mode ); + if( aDrawMode != -1 ) + GRSetDrawMode( aDC, aDrawMode ); - /* trace du texte */ - if( zoom > m_ZoomLevelDrawable ) + /* Draw text anchor, if allowed */ + 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 ); + int anchor_size = 2 * zoom; + aAnchor_color = (EDA_Colors) (aAnchor_color & MASKCOLOR); + + int cX = m_Pos.x + aOffset.x; + int cY = m_Pos.y + aOffset.y; + + GRLine( &aPanel->m_ClipBox, aDC, cX - anchor_size, cY, + cX + anchor_size, cY, 0, aAnchor_color ); + + GRLine( &aPanel->m_ClipBox, aDC, cX, cY - anchor_size, + cX, cY + anchor_size, 0, aAnchor_color ); } - else - { - /* trace ancre du texte ? */ - if( anchor_color != -1 ) - { - int anchor_size = 2 * zoom; - anchor_color &= MASKCOLOR; - /* calcul de la position du texte */ - int cX = m_Pos.x - offset.x; - int cY = m_Pos.y - offset.y; + if( aDisplayMode == SKETCH ) + width = -width; - /* trace ancre du texte */ - GRLine( &panel->m_ClipBox, DC, cX - anchor_size, cY, - cX + anchor_size, cY, 0, anchor_color ); - - GRLine( &panel->m_ClipBox, DC, cX, cY - anchor_size, - cX, cY + anchor_size, 0, anchor_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( width > 2 ) - { - for( kk = 0, ll = 0; kk < (nbpoints - 1); kk++, ll += 2 ) - { - 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 ); - } - } + DrawGraphicText( aPanel, aDC, + aOffset + m_Pos, aColor, m_Text, + m_Orient, m_Size, + m_HJustify, m_VJustify, width, m_Italic ); } -/****************************************/ -void EDA_TextStruct::CreateDrawData() -/****************************************/ - -/* Cree le tableau de donn�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�s - * m_TextDrawingsSize taille (en int) du tableau - * Codage dans le tableau: - * Suite des coord des sommets des polygones a tracer pr���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� */ - 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 -} - +/******************/ +/* Class EDA_Rect */ +/******************/ /******************************/ 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: 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 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 ); @@ -665,8 +376,6 @@ bool EDA_Rect::Intersects( const EDA_Rect aRect ) const else rc = false; - //D( std::cout << "rc=" << rc << '\n'; ) - return rc; } @@ -771,4 +480,3 @@ void EDA_Rect::Merge( const EDA_Rect& aRect ) end.y = MAX( end.y, rect_end.y ); SetEnd( end ); } - diff --git a/common/drawtxt.cpp b/common/drawtxt.cpp index 46d4df5ae5..43943ef7c5 100644 --- a/common/drawtxt.cpp +++ b/common/drawtxt.cpp @@ -23,25 +23,34 @@ /****************************************************************************************************/ void DrawGraphicText( WinEDA_DrawPanel* aPanel, wxDC* DC, - const wxPoint& aPos, enum EDA_Colors aColor, const wxString& aText, - int aOrient, const wxSize& aSize, int aH_justify, int aV_justify, int aWidth ) + const wxPoint& aPos, EDA_Colors aColor, const wxString& aText, + 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 + * Draw a graphic text (like module texts) * Draw a graphic text (like module texts) * @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 aText = text to draw * @param aOrient = angle in 0.1 degree * @param aSize = text size (size.x or size.y can be < 0 for mirrored texts) * @param aH_justify = horizontal justification (Left, center, right) * @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 k1, k2, x0, y0; + int ii, kk, char_count, AsciiCode, endcar; + int x0, y0; int zoom; int size_h, size_v, espacement; SH_CODE f_cod, plume = 'U'; @@ -51,9 +60,12 @@ void DrawGraphicText( WinEDA_DrawPanel* aPanel, wxDC* DC, int cX, cY; // Texte center int ox, oy; // Draw coordinates for the current char int coord[100]; // Buffer coordinate used to draw polylines (char shapes) - bool sketch_mode = FALSE; + bool sketch_mode = false; - zoom = aPanel->GetZoom(); + if ( aPanel ) + zoom = aPanel->GetZoom(); + else + zoom = 1; size_h = aSize.x; size_v = aSize.y; @@ -63,14 +75,20 @@ void DrawGraphicText( WinEDA_DrawPanel* aPanel, wxDC* DC, aWidth = -aWidth; sketch_mode = TRUE; } + kk = 0; ptr = 0; /* ptr = text index */ - nbchar = aText.Len(); - if( nbchar == 0 ) + char_count = aText.Len(); + if( char_count == 0 ) return; 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; oy = cY = aPos.y; @@ -79,7 +97,7 @@ void DrawGraphicText( WinEDA_DrawPanel* aPanel, wxDC* DC, { int xm, ym, ll, xc, yc; int textsize = ABS( espacement ); - ll = (textsize * nbchar) / zoom; + ll = (textsize * char_count) / zoom; xc = GRMapX( cX ); yc = GRMapY( cY ); @@ -101,7 +119,7 @@ void DrawGraphicText( WinEDA_DrawPanel* aPanel, wxDC* DC, /* 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 */ 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 */ { /* 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 */ ux0 = cX - dx; @@ -190,34 +208,15 @@ void DrawGraphicText( WinEDA_DrawPanel* aPanel, wxDC* DC, RotatePoint( &ux0, &uy0, cX, cY, aOrient ); RotatePoint( &dx, &dy, cX, cY, aOrient ); - GRLine( &aPanel->m_ClipBox, DC, ux0, uy0, dx, dy, aWidth, aColor ); + if ( aCallback ) + aCallback( ux0, uy0, dx, dy ); + else + GRLine( &aPanel->m_ClipBox, DC, ux0, uy0, dx, dy, aWidth, aColor ); return; } -#if 0 - 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 ) + while( kk++ < char_count ) { x0 = 0; y0 = 0; #if defined(wxUSE_UNICODE) && defined(KICAD_CYRILLIC) @@ -247,8 +246,16 @@ void DrawGraphicText( WinEDA_DrawPanel* aPanel, wxDC* DC, if( ii && (plume == 'D' ) ) { if( aWidth <= 1 ) - GRPoly( &aPanel->m_ClipBox, DC, ii / 2, coord, 0, 0, - aColor, aColor ); + aWidth = 0; + 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 ) { int ik, * coordptr; @@ -270,7 +277,8 @@ void DrawGraphicText( WinEDA_DrawPanel* aPanel, wxDC* DC, 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 ); ptcar++; @@ -278,6 +286,9 @@ void DrawGraphicText( WinEDA_DrawPanel* aPanel, wxDC* DC, k2 = f_cod; /* trace sur axe H */ 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; RotatePoint( &dx, &dy, cX, cY, aOrient ); @@ -290,19 +301,20 @@ void DrawGraphicText( WinEDA_DrawPanel* aPanel, wxDC* DC, /* end switch */ } - /* end boucle for = end trace de 1 caractere */ + /* end draw 1 char */ ptr++; ox += espacement; } - - /* end trace du texte */ } /******************************************************************************************/ void PlotGraphicText( int aFormat_plot, const wxPoint& aPos, enum EDA_Colors aColor, 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 @@ -317,7 +329,7 @@ void PlotGraphicText( int aFormat_plot, const wxPoint& aPos, enum EDA_Colors aCo * @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 size_h, size_v, espacement; 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 */ /* calcul de la position du debut des textes: ox et oy */ - nbchar = aText.Len(); + char_count = aText.Len(); espacement = (10 * size_h ) / 9; ox = cX = aPos.x; oy = cY = aPos.y; /* Calcul du cadrage du texte */ - dx = (espacement * nbchar) / 2; + dx = (espacement * char_count) / 2; dy = size_v / 2; /* Decalage du debut du texte / centre */ 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' ); - while( kk++ < nbchar ) + while( kk++ < char_count ) { #if defined(wxUSE_UNICODE) && defined(KICAD_CYRILLIC) 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 = (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; diff --git a/eeschema/class_hierarchical_PIN_sheet.cpp b/eeschema/class_hierarchical_PIN_sheet.cpp index 052a44a73f..e0d9f122b6 100644 --- a/eeschema/class_hierarchical_PIN_sheet.cpp +++ b/eeschema/class_hierarchical_PIN_sheet.cpp @@ -72,7 +72,7 @@ void Hierarchical_PIN_Sheet_Struct::Draw( WinEDA_DrawPanel* panel, wxDC* DC, con /********************************************************************************************/ /* Routine de dessin des Labels type hierarchie */ { - int side; + GRTextHorizJustifyType side; EDA_Colors txtcolor; int posx, tposx, posy, size2; wxSize size; diff --git a/eeschema/class_sch_cmp_field.cpp b/eeschema/class_sch_cmp_field.cpp index 28e91280c9..eefc5acbc7 100644 --- a/eeschema/class_sch_cmp_field.cpp +++ b/eeschema/class_sch_cmp_field.cpp @@ -53,36 +53,12 @@ void SCH_CMP_FIELD::SwapData( SCH_CMP_FIELD* copyitem ) EXCHG( m_Orient, copyitem->m_Orient ); EXCHG( m_Miroir, copyitem->m_Miroir ); 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_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() /*********************************/ @@ -92,8 +68,8 @@ bool SCH_CMP_FIELD::IsVoid() */ { if( m_Text.IsEmpty() || m_Text == wxT( "~" ) ) - return TRUE; - return FALSE; + return true; + return false; } @@ -142,7 +118,7 @@ EDA_Rect SCH_CMP_FIELD::GetBoundaryBox() const y2 = pos.y + (DrawLibItem->m_Transform[1][0] * x1) + (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( orient == TEXT_ORIENT_HORIZ ) @@ -206,7 +182,9 @@ EDA_Rect SCH_CMP_FIELD::GetBoundaryBox() const } +/*********************************************/ bool SCH_CMP_FIELD::Save( FILE* aFile ) const +/*********************************************/ { char hjustify = 'C'; if( m_HJustify == GR_TEXT_HJUSTIFY_LEFT ) diff --git a/eeschema/class_sch_cmp_field.h b/eeschema/class_sch_cmp_field.h index 99fb913654..3d86157447 100644 --- a/eeschema/class_sch_cmp_field.h +++ b/eeschema/class_sch_cmp_field.h @@ -44,7 +44,6 @@ public: } - void PartTextCopy( SCH_CMP_FIELD* target ); void Place( WinEDA_SchematicFrame* frame, wxDC* DC ); EDA_Rect GetBoundaryBox() const; diff --git a/eeschema/classes_body_items.h b/eeschema/classes_body_items.h index 4f82fef17f..ef5a78ab1c 100644 --- a/eeschema/classes_body_items.h +++ b/eeschema/classes_body_items.h @@ -107,7 +107,7 @@ public: EDA_LibComponentStruct* m_Entry; // Pointer to the component in lib bool m_DrawPinText; // Are pin texts drawn ? - DrawPinPrms(EDA_LibComponentStruct* entry, bool drawpintext = true) + DrawPinPrms( EDA_LibComponentStruct* entry, bool drawpintext = true ) { m_Entry = entry; m_DrawPinText = drawpintext; @@ -145,20 +145,20 @@ public: virtual ~LibEDA_BaseStruct() { } /** Function Draw (virtual pure) - * Draw A body item - * @param aPanel = DrawPanel to use (can be null) mainly used for clipping purposes - * @param aDC = Device Context (can be null) - * @param aOffset = offset to draw - * @param aColor = -1 to use the normal body item color, or use this color if >= 0 - * @param aDrawMode = GR_OR, GR_XOR, ... - * @param aData = value or pointer used to pass others parametres, depending on body items. - * used for some items to force to force no fill mode - * ( has meaning only for items what can be filled ). used in printing or moving objects mode - * or to pass refernce to the lib component for pins - * @param aTransformMatrix = Transform Matrix (rotaion, mirror ..) + * Draw A body item + * @param aPanel = DrawPanel to use (can be null) mainly used for clipping purposes + * @param aDC = Device Context (can be null) + * @param aOffset = offset to draw + * @param aColor = -1 to use the normal body item color, or use this color if >= 0 + * @param aDrawMode = GR_OR, GR_XOR, ... + * @param aData = value or pointer used to pass others parametres, depending on body items. + * used for some items to force to force no fill mode + * ( has meaning only for items what can be filled ). used in printing or moving objects mode + * or to pass refernce to the lib component for pins + * @param aTransformMatrix = Transform Matrix (rotaion, mirror ..) */ virtual void Draw( WinEDA_DrawPanel * aPanel, wxDC * aDC, const wxPoint &aOffset, int aColor, - int aDrawMode, void * aData, int aTransformMatrix[2][2] ) = 0; + int aDrawMode, void* aData, int aTransformMatrix[2][2] ) = 0; /** * Function Save @@ -166,9 +166,9 @@ public: * @param aFile The FILE to write to. * @return bool - true if success writing else false. */ - virtual bool Save( FILE* aFile ) const = 0; + virtual bool Save( FILE* aFile ) const = 0; - void Display_Infos_DrawEntry( WinEDA_DrawFrame* frame ); + void Display_Infos_DrawEntry( WinEDA_DrawFrame* frame ); }; @@ -202,36 +202,37 @@ public: return wxT( "LibDrawPin" ); } + /** * 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. */ - virtual bool Save( FILE* aFile ) const; + virtual bool Save( FILE* aFile ) const; - LibDrawPin* GenCopy(); - void Display_Infos( WinEDA_DrawFrame* frame ); - wxPoint ReturnPinEndPoint(); + LibDrawPin* GenCopy(); + void Display_Infos( WinEDA_DrawFrame* frame ); + wxPoint ReturnPinEndPoint(); int ReturnPinDrawOrient( int TransMat[2][2] ); - void ReturnPinStringNum( wxString& buffer ) const; - void SetPinNumFromString( wxString& buffer ); + void ReturnPinStringNum( wxString& buffer ) const; + void SetPinNumFromString( wxString& buffer ); 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] ); - void DrawPinSymbol( WinEDA_DrawPanel* panel, wxDC* DC, const wxPoint& pin_pos, - int orient, - int DrawMode, int Color = -1 ); + void DrawPinSymbol( WinEDA_DrawPanel* panel, wxDC* DC, const wxPoint& pin_pos, + int orient, + int DrawMode, int Color = -1 ); - void DrawPinTexts( WinEDA_DrawPanel* panel, wxDC* DC, - wxPoint& pin_pos, int orient, - int TextInside, bool DrawPinNum, bool DrawPinName, - int Color, int DrawMode ); - void PlotPinTexts( wxPoint& pin_pos, int orient, - int TextInside, bool DrawPinNum, bool DrawPinName ); + void DrawPinTexts( WinEDA_DrawPanel* panel, wxDC* DC, + wxPoint& pin_pos, int orient, + int TextInside, bool DrawPinNum, bool DrawPinName, + int Color, int DrawMode ); + void PlotPinTexts( wxPoint& pin_pos, int orient, + int TextInside, bool DrawPinNum, bool DrawPinName ); }; @@ -253,18 +254,21 @@ public: { return wxT( "LibDrawArc" ); } + + /** * 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. */ - virtual bool Save( FILE* aFile ) const; + virtual bool Save( FILE* aFile ) const; - LibDrawArc* GenCopy(); + LibDrawArc* GenCopy(); + 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] ); }; /*****************************/ @@ -273,7 +277,7 @@ public: class LibDrawCircle : public LibEDA_BaseStruct { public: - int m_Rayon; + int m_Rayon; public: LibDrawCircle(); @@ -282,18 +286,21 @@ public: { return wxT( "LibDrawCircle" ); } + + /** * 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. */ - virtual bool Save( FILE* aFile ) const; + virtual bool Save( FILE* aFile ) const; - LibDrawCircle* GenCopy(); + LibDrawCircle* GenCopy(); + 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,18 +325,21 @@ public: { return wxT( "LibDrawText" ); } + + /** * 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. */ - virtual bool Save( FILE* aFile ) const; + virtual bool Save( FILE* aFile ) const; - LibDrawText* GenCopy(); + LibDrawText* GenCopy(); + 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,18 +358,21 @@ public: { return wxT( "LibDrawSquare" ); } + + /** * 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. */ - virtual bool Save( FILE* aFile ) const; + virtual bool Save( FILE* aFile ) const; - LibDrawSquare* GenCopy(); + LibDrawSquare* GenCopy(); + 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,18 +390,21 @@ public: { return wxT( "LibDrawSegment" ); } + + /** * 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. */ - virtual bool Save( FILE* aFile ) const; + virtual bool Save( FILE* aFile ) const; LibDrawSegment* GenCopy(); + 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] ); }; /*********************************************/ @@ -397,8 +413,8 @@ public: class LibDrawPolyline : public LibEDA_BaseStruct { public: - int m_CornersCount; - int* m_PolyList; + int m_CornersCount; + int* m_PolyList; public: LibDrawPolyline(); @@ -414,18 +430,20 @@ public: return wxT( "LibDrawPolyline" ); } + /** * 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. */ - virtual bool Save( FILE* aFile ) const; + virtual bool Save( FILE* aFile ) const; + + LibDrawPolyline* GenCopy(); + void AddPoint( const wxPoint& point ); - LibDrawPolyline* GenCopy(); - void AddPoint( const wxPoint& point ); 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] ); }; @@ -443,21 +461,22 @@ class LibDrawField : public LibEDA_BaseStruct { public: int m_FieldId; /* 0 a 11 - * 0 = Reference; 1 = Value - * 2 = Default footprint, 3 = subsheet (not used, reserved) - * .. 11 other fields - */ + * 0 = Reference; 1 = Value + * 2 = Default footprint, 3 = subsheet (not used, reserved) + * .. 11 other fields + */ wxSize m_Size; - int m_Orient; /* Orientation */ - int m_Attributs; /* Attributes (Non visible ...) */ - int m_HJustify, m_VJustify; /* Horiz and Vert Text Justifications */ - wxString m_Text; /* Field Data */ - wxString m_Name; /* Field Name */ + int m_Orient; /* Orientation */ + int m_Attributs; /* Attributes (Non visible ...) */ + enum GRTextHorizJustifyType m_HJustify; /* Horizontal Text Justify */ + enum GRTextVertJustifyType m_VJustify; /* Vertical Text Justify */ + wxString m_Text; /* Field Data */ + wxString m_Name; /* Field Name */ public: - LibDrawField* Next() const { return (LibDrawField*) Pnext; } - LibDrawField* Back() const { return (LibDrawField*) Pback; } + LibDrawField* Next() const { return (LibDrawField*) Pnext; } + LibDrawField* Back() const { return (LibDrawField*) Pback; } LibDrawField( int idfield = 2 ); @@ -466,19 +485,23 @@ public: { return wxT( "LibDrawField" ); } + + /** * 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. */ - virtual bool Save( FILE* aFile ) const; + virtual bool Save( FILE* aFile ) const; - LibDrawField* GenCopy(); - void Copy( LibDrawField* Target ); + LibDrawField* GenCopy(); + void Copy( LibDrawField* Target ); + 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 * tests if the given wxPoint is within the bounds of this object. diff --git a/eeschema/edit_component_in_lib.cpp b/eeschema/edit_component_in_lib.cpp index 98b5839491..8b54722535 100644 --- a/eeschema/edit_component_in_lib.cpp +++ b/eeschema/edit_component_in_lib.cpp @@ -106,11 +106,11 @@ void WinEDA_PartPropertiesFrame::CopyBufferToFieldData( LibDrawField* Field ) * field "Field" */ { - int hjustify[3] = { + GRTextHorizJustifyType hjustify[3] = { GR_TEXT_HJUSTIFY_LEFT, GR_TEXT_HJUSTIFY_CENTER, GR_TEXT_HJUSTIFY_RIGHT }; - int vjustify[3] = { + GRTextVertJustifyType vjustify[3] = { GR_TEXT_VJUSTIFY_BOTTOM, GR_TEXT_VJUSTIFY_CENTER, GR_TEXT_VJUSTIFY_TOP }; diff --git a/eeschema/eelibs_draw_components.cpp b/eeschema/eelibs_draw_components.cpp index 214825ea0c..cb9083c411 100644 --- a/eeschema/eelibs_draw_components.cpp +++ b/eeschema/eelibs_draw_components.cpp @@ -253,7 +253,8 @@ void SCH_CMP_FIELD::Draw( WinEDA_DrawPanel* panel, EDA_Colors color; wxPoint pos; /* Position des textes */ SCH_COMPONENT* DrawLibItem = (SCH_COMPONENT*) m_Parent; - int hjustify, vjustify; + GRTextHorizJustifyType hjustify; + GRTextVertJustifyType vjustify; int LineWidth = MAX( m_Width, g_DrawMinimunLineWidth ); if( m_Attributs & TEXT_NO_VISIBLE ) @@ -280,19 +281,61 @@ void SCH_CMP_FIELD::Draw( WinEDA_DrawPanel* panel, else orient = TEXT_ORIENT_HORIZ; /* 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 ) - 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 ) - 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 { /* Texte horizontal: Y a t-il miroir (pour les justifications)*/ 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 ) - 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 ) @@ -309,9 +352,9 @@ void SCH_CMP_FIELD::Draw( WinEDA_DrawPanel* panel, m_Size, 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; #if defined(KICAD_GOST) fulltext.Append( '.'); @@ -320,7 +363,7 @@ void SCH_CMP_FIELD::Draw( WinEDA_DrawPanel* panel, fulltext.Append( 'A' - 1 + DrawLibItem->m_Multi ); #endif - DrawGraphicText( panel, DC, pos, color, fulltext.GetData(), + DrawGraphicText( panel, DC, pos, color, fulltext, orient ? TEXT_ORIENT_VERT : TEXT_ORIENT_HORIZ, m_Size, hjustify, vjustify, LineWidth ); diff --git a/eeschema/eelibs_read_libraryfiles.cpp b/eeschema/eelibs_read_libraryfiles.cpp index ef11ebee42..c95e15657a 100644 --- a/eeschema/eelibs_read_libraryfiles.cpp +++ b/eeschema/eelibs_read_libraryfiles.cpp @@ -871,7 +871,7 @@ GetLibEntryField (EDA_LibComponentStruct* LibEntry, * 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; char* Text, Char1[256], Char2[256], @@ -919,8 +919,8 @@ GetLibEntryField (EDA_LibComponentStruct* LibEntry, draw = TRUE; if( Char2[0] == 'I' ) draw = FALSE; - hjustify = GR_TEXT_HJUSTIFY_CENTER; - vjustify = GR_TEXT_VJUSTIFY_CENTER; + GRTextHorizJustifyType hjustify = GR_TEXT_HJUSTIFY_CENTER; + GRTextVertJustifyType vjustify = GR_TEXT_VJUSTIFY_CENTER; if( nbparam >= 6 ) { diff --git a/eeschema/load_one_schematic_file.cpp b/eeschema/load_one_schematic_file.cpp index d09296c274..bcbef6fc4d 100644 --- a/eeschema/load_one_schematic_file.cpp +++ b/eeschema/load_one_schematic_file.cpp @@ -670,8 +670,8 @@ static int ReadPartDescr( wxWindow* frame, char* Line, FILE* f, int fieldNdx; char FieldUserName[1024]; - int hjustify = GR_TEXT_HJUSTIFY_CENTER; - int vjustify = GR_TEXT_VJUSTIFY_CENTER; + GRTextHorizJustifyType hjustify = GR_TEXT_HJUSTIFY_CENTER; + GRTextVertJustifyType vjustify = GR_TEXT_VJUSTIFY_CENTER; FieldUserName[0] = 0; diff --git a/eeschema/plot.cpp b/eeschema/plot.cpp index b60c1cf4da..433aa51bac 100644 --- a/eeschema/plot.cpp +++ b/eeschema/plot.cpp @@ -376,7 +376,6 @@ static void PlotTextField( SCH_COMPONENT* DrawLibItem, { wxPoint textpos; /* Position des textes */ SCH_CMP_FIELD* field = DrawLibItem->GetField( FieldNumber ); - int hjustify, vjustify; int orient; 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 */ 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 = TransformCoordinate( DrawLibItem->m_Transform, textpos ) + DrawLibItem->m_Pos; @@ -404,19 +404,62 @@ static void PlotTextField( SCH_COMPONENT* DrawLibItem, else orient = TEXT_ORIENT_HORIZ; /* 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 ) - 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 ) - 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 { /* Texte horizontal: Y a t-il miroir (pour les justifications)*/ 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 ) - 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 ); @@ -686,7 +729,6 @@ static void PlotSheetLabelStruct( Hierarchical_PIN_Sheet_Struct* Struct ) /***********************************************************************/ /* Routine de dessin des Sheet Labels type hierarchie */ { - int side; EDA_Colors txtcolor = UNSPECIFIED_COLOR; int posx, tposx, posy, size, size2; int coord[16]; @@ -695,6 +737,7 @@ static void PlotSheetLabelStruct( Hierarchical_PIN_Sheet_Struct* Struct ) txtcolor = ReturnLayerColor( Struct->GetLayer() ); posx = Struct->m_Pos.x; posy = Struct->m_Pos.y; size = Struct->m_Size.x; + GRTextHorizJustifyType side; if( Struct->m_Edge ) { tposx = posx - size; diff --git a/include/base_struct.h b/include/base_struct.h index 63ea1e7889..ea6f8e2fce 100644 --- a/include/base_struct.h +++ b/include/base_struct.h @@ -5,6 +5,7 @@ #ifndef BASE_STRUCT_H #define BASE_STRUCT_H +#include "colors.h" #if defined (DEBUG) #include // needed for Show() @@ -127,7 +128,6 @@ public: }; - /** * Class EDA_Rect * handles the component boundary box. @@ -144,8 +144,9 @@ public: EDA_Rect() { }; EDA_Rect( const wxPoint& aPos, const wxSize& aSize ) : - m_Pos( aPos ), m_Size( aSize ) - {} + m_Pos( aPos ) + , m_Size( aSize ) + { } wxPoint Centre() { @@ -182,6 +183,7 @@ public: m_Size.x = pos.x - m_Pos.x; m_Size.y = pos.y - m_Pos.y; } + /** * Function Intersects * @return bool - true if the argument rectangle intersects this rectangle. @@ -195,15 +197,14 @@ public: */ operator wxRect() const { return wxRect( m_Pos, m_Size ); } - EDA_Rect& Inflate( wxCoord dx, wxCoord dy ); + EDA_Rect& Inflate( wxCoord dx, wxCoord dy ); /** Function Merge * Modify Position and Size of this in order to contain the given rect * mainly used to calculate bounding boxes * @param aRect = given rect to merge with this - */ - void Merge( const EDA_Rect & aRect ); - + */ + void Merge( const EDA_Rect& aRect ); }; @@ -236,7 +237,7 @@ protected: public: - int m_Flags; // flags for editing and other misc. uses + int m_Flags; // flags for editing and other misc. uses #define IS_CHANGED (1 << 0) #define IS_LINKED (1 << 1) #define IN_EDIT (1 << 2) @@ -259,11 +260,11 @@ public: EDA_BaseStruct* m_Image; /* Link to an image copy for undelete or abort command */ - unsigned long m_TimeStamp; // Time stamp used for logical links - int m_Selected; /* Used by block commands, and selective editing */ + unsigned long m_TimeStamp; // Time stamp used for logical links + int m_Selected; /* Used by block commands, and selective editing */ private: - int m_Status; + int m_Status; private: void InitVars(); @@ -284,11 +285,11 @@ public: KICAD_T Type() const { return m_StructType; } - EDA_BaseStruct* Next() const { return (EDA_BaseStruct*) Pnext; } - EDA_BaseStruct* Back() const { return (EDA_BaseStruct*) Pback; } - EDA_BaseStruct* GetParent() const { return m_Parent; } - EDA_BaseStruct* GetSon() const { return m_Son; } - DHEAD* GetList() const { return m_List; } + EDA_BaseStruct* Next() const { return (EDA_BaseStruct*) Pnext; } + EDA_BaseStruct* Back() const { return (EDA_BaseStruct*) Pback; } + EDA_BaseStruct* GetParent() const { return m_Parent; } + EDA_BaseStruct* GetSon() const { return m_Son; } + DHEAD* GetList() const { return m_List; } void SetNext( EDA_BaseStruct* aNext ) { Pnext = aNext; } void SetBack( EDA_BaseStruct* aBack ) { Pback = aBack; } @@ -320,6 +321,7 @@ public: m_Status = new_status; } + /** * Function Display_Infos * 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 } + /** * Function HitTest (overlayed) * tests if the given EDA_Rect intersect this object. @@ -355,6 +358,7 @@ public: return false; // derived classes should override this function } + /** * Function GetBoundingBox * returns the orthogonal, bounding box of this object for display purposes. @@ -365,14 +369,16 @@ public: virtual EDA_Rect GetBoundingBox() { #if defined (DEBUG) - printf("Missing GetBoundingBox()\n"); + printf( "Missing GetBoundingBox()\n" ); Show( 0, std::cout ); // tell me which classes still need GetBoundingBox support #endif + // return a zero-sized box per default. derived classes should override this EDA_Rect ret( wxPoint( 0, 0 ), wxSize( 0, 0 ) ); return ret; } + /** * Function IterateForward * 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 -typedef enum { +enum GRTextHorizJustifyType { GR_TEXT_HJUSTIFY_LEFT = -1, GR_TEXT_HJUSTIFY_CENTER = 0, GR_TEXT_HJUSTIFY_RIGHT = 1 -} GRTextHorizJustifyType; +}; -typedef enum { +enum GRTextVertJustifyType { GR_TEXT_VJUSTIFY_TOP = -1, GR_TEXT_VJUSTIFY_CENTER = 0, GR_TEXT_VJUSTIFY_BOTTOM = 1 -} GRTextVertJustifyType; +}; - -/* controle des remplissages a l'ecran (Segments textes...)*/ -#define FILAIRE 0 -#define FILLED 1 -#define SKETCH 2 +/* Options to show solid segments (segments, texts...) */ +enum GRFillMode { + FILAIRE = 0, // segments are drawn as lines + FILLED, // normal mode: segments have thickness + SKETCH // skect mode: segments have thickness, but are not filled +}; #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_Miroir; // Display Normal / mirror int m_Attributs; /* flags (visible...) */ - int m_CharType; /* normal, bold, italic ... */ - int m_HJustify, m_VJustify; /* Horiz and Vert Justifications */ - int m_ZoomLevelDrawable; /* zoom level to draw text. - * 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 */ + bool m_Italic; /* true to simulate an italic font... */ + GRTextHorizJustifyType m_HJustify; /* Horiz Justify */ + GRTextVertJustifyType m_VJustify; /* Vertical and Vert Justify */ public: EDA_TextStruct( const wxString& text = wxEmptyString ); virtual ~EDA_TextStruct(); - void CreateDrawData(); int GetLength() const { return m_Text.Length(); }; @@ -510,9 +512,19 @@ public: */ int Pitch(); - void Draw( WinEDA_DrawPanel* panel, wxDC* DC, - const wxPoint& offset, int color, - int draw_mode, int display_mode = FILAIRE, int anchor_color = -1 ); + /** Function Draw + * @param aPanel = the current DrawPanel + * @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 diff --git a/include/common.h b/include/common.h index 3644ebf85d..7cac361363 100644 --- a/include/common.h +++ b/include/common.h @@ -439,10 +439,17 @@ double round( double aNumber ); * @param aV_justify = vertical justification (bottom, center, top) * @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 */ void DrawGraphicText( WinEDA_DrawPanel* aPanel, wxDC* aDC, 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 * 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 aH_justify = horizontal justification (Left, center, right) * @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, 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 */ diff --git a/pcbnew/block.cpp b/pcbnew/block.cpp index 1ef369b2f0..4dee51bc2d 100644 --- a/pcbnew/block.cpp +++ b/pcbnew/block.cpp @@ -710,8 +710,6 @@ void WinEDA_BasePcbFrame::Block_Rotate( wxDC* DC ) STRUCT->m_Orient += 900; if( STRUCT->m_Orient >= 3600 ) STRUCT->m_Orient -= 3600; - - STRUCT->CreateDrawData(); break; case TYPE_MIRE: @@ -896,7 +894,6 @@ void WinEDA_BasePcbFrame::Block_Invert( wxDC* DC ) STRUCT->m_Miroir ^= 1; /* inverse miroir */ } STRUCT->SetLayer( ChangeSideNumLayer( STRUCT->GetLayer() ) ); - STRUCT->CreateDrawData(); break; case TYPE_MIRE: diff --git a/pcbnew/class_pcb_text.cpp b/pcbnew/class_pcb_text.cpp index d6a3a16aba..f52deab79a 100644 --- a/pcbnew/class_pcb_text.cpp +++ b/pcbnew/class_pcb_text.cpp @@ -40,7 +40,7 @@ void TEXTE_PCB::Copy( TEXTE_PCB* source ) m_Layer = source->m_Layer; m_Width = source->m_Width; m_Attributs = source->m_Attributs; - m_CharType = source->m_CharType; + m_Italic = source->m_Italic; m_HJustify = source->m_HJustify; m_VJustify = source->m_VJustify; @@ -135,9 +135,9 @@ void TEXTE_PCB::Draw( WinEDA_DrawPanel* panel, wxDC* DC, if( color & ITEM_NOT_SHOW ) return; - EDA_TextStruct::Draw( panel, DC, offset, color, - DrawMode, DisplayOpt.DisplayDrawItems, - (g_AnchorColor & ITEM_NOT_SHOW) ? -1 : (g_AnchorColor & MASKCOLOR) ); + EDA_TextStruct::Draw( panel, DC, offset, (EDA_Colors) color, + DrawMode, (GRFillMode)DisplayOpt.DisplayDrawItems, + (g_AnchorColor & ITEM_NOT_SHOW) ? UNSPECIFIED_COLOR : (EDA_Colors)g_AnchorColor ); } diff --git a/pcbnew/class_track.cpp b/pcbnew/class_track.cpp index 0230bc5fa8..9e6d19697c 100644 --- a/pcbnew/class_track.cpp +++ b/pcbnew/class_track.cpp @@ -635,6 +635,49 @@ void TRACK::Draw( WinEDA_DrawPanel* panel, wxDC* DC, int draw_mode, const wxPoin m_End.x, m_End.y, 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 ); + } + } } @@ -768,12 +811,12 @@ void SEGVIA::Draw( WinEDA_DrawPanel* panel, wxDC* DC, int draw_mode, const wxPoi // Display the short netname: if( GetNet() == 0 ) return; - EQUIPOT* net = ((BOARD*)GetParent())->FindNet( GetNet() ); + EQUIPOT* net = ( (BOARD*) GetParent() )->FindNet( GetNet() ); if( net == NULL ) return; int len = net->GetShortNetname().Len(); - if ( len > 0 ) + if( len > 0 ) { // calculate a good size for the text int tsize = m_Width / len; diff --git a/pcbnew/cotation.cpp b/pcbnew/cotation.cpp index e228c54b65..09b3440d32 100644 --- a/pcbnew/cotation.cpp +++ b/pcbnew/cotation.cpp @@ -178,8 +178,6 @@ void WinEDA_CotationPropertiesFrame::OnOkClick( wxCommandEvent& event ) CurrentCotation->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 { /* Redessin du Texte */ @@ -482,5 +480,4 @@ static void Ajuste_Details_Cotation( COTATION* Cotation ) Cotation->m_Value = mesure; valeur_param( Cotation->m_Value, msg ); Cotation->SetText( msg ); - Cotation->m_Text->CreateDrawData(); } diff --git a/pcbnew/pcbtexte.cpp b/pcbnew/pcbtexte.cpp index e7e2625751..f97763c6fc 100644 --- a/pcbnew/pcbtexte.cpp +++ b/pcbnew/pcbtexte.cpp @@ -233,7 +233,6 @@ void WinEDA_TextPCBPropertiesFrame::OnOkClick( wxCommandEvent& event ) CurrentTextPCB->m_Miroir = (m_Mirror->GetSelection() == 0) ? 1 : 0; CurrentTextPCB->m_Orient = m_Orient->GetSelection() * 900; CurrentTextPCB->SetLayer( m_SelLayerBox->GetChoice() ); - CurrentTextPCB->CreateDrawData(); if( m_DC ) // Affichage nouveau texte { @@ -283,7 +282,6 @@ void WinEDA_PcbFrame::Place_Texte_Pcb( TEXTE_PCB* TextePcb, wxDC* DC ) if( TextePcb == NULL ) return; - TextePcb->CreateDrawData(); TextePcb->Draw( DrawPanel, DC, GR_OR ); DrawPanel->ManageCurseur = NULL; DrawPanel->ForceCloseManageCurseur = NULL; @@ -407,8 +405,6 @@ void WinEDA_PcbFrame::Rotate_Texte_Pcb( TEXTE_PCB* TextePcb, wxDC* DC ) if( TextePcb->m_Orient < 0 ) TextePcb->m_Orient += 3600; - TextePcb->CreateDrawData(); - /* Redessin du Texte */ TextePcb->Draw( DrawPanel, DC, drawmode ); TextePcb->Display_Infos( this );