54#include <magic_enum.hpp> 
   56#include <api/schematic/schematic_types.pb.h> 
   64static int  TemplateIN_HN[] = { 6, 0, 0, -1, -1, -2, -1, -2, 1, -1, 1, 0, 0 };
 
   65static int  TemplateIN_HI[] = { 6, 0, 0, 1, 1, 2, 1, 2, -1, 1, -1, 0, 0 };
 
   66static int  TemplateIN_UP[] = { 6, 0, 0, 1, -1, 1, -2, -1, -2, -1, -1, 0, 0 };
 
   67static int  TemplateIN_BOTTOM[] = { 6, 0, 0, 1, 1, 1, 2, -1, 2, -1, 1, 0, 0 };
 
   69static int  TemplateOUT_HN[] = { 6, -2, 0, -1, 1, 0, 1, 0, -1, -1, -1, -2, 0 };
 
   70static int  TemplateOUT_HI[] = { 6, 2, 0, 1, -1, 0, -1, 0, 1, 1, 1, 2, 0 };
 
   71static int  TemplateOUT_UP[] = { 6, 0, -2, 1, -1, 1, 0, -1, 0, -1, -1, 0, -2 };
 
   72static int  TemplateOUT_BOTTOM[] = { 6, 0, 2, 1, 1, 1, 0, -1, 0, -1, 1, 0, 2 };
 
   74static int  TemplateUNSPC_HN[] = { 5, 0, -1, -2, -1, -2, 1, 0, 1, 0, -1 };
 
   75static int  TemplateUNSPC_HI[] = { 5, 0, -1, 2, -1, 2, 1, 0, 1, 0, -1 };
 
   76static int  TemplateUNSPC_UP[] = { 5, 1, 0, 1, -2, -1, -2, -1, 0, 1, 0 };
 
   77static int  TemplateUNSPC_BOTTOM[] = { 5, 1, 0, 1, 2, -1, 2, -1, 0, 1, 0 };
 
   79static int  TemplateBIDI_HN[] = { 5, 0, 0, -1, -1, -2, 0, -1, 1, 0, 0 };
 
   80static int  TemplateBIDI_HI[] = { 5, 0, 0, 1, -1, 2, 0, 1, 1, 0, 0 };
 
   81static int  TemplateBIDI_UP[] = { 5, 0, 0, -1, -1, 0, -2, 1, -1, 0, 0 };
 
   82static int  TemplateBIDI_BOTTOM[] = { 5, 0, 0, -1, 1, 0, 2, 1, 1, 0, 0 };
 
   84static int  Template3STATE_HN[] = { 5, 0, 0, -1, -1, -2, 0, -1, 1, 0, 0 };
 
   85static int  Template3STATE_HI[] = { 5, 0, 0, 1, -1, 2, 0, 1, 1, 0, 0 };
 
   86static int  Template3STATE_UP[] = { 5, 0, 0, -1, -1, 0, -2, 1, -1, 0, 0 };
 
   87static int  Template3STATE_BOTTOM[] = { 5, 0, 0, -1, 1, 0, 2, 1, 1, 0, 0 };
 
  108    default:                              
return wxT( 
"???" );
 
 
  163    return ( ( (
int) 
m_spin - (
int) aOther.
m_spin ) % 4 + 4 ) % 4;
 
 
  196        field.SetParent( 
this );
 
 
  207        field.SetParent( 
this );
 
 
  222    if( aName == wxT( 
"Intersheetrefs" ) )
 
  223        return _( 
"Sheet References" );
 
  224    else if( aName == wxT( 
"Netclass" ) )
 
  225        return _( 
"Net Class" );
 
  226    else if( aName.IsEmpty() && aUseDefaultName )
 
 
  247    for( 
KICAD_T scanType : aScanTypes )
 
  253    wxCHECK_MSG( 
Schematic(), 
false, wxT( 
"No parent SCHEMATIC set for SCH_LABEL!" ) );
 
  262    for( 
KICAD_T scanType : aScanTypes )
 
  266            for( 
SCH_ITEM* connection : item_set )
 
  268                if( connection->IsType( wireAndPinTypes ) )
 
  275            for( 
SCH_ITEM* connection : item_set )
 
  277                if( connection->IsType( busTypes ) )
 
 
  297        field.SetParent( 
this );
 
 
  324    static bool s_inUpdate = 
false;
 
  357                            pin->SetLabelShape( aShape );
 
  370            const wxString& 
text = 
pin->GetText();
 
  386                if( other != 
pin && other->GetText() == 
text )
 
  387                    other->SetLabelShape( aShape );
 
 
  403        wxFAIL_MSG( 
"Bad spin style" );
 
 
  482        field.Offset( aMoveVector );
 
 
  497        field.SetTextPos( field.GetTextPos() + offset );
 
 
  523        if( ( aLeftRight && field.GetTextAngle().IsHorizontal() )
 
  524                || ( !aLeftRight && field.GetTextAngle().IsVertical() ) )
 
  540        field.SetTextPos( pos );
 
 
  553            field.FlipHJustify();
 
  559        field.SetPosition( pos );
 
 
  572            field.FlipHJustify();
 
  578        field.SetPosition( pos );
 
 
  613    for( 
size_t ii = 0; ii < 
m_fields.size(); ++ii )
 
 
  635    if( 
typeid( *
this ) != 
typeid( aOther ) )
 
  644    for( 
size_t ii = 0; ii < 
m_fields.size(); ++ii )
 
  654    similarity *= std::pow( 0.9, diff );
 
 
  681                offset.
x = - ( labelLen + margin );
 
  683                offset.
y = accumulated + field.GetTextHeight() / 2;
 
  692                offset.
y = - ( labelLen + margin );
 
  694                offset.
x = accumulated + field.GetTextHeight() / 2;
 
  703                offset.
x = labelLen + margin;
 
  705                offset.
y = accumulated + field.GetTextHeight() / 2;
 
  714                offset.
y = labelLen + margin;
 
  716                offset.
