56#include <api/common/types/base_types.pb.h> 
  137    for( 
const std::unique_ptr<KIFONT::GLYPH>& glyph : aText.
m_render_cache )
 
  139        if( KIFONT::OUTLINE_GLYPH* outline = dynamic_cast<KIFONT::OUTLINE_GLYPH*>( glyph.get() ) )
 
  140            m_render_cache.emplace_back( std::make_unique<KIFONT::OUTLINE_GLYPH>( *outline ) );
 
  141        else if( KIFONT::STROKE_GLYPH* stroke = dynamic_cast<KIFONT::STROKE_GLYPH*>( glyph.get() ) )
 
  142            m_render_cache.emplace_back( std::make_unique<KIFONT::STROKE_GLYPH>( *stroke ) );
 
  146        std::lock_guard<std::mutex> bboxLock( aText.m_bbox_cacheMutex );
 
  147        m_bbox_cache = aText.m_bbox_cache;
 
 
  179    for( 
const std::unique_ptr<KIFONT::GLYPH>& glyph : aText.
m_render_cache )
 
  182            m_render_cache.emplace_back( std::make_unique<KIFONT::OUTLINE_GLYPH>( *outline ) );
 
  184            m_render_cache.emplace_back( std::make_unique<KIFONT::STROKE_GLYPH>( *stroke ) );
 
 
  207    types::TextAttributes* attrs = 
text.mutable_attributes();
 
  210        attrs->set_font_name( 
GetFont()->GetName().ToStdString() );
 
  212    attrs->set_horizontal_alignment(
 
  215    attrs->set_vertical_alignment(
 
  222    attrs->set_bold( 
IsBold() );
 
  224    attrs->set_visible( 
true );
 
  230    aContainer.PackFrom( 
text );
 
 
  239    if( !aContainer.UnpackTo( &
text ) )
 
  242    SetText( wxString( 
text.text().c_str(), wxConvUTF8 ) );
 
  246    if( 
text.has_attributes() )
 
  258        if( !
text.attributes().font_name().empty() )
 
  261                    wxString( 
text.attributes().font_name().c_str(), wxConvUTF8 ), attrs.
m_Bold,
 
  269                text.attributes().horizontal_alignment() );
 
  272                text.attributes().vertical_alignment() );
 
 
  482        penWidth = aDefaultPenWidth;
 
  486        else if( penWidth <= 1 )
 
 
  549        aEnforceMinTextSize = 
false;
 
  551    if( aEnforceMinTextSize )
 
  556        aNewSize = 
VECTOR2I( std::clamp( aNewSize.
x, min, max ),
 
  557                             std::clamp( aNewSize.
y, min, max ) );
 
 
  583    m_attributes.m_Size.y = std::clamp( aHeight, min, max );
 
 
  609    if( aOffset.
x == 0 && aOffset.
y == 0 )
 
  617            outline->Move( aOffset );
 
  619            glyph = stroke->Transform( { 1.0, 1.0 }, aOffset, 0, 
ANGLE_0, 
false, { 0, 0 } );
 
 
  695std::vector<std::unique_ptr<KIFONT::GLYPH>>*
 
  744    m_render_cache.emplace_back( std::make_unique<KIFONT::OUTLINE_GLYPH>( aPoly ) );
 
 
  763        if( cache_it != 
m_bbox_cache.end() && cache_it->second.m_pos == drawPos )
 
  764            return cache_it->second.m_bbox;
 
  768    wxArrayString  strings;
 
  776        if( strings.GetCount() )     
 
  778            if( aLine >= 0 && ( aLine < 
static_cast<int>( strings.GetCount() ) ) )
 
  779                text = strings.Item( aLine );
 
  781                text = strings.Item( 0 );
 
  791    int           overbarOffset = 0;
 
  797    int      fudgeFactor = 
KiROUND( extents.
y * 0.17 );
 
  800        textsize.
y += fudgeFactor;
 
  805    if( 
text.Contains( wxT( 
"~{" ) ) )
 
  806        overbarOffset = extents.
y / 6;
 
  813        for( 
unsigned ii = 1; ii < strings.GetCount(); ii++ )
 
  815            text = strings.Item( ii );
 
  817            textsize.
x = std::max( textsize.
x, extents.
x );
 
  825    textsize.
