47#include <api/schematic/schematic_types.pb.h>
53 if( !aPinNumber.StartsWith(
"[" ) || !aPinNumber.EndsWith(
"]" ) )
58 wxString inner = aPinNumber.Mid( 1, aPinNumber.Length() - 2 );
64 for( wxString& part : parts )
65 part.Trim(
true ).Trim(
false );
68 wxString singleLine =
"[";
70 for(
size_t i = 0; i < parts.size(); ++i )
75 singleLine += parts[i];
80 const int minPinTextWidth =
schIUScale.MilsToIU( 50 );
81 const int maxPinTextWidth = std::max( aPinLength, minPinTextWidth );
83 VECTOR2D fontSize( aTextSize, aTextSize );
87 if( textExtents.
x <= maxPinTextWidth )
93 for(
size_t i = 0; i < parts.size(); ++i )
107#define PIN_TEXT_MARGIN 4
152 m_length =
schIUScale.MilsToIU( cfg->m_Defaults.pin_length );
153 m_numTextSize =
schIUScale.MilsToIU( cfg->m_Defaults.pin_num_size );
154 m_nameTextSize =
schIUScale.MilsToIU( cfg->m_Defaults.pin_name_size );
163 int aNameTextSize,
int aNumTextSize,
int aBodyStyle,
const VECTOR2I& aPos,
192 wxASSERT( aParentSymbol );
203 const KIID& aUuid ) :
213 wxASSERT( aParentSymbol );
274 using namespace kiapi::schematic::types;
277 pin.mutable_id()->set_value(
m_Uuid.AsStdString() );
294 SchematicPinAlternate* altProto =
pin.add_alternates();
295 altProto->set_name( alt.m_Name.ToUTF8() );
301 pin.set_active_alternate(
m_alt.ToUTF8() );
303 aContainer.PackFrom(
pin );
310 using namespace kiapi::schematic::types;
314 if( !aContainer.UnpackTo( &
pin ) )
318 m_name = wxString::FromUTF8(
pin.name() );
334 for(
const SchematicPinAlternate& altProto :
pin.alternates() )
337 alt.
m_Name = wxString::FromUTF8( altProto.name() );
340 alts.emplace( alt.
m_Name, alt );
353 return symbol->GetTransform().TransformCoordinate(
m_position ) + symbol->GetPosition();
374 if( !
m_alt.IsEmpty() )
409 if( !
m_alt.IsEmpty() )
442 return ::GetCanonicalElectricalTypeName(
GetType() );
501 if( !
m_alt.IsEmpty() )
525 m_name.Replace( wxT(
" " ), wxT(
"_" ) );
539 m_alt = wxEmptyString;
545 wxFAIL_MSG( wxString::Format( wxS(
"Pin '%s' has no corresponding lib_pin" ),
m_number ) );
546 m_alt = wxEmptyString;
550 if( !
m_libPin->GetAlternates().contains( aAlt ) )
552 wxFAIL_MSG( wxString::Format( wxS(
"Pin '%s' has no alterate '%s'" ),
m_number, aAlt ) );
553 m_alt = wxEmptyString;
587 || isPassiveOrNic( aPin->
GetType() );
590 wxString::Format(
"IsStacked: this='%s/%s' other='%s/%s' sameParent=%d samePos=%d sameName=%d typeCompat=%d",
592 samePos, sameName, typeCompat ) );
594 return sameParent && samePos && sameName && typeCompat;
627 bool isReplaced =
false;
651 aAccuracy = std::max( aAccuracy,
Schematic()->Settings().m_PinSymbolSize / 4 );
678 if( !
m_alt.IsEmpty() )
711 if( valid && !numbers.empty() )
712 return numbers.front();
728 const LIB_ID& aFootprintLibId,
const std::set<wxString>* aFootprintPadNumbers,
738 const LIB_SYMBOL* lib = symbol->GetLibSymbolRef().get();
748 if( assoc.m_FootprintLibId == aFootprintLibId )
762 if(
edit.m_PinNumber == pinNumber )
765 *aState = PAD_RESOLUTION::MAPPED;
767 return edit.m_PadNumber;
774 if( map && map->
HasEntry( pinNumber ) )
777 *aState = PAD_RESOLUTION::MAPPED;
783 if( aFootprintPadNumbers && aFootprintPadNumbers->count( pinNumber ) )
786 *aState = PAD_RESOLUTION::IDENTITY;
793 *aState = aFootprintPadNumbers ? PAD_RESOLUTION::UNMAPPED : PAD_RESOLUTION::IDENTITY;
795 return aFootprintPadNumbers ? wxString() : pinNumber;
804 footprintLibId.
Parse( symbol->GetFootprintFieldText(
true, &aSheet,
false, aVariantName ) );
817 m_number.Replace( wxT(
" " ), wxT(
"_" ) );
857 return m_libPin->GetNumberTextSize();
880 const TRANSFORM& t = symbol->GetTransform();
902 int MapX1, MapY1, x1, y1;
918 color = color.
Mix( bg, 0.5f );
925 x1 = aPosition.
x; y1 = aPosition.
y;
927 switch( aOrientation )
961 aPlotter->
MoveTo(
VECTOR2I( MapX1 * deco_size * 2 + x1, MapY1 * deco_size * 2 + y1 ) );
998 aPlotter->
LineTo(
VECTOR2I( x1 + MapX1 * deco_size * 2, y1 - deco_size * 2 ) );
1004 aPlotter->
LineTo(
VECTOR2I( x1 - deco_size * 2, y1 + MapY1 * deco_size * 2 ) );
1028 y1 - ( MapY1 - MapX1 ) * deco_size ) );
1030 y1 + ( MapY1 - MapX1 ) * deco_size ) );
1032 y1 - ( MapY1 + MapX1 ) * deco_size ) );
1034 y1 + ( MapY1 + MapX1 ) * deco_size ) );
1040 const int ex1 = aPosition.
x;
1041 const int ey1 = aPosition.
y;
1042 aPlotter->
MoveTo(
VECTOR2I( ex1 - deco_size, ey1 - deco_size ) );
1044 aPlotter->
MoveTo(
VECTOR2I( ex1 + deco_size, ey1 - deco_size ) );
1051 int aTextInside,
bool aDrawPinNum,
bool aDrawPinName,
bool aDimmed )
const
1059 if( aDrawPinNum && !number.IsEmpty() )
1066 aDrawPinName =
false;
1069 aDrawPinNum =
false;
1071 if( !aDrawPinNum && !aDrawPinName )
1100 nameColor = nameColor.
Mix( bg, 0.5f );
1101 numColor = numColor.
Mix( bg, 0.5f );
1107 switch( aPinOrient )
1116 auto plotSimpleText =
1118 const wxString& txt,
int size,
int penWidth,
const COLOR4D& col )
1130 auto plotMultiLineWithBraces =
1134 if( !number.StartsWith(
"[" ) || !number.EndsWith(
"]" ) || !number.Contains(
"\n" ) )
1141 wxString content = number.Mid( 1, number.Length() - 2 );
1142 wxArrayString lines;
1145 if( lines.size() <= 1 )
1153 const int lineSpacing =
KiROUND( textSize * 1.3 );
1154 const int numLines = (int) lines.size();
1160 int firstLineCentre;
1165 firstLineCentre = -( 2 * numLines - 1 ) * lineSpacing / 2;
1168 firstLineCentre = lineSpacing / 2;
1171 firstLineCentre = -( numLines - 1 ) * lineSpacing / 2;
1175 firstLineCentre += verticalText ? anchorX : anchorY;
1178 int maxLineWidth = 0;
1180 for(
int i = 0; i < numLines; ++i )
1182 wxString l = lines[i];
1183 l.Trim(
true ).Trim(
false );
1188 maxLineWidth = std::max( maxLineWidth, ext.
x );
1190 int stack = firstLineCentre + i * lineSpacing;
1191 int lx = verticalText ? stack : anchorX;
1192 int ly = verticalText ? anchorY : stack;
1194 textSize, numPenWidth, numColor );
1203 int braceWidth = textSize / 3;
1209 int offset = leftOrTop ? -braceWidth : braceWidth;
1211 if( isVerticalText )
1235 const int braceWidth = textSize / 3;
1236 const int extraHeight = textSize / 3;
1237 const int braceSpacing = maxLineWidth / 2 + braceWidth;
1238 const int blockSpan = ( numLines - 1 ) * lineSpacing;
1242 VECTOR2I braceStart( firstLineCentre - 2 * extraHeight, anchorY );
1243 VECTOR2I braceEnd( firstLineCentre + blockSpan, anchorY );
1245 VECTOR2I topStart = braceStart; topStart.
y -= braceSpacing;
1246 VECTOR2I topEnd = braceEnd; topEnd.
y -= braceSpacing;
1247 VECTOR2I bottomStart = braceStart; bottomStart.
y += braceSpacing;
1248 VECTOR2I bottomEnd = braceEnd; bottomEnd.
y += braceSpacing;
1250 plotBrace( topStart, topEnd,
true,
true );
1251 plotBrace( bottomStart, bottomEnd,
false,
true );
1255 VECTOR2I braceStart( anchorX, firstLineCentre - 2 * extraHeight );
1256 VECTOR2I braceEnd( anchorX, firstLineCentre + blockSpan );
1258 VECTOR2I leftTop = braceStart; leftTop.
x -= braceSpacing;
1259 VECTOR2I leftBot = braceEnd; leftBot.
x -= braceSpacing;
1260 VECTOR2I rightTop = braceStart; rightTop.
x += braceSpacing;
1261 VECTOR2I rightBot = braceEnd; rightBot.
x += braceSpacing;
1263 plotBrace( leftTop, leftBot,
true,
false );
1264 plotBrace( rightTop, rightBot,
false,
false );
1289 plotMultiLineWithBraces( ( x1 + aPinPos.
x ) / 2, y1 - num_offset,
ANGLE_HORIZONTAL,
1305 plotMultiLineWithBraces( x1 - num_offset, ( y1 + aPinPos.
y ) / 2,
ANGLE_VERTICAL,
1319 plotMultiLineWithBraces( x1 - num_offset, ( y1 + aPinPos.
y ) / 2,
ANGLE_VERTICAL,
1329 if( aDrawPinName && aDrawPinNum )
1334 plotMultiLineWithBraces( ( x1 + aPinPos.
x ) / 2, y1 + num_offset,
ANGLE_HORIZONTAL,
1337 else if( aDrawPinName )
1343 else if( aDrawPinNum )
1345 plotMultiLineWithBraces( ( x1 + aPinPos.
x ) / 2, y1 - name_offset,
ANGLE_HORIZONTAL,
1351 if( aDrawPinName && aDrawPinNum )
1353 plotSimpleText( x1 - name_offset, ( y1 + aPinPos.
y ) / 2,
ANGLE_VERTICAL,
1356 plotMultiLineWithBraces( x1 + num_offset, ( y1 + aPinPos.
y ) / 2,
ANGLE_VERTICAL,
1359 else if( aDrawPinName )
1361 plotSimpleText( x1 - name_offset, ( y1 + aPinPos.
y ) / 2,
ANGLE_VERTICAL,
1365 else if( aDrawPinNum )
1367 plotMultiLineWithBraces( x1 - num_offset, ( y1 + aPinPos.
y ) / 2,
ANGLE_VERTICAL,
1421 int lengthChange =
GetLength() - aLength;
1429 offsetX = lengthChange;
1432 offsetX = -1 * lengthChange;
1435 offsetY = -1 * lengthChange;
1438 offsetY = lengthChange;
1532 int aUnit,
int aBodyStyle,
const VECTOR2I& aOffset,
bool aDimmed )
1556 aList.emplace_back(
_(
"Type" ),
_(
"Pin" ) );
1565 aList.emplace_back(
_(
"Visible" ),
IsVisible() ?
_(
"Yes" ) :
_(
"No" ) );
1583 aList.emplace_back( symbol->
GetRef( currentSheet ),
1638 if( it->second.second == aForceNoConnect )
1639 return it->second.first;
1642 wxString
name =
"Net-(";
1643 bool unconnected =
false;
1648 name = (
"unconnected-(" );
1651 bool annotated =
true;
1653 std::vector<const SCH_PIN*> pins = symbol->
GetPins( &aPath );
1654 bool has_multiple =
false;
1662 has_multiple =
true;
1667 wxString libPinShownName =
m_libPin ?
m_libPin->GetShownName() : wxString(
"??" );
1668 wxString libPinShownNumber =
m_libPin ?
m_libPin->GetShownNumber() : wxString(
"??" );
1669 wxString effectivePadNumber =
m_libPin ?
m_libPin->GetSmallestStackedPadNumber() : libPinShownNumber;
1671 if( effectivePadNumber != libPinShownNumber )
1674 wxString::Format(
"GetDefaultNetName: stacked pin shown='%s' -> using smallest logical='%s'",
1675 libPinShownNumber, effectivePadNumber ) );
1679 if( symbol->
GetRef( &aPath,
false ).Last() ==
'?' )
1683 wxString libPinNumber =
m_libPin ?
m_libPin->GetNumber() : wxString(
"??" );
1685 if( effectivePadNumber != libPinShownNumber && !effectivePadNumber.IsEmpty() )
1686 libPinNumber = effectivePadNumber;
1688 name <<
"-Pad" << libPinNumber <<
")";
1691 else if( !libPinShownName.IsEmpty() && ( libPinShownName != libPinShownNumber ) )
1698 if( unconnected || has_multiple )
1736 if( aCache->
m_Font == aFont
1755 bool aIncludeElectricalType )
const
1759 aIncludeNameAndNumber,
1760 aIncludeElectricalType );
1767 m_layoutCache = std::make_unique<PIN_LAYOUT_CACHE>( *
this );
1783 wxCHECK(
pin,
false );
1817 if( parentSymbol->IsLocked() )
1847 if( !
m_alt.IsEmpty() )
1850 alt = &localStorage;
1853 wxString itemDesc =
m_libPin ?
m_libPin->GetItemDescription( aUnitsProvider, alt )
1854 : wxString( wxS(
"Undefined library pin." ) );
1858 return wxString::Format(
"Symbol %s %s",
1875 if ( !
name.IsEmpty() )
1877 return wxString::Format(
_(
"Pin %s [%s, %s, %s]" ),
1885 return wxString::Format(
_(
"Pin %s [%s, %s]" ),
1893 if( !
name.IsEmpty() )
1895 return wxString::Format(
_(
"Hidden pin %s [%s, %s, %s]" ),
1903 return wxString::Format(
_(
"Hidden pin %s [%s, %s]" ),
1963 return static_cast<int>(
m_shape ) -
static_cast<int>( tmp->
m_shape );
1966 return static_cast<int>(
m_type ) -
static_cast<int>( tmp->
m_type );
1985 const ALT& lhsAlt = lhsItem->second;
1986 const ALT& rhsAlt = rhsItem->second;
1994 return static_cast<int>( lhsAlt.
m_Type ) -
static_cast<int>( rhsAlt.
m_Type );
1997 return static_cast<int>( lhsAlt.
m_Shape ) -
static_cast<int>( rhsAlt.
m_Shape );
2070 aStream <<
"SCH_PIN:" << std::endl
2071 <<
" Name: \"" <<
m_name <<
"\"" << std::endl
2072 <<
" Number: \"" <<
m_number <<
"\"" << std::endl
2074 <<
" Length: " <<
GetLength() << std::endl
2087void SCH_PIN::Show(
int nestLevel, std::ostream& os )
const
2089 NestedSpace( nestLevel, os ) <<
'<' <<
GetClass().Lower().mb_str()
2110 if( pinTypeEnum.Choices().GetCount() == 0 )
2128 if( pinShapeEnum.Choices().GetCount() == 0 )
2143 if( orientationEnum.Choices().GetCount() == 0 )
2151 auto isSymbolEditor =
2155 return dynamic_cast<LIB_SYMBOL*
>(
pin->GetParentSymbol() ) !=
nullptr;
types::KiCadObjectType ToProtoEnum(KICAD_T aValue)
KICAD_T FromProtoEnum(types::KiCadObjectType aValue)
constexpr EDA_IU_SCALE schIUScale
BITMAPS
A list of all bitmap identifiers.
constexpr BOX2I KiROUND(const BOX2D &aBoxD)
constexpr BOX2< Vec > & Inflate(coord_type dx, coord_type dy)
Inflates the rectangle horizontally by dx and vertically by dy.
constexpr bool Contains(const Vec &aPoint) const
constexpr bool Intersects(const BOX2< Vec > &aRect) const
static const COLOR4D WHITE
static const COLOR4D UNSPECIFIED
For legacy support; used as a value to indicate color hasn't been set yet.
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.
EDA_ITEM * GetParent() const
EDA_ITEM * m_parent
Owner.
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...
EDA_ITEM(EDA_ITEM *parent, KICAD_T idType, bool isSCH_ITEM=false, bool isBOARD_ITEM=false)
static ENUM_MAP< T > & Instance()
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)
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).
A color representation with 4 components: red, green, blue, alpha.
std::shared_ptr< wxString > m_text
COLOR4D & Desaturate()
Removes color (in HSL model)
COLOR4D Mix(const COLOR4D &aColor, double aFactor) const
Return a color that is mixed with the input by a factor.
Container for all the knowledge about how graphical objects are drawn on any output surface/device.
int GetDefaultPenWidth() const
const wxString & GetDefaultFont() const
const COLOR4D & GetLayerColor(int aLayer) const
Return the color used to draw a layer.
virtual const COLOR4D & GetBackgroundColor() const =0
Return current background color settings.
wxString AsString() const
A logical library item identifier and consists of various portions much like a URI.
int Parse(const UTF8 &aId, bool aFix=false)
Parse LIB_ID with the information from aId.
Define a library symbol object.
const std::vector< ASSOCIATED_FOOTPRINT > & GetEffectiveAssociatedFootprints() const
const PIN_MAP_SET & GetEffectivePinMaps() const
A pin layout helper is a class that manages the layout of the parts of a pin on a schematic symbol:
BOX2I GetPinBoundingBox(bool aIncludeLabelsOnInvisiblePins, bool aIncludeNameAndNumber, bool aIncludeElectricalType)
Get the bounding box of the pin itself.
const PIN_MAP * FindByName(const wxString &aName) const
const wxString & GetPadNumber(const wxString &aPinNumber) const
bool HasEntry(const wxString &aPinNumber) const
Base plotter engine class.
virtual void Circle(const VECTOR2I &pos, int diametre, FILL_T fill, int width)=0
void MoveTo(const VECTOR2I &pos)
void FinishTo(const VECTOR2I &pos)
RENDER_SETTINGS * RenderSettings()
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 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.
PROPERTY_BASE & SetWriteableFunc(std::function< bool(INSPECTABLE *)> aFunc)
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.
Each graphical item can have a SCH_CONNECTION describing its logical connection (to a bus or net).
wxString GetNetName() const
void AppendInfoToMsgPanel(std::vector< MSG_PANEL_ITEM > &aList) const
Adds information about the connection object to aList.
Schematic editor (Eeschema) main window.
SCH_SHEET_PATH & GetCurrentSheet() const
virtual const wxString & GetText() const override
Return the string associated with the text object.
Base class for any item which can be embedded within the SCHEMATIC container class,...
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.
SCH_ITEM & operator=(const SCH_ITEM &aPin)
SCH_RENDER_SETTINGS * getRenderSettings(PLOTTER *aPlotter) const
const SYMBOL * GetParentSymbol() const
SCHEMATIC * Schematic() const
Search the item hierarchy to find a SCHEMATIC.
bool IsLocked() const override
virtual int compare(const SCH_ITEM &aOther, int aCompareFlags=0) const
Provide the draw object specific comparison called by the == and < operators.
bool IsConnectivityDirty() const
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.
wxString ResolveText(const wxString &aText, const SCH_SHEET_PATH *aPath, int aDepth=0) const
const KIFONT::METRICS & GetFontMetrics() const
int GetEffectivePenWidth(const SCH_RENDER_SETTINGS *aSettings) const
double SimilarityBase(const SCH_ITEM &aItem) const
Calculate the boilerplate similarity for all LIB_ITEMs without preventing the use above of a pure vir...
void Rotate(const VECTOR2I &aCenter, bool aRotateCCW=true) override
Rotate the item around aCenter 90 degrees in the clockwise direction.
std::ostream & operator<<(std::ostream &aStream)
void SetAlt(const wxString &aAlt)
Set the name of the alternate pin.
void PlotPinTexts(PLOTTER *aPlotter, const VECTOR2I &aPinPos, PIN_ORIENTATION aPinOrient, int aTextInside, bool aDrawPinNum, bool aDrawPinName, bool aDimmed) const
Plot the pin name and number.
int GetNumberTextSize() const
std::optional< bool > m_hidden
bool Matches(const EDA_SEARCH_DATA &aSearchData, void *aAuxData) const override
Compare the item against the search criteria in aSearchData.
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.
std::unique_ptr< PIN_LAYOUT_CACHE > m_layoutCache
The layout cache for this pin.
void MirrorVerticallyPin(int aCenter)
void validateExtentsCache(KIFONT::FONT *aFont, int aSize, const wxString &aText, EXTENTS_CACHE *aCache) const
const BOX2I ViewBBox() const override
Return the bounding box of the item covering all its layers.
std::vector< int > ViewGetLayers() const override
Return the layers the item is drawn on (which may be more than its "home" layer)
const std::map< wxString, ALT > & GetAlternates() const
void CalcEdit(const VECTOR2I &aPosition) override
Calculate the attributes of an item at aPosition when it is being edited.
void SetNumber(const wxString &aNumber)
std::optional< int > m_nameTextSize
PIN_ORIENTATION PinDrawOrient(const TRANSFORM &aTransform) const
Return the pin real orientation (PIN_UP, PIN_DOWN, PIN_RIGHT, PIN_LEFT), according to its orientation...
void SetVisible(bool aVisible)
void ChangeLength(int aLength)
Change the length of a pin and adjust its position based on orientation.
bool HasConnectivityChanges(const SCH_ITEM *aItem, const SCH_SHEET_PATH *aInstance=nullptr) const override
Check if aItem has connectivity changes against this object.
SCH_PIN & operator=(const SCH_PIN &aPin)
std::optional< wxString > GetSmallestLogicalNumber() const
Return the smallest logical pin number if this pin uses stacked notation and it is valid.
void Move(const VECTOR2I &aOffset) override
Move the item by aMoveVector to a new position.
std::map< const SCH_SHEET_PATH, std::pair< wxString, bool > > m_net_name_map
PIN_ORIENTATION m_orientation
void SetOrientation(PIN_ORIENTATION aOrientation)
void SetName(const wxString &aName)
bool IsGlobalPower() const
Return whether this pin forms a global power connection: i.e., is part of a power symbol and of type ...
wxString getItemDescription(ALT *aAlt) const
bool ConnectionPropagatesTo(const EDA_ITEM *aItem) const override
Return true if this item should propagate connection info to aItem.
bool IsLocked() const override
std::optional< int > m_numTextSize
VECTOR2I GetPinRoot() const
bool IsLocalPower() const
Local power pin is the same except that it is sheet-local and it does not support the legacy hidden p...
ELECTRICAL_PINTYPE m_type
PAD_RESOLUTION
Outcome of pin-to-pad resolution (issue #2282).
void MirrorVertically(int aCenter) override
Mirror item vertically about aCenter.
SCH_PIN * GetLibPin() const
void SetPosition(const VECTOR2I &aPos) override
double Similarity(const SCH_ITEM &aOther) const override
Return a measure of how likely the other object is to represent the same object.
void SetIsDangling(bool aIsDangling)
wxString GetElectricalTypeName() const
std::vector< wxString > GetStackedPinNumbers(bool *aValid=nullptr) const
std::map< wxString, ALT > m_alternates
const wxString & GetName() const
int GetStackedPinCount(bool *aValid=nullptr) const
Return the count of logical pins represented by this pin's stacked notation.
void SetLength(int aLength)
bool IsDangling() const override
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 MirrorHorizontally(int aCenter) override
These transforms have effect only if the pin has a LIB_SYMBOL as parent.
std::recursive_mutex m_netmap_mutex
The name that this pin connection will drive onto a net.
PIN_ORIENTATION GetOrientation() const
wxString GetClass() const override
Return the class name.
void SetNumberTextSize(int aSize)
void SetShape(GRAPHIC_PINSHAPE aShape)
void RotatePin(const VECTOR2I &aCenter, bool aRotateCCW=true)
VECTOR2I GetPosition() const override
wxString GetCanonicalElectricalTypeName() const
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 ...
int GetNameTextSize() const
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.
int compare(const SCH_ITEM &aOther, int aCompareFlags=0) const override
The pin specific sort order is as follows:
const wxString & GetShownName() const
void MirrorHorizontallyPin(int aCenter)
These transforms have always effects.
bool HitTest(const VECTOR2I &aPosition, int aAccuracy=0) const override
Test if aPosition is inside or on the boundary of this item.
PIN_LAYOUT_CACHE & GetLayoutCache() const
Get the layout cache associated with this pin.
void SetType(ELECTRICAL_PINTYPE aType)
const wxString & GetBaseName() const
Get the name without any alternates.
void ClearDefaultNetName(const SCH_SHEET_PATH *aPath)
SCH_PIN(LIB_SYMBOL *aParentSymbol)
wxString GetEffectivePadNumber(const SCH_SHEET_PATH &aSheet, const wxString &aVariantName, const LIB_ID &aFootprintLibId, const std::set< wxString > *aFootprintPadNumbers, PAD_RESOLUTION *aState=nullptr) const
Resolve the footprint pad number this symbol pin lands on (issue #2282).
const wxString & GetShownNumber() const
bool IsStacked(const SCH_PIN *aPin) const
const wxString & GetNumber() const
EDA_ITEM * Clone() const override
Create a duplicate of this item with linked list members set to NULL.
const BOX2I GetBoundingBox() const override
Return the orthogonal bounding box of this object for display purposes.
void Serialize(google::protobuf::Any &aContainer) const override
Serializes this object to the given Any message.
wxString GetSmallestStackedPadNumber() const
Return the pin number to be used for deterministic operations such as auto‑generated net names.
wxString GetDefaultNetName(const SCH_SHEET_PATH &aPath, bool aForceNoConnect=false)
std::optional< int > m_length
GRAPHIC_PINSHAPE GetShape() const
void PlotPinType(PLOTTER *aPlotter, const VECTOR2I &aPosition, PIN_ORIENTATION aOrientation, bool aDimmed) const
bool IsPower() const
Check if the pin is either a global or local power pin.
ELECTRICAL_PINTYPE GetType() const
BITMAPS GetMenuImage() const override
Return a pointer to an image to be used in menus.
void SetNameTextSize(int aSize)
VECTOR2I TransformCoordinate(const VECTOR2I &aPoint) const
const KIGFX::COLOR4D & GetBackgroundColor() const override
Return current background color settings.
Handle access to a stack of flattened SCH_SHEET objects by way of a path for creating a flattened sch...
std::vector< const SCH_PIN * > GetPins(const SCH_SHEET_PATH *aSheet) const
Retrieve a list of the SCH_PINs for the given sheet path.
const wxString GetValue(bool aResolve, const SCH_SHEET_PATH *aPath, bool aAllowExtraText, const wxString &aVariantName=wxEmptyString) const override
const wxString GetRef(const SCH_SHEET_PATH *aSheet, bool aIncludeUnit=false) const override
SCH_FIELD * GetField(FIELD_T aFieldType)
Return a mandatory field in this symbol.
A base class for LIB_SYMBOL and SCH_SYMBOL.
virtual bool IsGlobalPower() const =0
virtual bool IsLocalPower() const =0
virtual const wxString GetRef(const SCH_SHEET_PATH *aSheet, bool aIncludeUnit=false) const =0
int GetPinNameOffset() const
virtual bool GetShowPinNames() const
virtual bool GetShowPinNumbers() const
GR_TEXT_H_ALIGN_T m_Halign
GR_TEXT_V_ALIGN_T m_Valign
wxString MessageTextFromValue(double aValue, bool aAddUnitLabel=true, EDA_DATA_TYPE aType=EDA_DATA_TYPE::DISTANCE) const
A lower-precision version of StringFromValue().
#define DEFAULT_PINNUM_SIZE
The default pin name size when creating pins(can be changed in preference menu)
#define DEFAULT_PINNAME_SIZE
The default selection highlight thickness (can be changed in preference menu)
#define DEFAULT_PIN_LENGTH
The default pin number size when creating pins(can be changed in preference menu)
static constexpr EDA_ANGLE ANGLE_90
static constexpr EDA_ANGLE ANGLE_VERTICAL
static constexpr EDA_ANGLE ANGLE_HORIZONTAL
#define STRUCT_DELETED
flag indication structures to be erased
#define SKIP_STRUCT
flag indicating that the structure should be ignored
#define SHOW_ELEC_TYPE
Show pin electrical type.
int GetPenSizeForNormal(int aTextSize)
const wxChar *const traceStackedPins
Flag to enable debug output for stacked pins handling in symbol/pin code.
@ LAYER_SELECTION_SHADOWS
KICOMMON_API int UnpackDistance(const types::Distance &aInput, const EDA_IU_SCALE &aScale)
KICOMMON_API VECTOR2I UnpackVector2(const types::Vector2 &aInput, const EDA_IU_SCALE &aScale)
KICOMMON_API void PackDistance(types::Distance &aOutput, int aInput, const EDA_IU_SCALE &aScale)
KICOMMON_API void PackVector2(types::Vector2 &aOutput, const VECTOR2I &aInput, const EDA_IU_SCALE &aScale)
static int externalPinDecoSize(const SCHEMATIC_SETTINGS *aSettings, const SCH_PIN &aPin)
static int internalPinDecoSize(const SCHEMATIC_SETTINGS *aSettings, const SCH_PIN &aPin)
wxString FormatStackedPinForDisplay(const wxString &aPinNumber, int aPinLength, int aTextSize, KIFONT::FONT *aFont, const KIFONT::METRICS &aFontMetrics)
wxString PinShapeGetText(GRAPHIC_PINSHAPE shape)
ELECTRICAL_PINTYPE
The symbol library pin object electrical types used in ERC tests.
@ PT_INPUT
usual pin input: must be connected
@ PT_NC
not connected (must be left open)
@ PT_TRISTATE
tri state bus pin
@ PT_NIC
not internally connected (may be connected to anything)
@ PT_BIDI
input or output (like port for a microprocessor)
@ PT_OPENEMITTER
pin type open emitter
@ PT_POWER_OUT
output of a regulator: intended to be connected to power input pins
@ PT_OPENCOLLECTOR
pin type open collector
@ PT_POWER_IN
power input (GND, VCC for ICs). Must be connected to a power output.
@ PT_UNSPECIFIED
unknown electrical properties: creates always a warning when connected
@ PT_PASSIVE
pin for passive symbols: must be connected, and can be connected to any pin.
BITMAPS ElectricalPinTypeGetBitmap(ELECTRICAL_PINTYPE)
wxString ElectricalPinTypeGetText(ELECTRICAL_PINTYPE)
wxString PinOrientationName(PIN_ORIENTATION aOrientation)
PIN_ORIENTATION
The symbol library pin object orientations.
@ PIN_UP
The pin extends upwards from the connection point: Probably on the bottom side of the symbol.
@ PIN_RIGHT
The pin extends rightwards from the connection point.
@ PIN_LEFT
The pin extends leftwards from the connection point: Probably on the right side of the symbol.
@ PIN_DOWN
The pin extends downwards from the connection: Probably on the top side of the symbol.
#define ENUM_TO_WXANY(type)
Macro to define read-only fields (no setter method available)
@ PT_COORD
Coordinate expressed in distance units (mm/inch)
@ PT_SIZE
Size expressed in distance units (mm/inch)
wxString FormatStackedPinForDisplay(const wxString &aPinNumber, int aPinLength, int aTextSize, KIFONT::FONT *aFont, const KIFONT::METRICS &aFontMetrics)
static int externalPinDecoSize(const RENDER_SETTINGS *aSettings, const SCH_PIN &aPin)
Utility for getting the size of the 'external' pin decorators (as a radius) i.e.
static int internalPinDecoSize(const RENDER_SETTINGS *aSettings, const SCH_PIN &aPin)
Utility for getting the size of the 'internal' pin decorators (as a radius) i.e.
static struct SCH_PIN_DESC _SCH_PIN_DESC
#define TARGET_PIN_RADIUS
Definition of the SCH_SHEET_PATH and SCH_SHEET_LIST classes for Eeschema.
T * GetAppSettings(const char *aFilename)
int StrNumCmp(const wxString &aString1, const wxString &aString2, bool aIgnoreCase)
Compare two strings with alphanumerical content.
std::vector< wxString > ExpandStackedPinNotation(const wxString &aPinName, bool *aValid)
Expand stacked pin notation like [1,2,3], [1-4], [A1-A4], or [AA1-AA3,AB4,CD12-CD14] into individual ...
wxString UnescapeString(const wxString &aSource)
void wxStringSplit(const wxString &aText, wxArrayString &aStrings, wxChar aSplitter)
Split aString to a string list separated at aSplitter.
std::vector< wxString > SplitStackedPinDisplayItems(const wxString &aInner)
Split the inner part of a stacked notation string (the text between the brackets) into its individual...
wxString EscapeString(const wxString &aSource, ESCAPE_CONTEXT aContext)
The Escape/Unescape routines use HTML-entity-reference-style encoding to handle characters which are:...
int CountStackedPinNotation(const wxString &aPinName, bool *aValid)
Count the number of pins represented by stacked pin notation.
One symbol-pin to footprint-pad mapping inside a PIN_MAP.
Per-instance override of the active pin map and a sparse delta on top.
std::vector< PIN_MAP_ENTRY > m_Edits
PIN_MAP_OVERRIDE_MODE m_Mode
ELECTRICAL_PINTYPE m_Type
@ REFERENCE
Field Reference of part, i.e. "IC21".
@ VALUE
Field Value of part, i.e. "3.3K".
KIBIS top(path, &reporter)
wxString result
Test unit parsing edge cases and error handling.
GR_TEXT_H_ALIGN_T
This is API surface mapped to common.types.HorizontalAlignment.
GR_TEXT_V_ALIGN_T
This is API surface mapped to common.types.VertialAlignment.
wxLogTrace helper definitions.
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.
VECTOR2< int32_t > VECTOR2I
VECTOR2< double > VECTOR2D