KiCad PCB EDA Suite
EDA_TEXT Class Reference

A mix-in class (via multiple inheritance) that handles texts such as labels, parts, components, or footprints. More...

#include <eda_text.h>

Inheritance diagram for EDA_TEXT:
LIB_FIELD LIB_TEXT SCH_FIELD SCH_TEXT TEXTE_MODULE TEXTE_PCB WS_DRAW_ITEM_TEXT SCH_GLOBALLABEL SCH_HIERLABEL SCH_LABEL SCH_SHEET_PIN

Public Member Functions

 EDA_TEXT (const wxString &text=wxEmptyString)
 
 EDA_TEXT (const EDA_TEXT &aText)
 
virtual ~EDA_TEXT ()
 
virtual const wxString & GetText () const
 Return the string associated with the text object. More...
 
virtual wxString GetShownText () const
 Return the string actually shown after processing of the base text. More...
 
wxString ShortenedShownText () const
 Returns a shortened version (max 15 characters) of the shown text. More...
 
virtual void SetText (const wxString &aText)
 
void SetThickness (int aNewThickness)
 Set the pen width. More...
 
int GetThickness () const
 Return the pen width. More...
 
void SetTextAngle (double aAngle)
 
double GetTextAngle () const
 
double GetTextAngleDegrees () const
 
double GetTextAngleRadians () const
 
void SetItalic (bool isItalic)
 
bool IsItalic () const
 
void SetBold (bool aBold)
 
bool IsBold () const
 
void SetVisible (bool aVisible)
 
bool IsVisible () const
 
void SetMirrored (bool isMirrored)
 
bool IsMirrored () const
 
void SetMultilineAllowed (bool aAllow)
 
bool IsMultilineAllowed () const
 
EDA_TEXT_HJUSTIFY_T GetHorizJustify () const
 
EDA_TEXT_VJUSTIFY_T GetVertJustify () const
 
void SetHorizJustify (EDA_TEXT_HJUSTIFY_T aType)
 
void SetVertJustify (EDA_TEXT_VJUSTIFY_T aType)
 
void SetEffects (const EDA_TEXT &aSrc)
 Set the text effects from another instance. More...
 
void SwapEffects (EDA_TEXT &aTradingPartner)
 Swap the text effects of the two involved instances. More...
 
void SwapText (EDA_TEXT &aTradingPartner)
 
void CopyText (const EDA_TEXT &aSrc)
 
bool Replace (wxFindReplaceData &aSearchData)
 Helper function used in search and replace dialog. More...
 
bool IsDefaultFormatting () const
 
void SetTextSize (const wxSize &aNewSize)
 
const wxSize & GetTextSize () const
 
void SetTextWidth (int aWidth)
 
int GetTextWidth () const
 
void SetTextHeight (int aHeight)
 
int GetTextHeight () const
 
void SetTextPos (const wxPoint &aPoint)
 
const wxPointGetTextPos () const
 
void SetTextX (int aX)
 
void SetTextY (int aY)
 
void Offset (const wxPoint &aOffset)
 
void Empty ()
 
void Print (wxDC *aDC, const wxPoint &aOffset, COLOR4D aColor, EDA_DRAW_MODE_T aDisplay_mode=FILLED)
 Print this text object to the device context aDC. More...
 
void TransformTextShapeToSegmentList (std::vector< wxPoint > &aCornerBuffer) const
 Convert the text shape to a list of segment. More...
 
void TransformBoundingBoxWithClearanceToPolygon (SHAPE_POLY_SET *aCornerBuffer, int aClearanceValue) const
 Convert the text bounding box to a rectangular polygon depending on the text orientation, the bounding box is not always horizontal or vertical. More...
 
virtual bool TextHitTest (const wxPoint &aPoint, int aAccuracy=0) const
 Test if aPoint is within the bounds of this object. More...
 
virtual bool TextHitTest (const EDA_RECT &aRect, bool aContains, int aAccuracy=0) const
 Test if object bounding box is contained within or intersects aRect. More...
 
int LenSize (const wxString &aLine, int aThickness, int aMarkupFlags) const
 
EDA_RECT GetTextBox (int aLine=-1, int aThickness=-1, bool aInvertY=false, int aMarkupFlags=0) const
 Useful in multiline texts to calculate the full text or a line area (for zones filling, locate functions....) More...
 
int GetInterline () const
 Return the distance between two lines of text. More...
 
wxString GetTextStyleName ()
 
void GetPositionsOfLinesOfMultilineText (std::vector< wxPoint > &aPositions, int aLineCount) const
 Populate aPositions with the position of each line of a multiline text, according to the vertical justification and the rotation of the whole text. More...
 
virtual void Format (OUTPUTFORMATTER *aFormatter, int aNestLevel, int aControlBits) const
 Output the object to aFormatter in s-expression form. More...
 

Static Public Member Functions

static EDA_TEXT_HJUSTIFY_T MapHorizJustify (int aHorizJustify)
 
static EDA_TEXT_VJUSTIFY_T MapVertJustify (int aVertJustify)
 

Private Types

enum  TE_FLAGS {
  TE_MIRROR, TE_ITALIC, TE_BOLD, TE_MULTILINE,
  TE_VISIBLE
}
 EDA_TEXT effects bools. More...
 

Private Member Functions

void printOneLineOfText (wxDC *aDC, const wxPoint &aOffset, COLOR4D aColor, EDA_DRAW_MODE_T aFillMode, const wxString &aText, const wxPoint &aPos)
 Print each line of this EDA_TEXT. More...
 

Private Attributes

wxString m_text
 
wxString m_shown_text
 
TEXT_EFFECTS m_e
 

Detailed Description

A mix-in class (via multiple inheritance) that handles texts such as labels, parts, components, or footprints.

Because it's a mix-in class, care is used to provide function names (accessors) that to not collide with function names likely to be seen in the combined derived classes.

Definition at line 109 of file eda_text.h.

Member Enumeration Documentation

◆ TE_FLAGS

enum EDA_TEXT::TE_FLAGS
private

EDA_TEXT effects bools.

Enumerator
TE_MIRROR 
TE_ITALIC 
TE_BOLD 
TE_MULTILINE 
TE_VISIBLE 

Definition at line 388 of file eda_text.h.

388  {
389  // start at zero, sequence is irrelevant
390  TE_MIRROR,
391  TE_ITALIC,
392  TE_BOLD,
393  TE_MULTILINE,
394  TE_VISIBLE,
395  };

Constructor & Destructor Documentation

◆ EDA_TEXT() [1/2]

EDA_TEXT::EDA_TEXT ( const wxString &  text = wxEmptyString)

Definition at line 86 of file eda_text.cpp.

86  :
87  m_text( text ),
88  m_e( 1<<TE_VISIBLE )
89 {
90  int sz = Mils2iu( DEFAULT_SIZE_TEXT );
91  SetTextSize( wxSize( sz, sz ) );
92 
93  if( !text.IsEmpty() )
94  m_shown_text = UnescapeString( text );
95 }
#define DEFAULT_SIZE_TEXT
This is the "default-of-the-default" hardcoded text size; individual application define their own def...
Definition: eda_text.h:70
wxString m_shown_text
Definition: eda_text.h:367
TEXT_EFFECTS m_e
Definition: eda_text.h:385
void SetTextSize(const wxSize &aNewSize)
Definition: eda_text.h:222
wxString m_text
Definition: eda_text.h:366
wxString UnescapeString(const wxString &aSource)
Definition: string.cpp:131

References DEFAULT_SIZE_TEXT, m_shown_text, SetTextSize(), and UnescapeString().

◆ EDA_TEXT() [2/2]

EDA_TEXT::EDA_TEXT ( const EDA_TEXT aText)

Definition at line 98 of file eda_text.cpp.

98  :
99  m_text( aText.m_text ),
100  m_e( aText.m_e )
101 {
103 }
wxString m_shown_text
Definition: eda_text.h:367
TEXT_EFFECTS m_e
Definition: eda_text.h:385
wxString m_text
Definition: eda_text.h:366
wxString UnescapeString(const wxString &aSource)
Definition: string.cpp:131

References m_shown_text, m_text, and UnescapeString().

◆ ~EDA_TEXT()

EDA_TEXT::~EDA_TEXT ( )
virtual

Definition at line 106 of file eda_text.cpp.

107 {
108 }

Member Function Documentation

◆ CopyText()

void EDA_TEXT::CopyText ( const EDA_TEXT aSrc)

Definition at line 118 of file eda_text.cpp.

119 {
120  m_text = aSrc.m_text;
121  m_shown_text = aSrc.m_shown_text;
122 }
wxString m_shown_text
Definition: eda_text.h:367
wxString m_text
Definition: eda_text.h:366

References m_shown_text, and m_text.

Referenced by LIB_FIELD::Copy().

◆ Empty()

void EDA_TEXT::Empty ( )
inline

Definition at line 239 of file eda_text.h.

239 { m_text.Empty(); }
wxString m_text
Definition: eda_text.h:366

References m_text.

Referenced by SCH_LEGACY_PLUGIN_CACHE::LoadPart().

◆ Format()

void EDA_TEXT::Format ( OUTPUTFORMATTER aFormatter,
int  aNestLevel,
int  aControlBits 
) const
virtual

Output the object to aFormatter in s-expression form.

Parameters
aFormatterThe OUTPUTFORMATTER object to write to.
aNestLevelThe indentation next level.
aControlBitsThe control bit definition for object specific formatting.
Exceptions
IO_ERRORon write error.

Definition at line 480 of file eda_text.cpp.

