40#include <unordered_set>
44 std::vector<SEARCH_TERM> terms;
50 wxStringTokenizer keywordTokenizer(
GetKeyWords(),
" \t\r\n", wxTOKEN_STRTOK );
52 while( keywordTokenizer.HasMoreTokens() )
53 terms.emplace_back(
SEARCH_TERM( keywordTokenizer.GetNextToken(), 4 ) );
61 if( !footprint.IsEmpty() )
75 aColumnMap[field->
GetName()] = field->EDA_TEXT::GetShownText(
false );
108 [&](
FIELD_T id,
bool visible )
169 wxFAIL_MSG(
"Failed to clone SCH_ITEM." );
183 if( &aSymbol ==
this )
302 return aLabel ?
_(
"Alternate" ) : wxString(
_HKI(
"Alternate" ) );
304 return aLabel ?
_(
"Standard" ) : wxString(
_HKI(
"Standard" ) );
319 m_libId.SetLibItemName( aName );
334 std::unique_ptr< LIB_SYMBOL > retv;
340 wxCHECK_MSG( parent, retv,
341 wxString::Format(
"Parent of derived symbol '%s' undefined",
m_name ) );
347 retv = std::make_unique<LIB_SYMBOL>( *parent.get() );
395 retv = std::make_unique<LIB_SYMBOL>( *
this );
407 return m_libId.GetLibNickname();
413 std::shared_ptr<LIB_SYMBOL> parent;
417 if( parent->IsRoot() )
420 return parent->IsLocalPower();
431 if( parent->IsRoot() )
434 parent->SetLocalPower();
443 std::shared_ptr<LIB_SYMBOL> parent;
447 if( parent->IsRoot() )
450 return parent->IsGlobalPower();
467 if( parent->IsRoot() )
470 parent->SetGlobalPower();
481 if( parent->IsRoot() )
484 return parent->IsNormal();
495 if( parent->IsRoot() )
515 u = ( aUnit - 1 ) % 26;
516 suffix = wxChar( aInitialLetter + u ) + suffix;
517 aUnit = ( aUnit - u ) / 26;
518 }
while( aUnit > 0 );
535 footprint = field.
GetShownText(
nullptr,
false, aDepth + 1 );
538 || token->IsSameAs( field.
GetName(),
false ) )
540 *token = field.
GetShownText(
nullptr,
false, aDepth + 1 );
547 if( token->IsSameAs( wxT(
"SIM.DEVICE" ) )
548 || token->IsSameAs( wxT(
"SIM.TYPE" ) )
549 || token->IsSameAs( wxT(
"SIM.PINS" ) )
550 || token->IsSameAs( wxT(
"SIM.PARAMS" ) )
551 || token->IsSameAs( wxT(
"SIM.LIBRARY" ) )
552 || token->IsSameAs( wxT(
"SIM.NAME" ) ) )
554 *token = wxEmptyString;
558 if( token->IsSameAs( wxT(
"FOOTPRINT_LIBRARY" ) ) )
560 wxArrayString parts = wxSplit( footprint,
':' );
562 if( parts.Count() > 0 )
565 *token = wxEmptyString;
569 else if( token->IsSameAs( wxT(
"FOOTPRINT_NAME" ) ) )
571 wxArrayString parts = wxSplit( footprint,
':' );
573 if( parts.Count() > 1 )
574 *token = parts[ std::min( 1, (
int) parts.size() - 1 ) ];
576 *token = wxEmptyString;
580 else if( token->IsSameAs( wxT(
"SYMBOL_LIBRARY" ) ) )
582 *token =
m_libId.GetUniStringLibNickname();
585 else if( token->IsSameAs( wxT(
"SYMBOL_NAME" ) ) )
587 *token =
m_libId.GetUniStringLibItemName();
590 else if( token->IsSameAs( wxT(
"SYMBOL_DESCRIPTION" ) ) )
595 else if( token->IsSameAs( wxT(
"SYMBOL_KEYWORDS" ) ) )
600 else if( token->IsSameAs( wxT(
"EXCLUDE_FROM_BOM" ) ) )
605 else if( token->IsSameAs( wxT(
"EXCLUDE_FROM_BOARD" ) ) )
610 else if( token->IsSameAs( wxT(
"EXCLUDE_FROM_SIM" ) ) )
615 else if( token->IsSameAs( wxT(
"DNP" ) ) )
617 *token = this->
GetDNP() ?
_(
"DNP" ) : wxString(
"" );
626 int aUnit,
int aBodyStyle,
const VECTOR2I &aOffset,
bool aDimmed )
628 wxASSERT( aPlotter !=
nullptr );
648 if( item.IsPrivate() )
656 if( aUnit && item.m_unit && ( item.m_unit != aUnit ) )
659 if( aBodyStyle && item.m_bodyStyle && ( item.m_bodyStyle != aBodyStyle ) )
662 item.Plot( aPlotter, aBackground, aPlotOpts, aUnit, aBodyStyle, aOffset, aDimmed );
668 int aUnit,
int aBodyStyle,
const VECTOR2I& aOffset,
bool aDimmed )
670 wxASSERT( aPlotter !=
nullptr );
696 wxString tmp = field.
GetText();
699 item.Plot( aPlotter, aBackground, aPlotOpts, aUnit, aBodyStyle, aOffset, aDimmed );
708 std::vector<SCH_SHAPE*> potential_top_items;
709 std::vector<SCH_ITEM*> bottom_items;
718 potential_top_items.push_back( &shape );
720 bottom_items.push_back( &item );
724 bottom_items.push_back( &item );
728 std::sort( potential_top_items.begin(), potential_top_items.end(),
731 return a->GetBoundingBox().GetArea() > b->GetBoundingBox().GetArea();
734 for(
SCH_SHAPE* item : potential_top_items )
736 for(
SCH_ITEM* bottom_item : bottom_items )
738 if( item->GetBoundingBox().Contains( bottom_item->GetBoundingBox() ) )
750 wxASSERT( aItem !=
nullptr );
756 if(
static_cast<SCH_FIELD*
>( aItem )->IsMandatory() )
762 for( LIB_ITEMS::iterator i = items.begin(); i != items.end(); i++ )
789 std::vector<SCH_PIN*> pins;
804 if( aUnit && item.m_unit && ( item.m_unit != aUnit ) )
808 if( aBodyStyle && item.m_bodyStyle && ( item.m_bodyStyle != aBodyStyle ) )
813 wxLogTrace(
"KICAD_STACKED_PINS",
814 wxString::Format(
"GetGraphicalPins: lib='%s' unit=%d body=%d -> include pin name='%s' number='%s' shownNum='%s'",
816 pin->GetName(),
pin->GetNumber(),
pin->GetShownNumber() ) );
817 pins.push_back(
pin );
826 std::vector<UNIT_PIN_INFO> units;
833 VECTOR2I positionB = b->GetPosition();
835 if( positionA.
x != positionB.
x )
836 return positionA.
x < positionB.
x;
838 return positionA.
y < positionB.
y;
841 for(
int unitIdx = 1; unitIdx <= unitCount; ++unitIdx )
848 std::sort( pinList.begin(), pinList.end(), compareByPosition );
850 std::unordered_set<wxString> seenNumbers;
852 for(
SCH_PIN* basePin : pinList )
854 bool stackedValid =
false;
855 std::vector<wxString> expandedNumbers = basePin->GetStackedPinNumbers( &stackedValid );
857 if( stackedValid && !expandedNumbers.empty() )
859 for(
const wxString& number : expandedNumbers )
861 if( seenNumbers.insert( number ).second )
868 const wxString& number = basePin->GetNumber();
870 if( !number.IsEmpty() && seenNumbers.insert( number ).second )
874 units.push_back( std::move( unitInfo ) );
883 std::vector<LOGICAL_PIN> out;
888 std::vector<wxString> expanded =
pin->GetStackedPinNumbers( &valid );
890 if( valid && !expanded.empty() )
892 for(
const wxString& num : expanded )
895 wxLogTrace(
"KICAD_STACKED_PINS",
896 wxString::Format(
"GetLogicalPins: base='%s' -> '%s'",
897 pin->GetShownNumber(), num ) );
903 wxLogTrace(
"KICAD_STACKED_PINS",
904 wxString::Format(
"GetLogicalPins: base='%s' (no expansion)",
905 pin->GetShownNumber() ) );
920 std::vector<wxString> numbers =
pin->GetStackedPinNumbers( &valid );
921 wxLogTrace(
"CVPCB_PINCOUNT",
922 wxString::Format(
"LIB_SYMBOL::GetPinCount lib='%s' pin base='%s' shown='%s' valid=%d +%zu",
924 pin->GetShownNumber(), valid, numbers.size() ) );
925 count += numbers.size();
928 wxLogTrace(
"CVPCB_PINCOUNT",
929 wxString::Format(
"LIB_SYMBOL::GetPinCount total for lib='%s' => %d",
939 if( aNumber ==
pin->GetNumber() )
948 bool aTestType,
bool aTestOrientation,
bool aTestLength )
const
953 bool foundMatch =
false;
957 wxASSERT( otherPin );
960 if(
pin->GetUnit() != otherPin->GetUnit() )
964 if(
pin->GetBodyStyle() != otherPin->GetBodyStyle() )
968 if(
pin->GetPosition() != otherPin->GetPosition() )
972 if( aTestNums && (
pin->GetNumber() != otherPin->GetNumber() ) )
976 if( aTestNames && (
pin->GetName() != otherPin->GetName() ) )
980 if( aTestType && (
pin->GetType() != otherPin->GetType() ) )
985 && (
pin->GetOrientation() != otherPin->GetOrientation() ) )
989 if( aTestLength && (
pin->GetLength() != otherPin->GetLength() ) )
1016 bool aIgnoreHiddenFields,
1017 bool aIgnoreLabelsOnInvisiblePins )
const
1023 if( item.m_unit > 0 &&
m_unitCount > 1 && aUnit > 0 && aUnit != item.m_unit )
1026 if( item.m_bodyStyle > 0 && aBodyStyle > 0 && aBodyStyle != item.m_bodyStyle )
1029 if( aIgnoreHiddenFields && item.Type() ==
SCH_FIELD_T )
1031 if( !
static_cast<const SCH_FIELD&
>( item ).IsVisible() )
1035 if( item.Type() ==
SCH_PIN_T && !aIgnoreLabelsOnInvisiblePins )
1038 bBox.
Merge(
pin.GetBoundingBox(
true,
true,
false ) );
1041 bBox.
Merge( item.GetBoundingBox() );
1049 bool aIncludePrivateItems )
const
1055 if( item.m_unit > 0 && aUnit > 0 && aUnit != item.m_unit )
1058 if( item.m_bodyStyle > 0 && aBodyStyle > 0 && aBodyStyle != item.m_bodyStyle )
1061 if( item.IsPrivate() && !aIncludePrivateItems )
1071 if(
pin.IsVisible() )
1077 bbox.
Merge(
pin.GetBoundingBox(
false,
false,
false ) );
1084 bbox.
Merge( item.GetBoundingBox() );
1108 for(
const SCH_FIELD& src : aFieldsList )
1133 aList.push_back(
const_cast<SCH_FIELD*
>( field ) );
1136 std::sort( aList.begin(), aList.end(),
1139 return lhs->GetOrdinal() < rhs->GetOrdinal();
1146 std::vector<SCH_FIELD*> orderedFields;
1151 aList.emplace_back( *field );
1160 ordinal = std::max( ordinal,
static_cast<const SCH_FIELD*
>( &item )->GetOrdinal() + 1 );
1172 if( field->
GetId() == aFieldType )
1186 if( field->
GetId() == aFieldType )
1200 if( field.
GetName() == aFieldName )
1214 if( field.
GetName() == aFieldName )
1239 wxASSERT( field !=
nullptr );
1247 wxASSERT( field !=
nullptr );
1255 wxASSERT( field !=
nullptr );
1263 wxASSERT( field !=
nullptr );
1271 wxASSERT( field !=
nullptr );
1280 refDesignator.Replace( wxS(
"~" ), wxS(
" " ) );
1282 wxString prefix = refDesignator;
1284 while( prefix.Length() )
1286 wxUniCharRef last = prefix.Last();
1288 if( ( last >=
'0' && last <=
'9' ) || last ==
'?' || last ==
'*' )
1289 prefix.RemoveLast();
1295 prefix.Trim(
true );
1296 prefix.Trim(
false );
1312 item.Move( aOffset );
1330 for(
const SCH_ITEM& item : parent->GetDrawItems() )
1343 int maxPinNumber = 0;
1350 long currentPinNumber = 0;
1352 if(
pin->GetNumber().ToLong( ¤tPinNumber ) )
1353 maxPinNumber = std::max( maxPinNumber, (
int) currentPinNumber );
1356 return maxPinNumber;
1365 item.ClearTempFlags();
1374 item.ClearEditFlags();
1383 if( ( aUnit && item.m_unit && aUnit != item.m_unit )
1384 || ( aBodyStyle && item.m_bodyStyle && aBodyStyle != item.m_bodyStyle )
1390 if( item.HitTest( aPoint ) )
1419 const std::vector<KICAD_T>& aScanTypes )
1424 if( item.IsType( aScanTypes ) )
1449 if( it->m_unit > aCount )
1456 else if( aDuplicateDrawItems )
1463 std::vector<SCH_ITEM*> tmp;
1467 if( item.m_unit != 1 )
1470 for(
int j = prevCount + 1; j <= aCount; j++ )
1474 tmp.push_back( newItem );
1490 return parent->GetUnitCount();
1504 if( aDuplicateDrawItems || aDuplicatePins )
1506 std::vector<SCH_ITEM*> tmp;
1510 if( item.Type() !=
SCH_PIN_T && !aDuplicateDrawItems )
1513 if( item.m_bodyStyle == 1 )
1517 tmp.push_back( newItem );
1533 if( i->m_bodyStyle > 1 )
1546 std::vector<SCH_ITEM*> unitItems;
1553 if( ( aBodyStyle == -1 && item.GetUnit() == aUnit )
1554 || ( aUnit == -1 && item.GetBodyStyle() == aBodyStyle )
1555 || ( aUnit == item.GetUnit() && aBodyStyle == item.GetBodyStyle() ) )
1557 unitItems.push_back( &item );
1567 std::vector<LIB_SYMBOL_UNIT> units;
1574 int unit = item.GetUnit();
1575 int bodyStyle = item.GetBodyStyle();
1577 auto it = std::find_if( units.begin(), units.end(),
1580 return a.m_unit == unit && a.m_bodyStyle == bodyStyle;
1583 if( it == units.end() )
1586 newUnit.
m_unit = item.GetUnit();
1588 newUnit.
m_items.push_back( &item );
1589 units.emplace_back( newUnit );
1593 it->m_items.push_back( &item );
1603#define REPORT( msg ) { if( aReporter ) aReporter->Report( msg ); }
1604#define ITEM_DESC( item ) ( item )->GetItemDescription( &unitsProvider, false )
1633 REPORT(
_(
"Power flag differs." ) );
1642 REPORT(
_(
"Unit count differs." ) );
1650 std::set<const SCH_ITEM*, SCH_ITEM::cmp_items> aShapes;
1651 std::set<const SCH_FIELD*> aFields;
1652 std::set<const SCH_PIN*> aPins;
1657 aShapes.insert( &(*it) );
1659 aFields.insert(
static_cast<const SCH_FIELD*
>( &(*it) ) );
1661 aPins.insert(
static_cast<const SCH_PIN*
>( &(*it) ) );
1664 std::set<const SCH_ITEM*, SCH_ITEM::cmp_items> bShapes;
1665 std::set<const SCH_FIELD*> bFields;
1666 std::set<const SCH_PIN*> bPins;
1671 bShapes.insert( &(*it) );
1673 bFields.insert(
static_cast<const SCH_FIELD*
>( &(*it) ) );
1675 bPins.insert(
static_cast<const SCH_PIN*
>( &(*it) ) );
1678 if(
int tmp =
static_cast<int>( aShapes.size() - bShapes.size() ) )
1681 REPORT(
_(
"Graphic item count differs." ) );
1688 for(
auto aIt = aShapes.begin(), bIt = bShapes.begin(); aIt != aShapes.end(); aIt++, bIt++ )
1690 if(
int tmp2 = (*aIt)->compare( *(*bIt), aCompareFlags ) )
1693 REPORT( wxString::Format(
_(
"Graphic item differs: %s; %s." ),
1703 for(
const SCH_PIN* aPin : aPins )
1705 const SCH_PIN* bPin = aRhs.
GetPin( aPin->GetNumber(), aPin->GetUnit(), aPin->GetBodyStyle() );
1710 REPORT( wxString::Format(
_(
"Extra pin in schematic symbol: %s." ),
ITEM_DESC( aPin ) ) );
1715 else if(
int tmp = aPin->SCH_ITEM::compare( *bPin, aCompareFlags ) )
1718 REPORT( wxString::Format(
_(
"Pin %s differs: %s; %s" ),
1728 for(
const SCH_PIN* bPin : bPins )
1730 const SCH_PIN* aPin = aRhs.
GetPin( bPin->GetNumber(), bPin->GetUnit(), bPin->GetBodyStyle() );
1735 REPORT( wxString::Format(
_(
"Missing pin in schematic symbol: %s." ),
ITEM_DESC( bPin ) ) );
1742 for(
const SCH_FIELD* aField : aFields )
1746 if( aField->IsMandatory() )
1747 bField = aRhs.
GetField( aField->GetId() );
1749 bField = aRhs.
GetField( aField->GetName() );
1754 REPORT( wxString::Format(
_(
"Extra field in schematic symbol: %s." ),
ITEM_DESC( aField ) ) );
1768 tmp = aField->GetText().compare( bField->
GetText() );
1774 tmp = aField->SCH_ITEM::compare( *bField, aCompareFlags );
1780 REPORT( wxString::Format(
_(
"Field '%s' differs: %s; %s." ),
1781 aField->GetName(
false ),
1791 for(
const SCH_FIELD* bField : bFields )
1795 if( bField->IsMandatory() )
1796 aField = aRhs.
GetField( bField->GetId() );
1798 aField = aRhs.
GetField( bField->GetName() );
1803 REPORT( wxString::Format(
_(
"Missing field in schematic symbol: %s." ),
ITEM_DESC( bField ) ) );
1813 REPORT(
_(
"Footprint filter count differs." ) );
1820 for(
size_t i = 0; i <
m_fpFilters.GetCount(); i++ )
1825 REPORT(
_(
"Footprint filters differ." ) );
1836 REPORT(
_(
"Symbol keywords differ." ) );
1845 REPORT(
_(
"Symbol pin name offsets differ." ) );
1856 REPORT(
_(
"Show pin names settings differ." ) );
1865 REPORT(
_(
"Show pin numbers settings differ." ) );
1874 REPORT(
_(
"Exclude from simulation settings differ." ) );
1883 REPORT(
_(
"Exclude from bill of materials settings differ." ) );
1892 REPORT(
_(
"Exclude from board settings differ." ) );
1928 return Compare( *tmp, aCompareFlags );
1937 double similarity = 0.0;
1946 double max_similarity = 0.0;
1950 double temp_similarity = item.Similarity( otherItem );
1951 max_similarity = std::max( max_similarity, temp_similarity );
1953 if( max_similarity == 1.0 )
1957 similarity += max_similarity;
1963 double max_similarity = 0.0;
1967 double temp_similarity =
pin->Similarity( *otherPin );
1968 max_similarity = std::max( max_similarity, temp_similarity );
1970 if( max_similarity == 1.0 )
1974 similarity += max_similarity;
1977 if( totalItems == 0 )
1980 similarity /= totalItems;
2031 std::set<KIFONT::OUTLINE_FONT*>
fonts;
2039 if(
auto* font =
text.GetFont(); font && !font->IsStroke() )
2044 if( permission == EMBEDDING_PERMISSION::EDITABLE
2045 || permission == EMBEDDING_PERMISSION::INSTALLABLE )
2047 fonts.insert( outline );
2073 if(
group.contains( aPinNumber ) )
2077 return std::nullopt;
2088 const wxString groupFields =
_HKI(
"Fields" );
2106 const wxString groupSymbolDef =
_HKI(
"Symbol Definition" );
2115 const wxString groupPinDisplay =
_HKI(
"Pin Display" );
2131 const wxString groupAttributes =
_HKI(
"Attributes" );
2143 const wxString groupUnits =
_HKI(
"Units and Body Styles" );
2152 auto multiBodyStyle =
2156 return symbol->IsMultiBodyStyle();
2167 wxPGChoices choices;
2171 for(
int ii = 1; ii <= symbol->GetBodyStyleCount(); ii++ )
2172 choices.Add( symbol->GetBodyStyleDescription( ii,
false ) );
constexpr EDA_IU_SCALE schIUScale
constexpr BOX2< Vec > & Merge(const BOX2< Vec > &aRect)
Modify the position and size of the rectangle in order to contain aRect.
static const COLOR4D WHITE
static const COLOR4D UNSPECIFIED
For legacy support; used as a value to indicate color hasn't been set yet.
virtual void ClearEditFlags()
KICAD_T Type() const
Returns the type of object.
virtual void SetParent(EDA_ITEM *aParent)
virtual EDA_ITEM * Clone() const
Create a duplicate of this item with linked list members set to NULL.
EDA_ITEM_FLAGS GetFlags() const
virtual void ClearTempFlags()
FILL_T GetFillMode() const
virtual const wxString & GetText() const
Return the string associated with the text object.
virtual bool IsVisible() const
virtual void SetVisible(bool aVisible)
EMBEDDED_FILES & operator=(EMBEDDED_FILES &&other) noexcept
EMBEDDED_FILE * AddFile(const wxFileName &aName, bool aOverwrite)
Load a file from disk and adds it to the collection.
Class that other classes need to inherit from, in order to be inspectable.
Class OUTLINE_FONT implements outline font drawing.
EMBEDDING_PERMISSION GetEmbeddingPermission() const
A color representation with 4 components: red, green, blue, alpha.
const COLOR4D & GetLayerColor(int aLayer) const
Return the color used to draw a layer.
Define a library symbol object.
LIB_ITEMS_CONTAINER m_drawings
bool ResolveTextVar(wxString *token, int aDepth=0) const
Resolve any references to system tokens supported by the symbol.
SCH_FIELD & GetDescriptionField()
Return reference to the description field.
wxString GetDescription() const override
const LIB_ID & GetLibId() const override
const BOX2I GetUnitBoundingBox(int aUnit, int aBodyStyle, bool aIgnoreHiddenFields=true, bool aIgnoreLabelsOnInvisiblePins=true) const
Get the bounding box for the symbol.
wxString GetKeyWords() const override
wxString GetBodyStyleProp() const override
LIBRENTRYOPTIONS m_options
Special symbol features such as POWER or NORMAL.
wxString GetRefProp() const
bool PinsConflictWith(const LIB_SYMBOL &aOtherSymbol, bool aTestNums, bool aTestNames, bool aTestType, bool aTestOrientation, bool aTestLength) const
Return true if this symbol's pins do not match another symbol's pins.
bool GetUnitsInterchangeableProp() const
void GetFields(std::vector< SCH_FIELD * > &aList, bool aVisibleOnly=false) const override
Populate a std::vector with SCH_FIELDs, sorted in ordinal order.
bool IsPower() const override
SCH_FIELD & GetDatasheetField()
Return reference to the datasheet field.
std::vector< struct LIB_SYMBOL_UNIT > GetUnitDrawItems()
Return a list of SCH_ITEM objects separated by unit and convert number.
std::map< int, wxString > m_unitDisplayNames
std::vector< std::set< wxString > > m_jumperPinGroups
A list of jumper pin groups, each of which is a set of pin numbers that should be jumpered together (...
void ClearTempFlags() override
Clears the status flag all draw objects in this symbol.
void SetKeywordsProp(const wxString &aKeywords)
std::map< int, wxString > & GetUnitDisplayNames()
bool m_demorgan
True if there are two body styles: normal and De Morgan If false, the body style count is taken from ...
wxString GetFootprint() override
For items with footprint fields.
const wxString GetLibraryName() const
void SetFields(const std::vector< SCH_FIELD > &aFieldsList)
Overwrite all the existing fields in this symbol with fields supplied in aFieldsList.
std::vector< SEARCH_TERM > GetSearchTerms() override
bool GetPowerSymbolProp() const
bool IsMultiBodyStyle() const override
int GetMaxPinNumber() const
LIB_SYMBOL(const wxString &aName, LIB_SYMBOL *aParent=nullptr, SYMBOL_LIB *aLibrary=nullptr)
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.
SCH_FIELD * GetField(const wxString &aFieldName)
Find a field within this symbol matching aFieldName; return nullptr if not found.
SCH_FIELD & GetFootprintField()
Return reference to the footprint field.
int Compare(const LIB_SYMBOL &aRhs, int aCompareFlags=0, REPORTER *aReporter=nullptr) const
Comparison test that can be used for operators.
void FixupDrawItems()
This function finds the filled draw items that are covering up smaller draw items and replaces their ...
SCH_PIN * GetPin(const wxString &aNumber, int aUnit=0, int aBodyStyle=0) const
Return pin object with the requested pin aNumber.
bool IsNormal() const override
void SetUnitsInterchangeableProp(bool aInterchangeable)
std::set< KIFONT::OUTLINE_FONT * > GetFonts() const override
SCH_FIELD * FindFieldCaseInsensitive(const wxString &aFieldName)
wxString m_keyWords
Search keywords.
SCH_ITEM * LocateDrawItem(int aUnit, int aBodyStyle, KICAD_T aType, const VECTOR2I &aPoint)
Locate a draw object.
static wxString LetterSubReference(int aUnit, wxChar aInitialLetter)
double Similarity(const SCH_ITEM &aSymbol) const override
Return a measure of similarity between this symbol and aSymbol.
static LIB_SYMBOL * GetDummy()
Returns a dummy LIB_SYMBOL, used when one is missing in the schematic.
void PlotFields(PLOTTER *aPlotter, bool aBackground, const SCH_PLOT_OPTS &aPlotOpts, int aUnit, int aBodyStyle, const VECTOR2I &aOffset, bool aDimmed)
Plot symbol fields.
wxString GetDatasheetProp() const
void SetRefProp(const wxString &aRef)
void SetParent(LIB_SYMBOL *aParent=nullptr)
std::vector< UNIT_PIN_INFO > GetUnitPinInfo() const
Return pin-number lists for each unit, ordered consistently for gate swapping.
wxString GetName() const override
void SetUnitCount(int aCount, bool aDuplicateDrawItems)
Set the units per symbol count.
wxString GetValueProp() const
bool GetExcludedFromBOMProp() const
void SetKeyWords(const wxString &aKeyWords)
SCH_FIELD & GetValueField()
Return reference to the value field.
bool IsLocalPower() const override
wxArrayString GetFPFilters() const
void RemoveDrawItem(SCH_ITEM *aItem)
Remove draw aItem from list.
void GetChooserFields(std::map< wxString, wxString > &aColumnMap) override
Retrieves a key/value map of the fields on this item that should be exposed to the library browser/ch...
bool HasLegacyAlternateBodyStyle() const
Before V10 we didn't store the number of body styles in a symbol – we just looked through all its dra...
bool GetPinNamesInsideProp() const
const std::vector< wxString > & GetBodyStyleNames() const
void SetBodyStyleProp(const wxString &aBodyStyle) override
int compare(const SCH_ITEM &aOther, int aCompareFlags=SCH_ITEM::COMPARE_FLAGS::EQUALITY) const override
The library symbol specific sort order is as follows:
timestamp_t m_lastModDate
void SetExcludedFromSimProp(bool aExclude)
std::optional< const std::set< wxString > > GetJumperPinGroup(const wxString &aPinNumber) const
Retrieves the jumper group containing the specified pin number, if one exists.
void SetLib(SYMBOL_LIB *aLibrary)
std::vector< SCH_PIN * > GetPins() const override
void SetBodyStyleCount(int aCount, bool aDuplicateDrawItems, bool aDuplicatePins)
Set or clear the alternate body style (DeMorgan) for the symbol.
wxString GetLibNickname() const override
Sets the Description field text value.
void SetFootprintProp(const wxString &aFootprint)
std::vector< LOGICAL_PIN > GetLogicalPins(int aUnit, int aBodyStyle) const
Return all logical pins (expanded) filtered by unit/body.
bool HasDeMorganBodyStyles() const override
const LIB_SYMBOL & operator=(const LIB_SYMBOL &aSymbol)
bool m_unitsLocked
True if symbol has multiple units and changing one unit does not automatically change another unit.
wxArrayString m_fpFilters
List of suitable footprint names for the symbol (wild card names accepted).
void Move(const VECTOR2I &aOffset) override
Move the symbol aOffset.
void SetFPFilters(const wxArrayString &aFilters)
void CopyFields(std::vector< SCH_FIELD > &aList)
Create a copy of the SCH_FIELDs, sorted in ordinal order.
void RunOnChildren(const std::function< void(SCH_ITEM *)> &aFunction, RECURSE_MODE aMode) override
std::vector< SCH_PIN * > GetGraphicalPins(int aUnit=0, int aBodyStyle=0) const
Graphical pins: Return schematic pin objects as drawn (unexpanded), filtered by unit/body.
LIB_SYMBOL_SPTR SharedPtr() const
http://www.boost.org/doc/libs/1_55_0/libs/smart_ptr/sp_techniques.html#weak_without_shared.
bool GetExcludedFromSimProp() const
int GetBodyStyleCount() const override
void SetDatasheetProp(const wxString &aDatasheet)
INSPECT_RESULT Visit(INSPECTOR inspector, void *testData, const std::vector< KICAD_T > &aScanTypes) override
May be re-implemented for each derived class in order to handle all the types given by its member dat...
EMBEDDED_FILES * GetEmbeddedFiles() override
void SetPowerSymbolProp(bool aIsPower)
void SetExcludedFromBOMProp(bool aExclude)
int m_unitCount
Number of units (parts) per package.
bool IsGlobalPower() const override
wxString GetBodyStyleDescription(int aBodyStyle, bool aLabel) const override
unsigned GetInheritanceDepth() const
Get the number of parents for this symbol.
int GetUnitCount() const override
LIB_SYMBOL_REF m_parent
Use for inherited symbols.
wxString GetKeywordsProp() const
std::vector< wxString > m_bodyStyleNames
std::unique_ptr< LIB_SYMBOL > Flatten() const
Return a flattened symbol inheritance to the caller.
BOX2I GetBodyBoundingBox() const override
Return a bounding box for the symbol body but not the pins or fields.
void SetValueProp(const wxString &aValue)
int GetPinCount() override
void SetLibId(const LIB_ID &aLibId)
void AddField(SCH_FIELD *aField)
Add a field.
void ClearEditFlags() override
bool GetLocalPowerSymbolProp() const
LIB_ID GetLIB_ID() const override
LIB_SYMBOL_REF & GetParent()
bool m_duplicatePinNumbersAreJumpers
Flag that this symbol should automatically treat sets of two or more pins with the same number as jum...
void SetUnitProp(int aUnits)
wxString GetFootprintProp() const
LIB_SYMBOL_SPTR GetRootSymbol() const
Get the parent symbol that does not have another parent.
void SetPinNamesInsideProp(bool aInside)
void AddDrawItem(SCH_ITEM *aItem, bool aSort=true)
Add a new draw aItem to the draw object list and sort according to aSort.
wxString GetUnitDisplayName(int aUnit, bool aLabel) const override
Return the user-defined display name for aUnit for symbols with units.
void EmbedFonts() override
void SetLocalPowerSymbolProp(bool aIsLocalPower)
virtual void SetName(const wxString &aName)
SCH_FIELD & GetReferenceField()
Return reference to the reference designator field.
int GetNextFieldOrdinal() const
Return the next ordinal for a user field for this symbol.
static constexpr int FIRST_TYPE
ITERATOR_BASE< SCH_ITEM, MULTIVECTOR< SCH_ITEM, FIRST_TYPE_VAL, LAST_TYPE_VAL >, typename ITEM_PTR_VECTOR::iterator > ITERATOR
ITERATOR end(int aType=UNDEFINED_TYPE)
static constexpr int LAST_TYPE
ITERATOR begin(int aType=UNDEFINED_TYPE)
Base plotter engine class.
bool GetColorMode() const
virtual void SetColor(const COLOR4D &color)=0
PROPERTY_BASE & SetChoicesFunc(std::function< wxPGChoices(INSPECTABLE *)> aFunc)
PROPERTY_BASE & SetAvailableFunc(std::function< bool(INSPECTABLE *)> aFunc)
Set a callback function to determine whether an object provides this property.
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.
static PROPERTY_MANAGER & Instance()
PROPERTY_BASE & AddProperty(PROPERTY_BASE *aProperty, const wxString &aGroup=wxEmptyString)
Register a property.
A pure virtual class used to derive REPORTER objects from.
wxString GetFullText(int unit=1) const
Return the text of a field.
wxString GetCanonicalName() const
Get a non-language-specific name for a field which can be used for storage, variable look-up,...
wxString GetName(bool aUseDefaultName=true) const
Return the field name (not translated).
wxString GetShownText(const SCH_SHEET_PATH *aPath, bool aAllowExtraText, int aDepth=0) const
bool ShowInChooser() const
void SetText(const wxString &aText) override
SCH_RENDER_SETTINGS * getRenderSettings(PLOTTER *aPlotter) const
SCH_ITEM(EDA_ITEM *aParent, KICAD_T aType, int aUnit=0, int aBodyStyle=0)
VECTOR2I GetPosition() const override
const KIGFX::COLOR4D & GetBackgroundColor() const override
Return current background color settings.
Object used to load, save, search, and otherwise manipulate symbol library files.
A base class for LIB_SYMBOL and SCH_SYMBOL.
void SetExcludedFromBoard(bool aExcludeFromBoard) override
Set or clear exclude from board netlist flag.
virtual bool GetDNP(const SCH_SHEET_PATH *aInstance=nullptr, const wxString &aVariantName=wxEmptyString) const override
Set or clear the 'Do Not Populate' flag.
virtual void SetShowPinNumbers(bool aShow)
Set or clear the pin number visibility flag.
int GetPinNameOffset() const
virtual void SetShowPinNames(bool aShow)
Set or clear the pin name visibility flag.
bool GetExcludedFromBoard() const override
virtual void SetExcludedFromSim(bool aExcludeFromSim, const SCH_SHEET_PATH *aInstance=nullptr, const wxString &aVariantName=wxEmptyString) override
Set or clear the exclude from simulation flag.
virtual bool GetExcludedFromBOM(const SCH_SHEET_PATH *aInstance=nullptr, const wxString &aVariantName=wxEmptyString) const override
virtual bool GetShowPinNames() const
void SetPinNameOffset(int aOffset)
Set the offset in mils of the pin name text from the pin symbol.
virtual bool GetExcludedFromSim(const SCH_SHEET_PATH *aInstance=nullptr, const wxString &aVariantName=wxEmptyString) const override
SYMBOL & operator=(const SYMBOL &aItem)
virtual bool GetShowPinNumbers() const
virtual void SetExcludedFromBOM(bool aExcludeFromBOM, const SCH_SHEET_PATH *aInstance=nullptr, const wxString &aVariantName=wxEmptyString) override
Set or clear the exclude from schematic bill of materials flag.
int m_pinNameOffset
The offset in mils to draw the pin name.
#define DEFAULT_PIN_NAME_OFFSET
The intersheets references prefix string.
const INSPECTOR_FUNC & INSPECTOR
std::function passed to nested users by ref, avoids copying std::function.
#define IGNORE_PARENT_GROUP
#define IS_NEW
New item, just created.
#define STRUCT_DELETED
flag indication structures to be erased
@ RECTANGLE
Use RECTANGLE instead of RECT to avoid collision in a Windows header.
@ FILLED_WITH_BG_BODYCOLOR
TRANSFORM DefaultTransform
static struct LIB_SYMBOL_DESC _LIB_SYMBOL_DESC
bool operator<(const LIB_SYMBOL &aItem1, const LIB_SYMBOL &aItem2)
MULTIVECTOR< SCH_ITEM, SCH_SHAPE_T, SCH_PIN_T > LIB_ITEMS_CONTAINER
std::shared_ptr< LIB_SYMBOL > LIB_SYMBOL_SPTR
shared pointer to LIB_SYMBOL
LIB_ITEMS_CONTAINER::ITEM_PTR_VECTOR LIB_ITEMS
@ PT_SIZE
Size expressed in distance units (mm/inch)
void Format(OUTPUTFORMATTER *out, int aNestLevel, int aCtl, const CPTREE &aTree)
Output a PTREE into s-expression format via an OUTPUTFORMATTER derivative.
Logical pins: Return expanded logical pins based on stacked-pin notation.
std::vector< wxString > m_pinNumbers
int m_bodyStyle
The alternate body style of the unit.
std::vector< SCH_ITEM * > m_items
The items unique to this unit and alternate body style.
int m_unit
The unit number.
A structure for storing weighted search terms.
http://www.boost.org/doc/libs/1_55_0/libs/smart_ptr/sp_techniques.html#weak_without_shared
void operator()(void const *) const
Definition for symbol library class.
FIELD_T
The set of all field indices assuming an array like sequence that a SCH_COMPONENT or LIB_PART can hol...
@ DESCRIPTION
Field Description of part, i.e. "1/4W 1% Metal Film Resistor".
@ FOOTPRINT
Field Name Module PCB, i.e. "16DIP300".
@ DATASHEET
name of datasheet
@ REFERENCE
Field Reference of part, i.e. "IC21".
@ VALUE
Field Value of part, i.e. "3.3K".
KICAD_T
The set of class identification values stored in EDA_ITEM::m_structType.
VECTOR2< int32_t > VECTOR2I