x = accumulated + field.GetTextHeight() / 2;
 
  724            accumulated += field.GetTextHeight() + margin;
 
 
  733                                        std::vector<std::pair<wxString, wxString>>* pages )
 
  744            std::vector<int> pageListCopy;
 
  746            pageListCopy.insert( pageListCopy.end(), it->second.begin(), it->second.end() );
 
  748            if( !
Schematic()->Settings().m_IntersheetRefsListOwnPage )
 
  751                std::erase( pageListCopy, currentPage );
 
  753                if( pageListCopy.empty() )
 
  757            std::sort( pageListCopy.begin(), pageListCopy.end() );
 
  762            for( 
int pageNum : pageListCopy )
 
  763                pages->push_back( { sheetPages[ pageNum ], sheetNames[ pageNum ] } );
 
 
  773        if( field.IsMandatory() )
 
  774            aVars->push_back( field.GetCanonicalName().Upper() );
 
  776            aVars->push_back( field.GetName() );
 
  779    aVars->push_back( wxT( 
"OP" ) );
 
  780    aVars->push_back( wxT( 
"CONNECTION_TYPE" ) );
 
  781    aVars->push_back( wxT( 
"SHORT_NET_NAME" ) );
 
  782    aVars->push_back( wxT( 
"NET_NAME" ) );
 
  783    aVars->push_back( wxT( 
"NET_CLASS" ) );
 
 
  790    static wxRegEx operatingPoint( wxT( 
"^" 
  792                                        "(.([0-9])?([a-zA-Z]*))?" 
  795    wxCHECK( aPath, 
false );
 
  802    if( operatingPoint.Matches( *token ) )
 
  805        wxString precisionStr( operatingPoint.GetMatch( *token, 2 ) );
 
  806        wxString range( operatingPoint.GetMatch( *token, 3 ) );
 
  808        if( !precisionStr.IsEmpty() )
 
  809            precision = precisionStr[0] - 
'0';
 
  811        if( range.IsEmpty() )
 
  823    if( token->Contains( 
':' ) )
 
  830         && token->IsSameAs( wxT( 
"CONNECTION_TYPE" ) ) )
 
  836    else if( token->IsSameAs( wxT( 
"SHORT_NET_NAME" ) ) )
 
  839        *token = wxEmptyString;
 
  846    else if( token->IsSameAs( wxT( 
"NET_NAME" ) ) )
 
  849        *token = wxEmptyString;
 
  852            *token = connection->
Name();
 
  856    else if( token->IsSameAs( wxT( 
"NET_CLASS" ) ) )
 
  859        *token = wxEmptyString;
 
  869        *token = wxEmptyString;
 
  873            if( ruleArea->GetExcludedFromBOM() )
 
  874                *token = 
_( 
"Excluded from BOM" );
 
  882        *token = wxEmptyString;
 
  886            if( ruleArea->GetExcludedFromBoard() )
 
  887                *token = 
_( 
"Excluded from board" );
 
  895        *token = wxEmptyString;
 
  899            if( ruleArea->GetExcludedFromSim() )
 
  900                *token = 
_( 
"Excluded from simulation" );
 
  908        *token = wxEmptyString;
 
  912            if( ruleArea->GetDNP() )
 
  921        if( token->IsSameAs( field.GetName() ) )
 
  923            *token = field.GetShownText( 
false, aDepth + 1 );
 
  935        path.push_back( sheet );
 
 
  975    std::function<bool( wxString* )> textResolver =
 
  976            [&]( wxString* token ) -> 
bool 
  989    if( 
text.Contains( wxT( 
"@{" ) ) )
 
 
 1015        && ( connection = 
Connection( sheetPath ) ) )
 
 1017        if( connection->
IsBus() )
 
 1021            std::set<wxString> netNames;
 
 1023            for( std::shared_ptr<SCH_CONNECTION> member : allMembers )
 
 1024                netNames.insert( member->GetNetName() );
 
 1026            for( 
const wxString& netName : netNames )
 
 
 1056                                      const std::vector<KICAD_T>& aScanTypes )
 
 1058    if( 
IsType( aScanTypes ) )
 
 1064    for( 
KICAD_T scanType : aScanTypes )
 
 
 1083    aItemList.push_back( item );
 
 
 1123    std::vector<VECTOR2I> pts;
 
 
 1144        if( field.IsVisible() && field.GetText() != wxEmptyString )
 
 1146            BOX2I fieldBBox = field.GetBoundingBox();
 
 1151            box.
Merge( fieldBBox );
 
 
 1171        if( field.IsVisible() )
 
 1173            BOX2I fieldBBox = field.GetBoundingBox();
 
 1174            fieldBBox.
Inflate( aAccuracy );
 
 1179            if( fieldBBox.
Contains( aPosition ) )
 
 
 1205            if( field.IsVisible() )
 
 1207                BOX2I fieldBBox = field.GetBoundingBox();
 
 
 1235            if( field.IsVisible() )
 
 1237                BOX2I fieldBBox = field.GetBoundingBox();
 
 
 1253                                          std::vector<DANGLING_END_ITEM>& aItemListByPos,
 
 1262         it < aItemListByPos.end() && it->GetPosition() == text_pos; it++ )
 
 1294             it < aItemListByType.end() && it->GetType() == 
BUS_END; it++ )
 
 1315                sch_item->AddConnectionTo( *aPath, 
this );
 
 1324                 it < aItemListByType.end() && it->GetType() == 
WIRE_END; it++ )
 
 1345                    sch_item->AddConnectionTo( *aPath, 
this );
 
 
 1370    wxCHECK( label, 
false );
 
 1378    std::vector<wxString> netclasses;
 
 1379    std::vector<wxString> otherNetclasses;
 
 1383        if( field.GetCanonicalName() == wxT( 
"Netclass" ) )
 
 1384            netclasses.push_back( field.GetText() );
 
 1390            otherNetclasses.push_back( field.
GetText() );
 
 1393    return netclasses != otherNetclasses;
 
 
 1418    aList.emplace_back( 
_( 
"Font" ), 
GetFont() ? 
GetFont()->GetName() : 
_( 
"Default" ) );
 
 1420    wxString textStyle[] = { 
_( 
"Normal" ), 
_( 
"Italic" ), 
_( 
"Bold" ), 
_( 
"Bold Italic" ) };
 
 1422    aList.emplace_back( 
_( 
"Style" ), textStyle[style] );
 
 1432    default:                 msg = wxT( 
"???" );         
break;
 
 1435    aList.emplace_back( 
_( 
"Justification" ), msg );
 
 1446        if( !conn->
IsBus() )
 
 1448            aList.emplace_back( 
_( 
"Resolved Netclass" ),
 
 
 1456                           int aUnit, 
int aBodyStyle, 
const VECTOR2I& aOffset, 
bool aDimmed )
 
 1458    static std::vector<VECTOR2I> s_poly;
 
 1502            aPlotter->
