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, you may find one here:
21 * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
22 * or you may search the http://www.gnu.org website for the version 2 license,
23 * or you may write to the Free Software Foundation, Inc.,
24 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
25 */
26
27#pragma once
28
29#include <base_units.h>
30#include <embedded_files.h>
31#include <symbol.h>
32#include <sch_field.h>
33#include <sch_pin.h>
34#include <lib_tree_item.h>
35#include <vector>
36#include <core/multivector.h>
37#include <default_values.h>
38
39class LINE_READER;
40class OUTPUTFORMATTER;
41class REPORTER;
43class LIB_SYMBOL;
45
46namespace KIFONT
47{
48 class OUTLINE_FONT;
49}
50
51
54
55
56/* values for member .m_options */
58{
59 ENTRY_NORMAL, // Libentry is a standard symbol (real or alias)
60 ENTRY_GLOBAL_POWER, // Libentry is a power symbol
61 ENTRY_LOCAL_POWER // Libentry is a local power symbol
62};
63
64
65extern bool operator<( const LIB_SYMBOL& aItem1, const LIB_SYMBOL& aItem2 );
66
67
69{
70 int m_unit;
72 std::vector<SCH_ITEM*> m_items;
73};
74
75
82class LIB_SYMBOL : public SYMBOL, public LIB_TREE_ITEM, public EMBEDDED_FILES
83{
84public:
85 LIB_SYMBOL( const wxString& aName, LIB_SYMBOL* aParent = nullptr,
86 LEGACY_SYMBOL_LIB* aLibrary = nullptr );
87
88 LIB_SYMBOL( const LIB_SYMBOL& aSymbol, LEGACY_SYMBOL_LIB* aLibrary = nullptr );
89
90 virtual ~LIB_SYMBOL() = default;
91
93 std::shared_ptr<LIB_SYMBOL> SharedPtr() const { return m_me; }
94
98 virtual LIB_SYMBOL* Duplicate() const
99 {
100 LIB_SYMBOL* dupe = new LIB_SYMBOL( *this, m_library );
101 const_cast<KIID&>( dupe->m_Uuid ) = KIID();
102
103 for( SCH_ITEM& item : dupe->m_drawings )
104 const_cast<KIID&>( item.m_Uuid ) = KIID();
105
106 return dupe;
107 }
108
112 static LIB_SYMBOL* GetDummy();
113
114 void SetParent( LIB_SYMBOL* aParent = nullptr );
115 std::weak_ptr<LIB_SYMBOL>& GetParent() { return m_parent; }
116 const std::weak_ptr<LIB_SYMBOL>& GetParent() const { return m_parent; }
117
123 unsigned GetInheritanceDepth() const;
124
133 std::shared_ptr<LIB_SYMBOL> GetRootSymbol() const;
134
135 virtual wxString GetClass() const override
136 {
137 return wxT( "LIB_SYMBOL" );
138 }
139
140 static inline bool ClassOf( const EDA_ITEM* aItem )
141 {
142 return aItem && aItem->Type() == LIB_SYMBOL_T;
143 }
144
145 virtual void SetName( const wxString& aName );
146 wxString GetName() const override { return m_name; }
147
148 LIB_ID GetLIB_ID() const override { return m_libId; }
149 wxString GetDesc() override { return GetShownDescription(); }
150 wxString GetFootprint() override { return GetFootprintField().GetShownText( false ); }
151 int GetSubUnitCount() const override { return GetUnitCount(); }
152
153 const LIB_ID& GetLibId() const override { return m_libId; }
154 void SetLibId( const LIB_ID& aLibId ) { m_libId = aLibId; }
155
157 void SetSourceLibId( const LIB_ID& aLibId ) { m_sourceLibId = aLibId; }
158
159 wxString GetLibNickname() const override { return GetLibraryName(); }
160
162 void SetDescription( const wxString& aDescription )
163 {
164 GetDescriptionField().SetText( aDescription );
165 }
166
168 wxString GetDescription() const override
169 {
170 if( GetDescriptionField().GetText().IsEmpty() && IsDerived() )
171 {
172 if( std::shared_ptr<LIB_SYMBOL> parent = m_parent.lock() )
173 return parent->GetDescription();
174 }
175
176 return GetDescriptionField().GetText();
177 }
178
179 wxString GetShownDescription( int aDepth = 0 ) const override;
180
181 void SetKeyWords( const wxString& aKeyWords ) { m_keyWords = aKeyWords; }
182
183 wxString GetKeyWords() const override
184 {
185 if( m_keyWords.IsEmpty() && IsDerived() )
186 {
187 if( std::shared_ptr<LIB_SYMBOL> parent = m_parent.lock() )
188 return parent->GetKeyWords();
189 }
190
191 return m_keyWords;
192 }
193
194 wxString GetShownKeyWords( int aDepth = 0 ) const override;
195
196 std::vector<SEARCH_TERM> GetSearchTerms() override;
197
198 void GetChooserFields( std::map<wxString , wxString>& aColumnMap ) override;
199
203 bool IsRoot() const override { return m_parent.use_count() == 0; }
204 bool IsDerived() const { return !m_parent.expired() && m_parent.use_count() > 0; }
205
206 const wxString GetLibraryName() const;
207
208 LEGACY_SYMBOL_LIB* GetLib() const { return m_library; }
209 void SetLib( LEGACY_SYMBOL_LIB* aLibrary ) { m_library = aLibrary; }
210
212
213 void SetFPFilters( const wxArrayString& aFilters ) { m_fpFilters = aFilters; }
214
215 wxArrayString GetFPFilters() const
216 {
217 if( m_fpFilters.IsEmpty() && IsDerived() )
218 {
219 if( std::shared_ptr<LIB_SYMBOL> parent = m_parent.lock() )
220 return parent->GetFPFilters();
221 }
222
223 return m_fpFilters;
224 }
225
238 const BOX2I GetUnitBoundingBox( int aUnit, int aBodyStyle, bool aIgnoreHiddenFields = true,
239 bool aIgnoreLabelsOnInvisiblePins = true ) const;
240
241 const BOX2I GetBoundingBox() const override
242 {
243 return GetUnitBoundingBox( 0, 0 );
244 }
245
256 const BOX2I GetBodyBoundingBox( int aUnit, int aBodyStyle, bool aIncludePins,
257 bool aIncludePrivateItems ) const;
258
259 BOX2I GetBodyBoundingBox() const override
260 {
261 return GetBodyBoundingBox( m_previewUnit, m_previewBodyStyle, false, false );
262 }
263
265 {
267 }
268
269 bool IsGlobalPower() const override;
270 bool IsLocalPower() const override;
271 bool IsPower() const override;
272 bool IsNormal() const override;
273
274 void SetGlobalPower();
275 void SetLocalPower();
276 void SetNormal();
277
282 void LockUnits( bool aLockUnits ) { m_unitsLocked = aLockUnits; }
283
288 bool UnitsLocked() const { return m_unitsLocked; }
289
295 void SetFields( const std::vector<SCH_FIELD>& aFieldsList );
296
302 void GetFields( std::vector<SCH_FIELD*>& aList, bool aVisibleOnly = false ) const override;
303
307 void CopyFields( std::vector<SCH_FIELD>& aList );
308
312 void AddField( SCH_FIELD* aField );
313
314 void AddField( SCH_FIELD& aField ) { AddField( new SCH_FIELD( aField ) ); }
315
319 int GetNextFieldOrdinal() const;
320
324 SCH_FIELD* GetField( const wxString& aFieldName );
325 const SCH_FIELD* GetField( const wxString& aFieldName ) const;
326
327 SCH_FIELD* FindFieldCaseInsensitive( const wxString& aFieldName );
328
329 const SCH_FIELD* GetField( FIELD_T aFieldType ) const;
330 SCH_FIELD* GetField( FIELD_T aFieldType );
331
334 const SCH_FIELD& GetValueField() const;
335
338 const SCH_FIELD& GetReferenceField() const;
339
342 const SCH_FIELD& GetFootprintField() const;
343
346 const SCH_FIELD& GetDatasheetField() const;
347
350 const SCH_FIELD& GetDescriptionField() const;
351
352 wxString GetPrefix();
353
354 const wxString GetRef( const SCH_SHEET_PATH* aSheet, bool aIncludeUnit = false ) const override
355 {
356 return GetReferenceField().GetText();
357 }
358
359 const wxString GetValue( bool aResolve, const SCH_SHEET_PATH* aPath, bool aAllowExtraText ) const override
360 {
361 return GetValueField().GetText();
362 }
363
364 /*
365 * Field access for property manager
366 */
367 wxString GetRefProp() const
368 {
369 return GetReferenceField().GetText();
370 }
371
372 void SetRefProp( const wxString& aRef )
373 {
374 GetReferenceField().SetText( aRef );
375 }
376
377 wxString GetValueProp() const
378 {
379 return GetValueField().GetText();
380 }
381
382 void SetValueProp( const wxString& aValue )
383 {
384 GetValueField().SetText( aValue );
385 }
386
387 wxString GetFootprintProp() const
388 {
389 return GetFootprintField().GetText();
390 }
391
392 void SetFootprintProp( const wxString& aFootprint )
393 {
394 GetFootprintField().SetText( aFootprint );
395 }
396
397 wxString GetDatasheetProp() const
398 {
399 return GetDatasheetField().GetText();
400 }
401
402 void SetDatasheetProp( const wxString& aDatasheet )
403 {
404 GetDatasheetField().SetText( aDatasheet );
405 }
406
407 wxString GetKeywordsProp() const
408 {
409 return GetKeyWords();
410 }
411
412 void SetKeywordsProp( const wxString& aKeywords )
413 {
414 SetKeyWords( aKeywords );
415 }
416
418 {
419 return IsPower();
420 }
421
422 void SetPowerSymbolProp( bool aIsPower )
423 {
424 if( aIsPower )
426 else
427 SetNormal();
428 }
429
431 {
432 return IsLocalPower();
433 }
434
435 void SetLocalPowerSymbolProp( bool aIsLocalPower )
436 {
437 if( aIsLocalPower )
439 else if( IsPower() )
441 else
442 SetNormal();
443 }
444
446 {
447 return GetPinNameOffset() != 0;
448 }
449
450 void SetPinNamesInsideProp( bool aInside )
451 {
452 if( aInside && GetPinNameOffset() == 0 )
454 else if( !aInside )
455 SetPinNameOffset( 0 );
456 }
457
458 int GetUnitProp() const
459 {
460 return GetUnitCount();
461 }
462
463 void SetUnitProp( int aUnits )
464 {
465 SetUnitCount( aUnits, true );
466 }
467
469 {
470 return !UnitsLocked();
471 }
472
473 void SetUnitsInterchangeableProp( bool aInterchangeable )
474 {
475 LockUnits( !aInterchangeable );
476 }
477
478 wxString GetBodyStyleProp() const override
479 {
480 return GetBodyStyleDescription( 1, false );
481 }
482
483 void SetBodyStyleProp( const wxString& aBodyStyle ) override
484 {
485 // Body style setting is more complex for LIB_SYMBOL
486 // For now, this is primarily for display purposes
487 }
488
490 {
491 return GetExcludedFromSim();
492 }
493
494 void SetExcludedFromSimProp( bool aExclude )
495 {
496 SetExcludedFromSim( aExclude );
497 }
498
500 {
501 return GetExcludedFromBOM();
502 }
503
504 void SetExcludedFromBOMProp( bool aExclude )
505 {
506 SetExcludedFromBOM( aExclude );
507 }
508
509 std::set<KIFONT::OUTLINE_FONT*> GetFonts() const override;
510
512 const EMBEDDED_FILES* GetEmbeddedFiles() const;
513 void AppendParentEmbeddedFiles( std::vector<EMBEDDED_FILES*>& aStack ) const;
514
515 void EmbedFonts() override;
516
523 void AutoplaceFields( SCH_SCREEN* aScreen, AUTOPLACE_ALGO aAlgo ) override;
524
525 void RunOnChildren( const std::function<void( SCH_ITEM* )>& aFunction, RECURSE_MODE aMode ) override;
526
532 bool ResolveTextVar( wxString* token, int aDepth = 0 ) const;
533
534 void Plot( PLOTTER* aPlotter, bool aBackground, const SCH_PLOT_OPTS& aPlotOpts,
535 int aUnit, int aBodyStyle, const VECTOR2I& aOffset, bool aDimmed ) override;
536
540 void PlotFields( PLOTTER* aPlotter, bool aBackground, const SCH_PLOT_OPTS& aPlotOpts,
541 int aUnit, int aBodyStyle, const VECTOR2I& aOffset, bool aDimmed );
542
549 void AddDrawItem( SCH_ITEM* aItem, bool aSort = true );
550
556 void RemoveDrawItem( SCH_ITEM* aItem );
557
558 void RemoveField( SCH_FIELD* aField ) { RemoveDrawItem( aField ); }
559
568 std::vector<SCH_PIN*> GetGraphicalPins( int aUnit = 0, int aBodyStyle = 0 ) const;
569
575 {
577 wxString number;
578 };
579
584 std::vector<LOGICAL_PIN> GetLogicalPins( int aUnit, int aBodyStyle ) const;
585
587 {
588 wxString m_unitName;
589 std::vector<wxString> m_pinNumbers;
590 };
591
595 std::vector<UNIT_PIN_INFO> GetUnitPinInfo() const;
596
597 // Deprecated: use GetGraphicalPins(). This override remains to satisfy SYMBOL's pure virtual.
598 std::vector<SCH_PIN*> GetPins() const override;
599
603 int GetPinCount() override;
604
613 SCH_PIN* GetPin( const wxString& aNumber, int aUnit = 0, int aBodyStyle = 0 ) const;
614
626 bool PinsConflictWith( const LIB_SYMBOL& aOtherSymbol, bool aTestNums, bool aTestNames,
627 bool aTestType, bool aTestOrientation, bool aTestLength ) const;
628
634 void Move( const VECTOR2I& aOffset ) override;
635
642 bool HasLegacyAlternateBodyStyle() const;
643
648 int GetMaxPinNumber() const;
649
653 void ClearTempFlags() override;
654 void ClearEditFlags() override;
655
665 SCH_ITEM* LocateDrawItem( int aUnit, int aBodyStyle, KICAD_T aType, const VECTOR2I& aPoint );
666
677 SCH_ITEM* LocateDrawItem( int aUnit, int aBodyStyle, KICAD_T aType, const VECTOR2I& aPoint,
678 const TRANSFORM& aTransform );
679
686 const LIB_ITEMS_CONTAINER& GetDrawItems() const { return m_drawings; }
687
692 void FixupDrawItems();
693
694 INSPECT_RESULT Visit( INSPECTOR inspector, void* testData,
695 const std::vector<KICAD_T>& aScanTypes ) override;
696
708 void SetUnitCount( int aCount, bool aDuplicateDrawItems );
709 int GetUnitCount() const override;
710
711 wxString GetUnitName( int aUnit ) const override
712 {
713 return GetUnitDisplayName( aUnit, true );
714 }
715
719 wxString GetUnitDisplayName( int aUnit, bool aLabel ) const override;
720
721 wxString GetBodyStyleDescription( int aBodyStyle, bool aLabel ) const override;
722
723 std::map<int, wxString>& GetUnitDisplayNames() { return m_unitDisplayNames; }
724 const std::map<int, wxString>& GetUnitDisplayNames() const { return m_unitDisplayNames; }
725
728
733 std::vector<std::set<wxString>>& JumperPinGroups() { return m_jumperPinGroups; }
734 const std::vector<std::set<wxString>>& JumperPinGroups() const { return m_jumperPinGroups; }
735
737 std::optional<const std::set<wxString>> GetJumperPinGroup( const wxString& aPinNumber ) const;
738
743 bool IsMultiUnit() const override { return m_unitCount > 1; }
744
745 static wxString LetterSubReference( int aUnit, wxChar aInitialLetter );
746
747 bool IsMultiBodyStyle() const override { return GetBodyStyleCount() > 1; }
748
749 int GetBodyStyleCount() const override
750 {
751 if( m_demorgan )
752 return 2;
753 else
754 return std::max( 1, (int) m_bodyStyleNames.size() );
755 }
756
757 bool HasDeMorganBodyStyles() const override { return m_demorgan; }
758 void SetHasDeMorganBodyStyles( bool aFlag ) { m_demorgan = aFlag; }
759
760 const std::vector<wxString>& GetBodyStyleNames() const { return m_bodyStyleNames; }
761 void SetBodyStyleNames( const std::vector<wxString>& aBodyStyleNames ) { m_bodyStyleNames = aBodyStyleNames; }
762
774 void SetBodyStyleCount( int aCount, bool aDuplicateDrawItems, bool aDuplicatePins );
775
785 int Compare( const LIB_SYMBOL& aRhs, int aCompareFlags = 0, REPORTER* aReporter = nullptr ) const;
786
787 const LIB_SYMBOL& operator=( const LIB_SYMBOL& aSymbol );
788
796 std::unique_ptr< LIB_SYMBOL > Flatten() const;
797
804 std::vector<struct LIB_SYMBOL_UNIT> GetUnitDrawItems();
805
816 std::vector<SCH_ITEM*> GetUnitDrawItems( int aUnit, int aBodyStyle );
817
824 double Similarity( const SCH_ITEM& aSymbol ) const override;
825
826 void SetParentName( const wxString& aParentName ) { m_parentName = aParentName; }
827 const wxString& GetParentName() const { return m_parentName; }
828
829#if defined(DEBUG)
830 void Show( int nestLevel, std::ostream& os ) const override { ShowDummy( os ); }
831#endif
832
833private:
834 // We create a different set parent function for this class, so we hide the inherited one.
836
842 int compare( const SCH_ITEM& aOther, int aCompareFlags = SCH_ITEM::COMPARE_FLAGS::EQUALITY ) const override;
843
844 void deleteAllFields();
845
846private:
847 std::shared_ptr<LIB_SYMBOL> m_me;
848 std::weak_ptr<LIB_SYMBOL> m_parent;
849
850 wxString m_parentName;
851
855
859
863
865
867
869 wxString m_name;
870 wxString m_keyWords;
871 wxArrayString m_fpFilters;
873
876 std::vector<std::set<wxString> > m_jumperPinGroups;
877
881
882 std::map<int, wxString> m_unitDisplayNames;
883 std::vector<wxString> m_bodyStyleNames;
884};
constexpr EDA_IU_SCALE schIUScale
Definition base_units.h:114
BOX2< VECTOR2I > BOX2I
Definition box2.h:922
const KIID m_Uuid
Definition eda_item.h:516
KICAD_T Type() const
Returns the type of object.
Definition eda_item.h:110
virtual void SetParent(EDA_ITEM *aParent)
Definition eda_item.h:113
EDA_ITEM(EDA_ITEM *parent, KICAD_T idType, bool isSCH_ITEM=false, bool isBOARD_ITEM=false)
Definition eda_item.cpp:39
virtual const wxString & GetText() const
Return the string associated with the text object.
Definition eda_text.h:98
bool IsEmpty() const
EMBEDDED_FILES()=default
Class OUTLINE_FONT implements outline font drawing.
Definition kiid.h:49
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:49
Define a library symbol object.
Definition lib_symbol.h:83
LIB_ITEMS_CONTAINER m_drawings
Definition lib_symbol.h:866
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:349
wxString GetDescription() const override
Definition lib_symbol.h:168
const LIB_ID & GetLibId() const override
Definition lib_symbol.h:153
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:183
void SetGlobalPower()
std::weak_ptr< LIB_SYMBOL > & GetParent()
Definition lib_symbol.h:115
wxString GetBodyStyleProp() const override
Definition lib_symbol.h:478
virtual ~LIB_SYMBOL()=default
LIBRENTRYOPTIONS m_options
Special symbol features such as POWER or NORMAL.
Definition lib_symbol.h:864
wxString GetRefProp() const
Definition lib_symbol.h:367
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:468
const std::map< int, wxString > & GetUnitDisplayNames() const
Definition lib_symbol.h:724
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:157
wxString GetShownKeyWords(int aDepth=0) const override
bool UnitsLocked() const
Check whether symbol units are interchangeable.
Definition lib_symbol.h:288
SCH_FIELD & GetDatasheetField()
Return reference to the datasheet field.
Definition lib_symbol.h:345
std::weak_ptr< LIB_SYMBOL > m_parent
Use for inherited symbols.
Definition lib_symbol.h:848
bool IsRoot() const override
For symbols derived from other symbols, IsRoot() indicates no derivation.
Definition lib_symbol.h:203
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:558
std::map< int, wxString > m_unitDisplayNames
Definition lib_symbol.h:882
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:876
void ClearTempFlags() override
Clears the status flag all draw objects in this symbol.
void SetKeywordsProp(const wxString &aKeywords)
Definition lib_symbol.h:412
bool IsDerived() const
Definition lib_symbol.h:204
std::map< int, wxString > & GetUnitDisplayNames()
Definition lib_symbol.h:723
void SetDuplicatePinNumbersAreJumpers(bool aEnabled)
Definition lib_symbol.h:727
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:860
wxString GetFootprint() override
For items with footprint fields.
Definition lib_symbol.h:150
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
timestamp_t GetLastModDate() const
Definition lib_symbol.h:211
LIB_ID GetSourceLibId() const
Definition lib_symbol.h:156
void SetLib(LEGACY_SYMBOL_LIB *aLibrary)
Definition lib_symbol.h:209
bool GetPowerSymbolProp() const
Definition lib_symbol.h:417
bool IsMultiBodyStyle() const override
Definition lib_symbol.h:747
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:98
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:241
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.
Definition lib_symbol.h:341
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:761
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
wxString m_name
Definition lib_symbol.h:869
void SetUnitsInterchangeableProp(bool aInterchangeable)
Definition lib_symbol.h:473
std::set< KIFONT::OUTLINE_FONT * > GetFonts() const override
LEGACY_SYMBOL_LIB * m_library
Definition lib_symbol.h:868
static bool ClassOf(const EDA_ITEM *aItem)
Definition lib_symbol.h:140
SCH_FIELD * FindFieldCaseInsensitive(const wxString &aFieldName)
const std::vector< std::set< wxString > > & JumperPinGroups() const
Definition lib_symbol.h:734
wxString m_keyWords
Search keywords.
Definition lib_symbol.h:870
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:208
wxString GetDatasheetProp() const
Definition lib_symbol.h:397
void LockUnits(bool aLockUnits)
Set interchangeable the property for symbol units.
Definition lib_symbol.h:282
LIB_ITEMS_CONTAINER & GetDrawItems()
Return a reference to the draw item list.
Definition lib_symbol.h:685
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:372
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:711
wxString GetName() const override
Definition lib_symbol.h:146
void SetUnitCount(int aCount, bool aDuplicateDrawItems)
Set the units per symbol count.
void SetDescription(const wxString &aDescription)
Gets the Description field text value *‍/.
Definition lib_symbol.h:162
std::shared_ptr< LIB_SYMBOL > m_me
Definition lib_symbol.h:847
wxString GetValueProp() const
Definition lib_symbol.h:377
bool GetExcludedFromBOMProp() const
Definition lib_symbol.h:499
void SetKeyWords(const wxString &aKeyWords)
Definition lib_symbol.h:181
SCH_FIELD & GetValueField()
Return reference to the value field.
Definition lib_symbol.h:333
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:458
wxArrayString GetFPFilters() const
Definition lib_symbol.h:215
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:93
bool GetPinNamesInsideProp() const
Definition lib_symbol.h:445
void SetHasDeMorganBodyStyles(bool aFlag)
Definition lib_symbol.h:758
const std::vector< wxString > & GetBodyStyleNames() const
Definition lib_symbol.h:760
void SetBodyStyleProp(const wxString &aBodyStyle) override
Definition lib_symbol.h:483
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:854
void SetExcludedFromSimProp(bool aExclude)
Definition lib_symbol.h:494
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:852
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:151
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:159
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:392
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:757
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:857
wxArrayString m_fpFilters
List of suitable footprint names for the symbol (wild card names accepted).
Definition lib_symbol.h:871
void Move(const VECTOR2I &aOffset) override
Move the symbol aOffset.
void SetFPFilters(const wxArrayString &aFilters)
Definition lib_symbol.h:213
bool IsMultiUnit() const override
Definition lib_symbol.h:743
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.
bool GetExcludedFromSimProp() const
Definition lib_symbol.h:489
const wxString GetValue(bool aResolve, const SCH_SHEET_PATH *aPath, bool aAllowExtraText) const override
Definition lib_symbol.h:359
int GetBodyStyleCount() const override
Definition lib_symbol.h:749
void SetDatasheetProp(const wxString &aDatasheet)
Definition lib_symbol.h:402
wxString GetDesc() override
Definition lib_symbol.h:149
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:354
EMBEDDED_FILES * GetEmbeddedFiles() override
void SetPowerSymbolProp(bool aIsPower)
Definition lib_symbol.h:422
void AddField(SCH_FIELD &aField)
Definition lib_symbol.h:314
void SetExcludedFromBOMProp(bool aExclude)
Definition lib_symbol.h:504
int m_unitCount
Number of units (parts) per package.
Definition lib_symbol.h:856
wxString GetShownDescription(int aDepth=0) const override
virtual wxString GetClass() const override
Return the class name.
Definition lib_symbol.h:135
bool IsGlobalPower() const override
LIB_ID m_sourceLibId
For database library symbols; the original symbol.
Definition lib_symbol.h:853
wxString GetBodyStyleDescription(int aBodyStyle, bool aLabel) const override
const wxString & GetParentName() const
Definition lib_symbol.h:827
unsigned GetInheritanceDepth() const
Get the number of parents for this symbol.
int GetUnitCount() const override
wxString GetKeywordsProp() const
Definition lib_symbol.h:407
std::vector< wxString > m_bodyStyleNames
Definition lib_symbol.h:883
void AppendParentEmbeddedFiles(std::vector< EMBEDDED_FILES * > &aStack) const
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:259
void SetValueProp(const wxString &aValue)
Definition lib_symbol.h:382
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:264
void SetParentName(const wxString &aParentName)
Definition lib_symbol.h:826
void SetLibId(const LIB_ID &aLibId)
Definition lib_symbol.h:154
void AddField(SCH_FIELD *aField)
Add a field.
void ClearEditFlags() override
bool GetLocalPowerSymbolProp() const
Definition lib_symbol.h:430
bool GetDuplicatePinNumbersAreJumpers() const
Definition lib_symbol.h:726
void deleteAllFields()
LIB_ID GetLIB_ID() const override
Definition lib_symbol.h:148
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:880
void SetUnitProp(int aUnits)
Definition lib_symbol.h:463
wxString GetFootprintProp() const
Definition lib_symbol.h:387
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:733
void SetPinNamesInsideProp(bool aInside)
Definition lib_symbol.h:450
const std::weak_ptr< LIB_SYMBOL > & GetParent() const
Definition lib_symbol.h:116
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:850
void EmbedFonts() override
void SetLocalPowerSymbolProp(bool aIsLocalPower)
Definition lib_symbol.h:435
virtual void SetName(const wxString &aName)
void SetNormal()
SCH_FIELD & GetReferenceField()
Return reference to the reference designator field.
Definition lib_symbol.h:337
const LIB_ITEMS_CONTAINER & GetDrawItems() const
Definition lib_symbol.h:686
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:66
Multivector container type.
Definition multivector.h:47
boost::ptr_vector< SCH_ITEM > ITEM_PTR_VECTOR
Definition multivector.h:65
An interface used to output 8 bit text in a convenient way.
Definition richio.h:295
Base plotter engine class.
Definition plotter.h:136
A pure virtual class used to derive REPORTER objects from.
Definition reporter.h:73
wxString GetShownText(const SCH_SHEET_PATH *aPath, bool aAllowExtraText, int aDepth=0) const
void SetText(const wxString &aText) override
Base class for any item which can be embedded within the SCHEMATIC container class,...
Definition sch_item.h:167
friend class LIB_SYMBOL
Definition sch_item.h:773
SCH_ITEM(EDA_ITEM *aParent, KICAD_T aType, int aUnit=0, int aBodyStyle=0)
Definition sch_item.cpp:51
Handle access to a stack of flattened SCH_SHEET objects by way of a path for creating a flattened sch...
SYMBOL(KICAD_T idType)
Definition symbol.h:65
int m_previewBodyStyle
Definition symbol.h:253
int GetPinNameOffset() const
Definition symbol.h:160
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:177
virtual bool GetExcludedFromBOM(const SCH_SHEET_PATH *aInstance=nullptr, const wxString &aVariantName=wxEmptyString) const override
Definition symbol.h:198
void SetPinNameOffset(int aOffset)
Set the offset in mils of the pin name text from the pin symbol.
Definition symbol.h:159
virtual bool GetExcludedFromSim(const SCH_SHEET_PATH *aInstance=nullptr, const wxString &aVariantName=wxEmptyString) const override
Definition symbol.h:183
int m_previewUnit
Definition symbol.h:252
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:192
for transforming drawing coordinates for a wxDC device context.
Definition transform.h:46
#define DEFAULT_PIN_NAME_OFFSET
The intersheets references prefix string.
RECURSE_MODE
Definition eda_item.h:50
INSPECT_RESULT
Definition eda_item.h:44
const INSPECTOR_FUNC & INSPECTOR
std::function passed to nested users by ref, avoids copying std::function.
Definition eda_item.h:91
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:46
LIBRENTRYOPTIONS
Definition lib_symbol.h:58
@ ENTRY_NORMAL
Definition lib_symbol.h:59
@ ENTRY_LOCAL_POWER
Definition lib_symbol.h:61
@ ENTRY_GLOBAL_POWER
Definition lib_symbol.h:60
MULTIVECTOR< SCH_ITEM, SCH_SHAPE_T, SCH_PIN_T > LIB_ITEMS_CONTAINER
Definition lib_symbol.h:52
LIB_ITEMS_CONTAINER::ITEM_PTR_VECTOR LIB_ITEMS
Definition lib_symbol.h:53
bool operator<(const LIB_SYMBOL &aItem1, const LIB_SYMBOL &aItem2)
AUTOPLACE_ALGO
Definition sch_item.h:68
Logical pins: Return expanded logical pins based on stacked-pin notation.
Definition lib_symbol.h:575
wxString number
expanded logical pin number
Definition lib_symbol.h:577
SCH_PIN * pin
pointer to the base graphical pin
Definition lib_symbol.h:576
std::vector< wxString > m_pinNumbers
Definition lib_symbol.h:589
int m_bodyStyle
The alternate body style of the unit.
Definition lib_symbol.h:71
std::vector< SCH_ITEM * > m_items
The items unique to this unit and alternate body style.
Definition lib_symbol.h:72
int m_unit
The unit number.
Definition lib_symbol.h:70
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:78
@ LIB_SYMBOL_T
Definition typeinfo.h:152
VECTOR2< int32_t > VECTOR2I
Definition vector2d.h:695