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#ifndef LIB_SYMBOL_H
28#define LIB_SYMBOL_H
29
30#include <base_units.h>
31#include <embedded_files.h>
32#include <symbol.h>
33#include <sch_field.h>
34#include <sch_pin.h>
35#include <lib_tree_item.h>
36#include <vector>
37#include <core/multivector.h>
38#include <default_values.h>
39
40class LINE_READER;
41class OUTPUTFORMATTER;
42class REPORTER;
44class LIB_SYMBOL;
45class OUTLINE_FONT;
47
48namespace KIFONT
49{
50 class OUTLINE_FONT;
51}
52
53
54typedef std::shared_ptr<LIB_SYMBOL> LIB_SYMBOL_SPTR;
55typedef std::weak_ptr<LIB_SYMBOL> LIB_SYMBOL_REF;
58
59
60/* values for member .m_options */
62{
63 ENTRY_NORMAL, // Libentry is a standard symbol (real or alias)
64 ENTRY_GLOBAL_POWER, // Libentry is a power symbol
65 ENTRY_LOCAL_POWER // Libentry is a local power symbol
66};
67
68
69extern bool operator<( const LIB_SYMBOL& aItem1, const LIB_SYMBOL& aItem2 );
70
71
73{
74 int m_unit;
76 std::vector<SCH_ITEM*> m_items;
77};
78
79
86class LIB_SYMBOL : public SYMBOL, public LIB_TREE_ITEM, public EMBEDDED_FILES
87{
88public:
89 LIB_SYMBOL( const wxString& aName, LIB_SYMBOL* aParent = nullptr,
90 LEGACY_SYMBOL_LIB* aLibrary = nullptr );
91
92 LIB_SYMBOL( const LIB_SYMBOL& aSymbol, LEGACY_SYMBOL_LIB* aLibrary = nullptr );
93
94 virtual ~LIB_SYMBOL() = default;
95
97 LIB_SYMBOL_SPTR SharedPtr() const { return m_me; }
98
102 virtual LIB_SYMBOL* Duplicate() const
103 {
104 LIB_SYMBOL* dupe = new LIB_SYMBOL( *this, m_library );
105 const_cast<KIID&>( dupe->m_Uuid ) = KIID();
106
107 for( SCH_ITEM& item : dupe->m_drawings )
108 const_cast<KIID&>( item.m_Uuid ) = KIID();
109
110 return dupe;
111 }
112
116 static LIB_SYMBOL* GetDummy();
117
118 void SetParent( LIB_SYMBOL* aParent = nullptr );
120 const LIB_SYMBOL_REF& GetParent() const { return m_parent; }
121
127 unsigned GetInheritanceDepth() const;
128
138
139 virtual wxString GetClass() const override
140 {
141 return wxT( "LIB_SYMBOL" );
142 }
143
144 static inline bool ClassOf( const EDA_ITEM* aItem )
145 {
146 return aItem && aItem->Type() == LIB_SYMBOL_T;
147 }
148
149 virtual void SetName( const wxString& aName );
150 wxString GetName() const override { return m_name; }
151
152 LIB_ID GetLIB_ID() const override { return m_libId; }
153 wxString GetDesc() override { return GetDescription(); }
154 int GetSubUnitCount() const override { return GetUnitCount(); }
155
156 const LIB_ID& GetLibId() const override { return m_libId; }
157 void SetLibId( const LIB_ID& aLibId ) { m_libId = aLibId; }
158
160 void SetSourceLibId( const LIB_ID& aLibId ) { m_sourceLibId = aLibId; }
161
162 wxString GetLibNickname() const override { return GetLibraryName(); }
163
165 void SetDescription( const wxString& aDescription )
166 {
167 GetDescriptionField().SetText( aDescription );
168 }
169
171 wxString GetDescription() const override
172 {
173 if( GetDescriptionField().GetText().IsEmpty() && IsDerived() )
174 {
175 if( LIB_SYMBOL_SPTR parent = m_parent.lock() )
176 return parent->GetDescription();
177 }
178
179 return GetDescriptionField().GetText();
180 }
181
182 void SetKeyWords( const wxString& aKeyWords ) { m_keyWords = aKeyWords; }
183
184 wxString GetKeyWords() const override
185 {
186 if( m_keyWords.IsEmpty() && IsDerived() )
187 {
188 if( LIB_SYMBOL_SPTR parent = m_parent.lock() )
189 return parent->GetKeyWords();
190 }
191
192 return m_keyWords;
193 }
194
195 std::vector<SEARCH_TERM> GetSearchTerms() override;
196
197 wxString GetFootprint() override
198 {
199 return GetFootprintField().GetText();
200 }
201
202 void GetChooserFields( std::map<wxString , wxString>& aColumnMap ) override;
203
207 bool IsRoot() const override { return m_parent.use_count() == 0; }
208 bool IsDerived() const { return !m_parent.expired() && m_parent.use_count() > 0; }
209
210 const wxString GetLibraryName() const;
211
212 LEGACY_SYMBOL_LIB* GetLib() const { return m_library; }
213 void SetLib( LEGACY_SYMBOL_LIB* aLibrary ) { m_library = aLibrary; }
214
216
217 void SetFPFilters( const wxArrayString& aFilters ) { m_fpFilters = aFilters; }
218
219 wxArrayString GetFPFilters() const
220 {
221 if( m_fpFilters.IsEmpty() && IsDerived() )
222 {
223 if( LIB_SYMBOL_SPTR parent = m_parent.lock() )
224 return parent->GetFPFilters();
225 }
226
227 return m_fpFilters;
228 }
229
242 const BOX2I GetUnitBoundingBox( int aUnit, int aBodyStyle,
243 bool aIgnoreHiddenFields = true,
244 bool aIgnoreLabelsOnInvisiblePins = true ) const;
245
246 const BOX2I GetBoundingBox() const override
247 {
248 return GetUnitBoundingBox( 0, 0 );
249 }
250
261 const BOX2I GetBodyBoundingBox( int aUnit, int aBodyStyle, bool aIncludePins,
262 bool aIncludePrivateItems ) const;
263
264 BOX2I GetBodyBoundingBox() const override
265 {
266 return GetBodyBoundingBox( m_previewUnit, m_previewBodyStyle, false, false );
267 }
268
270 {
272 }
273
274 bool IsGlobalPower() const override;
275 bool IsLocalPower() const override;
276 bool IsPower() const override;
277 bool IsNormal() const override;
278
279 void SetGlobalPower();
280 void SetLocalPower();
281 void SetNormal();
282
287 void LockUnits( bool aLockUnits ) { m_unitsLocked = aLockUnits; }
288
293 bool UnitsLocked() const { return m_unitsLocked; }
294
300 void SetFields( const std::vector<SCH_FIELD>& aFieldsList );
301
307 void GetFields( std::vector<SCH_FIELD*>& aList, bool aVisibleOnly = false ) const override;
308
312 void CopyFields( std::vector<SCH_FIELD>& aList );
313
317 void AddField( SCH_FIELD* aField );
318
319 void AddField( SCH_FIELD& aField ) { AddField( new SCH_FIELD( aField ) ); }
320
324 int GetNextFieldOrdinal() const;
325
329 SCH_FIELD* GetField( const wxString& aFieldName );
330 const SCH_FIELD* GetField( const wxString& aFieldName ) const;
331
332 SCH_FIELD* FindFieldCaseInsensitive( const wxString& aFieldName );
333
334 const SCH_FIELD* GetField( FIELD_T aFieldType ) const;
335 SCH_FIELD* GetField( FIELD_T aFieldType );
336
339 const SCH_FIELD& GetValueField() const;
340
343 const SCH_FIELD& GetReferenceField() const;
344
347 const SCH_FIELD& GetFootprintField() const;
348
351 const SCH_FIELD& GetDatasheetField() const;
352
355 const SCH_FIELD& GetDescriptionField() const;
356
357 wxString GetPrefix();
358
359 const wxString GetRef( const SCH_SHEET_PATH* aSheet, bool aIncludeUnit = false ) const override
360 {
361 return GetReferenceField().GetText();
362 }
363
364 const wxString GetValue( bool aResolve, const SCH_SHEET_PATH* aPath,
365 bool aAllowExtraText ) const override
366 {
367 return GetValueField().GetText();
368 }
369
370 /*
371 * Field access for property manager
372 */
373 wxString GetRefProp() const
374 {
375 return GetReferenceField().GetText();
376 }
377
378 void SetRefProp( const wxString& aRef )
379 {
380 GetReferenceField().SetText( aRef );
381 }
382
383 wxString GetValueProp() const
384 {
385 return GetValueField().GetText();
386 }
387
388 void SetValueProp( const wxString& aValue )
389 {
390 GetValueField().SetText( aValue );
391 }
392
393 wxString GetFootprintProp() const
394 {
395 return GetFootprintField().GetText();
396 }
397
398 void SetFootprintProp( const wxString& aFootprint )
399 {
400 GetFootprintField().SetText( aFootprint );
401 }
402
403 wxString GetDatasheetProp() const
404 {
405 return GetDatasheetField().GetText();
406 }
407
408 void SetDatasheetProp( const wxString& aDatasheet )
409 {
410 GetDatasheetField().SetText( aDatasheet );
411 }
412
413 wxString GetKeywordsProp() const
414 {
415 return GetKeyWords();
416 }
417
418 void SetKeywordsProp( const wxString& aKeywords )
419 {
420 SetKeyWords( aKeywords );
421 }
422
424 {
425 return IsPower();
426 }
427
428 void SetPowerSymbolProp( bool aIsPower )
429 {
430 if( aIsPower )
432 else
433 SetNormal();
434 }
435
437 {
438 return IsLocalPower();
439 }
440
441 void SetLocalPowerSymbolProp( bool aIsLocalPower )
442 {
443 if( aIsLocalPower )
445 else if( IsPower() )
447 else
448 SetNormal();
449 }
450
452 {
453 return GetPinNameOffset() != 0;
454 }
455
456 void SetPinNamesInsideProp( bool aInside )
457 {
458 if( aInside && GetPinNameOffset() == 0 )
460 else if( !aInside )
461 SetPinNameOffset( 0 );
462 }
463
464 int GetUnitProp() const
465 {
466 return GetUnitCount();
467 }
468
469 void SetUnitProp( int aUnits )
470 {
471 SetUnitCount( aUnits, true );
472 }
473
475 {
476 return !UnitsLocked();
477 }
478
479 void SetUnitsInterchangeableProp( bool aInterchangeable )
480 {
481 LockUnits( !aInterchangeable );
482 }
483
484 wxString GetBodyStyleProp() const override
485 {
486 return GetBodyStyleDescription( 1, false );
487 }
488
489 void SetBodyStyleProp( const wxString& aBodyStyle ) override
490 {
491 // Body style setting is more complex for LIB_SYMBOL
492 // For now, this is primarily for display purposes
493 }
494
496 {
497 return GetExcludedFromSim();
498 }
499
500 void SetExcludedFromSimProp( bool aExclude )
501 {
502 SetExcludedFromSim( aExclude );
503 }
504
506 {
507 return GetExcludedFromBOM();
508 }
509
510 void SetExcludedFromBOMProp( bool aExclude )
511 {
512 SetExcludedFromBOM( aExclude );
513 }
514
515 std::set<KIFONT::OUTLINE_FONT*> GetFonts() const override;
516
518 const EMBEDDED_FILES* GetEmbeddedFiles() const;
519
520 void EmbedFonts() override;
521
528 void AutoplaceFields( SCH_SCREEN* aScreen, AUTOPLACE_ALGO aAlgo ) override;
529
530 void RunOnChildren( const std::function<void( SCH_ITEM* )>& aFunction, RECURSE_MODE aMode ) override;
531
537 bool ResolveTextVar( wxString* token, int aDepth = 0 ) const;
538
539 void Plot( PLOTTER* aPlotter, bool aBackground, const SCH_PLOT_OPTS& aPlotOpts,
540 int aUnit, int aBodyStyle, const VECTOR2I& aOffset, bool aDimmed ) override;
541
545 void PlotFields( PLOTTER* aPlotter, bool aBackground, const SCH_PLOT_OPTS& aPlotOpts,
546 int aUnit, int aBodyStyle, const VECTOR2I& aOffset, bool aDimmed );
547
554 void AddDrawItem( SCH_ITEM* aItem, bool aSort = true );
555
561 void RemoveDrawItem( SCH_ITEM* aItem );
562
563 void RemoveField( SCH_FIELD* aField ) { RemoveDrawItem( aField ); }
564
573 std::vector<SCH_PIN*> GetGraphicalPins( int aUnit = 0, int aBodyStyle = 0 ) const;
574
580 {
582 wxString number;
583 };
584
589 std::vector<LOGICAL_PIN> GetLogicalPins( int aUnit, int aBodyStyle ) const;
590
592 {
593 wxString m_unitName;
594 std::vector<wxString> m_pinNumbers;
595 };
596
600 std::vector<UNIT_PIN_INFO> GetUnitPinInfo() const;
601
602 // Deprecated: use GetGraphicalPins(). This override remains to satisfy SYMBOL's pure virtual.
603 std::vector<SCH_PIN*> GetPins() const override;
604
608 int GetPinCount() override;
609
618 SCH_PIN* GetPin( const wxString& aNumber, int aUnit = 0, int aBodyStyle = 0 ) const;
619
631 bool PinsConflictWith( const LIB_SYMBOL& aOtherSymbol, bool aTestNums, bool aTestNames,
632 bool aTestType, bool aTestOrientation, bool aTestLength ) const;
633
639 void Move( const VECTOR2I& aOffset ) override;
640
647 bool HasLegacyAlternateBodyStyle() const;
648
653 int GetMaxPinNumber() const;
654
658 void ClearTempFlags() override;
659 void ClearEditFlags() override;
660
670 SCH_ITEM* LocateDrawItem( int aUnit, int aBodyStyle, KICAD_T aType, const VECTOR2I& aPoint );
671
682 SCH_ITEM* LocateDrawItem( int aUnit, int aBodyStyle, KICAD_T aType, const VECTOR2I& aPoint,
683 const TRANSFORM& aTransform );
684
691 const LIB_ITEMS_CONTAINER& GetDrawItems() const { return m_drawings; }
692
697 void FixupDrawItems();
698
699 INSPECT_RESULT Visit( INSPECTOR inspector, void* testData,
700 const std::vector<KICAD_T>& aScanTypes ) override;
701
713 void SetUnitCount( int aCount, bool aDuplicateDrawItems );
714 int GetUnitCount() const override;
715
716 wxString GetUnitName( int aUnit ) const override
717 {
718 return GetUnitDisplayName( aUnit, true );
719 }
720
724 wxString GetUnitDisplayName( int aUnit, bool aLabel ) const override;
725
726 wxString GetBodyStyleDescription( int aBodyStyle, bool aLabel ) const override;
727
728 std::map<int, wxString>& GetUnitDisplayNames() { return m_unitDisplayNames; }
729 const std::map<int, wxString>& GetUnitDisplayNames() const { return m_unitDisplayNames; }
730
733
738 std::vector<std::set<wxString>>& JumperPinGroups() { return m_jumperPinGroups; }
739 const std::vector<std::set<wxString>>& JumperPinGroups() const { return m_jumperPinGroups; }
740
742 std::optional<const std::set<wxString>> GetJumperPinGroup( const wxString& aPinNumber ) const;
743
748 bool IsMultiUnit() const override { return m_unitCount > 1; }
749
750 static wxString LetterSubReference( int aUnit, wxChar aInitialLetter );
751
752 bool IsMultiBodyStyle() const override { return GetBodyStyleCount() > 1; }
753
754 int GetBodyStyleCount() const override
755 {
756 if( m_demorgan )
757 return 2;
758 else
759 return std::max( 1, (int) m_bodyStyleNames.size() );
760 }
761
762 bool HasDeMorganBodyStyles() const override { return m_demorgan; }
763 void SetHasDeMorganBodyStyles( bool aFlag ) { m_demorgan = aFlag; }
764
765 const std::vector<wxString>& GetBodyStyleNames() const { return m_bodyStyleNames; }
766 void SetBodyStyleNames( const std::vector<wxString>& aBodyStyleNames ) { m_bodyStyleNames = aBodyStyleNames; }
767
779 void SetBodyStyleCount( int aCount, bool aDuplicateDrawItems, bool aDuplicatePins );
780
790 int Compare( const LIB_SYMBOL& aRhs, int aCompareFlags = 0,
791 REPORTER* aReporter = nullptr ) const;
792
793 const LIB_SYMBOL& operator=( const LIB_SYMBOL& aSymbol );
794
802 std::unique_ptr< LIB_SYMBOL > Flatten() const;
803
810 std::vector<struct LIB_SYMBOL_UNIT> GetUnitDrawItems();
811
822 std::vector<SCH_ITEM*> GetUnitDrawItems( int aUnit, int aBodyStyle );
823
830 double Similarity( const SCH_ITEM& aSymbol ) const override;
831#if defined(DEBUG)
832 void Show( int nestLevel, std::ostream& os ) const override { ShowDummy( os ); }
833#endif
834
835private:
836 // We create a different set parent function for this class, so we hide the inherited one.
838
844 int compare( const SCH_ITEM& aOther,
845 int aCompareFlags = SCH_ITEM::COMPARE_FLAGS::EQUALITY ) const override;
846
847 void deleteAllFields();
848
849private:
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};
885
886#endif // CLASS_LIBENTRY_H
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:87
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:354
wxString GetDescription() const override
Definition lib_symbol.h:171
const LIB_ID & GetLibId() const override
Definition lib_symbol.h:156
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:184
void SetGlobalPower()
wxString GetBodyStyleProp() const override
Definition lib_symbol.h:484
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:373
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:474
const std::map< int, wxString > & GetUnitDisplayNames() const
Definition lib_symbol.h:729
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:160
bool UnitsLocked() const
Check whether symbol units are interchangeable.
Definition lib_symbol.h:293
SCH_FIELD & GetDatasheetField()
Return reference to the datasheet field.
Definition lib_symbol.h:350
bool IsRoot() const override
For symbols derived from other symbols, IsRoot() indicates no derivation.
Definition lib_symbol.h:207
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:563
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:418
bool IsDerived() const
Definition lib_symbol.h:208
std::map< int, wxString > & GetUnitDisplayNames()
Definition lib_symbol.h:728
void SetDuplicatePinNumbersAreJumpers(bool aEnabled)
Definition lib_symbol.h:732
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:197
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:215
LIB_ID GetSourceLibId() const
Definition lib_symbol.h:159
void SetLib(LEGACY_SYMBOL_LIB *aLibrary)
Definition lib_symbol.h:213
bool GetPowerSymbolProp() const
Definition lib_symbol.h:423
bool IsMultiBodyStyle() const override
Definition lib_symbol.h:752
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:102
LIB_SYMBOL_SPTR m_me
Definition lib_symbol.h:850
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:246
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:346
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:766
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:479
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:144
SCH_FIELD * FindFieldCaseInsensitive(const wxString &aFieldName)
const std::vector< std::set< wxString > > & JumperPinGroups() const
Definition lib_symbol.h:739
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:212
wxString GetDatasheetProp() const
Definition lib_symbol.h:403
void LockUnits(bool aLockUnits)
Set interchangeable the property for symbol units.
Definition lib_symbol.h:287
LIB_ITEMS_CONTAINER & GetDrawItems()
Return a reference to the draw item list.
Definition lib_symbol.h:690
void SetRefProp(const wxString &aRef)
Definition lib_symbol.h:378
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:716
wxString GetName() const override
Definition lib_symbol.h:150
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:165
const LIB_SYMBOL_REF & GetParent() const
Definition lib_symbol.h:120
wxString GetValueProp() const
Definition lib_symbol.h:383
bool GetExcludedFromBOMProp() const
Definition lib_symbol.h:505
void SetKeyWords(const wxString &aKeyWords)
Definition lib_symbol.h:182
SCH_FIELD & GetValueField()
Return reference to the value field.
Definition lib_symbol.h:338
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:464
wxArrayString GetFPFilters() const
Definition lib_symbol.h:219
void RemoveDrawItem(SCH_ITEM *aItem)
Remove draw aItem from list.
void GetChooserFields(std::map< wxString, wxString > &aColumnMap) override
Retrieves a key/value map of the fields on this item that should be exposed to the library browser/ch...
bool HasLegacyAlternateBodyStyle() const
Before V10 we didn't store the number of body styles in a symbol – we just looked through all its dra...
bool GetPinNamesInsideProp() const
Definition lib_symbol.h:451
void SetHasDeMorganBodyStyles(bool aFlag)
Definition lib_symbol.h:763
const std::vector< wxString > & GetBodyStyleNames() const
Definition lib_symbol.h:765
void SetBodyStyleProp(const wxString &aBodyStyle) override
Definition lib_symbol.h:489
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:500
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:154
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:162
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:398
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:762
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:217
bool IsMultiUnit() const override
Definition lib_symbol.h:748
void CopyFields(std::vector< SCH_FIELD > &aList)
Create a copy of the SCH_FIELDs, sorted in ordinal order.
void RunOnChildren(const std::function< void(SCH_ITEM *)> &aFunction, RECURSE_MODE aMode) override
std::vector< SCH_PIN * > GetGraphicalPins(int aUnit=0, int aBodyStyle=0) const
Graphical pins: Return schematic pin objects as drawn (unexpanded), filtered by unit/body.
LIB_SYMBOL_SPTR SharedPtr() const
http://www.boost.org/doc/libs/1_55_0/libs/smart_ptr/sp_techniques.html#weak_without_shared.
Definition lib_symbol.h:97
bool GetExcludedFromSimProp() const
Definition lib_symbol.h:495
const wxString GetValue(bool aResolve, const SCH_SHEET_PATH *aPath, bool aAllowExtraText) const override
Definition lib_symbol.h:364
int GetBodyStyleCount() const override
Definition lib_symbol.h:754
void SetDatasheetProp(const wxString &aDatasheet)
Definition lib_symbol.h:408
wxString GetDesc() override
Definition lib_symbol.h:153
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:359
EMBEDDED_FILES * GetEmbeddedFiles() override
void SetPowerSymbolProp(bool aIsPower)
Definition lib_symbol.h:428
void AddField(SCH_FIELD &aField)
Definition lib_symbol.h:319
void SetExcludedFromBOMProp(bool aExclude)
Definition lib_symbol.h:510
int m_unitCount
Number of units (parts) per package.
Definition lib_symbol.h:856
virtual wxString GetClass() const override
Return the class name.
Definition lib_symbol.h:139
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
unsigned GetInheritanceDepth() const
Get the number of parents for this symbol.
int GetUnitCount() const override
LIB_SYMBOL_REF m_parent
Use for inherited symbols.
Definition lib_symbol.h:851
wxString GetKeywordsProp() const
Definition lib_symbol.h:413
std::vector< wxString > m_bodyStyleNames
Definition lib_symbol.h:883
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:264
void SetValueProp(const wxString &aValue)
Definition lib_symbol.h:388
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:269
void SetLibId(const LIB_ID &aLibId)
Definition lib_symbol.h:157
void AddField(SCH_FIELD *aField)
Add a field.
void ClearEditFlags() override
bool GetLocalPowerSymbolProp() const
Definition lib_symbol.h:436
bool GetDuplicatePinNumbersAreJumpers() const
Definition lib_symbol.h:731
void deleteAllFields()
LIB_ID GetLIB_ID() const override
Definition lib_symbol.h:152
LIB_SYMBOL_REF & GetParent()
Definition lib_symbol.h:119
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:469
wxString GetFootprintProp() const
Definition lib_symbol.h:393
LIB_SYMBOL_SPTR GetRootSymbol() const
Get the parent symbol that does not have another parent.
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:738
void SetPinNamesInsideProp(bool aInside)
Definition lib_symbol.h:456
void AddDrawItem(SCH_ITEM *aItem, bool aSort=true)
Add a new draw aItem to the draw object list and sort according to aSort.
wxString GetUnitDisplayName(int aUnit, bool aLabel) const override
Return the user-defined display name for aUnit for symbols with units.
void EmbedFonts() override
void SetLocalPowerSymbolProp(bool aIsLocalPower)
Definition lib_symbol.h:441
virtual void SetName(const wxString &aName)
void SetNormal()
SCH_FIELD & GetReferenceField()
Return reference to the reference designator field.
Definition lib_symbol.h:342
const LIB_ITEMS_CONTAINER & GetDrawItems() const
Definition lib_symbol.h:691
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:94
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:323
Base plotter engine class.
Definition plotter.h:121
A pure virtual class used to derive REPORTER objects from.
Definition reporter.h:73
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:771
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:251
int GetPinNameOffset() const
Definition symbol.h:158
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:175
virtual bool GetExcludedFromBOM(const SCH_SHEET_PATH *aInstance=nullptr, const wxString &aVariantName=wxEmptyString) const override
Definition symbol.h:196
void SetPinNameOffset(int aOffset)
Set the offset in mils of the pin name text from the pin symbol.
Definition symbol.h:157
virtual bool GetExcludedFromSim(const SCH_SHEET_PATH *aInstance=nullptr, const wxString &aVariantName=wxEmptyString) const override
Definition symbol.h:181
int m_previewUnit
Definition symbol.h:250
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:190
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:62
@ ENTRY_NORMAL
Definition lib_symbol.h:63
@ ENTRY_LOCAL_POWER
Definition lib_symbol.h:65
@ ENTRY_GLOBAL_POWER
Definition lib_symbol.h:64
std::weak_ptr< LIB_SYMBOL > LIB_SYMBOL_REF
weak pointer to LIB_SYMBOL
Definition lib_symbol.h:55
MULTIVECTOR< SCH_ITEM, SCH_SHAPE_T, SCH_PIN_T > LIB_ITEMS_CONTAINER
Definition lib_symbol.h:56
std::shared_ptr< LIB_SYMBOL > LIB_SYMBOL_SPTR
shared pointer to LIB_SYMBOL
Definition lib_symbol.h:54
LIB_ITEMS_CONTAINER::ITEM_PTR_VECTOR LIB_ITEMS
Definition lib_symbol.h:57
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:580
wxString number
expanded logical pin number
Definition lib_symbol.h:582
SCH_PIN * pin
pointer to the base graphical pin
Definition lib_symbol.h:581
std::vector< wxString > m_pinNumbers
Definition lib_symbol.h:594
int m_bodyStyle
The alternate body style of the unit.
Definition lib_symbol.h:75
std::vector< SCH_ITEM * > m_items
The items unique to this unit and alternate body style.
Definition lib_symbol.h:76
int m_unit
The unit number.
Definition lib_symbol.h:74
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