MoveTo( s_poly[0] );
 
 1503            aPlotter->
LineTo( s_poly[1] );
 
 1506            int diameter = ( s_poly[2] - s_poly[1] ).EuclideanNorm() * 2;
 
 1507            aPlotter->
FilledCircle( s_poly[2], diameter, 
nullptr );
 
 1511            aPlotter->
MoveTo( s_poly[0] );
 
 1512            aPlotter->
LineTo( s_poly[1] );
 
 1515            int diameter = ( s_poly[2] - s_poly[1] ).EuclideanNorm() * 2;
 
 1516            aPlotter->
ThickCircle( s_poly[2], diameter, penWidth, 
nullptr );
 
 1520            if( !s_poly.empty() )
 
 1525        bool  linkAlreadyPlotted = 
false;
 
 1532                if( sheet->
size() >= 2 )
 
 1537                    linkAlreadyPlotted = 
true;
 
 1544                path.push_back( parent );
 
 1546                linkAlreadyPlotted = 
true;
 
 1553            std::vector<wxString> properties;
 
 1557                properties.emplace_back( wxString::Format( wxT( 
"!%s = %s" ),
 
 1559                                                           connection->
Name() ) );
 
 1561                properties.emplace_back( wxString::Format( wxT( 
"!%s = %s" ),
 
 1562                                                           _( 
"Resolved netclass" ),
 
 1568                properties.emplace_back( wxString::Format( wxT( 
"!%s = %s" ),
 
 1570                                                           field.GetShownText( 
false ) ) );
 
 1573            if( !properties.empty() )
 
 1582        field.Plot( aPlotter, aBackground, aPlotOpts, aUnit, aBodyStyle, aOffset, aDimmed );
 
 
 1609    kiapi::schematic::types::LocalLabel label;
 
 1611    label.mutable_id()->set_value( 
m_Uuid.AsStdString() );
 
 1614    aContainer.PackFrom( label );
 
 
 1620    kiapi::schematic::types::LocalLabel label;
 
 1622    if( !aContainer.UnpackTo( &label ) )
 
 
 1663    return wxString::Format( 
_( 
"Label '%s'" ),
 
 
 1737        if( ( aLeftRight && field.GetTextAngle().IsHorizontal() )
 
 1738                || ( !aLeftRight && field.GetTextAngle().IsVertical() ) )
 
 1754        field.SetTextPos( pos );
 
 
 1782        field.SetPosition( pos );
 
 
 1804        field.SetPosition( pos );
 
 
 1810                                              std::vector<VECTOR2I>& aPoints,
 
 1820        symbolSize = 
KiROUND( symbolSize * 0.7 );
 
 1825        aPoints.emplace_back( 
VECTOR2I(             0, 0                        ) );
 
 1836        aPoints.emplace_back( 
VECTOR2I(                 0, 0                        ) );
 
 1842        aPoints.emplace_back( 
VECTOR2I(                 0, 0                        ) );
 
 1846        symbolSize = 
KiROUND( symbolSize * 0.8 );
 
 1848        aPoints.emplace_back( 
VECTOR2I(               0, 0                        ) );
 
 1855        aPoints.emplace_back( 
VECTOR2I(               0, 0                        ) );
 
 
 1889        margin = 
KiROUND( margin * 1.5 );
 
 1895        if( field.GetText() == wxEmptyString )
 
 1903            offset = { symbolWidth + margin, origin };
 
 1908            offset = { -origin, -( symbolWidth + margin ) };
 
 1913            offset = { symbolWidth + margin, -origin };
 
 1918            offset = { origin, -( symbolWidth + margin ) };
 
 1925        origin -= field.GetTextHeight() + margin;
 
 
 1937        return _( 
"Directive Label" );
 
 1944        if( content.IsEmpty() )
 
 1946            return wxString::Format( 
_( 
"Directive Label [%s (empty)]" ),
 
 1951            return wxString::Format( 
_( 
"Directive Label [%s %s]" ),
 
 
 2000    m_fields.back().SetText( wxT( 
"${INTERSHEET_REFS}" ) );
 
 2001    m_fields.back().SetVisible( 
false );
 
 
 2031    m_fields.emplace_back( 
this, aFieldType );
 
 
 2084    wxCHECK( aPath, 
false );
 
 2091    if( token->IsSameAs( wxT( 
"INTERSHEET_REFS" ) ) )
 
 2103            std::vector<int> pageListCopy;
 
 2105            pageListCopy.insert( pageListCopy.end(), it->second.begin(), it->second.end() );
 
 2106            std::sort( pageListCopy.begin(), pageListCopy.end() );
 
 2111                std::erase( pageListCopy, currentPage );
 
 2118                ref.Append( wxString::Format( wxT( 
"%s..%s" ),
 
 2119                                              sheetPages[pageListCopy.front()],
 
 2120                                              sheetPages[pageListCopy.back()] ) );
 
 2124                for( 
const int& pageNo : pageListCopy )
 
 2125                    ref.Append( wxString::Format( wxT( 
"%s," ), sheetPages[pageNo] ) );
 
 2127                if( !ref.IsEmpty() && ref.Last() == 
',' )
 
 
 2153                                          std::vector<VECTOR2I>& aPoints,
 
 2161    int x = symb_len + linewidth + 3;
 
 2162    int y = halfSize + linewidth + 3;
 
 2167    aPoints.emplace_back( 
VECTOR2I( 0, 0 ) );
 
 2168    aPoints.emplace_back( 
VECTOR2I( 0, -y ) );    
 
 2169    aPoints.emplace_back( 
VECTOR2I( -x, -y ) );   
 
 2170    aPoints.emplace_back( 
VECTOR2I( -x, 0 ) );    
 
 2171    aPoints.emplace_back( 
VECTOR2I( -x, y ) );    
 
 2172    aPoints.emplace_back( 
VECTOR2I( 0, y ) );     
 
 2179        x_offset = -halfSize;
 
 2180        aPoints[0].x += halfSize;
 
 2184        aPoints[3].x -= halfSize;
 
 2189        x_offset = -halfSize;
 
 2190        aPoints[0].x += halfSize;
 
 2191        aPoints[3].x -= halfSize;
 
 2202        aPoint.x += x_offset;
 
 2216    aPoints.push_back( aPoints[0] ); 
 
 
 2222    return wxString::Format( 
_( 
"Global Label '%s'" ),
 
 
 2263                                        std::vector<VECTOR2I>& aPoints, 
const VECTOR2I& aPos )
 const 
 
 2270                                        std::vector<VECTOR2I>& aPoints, 
const VECTOR2I& aPos,
 
 2275    int  imax = *Template;
 
 2280    for( 
int ii = 0; ii < imax; ii++ )
 
 2283        corner.
x = ( halfSize * (*Template) ) + aPos.
x;
 
 2286        corner.
y = ( halfSize * (*Template) ) + aPos.
y;
 
 2289        aPoints.push_back( corner );
 
 
 2369    return wxString::Format( 
_( 
"Hierarchical Label '%s'" ),
 
 
 2387    wxSize            sz( 320, 320 );
 
 2389    dlg->SetMinSize( dlg->ConvertDialogToPixels( sz ) );
 
 
 2407        if( labelShapeEnum.Choices().GetCount() == 0 )
 
 2438        auto hasLabelShape =
 
 
 
 2462        if( flagShapeEnum.Choices().GetCount() == 0 )
 
 
 
constexpr EDA_IU_SCALE schIUScale
 
BITMAPS
A list of all bitmap identifiers.
 
constexpr BOX2I KiROUND(const BOX2D &aBoxD)
 
static const ADVANCED_CFG & GetCfg()
Get the singleton instance's config, which is shared by all consumers.
 
constexpr int GetSizeMax() const
 
constexpr BOX2< Vec > & Inflate(coord_type dx, coord_type dy)
Inflates the rectangle horizontally by dx and vertically by dy.
 
constexpr const Vec GetEnd() const
 
constexpr void SetOrigin(const Vec &pos)
 
constexpr BOX2< Vec > & Normalize()
Ensure that the height and width are positive.
 
constexpr size_type GetWidth() const
 
constexpr BOX2< Vec > & Merge(const BOX2< Vec > &aRect)
Modify the position and size of the rectangle in order to contain aRect.
 
constexpr bool Contains(const Vec &aPoint) const
 
constexpr const Vec & GetOrigin() const
 
constexpr void SetEnd(coord_type x, coord_type y)
 
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.
 
static std::vector< DANGLING_END_ITEM >::iterator get_lower_type(std::vector< DANGLING_END_ITEM > &aItemListByType, const DANGLING_END_T &aType)
 
static std::vector< DANGLING_END_ITEM >::iterator get_lower_pos(std::vector< DANGLING_END_ITEM > &aItemListByPos, const VECTOR2I &aPos)
 
Helper class used to store the state of schematic items that can be connected to other schematic item...
 
DANGLING_END_T GetType() const
 
EDA_ITEM * GetItem() const
 
VECTOR2I GetPosition() const
 
The base class for create windows for drawing purpose.
 
KICAD_T Type() const
Returns the type of object.
 
virtual bool Matches(const EDA_SEARCH_DATA &aSearchData, void *aAuxData) const
Compare the item against the search criteria in aSearchData.
 
virtual void SetParent(EDA_ITEM *aParent)
 
EDA_ITEM * GetParent() const
 
EDA_ITEM * m_parent
Owner.
 
A mix-in class (via multiple inheritance) that handles texts such as labels, parts,...
 
int GetTextHeight() const
 
const VECTOR2I & GetTextPos() const
 
COLOR4D GetTextColor() const
 
const EDA_ANGLE & GetTextAngle() const
 
virtual const wxString & GetText() const
Return the string associated with the text object.
 
void SetTextPos(const VECTOR2I &aPoint)
 
KIFONT::FONT * GetFont() const
 
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,...
 
void SetVertJustify(GR_TEXT_V_ALIGN_T aType)
 
GR_TEXT_H_ALIGN_T GetHorizJustify() const
 
bool Replace(const EDA_SEARCH_DATA &aSearchData)
Helper function used in search and replace dialog.
 
bool HasTextVars() const
Indicates the ShownText has text var references which need to be processed.
 
static wxString GotoPageHref(const wxString &aDestination)
Generate a href to a page in the current schematic.
 
wxString EvaluateText(const wxString &aText) const
 
virtual void cacheShownText()
 
const TEXT_ATTRIBUTES & GetAttributes() const
 
int GetEffectiveTextPenWidth(int aDefaultPenWidth=0) const
The EffectiveTextPenWidth uses the text thickness if > 1 or aDefaultPenWidth.
 
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)
 
virtual void SetTextAngle(const EDA_ANGLE &aAngle)
 
void SetMultilineAllowed(bool aAllow)
 
VECTOR2I GetTextSize() const
 
void SetHorizJustify(GR_TEXT_H_ALIGN_T aType)
 
EE_TYPE OfType(KICAD_T aType) const
 
static ENUM_MAP< T > & Instance()
 
void SetDialogSizeInDU(int aWidth, int aHeight)
Set the dialog size, using a "logical" value.
 
void AddHTML_Text(const wxString &message)
Add HTML text (without any change) to message list.
 
void ShowModeless()
Show a modeless version of the dialog (without an OK button).
 
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.
 
A color representation with 4 components: red, green, blue, alpha.
 
Container for all the knowledge about how graphical objects are drawn on any output surface/device.
 
int GetDefaultPenWidth() const
 
int GetMinPenWidth() const
 
const COLOR4D & GetLayerColor(int aLayer) const
Return the color used to draw a layer.
 
const wxString GetName() const
Gets the name of this (maybe aggregate) netclass in a format for internal usage or for export to exte...
 
COLOR4D GetSchematicColor(bool aIsForSave=false) const
 
Base plotter engine class.
 
virtual void FilledCircle(const VECTOR2I &pos, int diametre, void *aData)
 
void MoveTo(const VECTOR2I &pos)
 
RENDER_SETTINGS * RenderSettings()
 
virtual void Bookmark(const BOX2I &aBox, const wxString &aName, const wxString &aGroupName=wxEmptyString)
Create a bookmark to a symbol.
 
virtual void HyperlinkBox(const BOX2I &aBox, const wxString &aDestinationURL)
Create a clickable hyperlink with a rectangular click area.
 
bool GetColorMode() const
 
virtual void SetCurrentLineWidth(int width, void *aData=nullptr)=0
Set the line width for the next drawing.
 
void LineTo(const VECTOR2I &pos)
 
virtual void PlotText(const VECTOR2I &aPos, const COLOR4D &aColor, const wxString &aText, const TEXT_ATTRIBUTES &aAttributes, KIFONT::FONT *aFont=nullptr, const KIFONT::METRICS &aFontMetrics=KIFONT::METRICS::Default(), void *aData=nullptr)
 
virtual void PlotPoly(const std::vector< VECTOR2I > &aCornerList, FILL_T aFill, int aWidth, void *aData)=0
Draw a polygon ( filled or not ).
 
virtual void HyperlinkMenu(const BOX2I &aBox, const std::vector< wxString > &aDestURLs)
Create a clickable hyperlink menu with a rectangular click area.
 
virtual void ThickCircle(const VECTOR2I &pos, int diametre, int width, void *aData)
 
virtual void SetColor(const COLOR4D &color)=0
 
PROPERTY_BASE & SetAvailableFunc(std::function< bool(INSPECTABLE *)> aFunc)
Set a callback function to determine whether an object provides this property.
 
Provide class metadata.Helper macro to map type hashes to names.
 
void InheritsAfter(TYPE_ID aDerived, TYPE_ID aBase)
Declare an inheritance relationship between types.
 
void Mask(TYPE_ID aDerived, TYPE_ID aBase, const wxString &aName)
Sets a base class property as masked in a derived class.
 
static PROPERTY_MANAGER & Instance()
 
PROPERTY_BASE & AddProperty(PROPERTY_BASE *aProperty, const wxString &aGroup=wxEmptyString)
Register a property.
 
void AddTypeCast(TYPE_CAST_BASE *aCast)
Register a type converter.
 
These are loaded from Eeschema settings but then overwritten by the project settings.
 
wxString m_IntersheetRefsPrefix
 
wxString m_IntersheetRefsSuffix
 
bool m_IntersheetRefsFormatShort
 
bool m_IntersheetRefsListOwnPage
 
Holds all the data relating to one schematic.
 
wxString GetOperatingPoint(const wxString &aNetName, int aPrecision, const wxString &aRange)
 
SCHEMATIC_SETTINGS & Settings() const
 
std::map< wxString, std::set< int > > & GetPageRefsMap()
 
std::map< int, wxString > GetVirtualPageToSheetPagesMap() const
 
std::map< int, wxString > GetVirtualPageToSheetNamesMap() const
 
SCH_SHEET_PATH & CurrentSheet() const
 
bool ResolveCrossReference(wxString *token, int aDepth) const
Resolves text vars that refer to other items.
 
Each graphical item can have a SCH_CONNECTION describing its logical connection (to a bus or net).
 
wxString GetNetName() const
 
const std::vector< std::shared_ptr< SCH_CONNECTION > > AllMembers() const
 
wxString LocalName() const
 
wxString Name(bool aIgnoreSheet=false) const
 
void AppendInfoToMsgPanel(std::vector< MSG_PANEL_ITEM > &aList) const
Adds information about the connection object to aList.
 
void Serialize(google::protobuf::Any &aContainer) const override
Serializes this object to the given Any message.
 
void MirrorSpinStyle(bool aLeftRight) override
 
void RemoveConnectedRuleArea(SCH_RULE_AREA *aRuleArea)
Removes a specific rule area from the cache.
 
void ClearConnectedRuleAreas()
Removes all rule areas from the cache.
 
void MirrorVertically(int aCenter) override
Mirror item vertically about aCenter.
 
void MirrorHorizontally(int aCenter) override
Mirror item horizontally about aCenter.
 
SCH_DIRECTIVE_LABEL(const VECTOR2I &aPos=VECTOR2I(0, 0))
 
wxString GetItemDescription(UNITS_PROVIDER *aUnitsProvider, bool aFull) const override
Return a user-visible description string of this item.
 
bool Deserialize(const google::protobuf::Any &aContainer) override
Deserializes the given protobuf message into this object.
 
void CreateGraphicShape(const RENDER_SETTINGS *aSettings, std::vector< VECTOR2I > &aPoints, const VECTOR2I &aPos) const override
Calculate the graphic shape (a polygon) associated to the text.
 
FLAG_SHAPE GetFlagShape() const
 
int GetPenWidth() const override
 
std::unordered_set< SCH_RULE_AREA * > m_connected_rule_areas
Cache of any rule areas with borders which this label connects to.
 
void swapData(SCH_ITEM *aItem) override
Swap the internal data structures aItem with the schematic item.
 
void SetPinLength(int aLength)
 
virtual bool IsDangling() const override
Determines dangling state from connectivity and cached connected rule areas.
 
void AddConnectedRuleArea(SCH_RULE_AREA *aRuleArea)
Adds an entry to the connected rule area cache.
 
void SetFlagShape(FLAG_SHAPE aShape)
 
void AutoplaceFields(SCH_SCREEN *aScreen, AUTOPLACE_ALGO aAlgo) override
 
const std::unordered_set< SCH_RULE_AREA * > GetConnectedRuleAreas() const
 
Schematic editor (Eeschema) main window.
 
wxString GetCanonicalName() const
Get a non-language-specific name for a field which can be used for storage, variable look-up,...
 
wxString GetShownText(const SCH_SHEET_PATH *aPath, bool aAllowExtraText, int aDepth=0) const
 
SCH_FIELD * GetField(FIELD_T aFieldType)
Return a mandatory field in this label.
 
std::vector< int > ViewGetLayers() const override
Return the all the layers within the VIEW the object is painted on.
 
void CreateGraphicShape(const RENDER_SETTINGS *aRenderSettings, std::vector< VECTOR2I > &aPoints, const VECTOR2I &aPos) const override
Calculate the graphic shape (a polygon) associated to the text.
 
bool ResolveTextVar(const SCH_SHEET_PATH *aPath, wxString *token, int aDepth) const override
Resolve any references to system tokens supported by the label.
 
VECTOR2I GetSchematicTextOffset(const RENDER_SETTINGS *aSettings) const override
This offset depends on the orientation, the type of text, and the area required to draw the associate...
 
void SetSpinStyle(SPIN_STYLE aSpinStyle) override
 
bool Deserialize(const google::protobuf::Any &aContainer) override
Deserializes the given protobuf message into this object.
 
void Serialize(google::protobuf::Any &aContainer) const override
Serializes this object to the given Any message.
 
SCH_GLOBALLABEL(const VECTOR2I &aPos=VECTOR2I(0, 0), const wxString &aText=wxEmptyString)
 
BITMAPS GetMenuImage() const override
Return a pointer to an image to be used in menus.
 
wxString GetItemDescription(UNITS_PROVIDER *aUnitsProvider, bool aFull) const override
Return a user-visible description string of this item.
 
const BOX2I GetBodyBoundingBox(const RENDER_SETTINGS *aSettings) const override
Return the bounding box of the label only, without taking in account its fields.
 
bool Deserialize(const google::protobuf::Any &aContainer) override
Deserializes the given protobuf message into this object.
 
void SetSpinStyle(SPIN_STYLE aSpinStyle) override
 
void CreateGraphicShape(const RENDER_SETTINGS *aSettings, std::vector< VECTOR2I > &aPoints, const VECTOR2I &aPos) const override
Calculate the graphic shape (a polygon) associated to the text.
 
SCH_HIERLABEL(const VECTOR2I &aPos=VECTOR2I(0, 0), const wxString &aText=wxEmptyString, KICAD_T aType=SCH_HIER_LABEL_T)
 
BITMAPS GetMenuImage() const override
Return a pointer to an image to be used in menus.
 
void Serialize(google::protobuf::Any &aContainer) const override
Serializes this object to the given Any message.
 
wxString GetItemDescription(UNITS_PROVIDER *aUnitsProvider, bool aFull) const override
Return a user-visible description string of this item.
 
VECTOR2I GetSchematicTextOffset(const RENDER_SETTINGS *aSettings) const override
This offset depends on the orientation, the type of text, and the area required to draw the associate...
 
virtual bool IsConnectable() const
 
SCH_ITEM & operator=(const SCH_ITEM &aPin)
 
SCHEMATIC * Schematic() const
Search the item hierarchy to find a SCHEMATIC.
 
void AddConnectionTo(const SCH_SHEET_PATH &aPath, SCH_ITEM *aItem)
Add a connection link between this item and another.
 
std::shared_ptr< NETCLASS > GetEffectiveNetClass(const SCH_SHEET_PATH *aSheet=nullptr) const
 
bool IsConnectivityDirty() const
 
AUTOPLACE_ALGO m_fieldsAutoplaced
 
SCH_ITEM(EDA_ITEM *aParent, KICAD_T aType, int aUnit=0, int aBodyStyle=0)
 
SCH_CONNECTION * Connection(const SCH_SHEET_PATH *aSheet=nullptr) const
Retrieve the connection associated with this object in the given sheet.
 
const KIFONT::METRICS & GetFontMetrics() const
 
std::map< SCH_SHEET_PATH, SCH_ITEM_VEC, SHEET_PATH_CMP > m_connected_items
Store pointers to other items that are connected to this one, per sheet.
 
bool IsType(const std::vector< KICAD_T > &aScanTypes) const override
Check whether the item is one of the listed types.
 
bool operator==(const SCH_ITEM &aItem) const override
 
const wxString & GetCachedDriverName() const override
 
SCH_LABEL_BASE(const VECTOR2I &aPos, const wxString &aText, KICAD_T aType)
 
COLOR4D m_lastResolvedColor
 
wxString GetShownText(const SCH_SHEET_PATH *aPath, bool aAllowExtraText, int aDepth=0) const override
 
void Move(const VECTOR2I &aMoveVector) override
Move the item by aMoveVector to a new position.
 
INSPECT_RESULT Visit(INSPECTOR inspector, void *testData, const std::vector< KICAD_T > &scanTypes) override
May be re-implemented for each derived class in order to handle all the types given by its member dat...
 
bool Matches(const EDA_SEARCH_DATA &aSearchData, void *aAuxData) const override
Compare the item against the search criteria in aSearchData.
 
std::vector< int > ViewGetLayers() const override
Return the layers the item is drawn on (which may be more than its "home" layer)
 
bool HasCachedDriverName() const override
 
bool HitTest(const VECTOR2I &aPosition, int aAccuracy=0) const override
Test if aPosition is inside or on the boundary of this item.
 
void GetEndPoints(std::vector< DANGLING_END_ITEM > &aItemList) override
Add the schematic item end points to aItemList if the item has end points.
 
bool AutoRotateOnPlacement() const
autoRotateOnPlacement
 
SCH_LABEL_BASE & operator=(const SCH_LABEL_BASE &aLabel)
 
std::vector< SCH_FIELD > m_fields
 
CONNECTION_TYPE m_connectionType
 
void MirrorHorizontally(int aCenter) override
Mirror item horizontally about aCenter.
 
int GetNextFieldOrdinal() const
Return the next ordinal for a user field for this label.
 
void Plot(PLOTTER *aPlotter, bool aBackground, const SCH_PLOT_OPTS &aPlotOpts, int aUnit, int aBodyStyle, const VECTOR2I &aOffset, bool aDimmed) override
Plot the item to aPlotter.
 
void SetLabelShape(LABEL_SHAPE aShape)
 
bool HasConnectivityChanges(const SCH_ITEM *aItem, const SCH_SHEET_PATH *aInstance=nullptr) const override
Check if aItem has connectivity changes against this object.
 
SPIN_STYLE GetSpinStyle() const
 
void GetIntersheetRefs(const SCH_SHEET_PATH *aPath, std::vector< std::pair< wxString, wxString > > *pages)
Build an array of { pageNumber, pageName } pairs.
 
void MirrorSpinStyle(bool aLeftRight) override
 
std::vector< VECTOR2I > GetConnectionPoints() const override
Add all the connection points for this item to aPoints.
 
COLOR4D GetLabelColor() const
 
LABEL_FLAG_SHAPE GetShape() const
 
const BOX2I GetBoundingBox() const override
Return the bounding box of the label including its fields.
 
bool IsType(const std::vector< KICAD_T > &aScanTypes) const override
Check whether the item is one of the listed types.
 
void MirrorVertically(int aCenter) override
Mirror item vertically about aCenter.
 
void SetPosition(const VECTOR2I &aPosition) override
 
void swapData(SCH_ITEM *aItem) override
Swap the internal data structures aItem with the schematic item.
 
virtual bool ResolveTextVar(const SCH_SHEET_PATH *aPath, wxString *token, int aDepth) const
Resolve any references to system tokens supported by the label.
 
LABEL_SHAPE GetLabelShape() const
 
void RunOnChildren(const std::function< void(SCH_ITEM *)> &aFunction, RECURSE_MODE aMode) override
 
bool m_autoRotateOnPlacement
 
wxString m_cached_driver_name
 
void Rotate(const VECTOR2I &aCenter, bool aRotateCCW) override
Rotate the item around aCenter 90 degrees in the clockwise direction.
 
int GetLabelBoxExpansion(const RENDER_SETTINGS *aSettings=nullptr) const
 
bool IncrementLabel(int aIncrement)
Increment the label text if it ends with a number.
 
void SetAutoRotateOnPlacement(bool autoRotate=true)
 
void cacheShownText() override
 
void Rotate90(bool aClockwise) override
 
void GetMsgPanelInfo(EDA_DRAW_FRAME *aFrame, std::vector< MSG_PANEL_ITEM > &aList) override
Populate aList of MSG_PANEL_ITEM objects with it's internal state for display purposes.
 
static const wxString GetDefaultFieldName(const wxString &aName, bool aUseDefaultName)
 
void AutoplaceFields(SCH_SCREEN *aScreen, AUTOPLACE_ALGO aAlgo) override
 
void GetContextualTextVars(wxArrayString *aVars) const
Return the list of system text vars & fields for this label.
 
virtual const BOX2I GetBodyBoundingBox(const RENDER_SETTINGS *aSettings) const
Return the bounding box of the label only, without taking in account its fields.
 
virtual void CreateGraphicShape(const RENDER_SETTINGS *aSettings, std::vector< VECTOR2I > &aPoints, const VECTOR2I &Pos) const
Calculate the graphic shape (a polygon) associated to the text.
 
std::vector< SCH_FIELD > & GetFields()
 
bool UpdateDanglingState(std::vector< DANGLING_END_ITEM > &aItemListByType, std::vector< DANGLING_END_ITEM > &aItemListByPos, const SCH_SHEET_PATH *aPath=nullptr) override
Test the schematic item to aItemList to check if it's dangling state has changed.
 
VECTOR2I GetSchematicTextOffset(const RENDER_SETTINGS *aSettings) const override
This offset depends on the orientation, the type of text, and the area required to draw the associate...
 
virtual void SetSpinStyle(SPIN_STYLE aSpinStyle)
 
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 ...
 
double Similarity(const SCH_ITEM &aItem) const override
Return a measure of how likely the other object is to represent the same object.
 
bool Deserialize(const google::protobuf::Any &aContainer) override
Deserializes the given protobuf message into this object.
 
const BOX2I GetBodyBoundingBox(const RENDER_SETTINGS *aSettings) const override
Return the bounding box of the label only, without taking in account its fields.
 
SCH_LABEL(const VECTOR2I &aPos=VECTOR2I(0, 0), const wxString &aText=wxEmptyString)
 
BITMAPS GetMenuImage() const override
Return a pointer to an image to be used in menus.
 
wxString GetItemDescription(UNITS_PROVIDER *aUnitsProvider, bool aFull) const override
Return a user-visible description string of this item.
 
void Serialize(google::protobuf::Any &aContainer) const override
Serializes this object to the given Any message.
 
std::vector< SCH_SHEET_PATH > & GetClientSheetPaths()
Return the number of times this screen is used.
 
EE_RTREE & Items()
Get the full RTree, usually for iterating.
 
Handle access to a stack of flattened SCH_SHEET objects by way of a path for creating a flattened sch...
 
SCH_SHEET * Last() const
Return a pointer to the last SCH_SHEET of the list.
 
size_t size() const
Forwarded method from std::vector.
 
int GetVirtualPageNumber() const
 
Define a sheet pin (label) used in sheets to create hierarchical schematics.
 
Sheet symbol placed in a schematic, and is the entry point for a sub schematic.
 
SCH_SCREEN * GetScreen() const
 
std::vector< SCH_SHEET_PIN * > & GetPins()
 
bool ResolveTextVar(const SCH_SHEET_PATH *aPath, wxString *token, int aDepth=0) const
Resolve any references to system tokens supported by the sheet.
 
void swapData(SCH_ITEM *aItem) override
Swap the internal data structures aItem with the schematic item.
 
KIFONT::FONT * GetDrawFont(const RENDER_SETTINGS *aSettings) const override
 
void Move(const VECTOR2I &aMoveVector) override
Move the item by aMoveVector to a new position.
 
void MirrorVertically(int aCenter) override
Mirror item vertically about aCenter.
 
static HTML_MESSAGE_BOX * ShowSyntaxHelp(wxWindow *aParentWindow)
 
VECTOR2I GetPosition() const override
 
virtual void Rotate90(bool aClockwise)
 
void MirrorHorizontally(int aCenter) override
Mirror item horizontally about aCenter.
 
double Similarity(const SCH_ITEM &aItem) const override
Return a measure of how likely the other object is to represent the same object.
 
int GetPenWidth() const override
 
virtual void MirrorSpinStyle(bool aLeftRight)
 
bool operator==(const SCH_ITEM &aItem) const override
 
int GetTextOffset(const RENDER_SETTINGS *aSettings=nullptr) const
 
SCH_TEXT(const VECTOR2I &aPos={ 0, 0 }, const wxString &aText=wxEmptyString, SCH_LAYER_ID aLayer=LAYER_NOTES, KICAD_T aType=SCH_TEXT_T)
 
Represent a polyline containing arcs as well as line segments: A chain of connected line and/or arc s...
 
SPIN_STYLE MirrorX()
Mirror the label spin style across the X axis or simply swaps up and bottom.
 
SPIN_STYLE MirrorY()
Mirror the label spin style across the Y axis or simply swaps left and right.
 
unsigned CCWRotationsTo(const SPIN_STYLE &aOther) const
Get CCW rotation needed to get to the given spin style.
 
wxString MessageTextFromValue(double aValue, bool aAddUnitLabel=true, EDA_DATA_TYPE aType=EDA_DATA_TYPE::DISTANCE) const
A lower-precision version of StringFromValue().
 
wxString ExpandTextVars(const wxString &aSource, const PROJECT *aProject, int aFlags)
 
#define DEFAULT_LABEL_SIZE_RATIO
The offset of the pin name string from the end of the pin in mils.
 
#define DANGLING_SYMBOL_SIZE
The size of the rectangle indicating an unconnected wire or label.
 
static constexpr EDA_ANGLE ANGLE_90
 
static constexpr EDA_ANGLE ANGLE_VERTICAL
 
static constexpr EDA_ANGLE ANGLE_HORIZONTAL
 
static constexpr EDA_ANGLE ANGLE_270
 
static constexpr EDA_ANGLE ANGLE_180
 
const INSPECTOR_FUNC & INSPECTOR
std::function passed to nested users by ref, avoids copying std::function.
 
a few functions useful in geometry calculations.
 
KICOMMON_API bool IncrementString(wxString &name, int aIncrement)
Generic string incrementer.
 
@ LAYER_SELECTION_SHADOWS
 
#define KI_FALLTHROUGH
The KI_FALLTHROUGH macro is to be used when switch statement cases should purposely fallthrough from ...
 
constexpr T MIRRORVAL(T aPoint, T aMirrorRef)
Returns the mirror of aPoint relative to the aMirrorRef.
 
Message panel definition file.
 
bool BoxHitTest(const VECTOR2I &aHitPoint, const BOX2I &aHittee, int aAccuracy)
Perform a point-to-box hit test.
 
KICOMMON_API wxString EllipsizeMenuText(const wxString &aString)
Ellipsize text (at the end) to be no more than 36 characters.
 
KICOMMON_API VECTOR2I UnpackVector2(const types::Vector2 &aInput)
 
KICOMMON_API void PackVector2(types::Vector2 &aOutput, const VECTOR2I &aInput)
 
EDA_ANGLE abs(const EDA_ANGLE &aAngle)
 
#define ENUM_TO_WXANY(type)
Macro to define read-only fields (no setter method available)
 
@ PT_SIZE
Size expressed in distance units (mm/inch)
 
@ BUS
This item represents a bus vector.
 
@ NET
This item represents a net.
 
@ NONE
No connection to this item.
 
const SCH_FIELD * FindField(const std::vector< SCH_FIELD > &aFields, FIELD_T aFieldId)
 
int NextFieldOrdinal(const std::vector< SCH_FIELD > &aFields)
 
std::vector< SCH_ITEM * > SCH_ITEM_VEC
 
static int TemplateIN_HI[]
 
static int TemplateUNSPC_HI[]
 
static int TemplateOUT_HN[]
 
static int Template3STATE_HN[]
 
static int TemplateBIDI_HN[]
 
static int * TemplateShape[5][4]
 
static int TemplateIN_HN[]
 
static int TemplateIN_BOTTOM[]
 
static int TemplateUNSPC_HN[]
 
static int Template3STATE_BOTTOM[]
 
static int TemplateBIDI_BOTTOM[]
 
static struct SCH_LABEL_DESC _SCH_LABEL_DESC
 
static int Template3STATE_UP[]
 
static int TemplateOUT_UP[]
 
static int TemplateOUT_HI[]
 
static int TemplateUNSPC_UP[]
 
static int TemplateUNSPC_BOTTOM[]
 
static int TemplateOUT_BOTTOM[]
 
static int Template3STATE_HI[]
 
static int TemplateIN_UP[]
 
wxString getElectricalTypeLabel(LABEL_FLAG_SHAPE aType)
 
static int TemplateBIDI_UP[]
 
static int TemplateBIDI_HI[]
 
static struct SCH_DIRECTIVE_LABEL_DESC _SCH_DIRECTIVE_LABEL_DESC
 
wxString UnescapeString(const wxString &aSource)
 
wxString EscapeString(const wxString &aSource, ESCAPE_CONTEXT aContext)
The Escape/Unescape routines use HTML-entity-reference-style encoding to handle characters which are:...
 
void ConvertMarkdown2Html(const wxString &aMarkdownInput, wxString &aHtmlOutput)
 
SCH_DIRECTIVE_LABEL_DESC()
 
bool m_PDFHierarchicalLinks
 
FIELD_T
The set of all field indices assuming an array like sequence that a SCH_COMPONENT or LIB_PART can hol...
 
@ INTERSHEET_REFS
Global label cross-reference page numbers.
 
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.
 
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.
 
KICAD_T
The set of class identification values stored in EDA_ITEM::m_structType.
 
@ SCH_LABEL_LOCATE_WIRE_T
 
VECTOR2< int32_t > VECTOR2I