53 static const wxString discount( wxT(
" " ) );
58 if( !footprint.IsEmpty() )
60 text += discount + footprint;
64 std::map<wxString, wxString> fields;
67 for(
const auto& it : fields )
68 text += discount + it.second;
81 aColumnMap[field->
GetName()] = field->EDA_TEXT::GetShownText();
104 m_includeInBom( true ),
105 m_includeOnBoard( true )
172 wxFAIL_MSG(
"Failed to clone LIB_ITEM." );
186 if( &aSymbol ==
this )
240 if( ( aCompareFlags & LIB_ITEM::COMPARE_FLAGS::ERC ) == 0 )
276 wxCHECK( lhsItem && rhsItem, lhsItem - rhsItem );
278 if( lhsItem->
Type() != rhsItem->
Type() )
279 return lhsItem->
Type() - rhsItem->
Type();
289 if( ( aCompareFlags & LIB_ITEM::COMPARE_FLAGS::ERC ) == 0 ||
IsPower() )
290 retv = lhsItem->
compare( *rhsItem, aCompareFlags );
294 retv = lhsItem->
compare( *rhsItem, aCompareFlags );
299 retv = lhsItem->
compare( *rhsItem, aCompareFlags );
314 wxCHECK2( field,
continue );
322 if( foundField ==
nullptr )
325 retv = item.
compare(
static_cast<const LIB_ITEM&
>( *foundField ), aCompareFlags );
334 for(
size_t i = 0; i <
m_fpFilters.GetCount(); i++ )
358 if( ( aCompareFlags & LIB_ITEM::COMPARE_FLAGS::ERC ) == 0 )
416 aTarget[it.first] = it.second;
425 if( aName.Length() > 0 )
455 std::unique_ptr< LIB_SYMBOL > retv;
461 wxCHECK_MSG( parent, retv,
465 retv.reset(
new LIB_SYMBOL( *parent.get() ) );
477 retv->GetFieldById( i )->SetText( parent->GetFieldById( i )->GetText() );
487 wxCHECK2( aliasField,
continue );
500 retv->AddDrawItem( newField );
504 retv->RemoveDrawItem( parentField );
505 retv->AddDrawItem( newField );
512 retv->UpdateFieldOrdinals();
529 eda_text->ClearBoundingBoxCache();
530 eda_text->ClearRenderCache();
605 u = ( aUnit - 1 ) % 26;
607 aUnit = ( aUnit - u ) / 26;
608 }
while( aUnit > 0 );
629 if( item.IsPrivate() )
637 if( aUnit && shape.
m_unit && ( shape.
m_unit != aUnit ) )
644 shape.
Print( aSettings, aOffset, (
void*)
false, aOpts.
transform, aDimmed );
658 if( item.IsPrivate() )
662 if( aUnit && item.m_unit && ( item.m_unit != aUnit ) )
665 if( aConvert && item.m_convert && ( item.m_convert != aConvert ) )
681 item.
Print( aSettings, aOffset, (
void*) &aOpts, aOpts.
transform, aDimmed );
685 item.Print( aSettings, aOffset,
nullptr, aOpts.
transform, aDimmed );
692 shape.
Print( aSettings, aOffset, (
void*) forceNoFill, aOpts.
transform, aDimmed );
696 item.Print( aSettings, aOffset, (
void*)
false, aOpts.
transform, aDimmed );
705 wxASSERT( aPlotter !=
nullptr );
710 if( bg == COLOR4D::UNSPECIFIED || !aPlotter->
GetColorMode() )
723 if( item.IsPrivate() )
731 if( aUnit && item.m_unit && ( item.m_unit != aUnit ) )
734 if( aConvert && item.m_convert && ( item.m_convert != aConvert ) )
737 item.Plot( aPlotter, aBackground, aOffset, aTransform, aDimmed );
746 wxASSERT( aPlotter !=
nullptr );
751 if( bg == COLOR4D::UNSPECIFIED || !aPlotter->
GetColorMode() )
767 if( !aPlotHidden && !( (
LIB_FIELD&) item ).IsVisible() )
788 item.
Plot( aPlotter, aBackground, aOffset, aTransform, aDimmed );
796 wxASSERT( aItem !=
nullptr );
802 if(
static_cast<LIB_FIELD*
>( aItem )->IsMandatory() )
808 for( LIB_ITEMS::iterator i = items.begin(); i != items.end(); i++ )
846 if( aUnit && item.m_unit && ( item.m_unit != aUnit ) )
850 if( aConvert && item.m_convert && ( item.m_convert != aConvert ) )
860 std::vector<LIB_PIN*> pinList;
872 GetPins( pinList, aUnit, aConvert );
878 if( aNumber ==
pin->GetNumber() )
887 bool aTestType,
bool aTestOrientation,
bool aTestLength )
const
892 for(
const LIB_PIN* eachThisPin : thisPinList )
894 wxASSERT( eachThisPin );
896 aOtherPart.
GetPins( otherPinList, 0, 0 );
897 bool foundMatch =
false;
899 for(
const LIB_PIN* eachOtherPin : otherPinList )
901 wxASSERT( eachOtherPin );
904 if( eachThisPin->GetUnit() != eachOtherPin->GetUnit() )
908 if( eachThisPin->GetConvert() != eachOtherPin->GetConvert() )
912 if( eachThisPin->GetPosition() != eachOtherPin->GetPosition() )
916 if( aTestNums && ( eachThisPin->GetNumber() != eachOtherPin->GetNumber() ) )
920 if( aTestNames && ( eachThisPin->GetName() != eachOtherPin->GetName() ) )
924 if( aTestType && ( eachThisPin->GetType() != eachOtherPin->GetType() ) )
929 && ( eachThisPin->GetOrientation() != eachOtherPin->GetOrientation() ) )
933 if( aTestLength && ( eachThisPin->GetLength() != eachOtherPin->GetLength() ) )
954 bool aIgnoreHiddenFields )
const
963 && aUnit != item.m_unit )
968 if( item.m_convert > 0 && aConvert > 0 && aConvert != item.m_convert )
971 if( aIgnoreHiddenFields && ( item.Type() ==
LIB_FIELD_T )
995 bool aIncludePrivateItems )
const
1001 if( item.m_unit > 0 && aUnit > 0 && aUnit != item.m_unit )
1004 if( item.m_convert > 0 && aConvert > 0 && aConvert != item.m_convert )
1007 if( item.IsPrivate() && !aIncludePrivateItems )
1017 if(
pin.IsVisible() )
1023 bbox.
Merge(
pin.GetBoundingBox(
false,
false,
false ) );
1030 bbox.
Merge( item.GetBoundingBox() );
1054 for(
size_t ii = 0; ii < aFields.size(); ++ii )
1079 aList.push_back( field );
1096 aList.push_back( *field );
1107 if( field->
GetId() == aId )
1119 if(
static_cast<LIB_FIELD*
>( &item )->GetCanonicalName() == aFieldName )
1120 return static_cast<LIB_FIELD*
>( &item );
1131 if(
static_cast<const LIB_FIELD*
>( &item )->GetCanonicalName() == aFieldName )
1132 return static_cast<const LIB_FIELD*
>( &item );
1142 wxASSERT( field !=
nullptr );
1150 wxASSERT( field !=
nullptr );
1158 wxASSERT( field !=
nullptr );
1166 wxASSERT( field !=
nullptr );
1175 refDesignator.Replace( wxS(
"~" ), wxS(
" " ) );
1177 wxString prefix = refDesignator;
1179 while( prefix.Length() )
1181 wxUniCharRef last = prefix.Last();
1183 if( ( last >=
'0' && last <=
'9' ) || last ==
'?' || last ==
'*' )
1184 prefix.RemoveLast();
1190 prefix.Trim(
true );
1191 prefix.Trim(
false );
1206 wxCHECK2( field,
continue );
1212 if( field->
GetId() != lastOrdinal )
1214 field->
SetId( lastOrdinal );
1239 item.Offset( aOffset );
1253 if( item.m_convert > LIB_ITEM::LIB_CONVERT::BASE )
1259 for(
const LIB_ITEM& item : parent->GetDrawItems() )
1261 if( item.m_convert > LIB_ITEM::LIB_CONVERT::BASE )
1271 int maxPinNumber = 0;
1278 long currentPinNumber = 0;
1279 bool isNum =
pin->GetNumber().ToLong( ¤tPinNumber );
1281 if( isNum && currentPinNumber > maxPinNumber )
1283 maxPinNumber = currentPinNumber;
1287 return maxPinNumber;
1294 item.ClearTempFlags();
1301 item.ClearEditFlags();
1310 if( ( aUnit && item.m_unit && aUnit != item.m_unit )
1311 || ( aConvert && item.m_convert && aConvert != item.m_convert )
1317 if( item.HitTest( aPoint ) )
1347 const std::vector<KICAD_T>& aScanTypes )
1352 if( item.IsType( aScanTypes ) )
1374 if( i->m_unit > aCount )
1380 else if( aDuplicateDrawItems )
1387 std::vector< LIB_ITEM* > tmp;
1391 if( item.m_unit != 1 )
1394 for(
int j = prevCount + 1; j <= aCount; j++ )
1398 tmp.push_back( newItem );
1414 return parent->GetUnitCount();
1428 if( aDuplicatePins )
1430 std::vector< LIB_ITEM* > tmp;
1438 if( item.m_convert == 1 )
1442 tmp.push_back( newItem );
1447 for(
unsigned i = 0; i < tmp.size(); i++ )
1459 if( i->m_convert > 1 )
1475 if( aSep ==
'.' || aSep ==
'-' || aSep ==
'_' )
1478 if( aFirstId ==
'1' && aSep != 0 )
1485 std::vector<LIB_ITEM*> unitItems;
1492 if( ( aConvert == -1 && item.GetUnit() == aUnit )
1493 || ( aUnit == -1 && item.GetConvert() == aConvert )
1494 || ( aUnit == item.GetUnit() && aConvert == item.GetConvert() ) )
1496 unitItems.push_back( &item );
1506 std::vector<struct LIB_SYMBOL_UNIT> units;
1513 int unit = item.GetUnit();
1514 int convert = item.GetConvert();
1516 auto it = std::find_if( units.begin(), units.end(),
1519 return a.m_unit == unit && a.m_convert == convert;
1522 if( it == units.end() )
1525 newUnit.
m_unit = item.GetUnit();
1527 newUnit.
m_items.push_back( &item );
1528 units.emplace_back( newUnit );
1532 it->m_items.push_back( &item );
1545 std::vector<LIB_ITEM*> compareDrawItems;
1546 std::vector<LIB_ITEM*> currentDrawItems;
1547 std::vector<struct LIB_SYMBOL_UNIT> uniqueUnits;
1555 if( unit.
m_items.size() == 0 )
1558 uniqueUnits.emplace_back( unit );
1563 currentDrawItems = unit.
m_items;
1565 for( unitNum = 2; unitNum <=
GetUnitCount(); unitNum++ )
1569 wxCHECK2_MSG( compareDrawItems.size() != 0,
continue,
1570 "Multiple unit symbol defined with empty units." );
1572 if( currentDrawItems.size() != compareDrawItems.size() )
1576 unit.
m_items = compareDrawItems;
1577 uniqueUnits.emplace_back( unit );
1581 for( i = 0; i < currentDrawItems.size(); i++ )
1583 if( currentDrawItems[i]->compare( *compareDrawItems[i],
1584 LIB_ITEM::COMPARE_FLAGS::UNIT ) != 0 )
1588 unit.
m_items = compareDrawItems;
1589 uniqueUnits.emplace_back( unit );
1603 unit.
m_items = currentDrawItems;
1604 uniqueUnits.emplace_back( unit );
1609 for( unitNum = 2; unitNum <=
GetUnitCount(); unitNum++ )
1613 wxCHECK2_MSG( compareDrawItems.size() != 0,
continue,
1614 "Multiple unit symbol defined with empty units." );
1616 if( currentDrawItems.size() != compareDrawItems.size() )
1620 unit.
m_items = compareDrawItems;
1621 uniqueUnits.emplace_back( unit );
1625 for( i = 0; i < currentDrawItems.size(); i++ )
1627 if( currentDrawItems[i]->compare( *compareDrawItems[i],
1628 LIB_ITEM::COMPARE_FLAGS::UNIT ) != 0 )
1632 unit.
m_items = compareDrawItems;
1633 uniqueUnits.emplace_back( unit );
constexpr EDA_IU_SCALE schIUScale
BOX2< Vec > & Merge(const BOX2< Vec > &aRect)
Modify the position and size of the rectangle in order to contain aRect.
A base class for most all the KiCad significant classes used in schematics and boards.
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
FILL_T GetFillMode() const
A mix-in class (via multiple inheritance) that handles texts such as labels, parts,...
virtual const wxString & GetText() const
Return the string associated with the text object.
virtual bool IsVisible() const
virtual void SetText(const wxString &aText)
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.
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.
Field object used in symbol libraries.
bool ShowInChooser() const
void Plot(PLOTTER *aPlotter, bool aBackground, const VECTOR2I &aOffset, const TRANSFORM &aTransform, bool aDimmed) const override
Plot the draw item using the plot object.
wxString GetFullText(int unit=1) const
Return the text of a field.
wxString GetName(bool aUseDefaultName=true) const
Return the field name (not translated).
const BOX2I GetBoundingBox() const override
Return the orthogonal bounding box of this object for display purposes.
wxString GetShownText(int aDepth=0, bool aAllowExtraText=true) const override
Return the string actually shown after processing of the base text.
int compare(const LIB_ITEM &aOther, int aCompareFlags=0) const override
Provide the draw object specific comparison called by the == and < operators.
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 UTF8 & GetLibNickname() const
Return the logical library name portion of a LIB_ID.
The base class for drawable items used by schematic library symbols.
int m_convert
Shape identification for alternate body styles.
virtual int compare(const LIB_ITEM &aOther, int aCompareFlags=0) const
Provide the draw object specific comparison called by the == and < operators.
virtual void Print(const RENDER_SETTINGS *aSettings, const VECTOR2I &aOffset, void *aData, const TRANSFORM &aTransform, bool aDimmed)
Draw an item.
int m_unit
Unit identification for multiple parts per package.
Define a library symbol object.
LIB_ITEMS_CONTAINER m_drawings
void Plot(PLOTTER *aPlotter, int aUnit, int aConvert, bool aBackground, const VECTOR2I &aOffset, const TRANSFORM &aTransform, bool aDimmed) const
Plot lib symbol to plotter.
void PrintBackground(const RENDER_SETTINGS *aSettings, const VECTOR2I &aOffset, int aMulti, int aConvert, const LIB_SYMBOL_OPTIONS &aOpts, bool aDimmed)
Print just the background fills of a symbol.
void ClearTempFlags()
Clears the status flag all draw objects in this symbol.
LIBRENTRYOPTIONS m_options
Special symbol features such as POWER or NORMAL.)
void RemoveDrawItem(LIB_ITEM *aItem)
Remove draw aItem from list.
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.
wxString GetKeyWords() const
void SetConversion(bool aSetConvert, bool aDuplicatePins=true)
Set or clear the alternate body style (DeMorgan) for the symbol.
LIB_FIELD & GetReferenceField()
Return reference to the reference designator field.
void SetUnitCount(int aCount, bool aDuplicateDrawItems=true)
Set the units per symbol count.
static int m_subpartFirstId
the ASCII char value to calculate the subpart symbol id from the symbol number: only 'A',...
bool UnitsLocked() const
Check whether symbol units are interchangeable.
int GetNextAvailableFieldId() const
std::map< int, wxString > m_unitDisplayNames
wxString GetUnitDisplayName(int aUnit) override
Return the user-defined display name for aUnit for symbols with units.
const wxString GetLibraryName() const
LIB_FIELD * GetFieldById(int aId) const
Return pointer to the requested field.
std::vector< struct LIB_SYMBOL_UNIT > GetUnitDrawItems()
Return a list of LIB_ITEM objects separated by unit and convert number.
int GetMaxPinNumber() const
LIB_SYMBOL(const wxString &aName, LIB_SYMBOL *aParent=nullptr, SYMBOL_LIB *aLibrary=nullptr)
void ViewGetLayers(int aLayers[], int &aCount) const override
Return the all the layers within the VIEW the object is painted on.
wxString m_keyWords
Search keywords.
LIB_FIELD & GetFootprintField()
Return reference to the footprint field.
void RemoveDuplicateDrawItems()
Remove duplicate draw items from list.
void SetParent(LIB_SYMBOL *aParent=nullptr)
wxString GetName() const override
static int m_subpartIdSeparator
the separator char between the subpart id and the reference like U1A ( m_subpartIdSeparator = 0 ) or ...
int m_pinNameOffset
The offset in mils to draw the pin name.
void GetFields(std::vector< LIB_FIELD * > &aList)
Return a list of fields within this symbol.
void AddDrawItem(LIB_ITEM *aItem, bool aSort=true)
Add a new draw aItem to the draw object list and sort according to aSort.
LIB_FIELD * FindField(const wxString &aFieldName)
Find a field within this symbol matching aFieldName and returns it or NULL if not found.
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...
static wxString SubReference(int aUnit, bool aAddSeparator=true)
void PlotLibFields(PLOTTER *aPlotter, int aUnit, int aConvert, bool aBackground, const VECTOR2I &aOffset, const TRANSFORM &aTransform, bool aDimmed, bool aPlotHidden=true)
Plot Lib Fields only of the symbol to plotter.
timestamp_t m_lastModDate
void SetLib(SYMBOL_LIB *aLibrary)
std::vector< struct LIB_SYMBOL_UNIT > GetUniqueUnits()
Return a list of unit numbers that are unique to this symbol.
const BOX2I GetBodyBoundingBox(int aUnit, int aConvert, bool aIncludePins, bool aIncludePrivateItems) const
Get the symbol bounding box excluding fields.
static void SetSubpartIdNotation(int aSep, int aFirstId)
Set the separator char between the subpart id and the reference 0 (no separator) or '.
const LIB_SYMBOL & operator=(const LIB_SYMBOL &aSymbol)
LIB_FIELD & GetValueField()
Return reference to the value field.
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).
bool HasUnitDisplayName(int aUnit) override
Return true if the given unit aUnit has a display name defined.
LIB_SYMBOL_SPTR SharedPtr() const
LIB_ITEM * LocateDrawItem(int aUnit, int aConvert, KICAD_T aType, const VECTOR2I &aPoint)
Locate a draw object.
const BOX2I GetUnitBoundingBox(int aUnit, int aConvert, bool aIgnoreHiddenFields=true) const
Get the bounding box for the symbol.
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.
wxString GetDescription() override
std::vector< LIB_PIN * > GetAllLibPins() const
Return a list of pin pointers for all units / converts.
int m_unitCount
Number of units (parts) per package.
int GetUnitCount() const override
For items with units, return the number of units.
void AddField(LIB_FIELD *aField)
Add a field.
LIB_SYMBOL_REF m_parent
Use for inherited symbols.
void GetPins(LIB_PINS &aList, int aUnit=0, int aConvert=0) const
Return a list of pin object pointers from the draw item list.
std::unique_ptr< LIB_SYMBOL > Flatten() const
Return a flattened symbol inheritance to the caller.
int Compare(const LIB_SYMBOL &aRhs, int aCompareFlags=0) const
Comparison test that can be used for operators.
LIB_FIELD & GetDatasheetField()
Return reference to the datasheet field.
bool HasConversion() const
Test if symbol has more than one body conversion type (DeMorgan).
void Print(const RENDER_SETTINGS *aSettings, const VECTOR2I &aOffset, int aMulti, int aConvert, const LIB_SYMBOL_OPTIONS &aOpts, bool aDimmed)
Print symbol.
LIB_PIN * GetPin(const wxString &aNumber, int aUnit=0, int aConvert=0) const
Return pin object with the requested pin aNumber.
void SetFields(const std::vector< LIB_FIELD > &aFieldsList)
Overwrite all the existing fields in this symbol with fields supplied in aFieldsList.
void SetUnitDisplayName(int aUnit, const wxString &aName)
Set the user-defined display name for aUnit to aName for symbols with units.
void SetOffset(const VECTOR2I &aOffset)
Move the symbol aOffset.
wxString GetSearchText() 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.
size_t size(int aType=UNDEFINED_TYPE) const
ITERATOR_BASE< const LIB_ITEM, const MULTIVECTOR< LIB_ITEM, FIRST_TYPE_VAL, LAST_TYPE_VAL >, typename ITEM_PTR_VECTOR::const_iterator > CONST_ITERATOR
void unique()
Remove duplicate elements in list.
ITERATOR_BASE< LIB_ITEM, MULTIVECTOR< LIB_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.
RENDER_SETTINGS * RenderSettings()
bool GetColorMode() const
virtual void SetColor(const COLOR4D &color)=0
Object used to load, save, search, and otherwise manipulate symbol library files.
const wxString GetName() const
Return the file name without path or extension.
#define DEFAULT_PIN_NAME_OFFSET
The intersheets references prefix string.
const INSPECTOR_FUNC & INSPECTOR
#define IS_NEW
New item, just created.
#define STRUCT_DELETED
flag indication structures to be erased
@ FILLED_WITH_BG_BODYCOLOR
bool GetGRForceBlackPenState(void)
@ LAYER_DEVICE_BACKGROUND
@ LAYER_SELECTION_SHADOWS
std::vector< LIB_PIN * > LIB_PINS
Helper for defining a list of pin object pointers.
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
Plot settings, and plotting engines (PostScript, Gerber, HPGL and DXF)
void Format(OUTPUTFORMATTER *out, int aNestLevel, int aCtl, const CPTREE &aTree)
Output a PTREE into s-expression format via an OUTPUTFORMATTER derivative.
constexpr int MilsToIU(int mils) const
std::vector< LIB_ITEM * > m_items
The items unique to this unit and alternate body style.
int m_convert
The alternate body style of the unit.
int m_unit
The unit number.
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 4 are mandatory, and must be instantiated in SCH_COMPONENT and LIB_PART constructors.
@ REFERENCE_FIELD
Field Reference of part, i.e. "IC21".
KICAD_T
The set of class identification values stored in EDA_ITEM::m_structType.