47#include <magic_enum.hpp>
49#include <api/schematic/schematic_types.pb.h>
59 wxString outputFormat;
60 wxString outputNumber;
61 int ii =
name.Len() - 1;
64 while( ii >= 0 && !wxIsdigit(
name.GetChar( ii ) ) )
66 suffix =
name.GetChar( ii ) + suffix;
70 while( ii >= 0 && wxIsdigit(
name.GetChar( ii ) ) )
72 digits =
name.GetChar( ii ) + digits;
77 if( digits.IsEmpty() )
82 if( digits.ToLong( &number ) )
90 name.Remove( ii + 1 );
92 outputFormat.Printf( wxS(
"%%0%dld" ), dCount );
94 outputNumber.Printf( outputFormat, number );
95 name << outputNumber << suffix;
109static int TemplateIN_HN[] = { 6, 0, 0, -1, -1, -2, -1, -2, 1, -1, 1, 0, 0 };
110static int TemplateIN_HI[] = { 6, 0, 0, 1, 1, 2, 1, 2, -1, 1, -1, 0, 0 };
111static int TemplateIN_UP[] = { 6, 0, 0, 1, -1, 1, -2, -1, -2, -1, -1, 0, 0 };
112static int TemplateIN_BOTTOM[] = { 6, 0, 0, 1, 1, 1, 2, -1, 2, -1, 1, 0, 0 };
114static int TemplateOUT_HN[] = { 6, -2, 0, -1, 1, 0, 1, 0, -1, -1, -1, -2, 0 };
115static int TemplateOUT_HI[] = { 6, 2, 0, 1, -1, 0, -1, 0, 1, 1, 1, 2, 0 };
116static int TemplateOUT_UP[] = { 6, 0, -2, 1, -1, 1, 0, -1, 0, -1, -1, 0, -2 };
117static int TemplateOUT_BOTTOM[] = { 6, 0, 2, 1, 1, 1, 0, -1, 0, -1, 1, 0, 2 };
119static int TemplateUNSPC_HN[] = { 5, 0, -1, -2, -1, -2, 1, 0, 1, 0, -1 };
120static int TemplateUNSPC_HI[] = { 5, 0, -1, 2, -1, 2, 1, 0, 1, 0, -1 };
121static int TemplateUNSPC_UP[] = { 5, 1, 0, 1, -2, -1, -2, -1, 0, 1, 0 };
122static int TemplateUNSPC_BOTTOM[] = { 5, 1, 0, 1, 2, -1, 2, -1, 0, 1, 0 };
124static int TemplateBIDI_HN[] = { 5, 0, 0, -1, -1, -2, 0, -1, 1, 0, 0 };
125static int TemplateBIDI_HI[] = { 5, 0, 0, 1, -1, 2, 0, 1, 1, 0, 0 };
126static int TemplateBIDI_UP[] = { 5, 0, 0, -1, -1, 0, -2, 1, -1, 0, 0 };
127static int TemplateBIDI_BOTTOM[] = { 5, 0, 0, -1, 1, 0, 2, 1, 1, 0, 0 };
129static int Template3STATE_HN[] = { 5, 0, 0, -1, -1, -2, 0, -1, 1, 0, 0 };
130static int Template3STATE_HI[] = { 5, 0, 0, 1, -1, 2, 0, 1, 1, 0, 0 };
131static int Template3STATE_UP[] = { 5, 0, 0, -1, -1, 0, -2, 1, -1, 0, 0 };
132static int Template3STATE_BOTTOM[] = { 5, 0, 0, -1, 1, 0, 2, 1, 1, 0, 0 };
153 default:
return wxT(
"???" );
208 return ( ( (
int)
m_spin - (
int) aOther.
m_spin ) % 4 + 4 ) % 4;
216 m_isDangling( true ),
229 m_shape( aLabel.m_shape ),
230 m_connectionType( aLabel.m_connectionType ),
231 m_isDangling( aLabel.m_isDangling ),
232 m_lastResolvedColor( aLabel.m_lastResolvedColor ),
233 m_cached_driver_name( aLabel.m_cached_driver_name )
240 field.SetParent(
this );
256 if( aName == wxT(
"Intersheetrefs" ) )
257 return _(
"Sheet References" );
258 else if( aName == wxT(
"Netclass" ) )
259 return _(
"Net Class" );
260 else if( aName.IsEmpty() && aUseDefaultName )
275 for(
KICAD_T scanType : aScanTypes )
281 wxCHECK_MSG(
Schematic(),
false, wxT(
"No parent SCHEMATIC set for SCH_LABEL!" ) );
290 for(
KICAD_T scanType : aScanTypes )
294 for(
SCH_ITEM* connection : item_set )
296 if( connection->IsType( wireAndPinTypes ) )
303 for(
SCH_ITEM* connection : item_set )
305 if( connection->IsType( busTypes ) )
325 field.SetParent(
this );
355 wxFAIL_MSG(
"Bad spin style" );
434 field.Offset( aMoveVector );
449 field.SetTextPos( field.GetTextPos() + offset );
477 if( ( aLeftRight && field.GetTextAngle().IsHorizontal() )
478 || ( !aLeftRight && field.GetTextAngle().IsVertical() ) )
494 field.SetTextPos( pos );
507 field.FlipHJustify();
513 field.SetPosition( pos );
526 field.FlipHJustify();
532 field.SetPosition( pos );
567 for(
size_t ii = 0; ii <
m_fields.size(); ++ii )
589 if(
typeid( *
this ) !=
typeid( aOther ) )
598 for(
size_t ii = 0; ii <
m_fields.size(); ++ii )
608 similarity *= std::pow( 0.9, diff );
634 if( field.GetCanonicalName() == wxT(
"Intersheetrefs" ) )
635 offset.
x = - ( labelLen + margin );
637 offset.
y = accumulated + field.GetTextHeight() / 2;
645 if( field.GetCanonicalName() == wxT(
"Intersheetrefs" ) )
646 offset.
y = - ( labelLen + margin );
648 offset.
x = accumulated + field.GetTextHeight() / 2;
656 if( field.GetCanonicalName() == wxT(
"Intersheetrefs" ) )
657 offset.
x = labelLen + margin;
659 offset.
y = accumulated + field.GetTextHeight() / 2;
667 if( field.GetCanonicalName() == wxT(
"Intersheetrefs" ) )
668 offset.
y = labelLen + margin;
670 offset.
x = accumulated + field.GetTextHeight() / 2;
677 if( field.GetCanonicalName() != wxT(
"Intersheetrefs" ) )
678 accumulated += field.GetTextHeight() + margin;
686 std::vector<std::pair<wxString, wxString>>* pages )
695 if( it !=
Schematic()->GetPageRefsMap().end() )
697 std::vector<int> pageListCopy;
699 pageListCopy.insert( pageListCopy.end(), it->second.begin(), it->second.end() );
701 if( !
Schematic()->Settings().m_IntersheetRefsListOwnPage )
706 if( pageListCopy.empty() )
710 std::sort( pageListCopy.begin(), pageListCopy.end() );
715 for(
int pageNum : pageListCopy )
716 pages->push_back( { sheetPages[ pageNum ], sheetNames[ pageNum ] } );
725 aVars->push_back( field.GetCanonicalName().Upper() );
727 aVars->push_back( wxT(
"OP" ) );
728 aVars->push_back( wxT(
"CONNECTION_TYPE" ) );
729 aVars->push_back( wxT(
"SHORT_NET_NAME" ) );
730 aVars->push_back( wxT(
"NET_NAME" ) );
731 aVars->push_back( wxT(
"NET_CLASS" ) );
738 static wxRegEx operatingPoint( wxT(
"^"
740 "(.([0-9])?([a-zA-Z]*))?"
743 wxCHECK( aPath,
false );
750 if( operatingPoint.Matches( *token ) )
753 wxString precisionStr( operatingPoint.GetMatch( *token, 2 ) );
754 wxString range( operatingPoint.GetMatch( *token, 3 ) );
756 if( !precisionStr.IsEmpty() )
757 precision = precisionStr[0] -
'0';
759 if( range.IsEmpty() )
771 if( token->Contains(
':' ) )
778 && token->IsSameAs( wxT(
"CONNECTION_TYPE" ) ) )
784 else if( token->IsSameAs( wxT(
"SHORT_NET_NAME" ) ) )
787 *token = wxEmptyString;
794 else if( token->IsSameAs( wxT(
"NET_NAME" ) ) )
797 *token = wxEmptyString;
800 *token = connection->
Name();
804 else if( token->IsSameAs( wxT(
"NET_CLASS" ) ) )
807 *token = wxEmptyString;
817 if( token->IsSameAs( field.GetName() ) )
819 *token = field.GetShownText(
false, aDepth + 1 );
831 path.push_back( sheet );
870 std::function<bool( wxString* )> textResolver =
871 [&]( wxString* token ) ->
bool
878 if(
text == wxS(
"~" ) )
916 const std::vector<KICAD_T>& aScanTypes )
918 if(
IsType( aScanTypes ) )
920 if( INSPECT_RESULT::QUIT == aInspector(
this,
nullptr ) )
921 return INSPECT_RESULT::QUIT;
924 for(
KICAD_T scanType : aScanTypes )
930 if( INSPECT_RESULT::QUIT == aInspector( &field,
this ) )
931 return INSPECT_RESULT::QUIT;
936 return INSPECT_RESULT::CONTINUE;
943 aItemList.push_back( item );
984 std::vector<VECTOR2I> pts;
1005 if( field.IsVisible() && field.GetText() != wxEmptyString )
1007 BOX2I fieldBBox = field.GetBoundingBox();
1012 box.
Merge( fieldBBox );
1032 if( field.IsVisible() )
1034 BOX2I fieldBBox = field.GetBoundingBox();
1035 fieldBBox.
Inflate( aAccuracy );
1040 if( fieldBBox.
Contains( aPosition ) )
1066 if( field.IsVisible() )
1068 BOX2I fieldBBox = field.GetBoundingBox();
1084 std::vector<DANGLING_END_ITEM>& aItemListByPos,
1093 it < aItemListByPos.end() && it->GetPosition() == text_pos; it++ )
1125 it < aItemListByType.end() && it->GetType() ==
BUS_END; it++ )
1146 sch_item->AddConnectionTo( *aPath,
this );
1154 it < aItemListByType.end() && it->GetType() ==
WIRE_END; it++ )
1175 sch_item->AddConnectionTo( *aPath,
this );
1199 wxCHECK( label,
false );
1207 std::vector<wxString> netclasses;
1208 std::vector<wxString> otherNetclasses;
1212 if( field.GetCanonicalName() == wxT(
"Netclass" ) )
1213 netclasses.push_back( field.GetText() );
1219 otherNetclasses.push_back( field.
GetText() );
1222 return netclasses != otherNetclasses;
1247 aList.emplace_back(
_(
"Font" ),
GetFont() ?
GetFont()->GetName() :
_(
"Default" ) );
1249 wxString textStyle[] = {
_(
"Normal" ),
_(
"Italic" ),
_(
"Bold" ),
_(
"Bold Italic" ) };
1251 aList.emplace_back(
_(
"Style" ), textStyle[style] );
1261 default: msg = wxT(
"???" );
break;
1264 aList.emplace_back(
_(
"Justification" ), msg );
1275 if( !conn->
IsBus() )
1277 aList.emplace_back(
_(
"Resolved Netclass" ),
1285 int aUnit,
int aBodyStyle,
const VECTOR2I& aOffset,
bool aDimmed )
1287 static std::vector<VECTOR2I> s_poly;
1323 if(
GetShape() == LABEL_FLAG_SHAPE::F_DOT )
1325 aPlotter->
MoveTo( s_poly[0] );
1326 aPlotter->
LineTo( s_poly[1] );
1329 int diameter = ( s_poly[2] - s_poly[1] ).EuclideanNorm() * 2;
1332 else if(
GetShape() == LABEL_FLAG_SHAPE::F_ROUND )
1334 aPlotter->
MoveTo( s_poly[0] );
1335 aPlotter->
LineTo( s_poly[1] );
1338 int diameter = ( s_poly[2] - s_poly[1] ).EuclideanNorm() * 2;
1343 if( !s_poly.empty() )
1344 aPlotter->
PlotPoly( s_poly, FILL_T::NO_FILL, penWidth );
1348 bool linkAlreadyPlotted =
false;
1353 if( sheet->
size() >= 2 )
1359 linkAlreadyPlotted =
true;
1366 path.push_back( parent );
1369 linkAlreadyPlotted =
true;
1376 std::vector<wxString> properties;
1380 properties.emplace_back( wxString::Format( wxT(
"!%s = %s" ),
_(
"Net" ),
1381 connection->
Name() ) );
1383 properties.emplace_back( wxString::Format( wxT(
"!%s = %s" ),
1384 _(
"Resolved netclass" ),
1390 properties.emplace_back( wxString::Format( wxT(
"!%s = %s" ), field.GetName(),
1391 field.GetShownText(
false ) ) );
1394 if( !properties.empty() )
1401 _(
"Hierarchical Labels" ) );
1406 field.Plot( aPlotter, aBackground, aPlotOpts, aUnit, aBodyStyle, aOffset, aDimmed );
1411 const VECTOR2I& aOffset,
bool aForceNoFill,
bool aDimmed )
1413 static std::vector<VECTOR2I> s_poly;
1423 if( !blackAndWhiteMode &&
GetTextColor() != COLOR4D::UNSPECIFIED )
1430 if(
GetShape() == LABEL_FLAG_SHAPE::F_DOT )
1432 GRLine( DC, s_poly[0], s_poly[1], penWidth,
color );
1434 int radius = ( s_poly[2] - s_poly[1] ).EuclideanNorm();
1437 else if(
GetShape() == LABEL_FLAG_SHAPE::F_ROUND )
1439 GRLine( DC, s_poly[0], s_poly[1], penWidth,
color );
1441 int radius = ( s_poly[2] - s_poly[1] ).EuclideanNorm();
1446 if( !s_poly.empty() )
1451 field.Print( aSettings, aUnit, aBodyStyle, aOffset, aForceNoFill, aDimmed );
1471 m_shape = LABEL_FLAG_SHAPE::L_INPUT;
1478 kiapi::schematic::types::LocalLabel label;
1483 aContainer.PackFrom( label );
1489 kiapi::schematic::types::LocalLabel label;
1491 if( !aContainer.UnpackTo( &label ) )
1532 return wxString::Format(
_(
"Label '%s'" ),
1539 return BITMAPS::add_line_label;
1547 m_shape = LABEL_FLAG_SHAPE::F_ROUND;
1606 if( ( aLeftRight && field.GetTextAngle().IsHorizontal() )
1607 || ( !aLeftRight && field.GetTextAngle().IsVertical() ) )
1623 field.SetTextPos( pos );
1650 field.SetPosition( pos );
1672 field.SetPosition( pos );
1678 std::vector<VECTOR2I>& aPoints,
1687 case LABEL_FLAG_SHAPE::F_DOT:
1688 symbolSize =
KiROUND( symbolSize * 0.7 );
1691 case LABEL_FLAG_SHAPE::F_ROUND:
1693 aPoints.emplace_back(
VECTOR2I( 0, 0 ) );
1703 case LABEL_FLAG_SHAPE::F_DIAMOND:
1704 aPoints.emplace_back(
VECTOR2I( 0, 0 ) );
1710 aPoints.emplace_back(
VECTOR2I( 0, 0 ) );
1713 case LABEL_FLAG_SHAPE::F_RECTANGLE:
1714 symbolSize =
KiROUND( symbolSize * 0.8 );
1716 aPoints.emplace_back(
VECTOR2I( 0, 0 ) );
1723 aPoints.emplace_back(
VECTOR2I( 0, 0 ) );
1753 if(
m_shape == LABEL_FLAG_SHAPE::F_DIAMOND ||
m_shape == LABEL_FLAG_SHAPE::F_RECTANGLE )
1757 margin =
KiROUND( margin * 1.5 );
1763 if( field.GetText() == wxEmptyString )
1771 offset = { symbolWidth + margin, origin };
1776 offset = { -origin, -( symbolWidth + margin ) };
1781 offset = { symbolWidth + margin, -origin };
1786 offset = { origin, -( symbolWidth + margin ) };
1793 origin -= field.GetTextHeight() + margin;
1804 return _(
"Directive Label" );
1808 return wxString::Format(
_(
"Directive Label [%s %s]" ),
1844 m_shape = LABEL_FLAG_SHAPE::L_BIDI;
1850 m_fields[0].SetText( wxT(
"${INTERSHEET_REFS}" ) );
1885 case LABEL_FLAG_SHAPE::L_INPUT:
1886 case LABEL_FLAG_SHAPE::L_BIDI:
1887 case LABEL_FLAG_SHAPE::L_TRISTATE:
1891 case LABEL_FLAG_SHAPE::L_OUTPUT:
1892 case LABEL_FLAG_SHAPE::L_UNSPECIFIED:
1918 wxCHECK( aPath,
false );
1925 if( token->IsSameAs( wxT(
"INTERSHEET_REFS" ) ) )
1937 std::vector<int> pageListCopy;
1939 pageListCopy.insert( pageListCopy.end(), it->second.begin(), it->second.end() );
1940 std::sort( pageListCopy.begin(), pageListCopy.end() );
1952 ref.Append( wxString::Format( wxT(
"%s..%s" ),
1953 sheetPages[pageListCopy.front()],
1954 sheetPages[pageListCopy.back()] ) );
1958 for(
const int& pageNo : pageListCopy )
1959 ref.Append( wxString::Format( wxT(
"%s," ), sheetPages[pageNo] ) );
1961 if( !ref.IsEmpty() && ref.Last() ==
',' )
1987 std::vector<VECTOR2I>& aPoints,
1995 int x = symb_len + linewidth + 3;
1996 int y = halfSize + linewidth + 3;
2001 aPoints.emplace_back(
VECTOR2I( 0, 0 ) );
2002 aPoints.emplace_back(
VECTOR2I( 0, -y ) );
2003 aPoints.emplace_back(
VECTOR2I( -x, -y ) );
2004 aPoints.emplace_back(
VECTOR2I( -x, 0 ) );
2005 aPoints.emplace_back(
VECTOR2I( -x, y ) );
2006 aPoints.emplace_back(
VECTOR2I( 0, y ) );
2012 case LABEL_FLAG_SHAPE::L_INPUT:
2013 x_offset = -halfSize;
2014 aPoints[0].x += halfSize;
2017 case LABEL_FLAG_SHAPE::L_OUTPUT:
2018 aPoints[3].x -= halfSize;
2021 case LABEL_FLAG_SHAPE::L_BIDI:
2022 case LABEL_FLAG_SHAPE::L_TRISTATE:
2023 x_offset = -halfSize;
2024 aPoints[0].x += halfSize;
2025 aPoints[3].x -= halfSize;
2028 case LABEL_FLAG_SHAPE::L_UNSPECIFIED:
2036 aPoint.x += x_offset;
2050 aPoints.push_back( aPoints[0] );
2056 return wxString::Format(
_(
"Global Label '%s'" ),
2063 return BITMAPS::add_glabel;
2071 m_shape = LABEL_FLAG_SHAPE::L_INPUT;
2097 std::vector<VECTOR2I>& aPoints,
const VECTOR2I& aPos )
const
2104 std::vector<VECTOR2I>& aPoints,
const VECTOR2I& aPos,
2109 int imax = *Template;
2114 for(
int ii = 0; ii < imax; ii++ )
2117 corner.
x = ( halfSize * (*Template) ) + aPos.
x;
2120 corner.
y = ( halfSize * (*Template) ) + aPos.
y;
2123 aPoints.push_back( corner );
2203 return wxString::Format(
_(
"Hierarchical Label '%s'" ),
2210 return BITMAPS::add_hierarchical_label;
2221 wxSize sz( 320, 320 );
2223 dlg->SetMinSize( dlg->ConvertDialogToPixels( sz ) );
2241 if( labelShapeEnum.Choices().GetCount() == 0 )
2243 labelShapeEnum.Map( LABEL_SHAPE::LABEL_INPUT,
_HKI(
"Input" ) )
2244 .Map( LABEL_SHAPE::LABEL_OUTPUT,
_HKI(
"Output" ) )
2245 .Map( LABEL_SHAPE::LABEL_BIDI,
_HKI(
"Bidirectional" ) )
2246 .Map( LABEL_SHAPE::LABEL_TRISTATE,
_HKI(
"Tri-state" ) )
2247 .Map( LABEL_SHAPE::LABEL_PASSIVE,
_HKI(
"Passive" ) );
2272 auto hasLabelShape =
2283 .SetAvailableFunc( hasLabelShape );
2296 if( flagShapeEnum.Choices().GetCount() == 0 )
2298 flagShapeEnum.Map( FLAG_SHAPE::FLAG_DOT,
_HKI(
"Dot" ) )
2299 .Map( FLAG_SHAPE::FLAG_CIRCLE,
_HKI(
"Circle" ) )
2300 .Map( FLAG_SHAPE::FLAG_DIAMOND,
_HKI(
"Diamond" ) )
2301 .Map( FLAG_SHAPE::FLAG_RECTANGLE,
_HKI(
"Rectangle" ) );
2317 PROPERTY_DISPLAY::PT_SIZE ) );
2324 _HKI(
"Horizontal Justification" ) );
2326 _HKI(
"Vertical Justification" ) );
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 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 * m_parent
Linked list: Link (parent struct)
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(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.
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 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.
void SetMultilineAllowed(bool aAllow)
VECTOR2I GetTextSize() const
void SetHorizJustify(GR_TEXT_H_ALIGN_T aType)
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.
static FONT * GetFont(const wxString &aFontName=wxEmptyString, bool aBold=false, bool aItalic=false, const std::vector< wxString > *aEmbeddedFiles=nullptr, bool aForDrawingSheet=false)
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 wxString & GetDefaultFont() const
const COLOR4D & GetLayerColor(int aLayer) const
Return the color used to draw a layer.
wxDC * GetPrintDC() const
std::string AsStdString() const
Base plotter engine class.
virtual void ThickCircle(const VECTOR2I &pos, int diametre, int width, OUTLINE_MODE tracemode, void *aData)
virtual void FilledCircle(const VECTOR2I &pos, int diametre, OUTLINE_MODE tracemode, 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 PlotPoly(const std::vector< VECTOR2I > &aCornerList, FILL_T aFill, int aWidth=USE_DEFAULT_LINE_WIDTH, void *aData=nullptr)=0
Draw a polygon ( filled or not ).
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 HyperlinkMenu(const BOX2I &aBox, const std::vector< wxString > &aDestURLs)
Create a clickable hyperlink menu with a rectangular click area.
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.
SCH_SHEET_PATH & CurrentSheet() const override
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
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 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 SwapData(SCH_ITEM *aItem) override
Swap the internal data structures aItem with the schematic item.
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.
void AutoplaceFields(SCH_SCREEN *aScreen, bool aManual) override
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 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)
Schematic editor (Eeschema) main window.
Instances are attached to a symbol or sheet and provide a place for the symbol's value,...
wxString GetCanonicalName() const
Get a non-language-specific name for a field which can be used for storage, variable look-up,...
void ViewGetLayers(int aLayers[], int &aCount) const override
Return the layers the item is drawn on (which may be more than its "home" layer)
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.
bool Deserialize(const google::protobuf::Any &aContainer) override
Deserializes the given protobuf message into this object.
const BOX2I GetBodyBoundingBox() const override
Return the bounding box of the label only, without taking in account its fields.
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...
Base class for any item which can be embedded within the SCHEMATIC container class,...
virtual bool IsConnectable() const
SCH_ITEM & operator=(const SCH_ITEM &aPin)
SCHEMATIC * Schematic() const
Searches 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
void ClearFieldsAutoplaced()
FIELDS_AUTOPLACED m_fieldsAutoplaced
bool IsConnectivityDirty() const
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.
int GetEffectivePenWidth(const SCH_RENDER_SETTINGS *aSettings) const
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)
void ViewGetLayers(int aLayers[], int &aCount) const override
Return the layers the item is drawn on (which may be more than its "home" layer)
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.
void Print(const SCH_RENDER_SETTINGS *aSettings, int aUnit, int aBodyStyle, const VECTOR2I &offset, bool aForceNoFill, bool aDimmed) override
Print an item.
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.
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.
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.
void SwapData(SCH_ITEM *aItem) override
Swap the internal data structures aItem with the schematic item.
SPIN_STYLE GetSpinStyle() const
void GetIntersheetRefs(const SCH_SHEET_PATH *aPath, std::vector< std::pair< wxString, wxString > > *pages)
Builds 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
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
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)
setAutoRotateOnPlacement
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, bool aManual) override
void RunOnChildren(const std::function< void(SCH_ITEM *)> &aFunction) override
void GetContextualTextVars(wxArrayString *aVars) const
Return the list of system text vars & fields for this label.
virtual const BOX2I GetBodyBoundingBox() 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.
SCH_LABEL(const VECTOR2I &aPos=VECTOR2I(0, 0), const wxString &aText=wxEmptyString)
const BOX2I GetBodyBoundingBox() const override
Return the bounding box of the label only, without taking in account its fields.
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.
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
Sheet symbol placed in a schematic, and is the entry point for a sub schematic.
bool ResolveTextVar(const SCH_SHEET_PATH *aPath, wxString *token, int aDepth=0) const
Resolve any references to system tokens supported by the sheet.
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.
void SwapData(SCH_ITEM *aItem) override
Swap the internal data structures aItem with the schematic item.
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
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)
#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
void GRCircle(wxDC *aDC, const VECTOR2I &aPos, int aRadius, int aWidth, const COLOR4D &aColor)
void GRLine(wxDC *DC, int x1, int y1, int x2, int y2, int width, const COLOR4D &Color, wxPenStyle aStyle)
void GRPoly(wxDC *DC, int n, const VECTOR2I *Points, bool Fill, int width, const COLOR4D &Color, const COLOR4D &BgColor)
Draw a new polyline and fill it if Fill, in drawing space.
bool GetGRForceBlackPenState(void)
void GRFilledCircle(wxDC *aDC, const VECTOR2I &aPos, int aRadius, int aWidth, const COLOR4D &aStrokeColor, const COLOR4D &aFillColor)
Draw a circle onto the drawing context aDC centered at the user coordinates (x,y).
@ 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.
KICOMMON_API wxString EllipsizeMenuText(const wxString &aString)
Ellipsize text (at the end) to be no more than 36 characters.
void delete_matching(_Container &__c, _Value __value)
Covers for the horrifically named std::remove and std::remove_if (neither of which remove anything).
void PackVector2(kiapi::common::types::Vector2 &aOutput, const VECTOR2I aInput)
VECTOR2I UnpackVector2(const types::Vector2 &aInput)
EDA_ANGLE abs(const EDA_ANGLE &aAngle)
#define ENUM_TO_WXANY(type)
Macro to define read-only fields (no setter method available)
@ NONE
No connection to this item.
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]
bool IncrementLabelMember(wxString &name, int aIncrement)
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)
constexpr int MilsToIU(int mils) const
SCH_DIRECTIVE_LABEL_DESC()
bool m_PDFHierarchicalLinks
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