KiCad PCB EDA Suite
LIB_TEXTBOX Class Reference

#include <lib_textbox.h>

Inheritance diagram for LIB_TEXTBOX:
LIB_SHAPE EDA_TEXT LIB_ITEM EDA_SHAPE EDA_ITEM KIGFX::VIEW_ITEM INSPECTABLE

Public Types

enum  LIB_CONVERT : int { BASE = 1 , DEMORGAN = 2 }
 
enum  COMPARE_FLAGS : int { UNIT = 0x01 , EQUALITY = 0x02 , ERC = 0x04 }
 The list of flags used by the compare function. More...
 

Public Member Functions

 LIB_TEXTBOX (LIB_SYMBOL *aParent, int aLineWidth=0, FILL_T aFillType=FILL_T::NO_FILL, const wxString &aText=wxEmptyString)
 
 LIB_TEXTBOX (const LIB_TEXTBOX &aText)
 
 ~LIB_TEXTBOX ()
 
virtual wxString GetClass () const override
 Return the class name. More...
 
int GetTextMargin () const
 
VECTOR2I GetDrawPos () const override
 
wxString GetShownText (int aDepth=0, bool aAllowExtraText=true) const override
 Return the string actually shown after processing of the base text. More...
 
void MirrorHorizontally (const VECTOR2I &center)
 
void MirrorVertically (const VECTOR2I &center)
 
void Rotate (const VECTOR2I &aCenter, bool aRotateCCW) override
 Rotate the object about aCenter point. More...
 
bool HitTest (const VECTOR2I &aPosition, int aAccuracy=0) const override
 Test if aPosition is inside or on the boundary of this item. More...
 
bool HitTest (const BOX2I &aRect, bool aContained, int aAccuracy=0) const override
 Test if aRect intersects this item. More...
 
bool Matches (const EDA_SEARCH_DATA &aSearchData, void *aAuxData) const override
 Compare the item against the search criteria in aSearchData. More...
 
bool Replace (const EDA_SEARCH_DATA &aSearchData, void *aAuxData) override
 Perform a text replace using the find and replace criteria in aSearchData on items that support text find and replace. More...
 
virtual bool IsReplaceable () const override
 Override this method in any derived object that supports test find and replace. More...
 
wxString GetItemDescription (UNITS_PROVIDER *aUnitsProvider) const override
 Return a user-visible description string of this item. More...
 
BITMAPS GetMenuImage () const override
 Return a pointer to an image to be used in menus. More...
 
void Plot (PLOTTER *aPlotter, bool aBackground, const VECTOR2I &offset, const TRANSFORM &aTransform, bool aDimmed) const override
 Plot the draw item using the plot object. More...
 
EDA_ITEMClone () const override
 Create a duplicate of this item with linked list members set to NULL. More...
 
void GetMsgPanelInfo (EDA_DRAW_FRAME *aFrame, std::vector< MSG_PANEL_ITEM > &aList) override
 Display basic info (type, part and convert) about the current item in message panel. More...
 
void ViewGetLayers (int aLayers[], int &aCount) const override
 Return the all the layers within the VIEW the object is painted on. More...
 
wxString GetTypeName () const override
 Provide a user-consumable name of the object type. More...
 
STROKE_PARAMS GetStroke () const
 
void SetStroke (const STROKE_PARAMS &aStroke)
 
int GetPenWidth () const override
 
PLOT_DASH_TYPE GetEffectiveLineStyle () const
 
const BOX2I GetBoundingBox () const override
 
void BeginEdit (const VECTOR2I &aStartPoint) override
 Begin drawing a symbol library draw item at aPosition. More...
 
bool ContinueEdit (const VECTOR2I &aPosition) override
 Continue an edit in progress at aPosition. More...
 
void CalcEdit (const VECTOR2I &aPosition) override
 Calculate the attributes of an item at aPosition when it is being edited. More...
 
void EndEdit () override
 End an object editing action. More...
 
void SetEditState (int aState)
 
void AddPoint (const VECTOR2I &aPosition)
 
void Offset (const VECTOR2I &aOffset) override
 Set the drawing object by aOffset from the current position. More...
 
void MoveTo (const VECTOR2I &aPosition) override
 Move a draw object to aPosition. More...
 
VECTOR2I GetPosition () const override
 
void SetPosition (const VECTOR2I &aPosition) override
 
VECTOR2I GetCenter () const
 
virtual std::vector< SHAPE * > MakeEffectiveShapes (bool aEdgeOnly=false) const override
 Make a set of SHAPE objects representing the LIB_SHAPE. More...
 
void Normalize ()
 
void MirrorHorizontal (const VECTOR2I &aCenter) override
 Mirror the draw object along the horizontal (X) axis about aCenter point. More...
 
void MirrorVertical (const VECTOR2I &aCenter) override
 Mirror the draw object along the MirrorVertical (Y) axis about aCenter point. More...
 
virtual void Print (const RENDER_SETTINGS *aSettings, const VECTOR2I &aOffset, void *aData, const TRANSFORM &aTransform, bool aDimmed)
 Draw an item. More...
 
const wxString & GetDefaultFont () const
 
virtual int GetEffectivePenWidth (const RENDER_SETTINGS *aSettings) const
 
LIB_SYMBOLGetParent () const
 
bool operator== (const LIB_ITEM &aOther) const
 Test LIB_ITEM objects for equivalence. More...
 
bool operator== (const LIB_ITEM *aOther) const
 
bool operator< (const LIB_ITEM &aOther) const
 Test if another draw item is less than this draw object. More...
 
bool operator< (const EDA_ITEM &aItem) const
 Test if another item is less than this object. More...
 
void SetUnit (int aUnit)
 
int GetUnit () const
 
void SetConvert (int aConvert)
 
int GetConvert () const
 
void SetPrivate (bool aPrivate)
 
bool IsPrivate () const
 
KICAD_T Type () const
 Returns the type of object. More...
 
virtual void SetParent (EDA_ITEM *aParent)
 
bool IsModified () const
 
bool IsNew () const
 
bool IsMoving () const
 
bool IsSelected () const
 
bool IsEntered () const
 
bool IsBrightened () const
 
bool IsRollover () const
 
void SetSelected ()
 
void SetBrightened ()
 
void ClearSelected ()
 
void ClearBrightened ()
 
void SetModified ()
 
int GetState (EDA_ITEM_FLAGS type) const
 
void SetState (EDA_ITEM_FLAGS type, bool state)
 
EDA_ITEM_FLAGS GetStatus () const
 
void SetStatus (EDA_ITEM_FLAGS aStatus)
 
void SetFlags (EDA_ITEM_FLAGS aMask)
 
void XorFlags (EDA_ITEM_FLAGS aMask)
 
void ClearFlags (EDA_ITEM_FLAGS aMask=EDA_ITEM_ALL_FLAGS)
 
EDA_ITEM_FLAGS GetFlags () const
 
bool HasFlag (EDA_ITEM_FLAGS aFlag) const
 
EDA_ITEM_FLAGS GetEditFlags () const
 
void ClearTempFlags ()
 
void ClearEditFlags ()
 
virtual bool RenderAsBitmap (double aWorldScale) const
 
void SetIsShownAsBitmap (bool aBitmap)
 
bool IsShownAsBitmap () const
 
virtual bool IsType (const std::vector< KICAD_T > &aScanTypes) const
 Check whether the item is one of the listed types. More...
 
void SetForceVisible (bool aEnable)
 Set and clear force visible flag used to force the item to be drawn even if it's draw attribute is set to not visible. More...
 
bool IsForceVisible () const
 
virtual wxString GetFriendlyName () const
 
wxString GetFriendlyName () const
 
virtual const VECTOR2I GetFocusPosition () const
 Similar to GetPosition, but allows items to return their visual center rather than their anchor. More...
 
virtual VECTOR2I GetSortPosition () const
 Return the coordinates that should be used for sorting this element visually compared to other elements. More...
 
virtual INSPECT_RESULT Visit (INSPECTOR inspector, void *testData, const std::vector< KICAD_T > &aScanTypes)
 May be re-implemented for each derived class in order to handle all the types given by its member data. More...
 
wxString GetTypeDesc () const
 Return a translated description of the type for this EDA_ITEM for display in user facing messages. More...
 
virtual const BOX2I ViewBBox () const override
 Return the bounding box of the item covering all its layers. More...
 
virtual void ViewDraw (int aLayer, VIEW *aView) const
 Draw the parts of the object belonging to layer aLayer. More...
 
virtual double ViewGetLOD (int aLayer, VIEW *aView) const
 Return the level of detail (LOD) of the item. More...
 
VIEW_ITEM_DATA * viewPrivData () const
 
void ClearViewPrivData ()
 
bool Set (PROPERTY_BASE *aProperty, wxAny &aValue)
 
template<typename T >
bool Set (PROPERTY_BASE *aProperty, T aValue)
 
template<typename T >
bool Set (const wxString &aProperty, T aValue)
 
wxAny Get (PROPERTY_BASE *aProperty) const
 
template<typename T >
Get (PROPERTY_BASE *aProperty) const
 
template<typename T >
std::optional< T > Get (const wxString &aProperty) const
 
void SwapShape (EDA_SHAPE *aImage)
 
wxString ShowShape () const
 
wxString SHAPE_T_asString () const
 
bool IsAnnotationProxy () const
 
void SetIsAnnotationProxy (bool aIsProxy=true)
 
bool IsFilled () const
 
void SetFilled (bool aFlag)
 
void SetFillMode (FILL_T aFill)
 
FILL_T GetFillMode () const
 
bool IsClosed () const
 
COLOR4D GetFillColor () const
 
void SetFillColor (const COLOR4D &aColor)
 
void SetWidth (int aWidth)
 
int GetWidth () const
 
virtual int GetEffectiveWidth () const
 
void SetShape (SHAPE_T aShape)
 
SHAPE_T GetShape () const
 
const VECTOR2IGetStart () const
 Return the starting point of the graphic. More...
 
int GetStartY () const
 
int GetStartX () const
 
void SetStart (const VECTOR2I &aStart)
 
void SetStartY (int y)
 
void SetStartX (int x)
 
const VECTOR2IGetEnd () const
 Return the ending point of the graphic. More...
 
int GetEndY () const
 
int GetEndX () const
 
void SetEnd (const VECTOR2I &aEnd)
 
void SetEndY (int y)
 
void SetEndX (int x)
 
virtual VECTOR2I GetTopLeft () const
 
virtual VECTOR2I GetBotRight () const
 
virtual void SetTop (int val)
 
virtual void SetLeft (int val)
 
virtual void SetRight (int val)
 
virtual void SetBottom (int val)
 
void SetBezierC1 (const VECTOR2I &aPt)
 
const VECTOR2IGetBezierC1 () const
 
void SetBezierC2 (const VECTOR2I &aPt)
 
const VECTOR2IGetBezierC2 () const
 
VECTOR2I getCenter () const
 
void SetCenter (const VECTOR2I &aCenter)
 
void SetArcAngleAndEnd (const EDA_ANGLE &aAngle, bool aCheckNegativeAngle=false)
 Set the end point from the angle center and start. More...
 
EDA_ANGLE GetArcAngle () const
 
bool EndsSwapped () const
 Have the start and end points been swapped since they were set? More...
 
VECTOR2I GetArcMid () const
 
std::vector< VECTOR2IGetRectCorners () const
 
void CalcArcAngles (EDA_ANGLE &aStartAngle, EDA_ANGLE &aEndAngle) const
 Calc arc start and end angles such that aStartAngle < aEndAngle. More...
 
int GetRadius () const
 
void SetArcGeometry (const VECTOR2I &aStart, const VECTOR2I &aMid, const VECTOR2I &aEnd)
 Set the three controlling points for an arc. More...
 
void SetCachedArcData (const VECTOR2I &aStart, const VECTOR2I &aMid, const VECTOR2I &aEnd, const VECTOR2I &aCenter)
 Set the data used for mid point caching. More...
 
const std::vector< VECTOR2I > & GetBezierPoints () const
 
void DupPolyPointsList (std::vector< VECTOR2I > &aBuffer) const
 Duplicate the list of corners in a std::vector<VECTOR2I> More...
 
int GetPointCount () const
 
SHAPE_POLY_SETGetPolyShape ()
 
const SHAPE_POLY_SETGetPolyShape () const
 
bool IsPolyShapeValid () const
 
void SetPolyShape (const SHAPE_POLY_SET &aShape)
 
void SetPolyPoints (const std::vector< VECTOR2I > &aPoints)
 
void RebuildBezierToSegmentsPointsList (int aMinSegLen)
 Rebuild the m_bezierPoints vertex list that approximate the Bezier curve by a list of segments. More...
 
void ShapeGetMsgPanelInfo (EDA_DRAW_FRAME *aFrame, std::vector< MSG_PANEL_ITEM > &aList)
 
double GetLength () const
 Return the length of the track using the hypotenuse calculation. More...
 
void TransformShapeToPolygon (SHAPE_POLY_SET &aBuffer, int aClearance, int aError, ERROR_LOC aErrorLoc, bool ignoreLineWidth=false) const
 Convert the shape to a closed polygon. More...
 
int Compare (const EDA_SHAPE *aOther) const
 
virtual const wxString & GetText () const
 Return the string associated with the text object. More...
 
bool HasTextVars () const
 Indicates the ShownText has text var references which need to be processed. 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 aDefaultPenWidth=0) const
 The EffectiveTextPenWidth uses the text thickness if > 1 or aDefaultPenWidth. More...
 
virtual void SetTextAngle (const EDA_ANGLE &aAngle)
 
const EDA_ANGLEGetTextAngle () const
 
void SetTextAngleDegrees (double aOrientation)
 
double GetTextAngleDegrees () const
 
void SetItalic (bool aItalic)
 
bool IsItalic () const
 
void SetBold (bool aBold)
 
bool IsBold () const
 
virtual void SetVisible (bool aVisible)
 
virtual bool IsVisible () const
 
void SetMirrored (bool isMirrored)
 
bool IsMirrored () const
 
void SetMultilineAllowed (bool aAllow)
 
bool IsMultilineAllowed () const
 
void SetHorizJustify (GR_TEXT_H_ALIGN_T aType)
 
GR_TEXT_H_ALIGN_T GetHorizJustify () const
 
void SetVertJustify (GR_TEXT_V_ALIGN_T aType)
 
GR_TEXT_V_ALIGN_T GetVertJustify () const
 
void SetKeepUpright (bool aKeepUpright)
 
bool IsKeepUpright () const
 
void SetAttributes (const EDA_TEXT &aSrc)
 Set the text attributes from another instance. More...
 
void SetAttributes (const TEXT_ATTRIBUTES &aTextAttrs)
 
void SwapAttributes (EDA_TEXT &aTradingPartner)
 Swap the text attributes of the two involved instances. More...
 
void SwapText (EDA_TEXT &aTradingPartner)
 
void CopyText (const EDA_TEXT &aSrc)
 
const TEXT_ATTRIBUTESGetAttributes () const
 
bool Replace (const EDA_SEARCH_DATA &aSearchData)
 Helper function used in search and replace dialog. More...
 
bool IsDefaultFormatting () const
 
void SetFont (KIFONT::FONT *aFont)
 
KIFONT::FONTGetFont () const
 
wxString GetFontName () const
 
void SetLineSpacing (double aLineSpacing)
 
double GetLineSpacing () const
 
void SetTextSize (const VECTOR2I &aNewSize)
 
VECTOR2I GetTextSize () const
 
void SetTextWidth (int aWidth)
 
int GetTextWidth () const
 
void SetTextHeight (int aHeight)
 
int GetTextHeight () const
 
void SetTextColor (const COLOR4D &aColor)
 
COLOR4D GetTextColor () const
 
void SetTextPos (const VECTOR2I &aPoint)
 
const VECTOR2IGetTextPos () const
 
void SetTextX (int aX)
 
void SetTextY (int aY)
 
void Offset (const VECTOR2I &aOffset)
 
void Empty ()
 
void Print (const RENDER_SETTINGS *aSettings, const VECTOR2I &aOffset, const COLOR4D &aColor, OUTLINE_MODE aDisplay_mode=FILLED)
 Print this text object to the device context aDC. More...
 
void TransformBoundingBoxToPolygon (SHAPE_POLY_SET *aBuffer, int aClearance) 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 (bool aTriangulate=true, bool aUseTextRotation=true) const
 build a list of segments (SHAPE_SEGMENT) to describe a text shape. More...
 
virtual bool TextHitTest (const VECTOR2I &aPoint, int aAccuracy=0) const
 Test if aPoint is within the bounds of this object. More...
 
virtual bool TextHitTest (const BOX2I &aRect, bool aContains, int aAccuracy=0) const
 Test if object bounding box is contained within or intersects aRect. More...
 
BOX2I 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 () const
 
