KiCad PCB EDA Suite
Loading...
Searching...
No Matches
lib_symbol.h
Go to the documentation of this file.
1/*
2 * This program source code file is part of KiCad, a free EDA CAD application.
3 *
4 * Copyright (C) 2004-2015 Jean-Pierre Charras, jp.charras at wanadoo.fr
5 * Copyright (C) 2008 Wayne Stambaugh <[email protected]>
6 * Copyright (C) 2022 CERN
7 * Copyright The KiCad Developers, see AUTHORS.txt for contributors.
8 *
9 * This program is free software; you can redistribute it and/or
10 * modify it under the terms of the GNU General Public License
11 * as published by the Free Software Foundation; either version 2
12 * of the License, or (at your option) any later version.
13 *
14 * This program is distributed in the hope that it will be useful,
15 * but WITHOUT ANY WARRANTY; without even the implied warranty of
16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 * GNU General Public License for more details.
18 *
19 * You should have received a copy of the GNU General Public License
20 * along with this program. If not, see <https://www.gnu.org/licenses/>.
21 */
22
23#pragma once
24
25#include <base_units.h>
26#include <embedded_files.h>
27#include <symbol.h>
28#include <sch_field.h>
29#include <sch_pin.h>
30#include <lib_tree_item.h>
31#include <vector>
32#include <core/multivector.h>
33#include <default_values.h>
34
35class LINE_READER;
36class OUTPUTFORMATTER;
37class REPORTER;
39class LIB_SYMBOL;
41
42namespace KIFONT
43{
44 class OUTLINE_FONT;
45}
46
47
50
51
52/* values for member .m_options */
54{
55 ENTRY_NORMAL, // Libentry is a standard symbol (real or alias)
56 ENTRY_GLOBAL_POWER, // Libentry is a power symbol
57 ENTRY_LOCAL_POWER // Libentry is a local power symbol
58};
59
60
61extern bool operator<( const LIB_SYMBOL& aItem1, const LIB_SYMBOL& aItem2 );
62
63
65{
66 int m_unit;
68 std::vector<SCH_ITEM*> m_items;
69};
70
71
78class LIB_SYMBOL : public SYMBOL, public LIB_TREE_ITEM, public EMBEDDED_FILES
79{
80public:
81 LIB_SYMBOL( const wxString& aName, LIB_SYMBOL* aParent = nullptr, LEGACY_SYMBOL_LIB* aLibrary = nullptr );
82
83 LIB_SYMBOL( const LIB_SYMBOL& aSymbol, LEGACY_SYMBOL_LIB* aLibrary = nullptr, bool aCopyEmbeddedFiles = true );
84
85 virtual ~LIB_SYMBOL() = default;
86
88 std::shared_ptr<LIB_SYMBOL> SharedPtr() const { return m_me; }
89
93 virtual LIB_SYMBOL* Duplicate() const
94 {
95 LIB_SYMBOL* dupe = new LIB_SYMBOL( *this, m_library );
96 const_cast<KIID&>( dupe->m_Uuid ) = KIID();
97
98 for( SCH_ITEM& item : dupe->m_drawings )
99 const_cast<KIID&>( item.m_Uuid ) = KIID();
100
101 return dupe;
102 }
103
107 static LIB_SYMBOL* GetDummy();
108
109 void SetParent( LIB_SYMBOL* aParent = nullptr );
110 std::weak_ptr<LIB_SYMBOL>& GetParent() { return m_parent; }
111 const std::weak_ptr<LIB_SYMBOL>& GetParent() const { return m_parent; }
112
118 unsigned GetInheritanceDepth() const;
119
128 std::shared_ptr<LIB_SYMBOL> GetRootSymbol() const;
129
130 virtual wxString GetClass() const override
131 {
132 return wxT( "LIB_SYMBOL" );
133 }
134
135 static inline bool ClassOf( const EDA_ITEM* aItem )
136 {
137 return aItem && aItem->Type() == LIB_SYMBOL_T;
138 }
139
140 virtual void SetName( const wxString& aName );
141 wxString GetName() const override { return m_name; }
142
143 LIB_ID GetLIB_ID() const override { return m_libId; }
144 wxString GetDesc() override { return GetShownDescription(); }
145 wxString GetFootprint() override;
146 int GetSubUnitCount() const override { return GetUnitCount(); }
147
148 const LIB_ID& GetLibId() const override { return m_libId; }
149 void SetLibId( const LIB_ID& aLibId );
150
152 void SetSourceLibId( const LIB_ID& aLibId ) { m_sourceLibId = aLibId; }
153
154 wxString GetLibNickname() const override { return GetLibraryName(); }
155
157 void SetDescription( const wxString& aDescription );
158
160 wxString GetDescription() const override
161 {
162 if( GetDescriptionField().GetText().IsEmpty() && IsDerived() )
163 {
164 if( std::shared_ptr<LIB_SYMBOL> parent = m_parent.lock() )
165 return parent->GetDescription();
166 }
167
168 return GetDescriptionField().GetText();
169 }
170
171 wxString GetShownDescription( int aDepth = 0 ) const override;
172
173 void SetKeyWords( const wxString& aKeyWords );
174
175 wxString GetKeyWords() const override
176 {
177 if( m_keyWords.IsEmpty() && IsDerived() )
178 {
179 if( std::shared_ptr<LIB_SYMBOL> parent = m_parent.lock() )
180 return parent->GetKeyWords();
181 }
182
183 return m_keyWords;
184 }
185
186 wxString GetShownKeyWords( int aDepth = 0 ) const override;
187
188 std::vector<SEARCH_TERM>& GetSearchTerms() override { return m_searchTermsCache; }
189
190 void GetChooserFields( std::map<wxString , wxString>& aColumnMap ) override;
191
195 bool IsRoot() const override { return m_parent.use_count() == 0; }
196 bool IsDerived() const { return !m_parent.expired() && m_parent.use_count() > 0; }
197
198 const wxString GetLibraryName() const;
199
200 LEGACY_SYMBOL_LIB* GetLib() const { return m_library; }
201 void SetLib( LEGACY_SYMBOL_LIB* aLibrary );
202
204
205 void SetFPFilters( const wxArrayString& aFilters ) { m_fpFilters = aFilters; }
206
207 wxArrayString GetFPFilters() const
208 {
209 if( m_fpFilters.IsEmpty() && IsDerived() )
210 {
211 if( std::shared_ptr<LIB_SYMBOL> parent = m_parent.lock() )
212 return parent->GetFPFilters();
213 }
214
215 return m_fpFilters;
216 }
217
230 const BOX2I GetUnitBoundingBox( int aUnit, int aBodyStyle, bool aIgnoreHiddenFields = true,
231 bool aIgnoreLabelsOnInvisiblePins = true ) const;
232
233 const BOX2I GetBoundingBox() const override
234 {
235 return GetUnitBoundingBox( 0, 0 );
236 }
237
248 const BOX2I GetBodyBoundingBox( int aUnit, int aBodyStyle, bool aIncludePins,
249 bool aIncludePrivateItems ) const;
250
251 BOX2I GetBodyBoundingBox() const override
252 {
253 return GetBodyBoundingBox( m_previewUnit, m_previewBodyStyle, false, false );
254 }
255
257 {
259 }
260
261 bool IsGlobalPower() const override;
262 bool IsLocalPower() const override;
263 bool IsPower() const override;
264 bool IsNormal() const override;
265
266 // LIB_TREE_ITEM interface
267 bool IsPowerSymbol() const override { return IsPower(); }
268
269 void SetGlobalPower();
270 void SetLocalPower();
271 void SetNormal();
272
277 void LockUnits( bool aLockUnits ) { m_unitsLocked = aLockUnits; }
278
283 bool UnitsLocked() const { return m_unitsLocked; }
284
290 void SetFields( const std::vector<SCH_FIELD>& aFieldsList );
291
297 void GetFields( std::vector<SCH_FIELD*>& aList, bool aVisibleOnly = false ) const override;
298
302 void CopyFields( std::vector<SCH_FIELD>& aList );
303
307 void AddField( SCH_FIELD* aField );
308
309 void AddField( SCH_FIELD& aField ) { AddField( new SCH_FIELD( aField ) ); }
310
314 int GetNextFieldOrdinal() const;
315
319 SCH_FIELD* GetField( const wxString& aFieldName );
320 const SCH_FIELD* GetField( const wxString& aFieldName ) const;
321
322 SCH_FIELD* FindFieldCaseInsensitive( const wxString& aFieldName );
323 const SCH_FIELD* FindFieldCaseInsensitive( const wxString& aFieldName ) const;
324
325 const SCH_FIELD* GetField( FIELD_T aFieldType ) const;
326 SCH_FIELD* GetField( FIELD_T aFieldType );
327
330 const SCH_FIELD& GetValueField() const;
331
334 const SCH_FIELD& GetReferenceField() const;
335
338 const SCH_FIELD& GetFootprintField() const;
339
342 const SCH_FIELD& GetDatasheetField() const;
343
346 const SCH_FIELD& GetDescriptionField() const;
347
348 wxString GetPrefix();
349
350 const wxString GetRef( const SCH_SHEET_PATH* aSheet, bool aIncludeUnit = false ) const override
351 {
352 return GetReferenceField().GetText();
353 }
354
355 const wxString GetValue( bool aResolve, const SCH_SHEET_PATH* aPath, bool aAllowExtraText,
356 const wxString& aVariantName = wxEmptyString ) const override
357 {
358 return GetValueField().GetText();
359 }
360
361 /*
362 * Field access for property manager
363 */
364 wxString GetRefProp() const
365 {
366 return GetReferenceField().GetText();
367 }
368
369 void SetRefProp( const wxString& aRef )
370 {
371 GetReferenceField().SetText( aRef );
372 }
373
374 wxString GetValueProp() const
375 {
376 return GetValueField().GetText();
377 }
378
379 void SetValueProp( const wxString& aValue )
380 {
381 GetValueField().SetText( aValue );
382 }
383
384 wxString GetFootprintProp() const
385 {
386 return GetFootprintField().GetText();
387 }
388
389 void SetFootprintProp( const wxString& aFootprint )
390 {
391 GetFootprintField().SetText( aFootprint );
392 }
393
394 wxString GetDatasheetProp() const
395 {
396 return GetDatasheetField().GetText();
397 }
398
399 void SetDatasheetProp( const wxString& aDatasheet )
400 {
401 GetDatasheetField().SetText( aDatasheet );
402 }
403
404 wxString GetKeywordsProp() const
405 {
406 return GetKeyWords();
407 }
408
409 void SetKeywordsProp( const wxString& aKeywords )
410 {
411 SetKeyWords( aKeywords );
412 }
413
415 {
416 return IsPower();
417 }
418
419 void SetPowerSymbolProp( bool aIsPower )
420 {
421 if( aIsPower )
423 else
424 SetNormal();
425 }
426
428 {
429 return IsLocalPower();
430 }
431
432 void SetLocalPowerSymbolProp( bool aIsLocalPower )
433 {
434 if( aIsLocalPower )
436 else if( IsPower() )
438 else
439 SetNormal();
440 }
441
443 {
444 return GetPinNameOffset() != 0;
445 }
446
447 void SetPinNamesInsideProp( bool aInside )
448 {
449 if( aInside && GetPinNameOffset() == 0 )
451 else if( !aInside )
452 SetPinNameOffset( 0 );
453 }
454
455 int GetUnitProp() const
456 {
457 return GetUnitCount();
458 }
459
460 void SetUnitProp( int aUnits )
461 {
462 SetUnitCount( aUnits, true );
463 }
464
466 {
467 return !UnitsLocked();
468 }
469
470 void SetUnitsInterchangeableProp( bool aInterchangeable )
471 {
472 LockUnits( !aInterchangeable );
473 }
474
475 wxString GetBodyStyleProp() const override
476 {
477 return GetBodyStyleDescription( 1, false );
478 }
479
480 void SetBodyStyleProp( const wxString& aBodyStyle ) override
481 {
482 // Body style setting is more complex for LIB_SYMBOL
483 // For now, this is primarily for display purposes
484 }
485
487 {
488 return GetExcludedFromSim();
489 }
490
491 void SetExcludedFromSimProp( bool aExclude )
492 {
493 SetExcludedFromSim( aExclude );
494 }
495
497 {
498 return GetExcludedFromBOM();
499 }
500
501 void SetExcludedFromBOMProp( bool aExclude )
502 {
503 SetExcludedFromBOM( aExclude );
504 }
505
507 {
508 return GetExcludedFromBoard();
509 }
510
511 void SetExcludedFromBoardProp( bool aExclude )
512 {
513 SetExcludedFromBoard( aExclude );
514 }
515
517 void SetExcludedFromPosFilesProp( bool aExclude ) { SetExcludedFromPosFiles( aExclude ); }
518
519 std::set<KIFONT::OUTLINE_FONT*> GetFonts() const override;
520
522 const EMBEDDED_FILES* GetEmbeddedFiles() const;
523 void AppendParentEmbeddedFiles( std::vector<EMBEDDED_FILES*>& aStack ) const;
524
525 void EmbedFonts() override;
526
533 void AutoplaceFields( SCH_SCREEN* aScreen, AUTOPLACE_ALGO aAlgo ) override;
534
535 void RunOnChildren( const std::function<void( SCH_ITEM* )>& aFunction, RECURSE_MODE aMode ) override;
536
542 bool ResolveTextVar( wxString* token, int aDepth = 0 ) const;
543
544 void Plot( PLOTTER* aPlotter, bool aBackground, const SCH_PLOT_OPTS& aPlotOpts,
545 int aUnit, int aBodyStyle, const VECTOR2I& aOffset, bool aDimmed ) override;
546
550 void PlotFields( PLOTTER* aPlotter, bool aBackground, const SCH_PLOT_OPTS& aPlotOpts,
551 int aUnit, int aBodyStyle, const VECTOR2I& aOffset, bool aDimmed );
552
559 void AddDrawItem( SCH_ITEM* aItem, bool aSort = true );
560
566 void RemoveDrawItem( SCH_ITEM* aItem );
567
568 void RemoveField( SCH_FIELD* aField ) { RemoveDrawItem( aField ); }
569
578 std::vector<const SCH_PIN*> GetGraphicalPins( int aUnit = 0, int aBodyStyle = 0 ) const;
579 std::vector<SCH_PIN*> GetGraphicalPins( int aUnit = 0, int aBodyStyle = 0 );
580
586 {
587 const SCH_PIN* pin;
588 wxString number;
589 };
590
595 std::vector<LOGICAL_PIN> GetLogicalPins( int aUnit, int aBodyStyle ) const;
596
598 {
599 wxString m_unitName;
600 std::vector<wxString> m_pinNumbers;
601 };
602
606 std::vector<UNIT_PIN_INFO> GetUnitPinInfo() const;
607
608 // Deprecated: use GetGraphicalPins(). This override remains to satisfy SYMBOL's pure virtual.
609 std::vector<SCH_PIN*> GetPins() const override;
610
614 int GetPinCount() override;
615
624 const SCH_PIN* GetPin( const wxString& aNumber, int aUnit = 0, int aBodyStyle = 0 ) const;
625
637 std::vector<SCH_PIN*> GetPinsByNumber( const wxString& aNumber, int aUnit = 0, int aBodyStyle = 0 );
638
650 bool PinsConflictWith( const LIB_SYMBOL& aOtherSymbol, bool aTestNums, bool aTestNames,
651 bool aTestType, bool aTestOrientation, bool aTestLength ) const;
652
658 void Move( const VECTOR2I& aOffset ) override;
659
666 bool HasLegacyAlternateBodyStyle() const;
667
672 int GetMaxPinNumber() const;
673
677 void ClearTempFlags() override;
678 void ClearEditFlags() override;
679
689 SCH_ITEM* LocateDrawItem( int aUnit, int aBodyStyle, KICAD_T aType, const VECTOR2I& aPoint );
690
701 SCH_ITEM* LocateDrawItem( int aUnit, int aBodyStyle, KICAD_T aType, const VECTOR2I& aPoint,
702 const TRANSFORM& aTransform );
703
710 const LIB_ITEMS_CONTAINER& GetDrawItems() const { return m_drawings; }
711
716 void FixupDrawItems();
717
718 INSPECT_RESULT Visit( INSPECTOR inspector, void* testData,
719 const std::vector<KICAD_T>& aScanTypes ) override;
720
732 void SetUnitCount( int aCount, bool aDuplicateDrawItems );
733 int GetUnitCount() const override;
734
735 wxString GetUnitName( int aUnit ) const override
736 {
737 return GetUnitDisplayName( aUnit, true );
738 }
739
743 wxString GetUnitDisplayName( int aUnit, bool aLabel ) const override;
744
745 wxString GetBodyStyleDescription( int aBodyStyle, bool aLabel ) const override;
746
747 std::map<int, wxString>& GetUnitDisplayNames() { return m_unitDisplayNames; }
748 const std::map<int, wxString>& GetUnitDisplayNames() const { return m_unitDisplayNames; }
749
752
757 std::vector<std::set<wxString>>& JumperPinGroups() { return m_jumperPinGroups; }
758 const std::vector<std::set<wxString>>& JumperPinGroups() const { return m_jumperPinGroups; }
759
761 std::optional<const std::set<wxString>> GetJumperPinGroup( const wxString& aPinNumber ) const;
762
767 bool IsMultiUnit() const override { return m_unitCount > 1; }
768
769 static wxString LetterSubReference( int aUnit, wxChar aInitialLetter );
770
771 bool IsMultiBodyStyle() const override { return GetBodyStyleCount() > 1; }
772
773 int GetBodyStyleCount() const override
774 {
775 if( m_demorgan )
776 return 2;
777 else
778 return std::max( 1, (int) m_bodyStyleNames.size() );
779 }
780
781 bool HasDeMorganBodyStyles() const override { return m_demorgan; }
782 void SetHasDeMorganBodyStyles( bool aFlag ) { m_demorgan = aFlag; }
783
784 const std::vector<wxString>& GetBodyStyleNames() const { return m_bodyStyleNames; }
785 void SetBodyStyleNames( const std::vector<wxString>& aBodyStyleNames ) { m_bodyStyleNames = aBodyStyleNames; }
786
798 void SetBodyStyleCount( int aCount, bool aDuplicateDrawItems, bool aDuplicatePins );
799
809 int Compare( const LIB_SYMBOL& aRhs, int aCompareFlags = 0, REPORTER* aReporter = nullptr ) const;
810
811 const LIB_SYMBOL& operator=( const LIB_SYMBOL& aSymbol );
812
820 std::unique_ptr< LIB_SYMBOL > Flatten() const;
821
828 std::vector<struct LIB_SYMBOL_UNIT> GetUnitDrawItems();
829
840 std::vector<SCH_ITEM*> GetUnitDrawItems( int aUnit, int aBodyStyle );
841
848 double Similarity( const SCH_ITEM& aSymbol ) const override;
849
851
852 void SetParentName( const wxString& aParentName ) { m_parentName = aParentName; }
853 const wxString& GetParentName() const { return m_parentName; }
854
855#if defined(DEBUG)
856 void Show( int nestLevel, std::ostream& os ) const override { ShowDummy( os ); }
857#endif
858
859private:
860 // We create a different set parent function for this class, so we hide the inherited one.
862
868 int compare( const SCH_ITEM& aOther, int aCompareFlags = SCH_ITEM::COMPARE_FLAGS::EQUALITY ) const override;
869
870 void deleteAllFields();
871
872 void cacheSearchTerms();
873 void cachePinCount();
875 void cacheChooserFields();
876
877private:
878 std::shared_ptr<LIB_SYMBOL> m_me;
879 std::weak_ptr<LIB_SYMBOL> m_parent;
880
881 wxString m_parentName;
882
886
890
894
896
898
900 wxString m_name;
901 wxString m_keyWords;
902 wxArrayString m_fpFilters;
904
907 std::vector<std::set<wxString> > m_jumperPinGroups;
908
912
913 std::map<int, wxString> m_unitDisplayNames;
914 std::vector<wxString> m_bodyStyleNames;
915
916 // Caches for things that are expensive to compute but required every time
917 // the symbol chooser or other library list is created
918
919 std::vector<SEARCH_TERM> m_searchTermsCache;
922 std::map<wxString, wxString> m_chooserFieldsCache;
923};
constexpr EDA_IU_SCALE schIUScale
Definition base_units.h:123
BOX2< VECTOR2I > BOX2I
Definition box2.h:918
const KIID m_Uuid
Definition eda_item.h:531
KICAD_T Type() const
Returns the type of object.
Definition eda_item.h:108
virtual void SetParent(EDA_ITEM *aParent)
Definition eda_item.cpp:89
EDA_ITEM(EDA_ITEM *parent, KICAD_T idType, bool isSCH_ITEM=false, bool isBOARD_ITEM=false)
Definition eda_item.cpp:37
bool IsEmpty() const
EMBEDDED_FILES()=default
Class OUTLINE_FONT implements outline font drawing.
Definition kiid.h:44
Object used to load, save, search, and otherwise manipulate symbol library files.
A logical library item identifier and consists of various portions much like a URI.
Definition lib_id.h:45
Define a library symbol object.
Definition lib_symbol.h:79
std::vector< SEARCH_TERM > & GetSearchTerms() override
Definition lib_symbol.h:188
LIB_ITEMS_CONTAINER m_drawings
Definition lib_symbol.h:897
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.
Definition lib_symbol.h:345
wxString GetDescription() const override
Definition lib_symbol.h:160
const LIB_ID & GetLibId() const override
Definition lib_symbol.h:148
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
Definition lib_symbol.h:175
void SetGlobalPower()
std::weak_ptr< LIB_SYMBOL > & GetParent()
Definition lib_symbol.h:110
wxString GetBodyStyleProp() const override
Definition lib_symbol.h:475
virtual ~LIB_SYMBOL()=default
LIBRENTRYOPTIONS m_options
Special symbol features such as POWER or NORMAL.
Definition lib_symbol.h:895
wxString GetRefProp() const
Definition lib_symbol.h:364
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
Definition lib_symbol.h:465
const std::map< int, wxString > & GetUnitDisplayNames() const
Definition lib_symbol.h:748
wxString m_shownDescriptionCache
Definition lib_symbol.h:921
std::vector< const SCH_PIN * > GetGraphicalPins(int aUnit=0, int aBodyStyle=0) const
Graphical pins: Return schematic pin objects as drawn (unexpanded), filtered by unit/body.
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
wxString GetPrefix()
void SetSourceLibId(const LIB_ID &aLibId)
Definition lib_symbol.h:152
wxString GetShownKeyWords(int aDepth=0) const override
bool UnitsLocked() const
Check whether symbol units are interchangeable.
Definition lib_symbol.h:283
SCH_FIELD & GetDatasheetField()
Return reference to the datasheet field.
Definition lib_symbol.h:341
void RefreshLibraryTreeCaches()
std::weak_ptr< LIB_SYMBOL > m_parent
Use for inherited symbols.
Definition lib_symbol.h:879
bool IsRoot() const override
For symbols derived from other symbols, IsRoot() indicates no derivation.
Definition lib_symbol.h:195
void SetExcludedFromBoardProp(bool aExclude)
Definition lib_symbol.h:511
void cachePinCount()
std::vector< struct LIB_SYMBOL_UNIT > GetUnitDrawItems()
Return a list of SCH_ITEM objects separated by unit and convert number.
void RemoveField(SCH_FIELD *aField)
Definition lib_symbol.h:568
std::map< int, wxString > m_unitDisplayNames
Definition lib_symbol.h:913
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 (...
Definition lib_symbol.h:907
void ClearTempFlags() override
Clears the status flag all draw objects in this symbol.
void SetKeywordsProp(const wxString &aKeywords)
Definition lib_symbol.h:409
bool IsDerived() const
Definition lib_symbol.h:196
std::map< int, wxString > & GetUnitDisplayNames()
Definition lib_symbol.h:747
void SetDuplicatePinNumbersAreJumpers(bool aEnabled)
Definition lib_symbol.h:751
bool m_demorgan
True if there are two body styles: normal and De Morgan If false, the body style count is taken from ...
Definition lib_symbol.h:891
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.
void SetExcludedFromPosFilesProp(bool aExclude)
Definition lib_symbol.h:517
timestamp_t GetLastModDate() const
Definition lib_symbol.h:203
LIB_ID GetSourceLibId() const
Definition lib_symbol.h:151
void SetLib(LEGACY_SYMBOL_LIB *aLibrary)
bool GetPowerSymbolProp() const
Definition lib_symbol.h:414
bool IsMultiBodyStyle() const override
Definition lib_symbol.h:771
int GetMaxPinNumber() const
virtual LIB_SYMBOL * Duplicate() const
Create a copy of a LIB_SYMBOL and assigns unique KIIDs to the copy and its children.
Definition lib_symbol.h:93
std::vector< SEARCH_TERM > m_searchTermsCache
Definition lib_symbol.h:919
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.
const BOX2I GetBoundingBox() const override
Return the orthogonal bounding box of this object for display purposes.
Definition lib_symbol.h:233
SCH_FIELD * GetField(const wxString &aFieldName)
Find a field within this symbol matching aFieldName; return nullptr if not found.
const wxString GetValue(bool aResolve, const SCH_SHEET_PATH *aPath, bool aAllowExtraText, const wxString &aVariantName=wxEmptyString) const override
Definition lib_symbol.h:355
bool IsPowerSymbol() const override
For symbols that could be a power symbol.
Definition lib_symbol.h:267
SCH_FIELD & GetFootprintField()
Return reference to the footprint field.
Definition lib_symbol.h:337
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 ...
void SetBodyStyleNames(const std::vector< wxString > &aBodyStyleNames)
Definition lib_symbol.h:785
bool IsNormal() const override
wxString m_name
Definition lib_symbol.h:900
void SetUnitsInterchangeableProp(bool aInterchangeable)
Definition lib_symbol.h:470
std::set< KIFONT::OUTLINE_FONT * > GetFonts() const override
LEGACY_SYMBOL_LIB * m_library
Definition lib_symbol.h:899
static bool ClassOf(const EDA_ITEM *aItem)
Definition lib_symbol.h:135
bool GetExcludedFromPosFilesProp() const
Definition lib_symbol.h:516
SCH_FIELD * FindFieldCaseInsensitive(const wxString &aFieldName)
const std::vector< std::set< wxString > > & JumperPinGroups() const
Definition lib_symbol.h:758
wxString m_keyWords
Search keywords.
Definition lib_symbol.h:901
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.
LEGACY_SYMBOL_LIB * GetLib() const
Definition lib_symbol.h:200
wxString GetDatasheetProp() const
Definition lib_symbol.h:394
void LockUnits(bool aLockUnits)
Set interchangeable the property for symbol units.
Definition lib_symbol.h:277
LIB_ITEMS_CONTAINER & GetDrawItems()
Return a reference to the draw item list.
Definition lib_symbol.h:709
std::shared_ptr< LIB_SYMBOL > GetRootSymbol() const
Get the parent symbol that does not have another parent.
void SetRefProp(const wxString &aRef)
Definition lib_symbol.h:369
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 GetUnitName(int aUnit) const override
For items with units, return an identifier for unit x.
Definition lib_symbol.h:735
wxString GetName() const override
Definition lib_symbol.h:141
void SetUnitCount(int aCount, bool aDuplicateDrawItems)
Set the units per symbol count.
void SetDescription(const wxString &aDescription)
Gets the Description field text value *‍/.
void cacheChooserFields()
std::shared_ptr< LIB_SYMBOL > m_me
Definition lib_symbol.h:878
wxString GetValueProp() const
Definition lib_symbol.h:374
bool GetExcludedFromBOMProp() const
Definition lib_symbol.h:496
void SetKeyWords(const wxString &aKeyWords)
SCH_FIELD & GetValueField()
Return reference to the value field.
Definition lib_symbol.h:329
bool IsLocalPower() const override
LIB_SYMBOL(const wxString &aName, LIB_SYMBOL *aParent=nullptr, LEGACY_SYMBOL_LIB *aLibrary=nullptr)
int GetUnitProp() const
Definition lib_symbol.h:455
wxArrayString GetFPFilters() const
Definition lib_symbol.h:207
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...
std::shared_ptr< LIB_SYMBOL > SharedPtr() const
http://www.boost.org/doc/libs/1_55_0/libs/smart_ptr/sp_techniques.html#weak_without_shared.
Definition lib_symbol.h:88
bool GetPinNamesInsideProp() const
Definition lib_symbol.h:442
void SetHasDeMorganBodyStyles(bool aFlag)
Definition lib_symbol.h:782
const std::vector< wxString > & GetBodyStyleNames() const
Definition lib_symbol.h:784
void SetBodyStyleProp(const wxString &aBodyStyle) override
Definition lib_symbol.h:480
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
Definition lib_symbol.h:885
void SetExcludedFromSimProp(bool aExclude)
Definition lib_symbol.h:491
bool GetExcludedFromBoardProp() const
Definition lib_symbol.h:506
std::optional< const std::set< wxString > > GetJumperPinGroup(const wxString &aPinNumber) const
Retrieves the jumper group containing the specified pin number, if one exists.
LIB_ID m_libId
Definition lib_symbol.h:883
void SetLocalPower()
std::vector< SCH_PIN * > GetPins() const override
int GetSubUnitCount() const override
For items with units, return the number of units.
Definition lib_symbol.h:146
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.
Definition lib_symbol.h:154
void AutoplaceFields(SCH_SCREEN *aScreen, AUTOPLACE_ALGO aAlgo) override
Automatically orient all the fields in the symbol.
void SetFootprintProp(const wxString &aFootprint)
Definition lib_symbol.h:389
std::vector< LOGICAL_PIN > GetLogicalPins(int aUnit, int aBodyStyle) const
Return all logical pins (expanded) filtered by unit/body.
bool HasDeMorganBodyStyles() const override
Definition lib_symbol.h:781
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.
Definition lib_symbol.h:888
wxArrayString m_fpFilters
List of suitable footprint names for the symbol (wild card names accepted).
Definition lib_symbol.h:902
void Move(const VECTOR2I &aOffset) override
Move the symbol aOffset.
void SetFPFilters(const wxArrayString &aFilters)
Definition lib_symbol.h:205
bool IsMultiUnit() const override
Definition lib_symbol.h:767
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
bool GetExcludedFromSimProp() const
Definition lib_symbol.h:486
int GetBodyStyleCount() const override
Definition lib_symbol.h:773
void SetDatasheetProp(const wxString &aDatasheet)
Definition lib_symbol.h:399
wxString GetDesc() override
Definition lib_symbol.h:144
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...
const wxString GetRef(const SCH_SHEET_PATH *aSheet, bool aIncludeUnit=false) const override
Definition lib_symbol.h:350
EMBEDDED_FILES * GetEmbeddedFiles() override
void SetPowerSymbolProp(bool aIsPower)
Definition lib_symbol.h:419
void AddField(SCH_FIELD &aField)
Definition lib_symbol.h:309
void SetExcludedFromBOMProp(bool aExclude)
Definition lib_symbol.h:501
int m_unitCount
Number of units (parts) per package.
Definition lib_symbol.h:887
wxString GetShownDescription(int aDepth=0) const override
virtual wxString GetClass() const override
Return the class name.
Definition lib_symbol.h:130
bool IsGlobalPower() const override
LIB_ID m_sourceLibId
For database library symbols; the original symbol.
Definition lib_symbol.h:884
wxString GetBodyStyleDescription(int aBodyStyle, bool aLabel) const override
const wxString & GetParentName() const
Definition lib_symbol.h:853
unsigned GetInheritanceDepth() const
Get the number of parents for this symbol.
int GetUnitCount() const override
wxString GetKeywordsProp() const
Definition lib_symbol.h:404
std::vector< wxString > m_bodyStyleNames
Definition lib_symbol.h:914
void AppendParentEmbeddedFiles(std::vector< EMBEDDED_FILES * > &aStack) const
std::vector< SCH_PIN * > GetPinsByNumber(const wxString &aNumber, int aUnit=0, int aBodyStyle=0)
Return all pin objects with the requested pin aNumber.
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.
Definition lib_symbol.h:251
void SetValueProp(const wxString &aValue)
Definition lib_symbol.h:379
int GetPinCount() override
BOX2I GetBodyAndPinsBoundingBox() const override
Return a bounding box for the symbol body and pins but not the fields.
Definition lib_symbol.h:256
void SetParentName(const wxString &aParentName)
Definition lib_symbol.h:852
std::map< wxString, wxString > m_chooserFieldsCache
Definition lib_symbol.h:922
void SetLibId(const LIB_ID &aLibId)
void cacheSearchTerms()
void AddField(SCH_FIELD *aField)
Add a field.
void ClearEditFlags() override
int m_pinCountCache
Definition lib_symbol.h:920
bool GetLocalPowerSymbolProp() const
Definition lib_symbol.h:427
bool GetDuplicatePinNumbersAreJumpers() const
Definition lib_symbol.h:750
void deleteAllFields()
LIB_ID GetLIB_ID() const override
Definition lib_symbol.h:143
const SCH_PIN * GetPin(const wxString &aNumber, int aUnit=0, int aBodyStyle=0) const
Return pin object with the requested pin aNumber.
bool m_duplicatePinNumbersAreJumpers
Flag that this symbol should automatically treat sets of two or more pins with the same number as jum...
Definition lib_symbol.h:911
void SetUnitProp(int aUnits)
Definition lib_symbol.h:460
wxString GetFootprintProp() const
Definition lib_symbol.h:384
std::vector< std::set< wxString > > & JumperPinGroups()
Each jumper pin group is a set of pin numbers that should be treated as internally connected.
Definition lib_symbol.h:757
void SetPinNamesInsideProp(bool aInside)
Definition lib_symbol.h:447
const std::weak_ptr< LIB_SYMBOL > & GetParent() const
Definition lib_symbol.h:111
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.
wxString m_parentName
The name of the parent symbol or empty if root symbol.
Definition lib_symbol.h:881
void EmbedFonts() override
void SetLocalPowerSymbolProp(bool aIsLocalPower)
Definition lib_symbol.h:432
virtual void SetName(const wxString &aName)
void SetNormal()
SCH_FIELD & GetReferenceField()
Return reference to the reference designator field.
Definition lib_symbol.h:333
const LIB_ITEMS_CONTAINER & GetDrawItems() const
Definition lib_symbol.h:710
void cacheShownDescription()
int GetNextFieldOrdinal() const
Return the next ordinal for a user field for this symbol.
A mix-in to provide polymorphism between items stored in libraries (symbols, aliases and footprints).
An abstract class from which implementation specific LINE_READERs may be derived to read single lines...
Definition richio.h:62
Multivector container type.
Definition multivector.h:43
boost::ptr_vector< SCH_ITEM > ITEM_PTR_VECTOR
Definition multivector.h:61
An interface used to output 8 bit text in a convenient way.
Definition richio.h:291
Base plotter engine class.
Definition plotter.h:133
A pure virtual class used to derive REPORTER objects from.
Definition reporter.h:71
virtual const wxString & GetText() const override
Return the string associated with the text object.
Definition sch_field.h:128
void SetText(const wxString &aText) override
Base class for any item which can be embedded within the SCHEMATIC container class,...
Definition sch_item.h:162
friend class LIB_SYMBOL
Definition sch_item.h:797
SCH_ITEM(EDA_ITEM *aParent, KICAD_T aType, int aUnit=0, int aBodyStyle=0)
Definition sch_item.cpp:52
Handle access to a stack of flattened SCH_SHEET objects by way of a path for creating a flattened sch...
bool GetExcludedFromPosFiles(const SCH_SHEET_PATH *aInstance=nullptr, const wxString &aVariantName=wxEmptyString) const override
Definition symbol.h:227
void SetExcludedFromBoard(bool aExclude, const SCH_SHEET_PATH *aInstance=nullptr, const wxString &aVariantName=wxEmptyString) override
Set or clear exclude from board netlist flag.
Definition symbol.h:206
SYMBOL(KICAD_T idType)
Definition symbol.h:61
int m_previewBodyStyle
Definition symbol.h:277
int GetPinNameOffset() const
Definition symbol.h:159
virtual void SetExcludedFromSim(bool aExcludeFromSim, const SCH_SHEET_PATH *aInstance=nullptr, const wxString &aVariantName=wxEmptyString) override
Set or clear the exclude from simulation flag.
Definition symbol.h:176
virtual bool GetExcludedFromBOM(const SCH_SHEET_PATH *aInstance=nullptr, const wxString &aVariantName=wxEmptyString) const override
Definition symbol.h:197
void SetPinNameOffset(int aOffset)
Set the offset in mils of the pin name text from the pin symbol.
Definition symbol.h:158
bool GetExcludedFromBoard(const SCH_SHEET_PATH *aInstance=nullptr, const wxString &aVariantName=wxEmptyString) const override
Definition symbol.h:212
void SetExcludedFromPosFiles(bool aExclude, const SCH_SHEET_PATH *aInstance=nullptr, const wxString &aVariantName=wxEmptyString) override
Set or clear exclude from position files flag.
Definition symbol.h:221
virtual bool GetExcludedFromSim(const SCH_SHEET_PATH *aInstance=nullptr, const wxString &aVariantName=wxEmptyString) const override
Definition symbol.h:182
int m_previewUnit
Definition symbol.h:276
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.
Definition symbol.h:191
for transforming drawing coordinates for a wxDC device context.
Definition transform.h:42
#define DEFAULT_PIN_NAME_OFFSET
The intersheets references prefix string.
RECURSE_MODE
Definition eda_item.h:48
INSPECT_RESULT
Definition eda_item.h:42
const INSPECTOR_FUNC & INSPECTOR
std::function passed to nested users by ref, avoids copying std::function.
Definition eda_item.h:89
uint32_t timestamp_t
timestamp_t is our type to represent unique IDs for all kinds of elements; historically simply the ti...
Definition kiid.h:41
LIBRENTRYOPTIONS
Definition lib_symbol.h:54
@ ENTRY_NORMAL
Definition lib_symbol.h:55
@ ENTRY_LOCAL_POWER
Definition lib_symbol.h:57
@ ENTRY_GLOBAL_POWER
Definition lib_symbol.h:56
MULTIVECTOR< SCH_ITEM, SCH_SHAPE_T, SCH_PIN_T > LIB_ITEMS_CONTAINER
Definition lib_symbol.h:48
LIB_ITEMS_CONTAINER::ITEM_PTR_VECTOR LIB_ITEMS
Definition lib_symbol.h:49
bool operator<(const LIB_SYMBOL &aItem1, const LIB_SYMBOL &aItem2)
AUTOPLACE_ALGO
Definition sch_item.h:65
Logical pins: Return expanded logical pins based on stacked-pin notation.
Definition lib_symbol.h:586
wxString number
expanded logical pin number
Definition lib_symbol.h:588
const SCH_PIN * pin
pointer to the base graphical pin
Definition lib_symbol.h:587
std::vector< wxString > m_pinNumbers
Definition lib_symbol.h:600
int m_bodyStyle
The alternate body style of the unit.
Definition lib_symbol.h:67
std::vector< SCH_ITEM * > m_items
The items unique to this unit and alternate body style.
Definition lib_symbol.h:68
int m_unit
The unit number.
Definition lib_symbol.h:66
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.
Definition typeinfo.h:71
@ LIB_SYMBOL_T
Definition typeinfo.h:145
VECTOR2< int32_t > VECTOR2I
Definition vector2d.h:683