Loading eeschema/class_BodyItem_Text.cpp +54 −8 Original line number Diff line number Diff line Loading @@ -305,15 +305,54 @@ void LIB_TEXT::Draw( WinEDA_DrawPanel* aPanel, wxDC* aDC, GRSetDrawMode( aDC, aDrawMode ); /* Calculate the text orientation, according to the component * orientation/mirror (needed when draw text in schematic) */ int orient = m_Orient; if( aTransformMatrix[0][1] ) // Rotate component 90 degrees. { if( orient == TEXT_ORIENT_HORIZ ) orient = TEXT_ORIENT_VERT; else orient = TEXT_ORIENT_HORIZ; } /* Calculate the text justification, according to the component * orientation/mirror this is a bit complicated due to cumulative * calculations: * - numerous cases (mirrored or not, rotation) * - the DrawGraphicText function recalculate also H and H justifications * according to the text orientation. * - When a component is mirrored, the text is not mirrored and * justifications are complicated to calculate * so the more easily way is to use no justifications ( Centered text ) * and use GetBoundaryBox to know the text coordinate considered as centered */ EDA_Rect bBox = GetBoundingBox(); pos1 = bBox.Centre(); // this is the coordinates of the graphic text relative to the component position // in schematic Y axis orientation /* convert y coordinate from schematic to library Y axis orientation * because we want to call TransformCoordinate to calculate real coordinates */ NEGATE( pos1.y ); pos1 = TransformCoordinate( aTransformMatrix, pos1 ) + aOffset; DrawGraphicText( aPanel, aDC, pos1, (EDA_Colors) color, m_Text, m_Orient, m_Size, m_HJustify, m_VJustify, orient, m_Size, GR_TEXT_HJUSTIFY_CENTER, GR_TEXT_VJUSTIFY_CENTER, GetPenSize( ), m_Italic, m_Bold ); /* Enable this to draw the bounding box around the text field to validate * the bounding box calculations. */ #if 0 EDA_Rect bBox = GetBoundingBox(); bBox.Inflate( 1, 1 ); GRRect( &aPanel->m_ClipBox, aDC, bBox.GetOrigin().x, bBox.GetOrigin().y, bBox.GetEnd().x, bBox.GetEnd().y, 0, LIGHTMAGENTA ); EDA_Rect grBox; bBox.SetY( -bBox.GetY() ); bBox.SetHeight( -bBox.GetHeight()); grBox.SetOrigin( TransformCoordinate( aTransformMatrix, bBox.GetOrigin() ) ); grBox.SetEnd( TransformCoordinate( aTransformMatrix, bBox.GetEnd() ) ); grBox.Move( aOffset ); GRRect( &aPanel->m_ClipBox, aDC, grBox.GetOrigin().x, grBox.GetOrigin().y, grBox.GetEnd().x, grBox.GetEnd().y, 0, LIGHTMAGENTA ); #endif } Loading @@ -331,11 +370,18 @@ void LIB_TEXT::DisplayInfo( WinEDA_DrawFrame* frame ) } /** * @return the boundary box for this, in schematic coordinates */ EDA_Rect LIB_TEXT::GetBoundingBox() { /* remenber Y coordinates in lib are bottom to top, so we must * negate the Y position befire calling GetTextBox() that works using top to bottom * Y axis orientation */ NEGATE(m_Pos.y ); EDA_Rect rect = GetTextBox(); rect.m_Pos.y *= -1; rect.m_Pos.y -= rect.GetHeight(); NEGATE(m_Pos.y ); // restore Y cooordinate for the graphic text wxPoint orig = rect.GetOrigin(); wxPoint end = rect.GetEnd(); Loading @@ -345,6 +391,6 @@ EDA_Rect LIB_TEXT::GetBoundingBox() RotatePoint( &end, center, m_Orient ); rect.SetOrigin( orig ); rect.SetEnd( end ); rect.Normalize(); return rect; } eeschema/class_sch_cmp_field.cpp +20 −25 Original line number Diff line number Diff line Loading @@ -155,10 +155,10 @@ void SCH_FIELD::Draw( WinEDA_DrawPanel* panel, wxDC* DC, LineWidth, m_Italic, m_Bold, false ); } /* Enable this to draw the bounding box around the text field to validate * the bounding box calculations. */ #if 0 // Draw boundary box: int x1 = BoundaryBox.GetX(); Loading Loading @@ -246,24 +246,21 @@ EDA_Rect SCH_FIELD::GetBoundaryBox() const EDA_Rect BoundaryBox; int hjustify, vjustify; int orient; int dx, dy, x1, y1, x2, y2; wxSize size; wxPoint pos1, pos2; SCH_COMPONENT* parentComponent = (SCH_COMPONENT*) m_Parent; orient = m_Orient; wxPoint pos = parentComponent->m_Pos; x1 = m_Pos.x - pos.x; y1 = m_Pos.y - pos.y; pos1 = m_Pos - pos; dx = LenSize( m_Text ); dy = m_Size.y; size.x = LenSize( m_Text ); size.y = m_Size.y; hjustify = m_HJustify; vjustify = m_VJustify; x2 = pos.x + ( parentComponent->m_Transform[0][0] * x1 ) + ( parentComponent->m_Transform[0][1] * y1 ); y2 = pos.y + ( parentComponent->m_Transform[1][0] * x1 ) + ( parentComponent->m_Transform[1][1] * y1 ); pos2 = pos + TransformCoordinate( parentComponent->m_Transform, pos1 ); /* Calculate the text orientation, according to the component * orientation/mirror */ Loading Loading @@ -295,42 +292,40 @@ EDA_Rect SCH_FIELD::GetBoundaryBox() const } if( orient == TEXT_ORIENT_VERT ) EXCHG( dx, dy ); EXCHG( size.x, size.y ); switch( hjustify ) { case GR_TEXT_HJUSTIFY_CENTER: x1 = x2 - (dx / 2); pos1.x = pos2.x - (size.x / 2); break; case GR_TEXT_HJUSTIFY_RIGHT: x1 = x2 - dx; pos1.x = pos2.x - size.x; break; default: x1 = x2; pos1.x = pos2.x; break; } switch( vjustify ) { case GR_TEXT_VJUSTIFY_CENTER: y1 = y2 - (dy / 2); pos1.y = pos2.y - (size.y / 2); break; case GR_TEXT_VJUSTIFY_BOTTOM: y1 = y2 - dy; pos1.y = pos2.y - size.y; break; default: y1 = y2; pos1.y = pos2.y; break; } BoundaryBox.SetX( x1 ); BoundaryBox.SetY( y1 ); BoundaryBox.SetWidth( dx ); BoundaryBox.SetHeight( dy ); BoundaryBox.SetOrigin( pos1 ); BoundaryBox.SetSize( size ); // Take thickness in account: int linewidth = ( m_Width == 0 ) ? g_DrawDefaultLineThickness : m_Width; Loading eeschema/class_text-label.cpp +1 −0 Original line number Diff line number Diff line Loading @@ -1219,5 +1219,6 @@ EDA_Rect SCH_TEXT::GetBoundingBox() rect.SetEnd(end); } rect.Normalize(); return rect; } Loading
eeschema/class_BodyItem_Text.cpp +54 −8 Original line number Diff line number Diff line Loading @@ -305,15 +305,54 @@ void LIB_TEXT::Draw( WinEDA_DrawPanel* aPanel, wxDC* aDC, GRSetDrawMode( aDC, aDrawMode ); /* Calculate the text orientation, according to the component * orientation/mirror (needed when draw text in schematic) */ int orient = m_Orient; if( aTransformMatrix[0][1] ) // Rotate component 90 degrees. { if( orient == TEXT_ORIENT_HORIZ ) orient = TEXT_ORIENT_VERT; else orient = TEXT_ORIENT_HORIZ; } /* Calculate the text justification, according to the component * orientation/mirror this is a bit complicated due to cumulative * calculations: * - numerous cases (mirrored or not, rotation) * - the DrawGraphicText function recalculate also H and H justifications * according to the text orientation. * - When a component is mirrored, the text is not mirrored and * justifications are complicated to calculate * so the more easily way is to use no justifications ( Centered text ) * and use GetBoundaryBox to know the text coordinate considered as centered */ EDA_Rect bBox = GetBoundingBox(); pos1 = bBox.Centre(); // this is the coordinates of the graphic text relative to the component position // in schematic Y axis orientation /* convert y coordinate from schematic to library Y axis orientation * because we want to call TransformCoordinate to calculate real coordinates */ NEGATE( pos1.y ); pos1 = TransformCoordinate( aTransformMatrix, pos1 ) + aOffset; DrawGraphicText( aPanel, aDC, pos1, (EDA_Colors) color, m_Text, m_Orient, m_Size, m_HJustify, m_VJustify, orient, m_Size, GR_TEXT_HJUSTIFY_CENTER, GR_TEXT_VJUSTIFY_CENTER, GetPenSize( ), m_Italic, m_Bold ); /* Enable this to draw the bounding box around the text field to validate * the bounding box calculations. */ #if 0 EDA_Rect bBox = GetBoundingBox(); bBox.Inflate( 1, 1 ); GRRect( &aPanel->m_ClipBox, aDC, bBox.GetOrigin().x, bBox.GetOrigin().y, bBox.GetEnd().x, bBox.GetEnd().y, 0, LIGHTMAGENTA ); EDA_Rect grBox; bBox.SetY( -bBox.GetY() ); bBox.SetHeight( -bBox.GetHeight()); grBox.SetOrigin( TransformCoordinate( aTransformMatrix, bBox.GetOrigin() ) ); grBox.SetEnd( TransformCoordinate( aTransformMatrix, bBox.GetEnd() ) ); grBox.Move( aOffset ); GRRect( &aPanel->m_ClipBox, aDC, grBox.GetOrigin().x, grBox.GetOrigin().y, grBox.GetEnd().x, grBox.GetEnd().y, 0, LIGHTMAGENTA ); #endif } Loading @@ -331,11 +370,18 @@ void LIB_TEXT::DisplayInfo( WinEDA_DrawFrame* frame ) } /** * @return the boundary box for this, in schematic coordinates */ EDA_Rect LIB_TEXT::GetBoundingBox() { /* remenber Y coordinates in lib are bottom to top, so we must * negate the Y position befire calling GetTextBox() that works using top to bottom * Y axis orientation */ NEGATE(m_Pos.y ); EDA_Rect rect = GetTextBox(); rect.m_Pos.y *= -1; rect.m_Pos.y -= rect.GetHeight(); NEGATE(m_Pos.y ); // restore Y cooordinate for the graphic text wxPoint orig = rect.GetOrigin(); wxPoint end = rect.GetEnd(); Loading @@ -345,6 +391,6 @@ EDA_Rect LIB_TEXT::GetBoundingBox() RotatePoint( &end, center, m_Orient ); rect.SetOrigin( orig ); rect.SetEnd( end ); rect.Normalize(); return rect; }
eeschema/class_sch_cmp_field.cpp +20 −25 Original line number Diff line number Diff line Loading @@ -155,10 +155,10 @@ void SCH_FIELD::Draw( WinEDA_DrawPanel* panel, wxDC* DC, LineWidth, m_Italic, m_Bold, false ); } /* Enable this to draw the bounding box around the text field to validate * the bounding box calculations. */ #if 0 // Draw boundary box: int x1 = BoundaryBox.GetX(); Loading Loading @@ -246,24 +246,21 @@ EDA_Rect SCH_FIELD::GetBoundaryBox() const EDA_Rect BoundaryBox; int hjustify, vjustify; int orient; int dx, dy, x1, y1, x2, y2; wxSize size; wxPoint pos1, pos2; SCH_COMPONENT* parentComponent = (SCH_COMPONENT*) m_Parent; orient = m_Orient; wxPoint pos = parentComponent->m_Pos; x1 = m_Pos.x - pos.x; y1 = m_Pos.y - pos.y; pos1 = m_Pos - pos; dx = LenSize( m_Text ); dy = m_Size.y; size.x = LenSize( m_Text ); size.y = m_Size.y; hjustify = m_HJustify; vjustify = m_VJustify; x2 = pos.x + ( parentComponent->m_Transform[0][0] * x1 ) + ( parentComponent->m_Transform[0][1] * y1 ); y2 = pos.y + ( parentComponent->m_Transform[1][0] * x1 ) + ( parentComponent->m_Transform[1][1] * y1 ); pos2 = pos + TransformCoordinate( parentComponent->m_Transform, pos1 ); /* Calculate the text orientation, according to the component * orientation/mirror */ Loading Loading @@ -295,42 +292,40 @@ EDA_Rect SCH_FIELD::GetBoundaryBox() const } if( orient == TEXT_ORIENT_VERT ) EXCHG( dx, dy ); EXCHG( size.x, size.y ); switch( hjustify ) { case GR_TEXT_HJUSTIFY_CENTER: x1 = x2 - (dx / 2); pos1.x = pos2.x - (size.x / 2); break; case GR_TEXT_HJUSTIFY_RIGHT: x1 = x2 - dx; pos1.x = pos2.x - size.x; break; default: x1 = x2; pos1.x = pos2.x; break; } switch( vjustify ) { case GR_TEXT_VJUSTIFY_CENTER: y1 = y2 - (dy / 2); pos1.y = pos2.y - (size.y / 2); break; case GR_TEXT_VJUSTIFY_BOTTOM: y1 = y2 - dy; pos1.y = pos2.y - size.y; break; default: y1 = y2; pos1.y = pos2.y; break; } BoundaryBox.SetX( x1 ); BoundaryBox.SetY( y1 ); BoundaryBox.SetWidth( dx ); BoundaryBox.SetHeight( dy ); BoundaryBox.SetOrigin( pos1 ); BoundaryBox.SetSize( size ); // Take thickness in account: int linewidth = ( m_Width == 0 ) ? g_DrawDefaultLineThickness : m_Width; Loading
eeschema/class_text-label.cpp +1 −0 Original line number Diff line number Diff line Loading @@ -1219,5 +1219,6 @@ EDA_Rect SCH_TEXT::GetBoundingBox() rect.SetEnd(end); } rect.Normalize(); return rect; }