void GetLinePositions (std::vector< VECTOR2I > &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...
 
virtual EDA_ANGLE GetDrawRotation () const
 
virtual void ClearRenderCache ()
 
virtual void ClearBoundingBoxCache ()
 
std::vector< std::unique_ptr< KIFONT::GLYPH > > * GetRenderCache (const KIFONT::FONT *aFont, const wxString &forResolvedText, const VECTOR2I &aOffset={ 0, 0 }) const
 
void SetupRenderCache (const wxString &aResolvedText, const EDA_ANGLE &aAngle)
 
void AddRenderCacheGlyph (const SHAPE_POLY_SET &aPoly)
 
int Compare (const EDA_TEXT *aOther) const
 
virtual bool HasHyperlink () const
 
wxString GetHyperlink () const
 
void SetHyperlink (wxString aLink)
 
void RemoveHyperlink ()
 

Static Public Member Functions

static bool ClassOf (const EDA_ITEM *aItem)
 
template<class T >
static INSPECT_RESULT IterateForward (std::deque< T > &aList, INSPECTOR inspector, void *testData, const std::vector< KICAD_T > &scanTypes)
 This changes first parameter to avoid the DList and use the main queue instead. More...
 
template<class T >
static INSPECT_RESULT IterateForward (std::vector< T > &aList, INSPECTOR inspector, void *testData, const std::vector< KICAD_T > &scanTypes)
 Change first parameter to avoid the DList and use std::vector instead. More...
 
static bool Replace (const EDA_SEARCH_DATA &aSearchData, wxString &aText)
 Perform a text replace on aText using the find and replace criteria in aSearchData on items that support text find and replace. More...
 
static bool Sort (const EDA_ITEM *aLeft, const EDA_ITEM *aRight)
 Helper function to be used by the C++ STL sort algorithm for sorting a STL container of EDA_ITEM pointers. More...
 
static GR_TEXT_H_ALIGN_T MapHorizJustify (int aHorizJustify)
 
static GR_TEXT_V_ALIGN_T MapVertJustify (int aVertJustify)
 
static bool ValidateHyperlink (const wxString &aURL)
 Check if aURL is a valid hyperlink. More...
 
static bool IsGotoPageHref (const wxString &aHref, wxString *aDestination=nullptr)
 Check if aHref is a valid internal hyperlink. More...
 
static wxString GotoPageHref (const wxString &aDestination)
 Generate a href to a page in the current schematic. More...
 

Public Attributes

const KIID m_Uuid
 

Protected Member Functions

KIFONT::FONTgetDrawFont () const override
 
bool Matches (const wxString &aText, const EDA_SEARCH_DATA &aSearchData) const
 Compare aText against search criteria in aSearchData. More...
 
void setPosition (const VECTOR2I &aPos)
 
VECTOR2I getPosition () const
 
void move (const VECTOR2I &aMoveVector)
 
void rotate (const VECTOR2I &aRotCentre, const EDA_ANGLE &aAngle)
 
void flip (const VECTOR2I &aCentre, bool aFlipLeftRight)
 
void scale (double aScale)
 
const BOX2I getBoundingBox () const
 
void computeArcBBox (BOX2I &aBBox) const
 
bool hitTest (const VECTOR2I &aPosition, int aAccuracy=0) const
 
bool hitTest (const BOX2I &aRect, bool aContained, int aAccuracy=0) const
 
const std::vector< VECTOR2IbuildBezierToSegmentsPointsList (int aMinSegLen) const
 
void beginEdit (const VECTOR2I &aStartPoint)
 
bool continueEdit (const VECTOR2I &aPosition)
 
void calcEdit (const VECTOR2I &aPosition)
 
void endEdit (bool aClosed=true)
 Finishes editing the shape. More...
 
void setEditState (int aState)
 
std::vector< SHAPE * > makeEffectiveShapes (bool aEdgeOnly, bool aLineChainOnly=false) const
 Make a set of SHAPE objects representing the EDA_SHAPE. More...
 
void cacheShownText ()
 
void printOneLineOfText (const RENDER_SETTINGS *aSettings, const VECTOR2I &aOffset, const COLOR4D &aColor, OUTLINE_MODE aFillMode, const wxString &aText, const VECTOR2I &aPos)
 Print each line of this EDA_TEXT. More...
 

Protected Attributes

int m_unit
 Unit identification for multiple parts per package. More...
 
int m_convert
 Shape identification for alternate body styles. More...
 
bool m_private
 Private items are shown only in the Symbol Editor. More...
 
EDA_ITEM_FLAGS m_status
 
EDA_ITEMm_parent
 Linked list: Link (parent struct) More...
 
bool m_forceVisible
 
EDA_ITEM_FLAGS m_flags
 
bool m_endsSwapped
 
SHAPE_T m_shape
 
STROKE_PARAMS m_stroke
 
FILL_T m_fill
 
COLOR4D m_fillColor
 
VECTOR2I m_start
 
VECTOR2I m_end
 
VECTOR2I m_arcCenter
 
ARC_MID m_arcMidData
 
VECTOR2I m_bezierC1
 
VECTOR2I m_bezierC2
 
std::vector< VECTOR2Im_bezierPoints
 
SHAPE_POLY_SET m_poly
 
int m_editState
 
bool m_annotationProxy
 
wxString m_hyperlink
 A hyperlink URL. More...
 

Private Member Functions

int compare (const LIB_ITEM &aOther, int aCompareFlags=0) const override
 Provide the draw object specific comparison called by the == and < operators. More...
 
void print (const RENDER_SETTINGS *aSettings, const VECTOR2I &aOffset, void *aData, const TRANSFORM &aTransform, bool aDimmed) override
 Print the item to aDC. More...
 
EDA_ANGLE getParentOrientation () const override
 
VECTOR2I getParentPosition () const override
 

Private Attributes

KICAD_T m_structType
 Run time identification, keep private so it can never be changed after a ctor sets it. More...
 
VIEW_ITEM_DATA * m_viewPrivData
 
wxString m_text
 
wxString m_shown_text
 
bool m_shown_text_has_text_var_refs
 
std::reference_wrapper< const EDA_IU_SCALEm_IuScale
 
wxString m_render_cache_text
 
EDA_ANGLE m_render_cache_angle
 
VECTOR2I m_render_cache_offset
 
std::vector< std::unique_ptr< KIFONT::GLYPH > > m_render_cache
 
bool m_bounding_box_cache_valid
 
VECTOR2I m_bounding_box_cache_pos
 
int m_bounding_box_cache_line
 
bool m_bounding_box_cache_inverted
 
BOX2I m_bounding_box_cache
 
TEXT_ATTRIBUTES m_attributes
 
VECTOR2I m_pos
 

Detailed Description

Definition at line 34 of file lib_textbox.h.

Member Enumeration Documentation

◆ COMPARE_FLAGS

enum LIB_ITEM::COMPARE_FLAGS : int
inherited

The list of flags used by the compare function.

  • UNIT This flag relaxes unit, conversion and pin number constraints. It is used for LIB_ITEM object unit comparisons.
  • EQUALITY This flag relaxes ordering contstraints so that fields, etc. don't have to appear in the same order to be considered equal.
  • ERC This flag relaxes constraints on data that is settable in the schematic editor. It compares only symbol-editor-only data.
Enumerator
UNIT 
EQUALITY 
ERC 

Definition at line 82 of file lib_item.h.

83 {
84 UNIT = 0x01,
85 EQUALITY = 0x02,
86 ERC = 0x04
87 };
@ EQUALITY
Definition: lib_item.h:85
@ UNIT
Definition: lib_item.h:84

◆ LIB_CONVERT

enum LIB_ITEM::LIB_CONVERT : int
inherited
Enumerator
BASE 
DEMORGAN 

Definition at line 70 of file lib_item.h.

70: int { BASE = 1, DEMORGAN = 2 };
@ BASE
Definition: lib_item.h:70
@ DEMORGAN
Definition: lib_item.h:70

Constructor & Destructor Documentation

◆ LIB_TEXTBOX() [1/2]

LIB_TEXTBOX::LIB_TEXTBOX ( LIB_SYMBOL aParent,
int  aLineWidth = 0,
FILL_T  aFillType = FILL_T::NO_FILL,
const wxString &  aText = wxEmptyString 
)

Definition at line 45 of file lib_textbox.cpp.

46 :
47 LIB_SHAPE( aParent, SHAPE_T::RECT, aLineWidth, aFillType, LIB_TEXTBOX_T ),
49{
54 SetMultilineAllowed( true );
55}
constexpr EDA_IU_SCALE schIUScale
Definition: base_units.h:111
void SetVertJustify(GR_TEXT_V_ALIGN_T aType)
Definition: eda_text.cpp:250
EDA_TEXT(const EDA_IU_SCALE &aIuScale, const wxString &aText=wxEmptyString)
Definition: eda_text.cpp:92
void SetTextSize(const VECTOR2I &aNewSize)
Definition: eda_text.cpp:349
void SetMultilineAllowed(bool aAllow)
Definition: eda_text.cpp:234
void SetHorizJustify(GR_TEXT_H_ALIGN_T aType)
Definition: eda_text.cpp:242
LIB_SHAPE(LIB_SYMBOL *aParent, SHAPE_T aShape, int aLineWidth=0, FILL_T aFillType=FILL_T::NO_FILL, KICAD_T aType=LIB_SHAPE_T)
Definition: lib_shape.cpp:37
#define DEFAULT_TEXT_SIZE
Ratio of the font height to the baseline of the text above the wire.
constexpr int MilsToIU(int mils) const
Definition: base_units.h:94
@ GR_TEXT_H_ALIGN_LEFT
@ GR_TEXT_V_ALIGN_TOP
@ LIB_TEXTBOX_T
Definition: typeinfo.h:201
VECTOR2< int > VECTOR2I
Definition: vector2d.h:590

References DEFAULT_TEXT_SIZE, GR_TEXT_H_ALIGN_LEFT, GR_TEXT_V_ALIGN_TOP, EDA_IU_SCALE::MilsToIU(), RECT, schIUScale, EDA_TEXT::SetHorizJustify(), EDA_TEXT::SetMultilineAllowed(), EDA_TEXT::SetTextSize(), EDA_TEXT::SetVertJustify(), and text.

Referenced by Clone().

◆ LIB_TEXTBOX() [2/2]

LIB_TEXTBOX::LIB_TEXTBOX ( const LIB_TEXTBOX aText)

Definition at line 58 of file lib_textbox.cpp.

58 :
59 LIB_SHAPE( aText ),
60 EDA_TEXT( aText )
61{ }

◆ ~LIB_TEXTBOX()

LIB_TEXTBOX::~LIB_TEXTBOX ( )
inline

Definition at line 42 of file lib_textbox.h.

42{ }

Member Function Documentation

◆ AddPoint()

void LIB_SHAPE::AddPoint ( const VECTOR2I aPosition)
inherited

Definition at line 518 of file lib_shape.cpp.

519{
520 if( GetShape() == SHAPE_T::POLY )
521 {
522 if( m_poly.IsEmpty() )
524
525 m_poly.Outline( 0 ).Append( aPosition, true );
526 }
527 else
528 {
530 }
531}
SHAPE_T GetShape() const
Definition: eda_shape.h:113
wxString SHAPE_T_asString() const
Definition: eda_shape.cpp:75
SHAPE_POLY_SET m_poly
Definition: eda_shape.h:379
void Append(int aX, int aY, bool aAllowDuplication=false)
Append a new point at the end of the line chain.
bool IsEmpty() const
SHAPE_LINE_CHAIN & Outline(int aIndex)
int NewOutline()
Creates a new hole in a given outline.
#define UNIMPLEMENTED_FOR(type)
Definition: macros.h:120

References SHAPE_LINE_CHAIN::Append(), EDA_SHAPE::GetShape(), SHAPE_POLY_SET::IsEmpty(), EDA_SHAPE::m_poly, SHAPE_POLY_SET::NewOutline(), SHAPE_POLY_SET::Outline(), POLY, EDA_SHAPE::SHAPE_T_asString(), and UNIMPLEMENTED_FOR.

Referenced by PANEL_EESCHEMA_COLOR_SETTINGS::createPreviewItems(), HelperGeneratePowerPortGraphics(), SCH_EAGLE_PLUGIN::loadFrame(), CADSTAR_SCH_ARCHIVE_LOADER::loadLibrarySymbolShapeVertices(), SCH_LEGACY_PLUGIN_CACHE::loadPolyLine(), SCH_EAGLE_PLUGIN::loadSymbolPolyLine(), SCH_EAGLE_PLUGIN::loadSymbolWire(), SCH_ALTIUM_PLUGIN::ParseBezier(), SCH_ALTIUM_PLUGIN::ParseLine(), SCH_ALTIUM_PLUGIN::ParsePolygon(), and SCH_ALTIUM_PLUGIN::ParsePolyline().

◆ AddRenderCacheGlyph()

void EDA_TEXT::AddRenderCacheGlyph ( const SHAPE_POLY_SET aPoly)
inherited

Definition at line 493 of file eda_text.cpp.

494{
495 m_render_cache.emplace_back( std::make_unique<KIFONT::OUTLINE_GLYPH>( aPoly ) );
496}
std::vector< std::unique_ptr< KIFONT::GLYPH > > m_render_cache
Definition: eda_text.h:398

References EDA_TEXT::m_render_cache.

◆ beginEdit()

void EDA_SHAPE::beginEdit ( const VECTOR2I aStartPoint)
protectedinherited

Definition at line 1265 of file eda_shape.cpp.

1266{
1267 switch( GetShape() )
1268 {
1269 case SHAPE_T::SEGMENT:
1270 case SHAPE_T::CIRCLE:
1271 case SHAPE_T::RECT:
1272 SetStart( aPosition );
1273 SetEnd( aPosition );
1274 break;
1275
1276 case SHAPE_T::ARC:
1277 SetArcGeometry( aPosition, aPosition, aPosition );
1278 m_editState = 1;
1279 break;
1280
1281 case SHAPE_T::POLY:
1283 m_poly.Outline( 0 ).SetClosed( false );
1284
1285 // Start and end of the first segment (co-located for now)
1286 m_poly.Outline( 0 ).Append( aPosition );
1287 m_poly.Outline( 0 ).Append( aPosition, true );
1288 break;
1289
1290 default:
1292 }
1293}
int m_editState
Definition: eda_shape.h:381
void SetStart(const VECTOR2I &aStart)
Definition: eda_shape.h:124
void SetEnd(const VECTOR2I &aEnd)
Definition: eda_shape.h:149
void SetArcGeometry(const VECTOR2I &aStart, const VECTOR2I &aMid, const VECTOR2I &aEnd)
Set the three controlling points for an arc.
Definition: eda_shape.cpp:555
void SetClosed(bool aClosed)
Mark the line chain as closed (i.e.

References SHAPE_LINE_CHAIN::Append(), ARC, CIRCLE, EDA_SHAPE::GetShape(), EDA_SHAPE::m_editState, EDA_SHAPE::m_poly, SHAPE_POLY_SET::NewOutline(), SHAPE_POLY_SET::Outline(), POLY, RECT, SEGMENT, EDA_SHAPE::SetArcGeometry(), SHAPE_LINE_CHAIN::SetClosed(), EDA_SHAPE::SetEnd(), EDA_SHAPE::SetStart(), EDA_SHAPE::SHAPE_T_asString(), and UNIMPLEMENTED_FOR.

Referenced by SCH_SHAPE::BeginEdit(), and LIB_SHAPE::BeginEdit().

◆ BeginEdit()

void LIB_SHAPE::BeginEdit ( const VECTOR2I aPosition)
inlineoverridevirtualinherited

Begin drawing a symbol library draw item at aPosition.

It typically would be called on a left click when a draw tool is selected in the symbol library editor and one of the graphics tools is selected.

Parameters
aPositionThe position in drawing coordinates where the drawing was started. May or may not be required depending on the item being drawn.

Reimplemented from LIB_ITEM.

Definition at line 72 of file lib_shape.h.

72{ beginEdit( aStartPoint ); }
void beginEdit(const VECTOR2I &aStartPoint)
Definition: eda_shape.cpp:1265

References EDA_SHAPE::beginEdit().

Referenced by SYMBOL_EDITOR_DRAWING_TOOLS::DrawShape().

◆ buildBezierToSegmentsPointsList()

const std::vector< VECTOR2I > EDA_SHAPE::buildBezierToSegmentsPointsList ( int  aMinSegLen) const
protectedinherited

Definition at line 431 of file eda_shape.cpp.

432{
433 std::vector<VECTOR2I> bezierPoints;
434
435 // Rebuild the m_BezierPoints vertex list that approximate the Bezier curve
436 std::vector<VECTOR2I> ctrlPoints = { m_start, m_bezierC1, m_bezierC2, m_end };
437 BEZIER_POLY converter( ctrlPoints );
438 converter.GetPoly( bezierPoints, aMinSegLen );
439
440 return bezierPoints;
441}
Bezier curves to polygon converter.
Definition: bezier_curves.h:38
VECTOR2I m_start
Definition: eda_shape.h:369
VECTOR2I m_end
Definition: eda_shape.h:370
VECTOR2I m_bezierC1
Definition: eda_shape.h:375
VECTOR2I m_bezierC2
Definition: eda_shape.h:376

References BEZIER_POLY::GetPoly(), EDA_SHAPE::m_bezierC1, EDA_SHAPE::m_bezierC2, EDA_SHAPE::m_end, and EDA_SHAPE::m_start.

Referenced by EDA_SHAPE::makeEffectiveShapes(), and EDA_SHAPE::RebuildBezierToSegmentsPointsList().

◆ cacheShownText()

void EDA_TEXT::cacheShownText ( )
protectedinherited

Definition at line 410 of file eda_text.cpp.

411{
412 if( m_text.IsEmpty() )
413 {
414 m_shown_text = wxEmptyString;
416 }
417 else
418 {
420 m_shown_text_has_text_var_refs = m_shown_text.Contains( wxT( "${" ) );
421 }
422
425}
wxString m_text
Definition: eda_text.h:389
bool m_shown_text_has_text_var_refs
Definition: eda_text.h:391
wxString m_shown_text
Definition: eda_text.h:390
bool m_bounding_box_cache_valid
Definition: eda_text.h:400
virtual void ClearRenderCache()
Definition: eda_text.cpp:440
wxString UnescapeString(const wxString &aSource)

References EDA_TEXT::ClearRenderCache(), EDA_TEXT::m_bounding_box_cache_valid, EDA_TEXT::m_shown_text, EDA_TEXT::m_shown_text_has_text_var_refs, EDA_TEXT::m_text, and UnescapeString().

Referenced by EDA_TEXT::EDA_TEXT(), EDA_TEXT::Replace(), and EDA_TEXT::SetText().

◆ CalcArcAngles()

void EDA_SHAPE::CalcArcAngles ( EDA_ANGLE aStartAngle,
EDA_ANGLE aEndAngle 
) const
inherited

Calc arc start and end angles such that aStartAngle < aEndAngle.

Each may be between -360.0 and 360.0.

Definition at line 502 of file eda_shape.cpp.

503{
504 VECTOR2D startRadial( GetStart() - getCenter() );
505 VECTOR2D endRadial( GetEnd() - getCenter() );
506
507 aStartAngle = EDA_ANGLE( startRadial );
508 aEndAngle = EDA_ANGLE( endRadial );
509
510 if( aEndAngle == aStartAngle )
511 aEndAngle = aStartAngle + ANGLE_360; // ring, not null
512
513 if( aStartAngle > aEndAngle )
514 {
515 if( aEndAngle < ANGLE_0 )
516 aEndAngle.Normalize();
517 else
518 aStartAngle = aStartAngle.Normalize() - ANGLE_360;
519 }
520}
EDA_ANGLE Normalize()
Definition: eda_angle.h:249
VECTOR2I getCenter() const
Definition: eda_shape.cpp:444
const VECTOR2I & GetEnd() const
Return the ending point of the graphic.
Definition: eda_shape.h:145
const VECTOR2I & GetStart() const
Return the starting point of the graphic.
Definition: eda_shape.h:120
static constexpr EDA_ANGLE & ANGLE_360
Definition: eda_angle.h:435
static constexpr EDA_ANGLE & ANGLE_0
Definition: eda_angle.h:429

References ANGLE_0, ANGLE_360, EDA_SHAPE::getCenter(), EDA_SHAPE::GetEnd(), EDA_SHAPE::GetStart(), and EDA_ANGLE::Normalize().

Referenced by EDA_SHAPE::computeArcBBox(), KIGFX::PCB_PAINTER::draw(), KIGFX::SCH_PAINTER::draw(), EDA_SHAPE::GetArcAngle(), EDA_SHAPE::hitTest(), LIB_SHAPE::Plot(), LIB_SHAPE::print(), and SCH_LEGACY_PLUGIN_CACHE::saveArc().

◆ calcEdit()

void EDA_SHAPE::calcEdit ( const VECTOR2I aPosition)
protectedinherited

Definition at line 1323 of file eda_shape.cpp.

1324{
1325#define sq( x ) pow( x, 2 )
1326
1327 switch( GetShape() )
1328 {
1329 case SHAPE_T::SEGMENT:
1330 case SHAPE_T::CIRCLE:
1331 case SHAPE_T::RECT:
1332 SetEnd( aPosition );
1333 break;
1334
1335 case SHAPE_T::ARC:
1336 {
1337 int radius = GetRadius();
1338
1339 // Edit state 0: drawing: place start
1340 // Edit state 1: drawing: place end (center calculated for 90-degree subtended angle)
1341 // Edit state 2: point edit: move start (center calculated for invariant subtended angle)
1342 // Edit state 3: point edit: move end (center calculated for invariant subtended angle)
1343 // Edit state 4: point edit: move center
1344 // Edit state 5: point edit: move arc-mid-point
1345
1346 switch( m_editState )
1347 {
1348 case 0:
1349 SetArcGeometry( aPosition, aPosition, aPosition );
1350 return;
1351
1352 case 1:
1353 m_end = aPosition;
1354 radius = KiROUND( sqrt( sq( GetLineLength( m_start, m_end ) ) / 2.0 ) );
1355 break;
1356
1357 case 2:
1358 case 3:
1359 {
1360 VECTOR2I v = m_start - m_end;
1361 double chordBefore = sq( v.x ) + sq( v.y );
1362
1363 if( m_editState == 2 )
1364 m_start = aPosition;
1365 else
1366 m_end = aPosition;
1367
1368 v = m_start - m_end;
1369 double chordAfter = sq( v.x ) + sq( v.y );
1370 double ratio = chordAfter / chordBefore;
1371
1372 if( ratio != 0 )
1373 {
1374 radius = std::max( int( sqrt( sq( radius ) * ratio ) ) + 1,
1375 int( sqrt( chordAfter ) / 2 ) + 1 );
1376 }
1377 }
1378 break;
1379
1380 case 4:
1381 {
1382 double radialA = GetLineLength( m_start, aPosition );
1383 double radialB = GetLineLength( m_end, aPosition );
1384 radius = int( ( radialA + radialB ) / 2.0 ) + 1;
1385 }
1386 break;
1387
1388 case 5:
1389 SetArcGeometry( GetStart(), aPosition, GetEnd() );
1390 return;
1391 }
1392
1393 // Calculate center based on start, end, and radius
1394 //
1395 // Let 'l' be the length of the chord and 'm' the middle point of the chord
1396 double l = GetLineLength( m_start, m_end );
1397 VECTOR2I m = ( m_start + m_end ) / 2;
1398
1399 // Calculate 'd', the vector from the chord midpoint to the center
1400 VECTOR2I d;
1401 d.x = KiROUND( sqrt( sq( radius ) - sq( l/2 ) ) * ( m_start.y - m_end.y ) / l );
1402 d.y = KiROUND( sqrt( sq( radius ) - sq( l/2 ) ) * ( m_end.x - m_start.x ) / l );
1403
1404 VECTOR2I c1 = m + d;
1405 VECTOR2I c2 = m - d;
1406
1407 // Solution gives us 2 centers; we need to pick one:
1408 switch( m_editState )
1409 {
1410 case 1:
1411 // Keep arc clockwise while drawing i.e. arc angle = 90 deg.
1412 // it can be 90 or 270 deg depending on the arc center choice (c1 or c2)
1413 m_arcCenter = c1; // first trial
1414
1415 if( GetArcAngle() > ANGLE_180 )
1416 m_arcCenter = c2;
1417
1418 break;
1419
1420 case 2:
1421 case 3:
1422 // Pick the one of c1, c2 to keep arc <= 180 deg
1423 m_arcCenter = c1; // first trial
1424
1425 if( GetArcAngle() > ANGLE_180 )
1426 m_arcCenter = c2;
1427
1428 break;
1429
1430 case 4:
1431 // Pick the one closer to the mouse position
1432 m_arcCenter = GetLineLength( c1, aPosition ) < GetLineLength( c2, aPosition ) ? c1 : c2;
1433
1434 // keep arc angle <= 180 deg
1435 if( GetArcAngle() > ANGLE_180 )
1436 std::swap( m_start, m_end );
1437
1438 break;
1439 }
1440 }
1441 break;
1442
1443 case SHAPE_T::POLY:
1444 m_poly.Outline( 0 ).SetPoint( m_poly.Outline( 0 ).GetPointCount() - 1, aPosition );
1445 break;
1446
1447 default:
1449 }
1450}
EDA_ANGLE GetArcAngle() const
Definition: eda_shape.cpp:585
int GetRadius() const
Definition: eda_shape.cpp:523
VECTOR2I m_arcCenter
Definition: eda_shape.h:372
void SetPoint(int aIndex, const VECTOR2I &aPos)
Move a point to a specific location.
virtual size_t GetPointCount() const override
static constexpr EDA_ANGLE & ANGLE_180
Definition: eda_angle.h:433
#define sq(x)
double GetLineLength(const VECTOR2I &aPointA, const VECTOR2I &aPointB)
Return the length of a line segment defined by aPointA and aPointB.
Definition: trigo.h:188
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:85

References ANGLE_180, ARC, CIRCLE, EDA_SHAPE::GetArcAngle(), EDA_SHAPE::GetEnd(), GetLineLength(), SHAPE_LINE_CHAIN::GetPointCount(), EDA_SHAPE::GetRadius(), EDA_SHAPE::GetShape(), EDA_SHAPE::GetStart(), KiROUND(), EDA_SHAPE::m_arcCenter, EDA_SHAPE::m_editState, EDA_SHAPE::m_end, EDA_SHAPE::m_poly, EDA_SHAPE::m_start, SHAPE_POLY_SET::Outline(), POLY, RECT, SEGMENT, EDA_SHAPE::SetArcGeometry(), EDA_SHAPE::SetEnd(), SHAPE_LINE_CHAIN::SetPoint(), EDA_SHAPE::SHAPE_T_asString(), sq, UNIMPLEMENTED_FOR, VECTOR2< T >::x, and VECTOR2< T >::y.

Referenced by SCH_SHAPE::CalcEdit(), and LIB_SHAPE::CalcEdit().

◆ CalcEdit()

void LIB_SHAPE::CalcEdit ( const VECTOR2I aPosition)
inlineoverridevirtualinherited

Calculate the attributes of an item at aPosition when it is being edited.

This method gets called by the Draw() method when the item is being edited. This probably should be a pure virtual method but bezier curves are not yet editable in the symbol library editor. Therefore, the default method does nothing.

Parameters
aPositionThe current mouse position in drawing coordinates.

Reimplemented from LIB_ITEM.

Definition at line 74 of file lib_shape.h.

74{ calcEdit( aPosition ); }
void calcEdit(const VECTOR2I &aPosition)
Definition: eda_shape.cpp:1323

References EDA_SHAPE::calcEdit().

Referenced by SYMBOL_EDITOR_DRAWING_TOOLS::DrawShape(), and EE_POINT_EDITOR::updateParentItem().

◆ ClassOf()

static bool LIB_TEXTBOX::ClassOf ( const EDA_ITEM aItem)
inlinestatic

Definition at line 44 of file lib_textbox.h.

45 {
46 return aItem && aItem->Type() == LIB_TEXTBOX_T;
47 }
KICAD_T Type() const
Returns the type of object.
Definition: eda_item.h:97

References LIB_TEXTBOX_T, and EDA_ITEM::Type().

◆ ClearBoundingBoxCache()

void EDA_TEXT::ClearBoundingBoxCache ( )
virtualinherited

◆ ClearBrightened()

void EDA_ITEM::ClearBrightened ( )
inlineinherited

Definition at line 119 of file eda_item.h.

void ClearFlags(EDA_ITEM_FLAGS aMask=EDA_ITEM_ALL_FLAGS)
Definition: eda_item.h:141
#define BRIGHTENED
item is drawn with a bright contour

References BRIGHTENED, and EDA_ITEM::ClearFlags().

Referenced by SCH_EDIT_FRAME::FocusOnItem(), PCB_BASE_FRAME::FocusOnItems(), EE_SELECTION_TOOL::unhighlight(), PL_SELECTION_TOOL::unhighlight(), PCB_SELECTION_TOOL::unhighlightInternal(), and SCH_EDITOR_CONTROL::UpdateNetHighlighting().

◆ ClearEditFlags()

◆ ClearFlags()

void EDA_ITEM::ClearFlags ( EDA_ITEM_FLAGS  aMask = EDA_ITEM_ALL_FLAGS)
inlineinherited

Definition at line 141 of file eda_item.h.

141{ m_flags &= ~aMask; }
EDA_ITEM_FLAGS m_flags
Definition: eda_item.h:498

References EDA_ITEM::m_flags.

Referenced by FOOTPRINT_VIEWER_FRAME::AddFootprintToPCB(), PNS_KICAD_IFACE::AddItem(), SCH_EDIT_FRAME::AddItemToScreenAndUndoList(), SCH_MOVE_TOOL::AlignElements(), SCH_EDIT_TOOL::BreakWire(), FOOTPRINT::BuildCourtyardCaches(), EDA_ITEM::ClearBrightened(), EDA_ITEM::ClearEditFlags(), EDA_ITEM::ClearSelected(), EDA_ITEM::ClearTempFlags(), SCH_EDIT_FRAME::ConvertPart(), SYMBOL_EDITOR_EDIT_TOOL::Copy(), FOOTPRINT_EDITOR_CONTROL::CreateFootprint(), SYMBOL_EDITOR_PIN_TOOL::CreateImagePins(), MICROWAVE_TOOL::createMicrowaveInductor(), DIALOG_PAD_PROPERTIES::DIALOG_PAD_PROPERTIES(), BOARD_COMMIT::dirtyIntersectingZones(), PCB_TOOL_BASE::doInteractiveItemPlacement(), KIGFX::SCH_PAINTER::draw(), SCH_ITEM::Duplicate(), SYMBOL_EDITOR_EDIT_TOOL::Duplicate(), PCB_EDIT_FRAME::ExchangeFootprint(), PCB_SELECTION_TOOL::ExitGroup(), SYMBOL_EDIT_FRAME::GetSymbolFromRedoList(), SYMBOL_EDIT_FRAME::GetSymbolFromUndoList(), FOOTPRINT_EDITOR_CONTROL::ImportFootprint(), DRC_INTERACTIVE_COURTYARD_CLEARANCE::Init(), EE_COLLECTOR::Inspect(), FOOTPRINT_EDIT_FRAME::LoadFootprintFromBoard(), FOOTPRINT_EDIT_FRAME::LoadFootprintFromLibrary(), FOOTPRINT_EDITOR_CONTROL::NewFootprint(), DIALOG_SYMBOL_PROPERTIES::OnUnitChoice(), FOOTPRINT_EDIT_FRAME::OpenProjectFiles(), PCB_BASE_FRAME::PlaceFootprint(), SYMBOL_EDITOR_PIN_TOOL::PlacePin(), BOARD_COMMIT::Push(), PCB_SELECTION_TOOL::RebuildSelection(), PAD_TOOL::RecombinePad(), SCH_EDIT_TOOL::RepeatDrawItem(), SYMBOL_EDIT_FRAME::RollbackSymbolFromUndo(), DRC_TEST_PROVIDER_DISALLOW::Run(), FOOTPRINT_EDIT_FRAME::SaveFootprintToBoard(), SCH_SEXPR_PLUGIN_CACHE::savePin(), EE_SELECTION_TOOL::selectMultiple(), SCH_EDIT_FRAME::SelectUnit(), EDA_ITEM::SetIsShownAsBitmap(), BOARD_COMMIT::Stage(), DIALOG_SYMBOL_PROPERTIES::TransferDataFromWindow(), SCH_DRAWING_TOOLS::TwoClickPlace(), and EE_SELECTION_TOOL::unhighlight().

◆ ClearRenderCache()

◆ ClearSelected()

◆ ClearTempFlags()

void EDA_ITEM::ClearTempFlags ( )
inlineinherited

Definition at line 153 of file eda_item.h.

154 {
156 }
#define IS_LINKED
Used in calculation to mark linked items (temporary use)
#define SELECTED_BY_DRAG
Item was algorithmically selected as a dragged item.
#define SKIP_STRUCT
flag indicating that the structure should be ignored
#define CANDIDATE
flag indicating that the structure is connected

References CANDIDATE, EDA_ITEM::ClearFlags(), IS_LINKED, SELECTED_BY_DRAG, and SKIP_STRUCT.

Referenced by PCB_EDIT_FRAME::OpenProjectFiles(), and SCH_EDIT_FRAME::PutDataInPreviousState().

◆ ClearViewPrivData()

void KIGFX::VIEW_ITEM::ClearViewPrivData ( )
inlineinherited

Definition at line 143 of file view_item.h.

144 {
145 m_viewPrivData = nullptr;
146 }
VIEW_ITEM_DATA * m_viewPrivData
Definition: view_item.h:151

References KIGFX::VIEW_ITEM::m_viewPrivData.

Referenced by KIGFX::VIEW::OnDestroy().

◆ Clone()

EDA_ITEM * LIB_TEXTBOX::Clone ( ) const
inlineoverridevirtual

Create a duplicate of this item with linked list members set to NULL.

The default version will return NULL in release builds and likely crash the program. In debug builds, a warning message indicating the derived class has not implemented cloning. This really should be a pure virtual function. Due to the fact that there are so many objects derived from EDA_ITEM, the decision was made to return NULL until all the objects derived from EDA_ITEM implement cloning. Once that happens, this function should be made pure.

Returns
A clone of the item.

Reimplemented from LIB_SHAPE.

Definition at line 87 of file lib_textbox.h.

88 {
89 return new LIB_TEXTBOX( *this );
90 }
LIB_TEXTBOX(LIB_SYMBOL *aParent, int aLineWidth=0, FILL_T aFillType=FILL_T::NO_FILL, const wxString &aText=wxEmptyString)
Definition: lib_textbox.cpp:45

References LIB_TEXTBOX().

◆ Compare() [1/2]

int EDA_SHAPE::Compare ( const EDA_SHAPE aOther) const
inherited

Definition at line 1508 of file eda_shape.cpp.

1509{
1510#define EPSILON 2 // Should be enough for rounding errors on calculated items
1511
1512#define TEST( a, b ) { if( a != b ) return a - b; }
1513#define TEST_E( a, b ) { if( abs( a - b ) > EPSILON ) return a - b; }
1514#define TEST_PT( a, b ) { TEST_E( a.x, b.x ); TEST_E( a.y, b.y ); }
1515
1516 TEST_PT( m_start, aOther->m_start );
1517 TEST_PT( m_end, aOther->m_end );
1518
1519 TEST( (int) m_shape, (int) aOther->m_shape );
1520
1521 if( m_shape == SHAPE_T::ARC )
1522 {
1523 TEST_PT( m_arcCenter, aOther->m_arcCenter );
1524 }
1525 else if( m_shape == SHAPE_T::BEZIER )
1526 {
1527 TEST_PT( m_bezierC1, aOther->m_bezierC1 );
1528 TEST_PT( m_bezierC2, aOther->m_bezierC2 );
1529 }
1530 else if( m_shape == SHAPE_T::POLY )
1531 {
1533 }
1534
1535 for( size_t ii = 0; ii < m_bezierPoints.size(); ++ii )
1536 TEST_PT( m_bezierPoints[ii], aOther->m_bezierPoints[ii] );
1537
1538 for( int ii = 0; ii < m_poly.TotalVertices(); ++ii )
1539 TEST_PT( m_poly.CVertex( ii ), aOther->m_poly.CVertex( ii ) );
1540
1541 TEST_E( m_stroke.GetWidth(), aOther->m_stroke.GetWidth() );
1542 TEST( (int) m_stroke.GetPlotStyle(), (int) aOther->m_stroke.GetPlotStyle() );
1543 TEST( (int) m_fill, (int) aOther->m_fill );
1544
1545 return 0;
1546}
SHAPE_T m_shape
Definition: eda_shape.h:364
std::vector< VECTOR2I > m_bezierPoints
Definition: eda_shape.h:378
STROKE_PARAMS m_stroke
Definition: eda_shape.h:365
FILL_T m_fill
Definition: eda_shape.h:366
int TotalVertices() const
Delete aIdx-th polygon from the set.
const VECTOR2I & CVertex(int aIndex, int aOutline, int aHole) const
Return the aGlobalIndex-th vertex in the poly set.
int GetWidth() const
Definition: stroke_params.h:98
PLOT_DASH_TYPE GetPlotStyle() const
#define TEST_PT(a, b)
#define TEST(a, b)
#define TEST_E(a, b)

References ARC, BEZIER, SHAPE_POLY_SET::CVertex(), STROKE_PARAMS::GetPlotStyle(), STROKE_PARAMS::GetWidth(), EDA_SHAPE::m_arcCenter, EDA_SHAPE::m_bezierC1, EDA_SHAPE::m_bezierC2, EDA_SHAPE::m_bezierPoints, EDA_SHAPE::m_end, EDA_SHAPE::m_fill, EDA_SHAPE::m_poly, EDA_SHAPE::m_shape, EDA_SHAPE::m_start, EDA_SHAPE::m_stroke, POLY, TEST, TEST_E, TEST_PT, and SHAPE_POLY_SET::TotalVertices().

Referenced by LIB_SHAPE::compare(), compare(), and BOARD::cmp_drawings::operator()().

◆ Compare() [2/2]

int EDA_TEXT::Compare ( const EDA_TEXT aOther) const
inherited

Definition at line 913 of file eda_text.cpp.

914{
915#define EPSILON 2 // Should be enough for rounding errors on calculated items
916
917#define TEST( a, b ) { if( a != b ) return a - b; }
918#define TEST_E( a, b ) { if( abs( a - b ) > EPSILON ) return a - b; }
919#define TEST_PT( a, b ) { TEST_E( a.x, b.x ); TEST_E( a.y, b.y ); }
920
921 TEST_PT( m_pos, aOther->m_pos );
922
927
937
938 int val = GetFontName().Cmp( aOther->GetFontName() );
939
940 if( val != 0 )
941 return val;
942
943 return m_text.Cmp( aOther->m_text );
944}
double AsDegrees() const
Definition: eda_angle.h:149
VECTOR2I m_pos
Definition: eda_text.h:407
wxString GetFontName() const
Definition: eda_text.cpp:759
TEXT_ATTRIBUTES m_attributes
Definition: eda_text.h:406
bool m_KeepUpright
If true, keep rotation angle between -90...90 degrees for readability.
GR_TEXT_H_ALIGN_T m_Halign
GR_TEXT_V_ALIGN_T m_Valign
#define TEST_PT(a, b)
#define TEST(a, b)
#define TEST_E(a, b)

References EDA_ANGLE::AsDegrees(), EDA_TEXT::GetFontName(), TEXT_ATTRIBUTES::m_Angle, EDA_TEXT::m_attributes, TEXT_ATTRIBUTES::m_Bold, TEXT_ATTRIBUTES::m_Halign, TEXT_ATTRIBUTES::m_Italic, TEXT_ATTRIBUTES::m_KeepUpright, TEXT_ATTRIBUTES::m_LineSpacing, TEXT_ATTRIBUTES::m_Mirrored, TEXT_ATTRIBUTES::m_Multiline, EDA_TEXT::m_pos, TEXT_ATTRIBUTES::m_Size, TEXT_ATTRIBUTES::m_StrokeWidth, EDA_TEXT::m_text, TEXT_ATTRIBUTES::m_Underlined, TEXT_ATTRIBUTES::m_Valign, TEXT_ATTRIBUTES::m_Visible, TEST, TEST_E, and TEST_PT.

◆ compare()

int LIB_TEXTBOX::compare ( const LIB_ITEM aOther,
int  aCompareFlags = 0 
) const
overrideprivatevirtual

Provide the draw object specific comparison called by the == and < operators.

The base object sort order which always proceeds the derived object sort order is as follows:

  • Symbol alternate part (DeMorgan) number.
  • Symbol part number.
  • KICAD_T enum value.
  • Result of derived classes comparison.
Note
Make sure you call down to LIB_ITEM::compare before doing any derived object comparisons or you will break the sorting using the symbol library file format.
Parameters
aOtherA reference to the other LIB_ITEM to compare the arc against.
aCompareFlagsThe flags used to perform the comparison.
Returns
An integer value less than 0 if the object is less than aOther object, zero if the object is equal to aOther object, or greater than 0 if the object is greater than aOther object.

The circle specific sort order is as follows:

  • Circle horizontal (X) position.
  • Circle vertical (Y) position.
  • Circle radius.

Reimplemented from LIB_SHAPE.

Definition at line 176 of file lib_textbox.cpp.

177{
178 wxASSERT( aOther.Type() == LIB_TEXTBOX_T );
179
180 int retv = LIB_ITEM::compare( aOther, aCompareFlags );
181
182 if( retv )
183 return retv;
184
185 const LIB_TEXTBOX* tmp = static_cast<const LIB_TEXTBOX*>( &aOther );
186
187 int result = GetText().CmpNoCase( tmp->GetText() );
188
189 if( result != 0 )
190 return result;
191
192 if( GetTextWidth() != tmp->GetTextWidth() )
193 return GetTextWidth() - tmp->GetTextWidth();
194
195 if( GetTextHeight() != tmp->GetTextHeight() )
196 return GetTextHeight() - tmp->GetTextHeight();
197
198 if( IsBold() != tmp->IsBold() )
199 return IsBold() - tmp->IsBold();
200
201 if( IsItalic() != tmp->IsItalic() )
202 return IsItalic() - tmp->IsItalic();
203
204 if( GetHorizJustify() != tmp->GetHorizJustify() )
205 return GetHorizJustify() - tmp->GetHorizJustify();
206
207 if( GetTextAngle().AsTenthsOfADegree() != tmp->GetTextAngle().AsTenthsOfADegree() )
209
210 return EDA_SHAPE::Compare( &static_cast<const LIB_SHAPE&>( aOther ) );
211}
int AsTenthsOfADegree() const
Definition: eda_angle.h:151
int Compare(const EDA_SHAPE *aOther) const
Definition: eda_shape.cpp:1508
int GetTextHeight() const
Definition: eda_text.h:202
bool IsItalic() const
Definition: eda_text.h:130
const EDA_ANGLE & GetTextAngle() const
Definition: eda_text.h:120
virtual const wxString & GetText() const
Return the string associated with the text object.
Definition: eda_text.h:87
int GetTextWidth() const
Definition: eda_text.h:199
GR_TEXT_H_ALIGN_T GetHorizJustify() const
Definition: eda_text.h:149
bool IsBold() const
Definition: eda_text.h:133
virtual int compare(const LIB_ITEM &aOther, int aCompareFlags=0) const
Provide the draw object specific comparison called by the == and < operators.
Definition: lib_item.cpp:74

References EDA_ANGLE::AsTenthsOfADegree(), EDA_SHAPE::Compare(), LIB_ITEM::compare(), EDA_TEXT::GetHorizJustify(), EDA_TEXT::GetText(), EDA_TEXT::GetTextAngle(), EDA_TEXT::GetTextHeight(), EDA_TEXT::GetTextWidth(), EDA_TEXT::IsBold(), EDA_TEXT::IsItalic(), LIB_TEXTBOX_T, and EDA_ITEM::Type().

◆ computeArcBBox()

void EDA_SHAPE::computeArcBBox ( BOX2I aBBox) const
protectedinherited

Definition at line 1071 of file eda_shape.cpp.

1072{
1073 // Start, end, and each inflection point the arc crosses will enclose the entire arc.
1074 // Only include the center when filled; it's not necessarily inside the BB of an unfilled
1075 // arc with a small included angle.
1076 aBBox.SetOrigin( m_start );
1077 aBBox.Merge( m_end );
1078
1079 if( IsFilled() )
1080 aBBox.Merge( m_arcCenter );
1081
1082 int radius = GetRadius();
1083 EDA_ANGLE t1, t2;
1084
1085 CalcArcAngles( t1, t2 );
1086
1087 t1.Normalize();
1088 t2.Normalize();
1089
1090 if( t2 > t1 )
1091 {
1092 if( t1 < ANGLE_0 && t2 > ANGLE_0 )
1093 aBBox.Merge( VECTOR2I( m_arcCenter.x + radius, m_arcCenter.y ) ); // right
1094
1095 if( t1 < ANGLE_90 && t2 > ANGLE_90 )
1096 aBBox.Merge( VECTOR2I( m_arcCenter.x, m_arcCenter.y + radius ) ); // down
1097
1098 if( t1 < ANGLE_180 && t2 > ANGLE_180 )
1099 aBBox.Merge( VECTOR2I( m_arcCenter.x - radius, m_arcCenter.y ) ); // left
1100
1101 if( t1 < ANGLE_270 && t2 > ANGLE_270 )
1102 aBBox.Merge( VECTOR2I( m_arcCenter.x, m_arcCenter.y - radius ) ); // up
1103 }
1104 else
1105 {
1106 if( t1 < ANGLE_0 || t2 > ANGLE_0 )
1107 aBBox.Merge( VECTOR2I( m_arcCenter.x + radius, m_arcCenter.y ) ); // right
1108
1109 if( t1 < ANGLE_90 || t2 > ANGLE_90 )
1110 aBBox.Merge( VECTOR2I( m_arcCenter.x, m_arcCenter.y + radius ) ); // down
1111
1112 if( t1 < ANGLE_180 || t2 > ANGLE_180 )
1113 aBBox.Merge( VECTOR2I( m_arcCenter.x - radius, m_arcCenter.y ) ); // left
1114
1115 if( t1 < ANGLE_270 || t2 > ANGLE_270 )
1116 aBBox.Merge( VECTOR2I( m_arcCenter.x, m_arcCenter.y - radius ) ); // up
1117 }
1118}
void SetOrigin(const Vec &pos)
Definition: box2.h:202
BOX2< Vec > & Merge(const BOX2< Vec > &aRect)
Modify the position and size of the rectangle in order to contain aRect.
Definition: box2.h:588
bool IsFilled() const
Definition: eda_shape.h:90
void CalcArcAngles(EDA_ANGLE &aStartAngle, EDA_ANGLE &aEndAngle) const
Calc arc start and end angles such that aStartAngle < aEndAngle.
Definition: eda_shape.cpp:502
static constexpr EDA_ANGLE & ANGLE_90
Definition: eda_angle.h:431
static constexpr EDA_ANGLE & ANGLE_270
Definition: eda_angle.h:434

References ANGLE_0, ANGLE_180, ANGLE_270, ANGLE_90, EDA_SHAPE::CalcArcAngles(), EDA_SHAPE::GetRadius(), EDA_SHAPE::IsFilled(), EDA_SHAPE::m_arcCenter, EDA_SHAPE::m_end, EDA_SHAPE::m_start, BOX2< Vec >::Merge(), EDA_ANGLE::Normalize(), BOX2< Vec >::SetOrigin(), VECTOR2< T >::x, and VECTOR2< T >::y.

Referenced by EDA_SHAPE::getBoundingBox().

◆ continueEdit()

bool EDA_SHAPE::continueEdit ( const VECTOR2I aPosition)
protectedinherited

Definition at line 1296 of file eda_shape.cpp.

1297{
1298 switch( GetShape() )
1299 {
1300 case SHAPE_T::ARC:
1301 case SHAPE_T::SEGMENT:
1302 case SHAPE_T::CIRCLE:
1303 case SHAPE_T::RECT:
1304 return false;
1305
1306 case SHAPE_T::POLY:
1307 {
1308 SHAPE_LINE_CHAIN& poly = m_poly.Outline( 0 );
1309
1310 // do not add zero-length segments
1311 if( poly.CPoint( poly.GetPointCount() - 2 ) != poly.CLastPoint() )
1312 poly.Append( aPosition, true );
1313 }
1314 return true;
1315
1316 default:
1318 return false;
1319 }
1320}
Represent a polyline containing arcs as well as line segments: A chain of connected line and/or arc s...
const VECTOR2I & CPoint(int aIndex) const
Return a reference to a given point in the line chain.
const VECTOR2I & CLastPoint() const
Return the last point in the line chain.

References SHAPE_LINE_CHAIN::Append(), ARC, CIRCLE, SHAPE_LINE_CHAIN::CLastPoint(), SHAPE_LINE_CHAIN::CPoint(), SHAPE_LINE_CHAIN::GetPointCount(), EDA_SHAPE::GetShape(), EDA_SHAPE::m_poly, SHAPE_POLY_SET::Outline(), POLY, RECT, SEGMENT, EDA_SHAPE::SHAPE_T_asString(), and UNIMPLEMENTED_FOR.

Referenced by SCH_SHAPE::ContinueEdit(), and LIB_SHAPE::ContinueEdit().

◆ ContinueEdit()

bool LIB_SHAPE::ContinueEdit ( const VECTOR2I aPosition)
inlineoverridevirtualinherited

Continue an edit in progress at aPosition.

This is used to perform the next action while drawing an item. This would be called for each additional left click when the mouse is captured while the item is being drawn.

Parameters
aPositionThe position of the mouse left click in drawing coordinates.
Returns
True if additional mouse clicks are required to complete the edit in progress.

Reimplemented from LIB_ITEM.

Definition at line 73 of file lib_shape.h.

73{ return continueEdit( aPosition ); }
bool continueEdit(const VECTOR2I &aPosition)
Definition: eda_shape.cpp:1296

References EDA_SHAPE::continueEdit().

Referenced by SYMBOL_EDITOR_DRAWING_TOOLS::DrawShape().

◆ CopyText()

◆ DupPolyPointsList()

void EDA_SHAPE::DupPolyPointsList ( std::vector< VECTOR2I > &  aBuffer) const
inherited

Duplicate the list of corners in a std::vector<VECTOR2I>

It must be used only to convert the SHAPE_POLY_SET internal corner buffer to a list of VECTOR2Is, and nothing else, because it duplicates the buffer, that is inefficient to know for instance the corner count

Definition at line 1225 of file eda_shape.cpp.

1226{
1227 for( int ii = 0; ii < m_poly.OutlineCount(); ++ii )
1228 {
1229 int pointCount = m_poly.COutline( ii ).PointCount();
1230
1231 if( pointCount )
1232 {
1233 aBuffer.reserve( pointCount );
1234
1235 for ( auto iter = m_poly.CIterate(); iter; iter++ )
1236 aBuffer.emplace_back( iter->x, iter->y );
1237 }
1238 }
1239}
int PointCount() const
Return the number of points (vertices) in this line chain.
CONST_ITERATOR CIterate(int aFirst, int aLast, bool aIterateHoles=false) const
int OutlineCount() const
Return the number of vertices in a given outline/hole.
const SHAPE_LINE_CHAIN & COutline(int aIndex) const

References SHAPE_POLY_SET::CIterate(), SHAPE_POLY_SET::COutline(), EDA_SHAPE::m_poly, SHAPE_POLY_SET::OutlineCount(), and SHAPE_LINE_CHAIN::PointCount().

Referenced by BRDITEMS_PLOTTER::PlotFootprintShape(), EDA_SHAPE::TransformShapeToPolygon(), FP_TEXTBOX::TransformShapeToPolygon(), and PCB_POINT_EDITOR::updatePoints().

◆ Empty()

void EDA_TEXT::Empty ( )
inherited

◆ EndEdit()

void LIB_SHAPE::EndEdit ( )
inlineoverridevirtualinherited

End an object editing action.

This is used to end or abort an edit action in progress initiated by BeginEdit().

Reimplemented from LIB_ITEM.

Definition at line 76 of file lib_shape.h.

76{ endEdit( false ); }
void endEdit(bool aClosed=true)
Finishes editing the shape.
Definition: eda_shape.cpp:1453

References EDA_SHAPE::endEdit().

Referenced by SYMBOL_EDITOR_DRAWING_TOOLS::DrawShape().

◆ endEdit()

void EDA_SHAPE::endEdit ( bool  aClosed = true)
protectedinherited

Finishes editing the shape.

Parameters
aClosedShould polygon shapes be closed (yes for pcbnew/fpeditor, no for libedit)

Definition at line 1453 of file eda_shape.cpp.

1454{
1455 switch( GetShape() )
1456 {
1457 case SHAPE_T::ARC:
1458 case SHAPE_T::SEGMENT:
1459 case SHAPE_T::CIRCLE:
1460 case SHAPE_T::RECT:
1461 break;
1462
1463 case SHAPE_T::POLY:
1464 {
1465 SHAPE_LINE_CHAIN& poly = m_poly.Outline( 0 );
1466
1467 // do not include last point twice
1468 if( poly.GetPointCount() > 2 )
1469 {
1470 if( poly.CPoint( poly.GetPointCount() - 2 ) == poly.CLastPoint() )
1471 {
1472 poly.SetClosed( aClosed );
1473 poly.Remove( poly.GetPointCount() - 1 );
1474 }
1475 }
1476 }
1477 break;
1478
1479 default:
1481 }
1482}
void Remove(int aStartIndex, int aEndIndex)
Remove the range of points [start_index, end_index] from the line chain.

References ARC, CIRCLE, SHAPE_LINE_CHAIN::CLastPoint(), SHAPE_LINE_CHAIN::CPoint(), SHAPE_LINE_CHAIN::GetPointCount(), EDA_SHAPE::GetShape(), EDA_SHAPE::m_poly, SHAPE_POLY_SET::Outline(), POLY, RECT, SHAPE_LINE_CHAIN::Remove(), SEGMENT, SHAPE_LINE_CHAIN::SetClosed(), EDA_SHAPE::SHAPE_T_asString(), and UNIMPLEMENTED_FOR.

Referenced by SCH_SHAPE::EndEdit(), and LIB_SHAPE::EndEdit().

◆ EndsSwapped()

bool EDA_SHAPE::EndsSwapped ( ) const
inlineinherited

Have the start and end points been swapped since they were set?

Returns
true if they have

Definition at line 195 of file eda_shape.h.

195{ return m_endsSwapped; }
bool m_endsSwapped
Definition: eda_shape.h:363

References EDA_SHAPE::m_endsSwapped.

Referenced by BOOST_AUTO_TEST_CASE(), and CADSTAR_PCB_ARCHIVE_LOADER::makeTracksFromShapes().

◆ flip()

void EDA_SHAPE::flip ( const VECTOR2I aCentre,
bool  aFlipLeftRight 
)
protectedinherited

Definition at line 320 of file eda_shape.cpp.

321{
322 switch ( m_shape )
323 {
324 case SHAPE_T::SEGMENT:
325 case SHAPE_T::RECT:
326 if( aFlipLeftRight )
327 {
328 m_start.x = aCentre.x - ( m_start.x - aCentre.x );
329 m_end.x = aCentre.x - ( m_end.x - aCentre.x );
330 }
331 else
332 {
333 m_start.y = aCentre.y - ( m_start.y - aCentre.y );
334 m_end.y = aCentre.y - ( m_end.y - aCentre.y );
335 }
336
337 std::swap( m_start, m_end );
338 break;
339
340 case SHAPE_T::CIRCLE:
341 if( aFlipLeftRight )
342 {
343 m_start.x = aCentre.x - ( m_start.x - aCentre.x );
344 m_end.x = aCentre.x - ( m_end.x - aCentre.x );
345 }
346 else
347 {
348 m_start.y = aCentre.y - ( m_start.y - aCentre.y );
349 m_end.y = aCentre.y - ( m_end.y - aCentre.y );
350 }
351 break;
352
353 case SHAPE_T::ARC:
354 if( aFlipLeftRight )
355 {
356 m_start.x = aCentre.x - ( m_start.x - aCentre.x );
357 m_end.x = aCentre.x - ( m_end.x - aCentre.x );
358 m_arcCenter.x = aCentre.x - ( m_arcCenter.x - aCentre.x );
359 }
360 else
361 {
362 m_start.y = aCentre.y - ( m_start.y - aCentre.y );
363 m_end.y = aCentre.y - ( m_end.y - aCentre.y );
364 m_arcCenter.y = aCentre.y - ( m_arcCenter.y - aCentre.y );
365 }
366
367 std::swap( m_start, m_end );
368 break;
369
370 case SHAPE_T::POLY:
371 m_poly.Mirror( aFlipLeftRight, !aFlipLeftRight, aCentre );
372 break;
373
374 case SHAPE_T::BEZIER:
375 if( aFlipLeftRight )
376 {
377 m_start.x = aCentre.x - ( m_start.x - aCentre.x );
378 m_end.x = aCentre.x - ( m_end.x - aCentre.x );
379 m_bezierC1.x = aCentre.x - ( m_bezierC1.x - aCentre.x );
380 m_bezierC2.x = aCentre.x - ( m_bezierC2.x - aCentre.x );
381 }
382 else
383 {
384 m_start.y = aCentre.y - ( m_start.y - aCentre.y );
385 m_end.y = aCentre.y - ( m_end.y - aCentre.y );
386 m_bezierC1.y = aCentre.y - ( m_bezierC1.y - aCentre.y );
387 m_bezierC2.y = aCentre.y - ( m_bezierC2.y - aCentre.y );
388 }
389
390 // Rebuild the poly points shape
391 {
392 std::vector<VECTOR2I> ctrlPoints = { m_start, m_bezierC1, m_bezierC2, m_end };
393 BEZIER_POLY converter( ctrlPoints );
394 converter.GetPoly( m_bezierPoints, m_stroke.GetWidth() );
395 }
396 break;
397
398 default:
400 break;
401 }
402}
void Mirror(bool aX=true, bool aY=false, const VECTOR2I &aRef={ 0, 0 })
Mirror the line points about y or x (or both)

References ARC, BEZIER, CIRCLE, BEZIER_POLY::GetPoly(), STROKE_PARAMS::GetWidth(), EDA_SHAPE::m_arcCenter, EDA_SHAPE::m_bezierC1, EDA_SHAPE::m_bezierC2, EDA_SHAPE::m_bezierPoints, EDA_SHAPE::m_end, EDA_SHAPE::m_poly, EDA_SHAPE::m_shape, EDA_SHAPE::m_start, EDA_SHAPE::m_stroke, SHAPE_POLY_SET::Mirror(), POLY, RECT, SEGMENT, EDA_SHAPE::SHAPE_T_asString(), UNIMPLEMENTED_FOR, VECTOR2< T >::x, and VECTOR2< T >::y.

Referenced by PCB_SHAPE::Flip(), LIB_SHAPE::MirrorHorizontal(), SCH_SHAPE::MirrorHorizontally(), LIB_SHAPE::MirrorVertical(), and SCH_SHAPE::MirrorVertically().

◆ Format()

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

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

784{
785 aFormatter->Print( aNestLevel + 1, "(effects" );
786
787 aFormatter->Print( 0, " (font" );
788
789 if( GetFont() && !GetFont()->GetName().IsEmpty() )
790 aFormatter->Print( 0, " (face \"%s\")", GetFont()->NameAsToken() );
791
792 // Text size
793 aFormatter->Print( 0, " (size %s %s)",
796
797 if( GetLineSpacing() != 1.0 )
798 {
799 aFormatter->Print( 0, " (line_spacing %s)",
800 FormatDouble2Str( GetLineSpacing() ).c_str() );
801 }
802
803 if( GetTextThickness() )
804 {
805 aFormatter->Print( 0, " (thickness %s)",
807 }
808
809 if( IsBold() )
810 aFormatter->Print( 0, " bold" );
811
812 if( IsItalic() )
813 aFormatter->Print( 0, " italic" );
814
815 if( GetTextColor() != COLOR4D::UNSPECIFIED )
816 {
817 aFormatter->Print( 0, " (color %d %d %d %s)",
818 KiROUND( GetTextColor().r * 255.0 ),
819 KiROUND( GetTextColor().g * 255.0 ),
820 KiROUND( GetTextColor().b * 255.0 ),
821 FormatDouble2Str( GetTextColor().a ).c_str() );
822 }
823
824 aFormatter->Print( 0, ")"); // (font
825
828 {
829 aFormatter->Print( 0, " (justify");
830
832 aFormatter->Print( 0, GetHorizJustify() == GR_TEXT_H_ALIGN_LEFT ? " left" : " right" );
833
835 aFormatter->Print( 0, GetVertJustify() == GR_TEXT_V_ALIGN_TOP ? " top" : " bottom" );
836
837 if( IsMirrored() )
838 aFormatter->Print( 0, " mirror" );
839
840 aFormatter->Print( 0, ")" ); // (justify
841 }
842
843 if( !( aControlBits & CTL_OMIT_HIDE ) && !IsVisible() )
844 aFormatter->Print( 0, " hide" );
845
846 if( HasHyperlink() )
847 {
848 aFormatter->Print( 0, " (href %s)", aFormatter->Quotew( GetHyperlink() ).c_str() );
849 }
850
851 aFormatter->Print( 0, ")\n" ); // (effects
852}
COLOR4D GetTextColor() const
Definition: eda_text.h:205
virtual bool IsVisible() const
Definition: eda_text.h:136
KIFONT::FONT * GetFont() const
Definition: eda_text.h:188
virtual bool HasHyperlink() const
Definition: eda_text.h:333
wxString GetHyperlink() const
Definition: eda_text.h:334
std::reference_wrapper< const EDA_IU_SCALE > m_IuScale
Definition: eda_text.h:393
double GetLineSpacing() const
Definition: eda_text.h:193
bool IsMirrored() const
Definition: eda_text.h:139
GR_TEXT_V_ALIGN_T GetVertJustify() const
Definition: eda_text.h:152
int GetTextThickness() const
Definition: eda_text.h:112
std::string Quotew(const wxString &aWrapee) const
Definition: richio.cpp:501
int PRINTF_FUNC Print(int nestLevel, const char *fmt,...)
Format and write text to the output stream.
Definition: richio.cpp:433
#define CTL_OMIT_HIDE
Definition: eda_text.h:53
std::string FormatInternalUnits(const EDA_IU_SCALE &aIuScale, int aValue)
Converts aValue from internal units to a string appropriate for writing to file.
Definition: eda_units.cpp:142
std::string FormatDouble2Str(double aValue)
Print a float number without using scientific notation and no trailing 0 This function is intended in...
@ GR_TEXT_H_ALIGN_CENTER
@ GR_TEXT_V_ALIGN_CENTER

References CTL_OMIT_HIDE, FormatDouble2Str(), EDA_UNIT_UTILS::FormatInternalUnits(), EDA_TEXT::GetFont(), EDA_TEXT::GetHorizJustify(), EDA_TEXT::GetHyperlink(), EDA_TEXT::GetLineSpacing(), EDA_TEXT::GetTextColor(), EDA_TEXT::GetTextHeight(), EDA_TEXT::GetTextThickness(), EDA_TEXT::GetTextWidth(), EDA_TEXT::GetVertJustify(), GR_TEXT_H_ALIGN_CENTER, GR_TEXT_H_ALIGN_LEFT, GR_TEXT_V_ALIGN_CENTER, GR_TEXT_V_ALIGN_TOP, EDA_TEXT::HasHyperlink(), EDA_TEXT::IsBold(), EDA_TEXT::IsItalic(), EDA_TEXT::IsMirrored(), EDA_TEXT::IsVisible(), KiROUND(), EDA_TEXT::m_IuScale, OUTPUTFORMATTER::Print(), and OUTPUTFORMATTER::Quotew().

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

◆ Get() [1/3]

template<typename T >
std::optional< T > INSPECTABLE::Get ( const wxString &  aProperty) const
inlineinherited

Definition at line 104 of file inspectable.h.

105 {
107 TYPE_ID thisType = TYPE_HASH( *this );
108 PROPERTY_BASE* prop = propMgr.GetProperty( thisType, aProperty );
109 std::optional<T> ret;
110
111 if( prop )
112 {
113 const void* object = propMgr.TypeCast( this, thisType, prop->OwnerHash() );
114
115 if( object )
116 ret = prop->get<T>( object );
117 }
118
119 return ret;
120 }
virtual size_t OwnerHash() const =0
Return type-id of the Owner class.
T get(const void *aObject) const
Definition: property.h:352
Provide class metadata.Helper macro to map type hashes to names.
Definition: property_mgr.h:74
static PROPERTY_MANAGER & Instance()
Definition: property_mgr.h:76
PROPERTY_BASE * GetProperty(TYPE_ID aType, const wxString &aProperty) const
Return a property for a specific type.
const void * TypeCast(const void *aSource, TYPE_ID aBase, TYPE_ID aTarget) const
Cast a type to another type.
#define TYPE_HASH(x)
Definition: property.h:63
size_t TYPE_ID
Unique type identifier.
Definition: property_mgr.h:46

References PROPERTY_BASE::get(), PROPERTY_MANAGER::GetProperty(), PROPERTY_MANAGER::Instance(), PROPERTY_BASE::OwnerHash(), TYPE_HASH, and PROPERTY_MANAGER::TypeCast().

◆ Get() [2/3]

wxAny INSPECTABLE::Get ( PROPERTY_BASE aProperty) const
inlineinherited

Definition at line 84 of file inspectable.h.

85 {
87 const void* object = propMgr.TypeCast( this, TYPE_HASH( *this ), aProperty->OwnerHash() );
88 return object ? aProperty->getter( object ) : wxAny();
89 }
virtual wxAny getter(const void *aObject) const =0

References PROPERTY_BASE::getter(), PROPERTY_MANAGER::Instance(), PROPERTY_BASE::OwnerHash(), TYPE_HASH, and PROPERTY_MANAGER::TypeCast().

Referenced by BOOST_AUTO_TEST_CASE(), CLASS_D_DESC::CLASS_D_DESC(), EDA_SHAPE_DESC::EDA_SHAPE_DESC(), PROPERTIES_PANEL::getItemValue(), PCB_EXPR_VAR_REF::GetValue(), and PAD_DESC::PAD_DESC().

◆ Get() [3/3]

template<typename T >
T INSPECTABLE::Get ( PROPERTY_BASE aProperty) const
inlineinherited

Definition at line 92 of file inspectable.h.

93 {
95 const void* object = propMgr.TypeCast( this, TYPE_HASH( *this ), aProperty->OwnerHash() );
96
97 if( !object )
98 throw std::runtime_error( "Could not cast INSPECTABLE to the requested type" );
99
100 return aProperty->get<T>( object );
101 }

References PROPERTY_BASE::get(), PROPERTY_MANAGER::Instance(), PROPERTY_BASE::OwnerHash(), TYPE_HASH, and PROPERTY_MANAGER::TypeCast().

◆ GetArcAngle()

◆ GetArcMid()

VECTOR2I EDA_SHAPE::GetArcMid ( ) const
inherited

Definition at line 488 of file eda_shape.cpp.

489{
490 // If none of the input data have changed since we loaded the arc,
491 // keep the original mid point data to minimize churn
494 return m_arcMidData.mid;
495
496 VECTOR2I mid = m_start;
497 RotatePoint( mid, m_arcCenter, -GetArcAngle() / 2.0 );
498 return mid;
499}
ARC_MID m_arcMidData
Definition: eda_shape.h:373
VECTOR2I end
Definition: eda_shape.h:67
VECTOR2I center
Definition: eda_shape.h:68
VECTOR2I start
Definition: eda_shape.h:66
VECTOR2I mid
Definition: eda_shape.h:65
void RotatePoint(int *pX, int *pY, const EDA_ANGLE &aAngle)
Definition: trigo.cpp:183

References ARC_MID::center, ARC_MID::end, EDA_SHAPE::GetArcAngle(), EDA_SHAPE::m_arcCenter, EDA_SHAPE::m_arcMidData, EDA_SHAPE::m_end, EDA_SHAPE::m_start, ARC_MID::mid, RotatePoint(), and ARC_MID::start.

Referenced by KI_TEST::CheckFpShape(), PCB_POINT_EDITOR::editArcMidKeepEndpoints(), PCB_PLUGIN::format(), formatArc(), PCB_SHAPE::GetFocusPosition(), PCB_POINT_EDITOR::makePoints(), CONVERT_TOOL::makePolysFromChainedSegs(), EDA_SHAPE::SetArcGeometry(), EDA_SHAPE::TransformShapeToPolygon(), and PCB_POINT_EDITOR::updatePoints().

◆ GetAttributes()

◆ GetBezierC1()

◆ GetBezierC2()

◆ GetBezierPoints()

const std::vector< VECTOR2I > & EDA_SHAPE::GetBezierPoints ( ) const
inlineinherited

◆ GetBotRight()

virtual VECTOR2I EDA_SHAPE::GetBotRight ( ) const
inlinevirtualinherited

Reimplemented in FP_TEXTBOX, and PCB_TEXTBOX.

Definition at line 168 of file eda_shape.h.

168{ return GetEnd(); }

References EDA_SHAPE::GetEnd().

Referenced by KIGFX::PCB_PAINTER::draw(), PCB_POINT_EDITOR::makePoints(), and PCB_POINT_EDITOR::updatePoints().

◆ getBoundingBox()

const BOX2I EDA_SHAPE::getBoundingBox ( ) const
protectedinherited

Definition at line 684 of file eda_shape.cpp.

685{
686 BOX2I bbox;
687
688 switch( m_shape )
689 {
690 case SHAPE_T::RECT:
691 for( VECTOR2I& pt : GetRectCorners() )
692 bbox.Merge( pt );
693
694 break;
695
696 case SHAPE_T::SEGMENT:
697 bbox.SetOrigin( GetStart() );
698 bbox.SetEnd( GetEnd() );
699 break;
700
701 case SHAPE_T::CIRCLE:
702 bbox.SetOrigin( GetStart() );
703 bbox.Inflate( GetRadius() );
704 break;
705
706 case SHAPE_T::ARC:
707 computeArcBBox( bbox );
708 break;
709
710 case SHAPE_T::POLY:
711 if( m_poly.IsEmpty() )
712 break;
713
714 for( auto iter = m_poly.CIterate(); iter; iter++ )
715 {
716 VECTOR2I pt( iter->x, iter->y );
717
719 pt += getParentPosition();
720
721 bbox.Merge( pt );
722 }
723
724 break;
725
726 case SHAPE_T::BEZIER:
727 bbox.SetOrigin( GetStart() );
728 bbox.Merge( GetBezierC1() );
729 bbox.Merge( GetBezierC2() );
730 bbox.Merge( GetEnd() );
731 break;
732
733 default:
735 break;
736 }
737
738 bbox.Inflate( std::max( 0, GetWidth() ) / 2 );
739 bbox.Normalize();
740
741 return bbox;
742}
BOX2< Vec > & Normalize()
Ensure that the height and width are positive.
Definition: box2.h:119
BOX2< Vec > & Inflate(coord_type dx, coord_type dy)
Inflates the rectangle horizontally by dx and vertically by dy.
Definition: box2.h:506
void SetEnd(coord_type x, coord_type y)
Definition: box2.h:255
virtual VECTOR2I getParentPosition() const =0
const VECTOR2I & GetBezierC2() const
Definition: eda_shape.h:179
virtual EDA_ANGLE getParentOrientation() const =0
std::vector< VECTOR2I > GetRectCorners() const
Definition: eda_shape.cpp:1035
int GetWidth() const
Definition: eda_shape.h:109
void computeArcBBox(BOX2I &aBBox) const
Definition: eda_shape.cpp:1071
const VECTOR2I & GetBezierC1() const
Definition: eda_shape.h:176

References ARC, BEZIER, CIRCLE, SHAPE_POLY_SET::CIterate(), EDA_SHAPE::computeArcBBox(), EDA_SHAPE::GetBezierC1(), EDA_SHAPE::GetBezierC2(), EDA_SHAPE::GetEnd(), EDA_SHAPE::getParentOrientation(), EDA_SHAPE::getParentPosition(), EDA_SHAPE::GetRadius(), EDA_SHAPE::GetRectCorners(), EDA_SHAPE::GetStart(), EDA_SHAPE::GetWidth(), BOX2< Vec >::Inflate(), SHAPE_POLY_SET::IsEmpty(), EDA_SHAPE::m_poly, EDA_SHAPE::m_shape, BOX2< Vec >::Merge(), BOX2< Vec >::Normalize(), POLY, RECT, RotatePoint(), SEGMENT, BOX2< Vec >::SetEnd(), BOX2< Vec >::SetOrigin(), EDA_SHAPE::SHAPE_T_asString(), and UNIMPLEMENTED_FOR.

Referenced by LIB_SHAPE::GetBoundingBox(), SCH_SHAPE::GetBoundingBox(), PCB_SHAPE::GetBoundingBox(), EDA_SHAPE::getCenter(), and EDA_SHAPE::hitTest().

◆ GetBoundingBox()

const BOX2I LIB_SHAPE::GetBoundingBox ( ) const
overridevirtualinherited
Returns
the boundary box for this, in library coordinates

Reimplemented from LIB_ITEM.

Definition at line 451 of file lib_shape.cpp.

452{
453 BOX2I bbox = getBoundingBox();
454
455 bbox.RevertYAxis();
456
457 return bbox;
458}
void RevertYAxis()
Mirror the rectangle from the X axis (negate Y pos and size).
Definition: box2.h:689
const BOX2I getBoundingBox() const
Definition: eda_shape.cpp:684

References EDA_SHAPE::getBoundingBox(), and BOX2< Vec >::RevertYAxis().

Referenced by HitTest().

◆ GetCenter()

VECTOR2I LIB_SHAPE::GetCenter ( ) const
inlineinherited

Definition at line 88 of file lib_shape.h.

88{ return getCenter(); }

References EDA_SHAPE::getCenter().

Referenced by SCH_EAGLE_PLUGIN::loadSymbolRectangle(), and SCH_ALTIUM_PLUGIN::ParseArc().

◆ getCenter()

◆ GetClass()

virtual wxString LIB_TEXTBOX::GetClass ( ) const
inlineoverridevirtual

Return the class name.

Reimplemented from LIB_SHAPE.

Definition at line 49 of file lib_textbox.h.

50 {
51 return wxT( "LIB_TEXTBOX" );
52 }

◆ GetConvert()

◆ GetDefaultFont()

const wxString & LIB_ITEM::GetDefaultFont ( ) const
inherited

Definition at line 128 of file lib_item.cpp.

129{
130 EESCHEMA_SETTINGS* cfg = Pgm().GetSettingsManager().GetAppSettings<EESCHEMA_SETTINGS>();
131
132 return cfg->m_Appearance.default_font;
133}
KIWAY Kiway & Pgm(), KFCTL_STANDALONE
The global Program "get" accessor.
Definition: single_top.cpp:111

References EESCHEMA_SETTINGS::APPEARANCE::default_font, EESCHEMA_SETTINGS::m_Appearance, and Pgm().

Referenced by LIB_FIELD::getDrawFont(), LIB_TEXT::getDrawFont(), getDrawFont(), and GetShownText().

◆ getDrawFont()

KIFONT::FONT * LIB_TEXTBOX::getDrawFont ( ) const
overrideprotectedvirtual

Reimplemented from EDA_TEXT.

Definition at line 214 of file lib_textbox.cpp.

215{
217
218 if( !font )
220
221 return font;
222}
FONT is an abstract base class for both outline and stroke fonts.
Definition: font.h:105
static FONT * GetFont(const wxString &aFontName=wxEmptyString, bool aBold=false, bool aItalic=false)
Definition: font.cpp:138
const wxString & GetDefaultFont() const
Definition: lib_item.cpp:128

References LIB_ITEM::GetDefaultFont(), EDA_TEXT::GetFont(), KIFONT::FONT::GetFont(), EDA_TEXT::IsBold(), and EDA_TEXT::IsItalic().

◆ GetDrawPos()

VECTOR2I LIB_TEXTBOX::GetDrawPos ( ) const
overridevirtual

Reimplemented from EDA_TEXT.

Definition at line 107 of file lib_textbox.cpp.

108{
109 int margin = GetTextMargin();
110 BOX2I bbox( VECTOR2I( std::min( m_start.x, m_end.x ), std::min( -m_start.y, -m_end.y ) ),
111 VECTOR2I( abs( m_end.x - m_start.x ), abs( m_end.y - m_start.y ) ) );
112
113 VECTOR2I pos( bbox.GetLeft() + margin, bbox.GetBottom() - margin );
114
116 {
117 switch( GetHorizJustify() )
118 {
120 pos.y = bbox.GetBottom() - margin;
121 break;
123 pos.y = ( bbox.GetTop() + bbox.GetBottom() ) / 2;
124 break;
126 pos.y = bbox.GetTop() + margin;
127 break;
128 }
129
130 switch( GetVertJustify() )
131 {
133 pos.x = bbox.GetLeft() + margin;
134 break;
136 pos.x = ( bbox.GetLeft() + bbox.GetRight() ) / 2;
137 break;
139 pos.x = bbox.GetRight() - margin;
140 break;
141 }
142 }
143 else
144 {
145 switch( GetHorizJustify() )
146 {
148 pos.x = bbox.GetLeft() + margin;
149 break;
151 pos.x = ( bbox.GetLeft() + bbox.GetRight() ) / 2;
152 break;
154 pos.x = bbox.GetRight() - margin;
155 break;
156 }
157
158 switch( GetVertJustify() )
159 {
161 pos.y = bbox.GetTop() + margin;
162 break;
164 pos.y = ( bbox.GetTop() + bbox.GetBottom() ) / 2;
165 break;
167 pos.y = bbox.GetBottom() - margin;
168 break;
169 }
170 }
171
172 return pos;
173}
int GetTextMargin() const
Definition: lib_textbox.cpp:64
static constexpr EDA_ANGLE & ANGLE_VERTICAL
Definition: eda_angle.h:426
EDA_ANGLE abs(const EDA_ANGLE &aAngle)
Definition: eda_angle.h:418
@ GR_TEXT_H_ALIGN_RIGHT
@ GR_TEXT_V_ALIGN_BOTTOM

References std::abs(), ANGLE_VERTICAL, BOX2< Vec >::GetBottom(), EDA_TEXT::GetHorizJustify(), BOX2< Vec >::GetLeft(), BOX2< Vec >::GetRight(), EDA_TEXT::GetTextAngle(), GetTextMargin(), BOX2< Vec >::GetTop(), EDA_TEXT::GetVertJustify(), GR_TEXT_H_ALIGN_CENTER, GR_TEXT_H_ALIGN_LEFT, GR_TEXT_H_ALIGN_RIGHT, GR_TEXT_V_ALIGN_BOTTOM, GR_TEXT_V_ALIGN_CENTER, GR_TEXT_V_ALIGN_TOP, EDA_SHAPE::m_end, EDA_SHAPE::m_start, VECTOR2< T >::x, and VECTOR2< T >::y.

Referenced by KIGFX::SCH_PAINTER::draw().

◆ GetDrawRotation()

◆ GetEditFlags()

EDA_ITEM_FLAGS EDA_ITEM::GetEditFlags ( ) const
inlineinherited

Definition at line 145 of file eda_item.h.

146 {
147 constexpr int mask =
149
150 return m_flags & mask;
151 }
#define IS_PASTED
Modifier on IS_NEW which indicates it came from clipboard.
#define IS_CHANGED
Item was edited, and modified.
#define IS_NEW
New item, just created.
#define IS_BROKEN
Is a segment just broken by BreakSegment.
#define STRUCT_DELETED
flag indication structures to be erased
#define IS_MOVING
Item being moved.

References IS_BROKEN, IS_CHANGED, IS_MOVING, IS_NEW, IS_PASTED, EDA_ITEM::m_flags, and STRUCT_DELETED.

Referenced by SCH_EDIT_TOOL::ChangeTextType(), EDA_ITEM::ClearEditFlags(), SCH_EDIT_FRAME::DeleteJunction(), SCH_EDIT_TOOL::editFieldText(), SYMBOL_EDITOR_PIN_TOOL::EditPinProperties(), SCH_EDITOR_CONTROL::EditWithSymbolEditor(), SCH_SYMBOL::GetMsgPanelInfo(), SELECTION_CONDITIONS::Idle(), SELECTION_CONDITIONS::IdleSelection(), SYMBOL_EDITOR_MOVE_TOOL::Main(), PCB_POINT_EDITOR::OnSelectionChange(), SYMBOL_EDITOR_EDIT_TOOL::Properties(), SCH_EDIT_FRAME::SelectUnit(), DIALOG_IMAGE_PROPERTIES::TransferDataFromWindow(), DIALOG_LABEL_PROPERTIES::TransferDataFromWindow(), DIALOG_SYMBOL_PROPERTIES::TransferDataFromWindow(), DIALOG_TEXT_PROPERTIES::TransferDataFromWindow(), DIALOG_DIMENSION_PROPERTIES::TransferDataFromWindow(), DIALOG_FOOTPRINT_PROPERTIES::TransferDataFromWindow(), DIALOG_TARGET_PROPERTIES::TransferDataFromWindow(), and DIALOG_TEXTBOX_PROPERTIES::TransferDataFromWindow().

◆ GetEffectiveLineStyle()

PLOT_DASH_TYPE LIB_SHAPE::GetEffectiveLineStyle ( ) const
inlineinherited

Definition at line 60 of file lib_shape.h.

References DEFAULT, STROKE_PARAMS::GetPlotStyle(), EDA_SHAPE::m_stroke, and SOLID.

Referenced by LIB_SHAPE::print().

◆ GetEffectivePenWidth()

virtual int LIB_ITEM::GetEffectivePenWidth ( const RENDER_SETTINGS aSettings) const
inlinevirtualinherited

Definition at line 155 of file lib_item.h.

156 {
157 // For historical reasons, a stored value of 0 means "default width" and negative
158 // numbers meant "don't stroke".
159
160 if( GetPenWidth() < 0 )
161 return 0;
162 else if( GetPenWidth() == 0 )
163 return std::max( aSettings->GetDefaultPenWidth(), aSettings->GetMinPenWidth() );
164 else
165 return std::max( GetPenWidth(), aSettings->GetMinPenWidth() );
166 }
int GetDefaultPenWidth() const
virtual int GetPenWidth() const =0

References KIGFX::RENDER_SETTINGS::GetDefaultPenWidth(), KIGFX::RENDER_SETTINGS::GetMinPenWidth(), and LIB_ITEM::GetPenWidth().

Referenced by LIB_FIELD::Plot(), LIB_SHAPE::Plot(), Plot(), LIB_PIN::PlotSymbol(), LIB_FIELD::print(), LIB_SHAPE::print(), print(), and LIB_PIN::printPinSymbol().

◆ GetEffectiveTextPenWidth()

int EDA_TEXT::GetEffectiveTextPenWidth ( int  aDefaultPenWidth = 0) const
inherited

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

Definition at line 299 of file eda_text.cpp.

300{
301 int penWidth = GetTextThickness();
302
303 if( penWidth <= 1 )
304 {
305 penWidth = aDefaultPenWidth;
306
307 if( IsBold() )
308 penWidth = GetPenSizeForBold( GetTextWidth() );
309 else if( penWidth <= 1 )
310 penWidth = GetPenSizeForNormal( GetTextWidth() );
311 }
312
313 // Clip pen size for small texts:
314 penWidth = Clamp_Text_PenSize( penWidth, GetTextSize() );
315
316 return penWidth;
317}
VECTOR2I GetTextSize() const
Definition: eda_text.h:196
int GetPenSizeForBold(int aTextSize)
Definition: gr_text.cpp:40
int GetPenSizeForNormal(int aTextSize)
Definition: gr_text.cpp:64
int Clamp_Text_PenSize(int aPenSize, int aSize, bool aStrict)
Pen width should not allow characters to become cluttered up in their own fatness.
Definition: gr_text.cpp:87

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

Referenced by BOARD_ADAPTER::addText(), KIGFX::DS_PAINTER::draw(), KIGFX::PCB_PAINTER::draw(), SCH_LABEL_BASE::GetBodyBoundingBox(), SCH_LABEL::GetBodyBoundingBox(), SCH_HIERLABEL::GetBodyBoundingBox(), FP_TEXT::GetEffectiveShape(), PCB_TEXT::GetEffectiveShape(), EDA_TEXT::GetEffectiveTextShape(), LIB_FIELD::GetPenWidth(), LIB_TEXT::GetPenWidth(), SCH_FIELD::GetPenWidth(), SCH_DIRECTIVE_LABEL::GetPenWidth(), SCH_TEXT::GetPenWidth(), EDA_TEXT::GetTextBox(), SCH_FIELD::Plot(), SCH_LABEL_BASE::Plot(), SCH_TEXT::Plot(), SCH_TEXTBOX::Plot(), LIB_TEXT::Plot(), Plot(), BRDITEMS_PLOTTER::PlotFootprintTextItem(), BRDITEMS_PLOTTER::PlotPcbText(), SCH_FIELD::Print(), LIB_TEXT::print(), print(), EDA_TEXT::printOneLineOfText(), FP_TEXT::TransformTextToPolySet(), FP_TEXTBOX::TransformTextToPolySet(), PCB_TEXT::TransformTextToPolySet(), PCB_TEXTBOX::TransformTextToPolySet(), PCB_DIM_ALIGNED::updateGeometry(), PCB_DIM_ORTHOGONAL::updateGeometry(), PCB_DIM_RADIAL::updateGeometry(), PCB_DIM_LEADER::updateGeometry(), PCB_DIM_ALIGNED::updateText(), and PCB_DIM_ORTHOGONAL::updateText().

◆ GetEffectiveTextShape()

std::shared_ptr< SHAPE_COMPOUND > EDA_TEXT::GetEffectiveTextShape ( bool  aTriangulate = true,
bool  aUseTextRotation = true 
) const
inherited

build a list of segments (SHAPE_SEGMENT) to describe a text shape.

Parameters
aTriangulatetrue to build also the triangulation of each shape
aUseTextRotationtrue to use the actual text draw rotation. false to build a list of shape for a not rotated text ("native" shapes).

Definition at line 855 of file eda_text.cpp.

857{
858 std::shared_ptr<SHAPE_COMPOUND> shape = std::make_shared<SHAPE_COMPOUND>();
860 KIFONT::FONT* font = getDrawFont();
861 int penWidth = GetEffectiveTextPenWidth();
863
864 if( aUseTextRotation )
865 attrs.m_Angle = GetDrawRotation();
866 else
867 attrs.m_Angle = ANGLE_0;
868
869 if( aTriangulate )
870 {
871 CALLBACK_GAL callback_gal(
872 empty_opts,
873 // Stroke callback
874 [&]( const VECTOR2I& aPt1, const VECTOR2I& aPt2 )
875 {
876 shape->AddShape( new SHAPE_SEGMENT( aPt1, aPt2, penWidth ) );
877 },
878 // Triangulation callback
879 [&]( const VECTOR2I& aPt1, const VECTOR2I& aPt2, const VECTOR2I& aPt3 )
880 {
881 SHAPE_SIMPLE* triShape = new SHAPE_SIMPLE;
882
883 for( const VECTOR2I& point : { aPt1, aPt2, aPt3 } )
884 triShape->Append( point.x, point.y );
885
886 shape->AddShape( triShape );
887 } );
888
889 font->Draw( &callback_gal, GetShownText(), GetDrawPos(), attrs );
890 }
891 else
892 {
893 CALLBACK_GAL callback_gal(
894 empty_opts,
895 // Stroke callback
896 [&]( const VECTOR2I& aPt1, const VECTOR2I& aPt2 )
897 {
898 shape->AddShape( new SHAPE_SEGMENT( aPt1, aPt2, penWidth ) );
899 },
900 // Outline callback
901 [&]( const SHAPE_LINE_CHAIN& aPoly )
902 {
903 shape->AddShape( aPoly.Clone() );
904 } );
905
906 font->Draw( &callback_gal, GetShownText(), GetDrawPos(), attrs );
907 }
908
909 return shape;
910}
virtual EDA_ANGLE GetDrawRotation() const
Definition: eda_text.h:317
virtual VECTOR2I GetDrawPos() const
Definition: eda_text.h:318
virtual KIFONT::FONT * getDrawFont() const
Definition: eda_text.cpp:428
const TEXT_ATTRIBUTES & GetAttributes() const
Definition: eda_text.h:172
int GetEffectiveTextPenWidth(int aDefaultPenWidth=0) const
The EffectiveTextPenWidth uses the text thickness if > 1 or aDefaultPenWidth.
Definition: eda_text.cpp:299
virtual wxString GetShownText(int aDepth=0, bool aAllowExtraText=true) const
Return the string actually shown after processing of the base text.
Definition: eda_text.h:98
void Draw(KIGFX::GAL *aGal, const wxString &aText, const VECTOR2I &aPosition, const VECTOR2I &aCursor, const TEXT_ATTRIBUTES &aAttrs) const
Draw a string.
Definition: font.cpp:232
Represent a simple polygon consisting of a zero-thickness closed chain of connected line segments.
Definition: shape_simple.h:42
void Append(int aX, int aY)
Append a new point at the end of the polygon.
Definition: shape_simple.h:135

References ANGLE_0, SHAPE_SIMPLE::Append(), KIFONT::FONT::Draw(), EDA_TEXT::GetAttributes(), EDA_TEXT::getDrawFont(), EDA_TEXT::GetDrawPos(), EDA_TEXT::GetDrawRotation(), EDA_TEXT::GetEffectiveTextPenWidth(), EDA_TEXT::GetShownText(), and TEXT_ATTRIBUTES::m_Angle.

Referenced by PCB_DIMENSION_BASE::GetEffectiveShape(), FP_TEXT::GetEffectiveShape(), FP_TEXTBOX::GetEffectiveShape(), PCB_TEXT::GetEffectiveShape(), PCB_TEXTBOX::GetEffectiveShape(), PCB_SELECTION_TOOL::hitTestDistance(), PNS_KICAD_IFACE_BASE::syncTextItem(), and EDA_TEXT::TransformBoundingBoxToPolygon().

◆ GetEffectiveWidth()

virtual int EDA_SHAPE::GetEffectiveWidth ( ) const
inlinevirtualinherited

Reimplemented in SCH_SHAPE.

Definition at line 110 of file eda_shape.h.

110{ return GetWidth(); }

References EDA_SHAPE::GetWidth().

Referenced by EDA_SHAPE::makeEffectiveShapes().

◆ GetEnd()

const VECTOR2I & EDA_SHAPE::GetEnd ( ) const
inlineinherited

Return the ending point of the graphic.

Definition at line 145 of file eda_shape.h.

145{ return m_end; }

References EDA_SHAPE::m_end.

Referenced by PCB_POINT_EDITOR::addCorner(), BOARD_ADAPTER::addShape(), GRAPHICS_CLEANER::areEquivalent(), BOOST_AUTO_TEST_CASE(), EDA_SHAPE::CalcArcAngles(), EDA_SHAPE::calcEdit(), KI_TEST::CheckFpShape(), ConvertOutlineToPolygon(), CreateBoardSection(), MICROWAVE_TOOL::createMicrowaveInductor(), KIGFX::SCH_PAINTER::draw(), KIGFX::PCB_PAINTER::draw(), DRAWING_TOOL::DrawLine(), PCB_POINT_EDITOR::editArcEndpointKeepCenter(), PCB_POINT_EDITOR::editArcEndpointKeepTangent(), PCB_PLUGIN::format(), formatArc(), formatBezier(), formatRect(), EDA_SHAPE::GetBotRight(), FP_TEXTBOX::GetBotRight(), PCB_TEXTBOX::GetBotRight(), EDA_SHAPE::getBoundingBox(), EDA_SHAPE::GetLength(), GetMsgPanelInfo(), SCH_TEXTBOX::GetMsgPanelInfo(), FP_TEXTBOX::GetMsgPanelInfo(), PCB_TEXTBOX::GetMsgPanelInfo(), EDA_SHAPE::GetRectCorners(), CADSTAR_SCH_ARCHIVE_LOADER::getScaledLibPart(), GetShownText(), SCH_TEXTBOX::GetShownText(), CONVERT_TOOL::getStartEndPoints(), FP_TEXTBOX::GetTopLeft(), PCB_TEXTBOX::GetTopLeft(), hash_fp_item(), EDA_SHAPE::hitTest(), idf_export_outline(), GRAPHICS_CLEANER::isNullShape(), SCH_LEGACY_PLUGIN_CACHE::loadArc(), SCH_EAGLE_PLUGIN::loadSymbolRectangle(), EDIT_POINTS_FACTORY::Make(), EDA_SHAPE::makeEffectiveShapes(), DSN::SPECCTRA_DB::makeIMAGE(), PCB_POINT_EDITOR::makePoints(), CONVERT_TOOL::makePolysFromChainedSegs(), GRAPHICS_CLEANER::mergeRects(), LIB_SHAPE::Normalize(), SCH_SHAPE::Normalize(), PCB_SHAPE::NormalizeRect(), PCB_PARSER::parsePAD(), SCH_EDITOR_CONTROL::Paste(), SCH_SHAPE::Plot(), BRDITEMS_PLOTTER::PlotFootprintShape(), BRDITEMS_PLOTTER::PlotPcbShape(), SCH_SHAPE::Print(), SCH_TEXTBOX::Print(), SCH_SHAPE::PrintBackground(), SCH_LEGACY_PLUGIN_CACHE::saveArc(), SCH_LEGACY_PLUGIN_CACHE::saveBezier(), SCH_LEGACY_PLUGIN_CACHE::saveRectangle(), SCH_SEXPR_PLUGIN_CACHE::saveTextBox(), SCH_SEXPR_PLUGIN::saveTextBox(), EDA_SHAPE::ShapeGetMsgPanelInfo(), PLOTTER::ThickArc(), GERBER_PLOTTER::ThickArc(), AR_MATRIX::TraceSegmentPcb(), DIALOG_GRAPHIC_ITEM_PROPERTIES::TransferDataFromWindow(), DIALOG_GRAPHIC_ITEM_PROPERTIES::TransferDataToWindow(), DIALOG_PAD_PRIMITIVES_PROPERTIES::TransferDataToWindow(), EDA_SHAPE::TransformShapeToPolygon(), EE_POINT_EDITOR::updatePoints(), and PCB_POINT_EDITOR::updatePoints().

◆ GetEndX()

◆ GetEndY()

◆ GetFillColor()

◆ GetFillMode()

◆ GetFlags()

◆ GetFocusPosition()

virtual const VECTOR2I EDA_ITEM::GetFocusPosition ( ) const
inlinevirtualinherited

Similar to GetPosition, but allows items to return their visual center rather than their anchor.

Reimplemented in BOARD, PCB_SHAPE, and PCB_TRACK.

Definition at line 256 of file eda_item.h.

256{ return GetPosition(); }
virtual VECTOR2I GetPosition() const
Definition: eda_item.h:249

References EDA_ITEM::GetPosition().

Referenced by SCH_EDIT_FRAME::FocusOnItem().

◆ GetFont()

KIFONT::FONT * EDA_TEXT::GetFont ( ) const
inlineinherited

Definition at line 188 of file eda_text.h.

188{ return m_attributes.m_Font; }
KIFONT::FONT * m_Font

References EDA_TEXT::m_attributes, and TEXT_ATTRIBUTES::m_Font.

Referenced by BOARD_ADAPTER::addText(), SCH_EDIT_TOOL::ChangeTextType(), DIALOG_SCH_FIELD_PROPERTIES::DIALOG_SCH_FIELD_PROPERTIES(), KIGFX::DS_PAINTER::draw(), KIGFX::PCB_PAINTER::draw(), KIGFX::SCH_PAINTER::draw(), PCB_PLUGIN::format(), EDA_TEXT::Format(), PCB_PLUGIN::formatRenderCache(), EDA_TEXT::getDrawFont(), LIB_FIELD::getDrawFont(), LIB_TEXT::getDrawFont(), getDrawFont(), SCH_FIELD::getDrawFont(), SCH_TEXT::getDrawFont(), SCH_TEXTBOX::getDrawFont(), KIGFX::SCH_PAINTER::getFont(), EDA_TEXT::GetFontName(), LIB_FIELD::GetMsgPanelInfo(), LIB_TEXT::GetMsgPanelInfo(), GetMsgPanelInfo(), SCH_FIELD::GetMsgPanelInfo(), SCH_LABEL_BASE::GetMsgPanelInfo(), SCH_TEXT::GetMsgPanelInfo(), SCH_TEXTBOX::GetMsgPanelInfo(), FP_TEXT::GetMsgPanelInfo(), FP_TEXTBOX::GetMsgPanelInfo(), PCB_DIMENSION_BASE::GetMsgPanelInfo(), PCB_TEXT::GetMsgPanelInfo(), PCB_TEXTBOX::GetMsgPanelInfo(), SCH_FIELD::GetRenderCache(), GetShownText(), SCH_TEXTBOX::GetShownText(), SCH_FIELD::Plot(), SCH_LABEL_BASE::Plot(), SCH_TEXT::Plot(), SCH_TEXTBOX::Plot(), LIB_FIELD::Plot(), LIB_TEXT::Plot(), Plot(), BRDITEMS_PLOTTER::PlotFootprintTextItem(), BRDITEMS_PLOTTER::PlotPcbText(), SCH_FIELD::Print(), LIB_FIELD::print(), LIB_TEXT::print(), print(), SCH_TEXT::Print(), EDA_TEXT::printOneLineOfText(), DIALOG_LABEL_PROPERTIES::TransferDataToWindow(), DIALOG_LIB_TEXT_PROPERTIES::TransferDataToWindow(), DIALOG_LIB_TEXTBOX_PROPERTIES::TransferDataToWindow(), DIALOG_SHEET_PIN_PROPERTIES::TransferDataToWindow(), DIALOG_TEXT_PROPERTIES::TransferDataToWindow(), DIALOG_DIMENSION_PROPERTIES::TransferDataToWindow(), and DIALOG_TEXTBOX_PROPERTIES::TransferDataToWindow().

◆ GetFontName()

wxString EDA_TEXT::GetFontName ( ) const
inherited

Definition at line 759 of file eda_text.cpp.

760{
761 if( GetFont() )
762 return GetFont()->GetName();
763 else
764 return wxEmptyString;
765}
const wxString & GetName() const
Definition: font.h:121

References EDA_TEXT::GetFont(), and KIFONT::FONT::GetName().

Referenced by EDA_TEXT::Compare(), EDA_TEXT::IsDefaultFormatting(), and DIALOG_GLOBAL_EDIT_TEXT_AND_GRAPHICS::processItem().

◆ GetFriendlyName() [1/2]

wxString EDA_ITEM::GetFriendlyName ( ) const
virtualinherited

Reimplemented in PCB_SHAPE, PCB_TRACK, and ZONE.

Definition at line 310 of file eda_item.cpp.

311{
312 return GetTypeDesc();
313}
wxString GetTypeDesc() const
Return a translated description of the type for this EDA_ITEM for display in user facing messages.
Definition: eda_item.cpp:301

References EDA_ITEM::GetTypeDesc().

Referenced by PROPERTIES_PANEL::rebuildProperties().

◆ GetFriendlyName() [2/2]

wxString EDA_SHAPE::GetFriendlyName ( ) const
inherited

Definition at line 611 of file eda_shape.cpp.

612{
613 switch( m_shape )
614 {
615 case SHAPE_T::CIRCLE: return _( "Circle" );
616 case SHAPE_T::ARC: return _( "Arc" );
617 case SHAPE_T::BEZIER: return _( "Curve" );
618 case SHAPE_T::POLY: return _( "Polygon" );
619 case SHAPE_T::RECT: return IsAnnotationProxy() ? _( "Pad Number Box" ) : _( "Rectangle" );
620 case SHAPE_T::SEGMENT: return _( "Segment" );
621 default: return _( "Unrecognized" );
622 }
623}
bool IsAnnotationProxy() const
Definition: eda_shape.h:87
#define _(s)

References _, ARC, BEZIER, CIRCLE, EDA_SHAPE::IsAnnotationProxy(), EDA_SHAPE::m_shape, POLY, RECT, and SEGMENT.

Referenced by PCB_SHAPE::GetFriendlyName(), and EDA_SHAPE::ShapeGetMsgPanelInfo().

◆ GetHorizJustify()

GR_TEXT_H_ALIGN_T EDA_TEXT::GetHorizJustify ( ) const
inlineinherited

Definition at line 149 of file eda_text.h.

149{ return m_attributes.m_Halign; };

References EDA_TEXT::m_attributes, and TEXT_ATTRIBUTES::m_Halign.

Referenced by SCH_EDIT_TOOL::ChangeTextType(), compare(), DIALOG_FIELD_PROPERTIES::DIALOG_FIELD_PROPERTIES(), SCH_DRAWING_TOOLS::DrawShape(), SYMBOL_EDITOR_DRAWING_TOOLS::DrawShape(), EDA_TEXT_DESC::EDA_TEXT_DESC(), AUTOPLACER::fieldHPlacement(), EDA_TEXT::Format(), GetDrawPos(), SCH_TEXTBOX::GetDrawPos(), FP_TEXTBOX::GetDrawPos(), PCB_TEXTBOX::GetDrawPos(), SCH_FIELD::GetEffectiveHorizJustify(), LIB_FIELD::GetMsgPanelInfo(), LIB_TEXT::GetMsgPanelInfo(), SCH_FIELD::GetMsgPanelInfo(), EDA_TEXT::GetTextBox(), hash_fp_item(), EDA_TEXT::IsDefaultFormatting(), SCH_FIELD::IsHorizJustifyFlipped(), FP_TEXT::KeepUpright(), SCH_EAGLE_PLUGIN::loadFieldAttributes(), LEGACY_PLUGIN::loadPCB_TEXT(), SCH_EDIT_TOOL::Mirror(), FP_TEXT::Mirror(), PCB_TEXT::Mirror(), LIB_TEXT::MirrorHorizontal(), MirrorHorizontally(), SCH_TEXTBOX::MirrorHorizontally(), LIB_TEXT::MirrorVertical(), MirrorVertically(), SCH_TEXTBOX::MirrorVertically(), LIB_TEXT::NormalizeJustification(), SCH_FIELD::Plot(), positioningChanged(), LIB_FIELD::print(), EDA_TEXT::printOneLineOfText(), LIB_TEXT::Rotate(), SCH_LEGACY_PLUGIN_CACHE::saveField(), SCH_LEGACY_PLUGIN::saveField(), SCH_LEGACY_PLUGIN_CACHE::saveText(), textsNeedUpdate(), DIALOG_LIB_TEXT_PROPERTIES::TransferDataToWindow(), DIALOG_LIB_TEXTBOX_PROPERTIES::TransferDataToWindow(), DIALOG_TEXT_PROPERTIES::TransferDataToWindow(), DIALOG_DIMENSION_PROPERTIES::TransferDataToWindow(), and DIALOG_TEXTBOX_PROPERTIES::TransferDataToWindow().

◆ GetHyperlink()

wxString EDA_TEXT::GetHyperlink ( ) const
inlineinherited

◆ GetInterline()

int EDA_TEXT::GetInterline ( ) const
inherited

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

500{
502}
int GetInterline() const
Return the distance between two lines of text.
Definition: eda_text.cpp:499

References EDA_TEXT::getDrawFont(), EDA_TEXT::GetInterline(), EDA_TEXT::GetTextHeight(), and KiROUND().

Referenced by CADSTAR_ARCHIVE_PARSER::FixTextPositionNoAlignment(), EDA_TEXT::GetInterline(), and EDA_TEXT::GetLinePositions().

◆ GetItemDescription()

wxString LIB_TEXTBOX::GetItemDescription ( UNITS_PROVIDER aUnitsProvider) const
overridevirtual

Return a user-visible description string of this item.

This description is used in disambiguation menus, the message panel, ERC/DRC reports, etc.

The default version of this function raises an assertion in the debug mode and returns a string to indicate that it was not overridden to provide the object specific text.

Returns
The menu text string.

Reimplemented from LIB_SHAPE.

Definition at line 374 of file lib_textbox.cpp.

375{
376 return wxString::Format( _( "Graphic Text Box" ) );
377}
void Format(OUTPUTFORMATTER *out, int aNestLevel, int aCtl, const CPTREE &aTree)
Output a PTREE into s-expression format via an OUTPUTFORMATTER derivative.
Definition: ptree.cpp:200

References _, and Format().

◆ GetLength()

double EDA_SHAPE::GetLength ( ) const
inherited

Return the length of the track using the hypotenuse calculation.

Returns
the length of the track

Definition at line 110 of file eda_shape.cpp.

111{
112 double length = 0.0;
113
114 switch( m_shape )
115 {
116 case SHAPE_T::BEZIER:
117 for( size_t ii = 1; ii < m_bezierPoints.size(); ++ii )
118 length += GetLineLength( m_bezierPoints[ ii - 1], m_bezierPoints[ii] );
119
120 return length;
121
122 case SHAPE_T::SEGMENT:
123 return GetLineLength( GetStart(), GetEnd() );
124
125 case SHAPE_T::POLY:
126 for( int ii = 0; ii < m_poly.COutline( 0 ).SegmentCount(); ii++ )
127 length += m_poly.COutline( 0 ).CSegment( ii ).Length();
128
129 return length;
130
131 case SHAPE_T::ARC:
132 return GetRadius() * GetArcAngle().AsRadians();
133
134 default:
136 return 0.0;
137 }
138}
double AsRadians() const
Definition: eda_angle.h:153
int Length() const
Return the length (this).
Definition: seg.h:326
const SEG CSegment(int aIndex) const
Return a constant copy of the aIndex segment in the line chain.

References ARC, EDA_ANGLE::AsRadians(), BEZIER, SHAPE_POLY_SET::COutline(), SHAPE_LINE_CHAIN::CSegment(), EDA_SHAPE::GetArcAngle(), EDA_SHAPE::GetEnd(), GetLineLength(), EDA_SHAPE::GetRadius(), EDA_SHAPE::GetStart(), SEG::Length(), EDA_SHAPE::m_bezierPoints, EDA_SHAPE::m_poly, EDA_SHAPE::m_shape, POLY, SEGMENT, EDA_SHAPE::SHAPE_T_asString(), and UNIMPLEMENTED_FOR.

Referenced by DRAWING_TOOL::drawShape(), and EDA_SHAPE::ShapeGetMsgPanelInfo().

◆ GetLinePositions()

void EDA_TEXT::GetLinePositions ( std::vector< VECTOR2I > &  aPositions,
int  aLineCount 
) const
inherited

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 VECTOR2I positions.
aLineCountis the number of lines (not recalculated here for efficiency reasons.

Definition at line 673 of file eda_text.cpp.

674{
675 VECTOR2I pos = GetDrawPos(); // Position of first line of the multiline text according
676 // to the center of the multiline text block
677
678 VECTOR2I offset; // Offset to next line.
679
680 offset.y = GetInterline();
681
682 if( aLineCount > 1 )
683 {
684 switch( GetVertJustify() )
685 {
687 break;
688
690 pos.y -= ( aLineCount - 1 ) * offset.y / 2;
691 break;
692
694 pos.y -= ( aLineCount - 1 ) * offset.y;
695 break;
696 }
697 }
698
699 // Rotate the position of the first line around the center of the multiline text block
701
702 // Rotate the offset lines to increase happened in the right direction
703 RotatePoint( offset, GetDrawRotation() );
704
705 for( int ii = 0; ii < aLineCount; ii++ )
706 {
707 aPositions.push_back( (VECTOR2I) pos );
708 pos += offset;
709 }
710}

References EDA_TEXT::GetDrawPos(), EDA_TEXT::GetDrawRotation(), EDA_TEXT::GetInterline(), EDA_TEXT::GetVertJustify(), GR_TEXT_V_ALIGN_BOTTOM, GR_TEXT_V_ALIGN_CENTER, GR_TEXT_V_ALIGN_TOP, RotatePoint(), and VECTOR2< T >::y.

Referenced by SCH_TEXT::Plot(), SCH_TEXTBOX::Plot(), BRDITEMS_PLOTTER::PlotPcbText(), and EDA_TEXT::Print().

◆ GetLineSpacing()

double EDA_TEXT::GetLineSpacing ( ) const
inlineinherited

Definition at line 193 of file eda_text.h.

193{ return m_attributes.m_LineSpacing; }

References EDA_TEXT::m_attributes, and TEXT_ATTRIBUTES::m_LineSpacing.

Referenced by EDA_TEXT::Format().

◆ GetMenuImage()

BITMAPS LIB_TEXTBOX::GetMenuImage ( ) const
overridevirtual

Return a pointer to an image to be used in menus.

The default version returns the right arrow image. Override this function to provide object specific menu images.

Returns
The menu image associated with the item.

Reimplemented from LIB_SHAPE.

Definition at line 380 of file lib_textbox.cpp.

381{
383}

References add_textbox.

◆ GetMsgPanelInfo()

void LIB_TEXTBOX::GetMsgPanelInfo ( EDA_DRAW_FRAME aFrame,
std::vector< MSG_PANEL_ITEM > &  aList 
)
overridevirtual

Display basic info (type, part and convert) about the current item in message panel.

This base function is used to display the information common to the all library items. Call the base class from the derived class or the common information will not be updated in the message panel.

Parameters
aListis the list to populate.

Reimplemented from LIB_SHAPE.

Definition at line 480 of file lib_textbox.cpp.

481{
482 // Don't use GetShownText() here; we want to show the user the variable references
483 aList.emplace_back( _( "Text Box" ), KIUI::EllipsizeStatusText( aFrame, GetText() ) );
484
485 aList.emplace_back( _( "Font" ), GetFont() ? GetFont()->GetName() : _( "Default" ) );
486
487 wxString textStyle[] = { _( "Normal" ), _( "Italic" ), _( "Bold" ), _( "Bold Italic" ) };
488 int style = IsBold() && IsItalic() ? 3 : IsBold() ? 2 : IsItalic() ? 1 : 0;
489 aList.emplace_back( _( "Style" ), textStyle[style] );
490
491 aList.emplace_back( _( "Text Size" ), aFrame->MessageTextFromValue( GetTextWidth() ) );
492
493 aList.emplace_back( _( "Box Width" ),
494 aFrame->MessageTextFromValue( std::abs( GetEnd().x - GetStart().x ) ) );
495
496 aList.emplace_back( _( "Box Height" ),
497 aFrame->MessageTextFromValue( std::abs( GetEnd().y - GetStart().y ) ) );
498
499 m_stroke.GetMsgPanelInfo( aFrame, aList );
500}
void GetMsgPanelInfo(UNITS_PROVIDER *aUnitsProvider, std::vector< MSG_PANEL_ITEM > &aList, bool aIncludeStyle=true, bool aIncludeWidth=true)
wxString MessageTextFromValue(double aValue, bool aAddUnitLabel=true, EDA_DATA_TYPE aType=EDA_DATA_TYPE::DISTANCE)
A lower-precision version of StringFromValue().
wxString EllipsizeStatusText(wxWindow *aWindow, const wxString &aString)
Ellipsize text (at the end) to be no more than 1/3 of the window width.
Definition: ui_common.cpp:197

References _, std::abs(), KIUI::EllipsizeStatusText(), EDA_SHAPE::GetEnd(), EDA_TEXT::GetFont(), STROKE_PARAMS::GetMsgPanelInfo(), EDA_SHAPE::GetStart(), EDA_TEXT::GetText(), EDA_TEXT::GetTextWidth(), EDA_TEXT::IsBold(), EDA_TEXT::IsItalic(), EDA_SHAPE::m_stroke, and UNITS_PROVIDER::MessageTextFromValue().

◆ GetParent()

◆ getParentOrientation()

EDA_ANGLE LIB_SHAPE::getParentOrientation ( ) const
inlineoverrideprivatevirtualinherited

Implements EDA_SHAPE.

Definition at line 132 of file lib_shape.h.

132{ return ANGLE_0; }

References ANGLE_0.

◆ getParentPosition()

VECTOR2I LIB_SHAPE::getParentPosition ( ) const
inlineoverrideprivatevirtualinherited

Implements EDA_SHAPE.

Definition at line 133 of file lib_shape.h.

133{ return VECTOR2I(); }

◆ GetPenWidth()

int LIB_SHAPE::GetPenWidth ( ) const
overridevirtualinherited

Implements LIB_ITEM.

Definition at line 269 of file lib_shape.cpp.

270{
271 return GetWidth();
272}

References EDA_SHAPE::GetWidth().

◆ GetPointCount()

int EDA_SHAPE::GetPointCount ( ) const
inherited
Returns
the number of corners of the polygonal shape

Definition at line 1254 of file eda_shape.cpp.

1255{
1256 // return the number of corners of the polygonal shape
1257 // this shape is expected to be only one polygon without hole
1258 if( GetPolyShape().OutlineCount() )
1259 return GetPolyShape().VertexCount( 0 );
1260
1261 return 0;
1262}
SHAPE_POLY_SET & GetPolyShape()
Definition: eda_shape.h:247
int VertexCount(int aOutline=-1, int aHole=-1) const
Return the number of points in the shape poly set.

References EDA_SHAPE::GetPolyShape(), and SHAPE_POLY_SET::VertexCount().

Referenced by GRAPHICS_CLEANER::isNullShape(), SCH_SEXPR_PARSER::ParseSchematic(), and EE_POINT_EDITOR::updatePoints().

◆ GetPolyShape() [1/2]

◆ GetPolyShape() [2/2]

const SHAPE_POLY_SET & EDA_SHAPE::GetPolyShape ( ) const
inlineinherited

Definition at line 248 of file eda_shape.h.

248{ return m_poly; }

References EDA_SHAPE::m_poly.

◆ getPosition()

VECTOR2I EDA_SHAPE::getPosition ( ) const
protectedinherited

◆ GetPosition()

◆ GetRadius()

int EDA_SHAPE::GetRadius ( ) const
inherited

Definition at line 523 of file eda_shape.cpp.

524{
525 double radius = 0.0;
526
527 switch( m_shape )
528 {
529 case SHAPE_T::ARC:
530 radius = GetLineLength( m_arcCenter, m_start );
531 break;
532
533 case SHAPE_T::CIRCLE:
534 radius = GetLineLength( m_start, m_end );
535 break;
536
537 default:
539 }
540
541 // don't allow degenerate circles/arcs
542 return std::max( 1, KiROUND( radius ) );
543}

References ARC, CIRCLE, GetLineLength(), KiROUND(), EDA_SHAPE::m_arcCenter, EDA_SHAPE::m_end, EDA_SHAPE::m_shape, EDA_SHAPE::m_start, EDA_SHAPE::SHAPE_T_asString(), and UNIMPLEMENTED_FOR.

Referenced by BOARD_ADAPTER::addShape(), EDA_SHAPE::calcEdit(), EDA_SHAPE::computeArcBBox(), ConvertOutlineToPolygon(), KIGFX::PCB_PAINTER::draw(), KIGFX::SCH_PAINTER::draw(), formatCircle(), EDA_SHAPE::getBoundingBox(), PCB_SHAPE::GetFocusPosition(), LIB_SHAPE::GetItemDescription(), SCH_SHAPE::GetItemDescription(), EDA_SHAPE::GetLength(), hash_fp_item(), EDA_SHAPE::hitTest(), idf_export_outline(), GRAPHICS_CLEANER::isNullShape(), EDA_SHAPE::makeEffectiveShapes(), DSN::SPECCTRA_DB::makeIMAGE(), ALTIUM_PCB::Parse(), PCB_PARSER::parsePAD(), SCH_SHAPE::Plot(), LIB_SHAPE::Plot(), BRDITEMS_PLOTTER::PlotPcbShape(), SCH_SHAPE::Print(), LIB_SHAPE::print(), SCH_SHAPE::PrintBackground(), SCH_LEGACY_PLUGIN_CACHE::saveArc(), SCH_LEGACY_PLUGIN_CACHE::saveCircle(), EDA_SHAPE::scale(), EDA_SHAPE::ShapeGetMsgPanelInfo(), DIALOG_GRAPHIC_ITEM_PROPERTIES::TransferDataToWindow(), DIALOG_PAD_PRIMITIVES_PROPERTIES::TransferDataToWindow(), and EDA_SHAPE::TransformShapeToPolygon().

◆ GetRectCorners()

std::vector< VECTOR2I > EDA_SHAPE::GetRectCorners ( ) const
inherited

Definition at line 1035 of file eda_shape.cpp.

1036{
1037 std::vector<VECTOR2I> pts;
1038 VECTOR2I topLeft = GetStart();
1039 VECTOR2I botRight = GetEnd();
1040
1041 // Un-rotate rect topLeft and botRight
1042 if( !getParentOrientation().IsCardinal() )
1043 {
1044 topLeft -= getParentPosition();
1045 RotatePoint( topLeft, -getParentOrientation() );
1046
1047 botRight -= getParentPosition();
1048 RotatePoint( botRight, -getParentOrientation() );
1049 }
1050
1051 // Set up the un-rotated 4 corners
1052 pts.emplace_back( topLeft );
1053 pts.emplace_back( botRight.x, topLeft.y );
1054 pts.emplace_back( botRight );
1055 pts.emplace_back( topLeft.x, botRight.y );
1056
1057 // Now re-rotate the 4 corners to get a diamond
1058 if( !getParentOrientation().IsCardinal() )
1059 {
1060 for( VECTOR2I& pt : pts )
1061 {
1063 pt += getParentPosition();
1064 }
1065 }
1066
1067 return pts;
1068}

References EDA_SHAPE::GetEnd(), EDA_SHAPE::getParentOrientation(), EDA_SHAPE::getParentPosition(), EDA_SHAPE::GetStart(), RotatePoint(), VECTOR2< T >::x, and VECTOR2< T >::y.

Referenced by BOARD_ADAPTER::addShape(), ConvertOutlineToPolygon(), KIGFX::PCB_PAINTER::draw(), EDA_SHAPE::getBoundingBox(), PCB_SHAPE::GetCorners(), EDA_SHAPE::hitTest(), EDA_SHAPE::makeEffectiveShapes(), SCH_EDITOR_CONTROL::Paste(), SCH_SHAPE::Plot(), BRDITEMS_PLOTTER::PlotFootprintShape(), BRDITEMS_PLOTTER::PlotPcbShape(), EDA_SHAPE::TransformShapeToPolygon(), FP_TEXTBOX::TransformShapeToPolygon(), and PCB_TEXTBOX::TransformShapeToPolygon().

◆ GetRenderCache()

std::vector< std::unique_ptr< KIFONT::GLYPH > > * EDA_TEXT::GetRenderCache ( const KIFONT::FONT aFont,
const wxString &  forResolvedText,
const VECTOR2I aOffset = { 0, 0 } 
) const
inherited

Definition at line 453 of file eda_text.cpp.

455{
456 if( getDrawFont()->IsOutline() )
457 {
458 EDA_ANGLE resolvedAngle = GetDrawRotation();
459
460 if( m_render_cache.empty()
461 || m_render_cache_text != forResolvedText
462 || m_render_cache_angle != resolvedAngle
463 || m_render_cache_offset != aOffset )
464 {
465 m_render_cache.clear();
466
467 KIFONT::OUTLINE_FONT* font = static_cast<KIFONT::OUTLINE_FONT*>( getDrawFont() );
469
470 attrs.m_Angle = resolvedAngle;
471
472 font->GetLinesAsGlyphs( &m_render_cache, GetShownText(), GetDrawPos() + aOffset, attrs );
473 m_render_cache_angle = resolvedAngle;
474 m_render_cache_text = forResolvedText;
475 m_render_cache_offset = aOffset;
476 }
477
478 return &m_render_cache;
479 }
480
481 return nullptr;
482}
VECTOR2I m_render_cache_offset
Definition: eda_text.h:397
EDA_ANGLE m_render_cache_angle
Definition: eda_text.h:396
wxString m_render_cache_text
Definition: eda_text.h:395
Class OUTLINE_FONT implements outline font drawing.
Definition: outline_font.h:52
void GetLinesAsGlyphs(std::vector< std::unique_ptr< GLYPH > > *aGlyphs, const wxString &aText, const VECTOR2I &aPosition, const TEXT_ATTRIBUTES &aAttrs) const

References EDA_TEXT::GetAttributes(), EDA_TEXT::getDrawFont(), EDA_TEXT::GetDrawPos(), EDA_TEXT::GetDrawRotation(), KIFONT::OUTLINE_FONT::GetLinesAsGlyphs(), EDA_TEXT::GetShownText(), TEXT_ATTRIBUTES::m_Angle, EDA_TEXT::m_render_cache, EDA_TEXT::m_render_cache_angle, EDA_TEXT::m_render_cache_offset, and EDA_TEXT::m_render_cache_text.

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

◆ GetShape()

SHAPE_T EDA_SHAPE::GetShape ( ) const
inlineinherited

Definition at line 113 of file eda_shape.h.

113{ return m_shape; }

References EDA_SHAPE::m_shape.

Referenced by PCB_POINT_EDITOR::addCorner(), EE_POINT_EDITOR::addCornerCondition(), LIB_SHAPE::AddPoint(), SCH_SHAPE::AddPoint(), BOARD_ADAPTER::addShape(), GRAPHICS_CLEANER::areEquivalent(), EDA_SHAPE::beginEdit(), EDA_SHAPE::calcEdit(), PCB_POINT_EDITOR::canAddCorner(), KI_TEST::CheckFpShape(), EDA_SHAPE::continueEdit(), ConvertOutlineToPolygon(), KIGFX::SCH_PAINTER::draw(), KIGFX::PCB_PAINTER::draw(), EDA_SHAPE_DESC::EDA_SHAPE_DESC(), EDA_SHAPE::endEdit(), PAD_TOOL::explodePad(), CADSTAR_SCH_ARCHIVE_LOADER::fixUpLibraryPins(), FP_SHAPE::Flip(), FootprintWriteShape(), PCB_PLUGIN::format(), PCB_SHAPE::GetCorners(), FP_TEXTBOX::GetCorners(), FOOTPRINT::GetCoverageArea(), LIB_SHAPE::GetItemDescription(), SCH_SHAPE::GetItemDescription(), LIB_SHAPE::GetMenuImage(), SCH_SHAPE::GetMenuImage(), CADSTAR_SCH_ARCHIVE_LOADER::getScaledLibPart(), CONVERT_TOOL::getStartEndPoints(), EE_SELECTION_TOOL::GuessSelectionCandidates(), hash_fp_item(), idf_export_outline(), GRAPHICS_CLEANER::isNullShape(), EE_POINT_EDITOR::Main(), EDIT_POINTS_FACTORY::Make(), DSN::SPECCTRA_DB::makeIMAGE(), PCB_POINT_EDITOR::makePoints(), CONVERT_TOOL::makePolysFromChainedSegs(), GRAPHICS_CLEANER::mergeRects(), PCB_SHAPE::Mirror(), FP_SHAPE::Mirror(), FP_SHAPE::Move(), LIB_SHAPE::Normalize(), SCH_SHAPE::Normalize(), PCB_SHAPE::cmp_drawings::operator()(), FOOTPRINT::cmp_drawings::operator()(), ALTIUM_PCB::Parse(), SCH_EDITOR_CONTROL::Paste(), SCH_SHAPE::Plot(), LIB_SHAPE::Plot(), BRDITEMS_PLOTTER::PlotFootprintShape(), BRDITEMS_PLOTTER::PlotPcbShape(), SCH_SHAPE::Print(), LIB_SHAPE::print(), SCH_SHAPE::PrintBackground(), PAD_TOOL::RecombinePad(), PCB_POINT_EDITOR::removeCorner(), PCB_POINT_EDITOR::removeCornerCondition(), PCB_TEXTBOX::Rotate(), DRC_TEST_PROVIDER_EDGE_CLEARANCE::Run(), SCH_LEGACY_PLUGIN_CACHE::saveArc(), SCH_LEGACY_PLUGIN_CACHE::saveBezier(), SCH_LEGACY_PLUGIN_CACHE::saveCircle(), SCH_LEGACY_PLUGIN_CACHE::savePolyLine(), SCH_LEGACY_PLUGIN_CACHE::saveRectangle(), SCH_SEXPR_PLUGIN::saveShape(), SCH_LEGACY_PLUGIN_CACHE::SaveSymbol(), SCH_SEXPR_PLUGIN_CACHE::saveSymbolDrawItem(), shapesNeedUpdate(), GERBER_PLOTTER::ThickArc(), AR_MATRIX::TraceSegmentPcb(), DIALOG_GRAPHIC_ITEM_PROPERTIES::TransferDataFromWindow(), DIALOG_PAD_PRIMITIVES_PROPERTIES::TransferDataFromWindow(), DIALOG_GRAPHIC_ITEM_PROPERTIES::TransferDataToWindow(), DIALOG_PAD_PRIMITIVES_PROPERTIES::TransferDataToWindow(), PCB_POINT_EDITOR::updateItem(), EE_POINT_EDITOR::updateParentItem(), EE_POINT_EDITOR::updatePoints(), PCB_POINT_EDITOR::updatePoints(), and DIALOG_GRAPHIC_ITEM_PROPERTIES::Validate().

◆ GetShownText()

wxString LIB_TEXTBOX::GetShownText ( int  aDepth = 0,
bool  aAllowExtraText = true 
) const
overridevirtual

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

Parameters
aDepthis used to prevent infinite recursions and loops when expanding text variables.
aAllowExtraTextis true to allow adding more text than the initial expanded text, for intance a title, a prefix for texts in display functions. False to disable any added text (for instance when writing the shown text in netlists).

Reimplemented from EDA_TEXT.

Definition at line 330 of file lib_textbox.cpp.

331{
332 wxString text = EDA_TEXT::GetShownText();
333
334 KIFONT::FONT* font = GetFont();
335 VECTOR2D size = GetEnd() - GetStart();
336 int colWidth = GetTextAngle() == ANGLE_HORIZONTAL ? size.x : size.y;
337
338 if( !font )
340
341 colWidth = abs( colWidth ) - GetTextMargin() * 2;
342 font->LinebreakText( text, colWidth, GetTextSize(), GetTextThickness(), IsBold(), IsItalic() );
343
344 return text;
345}
void LinebreakText(wxString &aText, int aColumnWidth, const VECTOR2I &aGlyphSize, int aThickness, bool aBold, bool aItalic) const
Insert characters into text to ensure that no lines are wider than aColumnWidth.
Definition: font.cpp:509
static constexpr EDA_ANGLE & ANGLE_HORIZONTAL
Definition: eda_angle.h:425

References std::abs(), ANGLE_HORIZONTAL, LIB_ITEM::GetDefaultFont(), EDA_SHAPE::GetEnd(), EDA_TEXT::GetFont(), KIFONT::FONT::GetFont(), EDA_TEXT::GetShownText(), EDA_SHAPE::GetStart(), EDA_TEXT::GetTextAngle(), GetTextMargin(), EDA_TEXT::GetTextSize(), EDA_TEXT::GetTextThickness(), EDA_TEXT::IsBold(), EDA_TEXT::IsItalic(), KIFONT::FONT::LinebreakText(), text, VECTOR2< T >::x, and VECTOR2< T >::y.

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

◆ GetSortPosition()

virtual VECTOR2I EDA_ITEM::GetSortPosition ( ) const
inlinevirtualinherited

Return the coordinates that should be used for sorting this element visually compared to other elements.

For instance, for lines the midpoint might be a better sorting point than either end.

Returns
X,Y coordinate of the sort point

Reimplemented in SCH_LINE.

Definition at line 265 of file eda_item.h.

265{ return GetPosition(); }

References EDA_ITEM::GetPosition().

◆ GetStart()

const VECTOR2I & EDA_SHAPE::GetStart ( ) const
inlineinherited

Return the starting point of the graphic.

Definition at line 120 of file eda_shape.h.

120{ return m_start; }

References EDA_SHAPE::m_start.

Referenced by PCB_POINT_EDITOR::addCorner(), BOARD_ADAPTER::addShape(), GRAPHICS_CLEANER::areEquivalent(), BOOST_AUTO_TEST_CASE(), EDA_SHAPE::CalcArcAngles(), EDA_SHAPE::calcEdit(), KI_TEST::CheckFpShape(), ALTIUM_PCB::ConvertArcs6ToBoardItemOnLayer(), ConvertOutlineToPolygon(), CreateBoardSection(), MICROWAVE_TOOL::createMicrowaveInductor(), KIGFX::PCB_PAINTER::draw(), PCB_POINT_EDITOR::editArcEndpointKeepCenter(), PCB_POINT_EDITOR::editArcEndpointKeepTangent(), PCB_PLUGIN::format(), formatArc(), formatBezier(), formatCircle(), formatRect(), FP_TEXTBOX::GetBotRight(), PCB_TEXTBOX::GetBotRight(), EDA_SHAPE::getBoundingBox(), PCB_SHAPE::GetFocusPosition(), EDA_SHAPE::GetLength(), GetMsgPanelInfo(), SCH_TEXTBOX::GetMsgPanelInfo(), FP_TEXTBOX::GetMsgPanelInfo(), PCB_TEXTBOX::GetMsgPanelInfo(), EDA_SHAPE::GetRectCorners(), CADSTAR_SCH_ARCHIVE_LOADER::getScaledLibPart(), GetShownText(), SCH_TEXTBOX::GetShownText(), CONVERT_TOOL::getStartEndPoints(), EDA_SHAPE::GetTopLeft(), FP_TEXTBOX::GetTopLeft(), PCB_TEXTBOX::GetTopLeft(), hash_fp_item(), EDA_SHAPE::hitTest(), idf_export_outline(), GRAPHICS_CLEANER::isNullShape(), SCH_LEGACY_PLUGIN_CACHE::loadArc(), EDIT_POINTS_FACTORY::Make(), DSN::SPECCTRA_DB::makeIMAGE(), PCB_POINT_EDITOR::makePoints(), CONVERT_TOOL::makePolysFromChainedSegs(), GRAPHICS_CLEANER::mergeRects(), PCB_SHAPE::NormalizeRect(), PCB_PARSER::parsePAD(), SCH_EDITOR_CONTROL::Paste(), SCH_SHAPE::Plot(), BRDITEMS_PLOTTER::PlotFootprintShape(), BRDITEMS_PLOTTER::PlotPcbShape(), BRDITEMS_PLOTTER::PlotPcbTarget(), SCH_SHAPE::Print(), SCH_TEXTBOX::Print(), SCH_SHAPE::PrintBackground(), SCH_LEGACY_PLUGIN_CACHE::saveArc(), SCH_LEGACY_PLUGIN_CACHE::saveBezier(), SCH_SEXPR_PLUGIN_CACHE::saveTextBox(), SCH_SEXPR_PLUGIN::saveTextBox(), EDA_SHAPE::ShapeGetMsgPanelInfo(), PLOTTER::ThickArc(), GERBER_PLOTTER::ThickArc(), AR_MATRIX::TraceSegmentPcb(), DIALOG_GRAPHIC_ITEM_PROPERTIES::TransferDataFromWindow(), DIALOG_PAD_PRIMITIVES_PROPERTIES::TransferDataFromWindow(), DIALOG_GRAPHIC_ITEM_PROPERTIES::TransferDataToWindow(), DIALOG_PAD_PRIMITIVES_PROPERTIES::TransferDataToWindow(), EDA_SHAPE::TransformShapeToPolygon(), EE_POINT_EDITOR::updatePoints(), and PCB_POINT_EDITOR::updatePoints().

◆ GetStartX()

◆ GetStartY()

◆ GetState()

int EDA_ITEM::GetState ( EDA_ITEM_FLAGS  type) const
inlineinherited

Definition at line 123 of file eda_item.h.

124 {
125 return m_status & type;
126 }
EDA_ITEM_FLAGS m_status
Definition: eda_item.h:495

References EDA_ITEM::m_status.

◆ GetStatus()

EDA_ITEM_FLAGS EDA_ITEM::GetStatus ( ) const
inlineinherited

Definition at line 136 of file eda_item.h.

136{ return m_status; }

References EDA_ITEM::m_status.

◆ GetStroke()

◆ GetText()

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

Return the string associated with the text object.

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

Definition at line 87 of file eda_text.h.

87{ return m_text; }

References EDA_TEXT::m_text.

Referenced by CADSTAR_PCB_ARCHIVE_LOADER::addAttribute(), SCH_EAGLE_PLUGIN::addImplicitConnections(), SCH_SHEET_PATH::AddNewSymbolInstances(), NETLIST_EXPORTER_XML::addSymbolFields(), CADSTAR_SCH_ARCHIVE_LOADER::applyTextSettings(), SCH_EDIT_FRAME::AutoRotateItem(), EE_SELECTION_TOOL::autostartEvent(), CONNECTION_GRAPH::buildConnectionGraph(), SCH_EDIT_TOOL::ChangeTextType(), CheckLibSymbol(), SCH_SHEET::CleanupSheet(), LIB_TEXT::Clone(), LIB_FIELD::compare(), LIB_TEXT::compare(), compare(), SCH_BUS_WIRE_ENTRY::ConnectionPropagatesTo(), SCH_DRAWING_TOOLS::createNewText(), SCH_DRAWING_TOOLS::createSheetPin(), DIALOG_FIELD_PROPERTIES::DIALOG_FIELD_PROPERTIES(), DIALOG_LIB_FIELD_PROPERTIES::DIALOG_LIB_FIELD_PROPERTIES(), DIALOG_SCH_FIELD_PROPERTIES::DIALOG_SCH_FIELD_PROPERTIES(), KIGFX::SCH_VIEW::DisplaySymbol(), KIGFX::SCH_PAINTER::draw(), EDA_TEXT_DESC::EDA_TEXT_DESC(), CONNECTION_GRAPH::ercCheckHierSheets(), CADSTAR_ARCHIVE_PARSER::FixTextPositionNoAlignment(), LIB_SYMBOL::Flatten(), PCB_PLUGIN::format(), LIB_SYMBOL::GetFootprint(), SCH_SYMBOL::GetFootprintFieldText(), LIB_FIELD::GetFullText(), SCH_LABEL_BASE::GetIntersheetRefs(), PCB_DIMENSION_BASE::GetItemDescription(), CADSTAR_PCB_ARCHIVE_LOADER::getKiCadNet(), FP_TEXT::GetLength(), LIB_FIELD::GetMsgPanelInfo(), LIB_TEXT::GetMsgPanelInfo(), GetMsgPanelInfo(), SCH_FIELD::GetMsgPanelInfo(), SCH_LABEL_BASE::GetMsgPanelInfo(), SCH_TEXT::GetMsgPanelInfo(), SCH_TEXTBOX::GetMsgPanelInfo(), FP_TEXT::GetMsgPanelInfo(), FP_TEXTBOX::GetMsgPanelInfo(), PCB_TEXT::GetMsgPanelInfo(), PCB_TEXTBOX::GetMsgPanelInfo(), LIB_SYMBOL::GetPrefix(), SCH_SYMBOL::GetRef(), FOOTPRINT::GetReference(), LIB_SYMBOL::GetSearchText(), FOOTPRINT::GetValue(), SCH_SYMBOL::GetValueFieldText(), hash_fp_item(), SCH_SHEET::HasUndefinedPins(), LIB_FIELD::HitTest(), SCH_DRAWING_TOOLS::importHierLabel(), SCH_LABEL_BASE::IncrementLabel(), GENERAL_COLLECTOR::Inspect(), CADSTAR_SCH_ARCHIVE_LOADER::Load(), LEGACY_PLUGIN::loadPCB_TEXT(), SCH_EAGLE_PLUGIN::loadSchematic(), CADSTAR_SCH_ARCHIVE_LOADER::loadSchematicSymbolInstances(), SCH_EAGLE_PLUGIN::loadSegments(), SYMBOL_EDIT_FRAME::LoadSymbolFromSchematic(), Matches(), SCH_LABEL_BASE::Matches(), SCH_SHEET_PIN::Matches(), SCH_TEXT::Matches(), SCH_TEXTBOX::Matches(), DIALOG_SHEET_PIN_PROPERTIES::onComboBox(), DIALOG_UPDATE_SYMBOL_FIELDS::onOkButtonClicked(), SCH_FIELD::operator<(), SCH_TEXT::operator<(), SCH_TEXTBOX::operator<(), LIB_FIELD::operator=(), PCB_PARSER::parseEDA_TEXT(), SCH_SEXPR_PARSER::parseEDA_TEXT(), SCH_EDITOR_CONTROL::Paste(), DRAWING_TOOL::PlaceText(), LIB_FIELD::Plot(), LIB_TEXT::Plot(), BRDITEMS_PLOTTER::PlotFootprintTextItems(), DIALOG_RESCUE_EACH::PopulateInstanceList(), LIB_FIELD::print(), DIALOG_CHANGE_SYMBOLS::processSymbols(), SCH_EDIT_FRAME::PutDataInPreviousState(), NETLIST_EXPORTER_SPICE_MODEL::readPorts(), SCHEMATIC::RecomputeIntersheetRefs(), SCH_GLOBALLABEL::ResolveTextVar(), SCH_LEGACY_PLUGIN_CACHE::saveField(), SCH_SEXPR_PLUGIN_CACHE::saveField(), SCH_LEGACY_PLUGIN::saveField(), SCH_SEXPR_PLUGIN::saveField(), CLIPBOARD_IO::SaveSelection(), SCH_LEGACY_PLUGIN::saveSheet(), SCH_LEGACY_PLUGIN_CACHE::SaveSymbol(), SCH_LEGACY_PLUGIN::saveSymbol(), SCH_LEGACY_PLUGIN_CACHE::saveText(), SCH_SEXPR_PLUGIN_CACHE::saveText(), SCH_LEGACY_PLUGIN::saveText(), SCH_SEXPR_PLUGIN::saveText(), SCH_SEXPR_PLUGIN_CACHE::saveTextBox(), SCH_SEXPR_PLUGIN::saveTextBox(), SCH_EDIT_FRAME::SendSelectItemsToPcb(), SYMBOL_EDIT_FRAME::setupUIConditions(), SYMBOL_VIEWER_FRAME::setupUIConditions(), EE_INSPECTION_TOOL::ShowDatasheet(), SCH_SHEET::SymbolCount(), textsNeedUpdate(), DIALOG_EDIT_SYMBOLS_LIBID::TransferDataFromWindow(), DIALOG_LABEL_PROPERTIES::TransferDataToWindow(), DIALOG_LIB_SYMBOL_PROPERTIES::TransferDataToWindow(), DIALOG_LIB_TEXT_PROPERTIES::TransferDataToWindow(), DIALOG_LIB_TEXTBOX_PROPERTIES::TransferDataToWindow(), DIALOG_SHEET_PIN_PROPERTIES::TransferDataToWindow(), DIALOG_SHEET_PROPERTIES::TransferDataToWindow(), DIALOG_TEXT_PROPERTIES::TransferDataToWindow(), DIALOG_TEXTBOX_PROPERTIES::TransferDataToWindow(), EDA_TEXT::TransformBoundingBoxToPolygon(), PCB_DIM_LEADER::updateGeometry(), SCH_EDITOR_CONTROL::updatePastedSymbol(), SCH_SYMBOL::UpdatePrefix(), SYMBOL_EDIT_FRAME::UpdateSymbolMsgPanelInfo(), and FP_TEXT::ViewGetLOD().

◆ GetTextAngle()

const EDA_ANGLE & EDA_TEXT::GetTextAngle ( ) const
inlineinherited

Definition at line 120 of file eda_text.h.

120{ return m_attributes.m_Angle; }

References TEXT_ATTRIBUTES::m_Angle, and EDA_TEXT::m_attributes.

Referenced by CADSTAR_PCB_ARCHIVE_LOADER::addAttribute(), CADSTAR_SCH_ARCHIVE_LOADER::applyTextSettings(), SCH_EDIT_TOOL::ChangeTextType(), compare(), DIALOG_FIELD_PROPERTIES::DIALOG_FIELD_PROPERTIES(), KIGFX::SCH_PAINTER::draw(), SCH_DRAWING_TOOLS::DrawShape(), SYMBOL_EDITOR_DRAWING_TOOLS::DrawShape(), CADSTAR_ARCHIVE_PARSER::FixTextPositionNoAlignment(), FP_TEXT::Flip(), FP_TEXTBOX::Flip(), PCB_TEXT::Flip(), PCB_TEXTBOX::Flip(), PCB_PLUGIN::format(), SCH_LABEL::GetBodyBoundingBox(), LIB_FIELD::GetBoundingBox(), LIB_TEXT::GetBoundingBox(), SCH_FIELD::GetBoundingBox(), SCH_TEXT::GetBoundingBox(), PCB_TEXT::GetBoundingBox(), GetDrawPos(), SCH_TEXTBOX::GetDrawPos(), EDA_TEXT::GetDrawRotation(), SCH_FIELD::GetDrawRotation(), FP_TEXT::GetDrawRotation(), FP_TEXTBOX::GetDrawRotation(), FP_TEXT::GetMsgPanelInfo(), FP_TEXTBOX::GetMsgPanelInfo(), PCB_TEXT::GetMsgPanelInfo(), PCB_TEXTBOX::GetMsgPanelInfo(), GetShownText(), SCH_TEXTBOX::GetShownText(), hash_fp_item(), LIB_FIELD::HitTest(), LIB_TEXT::HitTest(), FP_TEXT::KeepUpright(), SCH_EAGLE_PLUGIN::loadFieldAttributes(), CADSTAR_SCH_ARCHIVE_LOADER::loadSymDefIntoLibrary(), FP_TEXT::Mirror(), PCB_TEXT::Mirror(), PCB_DIMENSION_BASE::Mirror(), LIB_TEXT::MirrorHorizontal(), MirrorHorizontally(), SCH_TEXTBOX::MirrorHorizontally(), LIB_TEXT::MirrorVertical(), MirrorVertically(), SCH_TEXTBOX::MirrorVertically(), LIB_TEXT::NormalizeJustification(), KI_TEST::kitest_cmp_drawings::operator()(), EAGLE_PLUGIN::orientFPText(), SCH_FIELD::Plot(), LIB_FIELD::Plot(), LIB_TEXT::Plot(), positioningChanged(), SCH_FIELD::Print(), LIB_FIELD::print(), LIB_TEXT::print(), SCH_EDIT_TOOL::Rotate(), SCH_TEXTBOX::Rotate(), Rotate(), LIB_FIELD::Rotate(), LIB_TEXT::Rotate(), FP_TEXT::Rotate(), FP_TEXTBOX::Rotate(), PCB_DIMENSION_BASE::Rotate(), PCB_TEXT::Rotate(), PCB_TEXTBOX::Rotate(), SCH_TEXTBOX::Rotate90(), SCH_LEGACY_PLUGIN_CACHE::saveField(), SCH_SEXPR_PLUGIN_CACHE::saveField(), SCH_LEGACY_PLUGIN::saveField(), SCH_SEXPR_PLUGIN::saveField(), SCH_LEGACY_PLUGIN_CACHE::saveText(), SCH_SEXPR_PLUGIN_CACHE::saveText(), SCH_SEXPR_PLUGIN::saveText(), SCH_SEXPR_PLUGIN_CACHE::saveTextBox(), SCH_SEXPR_PLUGIN::saveTextBox(), FP_TEXTBOX::SetTextAngle(), PCB_TEXTBOX::SetTextAngle(), textsNeedUpdate(), DIALOG_LIB_TEXT_PROPERTIES::TransferDataFromWindow(), DIALOG_LIB_TEXTBOX_PROPERTIES::TransferDataFromWindow(), DIALOG_LIB_TEXT_PROPERTIES::TransferDataToWindow(), DIALOG_LIB_TEXTBOX_PROPERTIES::TransferDataToWindow(), DIALOG_TEXT_PROPERTIES::TransferDataToWindow(), DIALOG_DIMENSION_PROPERTIES::TransferDataToWindow(), DIALOG_TEXTBOX_PROPERTIES::TransferDataToWindow(), DIALOG_SCH_FIELD_PROPERTIES::UpdateField(), PCB_DIM_ALIGNED::updateGeometry(), PCB_DIM_ORTHOGONAL::updateGeometry(), PCB_DIM_RADIAL::updateGeometry(), and PCB_DIM_LEADER::updateGeometry().

◆ GetTextAngleDegrees()

double EDA_TEXT::GetTextAngleDegrees ( ) const
inlineinherited

◆ GetTextBox()

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

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

506{
507 VECTOR2I drawPos = GetDrawPos();
508
510 && m_bounding_box_cache_pos == drawPos
511 && m_bounding_box_cache_line == aLine
512 && m_bounding_box_cache_inverted == aInvertY )
513 {
515 }
516
517 BOX2I bbox;
518 wxArrayString strings;
519 wxString text = GetShownText();
520 int thickness = GetEffectiveTextPenWidth();
521
522 if( IsMultilineAllowed() )
523 {
524 wxStringSplit( text, strings, '\n' );
525
526 if( strings.GetCount() ) // GetCount() == 0 for void strings with multilines allowed
527 {
528 if( aLine >= 0 && ( aLine < static_cast<int>( strings.GetCount() ) ) )
529 text = strings.Item( aLine );
530 else
531 text = strings.Item( 0 );
532 }
533 }
534
535 // calculate the H and V size
536 KIFONT::FONT* font = getDrawFont();
537 VECTOR2D fontSize( GetTextSize() );
538 bool bold = IsBold();
539 bool italic = IsItalic();
540 VECTOR2I extents = font->StringBoundaryLimits( text, fontSize, thickness, bold, italic );
541 int overbarOffset = 0;
542
543 // Creates bounding box (rectangle) for horizontal, left and top justified text. The
544 // bounding box will be moved later according to the actual text options
545 VECTOR2I textsize = VECTOR2I( extents.x, extents.y );
546 VECTOR2I pos = drawPos;
547
548 if( IsMultilineAllowed() && aLine > 0 && aLine < (int) strings.GetCount() )
549 pos.y -= KiROUND( aLine * font->GetInterline( fontSize.y ) );
550
551 if( text.Contains( wxT( "~{" ) ) )
552 overbarOffset = extents.y / 14;
553
554 if( aInvertY )
555 pos.y = -pos.y;
556
557 bbox.SetOrigin( pos );
558
559 // for multiline texts and aLine < 0, merge all rectangles (aLine == -1 signals all lines)
560 if( IsMultilineAllowed() && aLine < 0 && strings.GetCount() )
561 {
562 for( unsigned ii = 1; ii < strings.GetCount(); ii++ )
563 {
564 text = strings.Item( ii );
565 extents = font->StringBoundaryLimits( text, fontSize, thickness, bold, italic );
566 textsize.x = std::max( textsize.x, extents.x );
567 }
568
569 // interline spacing is only *between* lines, so total height is the height of the first
570 // line plus the interline distance (with interline spacing) for all subsequent lines
571 textsize.y += KiROUND( ( strings.GetCount() - 1 ) * font->GetInterline( fontSize.y ) );
572 }
573
574 bbox.SetSize( textsize );
575
576 /*
577 * At this point the rectangle origin is the text origin (m_Pos). This is correct only for
578 * left and top justified, non-mirrored, non-overbarred texts. Recalculate for all others.
579 */
580 int italicOffset = IsItalic() ? KiROUND( fontSize.y * ITALIC_TILT ) : 0;
581
582 switch( GetHorizJustify() )
583 {
585 if( IsMirrored() )
586 bbox.SetX( bbox.GetX() - ( bbox.GetWidth() - italicOffset ) );
587 break;
588
590 bbox.SetX( bbox.GetX() - ( bbox.GetWidth() - italicOffset ) / 2 );
591 break;
592
594 if( !IsMirrored() )
595 bbox.SetX( bbox.GetX() - ( bbox.GetWidth() - italicOffset ) );
596 break;
597 }
598
599 switch( GetVertJustify() )
600 {
602 break;
603
605 bbox.SetY( bbox.GetY() - ( bbox.GetHeight() + overbarOffset ) / 2 );
606 break;
607
609 bbox.SetY( bbox.GetY() - ( bbox.GetHeight() + overbarOffset ) );
610 break;
611 }
612
613 bbox.Normalize(); // Make h and v sizes always >= 0
614
616 m_bounding_box_cache_pos = drawPos;
620
621 return bbox;
622}
void SetX(coord_type val)
Definition: box2.h:235
void SetY(coord_type val)
Definition: box2.h:240
coord_type GetHeight() const
Definition: box2.h:188
coord_type GetY() const
Definition: box2.h:181
coord_type GetWidth() const
Definition: box2.h:187
void SetSize(const Vec &size)
Definition: box2.h:213
coord_type GetX() const
Definition: box2.h:180
BOX2I m_bounding_box_cache
Definition: eda_text.h:404
bool IsMultilineAllowed() const
Definition: eda_text.h:146
int m_bounding_box_cache_line
Definition: eda_text.h:402
bool m_bounding_box_cache_inverted
Definition: eda_text.h:403
VECTOR2I m_bounding_box_cache_pos
Definition: eda_text.h:401
virtual double GetInterline(double aGlyphHeight, double aLineSpacing=1.0) const =0
Compute the distance (interline) between 2 lines of text (for multiline texts).
VECTOR2I StringBoundaryLimits(const wxString &aText, const VECTOR2I &aSize, int aThickness, bool aBold, bool aItalic) const
Compute the boundary limits of aText (the bounding box of all shapes).
Definition: font.cpp:357
static constexpr double ITALIC_TILT
Tilt factor for italic style (this is the scaling factor on dY relative coordinates to give a tilted ...
Definition: font.h:60
void wxStringSplit(const wxString &aText, wxArrayString &aStrings, wxChar aSplitter)
Split aString to a string list separated at aSplitter.

References EDA_TEXT::getDrawFont(), EDA_TEXT::GetDrawPos(), EDA_TEXT::GetEffectiveTextPenWidth(), BOX2< Vec >::GetHeight(), EDA_TEXT::GetHorizJustify(), KIFONT::FONT::GetInterline(), EDA_TEXT::GetShownText(), EDA_TEXT::GetTextSize(), EDA_TEXT::GetVertJustify(), BOX2< Vec >::GetWidth(), BOX2< Vec >::GetX(), BOX2< Vec >::GetY(), GR_TEXT_H_ALIGN_CENTER, GR_TEXT_H_ALIGN_LEFT, GR_TEXT_H_ALIGN_RIGHT, GR_TEXT_V_ALIGN_BOTTOM, GR_TEXT_V_ALIGN_CENTER, GR_TEXT_V_ALIGN_TOP, EDA_TEXT::IsBold(), EDA_TEXT::IsItalic(), EDA_TEXT::IsMirrored(), EDA_TEXT::IsMultilineAllowed(), ITALIC_TILT, KiROUND(), EDA_TEXT::m_bounding_box_cache, EDA_TEXT::m_bounding_box_cache_inverted, EDA_TEXT::m_bounding_box_cache_line, EDA_TEXT::m_bounding_box_cache_pos, EDA_TEXT::m_bounding_box_cache_valid, BOX2< Vec >::Normalize(), BOX2< Vec >::SetOrigin(), BOX2< Vec >::SetSize(), BOX2< Vec >::SetX(), BOX2< Vec >::SetY(), KIFONT::FONT::StringBoundaryLimits(), text, wxStringSplit(), VECTOR2< T >::x, and VECTOR2< T >::y.

Referenced by SCH_GLOBALLABEL::CreateGraphicShape(), KIGFX::SCH_PAINTER::draw(), SCH_LABEL::GetBodyBoundingBox(), SCH_HIERLABEL::GetBodyBoundingBox(), LIB_FIELD::GetBoundingBox(), LIB_TEXT::GetBoundingBox(), SCH_FIELD::GetBoundingBox(), SCH_TEXT::GetBoundingBox(), DS_DRAW_ITEM_TEXT::GetBoundingBox(), FP_TEXT::GetBoundingBox(), PCB_DIMENSION_BASE::GetBoundingBox(), PCB_TEXT::GetBoundingBox(), ALTIUM_PCB::HelperParseDimensions6Radial(), LIB_TEXT::HitTest(), CADSTAR_SCH_ARCHIVE_LOADER::loadSymDefIntoLibrary(), LIB_TEXT::NormalizeJustification(), SCH_TEXT::Plot(), SCH_TEXT::Print(), EDA_TEXT::TextHitTest(), FP_TEXT::TextHitTest(), EDA_TEXT::TransformBoundingBoxToPolygon(), PCB_DIM_ALIGNED::updateGeometry(), PCB_DIM_ORTHOGONAL::updateGeometry(), PCB_DIM_RADIAL::updateGeometry(), PCB_DIM_LEADER::updateGeometry(), and FP_TEXT::ViewBBox().

◆ GetTextColor()

◆ GetTextHeight()

◆ GetTextMargin()

int LIB_TEXTBOX::GetTextMargin ( ) const

Definition at line 64 of file lib_textbox.cpp.

65{
66 return KiROUND( GetTextSize().y * 0.8 );
67}

References EDA_TEXT::GetTextSize(), and KiROUND().

Referenced by GetDrawPos(), and GetShownText().

◆ GetTextPos()

const VECTOR2I & EDA_TEXT::GetTextPos ( ) const
inlineinherited

Definition at line 208 of file eda_text.h.

208{ return m_pos; }

References EDA_TEXT::m_pos.

Referenced by SCH_LABEL_BASE::AutoplaceFields(), LIB_FIELD::compare(), LIB_TEXT::compare(), PCB_GRID_HELPER::computeAnchors(), SCH_SHEET_PIN::ConstrainOnEdge(), DIALOG_FIELD_PROPERTIES::DIALOG_FIELD_PROPERTIES(), SCH_LABEL::doIsConnected(), SCH_GLOBALLABEL::doIsConnected(), SCH_HIERLABEL::doIsConnected(), KIGFX::DS_PAINTER::draw(), KIGFX::PCB_PAINTER::draw(), KIGFX::SCH_PAINTER::draw(), FP_TEXT::Flip(), FP_TEXTBOX::Flip(), PCB_TEXT::Flip(), PCB_PLUGIN::format(), SCH_LABEL_BASE::GetBodyBoundingBox(), SCH_LABEL::GetBodyBoundingBox(), SCH_HIERLABEL::GetBodyBoundingBox(), LIB_FIELD::GetBoundingBox(), LIB_TEXT::GetBoundingBox(), SCH_FIELD::GetBoundingBox(), SCH_TEXT::GetBoundingBox(), FP_TEXT::GetBoundingBox(), PCB_TEXT::GetBoundingBox(), SCH_MOVE_TOOL::getConnectedDragItems(), SCH_LABEL_BASE::GetConnectionPoints(), EDA_TEXT::GetDrawPos(), SCH_LABEL_BASE::GetEndPoints(), SCH_SHEET_PIN::GetEndPoints(), SCH_FIELD::GetLibPosition(), LIB_FIELD::GetPosition(), LIB_TEXT::GetPosition(), SCH_FIELD::GetPosition(), SCH_TEXT::GetPosition(), DS_DRAW_ITEM_TEXT::GetPosition(), FP_TEXT::GetPosition(), PCB_TEXT::GetPosition(), ALTIUM_PCB::HelperParseDimensions6Radial(), LIB_FIELD::HitTest(), LIB_TEXT::HitTest(), CADSTAR_SCH_ARCHIVE_LOADER::loadSymDefIntoLibrary(), PCB_POINT_EDITOR::makePoints(), FP_TEXT::Mirror(), PCB_TEXT::Mirror(), PCB_DIMENSION_BASE::Mirror(), LIB_FIELD::MirrorHorizontal(), LIB_TEXT::MirrorHorizontal(), SCH_SHEET_PIN::MirrorHorizontally(), SCH_TEXT::MirrorHorizontally(), LIB_FIELD::MirrorVertical(), LIB_TEXT::MirrorVertical(), SCH_SHEET_PIN::MirrorVertically(), SCH_TEXT::MirrorVertically(), LIB_TEXT::NormalizeJustification(), DIALOG_UPDATE_SYMBOL_FIELDS::onOkButtonClicked(), DRAWING_TOOL::PlaceText(), SCH_FIELD::Plot(), SCH_LABEL_BASE::Plot(), BRDITEMS_PLOTTER::PlotFootprintTextItem(), BRDITEMS_PLOTTER::PlotPcbText(), LIB_FIELD::print(), SCH_LABEL_BASE::Print(), DIALOG_CHANGE_SYMBOLS::processSymbols(), SCH_LABEL_BASE::Rotate(), SCH_SHEET_PIN::Rotate(), SCH_TEXT::Rotate(), LIB_FIELD::Rotate(), LIB_TEXT::Rotate(), FP_TEXT::Rotate(), PCB_DIMENSION_BASE::Rotate(), PCB_TEXT::Rotate(), SCH_LEGACY_PLUGIN_CACHE::saveField(), SCH_LEGACY_PLUGIN_CACHE::saveText(), FP_TEXT::SetDrawCoord(), FP_TEXT::SetLocalCoord(), FP_TEXT::TextHitTest(), DIALOG_DIMENSION_PROPERTIES::TransferDataToWindow(), FP_TEXT::TransformTextToPolySet(), PCB_TEXT::TransformTextToPolySet(), SCH_LABEL_BASE::UpdateDanglingState(), PCB_DIM_RADIAL::updateGeometry(), PCB_DIM_LEADER::updateGeometry(), PCB_POINT_EDITOR::updateItem(), PCB_POINT_EDITOR::updatePoints(), PCB_DIM_RADIAL::updateText(), and FP_TEXT::ViewBBox().

◆ GetTextSize()

◆ GetTextStyleName()

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

Definition at line 738 of file eda_text.cpp.

739{
740 int style = 0;
741
742 if( IsItalic() )
743 style = 1;
744
745 if( IsBold() )
746 style += 2;
747
748 wxString stylemsg[4] = {
749 _("Normal"),
750 _("Italic"),
751 _("Bold"),
752 _("Bold+Italic")
753 };
754
755 return stylemsg[style];
756}

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

Referenced by LIB_FIELD::GetMsgPanelInfo(), LIB_TEXT::GetMsgPanelInfo(), and SCH_FIELD::GetMsgPanelInfo().

◆ GetTextThickness()

◆ GetTextWidth()

int EDA_TEXT::GetTextWidth ( ) const
inlineinherited

Definition at line 199 of file eda_text.h.

199{ return m_attributes.m_Size.x; }

References EDA_TEXT::m_attributes, TEXT_ATTRIBUTES::m_Size, and VECTOR2< T >::x.

Referenced by LIB_FIELD::compare(), LIB_TEXT::compare(), compare(), DIALOG_FIELD_PROPERTIES::DIALOG_FIELD_PROPERTIES(), EDA_TEXT_DESC::EDA_TEXT_DESC(), EDA_TEXT::Format(), EDA_TEXT::GetEffectiveTextPenWidth(), PCB_TEXT::getKnockoutMargin(), LIB_FIELD::GetMsgPanelInfo(), LIB_TEXT::GetMsgPanelInfo(), GetMsgPanelInfo(), SCH_FIELD::GetMsgPanelInfo(), SCH_LABEL_BASE::GetMsgPanelInfo(), SCH_TEXT::GetMsgPanelInfo(), SCH_TEXTBOX::GetMsgPanelInfo(), FP_TEXT::GetMsgPanelInfo(), FP_TEXTBOX::GetMsgPanelInfo(), PCB_DIMENSION_BASE::GetMsgPanelInfo(), PCB_TEXT::GetMsgPanelInfo(), PCB_TEXTBOX::GetMsgPanelInfo(), SCH_HIERLABEL::GetSchematicTextOffset(), hash_fp_item(), CADSTAR_SCH_ARCHIVE_LOADER::loadDocumentationSymbols(), SCH_EAGLE_PLUGIN::loadTextAttributes(), SCH_LEGACY_PLUGIN_CACHE::saveField(), SCH_LEGACY_PLUGIN::saveField(), SCH_LEGACY_PLUGIN_CACHE::saveText(), SCH_LEGACY_PLUGIN::saveText(), DIALOG_LABEL_PROPERTIES::TransferDataFromWindow(), DIALOG_LIB_TEXT_PROPERTIES::TransferDataFromWindow(), DIALOG_LIB_TEXTBOX_PROPERTIES::TransferDataFromWindow(), DIALOG_SHEET_PIN_PROPERTIES::TransferDataFromWindow(), DIALOG_TEXT_PROPERTIES::TransferDataFromWindow(), DIALOG_LABEL_PROPERTIES::TransferDataToWindow(), DIALOG_LIB_TEXT_PROPERTIES::TransferDataToWindow(), DIALOG_LIB_TEXTBOX_PROPERTIES::TransferDataToWindow(), DIALOG_SHEET_PIN_PROPERTIES::TransferDataToWindow(), DIALOG_TEXT_PROPERTIES::TransferDataToWindow(), PCB_DIM_ALIGNED::updateGeometry(), PCB_DIM_ORTHOGONAL::updateGeometry(), PCB_DIM_RADIAL::updateGeometry(), PCB_DIM_LEADER::updateGeometry(), and DIALOG_FIELD_PROPERTIES::updateText().

◆ GetTopLeft()

virtual VECTOR2I EDA_SHAPE::GetTopLeft ( ) const
inlinevirtualinherited

Reimplemented in FP_TEXTBOX, and PCB_TEXTBOX.

Definition at line 167 of file eda_shape.h.

167{ return GetStart(); }

References EDA_SHAPE::GetStart().

Referenced by KIGFX::PCB_PAINTER::draw(), PCB_POINT_EDITOR::makePoints(), and PCB_POINT_EDITOR::updatePoints().

◆ GetTypeDesc()

wxString EDA_ITEM::GetTypeDesc ( ) const
inherited

Return a translated description of the type for this EDA_ITEM for display in user facing messages.

Definition at line 301 of file eda_item.cpp.

302{
303 //@see EDA_ITEM_DESC for definition of ENUM_MAP<KICAD_T>
304 wxString typeDescr = ENUM_MAP<KICAD_T>::Instance().ToString( Type() );
305
306 return wxGetTranslation( typeDescr );
307}
static ENUM_MAP< T > & Instance()
Definition: property.h:623

References ENUM_MAP< T >::Instance(), and EDA_ITEM::Type().

Referenced by PCB_GROUP::AddItem(), EDIT_TOOL::doMoveSelection(), and EDA_ITEM::GetFriendlyName().

◆ GetTypeName()

wxString LIB_SHAPE::GetTypeName ( ) const
inlineoverridevirtualinherited

Provide a user-consumable name of the object type.

Perform localization when called so that run-time language selection works.

Implements LIB_ITEM.

Definition at line 47 of file lib_shape.h.

48 {
49 return ShowShape();
50 }
wxString ShowShape() const
Definition: eda_shape.cpp:57

References EDA_SHAPE::ShowShape().

Referenced by DIALOG_LIB_SHAPE_PROPERTIES::DIALOG_LIB_SHAPE_PROPERTIES().

◆ GetUnit()

◆ GetVertJustify()

◆ GetWidth()

int EDA_SHAPE::GetWidth ( ) const
inlineinherited

Definition at line 109 of file eda_shape.h.

109{ return m_stroke.GetWidth(); }

References STROKE_PARAMS::GetWidth(), and EDA_SHAPE::m_stroke.

Referenced by BOARD_ADAPTER::addShape(), GRAPHICS_CLEANER::areEquivalent(), ConvertOutlineToPolygon(), KIGFX::PCB_PAINTER::draw(), EDA_SHAPE_DESC::EDA_SHAPE_DESC(), FP_SHAPE::Flip(), EDA_SHAPE::getBoundingBox(), FOOTPRINT::GetCoverageArea(), FP_TEXTBOX::GetEffectiveShape(), PCB_TEXTBOX::GetEffectiveShape(), EDA_SHAPE::GetEffectiveWidth(), LIB_SHAPE::GetPenWidth(), SCH_SHAPE::GetPenWidth(), SCH_TEXTBOX::GetTextMargin(), FP_TEXTBOX::GetTextMargin(), PCB_TEXTBOX::GetTextMargin(), hash_fp_item(), EDA_SHAPE::hitTest(), GRAPHICS_CLEANER::isNullShape(), SCH_LEGACY_PLUGIN_CACHE::loadBezier(), FABMASTER::loadOutline(), FABMASTER::loadPolygon(), DSN::SPECCTRA_DB::makeIMAGE(), CONVERT_TOOL::makePolysFromChainedSegs(), PCB_SHAPE::Mirror(), FP_SHAPE::Mirror(), FOOTPRINT::cmp_drawings::operator()(), PCB_PARSER::parsePAD(), BRDITEMS_PLOTTER::PlotFootprintShape(), BRDITEMS_PLOTTER::PlotPcbShape(), SCH_LEGACY_PLUGIN_CACHE::saveArc(), SCH_LEGACY_PLUGIN_CACHE::saveBezier(), SCH_LEGACY_PLUGIN_CACHE::saveCircle(), SCH_LEGACY_PLUGIN_CACHE::savePolyLine(), SCH_LEGACY_PLUGIN_CACHE::saveRectangle(), FP_SHAPE::SetDrawCoord(), PLOTTER::ThickArc(), GERBER_PLOTTER::ThickArc(), AR_MATRIX::TraceSegmentPcb(), DIALOG_GRAPHIC_ITEM_PROPERTIES::TransferDataFromWindow(), DIALOG_LIB_SHAPE_PROPERTIES::TransferDataToWindow(), DIALOG_LIB_TEXTBOX_PROPERTIES::TransferDataToWindow(), DIALOG_SHAPE_PROPERTIES::TransferDataToWindow(), DIALOG_TEXT_PROPERTIES::TransferDataToWindow(), DIALOG_PAD_PRIMITIVES_PROPERTIES::TransferDataToWindow(), DIALOG_PAD_PRIMITIVE_POLY_PROPS::TransferDataToWindow(), EDA_SHAPE::TransformShapeToPolygon(), FP_TEXTBOX::TransformShapeToPolygon(), PCB_TEXTBOX::TransformShapeToPolygon(), PCB_POINT_EDITOR::updateItem(), and PCB_SHAPE::ViewBBox().

◆ GotoPageHref()

wxString EDA_TEXT::GotoPageHref ( const wxString &  aDestination)
staticinherited

Generate a href to a page in the current schematic.

Parameters
aDestinationDestination sheet's page number.
Returns
A hyperlink href string that goes to the specified page.

Definition at line 1006 of file eda_text.cpp.

1007{
1008 return wxT( "#" ) + aDestination;
1009}

Referenced by SCH_SHEET::Plot().

◆ HasFlag()

◆ HasHyperlink()

virtual bool EDA_TEXT::HasHyperlink ( ) const
inlinevirtualinherited

◆ HasTextVars()

bool EDA_TEXT::HasTextVars ( ) const
inlineinherited

◆ hitTest() [1/2]

bool EDA_SHAPE::hitTest ( const BOX2I aRect,
bool  aContained,
int  aAccuracy = 0 
) const
protectedinherited

Definition at line 859 of file eda_shape.cpp.

860{
861 BOX2I arect = aRect;
862 arect.Normalize();
863 arect.Inflate( aAccuracy );
864
865 BOX2I bbox = getBoundingBox();
866
867 switch( m_shape )
868 {
869 case SHAPE_T::CIRCLE:
870 // Test if area intersects or contains the circle:
871 if( aContained )
872 {
873 return arect.Contains( bbox );
874 }
875 else
876 {
877 // If the rectangle does not intersect the bounding box, this is a much quicker test
878 if( !arect.Intersects( bbox ) )
879 return false;
880 else
881 return arect.IntersectsCircleEdge( getCenter(), GetRadius(), GetWidth() );
882 }
883
884 case SHAPE_T::ARC:
885 // Test for full containment of this arc in the rect
886 if( aContained )
887 {
888 return arect.Contains( bbox );
889 }
890 // Test if the rect crosses the arc
891 else
892 {
893 if( !arect.Intersects( bbox ) )
894 return false;
895
896 if( IsFilled() )
897 {
898 return ( arect.Intersects( getCenter(), GetStart() )
899 || arect.Intersects( getCenter(), GetEnd() )
900 || arect.IntersectsCircleEdge( getCenter(), GetRadius(), GetWidth() ) );
901 }
902 else
903 {
904 return arect.IntersectsCircleEdge( getCenter(), GetRadius(), GetWidth() );
905 }
906 }
907
908 case SHAPE_T::RECT:
909 if( aContained )
910 {
911 return arect.Contains( bbox );
912 }
913 else
914 {
915 std::vector<VECTOR2I> pts = GetRectCorners();
916
917 // Account for the width of the lines
918 arect.Inflate( GetWidth() / 2 );
919 return ( arect.Intersects( pts[0], pts[1] )
920 || arect.Intersects( pts[1], pts[2] )
921 || arect.Intersects( pts[2], pts[3] )
922 || arect.Intersects( pts[3], pts[0] ) );
923 }
924
925 case SHAPE_T::SEGMENT:
926 if( aContained )
927 {
928 return arect.Contains( GetStart() ) && aRect.Contains( GetEnd() );
929 }
930 else
931 {
932 // Account for the width of the line
933 arect.Inflate( GetWidth() / 2 );
934 return arect.Intersects( GetStart(), GetEnd() );
935 }
936
937 case SHAPE_T::POLY:
938 if( aContained )
939 {
940 return arect.Contains( bbox );
941 }
942 else
943 {
944 // Fast test: if aRect is outside the polygon bounding box,
945 // rectangles cannot intersect
946 if( !arect.Intersects( bbox ) )
947 return false;
948
949 // Account for the width of the line
950 arect.Inflate( GetWidth() / 2 );
951
952 // Polygons in footprints use coordinates relative to the footprint.
953 // Therefore, instead of using m_poly, we make a copy which is translated
954 // to the actual location in the board.
955 VECTOR2I offset = getParentPosition();
956
957 for( int ii = 0; ii < m_poly.OutlineCount(); ++ii )
958 {
959 SHAPE_LINE_CHAIN poly = m_poly.Outline( ii );
961 poly.Move( offset );
962
963 int count = poly.GetPointCount();
964
965 for( int jj = 0; jj < count; jj++ )
966 {
967 VECTOR2I vertex = poly.GetPoint( jj );
968
969 // Test if the point is within aRect
970 if( arect.Contains( vertex ) )
971 return true;
972
973 if( jj + 1 < count )
974 {
975 VECTOR2I vertexNext = poly.GetPoint( jj + 1 );
976
977 // Test if this edge intersects aRect
978 if( arect.Intersects( vertex, vertexNext ) )
979 return true;
980 }
981 else if( poly.IsClosed() )
982 {
983 VECTOR2I vertexNext = poly.GetPoint( 0 );
984
985 // Test if this edge intersects aRect
986 if( arect.Intersects( vertex, vertexNext ) )
987 return true;
988 }
989 }
990 }
991
992 return false;
993 }
994
995 case SHAPE_T::BEZIER:
996 if( aContained )
997 {
998 return arect.Contains( bbox );
999 }
1000 else
1001 {
1002 // Fast test: if aRect is outside the polygon bounding box,
1003 // rectangles cannot intersect
1004 if( !arect.Intersects( bbox ) )
1005 return false;
1006
1007 // Account for the width of the line
1008 arect.Inflate( GetWidth() / 2 );
1009 unsigned count = m_bezierPoints.size();
1010
1011 for( unsigned ii = 1; ii < count; ii++ )
1012 {
1013 VECTOR2I vertex = m_bezierPoints[ii - 1];
1014 VECTOR2I vertexNext = m_bezierPoints[ii];
1015
1016 // Test if the point is within aRect
1017 if( arect.Contains( vertex ) )
1018 return true;
1019
1020 // Test if this edge intersects aRect
1021 if( arect.Intersects( vertex, vertexNext ) )
1022 return true;
1023 }
1024
1025 return false;
1026 }
1027
1028 default:
1030 return false;
1031 }
1032}
bool Intersects(const BOX2< Vec > &aRect) const
Definition: box2.h:269
bool IntersectsCircleEdge(const Vec &aCenter, const int aRadius, const int aWidth) const
Definition: box2.h:471
bool Contains(const Vec &aPoint) const
Definition: box2.h:141
void Move(const VECTOR2I &aVector) override
bool IsClosed() const override
virtual const VECTOR2I GetPoint(int aIndex) const override
void Rotate(const EDA_ANGLE &aAngle, const VECTOR2I &aCenter={ 0, 0 }) override
Rotate all vertices by a given angle.

References ARC, BEZIER, CIRCLE, BOX2< Vec >::Contains(), EDA_SHAPE::getBoundingBox(), EDA_SHAPE::getCenter(), EDA_SHAPE::GetEnd(), EDA_SHAPE::getParentOrientation(), EDA_SHAPE::getParentPosition(), SHAPE_LINE_CHAIN::GetPoint(), SHAPE_LINE_CHAIN::GetPointCount(), EDA_SHAPE::GetRadius(), EDA_SHAPE::GetRectCorners(), EDA_SHAPE::GetStart(), EDA_SHAPE::GetWidth(), BOX2< Vec >::Inflate(), BOX2< Vec >::Intersects(), BOX2< Vec >::IntersectsCircleEdge(), SHAPE_LINE_CHAIN::IsClosed(), EDA_SHAPE::IsFilled(), EDA_SHAPE::m_bezierPoints, EDA_SHAPE::m_poly, EDA_SHAPE::m_shape, SHAPE_LINE_CHAIN::Move(), BOX2< Vec >::Normalize(), SHAPE_POLY_SET::Outline(), SHAPE_POLY_SET::OutlineCount(), POLY, RECT, SHAPE_LINE_CHAIN::Rotate(), SEGMENT, EDA_SHAPE::SHAPE_T_asString(), and UNIMPLEMENTED_FOR.

◆ HitTest() [1/2]

bool LIB_TEXTBOX::HitTest ( const BOX2I aRect,
bool  aContained,
int  aAccuracy = 0 
) const
overridevirtual

Test if aRect intersects this item.

Parameters
aRectA reference to a BOX2I object containing the rectangle to test.
aContainedSet to true to test for containment instead of an intersection.
aAccuracyIncrease aRect by this amount.
Returns
True if aRect contains or intersects the item bounding box.

Reimplemented from LIB_SHAPE.

Definition at line 361 of file lib_textbox.cpp.

362{
363 BOX2I rect = aRect;
364
365 rect.Inflate( aAccuracy );
366
367 if( aContained )
368 return rect.Contains( GetBoundingBox() );
369
370 return rect.Intersects( GetBoundingBox() );
371}
const BOX2I GetBoundingBox() const override
Definition: lib_shape.cpp:451

References BOX2< Vec >::Contains(), LIB_SHAPE::GetBoundingBox(), BOX2< Vec >::Inflate(), and BOX2< Vec >::Intersects().

◆ hitTest() [2/2]

bool EDA_SHAPE::hitTest ( const VECTOR2I aPosition,
int  aAccuracy = 0 
) const
protectedinherited

Definition at line 745 of file eda_shape.cpp.

746{
747 int maxdist = aAccuracy;
748
749 if( GetWidth() > 0 )
750 maxdist += GetWidth() / 2;
751
752 switch( m_shape )
753 {
754 case SHAPE_T::CIRCLE:
755 {
756 int radius = GetRadius();
757
758 VECTOR2I::extended_type dist = KiROUND<double, VECTOR2I::extended_type>(
759 EuclideanNorm( aPosition - getCenter() ) );
760
761 if( IsFilled() )
762 return dist <= radius + maxdist; // Filled circle hit-test
763 else
764 return abs( radius - dist ) <= maxdist; // Ring hit-test
765 }
766
767 case SHAPE_T::ARC:
768 {
769 if( EuclideanNorm( aPosition - m_start ) <= maxdist )
770 return true;
771
772 if( EuclideanNorm( aPosition - m_end ) <= maxdist )
773 return true;
774
775 VECTOR2I relPos = aPosition - getCenter();
776 int radius = GetRadius();
777
779 KiROUND<double, VECTOR2I::extended_type>( EuclideanNorm( relPos ) );
780
781 if( IsFilled() )
782 {
783 // Check distance from arc center
784 if( dist > radius + maxdist )
785 return false;
786 }
787 else
788 {
789 // Check distance from arc circumference
790 if( abs( radius - dist ) > maxdist )
791 return false;
792 }
793
794 // Finally, check to see if it's within arc's swept angle.
795 EDA_ANGLE startAngle;
796 EDA_ANGLE endAngle;
797 CalcArcAngles( startAngle, endAngle );
798
799 EDA_ANGLE relPosAngle( relPos );
800
801 startAngle.Normalize();
802 endAngle.Normalize();
803 relPosAngle.Normalize();
804
805 if( endAngle > startAngle )
806 return relPosAngle >= startAngle && relPosAngle <= endAngle;
807 else
808 return relPosAngle >= startAngle || relPosAngle <= endAngle;
809 }
810
811 case SHAPE_T::BEZIER:
812 const_cast<EDA_SHAPE*>( this )->RebuildBezierToSegmentsPointsList( GetWidth() );
813
814 for( unsigned int i= 1; i < m_bezierPoints.size(); i++)
815 {
816 if( TestSegmentHit( aPosition, m_bezierPoints[ i - 1], m_bezierPoints[i], maxdist ) )
817 return true;
818 }
819
820 return false;
821
822 case SHAPE_T::SEGMENT:
823 return TestSegmentHit( aPosition, GetStart(), GetEnd(), maxdist );
824
825 case SHAPE_T::RECT:
826 if( IsAnnotationProxy() || IsFilled() ) // Filled rect hit-test
827 {
828 SHAPE_POLY_SET poly;
829 poly.NewOutline();
830
831 for( const VECTOR2I& pt : GetRectCorners() )
832 poly.Append( pt );
833
834 return poly.Collide( aPosition, maxdist );
835 }
836 else // Open rect hit-test
837 {
838 std::vector<VECTOR2I> pts = GetRectCorners();
839
840 return TestSegmentHit( aPosition, pts[0], pts[1], maxdist )
841 || TestSegmentHit( aPosition, pts[1], pts[2], maxdist )
842 || TestSegmentHit( aPosition, pts[2], pts[3], maxdist )
843 || TestSegmentHit( aPosition, pts[3], pts[0], maxdist );
844 }
845
846 case SHAPE_T::POLY:
847 if( IsFilled() )
848 return m_poly.Collide( aPosition, maxdist );
849 else
850 return m_poly.CollideEdge( aPosition, nullptr, maxdist );
851
852 default:
854 return false;
855 }
856}
void RebuildBezierToSegmentsPointsList(int aMinSegLen)
Rebuild the m_bezierPoints vertex list that approximate the Bezier curve by a list of segments.
Definition: eda_shape.cpp:405
Represent a set of closed polygons.
bool CollideEdge(const VECTOR2I &aPoint, VERTEX_INDEX *aClosestVertex=nullptr, int aClearance=0) const
Check whether aPoint collides with any edge of any of the contours of the polygon.
bool Collide(const SHAPE *aShape, int aClearance=0, int *aActual=nullptr, VECTOR2I *aLocation=nullptr) const override
Check if the boundary of shape (this) lies closer to the shape aShape than aClearance,...
int Append(int x, int y, int aOutline=-1, int aHole=-1, bool aAllowDuplication=false)
Add a new vertex to the contour indexed by aOutline and aHole (defaults to the outline of the last po...
VECTOR2_TRAITS< int >::extended_type extended_type
Definition: vector2d.h:72
bool TestSegmentHit(const VECTOR2I &aRefPoint, const VECTOR2I &aStart, const VECTOR2I &aEnd, int aDist)
Test if aRefPoint is with aDistance on the line defined by aStart and aEnd.
Definition: trigo.cpp:129
double EuclideanNorm(const VECTOR2I &vector)
Definition: trigo.h:129

References std::abs(), SHAPE_POLY_SET::Append(), ARC, BEZIER, EDA_SHAPE::CalcArcAngles(), CIRCLE, SHAPE_POLY_SET::Collide(), SHAPE_POLY_SET::CollideEdge(), EuclideanNorm(), EDA_SHAPE::getCenter(), EDA_SHAPE::GetEnd(), EDA_SHAPE::GetRadius(), EDA_SHAPE::GetRectCorners(), EDA_SHAPE::GetStart(), EDA_SHAPE::GetWidth(), EDA_SHAPE::IsAnnotationProxy(), EDA_SHAPE::IsFilled(), EDA_SHAPE::m_bezierPoints, EDA_SHAPE::m_end, EDA_SHAPE::m_poly, EDA_SHAPE::m_shape, EDA_SHAPE::m_start, SHAPE_POLY_SET::NewOutline(), EDA_ANGLE::Normalize(), POLY, EDA_SHAPE::RebuildBezierToSegmentsPointsList(), RECT, SEGMENT, EDA_SHAPE::SHAPE_T_asString(), TestSegmentHit(), and UNIMPLEMENTED_FOR.

Referenced by LIB_SHAPE::HitTest(), SCH_SHAPE::HitTest(), and PCB_SHAPE::HitTest().

◆ HitTest() [2/2]

bool LIB_TEXTBOX::HitTest ( const VECTOR2I aPosition,
int  aAccuracy = 0 
) const
overridevirtual

Test if aPosition is inside or on the boundary of this item.

Parameters
aPositionA reference to a VECTOR2I object containing the coordinates to test.
aAccuracyIncrease the item bounding box by this amount.
Returns
True if aPosition is within the item bounding box.

Reimplemented from LIB_SHAPE.

Definition at line 348 of file lib_textbox.cpp.

349{
352
353 BOX2I rect = GetBoundingBox();
354
355 rect.Inflate( aAccuracy );
356
357 return rect.Contains( aPosition );
358}
#define MINIMUM_SELECTION_DISTANCE
Definition: lib_item.h:46

References BOX2< Vec >::Contains(), LIB_SHAPE::GetBoundingBox(), BOX2< Vec >::Inflate(), EDA_IU_SCALE::MilsToIU(), MINIMUM_SELECTION_DISTANCE, and schIUScale.

◆ IsAnnotationProxy()

◆ IsBold()

bool EDA_TEXT::IsBold ( ) const
inlineinherited

Definition at line 133 of file eda_text.h.

133{ return m_attributes.m_Bold; }

References EDA_TEXT::m_attributes, and TEXT_ATTRIBUTES::m_Bold.

Referenced by BOARD_ADAPTER::addText(), SCH_EDIT_TOOL::ChangeTextType(), compare(), SCH_DRAWING_TOOLS::createNewText(), DIALOG_FIELD_PROPERTIES::DIALOG_FIELD_PROPERTIES(), KIGFX::DS_PAINTER::draw(), KIGFX::PCB_PAINTER::draw(), KIGFX::SCH_PAINTER::draw(), SCH_DRAWING_TOOLS::DrawShape(), SYMBOL_EDITOR_DRAWING_TOOLS::DrawShape(), EDA_TEXT_DESC::EDA_TEXT_DESC(), EDA_TEXT::Format(), EDA_TEXT::getDrawFont(), LIB_FIELD::getDrawFont(), LIB_TEXT::getDrawFont(), getDrawFont(), SCH_FIELD::getDrawFont(), SCH_TEXT::getDrawFont(), SCH_TEXTBOX::getDrawFont(), EDA_TEXT::GetEffectiveTextPenWidth(), KIGFX::SCH_PAINTER::getFont(), GetMsgPanelInfo(), SCH_LABEL_BASE::GetMsgPanelInfo(), SCH_TEXT::GetMsgPanelInfo(), SCH_TEXTBOX::GetMsgPanelInfo(), SCH_FIELD::GetRenderCache(), GetShownText(), SCH_TEXTBOX::GetShownText(), FP_TEXTBOX::GetShownText(), PCB_TEXTBOX::GetShownText(), EDA_TEXT::GetTextBox(), EDA_TEXT::GetTextStyleName(), hash_fp_item(), EDA_TEXT::IsDefaultFormatting(), SCH_EAGLE_PLUGIN::loadFieldAttributes(), PCB_PARSER::parseEDA_TEXT(), SCH_SEXPR_PARSER::parseEDA_TEXT(), SCH_FIELD::Plot(), SCH_LABEL_BASE::Plot(), SCH_TEXT::Plot(), SCH_TEXTBOX::Plot(), LIB_FIELD::Plot(), LIB_TEXT::Plot(), Plot(), BRDITEMS_PLOTTER::PlotFootprintTextItem(), BRDITEMS_PLOTTER::PlotPcbText(), SCH_FIELD::Print(), LIB_FIELD::print(), LIB_TEXT::print(), print(), SCH_TEXT::Print(), EDA_TEXT::printOneLineOfText(), DIALOG_GLOBAL_EDIT_TEXT_AND_GRAPHICS::processItem(), SCH_LEGACY_PLUGIN_CACHE::saveField(), SCH_LEGACY_PLUGIN::saveField(), SCH_LEGACY_PLUGIN_CACHE::saveText(), textsNeedUpdate(), DIALOG_LABEL_PROPERTIES::TransferDataFromWindow(), DIALOG_LIB_TEXTBOX_PROPERTIES::TransferDataFromWindow(), DIALOG_SHEET_PIN_PROPERTIES::TransferDataFromWindow(), DIALOG_TEXT_PROPERTIES::TransferDataFromWindow(), DIALOG_LABEL_PROPERTIES::TransferDataToWindow(), DIALOG_LIB_TEXT_PROPERTIES::TransferDataToWindow(), DIALOG_LIB_TEXTBOX_PROPERTIES::TransferDataToWindow(), DIALOG_SHEET_PIN_PROPERTIES::TransferDataToWindow(), DIALOG_TEXT_PROPERTIES::TransferDataToWindow(), DIALOG_DIMENSION_PROPERTIES::TransferDataToWindow(), and DIALOG_TEXTBOX_PROPERTIES::TransferDataToWindow().

◆ IsBrightened()

◆ IsClosed()

bool EDA_SHAPE::IsClosed ( ) const
inherited

Definition at line 141 of file eda_shape.cpp.

142{
143 switch( m_shape )
144 {
145 case SHAPE_T::CIRCLE:
146 case SHAPE_T::RECT:
147 return true;
148
149 case SHAPE_T::ARC:
150 case SHAPE_T::SEGMENT:
151 return false;
152
153 case SHAPE_T::POLY:
154 if( m_poly.IsEmpty() )
155 return false;
156 else
157 return m_poly.Outline( 0 ).IsClosed();
158
159 case SHAPE_T::BEZIER:
160 if( m_bezierPoints.size() < 3 )
161 return false;
162 else
163 return m_bezierPoints[0] == m_bezierPoints[ m_bezierPoints.size() - 1 ];
164
165 default:
167 return false;
168 }
169}

References ARC, BEZIER, CIRCLE, SHAPE_LINE_CHAIN::IsClosed(), SHAPE_POLY_SET::IsEmpty(), EDA_SHAPE::m_bezierPoints, EDA_SHAPE::m_poly, EDA_SHAPE::m_shape, SHAPE_POLY_SET::Outline(), POLY, RECT, SEGMENT, EDA_SHAPE::SHAPE_T_asString(), and UNIMPLEMENTED_FOR.

Referenced by CONVERT_TOOL::makePolysFromClosedGraphics(), and CONVERT_TOOL::makePolysFromOpenGraphics().

◆ IsDefaultFormatting()

◆ IsEntered()

bool EDA_ITEM::IsEntered ( ) const
inlineinherited

Definition at line 107 of file eda_item.h.

107{ return m_flags & ENTERED; }
#define ENTERED
indicates a group has been entered

References ENTERED, and EDA_ITEM::m_flags.

Referenced by KIGFX::PCB_PAINTER::draw().

◆ IsFilled()

◆ IsForceVisible()

bool EDA_ITEM::IsForceVisible ( ) const
inlineinherited

Definition at line 201 of file eda_item.h.

201{ return m_forceVisible; }
bool m_forceVisible
Definition: eda_item.h:497

References EDA_ITEM::m_forceVisible.

Referenced by KIGFX::SCH_PAINTER::draw(), and SCH_FIELD::Print().

◆ IsGotoPageHref()

bool EDA_TEXT::IsGotoPageHref ( const wxString &  aHref,
wxString *  aDestination = nullptr 
)
staticinherited

Check if aHref is a valid internal hyperlink.

Parameters
aHrefString to validate
aDestination[optional] pointer to populate with the destination page
Returns
true if aHref is a valid internal hyperlink. Does not check if the destination page actually exists.

Definition at line 1000 of file eda_text.cpp.

1001{
1002 return aHref.StartsWith( wxT( "#" ), aDestination );
1003}

Referenced by PDF_PLOTTER::EndPlot(), SCH_NAVIGATE_TOOL::HypertextCommand(), and EDA_TEXT::ValidateHyperlink().

◆ IsItalic()

bool EDA_TEXT::IsItalic ( ) const
inlineinherited

Definition at line 130 of file eda_text.h.

130{ return m_attributes.m_Italic; }

References EDA_TEXT::m_attributes, and TEXT_ATTRIBUTES::m_Italic.

Referenced by BOARD_ADAPTER::addText(), SCH_DIRECTIVE_LABEL::AutoplaceFields(), SCH_EDIT_TOOL::ChangeTextType(), compare(), SCH_DRAWING_TOOLS::createNewText(), DIALOG_FIELD_PROPERTIES::DIALOG_FIELD_PROPERTIES(), KIGFX::DS_PAINTER::draw(), KIGFX::PCB_PAINTER::draw(), KIGFX::SCH_PAINTER::draw(), SCH_DRAWING_TOOLS::DrawShape(), SYMBOL_EDITOR_DRAWING_TOOLS::DrawShape(), EDA_TEXT_DESC::EDA_TEXT_DESC(), EDA_TEXT::Format(), EDA_TEXT::getDrawFont(), LIB_FIELD::getDrawFont(), LIB_TEXT::getDrawFont(), getDrawFont(), SCH_FIELD::getDrawFont(), SCH_TEXT::getDrawFont(), SCH_TEXTBOX::getDrawFont(), KIGFX::SCH_PAINTER::getFont(), GetMsgPanelInfo(), SCH_LABEL_BASE::GetMsgPanelInfo(), SCH_TEXT::GetMsgPanelInfo(), SCH_TEXTBOX::GetMsgPanelInfo(), SCH_FIELD::GetRenderCache(), GetShownText(), SCH_TEXTBOX::GetShownText(), FP_TEXTBOX::GetShownText(), PCB_TEXTBOX::GetShownText(), EDA_TEXT::GetTextBox(), EDA_TEXT::GetTextStyleName(), hash_fp_item(), EDA_TEXT::IsDefaultFormatting(), PCB_PARSER::parseEDA_TEXT(), SCH_SEXPR_PARSER::parseEDA_TEXT(), SCH_FIELD::Plot(), SCH_LABEL_BASE::Plot(), SCH_TEXT::Plot(), SCH_TEXTBOX::Plot(), LIB_FIELD::Plot(), LIB_TEXT::Plot(), Plot(), BRDITEMS_PLOTTER::PlotFootprintTextItem(), BRDITEMS_PLOTTER::PlotPcbText(), SCH_FIELD::Print(), LIB_FIELD::print(), LIB_TEXT::print(), print(), SCH_TEXT::Print(), EDA_TEXT::printOneLineOfText(), DIALOG_GLOBAL_EDIT_TEXT_AND_GRAPHICS::processItem(), SCH_LEGACY_PLUGIN_CACHE::saveField(), SCH_LEGACY_PLUGIN::saveField(), SCH_LEGACY_PLUGIN_CACHE::saveText(), SCH_LEGACY_PLUGIN::saveText(), textsNeedUpdate(), DIALOG_LABEL_PROPERTIES::TransferDataToWindow(), DIALOG_LIB_TEXT_PROPERTIES::TransferDataToWindow(), DIALOG_LIB_TEXTBOX_PROPERTIES::TransferDataToWindow(), DIALOG_SHEET_PIN_PROPERTIES::TransferDataToWindow(), DIALOG_TEXT_PROPERTIES::TransferDataToWindow(), DIALOG_DIMENSION_PROPERTIES::TransferDataToWindow(), and DIALOG_TEXTBOX_PROPERTIES::TransferDataToWindow().

◆ IsKeepUpright()

bool EDA_TEXT::IsKeepUpright ( ) const
inlineinherited

◆ IsMirrored()

◆ IsModified()

bool EDA_ITEM::IsModified ( ) const
inlineinherited

Definition at line 102 of file eda_item.h.

102{ return m_flags & IS_CHANGED; }

References IS_CHANGED, and EDA_ITEM::m_flags.

Referenced by PCB_EDIT_FRAME::OpenProjectFiles().

◆ IsMoving()

◆ IsMultilineAllowed()

bool EDA_TEXT::IsMultilineAllowed ( ) const
inlineinherited

◆ IsNew()

◆ IsPolyShapeValid()

bool EDA_SHAPE::IsPolyShapeValid ( ) const
inherited
Returns
true if the polygonal shape is valid (has more than 2 points)

Definition at line 1242 of file eda_shape.cpp.

1243{
1244 // return true if the polygonal shape is valid (has more than 2 points)
1245 if( GetPolyShape().OutlineCount() == 0 )
1246 return false;
1247
1248 const SHAPE_LINE_CHAIN& outline = static_cast<const SHAPE_POLY_SET&>( GetPolyShape() ).Outline( 0 );
1249
1250 return outline.PointCount() > 2;
1251}

References EDA_SHAPE::GetPolyShape(), and SHAPE_LINE_CHAIN::PointCount().

Referenced by PCB_PLUGIN::format(), BRDITEMS_PLOTTER::PlotFootprintShape(), BRDITEMS_PLOTTER::PlotPcbShape(), EDA_SHAPE::TransformShapeToPolygon(), and FP_TEXTBOX::TransformShapeToPolygon().

◆ IsPrivate()

◆ IsReplaceable()

virtual bool LIB_TEXTBOX::IsReplaceable ( ) const
inlineoverridevirtual

Override this method in any derived object that supports test find and replace.

Returns
True if the item has replaceable text that can be modified using the find and replace dialog.

Reimplemented from EDA_ITEM.

Definition at line 78 of file lib_textbox.h.

78{ return true; }

◆ IsRollover()

bool EDA_ITEM::IsRollover ( ) const
inlineinherited

Definition at line 110 of file eda_item.h.

111 {
112 return ( m_flags & ( IS_ROLLOVER | IS_MOVING ) ) == IS_ROLLOVER;
113 }
#define IS_ROLLOVER
Rollover active. Used for hyperlink highlighting.

References IS_MOVING, IS_ROLLOVER, and EDA_ITEM::m_flags.

Referenced by KIGFX::SCH_PAINTER::draw().

◆ IsSelected()

bool EDA_ITEM::IsSelected ( ) const
inlineinherited

Definition at line 106 of file eda_item.h.

106{ return m_flags & SELECTED; }

References EDA_ITEM::m_flags, and SELECTED.

Referenced by ALIGN_DISTRIBUTE_TOOL::AlignBottom(), ALIGN_DISTRIBUTE_TOOL::AlignCenterX(), ALIGN_DISTRIBUTE_TOOL::AlignCenterY(), ALIGN_DISTRIBUTE_TOOL::AlignTop(), SCH_EDIT_TOOL::ChangeTextType(), SCH_EDIT_FRAME::ConvertPart(), DIALOG_CHANGE_SYMBOLS::DIALOG_CHANGE_SYMBOLS(), ALIGN_DISTRIBUTE_TOOL::doAlignLeft(), ALIGN_DISTRIBUTE_TOOL::doAlignRight(), ALIGN_DISTRIBUTE_TOOL::doDistributeCentersHorizontally(), ALIGN_DISTRIBUTE_TOOL::doDistributeCentersVertically(), ALIGN_DISTRIBUTE_TOOL::doDistributeGapsHorizontally(), ALIGN_DISTRIBUTE_TOOL::doDistributeGapsVertically(), EDIT_TOOL::doMoveSelection(), KIGFX::SCH_PAINTER::draw(), KIGFX::PCB_PAINTER::draw(), KIGFX::PCB_PAINTER::Draw(), DS_PROXY_UNDO_ITEM::DS_PROXY_UNDO_ITEM(), RENDER_3D_OPENGL::get3dModelsFromFootprint(), KIGFX::GERBVIEW_RENDER_SETTINGS::GetColor(), KIGFX::DS_RENDER_SETTINGS::GetColor(), KIGFX::PCB_RENDER_SETTINGS::GetColor(), SCH_MOVE_TOOL::getConnectedDragItems(), KIGFX::SCH_PAINTER::getLineWidth(), DIALOG_EXCHANGE_FOOTPRINTS::isMatch(), DIALOG_CHANGE_SYMBOLS::isMatch(), SCH_SCREEN::MarkConnections(), SCH_LINE::MergeOverlap(), SCH_EDIT_TOOL::Mirror(), EDIT_TOOL::MoveExact(), SCH_MOVE_TOOL::moveItem(), KIGFX::SCH_PAINTER::nonCached(), SCH_MOVE_TOOL::orthoLineDrag(), DIALOG_GLOBAL_EDIT_TEXT_AND_GRAPHICS::processItem(), BOARD_COMMIT::Push(), EE_SELECTION_TOOL::RebuildSelection(), PCB_SELECTION_TOOL::RebuildSelection(), SCH_FIND_REPLACE_TOOL::ReplaceAll(), SCH_EDIT_TOOL::Rotate(), EE_TOOL_BASE< T >::saveCopyInUndoList(), GERBVIEW_SELECTION_TOOL::select(), PCB_SELECTION_TOOL::select(), EE_SELECTION_TOOL::selectMultiple(), PCB_SELECTION_TOOL::selectMultiple(), GERBVIEW_SELECTION_TOOL::selectPoint(), KIGFX::SCH_PAINTER::setDeviceColors(), GERBVIEW_SELECTION_TOOL::unselect(), SCH_FIND_REPLACE_TOOL::UpdateFind(), HIERARCHY_PANE::UpdateHierarchySelection(), PCB_BASE_FRAME::UpdateUserUnits(), DIALOG_GLOBAL_EDIT_TEXT_AND_GRAPHICS::visitItem(), and DIALOG_GLOBAL_EDIT_TRACKS_AND_VIAS::visitItem().

◆ IsShownAsBitmap()

bool EDA_ITEM::IsShownAsBitmap ( ) const
inlineinherited

Definition at line 173 of file eda_item.h.

173{ return m_flags & IS_SHOWN_AS_BITMAP; }
#define IS_SHOWN_AS_BITMAP

References IS_SHOWN_AS_BITMAP, and EDA_ITEM::m_flags.

◆ IsType()

virtual bool EDA_ITEM::IsType ( const std::vector< KICAD_T > &  aScanTypes) const
inlinevirtualinherited

Check whether the item is one of the listed types.

Parameters
aScanTypesList of item types
Returns
true if the item type is contained in the list aScanTypes

Reimplemented in SCH_FIELD, SCH_ITEM, SCH_LABEL_BASE, SCH_LINE, FP_SHAPE, FP_TEXT, FP_TEXTBOX, PAD, PCB_DIMENSION_BASE, PCB_SHAPE, <