y += overbarOffset;
 
  853        wxFAIL_MSG( wxT( 
"Indeterminate state legal only in dialogs." ) );
 
  860        bbox.
Offset( 0, -fudgeFactor );
 
  869        bbox.
Offset( 0, fudgeFactor );
 
  873        wxFAIL_MSG( wxT( 
"Indeterminate state legal only in dialogs." ) );
 
 
  911        std::vector<VECTOR2I> positions;
 
  912        wxArrayString  strings;
 
  915        positions.reserve( strings.Count() );
 
  919        for( 
unsigned ii = 0; ii < strings.Count(); ii++ )
 
 
  930                                 int aLineCount )
 const 
  947            pos.
y -= ( aLineCount - 1 ) * offset.
y / 2;
 
  951            pos.
y -= ( aLineCount - 1 ) * offset.
y;
 
  955            wxFAIL_MSG( wxT( 
"Indeterminate state legal only in dialogs." ) );
 
  966    for( 
int ii = 0; ii < aLineCount; ii++ )
 
  968        aPositions.push_back( (
VECTOR2I) pos );
 
 
 1002    wxString stylemsg[4] = {
 
 1009    return stylemsg[style];
 
 
 1018        return wxEmptyString;
 
 
 1025        return font->GetName();
 
 1028        return _( 
"Default Font" );
 
 
 1038        if( aFontName == 
_( 
"Default Font" ) )
 
 
 1069    aFormatter->
Print( 
"(effects" );
 
 1071    aFormatter->
Print( 
"(font" );
 
 1074        aFormatter->
Print( 
"(face %s)", aFormatter->
Quotew( 
GetFont()->NameAsToken() ).c_str() );
 
 1077    aFormatter->
Print( 
"(size %s %s)",
 
 1083        aFormatter->
Print( 
"(line_spacing %s)",
 
 1089        aFormatter->
Print( 
"(thickness %s)",
 
 1101        aFormatter->
Print( 
"(color %d %d %d %s)",
 
 1108    aFormatter->
Print( 
")"); 
 
 1113        aFormatter->
Print( 
"(justify");
 
 1122            aFormatter->
Print( 
" mirror" );
 
 1124        aFormatter->
Print( 
")" ); 
 
 1130    aFormatter->
Print( 
")" ); 
 
 
 1138    std::shared_ptr<SHAPE_COMPOUND> shape = std::make_shared<SHAPE_COMPOUND>();
 
 1146    std::vector<std::unique_ptr<KIFONT::GLYPH>>* cache = 
nullptr;
 
 1170                    shape->AddShape( 
new SHAPE_SEGMENT( aPt1, aPt2, penWidth ) );
 
 1177                    for( 
const VECTOR2I& point : { aPt1, aPt2, aPt3 } )
 
 1178                        triShape->
Append( point.x, point.y );
 
 1180                    shape->AddShape( triShape );
 
 1195                    shape->AddShape( 
new SHAPE_SEGMENT( aPt1, aPt2, penWidth ) );
 
 1200                    shape->AddShape( aPoly.Clone() );
 
 
 1215    wxCHECK( aOther, 1 );
 
 
 1244    return( uri.Create( aURL ) && uri.HasScheme() );
 
 
 1250    const wxString& str1 = 
GetText();
 
 1251    const wxString& str2 = aOther.
GetText();
 
 1253    int m = str1.length();
 
 1254    int n = str2.length();
 
 1256    if( n == 0 || m == 0 )
 
 1260    std::vector<std::vector<int>> 
distance(m + 1, std::vector<int>(n + 1));
 
 1263    for( 
int i = 0; i <= m; i++ )
 
 1265    for( 
int j = 0; j <= n; j++ )
 
 1269    for( 
int i = 1; i <= m; i++ )
 
 1271        for( 
int j = 1; j <= n; j++ )
 
 1273            if( str1[i - 1] == str2[j - 1] )
 
 1286    int    maxLen = std::max( m, n );
 
 1287    double similarity = 1.0 - ( 
static_cast<double>( 
distance[m][n] ) / maxLen );
 
 
 1295    double retval = 1.0;
 
 
 1311    return aHref.StartsWith( wxT( 
"#" ), aDestination );
 
 
 1317    return wxT( 
"#" ) + aDestination;
 
 
 1338        if( h_inst.Choices().GetCount() == 0)
 
 1347        if( v_inst.Choices().GetCount() == 0)
 
 1361        const wxString textProps = 
_HKI( 
"Text Properties" );
 
 1375                                 std::vector<std::string> fontNames;
 
 1378                                                          std::string( 
Pgm().GetLanguageTag().utf8_str() ),
 
 1382                                     fonts.Add( 
_( 
"Default Font" ) );
 
 1386                                 for( 
const std::string& fontName : fontNames )
 
 1387                                     fonts.Add( wxString( fontName ) );
 
 
 
types::KiCadObjectType ToProtoEnum(KICAD_T aValue)
 
KICAD_T FromProtoEnum(types::KiCadObjectType aValue)
 
constexpr EDA_IU_SCALE unityScale
 
constexpr BOX2I KiROUND(const BOX2D &aBoxD)
 
constexpr void SetOrigin(const Vec &pos)
 
constexpr BOX2< Vec > & Normalize()
Ensure that the height and width are positive.
 
constexpr coord_type GetY() const
 
constexpr size_type GetWidth() const
 
constexpr coord_type GetX() const
 
constexpr const Vec GetCenter() const
 
constexpr void SetSize(const SizeVec &size)
 
constexpr size_type GetHeight() const
 
constexpr bool Contains(const Vec &aPoint) const
 
constexpr void SetX(coord_type val)
 
constexpr BOX2< Vec > GetInflated(coord_type aDx, coord_type aDy) const
Get a new rectangle that is this one, inflated by aDx and aDy.
 
constexpr void SetY(coord_type val)
 
constexpr void Offset(coord_type dx, coord_type dy)
 
constexpr bool Intersects(const BOX2< Vec > &aRect) const
 
static const COLOR4D UNSPECIFIED
For legacy support; used as a value to indicate color hasn't been set yet.
 
A base class for most all the KiCad significant classes used in schematics and boards.
 
KICAD_T Type() const
Returns the type of object.
 
virtual const std::vector< wxString > * GetEmbeddedFonts()
 
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 supp...
 
A mix-in class (via multiple inheritance) that handles texts such as labels, parts,...
 
int GetTextHeight() const
 
void Serialize(google::protobuf::Any &aContainer) const override
Serializes this object to the given Any message.
 
void SetTextColor(const COLOR4D &aColor)
 
const VECTOR2I & GetTextPos() const
 
COLOR4D GetTextColor() const
 
wxString GetTextStyleName() const
 
std::map< int, BBOX_CACHE_ENTRY > m_bbox_cache
 
bool IsDefaultFormatting() const
 
static bool IsGotoPageHref(const wxString &aHref, wxString *aDestination=nullptr)
Check if aHref is a valid internal hyperlink.
 
void SetFontProp(const wxString &aFontName)
 
std::vector< std::unique_ptr< KIFONT::GLYPH > > m_render_cache
 
wxString GetFontName() const
 
void SetTextSize(VECTOR2I aNewSize, bool aEnforceMinTextSize=true)
 
bool IsMultilineAllowed() const
 
virtual const wxString & GetText() const
Return the string associated with the text object.
 
bool IsKeepUpright() const
 
virtual bool IsVisible() const
 
void SetTextPos(const VECTOR2I &aPoint)
 
bool m_shown_text_has_text_var_refs
 
bool Deserialize(const google::protobuf::Any &aContainer) override
Deserializes the given protobuf message into this object.
 
KIFONT::FONT * GetFont() const
 
bool ResolveFont(const std::vector< wxString > *aEmbeddedFonts)
 
void SetAttributes(const EDA_TEXT &aSrc, bool aSetPosition=true)
Set the text attributes from another instance.
 
void SetMirrored(bool isMirrored)
 
wxString GetFontProp() const
 
std::vector< std::unique_ptr< KIFONT::GLYPH > > * GetRenderCache(const KIFONT::FONT *aFont, const wxString &forResolvedText, const VECTOR2I &aOffset={ 0, 0 }) const
 
const KIFONT::FONT * m_render_cache_font
 
virtual EDA_ANGLE GetDrawRotation() const
 
wxString m_unresolvedFontName
 
virtual VECTOR2I GetDrawPos() const
 
EDA_TEXT & operator=(const EDA_TEXT &aItem)
 
BOX2I GetTextBox(const RENDER_SETTINGS *aSettings, int aLine=-1) const
Useful in multiline texts to calculate the full text or a line area (for zones filling,...
 
virtual bool HasHyperlink() const
 
void SetVertJustify(GR_TEXT_V_ALIGN_T aType)
 
wxString GetHyperlink() const
 
void Offset(const VECTOR2I &aOffset)
 
virtual void Format(OUTPUTFORMATTER *aFormatter, int aControlBits) const
Output the object to aFormatter in s-expression form.
 
GR_TEXT_H_ALIGN_T GetHorizJustify() const
 
void SetTextWidth(int aWidth)
 
virtual KIFONT::FONT * GetDrawFont(const RENDER_SETTINGS *aSettings) const
 
void SetBoldFlag(bool aBold)
Set only the bold flag, without changing the font.
 
bool Replace(const EDA_SEARCH_DATA &aSearchData)
Helper function used in search and replace dialog.
 
void SetupRenderCache(const wxString &aResolvedText, const KIFONT::FONT *aFont, const EDA_ANGLE &aAngle, const VECTOR2I &aOffset)
 
int Compare(const EDA_TEXT *aOther) const
 
std::reference_wrapper< const EDA_IU_SCALE > m_IuScale
 
std::mutex m_bbox_cacheMutex
 
virtual void SetVisible(bool aVisible)
 
EDA_TEXT(const EDA_IU_SCALE &aIuScale, const wxString &aText=wxEmptyString)
 
static wxString GotoPageHref(const wxString &aDestination)
Generate a href to a page in the current schematic.
 
virtual void ClearBoundingBoxCache()
 
bool GetAutoThickness() const
 
double GetLineSpacing() const
 
double Similarity(const EDA_TEXT &aOther) const
 
VECTOR2I m_render_cache_offset
 
void SetLineSpacing(double aLineSpacing)
 
wxString EvaluateText(const wxString &aText) const
 
void AddRenderCacheGlyph(const SHAPE_POLY_SET &aPoly)
 
void SetTextThickness(int aWidth)
The TextThickness is that set by the user.
 
virtual bool TextHitTest(const VECTOR2I &aPoint, int aAccuracy=0) const
Test if aPoint is within the bounds of this object.
 
void SetTextHeight(int aHeight)
 
virtual void cacheShownText()
 
EDA_ANGLE m_render_cache_angle
 
static GR_TEXT_H_ALIGN_T MapHorizJustify(int aHorizJustify)
 
virtual void ClearRenderCache()
 
const TEXT_ATTRIBUTES & GetAttributes() const
 
void SetBold(bool aBold)
Set the text to be bold - this will also update the font if needed.
 
static bool ValidateHyperlink(const wxString &aURL)
Check if aURL is a valid hyperlink.
 
void SetItalicFlag(bool aItalic)
Set only the italic flag, without changing the font.
 
void SetAutoThickness(bool aAuto)
 
int GetEffectiveTextPenWidth(int aDefaultPenWidth=0) const
The EffectiveTextPenWidth uses the text thickness if > 1 or aDefaultPenWidth.
 
void SwapAttributes(EDA_TEXT &aTradingPartner)
Swap the text attributes of the two involved instances.
 
wxString m_render_cache_text
 
void Print(const RENDER_SETTINGS *aSettings, const VECTOR2I &aOffset, const COLOR4D &aColor)
Print this text object to the device context aDC.
 
double GetTextAngleDegrees() const
 
void GetLinePositions(const RENDER_SETTINGS *aSettings, std::vector< VECTOR2I > &aPositions, int aLineCount) const
Populate aPositions with the position of each line of a multiline text, according to the vertical jus...
 
virtual const KIFONT::METRICS & getFontMetrics() const
 
std::shared_ptr< SHAPE_COMPOUND > GetEffectiveTextShape(bool aTriangulate=true, const BOX2I &aBBox=BOX2I(), const EDA_ANGLE &aAngle=ANGLE_0) const
build a list of segments (SHAPE_SEGMENT) to describe a text shape.
 
void SetTextAngleDegrees(double aOrientation)
 
void SetHyperlink(wxString aLink)
 
static GR_TEXT_V_ALIGN_T MapVertJustify(int aVertJustify)
 
void SetKeepUpright(bool aKeepUpright)
 
void CopyText(const EDA_TEXT &aSrc)
 
GR_TEXT_V_ALIGN_T GetVertJustify() const
 
int GetInterline(const RENDER_SETTINGS *aSettings) const
Return the distance between two lines of text.
 
int GetTextThicknessProperty() const
 
virtual wxString GetShownText(bool aAllowExtraText, int aDepth=0) const
Return the string actually shown after processing of the base text.
 
virtual void SetText(const wxString &aText)
 
double Levenshtein(const EDA_TEXT &aOther) const
Return the levenstein distance between two texts.
 
virtual void SetTextAngle(const EDA_ANGLE &aAngle)
 
int GetTextThickness() const
 
void SetItalic(bool aItalic)
Set the text to be italic - this will also update the font if needed.
 
void SwapText(EDA_TEXT &aTradingPartner)
 
void SetMultilineAllowed(bool aAllow)
 
void SetFont(KIFONT::FONT *aFont)
 
void printOneLineOfText(const RENDER_SETTINGS *aSettings, const VECTOR2I &aOffset, const COLOR4D &aColor, const wxString &aText, const VECTOR2I &aPos)
Print each line of this EDA_TEXT.
 
VECTOR2I GetTextSize() const
 
void SetHorizJustify(GR_TEXT_H_ALIGN_T aType)
 
TEXT_ATTRIBUTES m_attributes
 
static ENUM_MAP< T > & Instance()
 
High-level wrapper for evaluating mathematical and string expressions in wxString format.
 
wxString Evaluate(const wxString &aInput)
Main evaluation function - processes input string and evaluates all} expressions.
 
Class that other classes need to inherit from, in order to be inspectable.
 
FONT is an abstract base class for both outline and stroke fonts.
 
static FONT * GetFont(const wxString &aFontName=wxEmptyString, bool aBold=false, bool aItalic=false, const std::vector< wxString > *aEmbeddedFiles=nullptr, bool aForDrawingSheet=false)
 
virtual bool IsStroke() const
 
void Draw(KIGFX::GAL *aGal, const wxString &aText, const VECTOR2I &aPosition, const VECTOR2I &aCursor, const TEXT_ATTRIBUTES &aAttributes, const METRICS &aFontMetrics) const
Draw a string.
 
const wxString & GetName() const
 
virtual bool IsOutline() const
 
VECTOR2I StringBoundaryLimits(const wxString &aText, const VECTOR2I &aSize, int aThickness, bool aBold, bool aItalic, const METRICS &aFontMetrics) const
Compute the boundary limits of aText (the bounding box of all shapes).
 
virtual double GetInterline(double aGlyphHeight, const METRICS &aFontMetrics) const =0
Compute the distance (interline) between 2 lines of text (for multiline texts).
 
static const METRICS & Default()
 
Class OUTLINE_FONT implements outline font drawing.
 
void GetLinesAsGlyphs(std::vector< std::unique_ptr< GLYPH > > *aGlyphs, const wxString &aText, const VECTOR2I &aPosition, const TEXT_ATTRIBUTES &aAttrs, const METRICS &aFontMetrics) const
 
void CacheTriangulation(bool aPartition=true, bool aSimplify=false) override
Build a polygon triangulation, needed to draw a polygon on OpenGL and in some other calculations.
 
A color representation with 4 components: red, green, blue, alpha.
 
virtual void DrawGlyphs(const std::vector< std::unique_ptr< KIFONT::GLYPH > > &aGlyphs)
Draw polygons representing font glyphs.
 
Container for all the knowledge about how graphical objects are drawn on any output surface/device.
 
int GetDefaultPenWidth() const
 
const wxString & GetDefaultFont() const
 
wxDC * GetPrintDC() const
 
PROPERTY_BASE & SetChoicesFunc(std::function< wxPGChoices(INSPECTABLE *)> aFunc)
 
PROPERTY_BASE & SetAvailableFunc(std::function< bool(INSPECTABLE *)> aFunc)
Set a callback function to determine whether an object provides this property.
 
PROPERTY_BASE & SetIsHiddenFromRulesEditor(bool aHide=true)
 
Provide class metadata.Helper macro to map type hashes to names.
 
static PROPERTY_MANAGER & Instance()
 
PROPERTY_BASE & AddProperty(PROPERTY_BASE *aProperty, const wxString &aGroup=wxEmptyString)
Register a property.
 
Represent a polyline containing arcs as well as line segments: A chain of connected line and/or arc s...
 
Represent a set of closed polygons.
 
Represent a simple polygon consisting of a zero-thickness closed chain of connected line segments.
 
void Append(int aX, int aY)
Append a new point at the end of the polygon.
 
GR_TEXT_H_ALIGN_T m_Halign
 
GR_TEXT_V_ALIGN_T m_Valign
 
#define CTL_OMIT_HYPERLINK
Omit the hyperlink attribute in .kicad_xxx files.
 
#define CTL_OMIT_COLOR
Omit the color attribute in .kicad_xxx files.
 
static constexpr EDA_ANGLE ANGLE_0
 
std::ostream & operator<<(std::ostream &aStream, const EDA_TEXT &aText)
 
static struct EDA_TEXT_DESC _EDA_TEXT_DESC
 
#define TEXT_MIN_SIZE_MM
Minimum text size (1 micron).
 
#define TEXT_MAX_SIZE_MM
Maximum text size in mm (~10 inches)
 
#define DEFAULT_SIZE_TEXT
This is the "default-of-the-default" hardcoded text size; individual application define their own def...
 
static constexpr double ITALIC_TILT
Tilt factor for italic style (this is the scaling factor on dY relative coordinates to give a tilted ...
 
FONTCONFIG * Fontconfig()
 
int GetPenSizeForBold(int aTextSize)
 
int GetPenSizeForNormal(int aTextSize)
 
void GRPrintText(wxDC *aDC, const VECTOR2I &aPos, const COLOR4D &aColor, const wxString &aText, const EDA_ANGLE &aOrient, const VECTOR2I &aSize, enum GR_TEXT_H_ALIGN_T aH_justify, enum GR_TEXT_V_ALIGN_T aV_justify, int aWidth, bool aItalic, bool aBold, KIFONT::FONT *aFont, const KIFONT::METRICS &aFontMetrics)
Print a graphic text through wxDC.
 
int ClampTextPenSize(int aPenSize, int aSize, bool aStrict)
Pen width should not allow characters to become cluttered up in their own fatness.
 
Some functions to handle hotkeys in KiCad.
 
constexpr int Mils2IU(const EDA_IU_SCALE &aIuScale, int mils)
 
KICOMMON_API std::string FormatInternalUnits(const EDA_IU_SCALE &aIuScale, int aValue, EDA_DATA_TYPE aDataType=EDA_DATA_TYPE::DISTANCE)
Converts aValue from internal units to a string appropriate for writing to file.
 
KICOMMON_API VECTOR2I UnpackVector2(const types::Vector2 &aInput)
 
KICOMMON_API void PackVector2(types::Vector2 &aOutput, const VECTOR2I &aInput)
 
PGM_BASE & Pgm()
The global program "get" accessor.
 
#define ENUM_TO_WXANY(type)
Macro to define read-only fields (no setter method available)
 
@ PT_DEGREE
Angle expressed in degrees.
 
@ PT_SIZE
Size expressed in distance units (mm/inch)
 
static float distance(const SFVEC2UI &a, const SFVEC2UI &b)
 
wxString UnescapeString(const wxString &aSource)
 
void wxStringSplit(const wxString &aText, wxArrayString &aStrings, wxChar aSplitter)
Split aString to a string list separated at aSplitter.
 
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_T
This is API surface mapped to common.types.HorizontalAlignment.
 
@ GR_TEXT_H_ALIGN_INDETERMINATE
 
GR_TEXT_V_ALIGN_T
This is API surface mapped to common.types.VertialAlignment.
 
@ GR_TEXT_V_ALIGN_INDETERMINATE
 
VECTOR2I GetRotated(const VECTOR2I &aVector, const EDA_ANGLE &aAngle)
Return a new VECTOR2I that is the result of rotating aVector by aAngle.
 
void RotatePoint(int *pX, int *pY, const EDA_ANGLE &aAngle)
Calculate the new point of coord coord pX, pY, for a rotation center 0, 0.
 
@ PCB_FIELD_T
class PCB_FIELD, text associated with a footprint property
 
constexpr bool IsEeschemaType(const KICAD_T aType)
 
VECTOR2< int32_t > VECTOR2I
 
VECTOR2< double > VECTOR2D