481 {
482 #ifndef GERBVIEW // Gerbview does not use EDA_TEXT::Format
483  // and does not define FormatInternalUnits, used here
484  // however this function should exist
485 
486  aFormatter->Print( aNestLevel + 1, "(effects" );
487 
488  // Text size
489  aFormatter->Print( 0, " (font" );
490 
491  aFormatter->Print( 0, " (size %s %s)",
492  FormatInternalUnits( GetTextHeight() ).c_str(),
493  FormatInternalUnits( GetTextWidth() ).c_str() );
494 
495  if( GetThickness() )
496  aFormatter->Print( 0, " (thickness %s)", FormatInternalUnits( GetThickness() ).c_str() );
497 
498  if( IsBold() )
499  aFormatter->Print( 0, " bold" );
500 
501  if( IsItalic() )
502  aFormatter->Print( 0, " italic" );
503 
504  aFormatter->Print( 0, ")"); // (font
505 
506  if( IsMirrored() ||
509  {
510  aFormatter->Print( 0, " (justify");
511 
513  aFormatter->Print( 0, (GetHorizJustify() == GR_TEXT_HJUSTIFY_LEFT) ? " left" : " right" );
514 
516  aFormatter->Print( 0, (GetVertJustify() == GR_TEXT_VJUSTIFY_TOP) ? " top" : " bottom" );
517 
518  if( IsMirrored() )
519  aFormatter->Print( 0, " mirror" );
520  aFormatter->Print( 0, ")" ); // (justify
521  }
522 
523  if( !(aControlBits & CTL_OMIT_HIDE) && !IsVisible() )
524  aFormatter->Print( 0, " hide" );
525 
526  aFormatter->Print( 0, ")\n" ); // (justify
527 
528 #endif
529 }
bool IsBold() const
Definition: eda_text.h:167
EDA_TEXT_VJUSTIFY_T GetVertJustify() const
Definition: eda_text.h:184
bool IsMirrored() const
Definition: eda_text.h:173
bool IsVisible() const
Definition: eda_text.h:170
int GetThickness() const
Return the pen width.
Definition: eda_text.h:148
int GetTextHeight() const
Definition: eda_text.h:229
bool IsItalic() const
Definition: eda_text.h:164
EDA_TEXT_HJUSTIFY_T GetHorizJustify() const
Definition: eda_text.h:183
int GetTextWidth() const
Definition: eda_text.h:226
int PRINTF_FUNC Print(int nestLevel, const char *fmt,...)
Function Print formats and writes text to the output stream.
Definition: richio.cpp:404
#define CTL_OMIT_HIDE
Definition: eda_text.h:39
std::string FormatInternalUnits(int aValue)
Function FormatInternalUnits converts aValue from internal units to a string appropriate for writing ...
Definition: base_units.cpp:523

References CTL_OMIT_HIDE, FormatInternalUnits(), GetHorizJustify(), GetTextHeight(), GetTextWidth(), GetThickness(), GetVertJustify(), GR_TEXT_HJUSTIFY_CENTER, GR_TEXT_HJUSTIFY_LEFT, GR_TEXT_VJUSTIFY_CENTER, GR_TEXT_VJUSTIFY_TOP, IsBold(), IsItalic(), IsMirrored(), IsVisible(), and OUTPUTFORMATTER::Print().

Referenced by SCH_SEXPR_PLUGIN::saveField(), SCH_SEXPR_PLUGIN_CACHE::saveField(), SCH_SEXPR_PLUGIN::saveText(), and SCH_SEXPR_PLUGIN_CACHE::saveText().

◆ GetHorizJustify()

EDA_TEXT_HJUSTIFY_T EDA_TEXT::GetHorizJustify ( ) const
inline

Definition at line 183 of file eda_text.h.

183 { return EDA_TEXT_HJUSTIFY_T( m_e.hjustify ); };
EDA_TEXT_HJUSTIFY_T
Definition: eda_text.h:44
TEXT_EFFECTS m_e
Definition: eda_text.h:385
signed char hjustify
horizontal justification
Definition: eda_text.h:91

References TEXT_EFFECTS::hjustify, and m_e.

Referenced by CINFO3D_VISU::AddShapeWithClearanceToContainer(), DIALOG_EDIT_ONE_FIELD::DIALOG_EDIT_ONE_FIELD(), KIGFX::SCH_PAINTER::draw(), export_vrml_pcbtext(), export_vrml_text_module(), AUTOPLACER::field_horiz_placement(), TEXTE_PCB::Flip(), TEXTE_MODULE::Flip(), Format(), GetTextBox(), hash_eda(), IsDefaultFormatting(), SCH_FIELD::IsHorizJustifyFlipped(), TEXTE_MODULE::KeepUpright(), SCH_EAGLE_PLUGIN::loadFieldAttributes(), LEGACY_PLUGIN::loadPCB_TEXT(), SCH_EDIT_TOOL::Mirror(), LIB_TEXT::MirrorHorizontal(), LIB_TEXT::MirrorVertical(), LIB_TEXT::NormalizeJustification(), SCH_TEXT::Plot(), BRDITEMS_PLOTTER::PlotTextePcb(), BRDITEMS_PLOTTER::PlotTextModule(), PlotWorkSheet(), positioningChanged(), LIB_FIELD::print(), TEXTE_MODULE::Print(), printOneLineOfText(), LIB_TEXT::Rotate(), SCH_LEGACY_PLUGIN::saveField(), SCH_LEGACY_PLUGIN_CACHE::saveField(), SCH_LEGACY_PLUGIN_CACHE::saveText(), KIGFX::GAL::SetTextAttributes(), DIALOG_LIB_EDIT_TEXT::TransferDataToWindow(), DIALOG_TEXT_PROPERTIES::TransferDataToWindow(), TEXTE_PCB::TransformShapeWithClearanceToPolygonSet(), TransformTextShapeToSegmentList(), DIALOG_SCH_EDIT_ONE_FIELD::UpdateField(), and DIALOG_UPDATE_FIELDS::updateFields().

◆ GetInterline()

int EDA_TEXT::GetInterline ( ) const

Return the distance between two lines of text.

Calculates the distance (pitch) between two lines of text. This distance includes the interline distance plus room for characters like j, {, and [. It also used for single line text, to calculate the text bounding box.

Definition at line 178 of file eda_text.cpp.

179 {
181 }
static double GetInterline(double aGlyphHeight)
Compute the distance (interline) between 2 lines of text (for multiline texts).
int GetTextHeight() const
Definition: eda_text.h:229
constexpr ret_type KiROUND(fp_type v)
Round a floating point number to an integer using "round halfway cases away from zero".
Definition: util.h:61

References KIGFX::STROKE_FONT::GetInterline(), GetTextHeight(), and KiROUND().

Referenced by GetPositionsOfLinesOfMultilineText(), and GetTextBox().

◆ GetPositionsOfLinesOfMultilineText()

void EDA_TEXT::GetPositionsOfLinesOfMultilineText ( std::vector< wxPoint > &  aPositions,
int  aLineCount 
) const

Populate aPositions with the position of each line of a multiline text, according to the vertical justification and the rotation of the whole text.

Parameters
aPositionsis the list to populate by the wxPoint positions
aLineCountis the number of lines (not recalculated here for efficiency reasons

Definition at line 384 of file eda_text.cpp.

386 {
387  wxPoint pos = GetTextPos(); // Position of first line of the
388  // multiline text according to
389  // the center of the multiline text block
390 
391  wxPoint offset; // Offset to next line.
392 
393  offset.y = GetInterline();
394 
395  if( aLineCount > 1 )
396  {
397  switch( GetVertJustify() )
398  {
400  break;
401 
403  pos.y -= ( aLineCount - 1 ) * offset.y / 2;
404  break;
405 
407  pos.y -= ( aLineCount - 1 ) * offset.y;
408  break;
409  }
410  }
411 
412  // Rotate the position of the first line
413  // around the center of the multiline text block
414  RotatePoint( &pos, GetTextPos(), GetTextAngle() );
415 
416  // Rotate the offset lines to increase happened in the right direction
417  RotatePoint( &offset, GetTextAngle() );
418 
419  for( int ii = 0; ii < aLineCount; ii++ )
420  {
421  aPositions.push_back( pos );
422  pos += offset;
423  }
424 }
int GetInterline() const
Return the distance between two lines of text.
Definition: eda_text.cpp:178
EDA_TEXT_VJUSTIFY_T GetVertJustify() const
Definition: eda_text.h:184
double GetTextAngle() const
Definition: eda_text.h:158
void RotatePoint(int *pX, int *pY, double angle)
Definition: trigo.cpp:208
const wxPoint & GetTextPos() const
Definition: eda_text.h:232

References GetInterline(), GetTextAngle(), GetTextPos(), GetVertJustify(), GR_TEXT_VJUSTIFY_BOTTOM, GR_TEXT_VJUSTIFY_CENTER, GR_TEXT_VJUSTIFY_TOP, RotatePoint(), and wxPoint::y.

Referenced by CINFO3D_VISU::AddShapeWithClearanceToContainer(), export_vrml_pcbtext(), SCH_TEXT::Plot(), BRDITEMS_PLOTTER::PlotTextePcb(), Print(), TEXTE_PCB::TransformShapeWithClearanceToPolygonSet(), and TransformTextShapeToSegmentList().

◆ GetShownText()

◆ GetText()

virtual const wxString& EDA_TEXT::GetText ( ) const
inlinevirtual

Return the string associated with the text object.

Returns
a const wxString reference containing the string of the item.

Definition at line 123 of file eda_text.h.

123 { return m_text; }
wxString m_text
Definition: eda_text.h:366

References m_text.

Referenced by NETLIST_EXPORTER_GENERIC::addComponentFields(), SCH_EAGLE_PLUGIN::addImplicitConnections(), SIM_PLOT_FRAME::AddTuner(), SCH_EDITOR_CONTROL::BackAnnotateFootprints(), LIB_TEXT::Clone(), LIB_TEXT::compare(), LIB_FIELD::compare(), SCH_REFERENCE::CompareValue(), SCH_SHEET::ComponentCount(), SCH_EDIT_FRAME::ConvertTextType(), CreateComponentsSection(), SCH_GLOBALLABEL::CreateGraphicShape(), SCH_EDIT_FRAME::CreateNewText(), SCH_EDIT_FRAME::CreateSheetPin(), DIALOG_EDIT_ONE_FIELD::DIALOG_EDIT_ONE_FIELD(), KIGFX::SCH_PAINTER::draw(), SCH_EDIT_TOOL::Duplicate(), LIB_PART::Flatten(), PCB_IO::format(), FormatProbeItem(), LIB_FIELD::GetFullText(), SCH_FIELD::GetFullyQualifiedText(), TEXTE_MODULE::GetLength(), getMatchingTextItem(), SCH_TEXT::GetNetListItem(), SCH_COMPONENT::GetRef(), LIB_PART::GetSearchText(), TEXTE_MODULE::GetShownText(), NETLIST_EXPORTER_PSPICE::GetSpiceField(), NETLIST_EXPORTER_PSPICE::GetSpiceFieldDefVal(), DIMENSION::GetText(), BACK_ANNOTATE::getTextFromField(), TEXT_MOD_GRID_TABLE::GetValue(), hash_eda(), LIB_FIELD::HitTest(), SCH_TEXT::IncrementLabel(), GENERAL_COLLECTOR::Inspect(), SCH_SCREEN::IsTerminalPoint(), SCH_FIELD::IsVoid(), LEGACY_PLUGIN::loadPCB_TEXT(), SCH_EAGLE_PLUGIN::loadSchematic(), SCH_EAGLE_PLUGIN::loadSegments(), NETLIST_EXPORTER_GENERIC::makeComponents(), SCH_SHEET_PIN::Matches(), SCH_TEXT::Matches(), SCH_FIELD::operator<(), SCH_TEXT::operator<(), LIB_FIELD::operator=(), SCH_COMPONENT::operator==(), PCB_PARSER::parseDIMENSION(), SCH_EDITOR_CONTROL::Paste(), pasteModuleItemsToModEdit(), DRAWING_TOOL::PlaceText(), LIB_TEXT::Plot(), LIB_FIELD::Plot(), BRDITEMS_PLOTTER::PlotAllTextsModule(), DIALOG_RESCUE_EACH::PopulateInstanceList(), LIB_FIELD::print(), TEXTE_MODULE::Print(), NETLIST_EXPORTER_PSPICE::ProcessNetlist(), processTextItem(), SCH_LEGACY_PLUGIN::saveComponent(), SCH_SEXPR_PLUGIN::saveField(), SCH_LEGACY_PLUGIN::saveField(), SCH_SEXPR_PLUGIN_CACHE::saveField(), SCH_LEGACY_PLUGIN_CACHE::saveField(), SCH_LEGACY_PLUGIN::saveSheet(), SCH_SEXPR_PLUGIN::saveSymbol(), SCH_LEGACY_PLUGIN_CACHE::SaveSymbol(), SCH_SEXPR_PLUGIN::saveText(), SCH_LEGACY_PLUGIN::saveText(), SCH_SEXPR_PLUGIN_CACHE::saveText(), SCH_LEGACY_PLUGIN_CACHE::saveText(), SCH_COMPONENT::SCH_COMPONENT(), SCH_REFERENCE::SCH_REFERENCE(), SCH_SCREEN::SetComponentFootprint(), LIB_PART::SetParent(), SCH_COMPONENT::SetRef(), EE_INSPECTION_TOOL::ShowDatasheet(), TestMultiunitFootprints(), DIALOG_EDIT_COMPONENT_IN_SCHEMATIC::TransferDataFromWindow(), DIALOG_EDIT_COMPONENTS_LIBID::TransferDataFromWindow(), DIALOG_EDIT_SHEET_PIN::TransferDataToWindow(), DIALOG_LIB_EDIT_TEXT::TransferDataToWindow(), DIALOG_SCH_SHEET_PROPS::TransferDataToWindow(), DIALOG_TEXT_PROPERTIES::TransferDataToWindow(), DIALOG_LABEL_EDITOR::TransferDataToWindow(), TransformBoundingBoxWithClearanceToPolygon(), TransformTextShapeToSegmentList(), TUNER_SLIDER::TUNER_SLIDER(), DIALOG_UPDATE_FIELDS::updateFields(), SCH_COMPONENT::UpdateFields(), DIALOG_FOOTPRINT_FP_EDITOR::Validate(), DIALOG_FOOTPRINT_BOARD_EDITOR::Validate(), TEXTE_MODULE::ViewGetLOD(), NETLIST_EXPORTER_ORCADPCB2::WriteNetlist(), and NETLIST_EXPORTER_CADSTAR::WriteNetlist().

◆ GetTextAngle()

double EDA_TEXT::GetTextAngle ( ) const
inline

Definition at line 158 of file eda_text.h.

158 { return m_e.angle; }
TEXT_EFFECTS m_e
Definition: eda_text.h:385
double angle
now: 0.1 degrees; future: degrees
Definition: eda_text.h:95

References TEXT_EFFECTS::angle, and m_e.

Referenced by CINFO3D_VISU::AddShapeWithClearanceToContainer(), CreateComponentsSection(), DIALOG_EDIT_ONE_FIELD::DIALOG_EDIT_ONE_FIELD(), KIGFX::WS_PAINTER::draw(), KIGFX::SCH_PAINTER::draw(), export_vrml_pcbtext(), TEXTE_MODULE::Flip(), PCB_IO::format(), LIB_TEXT::GetBoundingBox(), TEXTE_PCB::GetBoundingBox(), SCH_FIELD::GetBoundingBox(), LIB_FIELD::GetBoundingBox(), SCH_TEXT::GetBoundingBox(), SCH_LABEL::GetBoundingBox(), TEXTE_MODULE::GetDrawRotation(), TEXTE_PCB::GetMsgPanelInfo(), GetPositionsOfLinesOfMultilineText(), GetTextAngleDegrees(), GetTextAngleRadians(), TEXT_MOD_GRID_TABLE::GetValue(), hash_eda(), LIB_TEXT::HitTest(), LIB_FIELD::HitTest(), TEXTE_MODULE::KeepUpright(), SCH_EAGLE_PLUGIN::loadFieldAttributes(), DIMENSION::Mirror(), LIB_TEXT::MirrorHorizontal(), LIB_TEXT::MirrorVertical(), LIB_TEXT::NormalizeJustification(), EAGLE_PLUGIN::orientModuleText(), PCB_PARSER::parseMODULE_unchecked(), LIB_TEXT::Plot(), LIB_FIELD::Plot(), SCH_FIELD::Plot(), SCH_TEXT::Plot(), BRDITEMS_PLOTTER::PlotTextePcb(), PlotWorkSheet(), positioningChanged(), LIB_TEXT::print(), LIB_FIELD::print(), SCH_FIELD::Print(), printOneLineOfText(), SCH_EDIT_TOOL::Rotate(), TEXTE_PCB::Rotate(), LIB_TEXT::Rotate(), TEXTE_MODULE::Rotate(), LIB_FIELD::Rotate(), DIMENSION::Rotate(), SCH_LEGACY_PLUGIN::saveField(), SCH_SEXPR_PLUGIN_CACHE::saveField(), SCH_LEGACY_PLUGIN_CACHE::saveField(), SCH_SEXPR_PLUGIN::saveText(), SCH_SEXPR_PLUGIN_CACHE::saveText(), SCH_LEGACY_PLUGIN_CACHE::saveText(), SCH_SCREEN::SetComponentFootprint(), TextHitTest(), DIALOG_LIB_EDIT_TEXT::TransferDataToWindow(), TransformBoundingBoxWithClearanceToPolygon(), TEXTE_PCB::TransformShapeWithClearanceToPolygonSet(), TransformTextShapeToSegmentList(), DIALOG_SCH_EDIT_ONE_FIELD::UpdateField(), and DIALOG_UPDATE_FIELDS::updateFields().

◆ GetTextAngleDegrees()

double EDA_TEXT::GetTextAngleDegrees ( ) const
inline

Definition at line 160 of file eda_text.h.

160 { return GetTextAngle() / 10.0; }
double GetTextAngle() const
Definition: eda_text.h:158

References GetTextAngle().

Referenced by TEXTE_MODULE::GetMsgPanelInfo(), SCH_SEXPR_PLUGIN::saveField(), and DIALOG_TEXT_PROPERTIES::TransferDataToWindow().

◆ GetTextAngleRadians()

double EDA_TEXT::GetTextAngleRadians ( ) const
inline

Definition at line 161 of file eda_text.h.

161 { return GetTextAngle() * M_PI/1800; }
double GetTextAngle() const
Definition: eda_text.h:158

References GetTextAngle().

Referenced by KIGFX::SCH_PAINTER::draw(), and KIGFX::PCB_PAINTER::draw().

◆ GetTextBox()

EDA_RECT EDA_TEXT::GetTextBox ( int  aLine = -1,
int  aThickness = -1,
bool  aInvertY = false,
int  aMarkupFlags = 0 
) const

Useful in multiline texts to calculate the full text or a line area (for zones filling, locate functions....)

Returns
the rect containing the line of text (i.e. the position and the size of one line) this rectangle is calculated for 0 orient text. If orientation is not 0 the rect must be rotated to match the physical area
Parameters
aLineThe line of text to consider. for single line text, aLine is unused If aLine == -1, the full area (considering all lines) is returned
aThicknessOverrides the current penwidth when greater than 0. This is needed when the current penwidth is 0 and a default penwidth is used.
aInvertYInvert the Y axis when calculating bounding box.
aMarkupFlagsa flagset of MARKUP_FLAG enums indicating which markup tokens should be processed

Definition at line 184 of file eda_text.cpp.

185 {
186  EDA_RECT rect;
187  wxArrayString strings;
188  wxString text = GetShownText();
189  int thickness = ( aThickness < 0 ) ? GetThickness() : aThickness;
190  int linecount = 1;
191  bool hasOverBar = false; // true if the first line of text as an overbar
192 
193  if( IsMultilineAllowed() )
194  {
195  wxStringSplit( text, strings, '\n' );
196 
197  if( strings.GetCount() ) // GetCount() == 0 for void strings
198  {
199  if( aLine >= 0 && (aLine < (int)strings.GetCount()) )
200  text = strings.Item( aLine );
201  else
202  text = strings.Item( 0 );
203 
204  linecount = strings.GetCount();
205  }
206  }
207 
208  // Search for overbar symbol. Only text is scanned,
209  // because only this line can change the bounding box
210  for( unsigned ii = 1; ii < text.size(); ii++ )
211  {
212  if( text[ii-1] == '~' && text[ii] != '~' )
213  {
214  hasOverBar = true;
215  break;
216  }
217  }
218 
219  // calculate the H and V size
220  const auto& font = basic_gal.GetStrokeFont();
221  VECTOR2D size( GetTextSize() );
222  double penWidth( thickness );
223  int dx = KiROUND( font.ComputeStringBoundaryLimits( text, size, penWidth, aMarkupFlags ).x );
224  int dy = GetInterline();
225 
226  // Creates bounding box (rectangle) for an horizontal
227  // and left and top justified text. the bounding box will be moved later
228  // according to the actual text options
229  wxSize textsize = wxSize( dx, dy );
230  wxPoint pos = GetTextPos();
231 
232  if( aInvertY )
233  pos.y = -pos.y;
234 
235  rect.SetOrigin( pos );
236 
237  // The bbox vertical size returned by GetInterline( aThickness )
238  // includes letters like j and y and ] + interval between lines.
239  // The interval below the last line is not usefull, and we can use its half value
240  // as vertical margin above the text
241  // the full interval is roughly GetTextHeight() * 0.4 - aThickness/2
242  rect.Move( wxPoint( 0, thickness/4 - KiROUND( GetTextHeight() * 0.22 ) ) );
243 
244  if( hasOverBar )
245  { // A overbar adds an extra size to the text
246  // Height from the base line text of chars like [ or {
247  double curr_height = GetTextHeight() * 1.15;
248  int extra_height = KiROUND( font.ComputeOverbarVerticalPosition( size.y, penWidth ) - curr_height );
249  extra_height += thickness / 2;
250  textsize.y += extra_height;
251  rect.Move( wxPoint( 0, -extra_height ) );
252  }
253 
254  // for multiline texts and aLine < 0, merge all rectangles
255  // ( if aLine < 0, we want the full text bounding box )
256  if( IsMultilineAllowed() && aLine < 0 )
257  {
258  for( unsigned ii = 1; ii < strings.GetCount(); ii++ )
259  {
260  text = strings.Item( ii );
261  dx = KiROUND( font.ComputeStringBoundaryLimits( text, size, penWidth, aMarkupFlags ).x );
262  textsize.x = std::max( textsize.x, dx );
263  textsize.y += dy;
264  }
265  }
266 
267  rect.SetSize( textsize );
268 
269  /* Now, calculate the rect origin, according to text justification
270  * At this point the rectangle origin is the text origin (m_Pos).
271  * This is true only for left and top text justified texts (using top to bottom Y axis
272  * orientation). and must be recalculated for others justifications
273  * also, note the V justification is relative to the first line
274  */
275  switch( GetHorizJustify() )
276  {
278  if( IsMirrored() )
279  rect.SetX( rect.GetX() - rect.GetWidth() );
280  break;
281 
283  rect.SetX( rect.GetX() - (rect.GetWidth() / 2) );
284  break;
285 
287  if( !IsMirrored() )
288  rect.SetX( rect.GetX() - rect.GetWidth() );
289  break;
290  }
291 
292  dy = GetTextHeight() + thickness;
293 
294  switch( GetVertJustify() )
295  {
297  break;
298 
300  rect.SetY( rect.GetY() - ( dy / 2) );
301  break;
302 
304  rect.SetY( rect.GetY() - dy );
305  break;
306  }
307 
308  if( linecount > 1 )
309  {
310  int yoffset;
311  linecount -= 1;
312 
313  switch( GetVertJustify() )
314  {
316  break;
317 
319  yoffset = linecount * GetInterline() / 2;
320  rect.SetY( rect.GetY() - yoffset );
321  break;
322 
324  yoffset = linecount * GetInterline();
325  rect.SetY( rect.GetY() - yoffset );
326  break;
327  }
328  }
329 
330  rect.Normalize(); // Make h and v sizes always >= 0
331 
332  return rect;
333 }
const STROKE_FONT & GetStrokeFont() const
void wxStringSplit(const wxString &aText, wxArrayString &aStrings, wxChar aSplitter)
Split aString to a string list separated at aSplitter.
Definition: common.cpp:336
int GetInterline() const
Return the distance between two lines of text.
Definition: eda_text.cpp:178
void Move(const wxPoint &aMoveVector)
Function Move moves the rectangle by the aMoveVector.
EDA_TEXT_VJUSTIFY_T GetVertJustify() const
Definition: eda_text.h:184
bool IsMirrored() const
Definition: eda_text.h:173
int GetX() const
Definition: eda_rect.h:111
int GetWidth() const
Definition: eda_rect.h:119
void SetOrigin(const wxPoint &pos)
Definition: eda_rect.h:131
int GetThickness() const
Return the pen width.
Definition: eda_text.h:148
int GetTextHeight() const
Definition: eda_text.h:229
EDA_TEXT_HJUSTIFY_T GetHorizJustify() const
Definition: eda_text.h:183
const wxSize & GetTextSize() const
Definition: eda_text.h:223
void SetX(int val)
Definition: eda_rect.h:168
bool IsMultilineAllowed() const
Definition: eda_text.h:181
void SetY(int val)
Definition: eda_rect.h:174
void Normalize()
Function Normalize ensures that the height ant width are positive.
void SetSize(const wxSize &size)
Definition: eda_rect.h:144
EDA_RECT handles the component boundary box.
Definition: eda_rect.h:44
int GetY() const
Definition: eda_rect.h:112
constexpr ret_type KiROUND(fp_type v)
Round a floating point number to an integer using "round halfway cases away from zero".
Definition: util.h:61
const wxPoint & GetTextPos() const
Definition: eda_text.h:232
BASIC_GAL basic_gal(basic_displayOptions)
virtual wxString GetShownText() const
Return the string actually shown after processing of the base text.
Definition: eda_text.h:129

References basic_gal, GetHorizJustify(), GetInterline(), GetShownText(), KIGFX::GAL::GetStrokeFont(), GetTextHeight(), GetTextPos(), GetTextSize(), GetThickness(), GetVertJustify(), EDA_RECT::GetWidth(), EDA_RECT::GetX(), EDA_RECT::GetY(), GR_TEXT_HJUSTIFY_CENTER, GR_TEXT_HJUSTIFY_LEFT, GR_TEXT_HJUSTIFY_RIGHT, GR_TEXT_VJUSTIFY_BOTTOM, GR_TEXT_VJUSTIFY_CENTER, GR_TEXT_VJUSTIFY_TOP, IsMirrored(), IsMultilineAllowed(), KiROUND(), EDA_RECT::Move(), EDA_RECT::Normalize(), EDA_RECT::SetOrigin(), EDA_RECT::SetSize(), EDA_RECT::SetX(), EDA_RECT::SetY(), wxStringSplit(), wxPoint::y, and VECTOR2< T >::y.

Referenced by TEXTE_PCB::Flip(), LIB_TEXT::GetBoundingBox(), TEXTE_PCB::GetBoundingBox(), SCH_FIELD::GetBoundingBox(), LIB_FIELD::GetBoundingBox(), TEXTE_MODULE::GetBoundingBox(), DIMENSION::GetBoundingBox(), SCH_TEXT::GetBoundingBox(), WS_DRAW_ITEM_TEXT::GetBoundingBox(), SCH_LABEL::GetBoundingBox(), LIB_TEXT::NormalizeJustification(), DRC::testCopperTextItem(), TEXTE_MODULE::TextHitTest(), TextHitTest(), TransformBoundingBoxWithClearanceToPolygon(), and TEXTE_MODULE::ViewBBox().

◆ GetTextHeight()

◆ GetTextPos()

const wxPoint& EDA_TEXT::GetTextPos ( ) const
inline

Definition at line 232 of file eda_text.h.

232 { return m_e.pos; }
TEXT_EFFECTS m_e
Definition: eda_text.h:385
wxPoint pos
Definition: eda_text.h:96

References m_e, and TEXT_EFFECTS::pos.

Referenced by CINFO3D_VISU::AddShapeWithClearanceToContainer(), LIB_TEXT::compare(), LIB_FIELD::compare(), SCH_SHEET_PIN::ConstrainOnEdge(), DIALOG_EDIT_ONE_FIELD::DIALOG_EDIT_ONE_FIELD(), SCH_LABEL::doIsConnected(), SCH_GLOBALLABEL::doIsConnected(), SCH_HIERLABEL::doIsConnected(), KIGFX::WS_PAINTER::draw(), KIGFX::SCH_PAINTER::draw(), KIGFX::PCB_PAINTER::draw(), export_vrml_pcbtext(), export_vrml_text_module(), TEXTE_PCB::Flip(), TEXTE_MODULE::Flip(), PCB_IO::format(), LIB_TEXT::GetBoundingBox(), TEXTE_PCB::GetBoundingBox(), SCH_FIELD::GetBoundingBox(), LIB_FIELD::GetBoundingBox(), TEXTE_MODULE::GetBoundingBox(), SCH_TEXT::GetBoundingBox(), SCH_LABEL::GetBoundingBox(), SCH_GLOBALLABEL::GetBoundingBox(), SCH_HIERLABEL::GetBoundingBox(), SCH_TEXT::GetConnectionPoints(), SCH_SHEET_PIN::GetEndPoints(), SCH_TEXT::GetEndPoints(), SCH_FIELD::GetLibPosition(), SCH_TEXT::GetNetListItem(), TEXTE_PCB::GetPosition(), TEXTE_MODULE::GetPosition(), LIB_TEXT::GetPosition(), DIMENSION::GetPosition(), LIB_FIELD::GetPosition(), SCH_FIELD::GetPosition(), WS_DRAW_ITEM_TEXT::GetPosition(), SCH_TEXT::GetPosition(), GetPositionsOfLinesOfMultilineText(), WS_DRAW_ITEM_TEXT::GetSelectMenuText(), GetTextBox(), LIB_TEXT::HitTest(), LIB_FIELD::HitTest(), TEXTE_MODULE::Mirror(), DIMENSION::Mirror(), LIB_TEXT::MirrorHorizontal(), LIB_FIELD::MirrorHorizontal(), LIB_TEXT::MirrorVertical(), LIB_FIELD::MirrorVertical(), SCH_SHEET_PIN::MirrorX(), SCH_TEXT::MirrorX(), SCH_SHEET_PIN::MirrorY(), SCH_TEXT::MirrorY(), LIB_TEXT::NormalizeJustification(), PCB_PARSER::parseDIMENSION(), DRAWING_TOOL::PlaceText(), SCH_TEXT::Plot(), BRDITEMS_PLOTTER::PlotTextePcb(), BRDITEMS_PLOTTER::PlotTextModule(), PlotWorkSheet(), LIB_FIELD::print(), TEXTE_MODULE::Print(), Print(), SCH_GLOBALLABEL::Print(), SCH_HIERLABEL::Print(), TEXTE_PCB::Rotate(), LIB_TEXT::Rotate(), TEXTE_MODULE::Rotate(), SCH_FIELD::Rotate(), SCH_SHEET_PIN::Rotate(), LIB_FIELD::Rotate(), DIMENSION::Rotate(), SCH_TEXT::Rotate(), SCH_LEGACY_PLUGIN_CACHE::saveField(), SCH_LEGACY_PLUGIN_CACHE::saveText(), SCH_SCREEN::SetComponentFootprint(), TEXTE_MODULE::SetDrawCoord(), TEXTE_MODULE::SetLocalCoord(), SCH_COMPONENT::SetRef(), TEXTE_MODULE::TextHitTest(), TextHitTest(), DIALOG_TEXT_PROPERTIES::TransferDataToWindow(), TransformBoundingBoxWithClearanceToPolygon(), TEXTE_PCB::TransformShapeWithClearanceToPolygonSet(), TransformTextShapeToSegmentList(), SCH_TEXT::UpdateDanglingState(), DIALOG_SCH_EDIT_ONE_FIELD::UpdateField(), DIALOG_UPDATE_FIELDS::updateFields(), and TEXTE_MODULE::ViewBBox().

◆ GetTextSize()

const wxSize& EDA_TEXT::GetTextSize ( ) const
inline

Definition at line 223 of file eda_text.h.

223 { return m_e.size; };
TEXT_EFFECTS m_e
Definition: eda_text.h:385
wxSize size
Definition: eda_text.h:93

References m_e, and TEXT_EFFECTS::size.

Referenced by CINFO3D_VISU::AddShapeWithClearanceToContainer(), SCH_EDIT_FRAME::ConvertTextType(), SCH_GLOBALLABEL::CreateGraphicShape(), MWAVE::CreateMicrowaveInductor(), SCH_EDIT_FRAME::CreateSheetPin(), KIGFX::SCH_PAINTER::draw(), export_vrml_pcbtext(), export_vrml_text_module(), SCH_FIELD::GetBoundingBox(), SCH_TEXT::GetBoundingBox(), LIB_TEXT::GetPenSize(), LIB_FIELD::GetPenSize(), SCH_FIELD::GetPenSize(), SCH_TEXT::GetPenSize(), SCH_TEXT::GetSchematicTextOffset(), SCH_GLOBALLABEL::GetSchematicTextOffset(), SCH_HIERLABEL::GetSchematicTextOffset(), GetTextBox(), LenSize(), SCH_EAGLE_PLUGIN::loadFieldAttributes(), EAGLE_PLUGIN::orientModuleText(), LIB_TEXT::Plot(), LIB_FIELD::Plot(), SCH_FIELD::Plot(), SCH_TEXT::Plot(), BRDITEMS_PLOTTER::PlotTextePcb(), BRDITEMS_PLOTTER::PlotTextModule(), PlotWorkSheet(), LIB_TEXT::print(), LIB_FIELD::print(), SCH_FIELD::Print(), TEXTE_MODULE::Print(), SCH_TEXT::Print(), SCH_GLOBALLABEL::Print(), SCH_HIERLABEL::Print(), printOneLineOfText(), SCH_LEGACY_PLUGIN::saveSheet(), SCH_SCREEN::SetComponentFootprint(), KIGFX::GAL::SetTextAttributes(), DIALOG_TEXT_PROPERTIES::TransferDataFromWindow(), DIALOG_TEXT_PROPERTIES::TransferDataToWindow(), TEXTE_PCB::TransformShapeWithClearanceToPolygonSet(), TransformTextShapeToSegmentList(), and DIALOG_UPDATE_FIELDS::updateFields().

◆ GetTextStyleName()

wxString EDA_TEXT::GetTextStyleName ( )
Returns
a wxString with the style name( Normal, Italic, Bold, Bold+Italic)

Definition at line 445 of file eda_text.cpp.

446 {
447  int style = 0;
448 
449  if( IsItalic() )
450  style = 1;
451 
452  if( IsBold() )
453  style += 2;
454 
455  wxString stylemsg[4] = {
456  _("Normal"),
457  _("Italic"),
458  _("Bold"),
459  _("Bold+Italic")
460  };
461 
462  return stylemsg[style];
463 }
bool IsBold() const
Definition: eda_text.h:167
bool IsItalic() const
Definition: eda_text.h:164
#define _(s)
Definition: 3d_actions.cpp:33

References _, IsBold(), and IsItalic().

Referenced by LIB_FIELD::GetMsgPanelInfo().

◆ GetTextWidth()

◆ GetThickness()

int EDA_TEXT::GetThickness ( ) const
inline

Return the pen width.

Definition at line 148 of file eda_text.h.

148 { return m_e.penwidth; };
TEXT_EFFECTS m_e
Definition: eda_text.h:385
int penwidth
Definition: eda_text.h:94

References m_e, and TEXT_EFFECTS::penwidth.

Referenced by CINFO3D_VISU::AddShapeWithClearanceToContainer(), DIMENSION::AdjustDimensionDetails(), SCH_EDIT_FRAME::ConvertTextType(), SCH_GLOBALLABEL::CreateGraphicShape(), KIGFX::WS_PAINTER::draw(), KIGFX::PCB_PAINTER::draw(), export_vrml_pcbtext(), export_vrml_text_module(), Format(), SCH_FIELD::GetBoundingBox(), SCH_TEXT::GetBoundingBox(), SCH_LABEL::GetBoundingBox(), SCH_GLOBALLABEL::GetBoundingBox(), SCH_HIERLABEL::GetBoundingBox(), LIB_TEXT::GetMsgPanelInfo(), TEXTE_PCB::GetMsgPanelInfo(), TEXTE_MODULE::GetMsgPanelInfo(), LIB_TEXT::GetPenSize(), LIB_FIELD::GetPenSize(), SCH_FIELD::GetPenSize(), SCH_TEXT::GetPenSize(), WS_DRAW_ITEM_TEXT::GetPenWidth(), SCH_GLOBALLABEL::GetSchematicTextOffset(), SCH_HIERLABEL::GetSchematicTextOffset(), GetTextBox(), KIGFX::SCH_PAINTER::getTextThickness(), TEXT_MOD_GRID_TABLE::GetValue(), LIB_TEXT::GetWidth(), LIB_FIELD::GetWidth(), IsDefaultFormatting(), SCH_TEXT::Plot(), BRDITEMS_PLOTTER::PlotTextePcb(), BRDITEMS_PLOTTER::PlotTextModule(), SCH_FIELD::Print(), TEXTE_MODULE::Print(), SCH_TEXT::Print(), SCH_GLOBALLABEL::Print(), SCH_HIERLABEL::Print(), printOneLineOfText(), SCH_LEGACY_PLUGIN::saveText(), PNS_KICAD_IFACE_BASE::syncTextItem(), DRC::testCopperTextItem(), DIALOG_TEXT_PROPERTIES::TransferDataFromWindow(), DIALOG_TEXT_PROPERTIES::TransferDataToWindow(), TEXTE_PCB::TransformShapeWithClearanceToPolygonSet(), and TransformTextShapeToSegmentList().

◆ GetVertJustify()

◆ IsBold()

◆ IsDefaultFormatting()

bool EDA_TEXT::IsDefaultFormatting ( ) const

Definition at line 466 of file eda_text.cpp.

467 {
468  return ( IsVisible()
469  && !IsMirrored()
472  && GetThickness() == 0
473  && !IsItalic()
474  && !IsBold()
475  && !IsMultilineAllowed()
476  );
477 }
bool IsBold() const
Definition: eda_text.h:167
EDA_TEXT_VJUSTIFY_T GetVertJustify() const
Definition: eda_text.h:184
bool IsMirrored() const
Definition: eda_text.h:173
bool IsVisible() const
Definition: eda_text.h:170
int GetThickness() const
Return the pen width.
Definition: eda_text.h:148
bool IsItalic() const
Definition: eda_text.h:164
EDA_TEXT_HJUSTIFY_T GetHorizJustify() const
Definition: eda_text.h:183
bool IsMultilineAllowed() const
Definition: eda_text.h:181

References GetHorizJustify(), GetThickness(), GetVertJustify(), GR_TEXT_HJUSTIFY_CENTER, GR_TEXT_VJUSTIFY_CENTER, IsBold(), IsItalic(), IsMirrored(), IsMultilineAllowed(), and IsVisible().

Referenced by SCH_SEXPR_PLUGIN::saveField(), SCH_SEXPR_PLUGIN_CACHE::saveField(), and SCH_SEXPR_PLUGIN::saveText().

◆ IsItalic()

◆ IsMirrored()

◆ IsMultilineAllowed()

◆ IsVisible()

◆ LenSize()

int EDA_TEXT::LenSize ( const wxString &  aLine,
int  aThickness,
int  aMarkupFlags 
) const
Returns
the text length in internal units
Parameters
aLine: the line of text to consider. For single line text, this parameter is always m_Text
aThickness: the stroke width of the text
aMarkupFlagsa flag set of MARKUP_FLAG enums indicating which markup tokens should be processed

Definition at line 150 of file eda_text.cpp.

151 {
154  basic_gal.SetLineWidth( (float) aThickness );
156 
157  VECTOR2D tsize = basic_gal.GetTextLineSize( aLine, aMarkupFlags );
158 
159  return KiROUND( tsize.x );
160 }
void SetFontItalic(const bool aItalic)
Set italic property of current font.
bool IsBold() const
Definition: eda_text.h:167
virtual void SetLineWidth(float aLineWidth)
Set the line width.
bool IsItalic() const
Definition: eda_text.h:164
void SetFontBold(const bool aBold)
Set bold property of current font.
VECTOR2< double > VECTOR2D
Definition: vector2d.h:593
const wxSize & GetTextSize() const
Definition: eda_text.h:223
constexpr ret_type KiROUND(fp_type v)
Round a floating point number to an integer using "round halfway cases away from zero".
Definition: util.h:61
void SetGlyphSize(const VECTOR2D aGlyphSize)
Set the font glyph size.
BASIC_GAL basic_gal(basic_displayOptions)
VECTOR2D GetTextLineSize(const UTF8 &aText, int aMarkupFlags=0) const
Compute the X and Y size of a given text.

References basic_gal, KIGFX::GAL::GetTextLineSize(), GetTextSize(), IsBold(), IsItalic(), KiROUND(), KIGFX::GAL::SetFontBold(), KIGFX::GAL::SetFontItalic(), KIGFX::GAL::SetGlyphSize(), KIGFX::GAL::SetLineWidth(), and VECTOR2< T >::x.

Referenced by SCH_GLOBALLABEL::CreateGraphicShape(), SCH_GLOBALLABEL::GetBoundingBox(), and SCH_HIERLABEL::GetBoundingBox().

◆ MapHorizJustify()

EDA_TEXT_HJUSTIFY_T EDA_TEXT::MapHorizJustify ( int  aHorizJustify)
static

Definition at line 58 of file eda_text.cpp.

59 {
60  wxASSERT( aHorizJustify >= GR_TEXT_HJUSTIFY_LEFT && aHorizJustify <= GR_TEXT_HJUSTIFY_RIGHT );
61 
62  if( aHorizJustify > GR_TEXT_HJUSTIFY_RIGHT )
64 
65  if( aHorizJustify < GR_TEXT_HJUSTIFY_LEFT )
66  return GR_TEXT_HJUSTIFY_LEFT;
67 
68  return (EDA_TEXT_HJUSTIFY_T) aHorizJustify;
69 }
EDA_TEXT_HJUSTIFY_T
Definition: eda_text.h:44

References GR_TEXT_HJUSTIFY_LEFT, and GR_TEXT_HJUSTIFY_RIGHT.

Referenced by DIALOG_GLOBAL_EDIT_TEXT_AND_GRAPHICS::processItem(), DIALOG_SCH_EDIT_ONE_FIELD::UpdateField(), and DIALOG_EDIT_ONE_FIELD::updateText().

◆ MapVertJustify()

EDA_TEXT_VJUSTIFY_T EDA_TEXT::MapVertJustify ( int  aVertJustify)
static

Definition at line 72 of file eda_text.cpp.

73 {
74  wxASSERT( aVertJustify >= GR_TEXT_VJUSTIFY_TOP && aVertJustify <= GR_TEXT_VJUSTIFY_BOTTOM );
75 
76  if( aVertJustify > GR_TEXT_VJUSTIFY_BOTTOM )
78 
79  if( aVertJustify < GR_TEXT_VJUSTIFY_TOP )
80  return GR_TEXT_VJUSTIFY_TOP;
81 
82  return (EDA_TEXT_VJUSTIFY_T) aVertJustify;
83 }
EDA_TEXT_VJUSTIFY_T
Definition: eda_text.h:51

References GR_TEXT_VJUSTIFY_BOTTOM, and GR_TEXT_VJUSTIFY_TOP.

Referenced by DIALOG_GLOBAL_EDIT_TEXT_AND_GRAPHICS::processItem(), DIALOG_SCH_EDIT_ONE_FIELD::UpdateField(), and DIALOG_EDIT_ONE_FIELD::updateText().

◆ Offset()

◆ Print()

void EDA_TEXT::Print ( wxDC *  aDC,
const wxPoint aOffset,
COLOR4D  aColor,
EDA_DRAW_MODE_T  aDisplay_mode = FILLED 
)

Print this text object to the device context aDC.

Parameters
aDC= the current Device Context
aOffset= draw offset (usually (0,0))
aColor= text color
aDisplay_mode= FILLED or SKETCH

Definition at line 361 of file eda_text.cpp.

362 {
363  if( IsMultilineAllowed() )
364  {
365  std::vector<wxPoint> positions;
366  wxArrayString strings;
367  wxStringSplit( GetShownText(), strings, '\n' );
368 
369  positions.reserve( strings.Count() );
370 
371  GetPositionsOfLinesOfMultilineText( positions, strings.Count() );
372 
373  for( unsigned ii = 0; ii < strings.Count(); ii++ )
374  {
375  wxString& txt = strings.Item( ii );
376  printOneLineOfText( aDC, aOffset, aColor, aFillMode, txt, positions[ii] );
377  }
378  }
379  else
380  printOneLineOfText( aDC, aOffset, aColor, aFillMode, GetShownText(), GetTextPos() );
381 }
void wxStringSplit(const wxString &aText, wxArrayString &aStrings, wxChar aSplitter)
Split aString to a string list separated at aSplitter.
Definition: common.cpp:336
void printOneLineOfText(wxDC *aDC, const wxPoint &aOffset, COLOR4D aColor, EDA_DRAW_MODE_T aFillMode, const wxString &aText, const wxPoint &aPos)
Print each line of this EDA_TEXT.
Definition: eda_text.cpp:426
bool IsMultilineAllowed() const
Definition: eda_text.h:181
const wxPoint & GetTextPos() const
Definition: eda_text.h:232
void GetPositionsOfLinesOfMultilineText(std::vector< wxPoint > &aPositions, int aLineCount) const
Populate aPositions with the position of each line of a multiline text, according to the vertical jus...
Definition: eda_text.cpp:384
virtual wxString GetShownText() const
Return the string actually shown after processing of the base text.
Definition: eda_text.h:129

References GetPositionsOfLinesOfMultilineText(), GetShownText(), GetTextPos(), IsMultilineAllowed(), printOneLineOfText(), and wxStringSplit().

Referenced by TEXTE_PCB::Print(), SCH_TEXT::Print(), SCH_GLOBALLABEL::Print(), SCH_HIERLABEL::Print(), and WS_DRAW_ITEM_TEXT::PrintWsItem().

◆ printOneLineOfText()

void EDA_TEXT::printOneLineOfText ( wxDC *  aDC,
const wxPoint aOffset,
COLOR4D  aColor,
EDA_DRAW_MODE_T  aFillMode,
const wxString &  aText,
const wxPoint aPos 
)
private

Print each line of this EDA_TEXT.

Parameters
aDC= the current Device Context
aOffset= draw offset (usually (0,0))
aColor= text color
aFillMode= FILLED or SKETCH
aText= the single line of text to draw.
aPos= the position of this line ).

Definition at line 426 of file eda_text.cpp.

429 {
430  int width = GetThickness();
431 
432  if( aFillMode == SKETCH )
433  width = -width;
434 
435  wxSize size = GetTextSize();
436 
437  if( IsMirrored() )
438  size.x = -size.x;
439 
440  GRText( aDC, aOffset + aPos, aColor, aText, GetTextAngle(), size, GetHorizJustify(),
441  GetVertJustify(), width, IsItalic(), IsBold() );
442 }
bool IsBold() const
Definition: eda_text.h:167
EDA_TEXT_VJUSTIFY_T GetVertJustify() const
Definition: eda_text.h:184
bool IsMirrored() const
Definition: eda_text.h:173
double GetTextAngle() const
Definition: eda_text.h:158
int GetThickness() const
Return the pen width.
Definition: eda_text.h:148
bool IsItalic() const
Definition: eda_text.h:164
EDA_TEXT_HJUSTIFY_T GetHorizJustify() const
Definition: eda_text.h:183
const wxSize & GetTextSize() const
Definition: eda_text.h:223
void GRText(wxDC *aDC, const wxPoint &aPos, COLOR4D aColor, const wxString &aText, double aOrient, const wxSize &aSize, enum EDA_TEXT_HJUSTIFY_T aH_justify, enum EDA_TEXT_VJUSTIFY_T aV_justify, int aWidth, bool aItalic, bool aBold, void(*aCallback)(int x0, int y0, int xf, int yf, void *aData), void *aCallbackData, PLOTTER *aPlotter)
Function GRText Draw a graphic text (like module texts)
Definition: gr_text.cpp:143

References GetHorizJustify(), GetTextAngle(), GetTextSize(), GetThickness(), GetVertJustify(), GRText(), IsBold(), IsItalic(), IsMirrored(), and SKETCH.

Referenced by Print().

◆ Replace()

bool EDA_TEXT::Replace ( wxFindReplaceData &  aSearchData)

Helper function used in search and replace dialog.

Perform a text replace using the find and replace criteria in aSearchData.

Parameters
aSearchDataA reference to a wxFindReplaceData object containing the search and replace criteria.
Returns
True if the text item was modified, otherwise false.

Definition at line 144 of file eda_text.cpp.

145 {
146  return EDA_ITEM::Replace( aSearchData, m_text );
147 }
static bool Replace(wxFindReplaceData &aSearchData, wxString &aText)
Helper function used in search and replace dialog Function Replace performs a text replace on aText u...
wxString m_text
Definition: eda_text.h:366

References m_text, and EDA_ITEM::Replace().

Referenced by SCH_FIELD::Replace(), SCH_SHEET_PIN::Replace(), and SCH_TEXT::Replace().

◆ SetBold()

◆ SetEffects()

void EDA_TEXT::SetEffects ( const EDA_TEXT aSrc)

Set the text effects from another instance.

TEXT_EFFECTS is not exposed in the public API, but includes everything except the actual text string itself.

Definition at line 125 of file eda_text.cpp.

126 {
127  m_e = aSrc.m_e;
128 }
TEXT_EFFECTS m_e
Definition: eda_text.h:385

References m_e.

Referenced by LIB_TEXT::Clone(), LIB_FIELD::Copy(), SCH_FIELD::ImportValues(), LIB_FIELD::operator=(), and TEXTE_MODULE::SetEffects().

◆ SetHorizJustify()

◆ SetItalic()

◆ SetMirrored()

◆ SetMultilineAllowed()

void EDA_TEXT::SetMultilineAllowed ( bool  aAllow)
inline
Parameters
aAllowtrue if ok to use multiline option, false if ok to use only single line text. (Single line is faster in calculations than multiline.)

Definition at line 180 of file eda_text.h.

180 { m_e.Bit( TE_MULTILINE, aAllow ); }
TEXT_EFFECTS m_e
Definition: eda_text.h:385
void Bit(int aBit, bool aValue)
Definition: eda_text.h:98

References TEXT_EFFECTS::Bit(), m_e, and TE_MULTILINE.

Referenced by SCH_GLOBALLABEL::SCH_GLOBALLABEL(), SCH_HIERLABEL::SCH_HIERLABEL(), SCH_LABEL::SCH_LABEL(), SCH_TEXT::SCH_TEXT(), WS_DATA_ITEM_TEXT::SyncDrawItems(), and TEXTE_PCB::TEXTE_PCB().

◆ SetText()

void EDA_TEXT::SetText ( const wxString &  aText)
virtual

Definition at line 111 of file eda_text.cpp.

112 {
113  m_text = aText;
114  m_shown_text = UnescapeString( aText );
115 }
wxString m_shown_text
Definition: eda_text.h:367
wxString m_text
Definition: eda_text.h:366
wxString UnescapeString(const wxString &aSource)
Definition: string.cpp:131

References m_shown_text, m_text, and UnescapeString().

Referenced by SCH_EAGLE_PLUGIN::addImplicitConnections(), GRAPHICS_IMPORTER_PCBNEW::AddText(), PCAD2KICAD::PCB_TEXT::AddToBoard(), PCAD2KICAD::PCB_MODULE::AddToBoard(), BACK_ANNOTATE::applyChangelist(), FIELDS_EDITOR_GRID_DATA_MODEL::ApplyData(), SCH_EDITOR_CONTROL::BackAnnotateFootprints(), LIB_TEXT::Clone(), LIB_EDIT_FRAME::CreateNewPart(), dummy(), KIGFX::dummy(), SCH_EDIT_TOOL::Duplicate(), MODULE::DuplicateItem(), SCH_FIELD::GetBoundingBox(), LIB_FIELD::HitTest(), SCH_TEXT::IncrementLabel(), SCH_LEGACY_PLUGIN_CACHE::loadDocs(), SCH_LEGACY_PLUGIN_CACHE::loadField(), SCH_EAGLE_PLUGIN::loadLibrary(), LEGACY_PLUGIN::loadMODULE_TEXT(), FOOTPRINT_EDIT_FRAME::LoadModuleFromLibrary(), SCH_LEGACY_PLUGIN_CACHE::LoadPart(), LEGACY_PLUGIN::loadPCB_TEXT(), EAGLE_PLUGIN::loadPlain(), SCH_EAGLE_PLUGIN::loadSheet(), SCH_LEGACY_PLUGIN::loadSheet(), SCH_LEGACY_PLUGIN_CACHE::loadText(), TUNER_SLIDER::onSave(), LIB_FIELD::operator=(), EAGLE_PLUGIN::orientModuleText(), EAGLE_PLUGIN::packageText(), SCH_SEXPR_PARSER::parseProperty(), LIB_EDIT_TOOL::Paste(), SCH_EDITOR_CONTROL::Paste(), pasteModuleItemsToModEdit(), LIB_PART::PlotLibFields(), SCH_EDITOR_CONTROL::processCmpToFootprintLinkFile(), processTextItem(), SCH_SEXPR_PLUGIN_CACHE::saveDcmInfoAsFields(), SCH_SEXPR_PLUGIN_CACHE::SaveSymbol(), SCH_REFERENCE::SCH_REFERENCE(), SCH_SCREEN::SetComponentFootprint(), LIB_EDIT_FRAME::SetCurPart(), LIB_PART::SetName(), LIB_PART::SetParent(), SCH_COMPONENT::SetRef(), DIMENSION::SetText(), TEXT_MOD_GRID_TABLE::SetValue(), DIALOG_EDIT_SHEET_PIN::TransferDataFromWindow(), DIALOG_LIB_EDIT_TEXT::TransferDataFromWindow(), DIALOG_EDIT_COMPONENT_IN_SCHEMATIC::TransferDataFromWindow(), DIALOG_TEXT_PROPERTIES::TransferDataFromWindow(), DIALOG_LABEL_EDITOR::TransferDataFromWindow(), DIALOG_SPICE_MODEL::TransferDataFromWindow(), DIALOG_EDIT_COMPONENTS_LIBID::TransferDataFromWindow(), DIALOG_SCH_SHEET_PROPS::TransferDataToWindow(), DIALOG_LIB_EDIT_ONE_FIELD::UpdateField(), DIALOG_SCH_EDIT_ONE_FIELD::UpdateField(), DIALOG_UPDATE_FIELDS::updateFields(), and SCH_COMPONENT::UpdateFields().

◆ SetTextAngle()

◆ SetTextHeight()

void EDA_TEXT::SetTextHeight ( int  aHeight)
inline

Definition at line 228 of file eda_text.h.

228 { m_e.size.y = aHeight; }
TEXT_EFFECTS m_e
Definition: eda_text.h:385
wxSize size
Definition: eda_text.h:93

References m_e, and TEXT_EFFECTS::size.

Referenced by GRAPHICS_IMPORTER_PCBNEW::AddText(), LIB_FIELD::Init(), and TEXT_MOD_GRID_TABLE::SetValue().

◆ SetTextPos()

void EDA_TEXT::SetTextPos ( const wxPoint aPoint)
inline

◆ SetTextSize()

void EDA_TEXT::SetTextSize ( const wxSize &  aNewSize)
inline

Definition at line 222 of file eda_text.h.

222 { m_e.size = aNewSize; };
TEXT_EFFECTS m_e
Definition: eda_text.h:385
wxSize size
Definition: eda_text.h:93

References m_e, and TEXT_EFFECTS::size.

Referenced by SCH_EAGLE_PLUGIN::addImplicitConnections(), SCH_EDIT_FRAME::ConvertTextType(), PCB_EDIT_FRAME::CreateMuWaveBaseFootprint(), PCB_BASE_FRAME::CreateNewModule(), SCH_EDIT_FRAME::CreateNewText(), SCH_EDIT_FRAME::CreateSheetPin(), SCH_LINE_WIRE_BUS_TOOL::doUnfoldBus(), dummy(), KIGFX::dummy(), EDA_TEXT(), LIB_TEXT::LIB_TEXT(), SCH_LEGACY_PLUGIN_CACHE::loadField(), SCH_EAGLE_PLUGIN::loadFieldAttributes(), LEGACY_PLUGIN::loadMODULE_TEXT(), LEGACY_PLUGIN::loadPCB_TEXT(), EAGLE_PLUGIN::loadPlain(), SCH_LEGACY_PLUGIN::loadSheet(), SCH_LEGACY_PLUGIN_CACHE::loadText(), SCH_EAGLE_PLUGIN::loadTextAttributes(), DIALOG_FOOTPRINT_FP_EDITOR::OnAddField(), DIALOG_FOOTPRINT_BOARD_EDITOR::OnAddField(), EAGLE_PLUGIN::orientModuleText(), EAGLE_PLUGIN::packageText(), SCH_SEXPR_PARSER::parseEDA_TEXT(), PCB_PARSER::parseEDA_TEXT(), DRAWING_TOOL::PlaceText(), SCH_SCREEN::SetComponentFootprint(), DIMENSION::SetTextSize(), PCAD2KICAD::SetTextSizeFromStrokeFontHeight(), PCAD2KICAD::SetTextSizeFromTrueTypeFontHeight(), DIALOG_EDIT_SHEET_PIN::TransferDataFromWindow(), DIALOG_LIB_EDIT_TEXT::TransferDataFromWindow(), DIALOG_TEXT_PROPERTIES::TransferDataFromWindow(), DIALOG_LABEL_EDITOR::TransferDataFromWindow(), LIB_DRAWING_TOOLS::TwoClickPlace(), DIALOG_UPDATE_FIELDS::updateFields(), DIALOG_EDIT_ONE_FIELD::updateText(), and WS_DRAW_ITEM_TEXT::WS_DRAW_ITEM_TEXT().

◆ SetTextWidth()

void EDA_TEXT::SetTextWidth ( int  aWidth)
inline

Definition at line 225 of file eda_text.h.

225 { m_e.size.x = aWidth; }
TEXT_EFFECTS m_e
Definition: eda_text.h:385
wxSize size
Definition: eda_text.h:93

References m_e, and TEXT_EFFECTS::size.

Referenced by GRAPHICS_IMPORTER_PCBNEW::AddText(), LIB_FIELD::Init(), and TEXT_MOD_GRID_TABLE::SetValue().

◆ SetTextX()

◆ SetTextY()

◆ SetThickness()

◆ SetVertJustify()

◆ SetVisible()

◆ ShortenedShownText()

wxString EDA_TEXT::ShortenedShownText ( ) const

Returns a shortened version (max 15 characters) of the shown text.

Definition at line 163 of file eda_text.cpp.

164 {
165  wxString tmp = GetShownText();
166 
167  tmp.Replace( wxT( "\n" ), wxT( " " ) );
168  tmp.Replace( wxT( "\r" ), wxT( " " ) );
169  tmp.Replace( wxT( "\t" ), wxT( " " ) );
170 
171  if( tmp.Length() > 15 )
172  tmp = tmp.Left( 12 ) + wxT( "..." );
173 
174  return tmp;
175 }
virtual wxString GetShownText() const
Return the string actually shown after processing of the base text.
Definition: eda_text.h:129

References GetShownText().

Referenced by LIB_TEXT::GetSelectMenuText(), TEXTE_PCB::GetSelectMenuText(), LIB_FIELD::GetSelectMenuText(), SCH_SHEET_PIN::GetSelectMenuText(), TEXTE_MODULE::GetSelectMenuText(), SCH_TEXT::GetSelectMenuText(), SCH_LABEL::GetSelectMenuText(), SCH_GLOBALLABEL::GetSelectMenuText(), and SCH_HIERLABEL::GetSelectMenuText().

◆ SwapEffects()

void EDA_TEXT::SwapEffects ( EDA_TEXT aTradingPartner)

Swap the text effects of the two involved instances.

TEXT_EFFECTS is not exposed in the public API, but includes everything except the actual text string itself.

Definition at line 138 of file eda_text.cpp.

139 {
140  std::swap( m_e, aTradingPartner.m_e );
141 }
TEXT_EFFECTS m_e
Definition: eda_text.h:385

References m_e.

Referenced by SCH_FIELD::SwapData(), SCH_TEXT::SwapData(), and TEXTE_MODULE::SwapEffects().

◆ SwapText()

void EDA_TEXT::SwapText ( EDA_TEXT aTradingPartner)

Definition at line 131 of file eda_text.cpp.

132 {
133  std::swap( m_text, aTradingPartner.m_text );
134  std::swap( m_shown_text, aTradingPartner.m_shown_text );
135 }
wxString m_shown_text
Definition: eda_text.h:367
wxString m_text
Definition: eda_text.h:366

References m_shown_text, and m_text.

Referenced by SCH_FIELD::SwapData(), and SCH_TEXT::SwapData().

◆ TextHitTest() [1/2]

bool EDA_TEXT::TextHitTest ( const wxPoint aPoint,
int  aAccuracy = 0 
) const
virtual

Test if aPoint is within the bounds of this object.

Parameters
aPoint-A wxPoint to test
aAccuracy- Amount to inflate the bounding box.
Returns
bool - true if a hit, else false

Reimplemented in TEXTE_MODULE.

Definition at line 336 of file eda_text.cpp.

337 {
338  EDA_RECT rect = GetTextBox( -1 ); // Get the full text area.
339  wxPoint location = aPoint;
340 
341  rect.Inflate( aAccuracy );
342  RotatePoint( &location, GetTextPos(), -GetTextAngle() );
343 
344  return rect.Contains( location );
345 }
double GetTextAngle() const
Definition: eda_text.h:158
void RotatePoint(int *pX, int *pY, double angle)
Definition: trigo.cpp:208
bool Contains(const wxPoint &aPoint) const
Function Contains.
EDA_RECT GetTextBox(int aLine=-1, int aThickness=-1, bool aInvertY=false, int aMarkupFlags=0) const
Useful in multiline texts to calculate the full text or a line area (for zones filling,...
Definition: eda_text.cpp:184
EDA_RECT handles the component boundary box.
Definition: eda_rect.h:44
const wxPoint & GetTextPos() const
Definition: eda_text.h:232
EDA_RECT & Inflate(wxCoord dx, wxCoord dy)
Function Inflate inflates the rectangle horizontally by dx and vertically by dy.

References EDA_RECT::Contains(), GetTextAngle(), GetTextBox(), GetTextPos(), EDA_RECT::Inflate(), and RotatePoint().

Referenced by LIB_TEXT::HitTest(), TEXTE_PCB::HitTest(), LIB_FIELD::HitTest(), DIMENSION::HitTest(), and WS_DRAW_ITEM_TEXT::HitTest().

◆ TextHitTest() [2/2]

bool EDA_TEXT::TextHitTest ( const EDA_RECT aRect,
bool  aContains,
int  aAccuracy = 0 
) const
virtual

Test if object bounding box is contained within or intersects aRect.

Parameters
aRect- Rect to test against.
aContains- Test for containment instead of intersection if true.
aAccuracy- Amount to inflate the bounding box.
Returns
bool - true if a hit, else false

Reimplemented in TEXTE_MODULE.

Definition at line 348 of file eda_text.cpp.

349 {
350  EDA_RECT rect = aRect;
351 
352  rect.Inflate( aAccuracy );
353 
354  if( aContains )
355  return rect.Contains( GetTextBox( -1 ) );
356 
357  return rect.Intersects( GetTextBox( -1 ), GetTextAngle() );
358 }
double GetTextAngle() const
Definition: eda_text.h:158
bool Contains(const wxPoint &aPoint) const
Function Contains.
EDA_RECT GetTextBox(int aLine=-1, int aThickness=-1, bool aInvertY=false, int aMarkupFlags=0) const
Useful in multiline texts to calculate the full text or a line area (for zones filling,...
Definition: eda_text.cpp:184
EDA_RECT handles the component boundary box.
Definition: eda_rect.h:44
bool Intersects(const EDA_RECT &aRect) const
Function Intersects tests for a common area between rectangles.
EDA_RECT & Inflate(wxCoord dx, wxCoord dy)
Function Inflate inflates the rectangle horizontally by dx and vertically by dy.

References EDA_RECT::Contains(), GetTextAngle(), GetTextBox(), EDA_RECT::Inflate(), and EDA_RECT::Intersects().

◆ TransformBoundingBoxWithClearanceToPolygon()

void EDA_TEXT::TransformBoundingBoxWithClearanceToPolygon ( SHAPE_POLY_SET aCornerBuffer,
int  aClearanceValue 
) const

Convert the text bounding box to a rectangular polygon depending on the text orientation, the bounding box is not always horizontal or vertical.

Used in filling zones calculations Circles and arcs are approximated by segments

Parameters
aCornerBuffer= a buffer to store the polygon
aClearanceValue= the clearance around the text bounding box to the real clearance value (usually near from 1.0)

Definition at line 337 of file board_items_to_polygon_shape_transform.cpp.

339 {
340  if( GetText().Length() == 0 )
341  return;
342 
343  wxPoint corners[4]; // Buffer of polygon corners
344 
345  EDA_RECT rect = GetTextBox( -1 );
346  rect.Inflate( aClearanceValue );
347  corners[0].x = rect.GetOrigin().x;
348  corners[0].y = rect.GetOrigin().y;
349  corners[1].y = corners[0].y;
350  corners[1].x = rect.GetRight();
351  corners[2].x = corners[1].x;
352  corners[2].y = rect.GetBottom();
353  corners[3].y = corners[2].y;
354  corners[3].x = corners[0].x;
355 
356  aCornerBuffer->NewOutline();
357 
358  for( wxPoint& corner : corners )
359  {
360  // Rotate polygon
361  RotatePoint( &corner.x, &corner.y, GetTextPos().x, GetTextPos().y, GetTextAngle() );
362  aCornerBuffer->Append( corner.x, corner.y );
363  }
364 }
double GetTextAngle() const
Definition: eda_text.h:158
void RotatePoint(int *pX, int *pY, double angle)
Definition: trigo.cpp:208
int GetBottom() const
Definition: eda_rect.h:124
const wxPoint GetOrigin() const
Definition: eda_rect.h:114
EDA_RECT GetTextBox(int aLine=-1, int aThickness=-1, bool aInvertY=false, int aMarkupFlags=0) const
Useful in multiline texts to calculate the full text or a line area (for zones filling,...
Definition: eda_text.cpp:184
int GetRight() const
Definition: eda_rect.h:121
int NewOutline()
Creates a new empty polygon in the set and returns its index
EDA_RECT handles the component boundary box.
Definition: eda_rect.h:44
const wxPoint & GetTextPos() const
Definition: eda_text.h:232
virtual const wxString & GetText() const
Return the string associated with the text object.
Definition: eda_text.h:123
EDA_RECT & Inflate(wxCoord dx, wxCoord dy)
Function Inflate inflates the rectangle horizontally by dx and vertically by dy.
int Append(int x, int y, int aOutline=-1, int aHole=-1, bool aAllowDuplication=false)
Appends a vertex at the end of the given outline/hole (default: the last outline)

References SHAPE_POLY_SET::Append(), EDA_RECT::GetBottom(), EDA_RECT::GetOrigin(), EDA_RECT::GetRight(), GetText(), GetTextAngle(), GetTextBox(), GetTextPos(), EDA_RECT::Inflate(), SHAPE_POLY_SET::NewOutline(), RotatePoint(), wxPoint::x, and wxPoint::y.

Referenced by ZONE_FILLER::addKnockout().

◆ TransformTextShapeToSegmentList()

void EDA_TEXT::TransformTextShapeToSegmentList ( std::vector< wxPoint > &  aCornerBuffer) const

Convert the text shape to a list of segment.

Each segment is stored as 2 wxPoints: the starting point and the ending point there are therefore 2*n points.

Parameters
aCornerBuffer= a buffer to store the polygon

Definition at line 544 of file eda_text.cpp.

545 {
546  wxSize size = GetTextSize();
547 
548  if( IsMirrored() )
549  size.x = -size.x;
550 
551  COLOR4D color = COLOR4D::BLACK; // not actually used, but needed by GRText
552 
553  if( IsMultilineAllowed() )
554  {
555  wxArrayString strings_list;
556  wxStringSplit( GetShownText(), strings_list, wxChar('\n') );
557  std::vector<wxPoint> positions;
558  positions.reserve( strings_list.Count() );
559  GetPositionsOfLinesOfMultilineText( positions,strings_list.Count() );
560 
561  for( unsigned ii = 0; ii < strings_list.Count(); ii++ )
562  {
563  wxString txt = strings_list.Item( ii );
564  GRText( NULL, positions[ii], color, txt, GetTextAngle(), size, GetHorizJustify(),
566  &aCornerBuffer );
567  }
568  }
569  else
570  {
573  &aCornerBuffer );
574  }
575 }
void wxStringSplit(const wxString &aText, wxArrayString &aStrings, wxChar aSplitter)
Split aString to a string list separated at aSplitter.
Definition: common.cpp:336
EDA_TEXT_VJUSTIFY_T GetVertJustify() const
Definition: eda_text.h:184
bool IsMirrored() const
Definition: eda_text.h:173
int color
Definition: DXF_plotter.cpp:61
static void addTextSegmToBuffer(int x0, int y0, int xf, int yf, void *aData)
Definition: eda_text.cpp:536
double GetTextAngle() const
Definition: eda_text.h:158
int GetThickness() const
Return the pen width.
Definition: eda_text.h:148
bool IsItalic() const
Definition: eda_text.h:164
EDA_TEXT_HJUSTIFY_T GetHorizJustify() const
Definition: eda_text.h:183
#define NULL
const wxSize & GetTextSize() const
Definition: eda_text.h:223
bool IsMultilineAllowed() const
Definition: eda_text.h:181
void GRText(wxDC *aDC, const wxPoint &aPos, COLOR4D aColor, const wxString &aText, double aOrient, const wxSize &aSize, enum EDA_TEXT_HJUSTIFY_T aH_justify, enum EDA_TEXT_VJUSTIFY_T aV_justify, int aWidth, bool aItalic, bool aBold, void(*aCallback)(int x0, int y0, int xf, int yf, void *aData), void *aCallbackData, PLOTTER *aPlotter)
Function GRText Draw a graphic text (like module texts)
Definition: gr_text.cpp:143
const wxPoint & GetTextPos() const
Definition: eda_text.h:232
void GetPositionsOfLinesOfMultilineText(std::vector< wxPoint > &aPositions, int aLineCount) const
Populate aPositions with the position of each line of a multiline text, according to the vertical jus...
Definition: eda_text.cpp:384
virtual wxString GetShownText() const
Return the string actually shown after processing of the base text.
Definition: eda_text.h:129
Definition: colors.h:45
virtual const wxString & GetText() const
Return the string associated with the text object.
Definition: eda_text.h:123
COLOR4D is the color representation with 4 components: red, green, blue, alpha.
Definition: color4d.h:40

References addTextSegmToBuffer(), BLACK, color, GetHorizJustify(), GetPositionsOfLinesOfMultilineText(), GetShownText(), GetText(), GetTextAngle(), GetTextPos(), GetTextSize(), GetThickness(), GetVertJustify(), GRText(), IsItalic(), IsMirrored(), IsMultilineAllowed(), NULL, and wxStringSplit().

Referenced by PNS_KICAD_IFACE_BASE::syncTextItem(), and DRC::testCopperTextItem().

Member Data Documentation

◆ m_e

◆ m_shown_text

wxString EDA_TEXT::m_shown_text
private

Definition at line 367 of file eda_text.h.

Referenced by CopyText(), EDA_TEXT(), GetShownText(), SetText(), and SwapText().

◆ m_text

wxString EDA_TEXT::m_text
private

Definition at line 366 of file eda_text.h.

Referenced by CopyText(), EDA_TEXT(), Empty(), GetText(), Replace(), SetText(), and SwapText().


The documentation for this class was generated from the following files: