42 std::vector<SEARCH_TERM> terms;
46 wxStringTokenizer keywordTokenizer(
GetKeyWords(), wxS(
" " ), wxTOKEN_STRTOK );
48 while( keywordTokenizer.HasMoreTokens() )
49 terms.emplace_back(
SEARCH_TERM( keywordTokenizer.GetNextToken(), 4 ) );
52 std::map<wxString, wxString> fields;
55 for(
const auto& [
name,
text ] : fields )
64 if( !footprint.IsEmpty() )
78 aColumnMap[field->
GetName()] = field->EDA_TEXT::GetShownText(
false );
167 wxFAIL_MSG(
"Failed to clone SCH_ITEM." );
181 if( &aSymbol ==
this )
260 parent = parent->GetParent().lock();
271 return sp->GetRootSymbol();
301 aTarget[it.first] = it.second;
309 if( aName.Length() > 0 )
335 std::unique_ptr< LIB_SYMBOL > retv;
341 wxCHECK_MSG( parent, retv,
342 wxString::Format(
"Parent of derived symbol '%s' undefined",
m_name ) );
345 if( parent->IsAlias() )
346 retv = parent->Flatten();
348 retv = std::make_unique<LIB_SYMBOL>( *parent.get() );
360 retv->GetFieldById( i )->SetText( retv->GetFieldById( i )->GetText() );
381 retv->AddDrawItem( newField );
385 retv->RemoveDrawItem( parentField );
386 retv->AddDrawItem( newField );
394 retv->SetExcludedFromBOM( parent->GetExcludedFromBOM() );
395 retv->SetExcludedFromBoard( parent->GetExcludedFromBoard() );
397 retv->UpdateFieldOrdinals();
398 retv->m_parent.reset();
402 retv = std::make_unique<LIB_SYMBOL>( *
this );
420 std::shared_ptr<LIB_SYMBOL> parent;
424 if( parent->IsRoot() )
427 return parent->IsPower();
438 if( parent->IsRoot() )
452 if( parent->IsRoot() )
455 return parent->IsNormal();
466 if( parent->IsRoot() )
486 u = ( aUnit - 1 ) % 26;
487 suffix = wxChar( aFirstId + u ) + suffix;
488 aUnit = ( aUnit - u ) / 26;
489 }
while( aUnit > 0 );
506 footprint = field.
GetShownText(
nullptr,
false, aDepth + 1 );
509 || token->IsSameAs( field.
GetName(),
false ) )
511 *token = field.
GetShownText(
nullptr,
false, aDepth + 1 );
518 if( token->IsSameAs( wxT(
"SIM.DEVICE" ) )
519 || token->IsSameAs( wxT(
"SIM.TYPE" ) )
520 || token->IsSameAs( wxT(
"SIM.PINS" ) )
521 || token->IsSameAs( wxT(
"SIM.PARAMS" ) )
522 || token->IsSameAs( wxT(
"SIM.LIBRARY" ) )
523 || token->IsSameAs( wxT(
"SIM.NAME" ) ) )
525 *token = wxEmptyString;
529 if( token->IsSameAs( wxT(
"FOOTPRINT_LIBRARY" ) ) )
531 wxArrayString parts = wxSplit( footprint,
':' );
533 if( parts.Count() > 0 )
536 *token = wxEmptyString;
540 else if( token->IsSameAs( wxT(
"FOOTPRINT_NAME" ) ) )
542 wxArrayString parts = wxSplit( footprint,
':' );
544 if( parts.Count() > 1 )
545 *token = parts[ std::min( 1, (
int) parts.size() - 1 ) ];
547 *token = wxEmptyString;
551 else if( token->IsSameAs( wxT(
"SYMBOL_LIBRARY" ) ) )
556 else if( token->IsSameAs( wxT(
"SYMBOL_NAME" ) ) )
561 else if( token->IsSameAs( wxT(
"SYMBOL_DESCRIPTION" ) ) )
566 else if( token->IsSameAs( wxT(
"SYMBOL_KEYWORDS" ) ) )
571 else if( token->IsSameAs( wxT(
"EXCLUDE_FROM_BOM" ) ) )
576 else if( token->IsSameAs( wxT(
"EXCLUDE_FROM_BOARD" ) ) )
581 else if( token->IsSameAs( wxT(
"EXCLUDE_FROM_SIM" ) ) )
586 else if( token->IsSameAs( wxT(
"DNP" ) ) )
588 *token = this->
GetDNP() ?
_(
"DNP" ) : wxString(
"" );
597 const VECTOR2I& aOffset,
bool aForceNoFill,
bool aDimmed )
602 if( item.IsPrivate() )
606 if( aUnit && item.m_unit && ( item.m_unit != aUnit ) )
609 if( aBodyStyle && item.m_bodyStyle && ( item.m_bodyStyle != aBodyStyle ) )
614 item.Print( aSettings, aUnit, aBodyStyle, aOffset, aForceNoFill, aDimmed );
623 item.
Print( aSettings, aUnit, aBodyStyle, aOffset, aForceNoFill, aDimmed );
630 if( shape.
GetFillMode() == FILL_T::FILLED_WITH_BG_BODYCOLOR )
637 if( init_color == COLOR4D::UNSPECIFIED )
643 shape.
Print( aSettings, aUnit, aBodyStyle, aOffset, aForceNoFill, aDimmed );
649 item.Print( aSettings, aUnit, aBodyStyle, aOffset, aForceNoFill, aDimmed );
656 const VECTOR2I& aOffset,
bool aDimmed )
667 if( item.IsPrivate() )
675 if( aUnit && shape.
m_unit && ( shape.
m_unit != aUnit ) )
681 if( shape.
GetFillMode() == FILL_T::FILLED_WITH_BG_BODYCOLOR )
682 shape.
Print( aSettings, aUnit, aBodyStyle, aOffset,
false, aDimmed );
690 int aUnit,
int aBodyStyle,
const VECTOR2I &aOffset,
bool aDimmed )
692 wxASSERT( aPlotter !=
nullptr );
698 if( bg == COLOR4D::UNSPECIFIED || !aPlotter->
GetColorMode() )
712 if( item.IsPrivate() )
720 if( aUnit && item.m_unit && ( item.m_unit != aUnit ) )
723 if( aBodyStyle && item.m_bodyStyle && ( item.m_bodyStyle != aBodyStyle ) )
726 item.Plot( aPlotter, aBackground, aPlotOpts, aUnit, aBodyStyle, aOffset, aDimmed );
732 int aUnit,
int aBodyStyle,
const VECTOR2I& aOffset,
bool aDimmed )
734 wxASSERT( aPlotter !=
nullptr );
740 if( bg == COLOR4D::UNSPECIFIED || !aPlotter->
GetColorMode() )
760 wxString tmp = field.
GetText();
763 item.Plot( aPlotter, aBackground, aPlotOpts, aUnit, aBodyStyle, aOffset, aDimmed );
772 std::vector<SCH_SHAPE*> potential_top_items;
773 std::vector<SCH_ITEM*> bottom_items;
781 if( shape.
GetFillMode() == FILL_T::FILLED_WITH_COLOR )
782 potential_top_items.push_back( &shape );
784 bottom_items.push_back( &item );
788 bottom_items.push_back( &item );
792 std::sort( potential_top_items.begin(), potential_top_items.end(),
795 return a->GetBoundingBox().GetArea() > b->GetBoundingBox().GetArea();
798 for(
SCH_SHAPE* item : potential_top_items )
800 for(
SCH_ITEM* bottom_item : bottom_items )
802 if( item->GetBoundingBox().Contains( bottom_item->GetBoundingBox() ) )
804 item->SetFillMode( FILL_T::FILLED_WITH_BG_BODYCOLOR );
814 wxASSERT( aItem !=
nullptr );
820 if(
static_cast<SCH_FIELD*
>( aItem )->IsMandatory() )
826 for( LIB_ITEMS::iterator i = items.begin(); i != items.end(); i++ )
853 std::vector<SCH_PIN*> pins;
868 if( aUnit && item.m_unit && ( item.m_unit != aUnit ) )
872 if( aBodyStyle && item.m_bodyStyle && ( item.m_bodyStyle != aBodyStyle ) )
891 return (
int)
GetPins( 0 , 1 ).size();
899 if( aNumber ==
pin->GetNumber() )
908 bool aTestType,
bool aTestOrientation,
bool aTestLength )
const
913 bool foundMatch =
false;
917 wxASSERT( otherPin );
920 if(
pin->GetUnit() != otherPin->GetUnit() )
924 if(
pin->GetBodyStyle() != otherPin->GetBodyStyle() )
928 if(
pin->GetPosition() != otherPin->GetPosition() )
932 if( aTestNums && (
pin->GetNumber() != otherPin->GetNumber() ) )
936 if( aTestNames && (
pin->GetName() != otherPin->GetName() ) )
940 if( aTestType && (
pin->GetType() != otherPin->GetType() ) )
945 && (
pin->GetOrientation() != otherPin->GetOrientation() ) )
949 if( aTestLength && (
pin->GetLength() != otherPin->GetLength() ) )
970 bool aIgnoreHiddenFields )
const
976 if( item.m_unit > 0 &&
m_unitCount > 1 && aUnit > 0 && aUnit != item.m_unit )
979 if( item.m_bodyStyle > 0 && aBodyStyle > 0 && aBodyStyle != item.m_bodyStyle )
982 if( aIgnoreHiddenFields && item.Type() ==
SCH_FIELD_T )
984 if( !
static_cast<const SCH_FIELD&
>( item ).IsVisible() )
988 bBox.
Merge( item.GetBoundingBox() );
996 bool aIncludePrivateItems )
const
1002 if( item.m_unit > 0 && aUnit > 0 && aUnit != item.m_unit )
1005 if( item.m_bodyStyle > 0 && aBodyStyle > 0 && aBodyStyle != item.m_bodyStyle )
1008 if( item.IsPrivate() && !aIncludePrivateItems )
1018 if(
pin.IsVisible() )
1024 bbox.
Merge(
pin.GetBoundingBox(
false,
false,
false ) );
1031 bbox.
Merge( item.GetBoundingBox() );
1055 for(
const SCH_FIELD& src : aFieldsList )
1081 aList.push_back( field );
1096 aList.push_back( field );
1113 aList.push_back( *field );
1124 if( field->
GetId() == aId )
1136 if( aCaseInsensitive )
1138 if(
static_cast<SCH_FIELD*
>( &item )->GetCanonicalName().Upper() == aFieldName.Upper() )
1139 return static_cast<SCH_FIELD*
>( &item );
1144 return static_cast<SCH_FIELD*
>( &item );
1153 bool aCaseInsensitive )
const
1159 if( aCaseInsensitive )
1178 wxASSERT( field !=
nullptr );
1186 wxASSERT( field !=
nullptr );
1194 wxASSERT( field !=
nullptr );
1202 wxASSERT( field !=
nullptr );
1210 wxASSERT( field !=
nullptr );
1219 refDesignator.Replace( wxS(
"~" ), wxS(
" " ) );
1221 wxString prefix = refDesignator;
1223 while( prefix.Length() )
1225 wxUniCharRef last = prefix.Last();
1227 if( ( last >=
'0' && last <=
'9' ) || last ==
'?' || last ==
'*' )
1228 prefix.RemoveLast();
1234 prefix.Trim(
true );
1235 prefix.Trim(
false );
1261 if( field->
GetId() != lastOrdinal )
1263 field->
SetId( lastOrdinal );
1288 item.Move( aOffset );
1296 if( item.m_bodyStyle > BODY_STYLE::BASE )
1302 for(
const SCH_ITEM& item : parent->GetDrawItems() )
1304 if( item.m_bodyStyle > BODY_STYLE::BASE )
1315 int maxPinNumber = 0;
1322 long currentPinNumber = 0;
1324 if(
pin->GetNumber().ToLong( ¤tPinNumber ) )
1325 maxPinNumber = std::max( maxPinNumber, (
int) currentPinNumber );
1328 return maxPinNumber;
1337 item.ClearTempFlags();
1346 item.ClearEditFlags();
1355 if( ( aUnit && item.m_unit && aUnit != item.m_unit )
1356 || ( aBodyStyle && item.m_bodyStyle && aBodyStyle != item.m_bodyStyle )
1362 if( item.HitTest( aPoint ) )
1391 const std::vector<KICAD_T>& aScanTypes )
1396 if( item.IsType( aScanTypes ) )
1398 if( aInspector( &item, aTestData ) == INSPECT_RESULT::QUIT )
1399 return INSPECT_RESULT::QUIT;
1403 return INSPECT_RESULT::CONTINUE;
1418 if( i->m_unit > aCount )
1424 else if( aDuplicateDrawItems )
1431 std::vector<SCH_ITEM*> tmp;
1435 if( item.m_unit != 1 )
1438 for(
int j = prevCount + 1; j <= aCount; j++ )
1442 tmp.push_back( newItem );
1458 return parent->GetUnitCount();
1472 if( aDuplicatePins )
1474 std::vector<SCH_ITEM*> tmp;
1478 if( item.m_bodyStyle == 1 )
1482 tmp.push_back( newItem );
1498 if( i->m_bodyStyle > 1 )
1511 std::vector<SCH_ITEM*> unitItems;
1518 if( ( aBodyStyle == -1 && item.GetUnit() == aUnit )
1519 || ( aUnit == -1 && item.GetBodyStyle() == aBodyStyle )
1520 || ( aUnit == item.GetUnit() && aBodyStyle == item.GetBodyStyle() ) )
1522 unitItems.push_back( &item );
1532 std::vector<LIB_SYMBOL_UNIT> units;
1539 int unit = item.GetUnit();
1540 int bodyStyle = item.GetBodyStyle();
1542 auto it = std::find_if( units.begin(), units.end(),
1545 return a.m_unit == unit && a.m_bodyStyle == bodyStyle;
1548 if( it == units.end() )
1551 newUnit.
m_unit = item.GetUnit();
1553 newUnit.
m_items.push_back( &item );
1554 units.emplace_back( newUnit );
1558 it->m_items.push_back( &item );
1568#define REPORT( msg ) { if( aReporter ) aReporter->Report( msg ); }
1569#define ITEM_DESC( item ) ( item )->GetItemDescription( &unitsProvider, true )
1598 REPORT(
_(
"Power flag differs." ) );
1607 REPORT(
_(
"Unit count differs." ) );
1616 std::set<const SCH_ITEM*, SCH_ITEM::cmp_items> aShapes;
1617 std::set<const SCH_ITEM*> aFields;
1618 std::set<const SCH_ITEM*, SCH_ITEM::cmp_items> aPins;
1623 aShapes.insert( &(*it) );
1625 aFields.insert( &(*it) );
1627 aPins.insert( &(*it) );
1630 std::set<const SCH_ITEM*, SCH_ITEM::cmp_items> bShapes;
1631 std::set<const SCH_ITEM*> bFields;
1632 std::set<const SCH_ITEM*, SCH_ITEM::cmp_items> bPins;
1637 bShapes.insert( &(*it) );
1639 bFields.insert( &(*it) );
1641 bPins.insert( &(*it) );
1644 if(
int tmp =
static_cast<int>( aShapes.size() - bShapes.size() ) )
1647 REPORT(
_(
"Graphic item count differs." ) );
1654 for(
auto aIt = aShapes.begin(), bIt = bShapes.begin(); aIt != aShapes.end(); aIt++, bIt++ )
1656 if(
int tmp2 = (*aIt)->compare( *(*bIt), aCompareFlags ) )
1667 if(
int tmp =
static_cast<int>( aPins.size() - bPins.size() ) )
1670 REPORT(
_(
"Pin count differs." ) );
1677 for(
const SCH_ITEM* aPinItem : aPins )
1691 else if(
int tmp2 = aPinItem->compare( *bPin, aCompareFlags ) )
1702 for(
const SCH_ITEM* aFieldItem : aFields )
1716 tmp = aFieldItem->
compare( *bField, aCompareFlags );
1721 REPORT( wxString::Format(
_(
"%s field differs." ), aField->
GetName(
false ) ) );
1728 if(
int tmp =
static_cast<int>( aFields.size() - bFields.size() ) )
1731 REPORT(
_(
"Field count differs." ) );
1740 REPORT(
_(
"Footprint filters differs." ) );
1747 for(
size_t i = 0; i <
m_fpFilters.GetCount(); i++ )
1752 REPORT(
_(
"Footprint filters differ." ) );
1763 REPORT(
_(
"Symbol keywords differ." ) );
1772 REPORT(
_(
"Symbol pin name offsets differ." ) );
1783 REPORT(
_(
"Show pin names settings differ." ) );
1792 REPORT(
_(
"Show pin numbers settings differ." ) );
1801 REPORT(
_(
"Exclude from simulation settings differ." ) );
1810 REPORT(
_(
"Exclude from bill of materials settings differ." ) );
1819 REPORT(
_(
"Exclude from board settings differ." ) );
1849 return Compare( *tmp, aCompareFlags );
1858 double similarity = 0.0;
1867 double max_similarity = 0.0;
1871 double temp_similarity = item.
Similarity( otherItem );
1872 max_similarity = std::max( max_similarity, temp_similarity );
1874 if( max_similarity == 1.0 )
1878 similarity += max_similarity;
1884 double max_similarity = 0.0;
1888 double temp_similarity =
pin->Similarity( *otherPin );
1889 max_similarity = std::max( max_similarity, temp_similarity );
1891 if( max_similarity == 1.0 )
1895 similarity += max_similarity;
1898 if( totalItems == 0 )
1901 similarity /= totalItems;
1946 using EMBEDDING_PERMISSION = OUTLINE_FONT::EMBEDDING_PERMISSION;
1948 std::set<OUTLINE_FONT*>
fonts;
1956 if(
auto* font =
text.GetFont(); font && !font->IsStroke() )
1958 auto* outline =
static_cast<OUTLINE_FONT*
>( font );
1959 auto permission = outline->GetEmbeddingPermission();
1961 if( permission == EMBEDDING_PERMISSION::EDITABLE
1962 || permission == EMBEDDING_PERMISSION::INSTALLABLE )
1964 fonts.insert( outline );
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.
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_FILE * AddFile(const wxFileName &aName, bool aOverwrite)
Load a file from disk and adds it to the collection.
Class OUTLINE_FONT implements outline font drawing.
A color representation with 4 components: red, green, blue, alpha.
const COLOR4D & GetLayerColor(int aLayer) const
Return the color used to draw a layer.
int SetLibItemName(const UTF8 &aLibItemName)
Override the library item name portion of the LIB_ID to aLibItemName.
int compare(const LIB_ID &aLibId) const
Compare the contents of LIB_ID objects by performing a std::string comparison of the library nickname...
const wxString GetUniStringLibItemName() const
Get strings for display messages in dialogs.
const wxString GetUniStringLibNickname() const
const UTF8 & GetLibNickname() const
Return the logical library name portion of a LIB_ID.
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.
wxString GetDescription() const override
wxString GetKeyWords() const override
std::vector< SCH_PIN * > GetPins(int aUnit, int aBodyStyle) const
Return a list of pin object pointers from the draw item list.
void RunOnChildren(const std::function< void(SCH_ITEM *)> &aFunction) override
LIBRENTRYOPTIONS m_options
Special symbol features such as POWER or NORMAL.)
void Print(const SCH_RENDER_SETTINGS *aSettings, int aUnit, int aBodyStyle, const VECTOR2I &aOffset, bool aForceNoFill, bool aDimmed) override
Print an item.
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 IsPower() const override
void SetUnitCount(int aCount, bool aDuplicateDrawItems=true)
Set the units per symbol count.
const BOX2I GetUnitBoundingBox(int aUnit, int aBodyStyle, bool aIgnoreHiddenFields=true) const
Get the bounding box for the symbol.
int GetNextAvailableFieldId() const
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
void ClearTempFlags() override
Clears the status flag all draw objects in this symbol.
wxString GetUnitDisplayName(int aUnit) override
Return the user-defined display name for aUnit for symbols with units.
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.
SCH_FIELD & GetValueField() const
Return reference to the value field.
std::vector< SEARCH_TERM > GetSearchTerms() override
int GetMaxPinNumber() const
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.
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 ...
static wxString LetterSubReference(int aUnit, int aFirstId)
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
std::set< KIFONT::OUTLINE_FONT * > GetFonts() const override
bool HasAlternateBodyStyle() const override
Test if symbol has more than one body conversion type (DeMorgan).
SCH_FIELD * GetFieldById(int aId) const
Return pointer to the requested field.
wxString m_keyWords
Search keywords.
SCH_ITEM * LocateDrawItem(int aUnit, int aBodyStyle, KICAD_T aType, const VECTOR2I &aPoint)
Locate a draw object.
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.
SCH_FIELD & GetDatasheetField() const
Return reference to the datasheet field.
SCH_FIELD & GetFootprintField() const
Return reference to the footprint field.
void SetParent(LIB_SYMBOL *aParent=nullptr)
wxString GetName() const override
void GetFields(std::vector< SCH_FIELD * > &aList, bool aVisibleOnly=false) override
Return a list of fields within this symbol.
SCH_FIELD & GetReferenceField() const
Return reference to the reference designator field.
void PrintBackground(const SCH_RENDER_SETTINGS *aSettings, int aUnit, int aBodyStyle, const VECTOR2I &aOffset, bool aDimmed) override
Print just the background fills.
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...
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 SetLib(SYMBOL_LIB *aLibrary)
std::vector< SCH_PIN * > GetPins() const override
Return a list of pin pointers for all units / converts.
SCH_FIELD & GetDescriptionField() const
Return reference to the description field.
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.
bool HasUnitDisplayName(int aUnit) override
Return true if the given unit aUnit has a display name defined.
void CopyFields(std::vector< SCH_FIELD > &aList)
LIB_SYMBOL_SPTR SharedPtr() const
SCH_FIELD * FindField(const wxString &aFieldName, bool aCaseInsensitive=false)
Find a field within this symbol matching aFieldName and returns it or NULL if not found.
int UpdateFieldOrdinals()
Order optional field indices.
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...
wxString GetUnitReference(int aUnit) override
Return an identifier for aUnit for symbols with units.
EMBEDDED_FILES * GetEmbeddedFiles() override
int m_unitCount
Number of units (parts) per package.
void SetHasAlternateBodyStyle(bool aHasAlternate, bool aDuplicatePins=true)
Set or clear the alternate body style (DeMorgan) for the symbol.
unsigned GetInheritanceDepth() const
Get the number of parents for this symbol.
int GetUnitCount() const override
LIB_SYMBOL_REF m_parent
Use for inherited symbols.
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.
int GetPinCount() override
void AddField(SCH_FIELD *aField)
Add a field.
void ClearEditFlags() override
LIB_SYMBOL_REF & GetParent()
LIB_SYMBOL_SPTR GetRootSymbol() const
Get the parent symbol that does not have another parent.
void SetUnitDisplayName(int aUnit, const wxString &aName)
Set the user-defined display name for aUnit to aName for symbols with units.
void AddDrawItem(SCH_ITEM *aItem, bool aSort=true)
Add a new draw aItem to the draw object list and sort according to aSort.
void EmbedFonts() override
virtual void SetName(const wxString &aName)
void CopyUnitDisplayNames(std::map< int, wxString > &aTarget) const
Copy all unit display names into the given map aTarget.
ITERATOR_BASE< SCH_ITEM, MULTIVECTOR< SCH_ITEM, FIRST_TYPE_VAL, LAST_TYPE_VAL >, typename ITEM_PTR_VECTOR::iterator > ITERATOR
The const iterator.
ITERATOR end(int aType=UNDEFINED_TYPE)
void clear(int aType=UNDEFINED_TYPE)
ITERATOR erase(const ITERATOR &aIterator)
ITERATOR begin(int aType=UNDEFINED_TYPE)
Base plotter engine class.
bool GetColorMode() const
virtual void SetColor(const COLOR4D &color)=0
A pure virtual class used to derive REPORTER objects from.
Instances are attached to a symbol or sheet and provide a place for the symbol's value,...
int compare(const SCH_ITEM &aOther, int aCompareFlags=0) const override
Provide the draw object specific comparison called by the == and < operators.
wxString GetFullText(int unit=1) const
Return the text of a field.
void Print(const SCH_RENDER_SETTINGS *aSettings, int aUnit, int aBodyStyle, const VECTOR2I &aOffset, bool aForceNoFill, bool aDimmed) override
Print an item.
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
Base class for any item which can be embedded within the SCHEMATIC container class,...
SCH_RENDER_SETTINGS * getRenderSettings(PLOTTER *aPlotter) const
virtual void SetExcludedFromSim(bool aExclude)
SCH_ITEM * Duplicate(bool doClone=false) const
Routine to create a new copy of given item.
const wxString & GetNumber() const
const KIGFX::COLOR4D & GetBackgroundColor() const override
Return current background color settings.
void Print(const SCH_RENDER_SETTINGS *aSettings, int aUnit, int aBodyStyle, const VECTOR2I &aOffset, bool aForceNoFill, bool aDimmed) override
Print an item.
void SetStroke(const STROKE_PARAMS &aStroke) override
STROKE_PARAMS GetStroke() const override
Simple container to manage line stroke parameters.
void SetColor(const KIGFX::COLOR4D &aColor)
KIGFX::COLOR4D GetColor() const
Object used to load, save, search, and otherwise manipulate symbol library files.
const wxString GetName() const
Return the file name without path or extension.
A base class for LIB_SYMBOL and SCH_SYMBOL.
bool GetExcludedFromBoard() const
bool GetExcludedFromBOM() const
bool GetDNP() const
Set or clear the 'Do Not Populate' flag.
SYMBOL & operator=(const SYMBOL &aItem)
int m_pinNameOffset
The offset in mils to draw the pin name.
bool GetExcludedFromSim() const override
#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 IS_NEW
New item, just created.
#define STRUCT_DELETED
flag indication structures to be erased
TRANSFORM DefaultTransform
bool GetGRForceBlackPenState(void)
bool operator<(const LIB_SYMBOL &aItem1, const LIB_SYMBOL &aItem2)
std::shared_ptr< LIB_SYMBOL > LIB_SYMBOL_SPTR
shared pointer to LIB_SYMBOL
LIB_ITEMS_CONTAINER::ITEM_PTR_VECTOR LIB_ITEMS
constexpr int MilsToIU(int mils) const
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.
@ DATASHEET_FIELD
name of datasheet
@ FOOTPRINT_FIELD
Field Name Module PCB, i.e. "16DIP300".
@ VALUE_FIELD
Field Value of part, i.e. "3.3K".
@ MANDATORY_FIELDS
The first 5 are mandatory, and must be instantiated in SCH_COMPONENT, LIB_PART, and FOOTPRINT constru...
@ REFERENCE_FIELD
Field Reference of part, i.e. "IC21".
@ DESCRIPTION_FIELD
Field Description of part, i.e. "1/4W 1% Metal Film Resistor".
KICAD_T
The set of class identification values stored in EDA_ITEM::m_structType.
VECTOR2< int32_t > VECTOR2I