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 (int aDepth=0) const
 Return the string actually shown after processing of the base text. More...
 
wxString GetShownText (bool *processTextVars) const
 A version of GetShownText() which also indicates whether or not the text needs to be processed for text variables. More...
 
wxString ShortenedShownText () const
 Returns a shortened version (max 15 characters) of the shown text. More...
 
virtual void SetText (const wxString &aText)
 
void SetTextThickness (int aWidth)
 The TextThickness is that set by the user. More...
 
int GetTextThickness () const
 
int GetEffectiveTextPenWidth (int aDefaultWidth=0) const
 The EffectiveTextPenWidth uses the text thickness if > 1 or aDefaultWidth. More...
 
virtual 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 (RENDER_SETTINGS *aSettings, 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...
 
std::shared_ptr< SHAPE_COMPOUNDGetEffectiveTextShape () const
 
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) const
 
EDA_RECT GetTextBox (int aLine=-1, bool aInvertY=false) 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 GetLinePositions (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
}
 

Private Member Functions

void printOneLineOfText (RENDER_SETTINGS *aSettings, 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
 
bool m_shown_text_has_text_var_refs
 
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 113 of file eda_text.h.

Member Enumeration Documentation

◆ TE_FLAGS

enum EDA_TEXT::TE_FLAGS
private
Enumerator
TE_MIRROR 
TE_ITALIC 
TE_BOLD 
TE_MULTILINE 
TE_VISIBLE 

Definition at line 377 of file eda_text.h.

Constructor & Destructor Documentation

◆ EDA_TEXT() [1/2]

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

Definition at line 91 of file eda_text.cpp.

91  :
92  m_text( text ),
93  m_e( 1<<TE_VISIBLE )
94 {
95  int sz = Mils2iu( DEFAULT_SIZE_TEXT );
96  SetTextSize( wxSize( sz, sz ) );
98 
99  if( !text.IsEmpty() )
100  {
101  m_shown_text = UnescapeString( text );
102  m_shown_text_has_text_var_refs = m_shown_text.Contains( wxT( "${" ) );
103  }
104 }
#define DEFAULT_SIZE_TEXT
This is the "default-of-the-default" hardcoded text size; individual application define their own def...
Definition: eda_text.h:74
wxString m_shown_text
Definition: eda_text.h:372
TEXT_EFFECTS m_e
Definition: eda_text.h:375
bool m_shown_text_has_text_var_refs
Definition: eda_text.h:373
void SetTextSize(const wxSize &aNewSize)
Definition: eda_text.h:238
wxString m_text
Definition: eda_text.h:371
wxString UnescapeString(const wxString &aSource)
Definition: string.cpp:152

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

◆ EDA_TEXT() [2/2]

EDA_TEXT::EDA_TEXT ( const EDA_TEXT aText)

Definition at line 107 of file eda_text.cpp.

107  :
108  m_text( aText.m_text ),
109  m_e( aText.m_e )
110 {
112  m_shown_text_has_text_var_refs = m_shown_text.Contains( wxT( "${" ) );
113 }
wxString m_shown_text
Definition: eda_text.h:372
TEXT_EFFECTS m_e
Definition: eda_text.h:375
bool m_shown_text_has_text_var_refs
Definition: eda_text.h:373
wxString m_text
Definition: eda_text.h:371
wxString UnescapeString(const wxString &aSource)
Definition: string.cpp:152

References m_shown_text, m_shown_text_has_text_var_refs, m_text, and UnescapeString().

◆ ~EDA_TEXT()

EDA_TEXT::~EDA_TEXT ( )
virtual

Definition at line 116 of file eda_text.cpp.

117 {
118 }

Member Function Documentation

◆ CopyText()

void EDA_TEXT::CopyText ( const EDA_TEXT aSrc)

Definition at line 129 of file eda_text.cpp.

130 {
131  m_text = aSrc.m_text;
132  m_shown_text = aSrc.m_shown_text;
134 }
wxString m_shown_text
Definition: eda_text.h:372
bool m_shown_text_has_text_var_refs
Definition: eda_text.h:373
wxString m_text
Definition: eda_text.h:371

References m_shown_text, m_shown_text_has_text_var_refs, and m_text.

Referenced by LIB_FIELD::Copy(), and CLIPBOARD_IO::SaveSelection().

◆ Empty()

void EDA_TEXT::Empty ( )
inline

Definition at line 255 of file eda_text.h.

255 { m_text.Empty(); }
wxString m_text
Definition: eda_text.h:371

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 519 of file eda_text.cpp.

520 {
521 #ifndef GERBVIEW // Gerbview does not use EDA_TEXT::Format
522  // and does not define FormatInternalUnits, used here
523  // however this function should exist
524 
525  aFormatter->Print( aNestLevel + 1, "(effects" );
526 
527  // Text size
528  aFormatter->Print( 0, " (font" );
529 
530  aFormatter->Print( 0, " (size %s %s)",
531  FormatInternalUnits( GetTextHeight() ).c_str(),
532  FormatInternalUnits( GetTextWidth() ).c_str() );
533 
534  if( GetTextThickness() )
535  aFormatter->Print( 0, " (thickness %s)", FormatInternalUnits( GetTextThickness() ).c_str() );
536 
537  if( IsBold() )
538  aFormatter->Print( 0, " bold" );
539 
540  if( IsItalic() )
541  aFormatter->Print( 0, " italic" );
542 
543  aFormatter->Print( 0, ")"); // (font
544 
545  if( IsMirrored() ||
548  {
549  aFormatter->Print( 0, " (justify");
550 
552  aFormatter->Print( 0, (GetHorizJustify() == GR_TEXT_HJUSTIFY_LEFT) ? " left" : " right" );
553 
555  aFormatter->Print( 0, (GetVertJustify() == GR_TEXT_VJUSTIFY_TOP) ? " top" : " bottom" );
556 
557  if( IsMirrored() )
558  aFormatter->Print( 0, " mirror" );
559  aFormatter->Print( 0, ")" ); // (justify
560  }
561 
562  if( !(aControlBits & CTL_OMIT_HIDE) && !IsVisible() )
563  aFormatter->Print( 0, " hide" );
564 
565  aFormatter->Print( 0, ")\n" ); // (justify
566 
567 #endif
568 }
bool IsBold() const
Definition: eda_text.h:183
EDA_TEXT_VJUSTIFY_T GetVertJustify() const
Definition: eda_text.h:200
bool IsMirrored() const
Definition: eda_text.h:189
bool IsVisible() const
Definition: eda_text.h:186
int GetTextThickness() const
Definition: eda_text.h:159
int GetTextHeight() const
Definition: eda_text.h:245
bool IsItalic() const
Definition: eda_text.h:180
EDA_TEXT_HJUSTIFY_T GetHorizJustify() const
Definition: eda_text.h:199
int GetTextWidth() const
Definition: eda_text.h:242
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:43
std::string FormatInternalUnits(int aValue)
Function FormatInternalUnits converts aValue from internal units to a string appropriate for writing ...
Definition: base_units.cpp:560

References CTL_OMIT_HIDE, FormatInternalUnits(), GetHorizJustify(), GetTextHeight(), GetTextThickness(), GetTextWidth(), 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().

◆ GetEffectiveTextPenWidth()

int EDA_TEXT::GetEffectiveTextPenWidth ( int  aDefaultWidth = 0) const

The EffectiveTextPenWidth uses the text thickness if > 1 or aDefaultWidth.

Definition at line 157 of file eda_text.cpp.

158 {
159  int width = GetTextThickness();
160 
161  if( width <= 1 )
162  {
163  width = aDefaultWidth;
164 
165  if( IsBold() )
166  width = GetPenSizeForBold( GetTextWidth() );
167  else if( width <= 1 )
168  width = GetPenSizeForNormal( GetTextWidth() );
169  }
170 
171  // Clip pen size for small texts:
173 
174  return width;
175 }
bool IsBold() const
Definition: eda_text.h:183
int GetPenSizeForBold(int aTextSize)
Function GetPensizeForBold.
Definition: gr_text.cpp:51
int GetTextThickness() const
Definition: eda_text.h:159
int Clamp_Text_PenSize(int aPenSize, int aSize, bool aBold)
Function Clamp_Text_PenSize Don't allow text to become cluttered up in its own fatness.
Definition: gr_text.cpp:72
const wxSize & GetTextSize() const
Definition: eda_text.h:239
int GetPenSizeForNormal(int aTextSize)
Function GetPensizeForNormal.
Definition: gr_text.cpp:57
#define ALLOW_BOLD_THICKNESS
Definition: base_units.h:57
int GetTextWidth() const
Definition: eda_text.h:242

References ALLOW_BOLD_THICKNESS, Clamp_Text_PenSize(), GetPenSizeForBold(), GetPenSizeForNormal(), GetTextSize(), GetTextThickness(), GetTextWidth(), and IsBold().

Referenced by BOARD_ADAPTER::AddShapeWithClearanceToContainer(), KIGFX::WS_PAINTER::draw(), KIGFX::PCB_PAINTER::draw(), export_vrml_pcbtext(), export_vrml_text_module(), SCH_GLOBALLABEL::GetBoundingBox(), SCH_HIERLABEL::GetBoundingBox(), GetEffectiveTextShape(), LIB_TEXT::GetPenWidth(), LIB_FIELD::GetPenWidth(), SCH_FIELD::GetPenWidth(), SCH_TEXT::GetPenWidth(), GetTextBox(), KIGFX::SCH_PAINTER::getTextThickness(), LIB_TEXT::Plot(), SCH_FIELD::Plot(), SCH_TEXT::Plot(), BRDITEMS_PLOTTER::PlotFootprintTextItem(), BRDITEMS_PLOTTER::PlotTextePcb(), PlotWorkSheet(), LIB_TEXT::print(), SCH_FIELD::Print(), printOneLineOfText(), PNS_KICAD_IFACE_BASE::syncTextItem(), TEXTE_PCB::TransformShapeWithClearanceToPolygonSet(), ALIGNED_DIMENSION::updateGeometry(), ORTHOGONAL_DIMENSION::updateGeometry(), LEADER::updateGeometry(), ALIGNED_DIMENSION::updateText(), and ORTHOGONAL_DIMENSION::updateText().

◆ GetEffectiveTextShape()

std::shared_ptr< SHAPE_COMPOUND > EDA_TEXT::GetEffectiveTextShape ( ) const

Definition at line 620 of file eda_text.cpp.

621 {
622  std::shared_ptr<SHAPE_COMPOUND> shape ( new SHAPE_COMPOUND );
623  int penWidth = GetEffectiveTextPenWidth();
624  std::vector<wxPoint> pts;
626 
627  for( unsigned jj = 0; jj < pts.size(); jj += 2 )
628  shape->AddShape( new SHAPE_SEGMENT( pts[jj], pts[jj+1], penWidth ) );
629 
630  return shape;
631 }
int GetEffectiveTextPenWidth(int aDefaultWidth=0) const
The EffectiveTextPenWidth uses the text thickness if > 1 or aDefaultWidth.
Definition: eda_text.cpp:157
void TransformTextShapeToSegmentList(std::vector< wxPoint > &aCornerBuffer) const
Convert the text shape to a list of segment.
Definition: eda_text.cpp:583

References GetEffectiveTextPenWidth(), and TransformTextShapeToSegmentList().

Referenced by TEXTE_PCB::GetEffectiveShape(), TEXTE_MODULE::GetEffectiveShape(), and DRC_TEST_PROVIDER_COPPER_CLEARANCE::testCopperDrawItem().

◆ GetHorizJustify()

EDA_TEXT_HJUSTIFY_T EDA_TEXT::GetHorizJustify ( ) const
inline

Definition at line 199 of file eda_text.h.

199 { return EDA_TEXT_HJUSTIFY_T( m_e.hjustify ); };
EDA_TEXT_HJUSTIFY_T
Definition: eda_text.h:48
TEXT_EFFECTS m_e
Definition: eda_text.h:375
signed char hjustify
horizontal justification
Definition: eda_text.h:95

References TEXT_EFFECTS::hjustify, and m_e.

Referenced by BOARD_ADAPTER::AddShapeWithClearanceToContainer(), DIALOG_EDIT_ONE_FIELD::DIALOG_EDIT_ONE_FIELD(), KIGFX::SCH_PAINTER::draw(), EDA_TEXT_DESC::EDA_TEXT_DESC(), 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::PlotFootprintTextItem(), BRDITEMS_PLOTTER::PlotTextePcb(), PlotWorkSheet(), positioningChanged(), LIB_FIELD::print(), printOneLineOfText(), LIB_TEXT::Rotate(), SCH_LEGACY_PLUGIN::saveField(), SCH_LEGACY_PLUGIN_CACHE::saveField(), SCH_LEGACY_PLUGIN_CACHE::saveText(), KIGFX::GAL::SetTextAttributes(), DIALOG_DIMENSION_PROPERTIES::TransferDataToWindow(), 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 216 of file eda_text.cpp.

217 {
219 }
static double GetInterline(double aGlyphHeight)
Compute the distance (interline) between 2 lines of text (for multiline texts).
int GetTextHeight() const
Definition: eda_text.h:245
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:68

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

Referenced by GetLinePositions(), and GetTextBox().

◆ GetLinePositions()

void EDA_TEXT::GetLinePositions ( 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 423 of file eda_text.cpp.

424 {
425  wxPoint pos = GetTextPos(); // Position of first line of the
426  // multiline text according to
427  // the center of the multiline text block
428 
429  wxPoint offset; // Offset to next line.
430 
431  offset.y = GetInterline();
432 
433  if( aLineCount > 1 )
434  {
435  switch( GetVertJustify() )
436  {
438  break;
439 
441  pos.y -= ( aLineCount - 1 ) * offset.y / 2;
442  break;
443 
445  pos.y -= ( aLineCount - 1 ) * offset.y;
446  break;
447  }
448  }
449 
450  // Rotate the position of the first line
451  // around the center of the multiline text block
452  RotatePoint( &pos, GetTextPos(), GetTextAngle() );
453 
454  // Rotate the offset lines to increase happened in the right direction
455  RotatePoint( &offset, GetTextAngle() );
456 
457  for( int ii = 0; ii < aLineCount; ii++ )
458  {
459  aPositions.push_back( pos );
460  pos += offset;
461  }
462 }
int GetInterline() const
Return the distance between two lines of text.
Definition: eda_text.cpp:216
EDA_TEXT_VJUSTIFY_T GetVertJustify() const
Definition: eda_text.h:200
double GetTextAngle() const
Definition: eda_text.h:174
void RotatePoint(int *pX, int *pY, double angle)
Definition: trigo.cpp:208
const wxPoint & GetTextPos() const
Definition: eda_text.h:248

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

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

◆ GetShownText() [1/2]

virtual wxString EDA_TEXT::GetShownText ( int  aDepth = 0) const
inlinevirtual

Return the string actually shown after processing of the base text.

@aParam aDepth is used to prevent infinite recusions and loops when expanding text variables.

Reimplemented in TEXTE_MODULE, SCH_TEXT, SCH_FIELD, and TEXTE_PCB.

Definition at line 134 of file eda_text.h.

134 { return m_shown_text; }
wxString m_shown_text
Definition: eda_text.h:372

References m_shown_text.

Referenced by KIGFX::WS_PAINTER::draw(), LIB_FIELD::GetMsgPanelInfo(), WS_DRAW_ITEM_TEXT::GetSelectMenuText(), TEXTE_PCB::GetShownText(), SCH_FIELD::GetShownText(), SCH_TEXT::GetShownText(), TEXTE_MODULE::GetShownText(), GetTextBox(), LIB_FIELD::Plot(), LIB_PART::PlotLibFields(), PlotWorkSheet(), LIB_TEXT::print(), Print(), ShortenedShownText(), DRC_TEST_PROVIDER_MISC::testTextVars(), and TransformTextShapeToSegmentList().

◆ GetShownText() [2/2]

wxString EDA_TEXT::GetShownText ( bool *  processTextVars) const
inline

A version of GetShownText() which also indicates whether or not the text needs to be processed for text variables.

Parameters
processTextVars[out]

Definition at line 141 of file eda_text.h.

142  {
143  *processTextVars = m_shown_text_has_text_var_refs;
144  return m_shown_text;
145  }
wxString m_shown_text
Definition: eda_text.h:372
bool m_shown_text_has_text_var_refs
Definition: eda_text.h:373

References m_shown_text, and m_shown_text_has_text_var_refs.

◆ 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 127 of file eda_text.h.

127 { return m_text; }
wxString m_text
Definition: eda_text.h:371

References m_text.

Referenced by CADSTAR_PCB_ARCHIVE_LOADER::addAttribute(), NETLIST_EXPORTER_GENERIC::addComponentFields(), SCH_EAGLE_PLUGIN::addImplicitConnections(), SIM_PLOT_FRAME::AddTuner(), CONNECTION_GRAPH::buildConnectionGraph(), SCH_EDIT_TOOL::ChangeTextType(), LIB_TEXT::Clone(), LIB_TEXT::compare(), LIB_FIELD::compare(), SCH_SHEET::ComponentCount(), CreateComponentsSection(), SCH_DRAWING_TOOLS::createNewText(), SCH_EDIT_FRAME::CreateSheetPin(), DIALOG_EDIT_ONE_FIELD::DIALOG_EDIT_ONE_FIELD(), DIALOG_SCH_EDIT_ONE_FIELD::DIALOG_SCH_EDIT_ONE_FIELD(), LIB_EDIT_FRAME::DisplayCmpDoc(), KIGFX::SCH_VIEW::DisplayComponent(), KIGFX::SCH_PAINTER::draw(), SCH_EDIT_TOOL::Duplicate(), EDA_TEXT_DESC::EDA_TEXT_DESC(), CONNECTION_GRAPH::ercCheckHierSheets(), LIB_PART::Flatten(), PCB_IO::format(), FormatProbeItem(), LIB_FIELD::GetFullText(), FOOTPRINT_INFO_GENERATOR::GetHtmlFieldRow(), CADSTAR_PCB_ARCHIVE_LOADER::getKiCadNet(), TEXTE_MODULE::GetLength(), getMatchingTextItem(), SCH_COMPONENT::GetRef(), LIB_PART::GetSearchText(), DIMENSION::GetText(), TEXT_MOD_GRID_TABLE::GetValue(), hash_eda(), LIB_FIELD::HitTest(), SCH_EDIT_FRAME::importFile(), SCH_TEXT::IncrementLabel(), GENERAL_COLLECTOR::Inspect(), SCH_SCREEN::IsTerminalPoint(), SCH_FIELD::IsVoid(), LEGACY_PLUGIN::loadPCB_TEXT(), SCH_EAGLE_PLUGIN::loadSchematic(), SCH_EAGLE_PLUGIN::loadSegments(), SCH_SHEET_PIN::Matches(), SCH_TEXT::Matches(), SCH_FIELD::operator<(), SCH_TEXT::operator<(), LIB_FIELD::operator=(), SCH_COMPONENT::operator==(), PCB_PARSER::parseDIMENSION(), SCH_SEXPR_PARSER::parseSchematicSymbol(), SCH_EDITOR_CONTROL::Paste(), pasteModuleItemsToModEdit(), DRAWING_TOOL::PlaceText(), LIB_TEXT::Plot(), LIB_FIELD::Plot(), BRDITEMS_PLOTTER::PlotFootprintTextItems(), DIALOG_RESCUE_EACH::PopulateInstanceList(), LIB_FIELD::print(), DIALOG_CHANGE_SYMBOLS::processSymbol(), 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_LEGACY_PLUGIN_CACHE::SaveSymbol(), SCH_SEXPR_PLUGIN::saveText(), SCH_LEGACY_PLUGIN::saveText(), SCH_SEXPR_PLUGIN_CACHE::saveText(), SCH_LEGACY_PLUGIN_CACHE::saveText(), SCH_COMPONENT::SetRef(), LIB_VIEW_FRAME::setupUIConditions(), LIB_EDIT_FRAME::setupUIConditions(), EE_INSPECTION_TOOL::ShowDatasheet(), 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(), DIALOG_FOOTPRINT_FP_EDITOR::Validate(), DIALOG_FOOTPRINT_BOARD_EDITOR::Validate(), and TEXTE_MODULE::ViewGetLOD().

◆ GetTextAngle()

double EDA_TEXT::GetTextAngle ( ) const
inline

Definition at line 174 of file eda_text.h.

174 { return m_e.angle; }
TEXT_EFFECTS m_e
Definition: eda_text.h:375
double angle
now: 0.1 degrees; future: degrees
Definition: eda_text.h:99

References TEXT_EFFECTS::angle, and m_e.

Referenced by BOARD_ADAPTER::AddShapeWithClearanceToContainer(), CreateComponentsSection(), DIALOG_EDIT_ONE_FIELD::DIALOG_EDIT_ONE_FIELD(), KIGFX::WS_PAINTER::draw(), KIGFX::SCH_PAINTER::draw(), export_vrml_pcbtext(), TEXTE_PCB::Flip(), TEXTE_MODULE::Flip(), PCB_IO::format(), LIB_TEXT::GetBoundingBox(), SCH_FIELD::GetBoundingBox(), TEXTE_PCB::GetBoundingBox(), LIB_FIELD::GetBoundingBox(), SCH_TEXT::GetBoundingBox(), SCH_LABEL::GetBoundingBox(), TEXTE_MODULE::GetDrawRotation(), GetLinePositions(), TEXTE_PCB::GetMsgPanelInfo(), 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(), ALTIUM_PCB::ParseTexts6Data(), 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(), LIB_TEXT::Rotate(), TEXTE_PCB::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(), TextHitTest(), DIALOG_LIB_EDIT_TEXT::TransferDataFromWindow(), 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

◆ GetTextAngleRadians()

double EDA_TEXT::GetTextAngleRadians ( ) const
inline

◆ GetTextBox()

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

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

Parameters
aLineThe line of text to consider. Pass -1 for all lines.
aInvertYInvert the Y axis when calculating bounding box.
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

Definition at line 222 of file eda_text.cpp.

223 {
224  EDA_RECT rect;
225  wxArrayString strings;
226  wxString text = GetShownText();
227  int thickness = GetEffectiveTextPenWidth();
228  int linecount = 1;
229  bool hasOverBar = false; // true if the first line of text as an overbar
230 
231  if( IsMultilineAllowed() )
232  {
233  wxStringSplit( text, strings, '\n' );
234 
235  if( strings.GetCount() ) // GetCount() == 0 for void strings
236  {
237  if( aLine >= 0 && (aLine < (int)strings.GetCount()) )
238  text = strings.Item( aLine );
239  else
240  text = strings.Item( 0 );
241 
242  linecount = strings.GetCount();
243  }
244  }
245 
246  // Search for overbar symbol. Only text is scanned,
247  // because only this line can change the bounding box
248  for( unsigned ii = 1; ii < text.size(); ii++ )
249  {
250  if( text[ii-1] == '~' && text[ii] != '~' )
251  {
252  hasOverBar = true;
253  break;
254  }
255  }
256 
257  // calculate the H and V size
258  const auto& font = basic_gal.GetStrokeFont();
259  VECTOR2D fontSize( GetTextSize() );
260  double penWidth( thickness );
261  int dx = KiROUND( font.ComputeStringBoundaryLimits( text, fontSize, penWidth ).x );
262  int dy = GetInterline();
263 
264  // Creates bounding box (rectangle) for horizontal, left and top justified text. The
265  // bounding box will be moved later according to the actual text options
266  wxSize textsize = wxSize( dx, dy );
267  wxPoint pos = GetTextPos();
268 
269  if( aInvertY )
270  pos.y = -pos.y;
271 
272  rect.SetOrigin( pos );
273 
274  // The bbox vertical size returned by GetInterline( aThickness )
275  // includes letters like j and y and ] + interval between lines.
276  // The interval below the last line is not usefull, and we can use its half value
277  // as vertical margin above the text
278  // the full interval is roughly GetTextHeight() * 0.4 - aThickness/2
279  rect.Move( wxPoint( 0, thickness/4 - KiROUND( GetTextHeight() * 0.22 ) ) );
280 
281  if( hasOverBar )
282  { // A overbar adds an extra size to the text
283  // Height from the base line text of chars like [ or {
284  double curr_height = GetTextHeight() * 1.15;
285  double overbarPosition = font.ComputeOverbarVerticalPosition( fontSize.y, penWidth );
286  int extra_height = KiROUND( overbarPosition - curr_height );
287 
288  extra_height += thickness / 2;
289  textsize.y += extra_height;
290  rect.Move( wxPoint( 0, -extra_height ) );
291  }
292 
293  // for multiline texts and aLine < 0, merge all rectangles
294  // ( if aLine < 0, we want the full text bounding box )
295  if( IsMultilineAllowed() && aLine < 0 )
296  {
297  for( unsigned ii = 1; ii < strings.GetCount(); ii++ )
298  {
299  text = strings.Item( ii );
300  dx = KiROUND( font.ComputeStringBoundaryLimits( text, fontSize, penWidth ).x );
301  textsize.x = std::max( textsize.x, dx );
302  textsize.y += dy;
303  }
304  }
305 
306  rect.SetSize( textsize );
307 
308  /* Now, calculate the rect origin, according to text justification
309  * At this point the rectangle origin is the text origin (m_Pos).
310  * This is true only for left and top text justified texts (using top to bottom Y axis
311  * orientation). and must be recalculated for others justifications
312  * also, note the V justification is relative to the first line
313  */
314  switch( GetHorizJustify() )
315  {
317  if( IsMirrored() )
318  rect.SetX( rect.GetX() - rect.GetWidth() );
319  break;
320 
322  rect.SetX( rect.GetX() - (rect.GetWidth() / 2) );
323  break;
324 
326  if( !IsMirrored() )
327  rect.SetX( rect.GetX() - rect.GetWidth() );
328  break;
329  }
330 
331  dy = GetTextHeight() + thickness;
332 
333  switch( GetVertJustify() )
334  {
336  break;
337 
339  rect.SetY( rect.GetY() - ( dy / 2) );
340  break;
341 
343  rect.SetY( rect.GetY() - dy );
344  break;
345  }
346 
347  if( linecount > 1 )
348  {
349  int yoffset;
350  linecount -= 1;
351 
352  switch( GetVertJustify() )
353  {
355  break;
356 
358  yoffset = linecount * GetInterline() / 2;
359  rect.SetY( rect.GetY() - yoffset );
360  break;
361 
363  yoffset = linecount * GetInterline();
364  rect.SetY( rect.GetY() - yoffset );
365  break;
366  }
367  }
368 
369  rect.Normalize(); // Make h and v sizes always >= 0
370 
371  return rect;
372 }
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:343
int GetInterline() const
Return the distance between two lines of text.
Definition: eda_text.cpp:216
void Move(const wxPoint &aMoveVector)
Function Move moves the rectangle by the aMoveVector.
EDA_TEXT_VJUSTIFY_T GetVertJustify() const
Definition: eda_text.h:200
bool IsMirrored() const
Definition: eda_text.h:189
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 GetEffectiveTextPenWidth(int aDefaultWidth=0) const
The EffectiveTextPenWidth uses the text thickness if > 1 or aDefaultWidth.
Definition: eda_text.cpp:157
int GetTextHeight() const
Definition: eda_text.h:245
EDA_TEXT_HJUSTIFY_T GetHorizJustify() const
Definition: eda_text.h:199
const wxSize & GetTextSize() const
Definition: eda_text.h:239
void SetX(int val)
Definition: eda_rect.h:168
bool IsMultilineAllowed() const
Definition: eda_text.h:197
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:68
const wxPoint & GetTextPos() const
Definition: eda_text.h:248
BASIC_GAL basic_gal(basic_displayOptions)
virtual wxString GetShownText(int aDepth=0) const
Return the string actually shown after processing of the base text.
Definition: eda_text.h:134

References basic_gal, GetEffectiveTextPenWidth(), GetHorizJustify(), GetInterline(), GetShownText(), KIGFX::GAL::GetStrokeFont(), GetTextHeight(), GetTextPos(), GetTextSize(), 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(), SCH_FIELD::GetBoundingBox(), TEXTE_PCB::GetBoundingBox(), LIB_FIELD::GetBoundingBox(), TEXTE_MODULE::GetBoundingBox(), DIMENSION::GetBoundingBox(), SCH_TEXT::GetBoundingBox(), WS_DRAW_ITEM_TEXT::GetBoundingBox(), SCH_LABEL::GetBoundingBox(), LIB_TEXT::NormalizeJustification(), DRC_TEST_PROVIDER_COPPER_CLEARANCE::testCopperDrawItem(), TEXTE_MODULE::TextHitTest(), TextHitTest(), TransformBoundingBoxWithClearanceToPolygon(), ALIGNED_DIMENSION::updateGeometry(), ORTHOGONAL_DIMENSION::updateGeometry(), LEADER::updateGeometry(), and TEXTE_MODULE::ViewBBox().

◆ GetTextHeight()

◆ GetTextPos()

const wxPoint& EDA_TEXT::GetTextPos ( ) const
inline

Definition at line 248 of file eda_text.h.

248 { return m_e.pos; }
TEXT_EFFECTS m_e
Definition: eda_text.h:375
wxPoint pos
Definition: eda_text.h:100

References m_e, and TEXT_EFFECTS::pos.

Referenced by BOARD_ADAPTER::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_MODULE::Flip(), PCB_IO::format(), LIB_TEXT::GetBoundingBox(), SCH_FIELD::GetBoundingBox(), TEXTE_PCB::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(), GetLinePositions(), TEXTE_PCB::GetPosition(), LIB_TEXT::GetPosition(), TEXTE_MODULE::GetPosition(), DIMENSION::GetPosition(), LIB_FIELD::GetPosition(), SCH_FIELD::GetPosition(), WS_DRAW_ITEM_TEXT::GetPosition(), SCH_TEXT::GetPosition(), 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::PlotFootprintTextItem(), BRDITEMS_PLOTTER::PlotTextePcb(), PlotWorkSheet(), LIB_FIELD::print(), Print(), SCH_GLOBALLABEL::Print(), SCH_HIERLABEL::Print(), DIALOG_CHANGE_SYMBOLS::processSymbol(), LIB_TEXT::Rotate(), TEXTE_PCB::Rotate(), TEXTE_MODULE::Rotate(), SCH_FIELD::Rotate(), SCH_SHEET_PIN::Rotate(), LIB_FIELD::Rotate(), SCH_TEXT::Rotate(), SCH_LEGACY_PLUGIN_CACHE::saveField(), SCH_LEGACY_PLUGIN_CACHE::saveText(), TEXTE_MODULE::SetDrawCoord(), TEXTE_MODULE::SetLocalCoord(), SCH_COMPONENT::SetRef(), TEXTE_MODULE::TextHitTest(), TextHitTest(), DIALOG_DIMENSION_PROPERTIES::TransferDataToWindow(), 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()

◆ GetTextStyleName()

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

Definition at line 484 of file eda_text.cpp.

485 {
486  int style = 0;
487 
488  if( IsItalic() )
489  style = 1;
490 
491  if( IsBold() )
492  style += 2;
493 
494  wxString stylemsg[4] = {
495  _("Normal"),
496  _("Italic"),
497  _("Bold"),
498  _("Bold+Italic")
499  };
500 
501  return stylemsg[style];
502 }
bool IsBold() const
Definition: eda_text.h:183
bool IsItalic() const
Definition: eda_text.h:180
#define _(s)
Definition: 3d_actions.cpp:33

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

Referenced by LIB_FIELD::GetMsgPanelInfo().

◆ GetTextThickness()

◆ GetTextWidth()

◆ GetVertJustify()

◆ IsBold()

◆ IsDefaultFormatting()

bool EDA_TEXT::IsDefaultFormatting ( ) const

Definition at line 505 of file eda_text.cpp.

506 {
507  return ( IsVisible()
508  && !IsMirrored()
511  && GetTextThickness() == 0
512  && !IsItalic()
513  && !IsBold()
514  && !IsMultilineAllowed()
515  );
516 }
bool IsBold() const
Definition: eda_text.h:183
EDA_TEXT_VJUSTIFY_T GetVertJustify() const
Definition: eda_text.h:200
bool IsMirrored() const
Definition: eda_text.h:189
bool IsVisible() const
Definition: eda_text.h:186
int GetTextThickness() const
Definition: eda_text.h:159
bool IsItalic() const
Definition: eda_text.h:180
EDA_TEXT_HJUSTIFY_T GetHorizJustify() const
Definition: eda_text.h:199
bool IsMultilineAllowed() const
Definition: eda_text.h:197

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

Referenced by SCH_SEXPR_PLUGIN::saveField().

◆ IsItalic()

bool EDA_TEXT::IsItalic ( ) const
inline

◆ IsMirrored()

◆ IsMultilineAllowed()

◆ IsVisible()

◆ LenSize()

int EDA_TEXT::LenSize ( const wxString &  aLine,
int  aThickness 
) 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

Definition at line 188 of file eda_text.cpp.

189 {
192  basic_gal.SetLineWidth( (float) aThickness );
194 
195  VECTOR2D tsize = basic_gal.GetTextLineSize( aLine );
196 
197  return KiROUND( tsize.x );
198 }
void SetFontItalic(const bool aItalic)
Set italic property of current font.
bool IsBold() const
Definition: eda_text.h:183
VECTOR2D GetTextLineSize(const UTF8 &aText) const
Compute the X and Y size of a given text.
virtual void SetLineWidth(float aLineWidth)
Set the line width.
bool IsItalic() const
Definition: eda_text.h:180
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:239
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:68
void SetGlyphSize(const VECTOR2D aGlyphSize)
Set the font glyph size.
BASIC_GAL basic_gal(basic_displayOptions)

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 63 of file eda_text.cpp.

64 {
65  wxASSERT( aHorizJustify >= GR_TEXT_HJUSTIFY_LEFT && aHorizJustify <= GR_TEXT_HJUSTIFY_RIGHT );
66 
67  if( aHorizJustify > GR_TEXT_HJUSTIFY_RIGHT )
69 
70  if( aHorizJustify < GR_TEXT_HJUSTIFY_LEFT )
71  return GR_TEXT_HJUSTIFY_LEFT;
72 
73  return (EDA_TEXT_HJUSTIFY_T) aHorizJustify;
74 }
EDA_TEXT_HJUSTIFY_T
Definition: eda_text.h:48

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 77 of file eda_text.cpp.

78 {
79  wxASSERT( aVertJustify >= GR_TEXT_VJUSTIFY_TOP && aVertJustify <= GR_TEXT_VJUSTIFY_BOTTOM );
80 
81  if( aVertJustify > GR_TEXT_VJUSTIFY_BOTTOM )
83 
84  if( aVertJustify < GR_TEXT_VJUSTIFY_TOP )
85  return GR_TEXT_VJUSTIFY_TOP;
86 
87  return (EDA_TEXT_VJUSTIFY_T) aVertJustify;
88 }
EDA_TEXT_VJUSTIFY_T
Definition: eda_text.h:55

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 ( RENDER_SETTINGS aSettings,
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 400 of file eda_text.cpp.

402 {
403  if( IsMultilineAllowed() )
404  {
405  std::vector<wxPoint> positions;
406  wxArrayString strings;
407  wxStringSplit( GetShownText(), strings, '\n' );
408 
409  positions.reserve( strings.Count() );
410 
411  GetLinePositions( positions, strings.Count());
412 
413  for( unsigned ii = 0; ii < strings.Count(); ii++ )
414  printOneLineOfText( aSettings, aOffset, aColor, aFillMode, strings[ii], positions[ii] );
415  }
416  else
417  {
418  printOneLineOfText( aSettings, aOffset, aColor, aFillMode, GetShownText(), GetTextPos() );
419  }
420 }
void wxStringSplit(const wxString &aText, wxArrayString &aStrings, wxChar aSplitter)
Split aString to a string list separated at aSplitter.
Definition: common.cpp:343
void printOneLineOfText(RENDER_SETTINGS *aSettings, 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:464
bool IsMultilineAllowed() const
Definition: eda_text.h:197
void GetLinePositions(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:423
const wxPoint & GetTextPos() const
Definition: eda_text.h:248
virtual wxString GetShownText(int aDepth=0) const
Return the string actually shown after processing of the base text.
Definition: eda_text.h:134

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

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

◆ printOneLineOfText()

void EDA_TEXT::printOneLineOfText ( RENDER_SETTINGS aSettings,
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
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 464 of file eda_text.cpp.

467 {
468  wxDC* DC = aSettings->GetPrintDC();
469  int penWidth = std::max( GetEffectiveTextPenWidth(), aSettings->GetDefaultPenWidth() );
470 
471  if( aFillMode == SKETCH )
472  penWidth = -penWidth;
473 
474  wxSize size = GetTextSize();
475 
476  if( IsMirrored() )
477  size.x = -size.x;
478 
479  GRText( DC, aOffset + aPos, aColor, aText, GetTextAngle(), size, GetHorizJustify(),
480  GetVertJustify(), penWidth, IsItalic(), IsBold() );
481 }
bool IsBold() const
Definition: eda_text.h:183
EDA_TEXT_VJUSTIFY_T GetVertJustify() const
Definition: eda_text.h:200
bool IsMirrored() const
Definition: eda_text.h:189
double GetTextAngle() const
Definition: eda_text.h:174
int GetEffectiveTextPenWidth(int aDefaultWidth=0) const
The EffectiveTextPenWidth uses the text thickness if > 1 or aDefaultWidth.
Definition: eda_text.cpp:157
bool IsItalic() const
Definition: eda_text.h:180
EDA_TEXT_HJUSTIFY_T GetHorizJustify() const
Definition: eda_text.h:199
const wxSize & GetTextSize() const
Definition: eda_text.h:239
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:134
int GetDefaultPenWidth() const

References KIGFX::RENDER_SETTINGS::GetDefaultPenWidth(), GetEffectiveTextPenWidth(), GetHorizJustify(), KIGFX::RENDER_SETTINGS::GetPrintDC(), GetTextAngle(), GetTextSize(), 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 178 of file eda_text.cpp.

179 {
180  bool retval = EDA_ITEM::Replace( aSearchData, m_text );
182  m_shown_text_has_text_var_refs = m_shown_text.Contains( wxT( "${" ) );
183 
184  return retval;
185 }
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_shown_text
Definition: eda_text.h:372
bool m_shown_text_has_text_var_refs
Definition: eda_text.h:373
wxString m_text
Definition: eda_text.h:371
wxString UnescapeString(const wxString &aSource)
Definition: string.cpp:152

References m_shown_text, m_shown_text_has_text_var_refs, m_text, EDA_ITEM::Replace(), and UnescapeString().

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 137 of file eda_text.cpp.

138 {
139  m_e = aSrc.m_e;
140 }
TEXT_EFFECTS m_e
Definition: eda_text.h:375

References m_e.

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

◆ SetHorizJustify()

void EDA_TEXT::SetHorizJustify ( EDA_TEXT_HJUSTIFY_T  aType)
inline

Definition at line 202 of file eda_text.h.

202 { m_e.hjustify = aType; };
TEXT_EFFECTS m_e
Definition: eda_text.h:375
signed char hjustify
horizontal justification
Definition: eda_text.h:95

References TEXT_EFFECTS::hjustify, and m_e.

Referenced by CADSTAR_PCB_ARCHIVE_LOADER::addAttribute(), GRAPHICS_IMPORTER_PCBNEW::AddText(), PANEL_EESCHEMA_COLOR_SETTINGS::createPreviewItems(), CADSTAR_PCB_ARCHIVE_LOADER::drawCadstarText(), eagleToKicadAlignment(), EDA_TEXT_DESC::EDA_TEXT_DESC(), TEXTE_MODULE::Flip(), ALTIUM_PCB::HelperParseDimensions6Leader(), AUTOPLACER::justify_field(), TEXTE_MODULE::KeepUpright(), SCH_LEGACY_PLUGIN_CACHE::loadField(), SCH_EAGLE_PLUGIN::loadFieldAttributes(), LEGACY_PLUGIN::loadMODULE_TEXT(), LEGACY_PLUGIN::loadPCB_TEXT(), EAGLE_PLUGIN::loadPlain(), SCH_LEGACY_PLUGIN_CACHE::loadText(), SCH_EDIT_TOOL::Mirror(), LIB_TEXT::MirrorHorizontal(), LIB_TEXT::MirrorVertical(), EAGLE_PLUGIN::orientModuleText(), EAGLE_PLUGIN::packageText(), SCH_SEXPR_PARSER::parseEDA_TEXT(), PCB_PARSER::parseEDA_TEXT(), ALTIUM_PCB::ParseTexts6Data(), LIB_TEXT::Rotate(), SCH_TEXT::SetLabelSpinStyle(), SCH_GLOBALLABEL::SetLabelSpinStyle(), SCH_HIERLABEL::SetLabelSpinStyle(), PCAD2KICAD::SetTextJustify(), WS_DATA_ITEM_TEXT::SyncDrawItems(), DIALOG_LIB_EDIT_TEXT::TransferDataFromWindow(), DIALOG_TEXT_PROPERTIES::TransferDataFromWindow(), DIALOG_DIMENSION_PROPERTIES::updateDimensionFromDialog(), DIALOG_UPDATE_FIELDS::updateFields(), and DIALOG_EDIT_ONE_FIELD::updateText().

◆ 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 196 of file eda_text.h.

196 { m_e.Bit( TE_MULTILINE, aAllow ); }
TEXT_EFFECTS m_e
Definition: eda_text.h:375
void Bit(int aBit, bool aValue)
Definition: eda_text.h:102

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 121 of file eda_text.cpp.

122 {
123  m_text = aText;
124  m_shown_text = UnescapeString( aText );
125  m_shown_text_has_text_var_refs = m_shown_text.Contains( wxT( "${" ) );
126 }
wxString m_shown_text
Definition: eda_text.h:372
bool m_shown_text_has_text_var_refs
Definition: eda_text.h:373
wxString m_text
Definition: eda_text.h:371
wxString UnescapeString(const wxString &aSource)
Definition: string.cpp:152

References m_shown_text, m_shown_text_has_text_var_refs, m_text, and UnescapeString().

Referenced by CADSTAR_PCB_ARCHIVE_LOADER::addAttribute(), SCH_EAGLE_PLUGIN::addImplicitConnections(), GRAPHICS_IMPORTER_PCBNEW::AddText(), PCAD2KICAD::PCB_TEXT::AddToBoard(), PCAD2KICAD::PCB_MODULE::AddToBoard(), FIELDS_EDITOR_GRID_DATA_MODEL::ApplyData(), LIB_TEXT::Clone(), createBoard(), PCB_BASE_FRAME::CreateNewModule(), LIB_EDIT_FRAME::CreateNewPart(), PANEL_EESCHEMA_COLOR_SETTINGS::createPreviewItems(), CADSTAR_PCB_ARCHIVE_LOADER::drawCadstarText(), dummy(), KIGFX::dummy(), SCH_EDIT_TOOL::Duplicate(), MODULE::DuplicateItem(), EDA_TEXT_DESC::EDA_TEXT_DESC(), ALTIUM_PCB::HelperParseDimensions6Leader(), LIB_FIELD::HitTest(), SCH_EDIT_FRAME::importFile(), SCH_TEXT::IncrementLabel(), SCH_LEGACY_PLUGIN_CACHE::loadAliases(), 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_ALTIUM_PLUGIN::ParseDesignator(), ALTIUM_PCB::ParseTexts6Data(), LIB_EDIT_TOOL::Paste(), SCH_EDITOR_CONTROL::Paste(), pasteModuleItemsToModEdit(), LIB_PART::PlotLibFields(), DIALOG_CHANGE_SYMBOLS::processSymbol(), processTextItem(), SCH_SEXPR_PLUGIN_CACHE::saveDcmInfoAsFields(), CLIPBOARD_IO::SaveSelection(), LIB_PART::SetName(), SCH_COMPONENT::SetRef(), TEXT_MOD_GRID_TABLE::SetValue(), DIALOG_EDIT_SHEET_PIN::TransferDataFromWindow(), DIALOG_LIB_EDIT_TEXT::TransferDataFromWindow(), DIALOG_TEXT_PROPERTIES::TransferDataFromWindow(), DIALOG_LABEL_EDITOR::TransferDataFromWindow(), DIALOG_SPICE_MODEL::TransferDataFromWindow(), DIALOG_SCH_SHEET_PROPS::TransferDataToWindow(), DIALOG_LIB_EDIT_ONE_FIELD::UpdateField(), DIALOG_SCH_EDIT_ONE_FIELD::UpdateField(), DIALOG_UPDATE_FIELDS::updateFields(), SCH_COMPONENT::UpdateFields(), SCH_SHEET_LIST::UpdateSymbolInstances(), and DIMENSION::updateText().

◆ SetTextAngle()

virtual void EDA_TEXT::SetTextAngle ( double  aAngle)
inlinevirtual

◆ SetTextHeight()

void EDA_TEXT::SetTextHeight ( int  aHeight)
inline

◆ SetTextPos()

void EDA_TEXT::SetTextPos ( const wxPoint aPoint)
inline

Definition at line 247 of file eda_text.h.

247 { m_e.pos = aPoint; }
TEXT_EFFECTS m_e
Definition: eda_text.h:375
wxPoint pos
Definition: eda_text.h:100

References m_e, and TEXT_EFFECTS::pos.

Referenced by CADSTAR_PCB_ARCHIVE_LOADER::addAttribute(), GRAPHICS_IMPORTER_PCBNEW::AddText(), PCAD2KICAD::PCB_TEXT::AddToBoard(), LIB_TEXT::BeginEdit(), LIB_FIELD::BeginEdit(), LIB_TEXT::CalcEdit(), LIB_FIELD::CalcEdit(), CADSTAR_PCB_ARCHIVE_LOADER::drawCadstarText(), LIB_TEXT::HitTest(), LIB_FIELD::HitTest(), SCH_EAGLE_PLUGIN::loadFieldAttributes(), LEGACY_PLUGIN::loadPCB_TEXT(), EAGLE_PLUGIN::loadPlain(), DIMENSION::Mirror(), LIB_TEXT::MoveTo(), LIB_FIELD::MoveTo(), LIB_TEXT::NormalizeJustification(), EAGLE_PLUGIN::orientModuleText(), EAGLE_PLUGIN::packageText(), DRAWING_TOOL::PlaceText(), DIALOG_CHANGE_SYMBOLS::processSymbol(), LIB_TEXT::Rotate(), TEXTE_PCB::Rotate(), TEXTE_MODULE::Rotate(), SCH_FIELD::Rotate(), LIB_FIELD::Rotate(), SCH_TEXT::Rotate(), SCH_FIELD::SCH_FIELD(), SCH_SHEET_PIN::SCH_SHEET_PIN(), SCH_TEXT::SCH_TEXT(), TEXTE_MODULE::SetDrawCoord(), TEXTE_PCB::SetPosition(), TEXTE_MODULE::SetPosition(), DIMENSION::SetPosition(), SCH_FIELD::SetPosition(), WS_DRAW_ITEM_TEXT::SetPosition(), SCH_TEXT::SetPosition(), SCH_COMPONENT::SetRef(), TEXTE_MODULE::TEXTE_MODULE(), DIALOG_TEXT_PROPERTIES::TransferDataFromWindow(), DIALOG_UPDATE_FIELDS::updateFields(), SCH_COMPONENT::UpdateFields(), DIALOG_EDIT_ONE_FIELD::updateText(), ALIGNED_DIMENSION::updateText(), ORTHOGONAL_DIMENSION::updateText(), and WS_DRAW_ITEM_TEXT::WS_DRAW_ITEM_TEXT().

◆ SetTextSize()

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

Definition at line 238 of file eda_text.h.

238 { m_e.size = aNewSize; }
TEXT_EFFECTS m_e
Definition: eda_text.h:375
wxSize size
Definition: eda_text.h:97

References m_e, and TEXT_EFFECTS::size.

Referenced by CADSTAR_PCB_ARCHIVE_LOADER::addAttribute(), SCH_EAGLE_PLUGIN::addImplicitConnections(), SCH_EDIT_TOOL::ChangeTextType(), MICROWAVE_TOOL::createBaseFootprint(), PCB_BASE_FRAME::CreateNewModule(), SCH_DRAWING_TOOLS::createNewText(), SCH_EDIT_FRAME::CreateSheetPin(), SCH_LINE_WIRE_BUS_TOOL::doUnfoldBus(), CADSTAR_PCB_ARCHIVE_LOADER::drawCadstarText(), dummy(), KIGFX::dummy(), EDA_TEXT(), ALTIUM_PCB::HelperParseDimensions6Leader(), ALTIUM_PCB::HelperParseDimensions6Linear(), LIB_TEXT::LIB_TEXT(), CADSTAR_PCB_ARCHIVE_LOADER::loadDimensions(), 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_EDIT_COMPONENT_IN_SCHEMATIC::OnAddField(), DIALOG_EDIT_COMPONENT_IN_LIBRARY::OnAddField(), 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(), ALTIUM_PCB::ParseTexts6Data(), DRAWING_TOOL::PlaceText(), BACK_ANNOTATE::processNetNameChange(), 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().

◆ SetTextThickness()

void EDA_TEXT::SetTextThickness ( int  aWidth)
inline

The TextThickness is that set by the user.

The EffectiveTextPenWidth also factors in bold text and thickness clamping.

Definition at line 158 of file eda_text.h.

158 { m_e.penwidth = aWidth; };
TEXT_EFFECTS m_e
Definition: eda_text.h:375
int penwidth
Definition: eda_text.h:98

References m_e, and TEXT_EFFECTS::penwidth.

Referenced by CADSTAR_PCB_ARCHIVE_LOADER::addAttribute(), GRAPHICS_IMPORTER_PCBNEW::AddText(), PCAD2KICAD::PCB_TEXT::AddToBoard(), PCAD2KICAD::PCB_MODULE::AddToBoard(), SCH_EDIT_TOOL::ChangeTextType(), MICROWAVE_TOOL::createBaseFootprint(), PCB_BASE_FRAME::CreateNewModule(), CADSTAR_PCB_ARCHIVE_LOADER::drawCadstarText(), EDA_TEXT_DESC::EDA_TEXT_DESC(), ALTIUM_PCB::HelperParseDimensions6Leader(), ALTIUM_PCB::HelperParseDimensions6Linear(), CADSTAR_PCB_ARCHIVE_LOADER::loadDimensions(), LEGACY_PLUGIN::loadMODULE_TEXT(), LEGACY_PLUGIN::loadPCB_TEXT(), EAGLE_PLUGIN::loadPlain(), 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(), ALTIUM_PCB::ParseTexts6Data(), DRAWING_TOOL::PlaceText(), TEXT_MOD_GRID_TABLE::SetValue(), LIB_TEXT::SetWidth(), LIB_FIELD::SetWidth(), TEXTE_MODULE::TEXTE_MODULE(), DIALOG_TEXT_PROPERTIES::TransferDataFromWindow(), DIALOG_LABEL_EDITOR::TransferDataFromWindow(), DIALOG_DIMENSION_PROPERTIES::updateDimensionFromDialog(), and WS_DRAW_ITEM_TEXT::WS_DRAW_ITEM_TEXT().

◆ SetTextWidth()

void EDA_TEXT::SetTextWidth ( int  aWidth)
inline

◆ SetTextX()

◆ SetTextY()

◆ SetVertJustify()

◆ SetVisible()

◆ ShortenedShownText()

wxString EDA_TEXT::ShortenedShownText ( ) const

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

Definition at line 201 of file eda_text.cpp.

202 {
203  wxString tmp = GetShownText();
204 
205  tmp.Replace( wxT( "\n" ), wxT( " " ) );
206  tmp.Replace( wxT( "\r" ), wxT( " " ) );
207  tmp.Replace( wxT( "\t" ), wxT( " " ) );
208 
209  if( tmp.Length() > 36 )
210  tmp = tmp.Left( 34 ) + wxT( "..." );
211 
212  return tmp;
213 }
virtual wxString GetShownText(int aDepth=0) const
Return the string actually shown after processing of the base text.
Definition: eda_text.h:134

References GetShownText().

Referenced by LIB_TEXT::GetSelectMenuText(), TEXTE_PCB::GetSelectMenuText(), SCH_FIELD::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 151 of file eda_text.cpp.

152 {
153  std::swap( m_e, aTradingPartner.m_e );
154 }
TEXT_EFFECTS m_e
Definition: eda_text.h:375

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 143 of file eda_text.cpp.

144 {
145  std::swap( m_text, aTradingPartner.m_text );
146  std::swap( m_shown_text, aTradingPartner.m_shown_text );
148 }
wxString m_shown_text
Definition: eda_text.h:372
bool m_shown_text_has_text_var_refs
Definition: eda_text.h:373
wxString m_text
Definition: eda_text.h:371

References m_shown_text, m_shown_text_has_text_var_refs, 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 375 of file eda_text.cpp.

376 {
377  EDA_RECT rect = GetTextBox();
378  wxPoint location = aPoint;
379 
380  rect.Inflate( aAccuracy );
381  RotatePoint( &location, GetTextPos(), -GetTextAngle() );
382 
383  return rect.Contains( location );
384 }
EDA_RECT GetTextBox(int aLine=-1, bool aInvertY=false) const
Useful in multiline texts to calculate the full text or a line area (for zones filling,...
Definition: eda_text.cpp:222
double GetTextAngle() const
Definition: eda_text.h:174
void RotatePoint(int *pX, int *pY, double angle)
Definition: trigo.cpp:208
bool Contains(const wxPoint &aPoint) const
Function Contains.
EDA_RECT handles the component boundary box.
Definition: eda_rect.h:44
const wxPoint & GetTextPos() const
Definition: eda_text.h:248
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 387 of file eda_text.cpp.

388 {
389  EDA_RECT rect = aRect;
390 
391  rect.Inflate( aAccuracy );
392 
393  if( aContains )
394  return rect.Contains( GetTextBox() );
395 
396  return rect.Intersects( GetTextBox(), GetTextAngle() );
397 }
EDA_RECT GetTextBox(int aLine=-1, bool aInvertY=false) const
Useful in multiline texts to calculate the full text or a line area (for zones filling,...
Definition: eda_text.cpp:222
double GetTextAngle() const
Definition: eda_text.h:174
bool Contains(const wxPoint &aPoint) const
Function Contains.
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 306 of file board_items_to_polygon_shape_transform.cpp.

308 {
309  if( GetText().Length() == 0 )
310  return;
311 
312  wxPoint corners[4]; // Buffer of polygon corners
313 
314  EDA_RECT rect = GetTextBox();
315  rect.Inflate( aClearanceValue + Millimeter2iu( DEFAULT_TEXT_WIDTH ) );
316  corners[0].x = rect.GetOrigin().x;
317  corners[0].y = rect.GetOrigin().y;
318  corners[1].y = corners[0].y;
319  corners[1].x = rect.GetRight();
320  corners[2].x = corners[1].x;
321  corners[2].y = rect.GetBottom();
322  corners[3].y = corners[2].y;
323  corners[3].x = corners[0].x;
324 
325  aCornerBuffer->NewOutline();
326 
327  for( wxPoint& corner : corners )
328  {
329  // Rotate polygon
330  RotatePoint( &corner.x, &corner.y, GetTextPos().x, GetTextPos().y, GetTextAngle() );
331  aCornerBuffer->Append( corner.x, corner.y );
332  }
333 }
EDA_RECT GetTextBox(int aLine=-1, bool aInvertY=false) const
Useful in multiline texts to calculate the full text or a line area (for zones filling,...
Definition: eda_text.cpp:222
double GetTextAngle() const
Definition: eda_text.h:174
void RotatePoint(int *pX, int *pY, double angle)
Definition: trigo.cpp:208
int GetBottom() const
Definition: eda_rect.h:124
#define DEFAULT_TEXT_WIDTH
const wxPoint GetOrigin() const
Definition: eda_rect.h:114
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:248
static constexpr int Millimeter2iu(double mm)
virtual const wxString & GetText() const
Return the string associated with the text object.
Definition: eda_text.h:127
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(), DEFAULT_TEXT_WIDTH, EDA_RECT::GetBottom(), EDA_RECT::GetOrigin(), EDA_RECT::GetRight(), GetText(), GetTextAngle(), GetTextBox(), GetTextPos(), EDA_RECT::Inflate(), Millimeter2iu(), 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 583 of file eda_text.cpp.

584 {
585  wxSize size = GetTextSize();
586 
587  if( IsMirrored() )
588  size.x = -size.x;
589 
590  bool forceBold = true;
591  int penWidth = 0; // use max-width for bold text
592 
593  COLOR4D color = COLOR4D::BLACK; // not actually used, but needed by GRText
594 
595  if( IsMultilineAllowed() )
596  {
597  wxArrayString strings_list;
598  wxStringSplit( GetShownText(), strings_list, wxChar('\n') );
599  std::vector<wxPoint> positions;
600  positions.reserve( strings_list.Count() );
601  GetLinePositions( positions, strings_list.Count());
602 
603  for( unsigned ii = 0; ii < strings_list.Count(); ii++ )
604  {
605  wxString txt = strings_list.Item( ii );
606  GRText( NULL, positions[ii], color, txt, GetTextAngle(), size, GetHorizJustify(),
607  GetVertJustify(), penWidth, IsItalic(), forceBold, addTextSegmToBuffer,
608  &aCornerBuffer );
609  }
610  }
611  else
612  {
614  GetVertJustify(), penWidth, IsItalic(), forceBold, addTextSegmToBuffer,
615  &aCornerBuffer );
616  }
617 }
void wxStringSplit(const wxString &aText, wxArrayString &aStrings, wxChar aSplitter)
Split aString to a string list separated at aSplitter.
Definition: common.cpp:343
EDA_TEXT_VJUSTIFY_T GetVertJustify() const
Definition: eda_text.h:200
bool IsMirrored() const
Definition: eda_text.h:189
int color
Definition: DXF_plotter.cpp:61
static void addTextSegmToBuffer(int x0, int y0, int xf, int yf, void *aData)
Definition: eda_text.cpp:575
double GetTextAngle() const
Definition: eda_text.h:174
Definition: color4d.h:44
bool IsItalic() const
Definition: eda_text.h:180
EDA_TEXT_HJUSTIFY_T GetHorizJustify() const
Definition: eda_text.h:199
#define NULL
const wxSize & GetTextSize() const
Definition: eda_text.h:239
bool IsMultilineAllowed() const
Definition: eda_text.h:197
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:134
void GetLinePositions(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:423
const wxPoint & GetTextPos() const
Definition: eda_text.h:248
virtual const wxString & GetText() const
Return the string associated with the text object.
Definition: eda_text.h:127
virtual wxString GetShownText(int aDepth=0) const
Return the string actually shown after processing of the base text.
Definition: eda_text.h:134
COLOR4D is the color representation with 4 components: red, green, blue, alpha.
Definition: color4d.h:99

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

Referenced by GetEffectiveTextShape(), and PNS_KICAD_IFACE_BASE::syncTextItem().

Member Data Documentation

◆ m_e

◆ m_shown_text

wxString EDA_TEXT::m_shown_text
private

Definition at line 372 of file eda_text.h.

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

◆ m_shown_text_has_text_var_refs

bool EDA_TEXT::m_shown_text_has_text_var_refs
private

Definition at line 373 of file eda_text.h.

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

◆ m_text

wxString EDA_TEXT::m_text
private

Definition at line 371 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: