KiCad PCB EDA Suite
Loading...
Searching...
No Matches
sch_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) 2015 Jean-Pierre Charras, jp.charras at wanadoo.fr
5 * Copyright (C) 2014 Dick Hollenbeck, [email protected]
6 * Copyright (C) 2015 Wayne Stambaugh <[email protected]>
7 * Copyright (C) 2022 CERN
8 * Copyright The KiCad Developers, see AUTHORS.txt for contributors.
9 *
10 * This program is free software; you can redistribute it and/or
11 * modify it under the terms of the GNU General Public License
12 * as published by the Free Software Foundation; either version 2
13 * of the License, or (at your option) any later version.
14 *
15 * This program is distributed in the hope that it will be useful,
16 * but WITHOUT ANY WARRANTY; without even the implied warranty of
17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18 * GNU General Public License for more details.
19 *
20 * You should have received a copy of the GNU General Public License
21 * along with this program; if not, you may find one here:
22 * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
23 * or you may search the http://www.gnu.org website for the version 2 license,
24 * or you may write to the Free Software Foundation, Inc.,
25 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
26 */
27
28#ifndef SCH_SYMBOL_H
29#define SCH_SYMBOL_H
30
31#include <eda_item.h>
32#include <core/typeinfo.h>
33#include <layer_ids.h>
34#include <lib_id.h>
35
36#include <memory>
37#include <string>
38#include <unordered_map>
39#include <vector>
40#include <wx/arrstr.h>
41#include <wx/chartype.h>
42#include <wx/string.h>
43
44#include <schematic.h>
45#include <symbol.h>
46#include <sch_field.h>
47#include <sch_pin.h>
48#include <sch_sheet_path.h> // SCH_SYMBOL_INSTANCE
49#include <transform.h>
50
51struct PICKED_SYMBOL;
52class KIID_PATH;
53class SCH_SCREEN;
54class LIB_SYMBOL;
55class MSG_PANEL_ITEM;
58class SCH_SCREEN;
59class SCH_COMMIT;
60class SCH_SHAPE;
61
62
64typedef std::vector<SCH_FIELD> SCH_FIELDS;
65
66typedef std::weak_ptr<LIB_SYMBOL> PART_REF;
67
68
69extern std::string toUTFTildaText( const wxString& txt );
70
71
75class SCH_SYMBOL : public SYMBOL
76{
77public:
78 SCH_SYMBOL();
79
90 SCH_SYMBOL( const LIB_SYMBOL& aSymbol, const LIB_ID& aLibId, const SCH_SHEET_PATH* aSheet,
91 int aUnit, int aBodyStyle = 0, const VECTOR2I& aPosition = VECTOR2I( 0, 0 ),
92 EDA_ITEM* aParent = nullptr );
93
94 SCH_SYMBOL( const LIB_SYMBOL& aSymbol, const SCH_SHEET_PATH* aSheet, const PICKED_SYMBOL& aSel,
95 const VECTOR2I& aPosition = VECTOR2I( 0, 0 ), EDA_ITEM* aParent = nullptr );
96
106 SCH_SYMBOL( const SCH_SYMBOL& aSymbol );
107
108 ~SCH_SYMBOL();
109
110 static inline bool ClassOf( const EDA_ITEM* aItem )
111 {
112 return aItem && SCH_SYMBOL_T == aItem->Type();
113 }
114
115 wxString GetClass() const override
116 {
117 return wxT( "SCH_SYMBOL" );
118 }
119
133 bool IsMissingLibSymbol() const;
134
135 const std::vector<SCH_SYMBOL_INSTANCE>& GetInstances() const
136 {
137 return m_instances;
138 }
139
140 bool GetInstance( SCH_SYMBOL_INSTANCE& aInstance,
141 const KIID_PATH& aSheetPath, bool aTestFromEnd = false ) const;
142
143 void RemoveInstance( const SCH_SHEET_PATH& aInstancePath );
144
145 void RemoveInstance( const KIID_PATH& aInstancePath );
146
161 bool IsMovableFromAnchorPoint() const override;
162
163 void SetLibId( const LIB_ID& aName );
164
165 const LIB_ID& GetLibId() const override { return m_lib_id; }
166
167 wxString GetSymbolIDAsString() const { return m_lib_id.Format(); }
168
180 void SetSchSymbolLibraryName( const wxString& aName ) { m_schLibSymbolName = aName; }
181 wxString GetSchSymbolLibraryName() const;
182 bool UseLibIdLookup() const { return m_schLibSymbolName.IsEmpty(); }
183
184 std::unique_ptr< LIB_SYMBOL >& GetLibSymbolRef() { return m_part; }
185 const std::unique_ptr< LIB_SYMBOL >& GetLibSymbolRef() const { return m_part; }
186
203 void SetLibSymbol( LIB_SYMBOL* aLibSymbol );
204
208 wxString GetDescription() const override;
209 wxString GetShownDescription( int aDepth = 0 ) const override;
210
214 wxString GetKeyWords() const override;
215 wxString GetShownKeyWords( int aDepth = 0 ) const override;
216
220 wxString GetDatasheet() const;
221
225 void UpdatePins();
226
232 wxString GetUnitDisplayName( int aUnit, bool aLabel ) const override;
233
234 wxString GetBodyStyleDescription( int aBodyStyle, bool aLabel ) const override;
235
236 void SetBodyStyle( int aBodyStyle ) override;
237
238 wxString GetPrefix() const { return m_prefix; }
239 void SetPrefix( const wxString& aPrefix ) { m_prefix = aPrefix; }
240
244 void UpdatePrefix();
245
246 wxString SubReference( int aUnit, bool aAddSeparator = true ) const;
247
253 int GetUnitCount() const override;
254
255 bool IsMultiUnit() const override { return GetUnitCount() > 1; }
256
262 int GetBodyStyleCount() const override;
263
264 bool IsMultiBodyStyle() const override { return GetBodyStyleCount() > 1; }
265
266 bool HasDeMorganBodyStyles() const override;
267
274 void SetOrientation( int aOrientation );
275
291 int GetOrientation() const override;
292
297 {
298 int mirroring = GetOrientation();
299
301
302 SetOrientation( aAngle | mirroring );
303 }
304
321
322 void SetMirrorX( bool aMirror )
323 {
324 int orientation = GetOrientation();
325
326 if( aMirror )
328 else
330
331 SetOrientation( orientation );
332 }
333
334 bool GetMirrorX() const
335 {
337 }
338
339 void SetMirrorY( bool aMirror )
340 {
341 int orientation = GetOrientation();
342
343 if( aMirror )
345 else
347
348 SetOrientation( orientation );
349 }
350
351 bool GetMirrorY() const
352 {
354 }
355
359 void GetContextualTextVars( wxArrayString* aVars ) const;
360
368 bool ResolveTextVar( const SCH_SHEET_PATH* aPath, wxString* token, int aDepth = 0 ) const;
369
378 bool ResolveTextVar( const SCH_SHEET_PATH* aPath, wxString* token,
379 const wxString& aVariantName, int aDepth = 0 ) const;
380
381 void GetMsgPanelInfo( EDA_DRAW_FRAME* aFrame, std::vector<MSG_PANEL_ITEM>& aList ) override;
382
393 void ClearAnnotation( const SCH_SHEET_PATH* aSheetPath, bool aResetPrefix );
394
406 bool AddSheetPathReferenceEntryIfMissing( const KIID_PATH& aSheetPath );
407
408
409 const BOX2I GetBoundingBox() const override;
410
414 BOX2I GetBodyBoundingBox() const override;
415
419 BOX2I GetBodyAndPinsBoundingBox() const override;
420
421
422 //-----<Fields>-----------------------------------------------------------
423
428 SCH_FIELD* GetField( FIELD_T aFieldType );
429 const SCH_FIELD* GetField( FIELD_T aFieldNdx ) const;
430
438 SCH_FIELD* GetField( const wxString& aFieldName );
439 const SCH_FIELD* GetField( const wxString& aFieldName ) const;
440
447 void GetFields( std::vector<SCH_FIELD*>& aVector, bool aVisibleOnly ) const override;
448
452 std::vector<SCH_FIELD>& GetFields() { return m_fields; }
453 const std::vector<SCH_FIELD>& GetFields() const { return m_fields; }
454
462 SCH_FIELD* AddField( const SCH_FIELD& aField );
463
469 void RemoveField( const wxString& aFieldName );
470
471 void RemoveField( SCH_FIELD* aField ) { RemoveField( aField->GetName() ); }
472
480 SCH_FIELD* FindFieldCaseInsensitive( const wxString& aFieldName );
481
485 const wxString GetRef( const SCH_SHEET_PATH* aSheet,
486 bool aIncludeUnit = false ) const override;
487
491 const wxString GetValue( bool aResolve, const SCH_SHEET_PATH* aPath,
492 bool aAllowExtraText, const wxString& aVariantName = wxEmptyString ) const override;
493
494 void SetValueFieldText( const wxString& aValue, const SCH_SHEET_PATH* aInstance = nullptr,
495 const wxString& aVariantName = wxEmptyString );
496
497 const wxString GetFootprintFieldText( bool aResolve, const SCH_SHEET_PATH* aPath,
498 bool aAllowExtraText, const wxString& aVariantName = wxEmptyString ) const;
499 void SetFootprintFieldText( const wxString& aFootprint );
500
501 /*
502 * Field access for property manager
503 */
504 wxString GetRefProp() const
505 {
506 return GetRef( &Schematic()->CurrentSheet() );
507 }
508
509 void SetRefProp( const wxString& aRef );
510
511 wxString GetValueProp() const
512 {
513 return GetValue( false, &Schematic()->CurrentSheet(), false, Schematic()->GetCurrentVariant() );
514 }
515
516 void SetValueProp( const wxString& aValue ); // Implemented in sch_symbol.cpp for tracing
517
518 int GetUnitProp() const
519 {
520 return GetUnitSelection( &Schematic()->CurrentSheet() );
521 }
522
523 void SetFieldText( const wxString& aFieldName, const wxString& aFieldText, const SCH_SHEET_PATH* aPath = nullptr,
524 const wxString& aVariantName = wxEmptyString );
525
526 wxString GetFieldText( const wxString& aFieldName, const SCH_SHEET_PATH* aPath = nullptr,
527 const wxString& aVariantName = wxEmptyString ) const;
528
529 void SetUnitProp( int aUnit )
530 {
531 SetUnitSelection( &Schematic()->CurrentSheet(), aUnit );
532 SetUnit( aUnit );
533 }
534
535 wxString GetBodyStyleProp() const override
536 {
537 return GetBodyStyleDescription( GetBodyStyle(), false );
538 }
539
540 void SetBodyStyleProp( const wxString& aBodyStyle ) override
541 {
542 for( int bodyStyle = 1; bodyStyle <= GetBodyStyleCount(); bodyStyle++ )
543 {
544 if( GetBodyStyleDescription( bodyStyle, false ) == aBodyStyle )
545 {
546 SetBodyStyle( bodyStyle );
547 return;
548 }
549 }
550 }
551
562 void UpdateFields( const SCH_SHEET_PATH* aPath, bool aUpdateStyle, bool aUpdateRef,
563 bool aUpdateOtherFields, bool aResetRef, bool aResetOtherFields );
564
574 void SyncOtherUnits( const SCH_SHEET_PATH& aSourceSheet, SCH_COMMIT& aCommit,
575 PROPERTY_BASE* aProperty,
576 const wxString& aVariantName = wxEmptyString );
577
581 int GetNextFieldOrdinal() const;
582
589 void AutoplaceFields( SCH_SCREEN* aScreen, AUTOPLACE_ALGO aAlgo ) override;
590
591 void RunOnChildren( const std::function<void( SCH_ITEM* )>& aFunction, RECURSE_MODE aMode ) override;
592
593
594 //-----</Fields>----------------------------------------------------------
595
596
603 SCH_PIN* GetPin( const wxString& number ) const;
604
614 std::vector<SCH_PIN*> GetPinsByNumber( const wxString& aNumber ) const;
615
622 std::vector<SCH_PIN*> GetLibPins() const;
623
628 std::vector<SCH_PIN*> GetAllLibPins() const;
629
633 size_t GetFullPinCount() const;
634
638 SCH_PIN* GetPin( SCH_PIN* aLibPin ) const;
639
647 const SCH_PIN* GetPin( const VECTOR2I& aPosition ) const;
648
657 std::vector<const SCH_PIN*> GetPins( const SCH_SHEET_PATH* aSheet ) const;
658 std::vector<SCH_PIN*> GetPins( const SCH_SHEET_PATH* aSheet );
659
660 std::vector<SCH_PIN*> GetPins() const override;
661
662
663 std::vector<std::unique_ptr<SCH_PIN>>& GetRawPins() { return m_pins; }
664
671 void SetRef( const SCH_SHEET_PATH* aSheet, const wxString& aReference );
672
679 bool IsAnnotated( const SCH_SHEET_PATH* aSheet ) const;
680
692 void AddHierarchicalReference( const KIID_PATH& aPath,
693 const wxString& aRef,
694 int aUnit );
695
696 void AddHierarchicalReference( const SCH_SYMBOL_INSTANCE& aInstance );
697
699 int GetUnitSelection( const SCH_SHEET_PATH* aSheet ) const;
700
702 void SetUnitSelection( const SCH_SHEET_PATH* aSheet, int aUnitSelection );
703
705 void SetUnitSelection( int aUnitSelection );
706
707 virtual void SetDNP( bool aEnable, const SCH_SHEET_PATH* aInstance = nullptr,
708 const wxString& aVariantName = wxEmptyString ) override;
709 virtual bool GetDNP( const SCH_SHEET_PATH* aInstance = nullptr,
710 const wxString& aVariantName = wxEmptyString ) const override;
711
712 bool GetDNPProp() const { return GetDNP( &Schematic()->CurrentSheet(), Schematic()->GetCurrentVariant() ); }
713
714 void SetDNPProp( bool aEnable ) { SetDNP( aEnable, &Schematic()->CurrentSheet(),
715 Schematic()->GetCurrentVariant() ); }
716
717 void SetExcludedFromBOM( bool aEnable, const SCH_SHEET_PATH* aInstance = nullptr,
718 const wxString& aVariantName = wxEmptyString ) override;
719 bool GetExcludedFromBOM( const SCH_SHEET_PATH* aInstance = nullptr,
720 const wxString& aVariantName = wxEmptyString ) const override;
721
723 {
724 return GetExcludedFromBOM( &Schematic()->CurrentSheet(), Schematic()->GetCurrentVariant() );
725 }
726
727 void SetExcludedFromBOMProp( bool aEnable )
728 {
729 SetExcludedFromBOM( aEnable, &Schematic()->CurrentSheet(), Schematic()->GetCurrentVariant() );
730 }
731
732 void SetExcludedFromSim( bool aEnable, const SCH_SHEET_PATH* aInstance = nullptr,
733 const wxString& aVariantName = wxEmptyString ) override;
734 bool GetExcludedFromSim( const SCH_SHEET_PATH* aInstance = nullptr,
735 const wxString& aVariantName = wxEmptyString ) const override;
736
738 {
739 return GetExcludedFromSim( &Schematic()->CurrentSheet(), Schematic()->GetCurrentVariant() );
740 }
741
742 void SetExcludedFromSimProp( bool aEnable )
743 {
744 SetExcludedFromSim( aEnable, &Schematic()->CurrentSheet(), Schematic()->GetCurrentVariant() );
745 }
746
747 void SetExcludedFromBoard( bool aEnable, const SCH_SHEET_PATH* aInstance = nullptr,
748 const wxString& aVariantName = wxEmptyString ) override;
749 bool GetExcludedFromBoard( const SCH_SHEET_PATH* aInstance = nullptr,
750 const wxString& aVariantName = wxEmptyString ) const override;
751
753 {
754 return GetExcludedFromBoard( &Schematic()->CurrentSheet(), Schematic()->GetCurrentVariant() );
755 }
756
757 void SetExcludedFromBoardProp( bool aEnable )
758 {
759 SetExcludedFromBoard( aEnable, &Schematic()->CurrentSheet(), Schematic()->GetCurrentVariant() );
760 }
761
762 void SetExcludedFromPosFiles( bool aEnable, const SCH_SHEET_PATH* aInstance = nullptr,
763 const wxString& aVariantName = wxEmptyString ) override;
764 bool GetExcludedFromPosFiles( const SCH_SHEET_PATH* aInstance = nullptr,
765 const wxString& aVariantName = wxEmptyString ) const override;
766
768 {
769 return GetExcludedFromPosFiles( &Schematic()->CurrentSheet(), Schematic()->GetCurrentVariant() );
770 }
771
772 void SetExcludedFromPosFilesProp( bool aEnable )
773 {
774 SetExcludedFromPosFiles( aEnable, &Schematic()->CurrentSheet(), Schematic()->GetCurrentVariant() );
775 }
776
782
783 void Move( const VECTOR2I& aMoveVector ) override
784 {
785 if( aMoveVector == VECTOR2I( 0, 0 ) )
786 return;
787
788 m_pos += aMoveVector;
789
790 for( SCH_FIELD& field : m_fields )
791 field.Move( aMoveVector );
792 }
793
794 void MirrorHorizontally( int aCenter ) override;
795 void MirrorVertically( int aCenter ) override;
796 void Rotate( const VECTOR2I& aCenter, bool aRotateCCW ) override;
797
798 bool Matches( const EDA_SEARCH_DATA& aSearchData, void* aAuxData ) const override;
799
800 void GetEndPoints( std::vector<DANGLING_END_ITEM>& aItemList ) override;
801
812 bool UpdateDanglingState( std::vector<DANGLING_END_ITEM>& aItemListByType,
813 std::vector<DANGLING_END_ITEM>& aItemListByPos,
814 const SCH_SHEET_PATH* aPath = nullptr ) override;
815
816 VECTOR2I GetPinPhysicalPosition( const SCH_PIN* Pin ) const;
817
818 bool IsConnectable() const override { return true; }
819
820 bool HasConnectivityChanges( const SCH_ITEM* aItem,
821 const SCH_SHEET_PATH* aInstance = nullptr ) const override;
822
823 bool CanConnect( const SCH_ITEM* aItem ) const override
824 {
825 return ( aItem->Type() == SCH_LINE_T && aItem->GetLayer() == LAYER_WIRE ) ||
826 ( aItem->Type() == SCH_NO_CONNECT_T ) ||
827 ( aItem->Type() == SCH_JUNCTION_T ) ||
828 ( aItem->Type() == SCH_SYMBOL_T ) ||
829 ( aItem->Type() == SCH_DIRECTIVE_LABEL_T ) ||
830 ( aItem->Type() == SCH_LABEL_T ) ||
831 ( aItem->Type() == SCH_HIER_LABEL_T ) ||
832 ( aItem->Type() == SCH_GLOBAL_LABEL_T );
833 }
834
838 bool IsInNetlist() const;
839
840 std::vector<VECTOR2I> GetConnectionPoints() const override;
841
842 INSPECT_RESULT Visit( INSPECTOR inspector, void* testData,
843 const std::vector<KICAD_T>& aScanTypes ) override;
844
852 SCH_ITEM* GetDrawItem( const VECTOR2I& aPosition, KICAD_T aType = TYPE_NOT_INIT );
853
854 wxString GetItemDescription( UNITS_PROVIDER* aUnitsProvider, bool aFull ) const override;
855
856 BITMAPS GetMenuImage() const override;
857
858 bool operator <( const SCH_ITEM& aItem ) const override;
859
860 bool operator==( const SCH_SYMBOL& aSymbol) const;
861 bool operator!=( const SCH_SYMBOL& aSymbol) const;
862
863 SCH_SYMBOL& operator=( const SCH_SYMBOL& aItem );
864
865 bool IsReplaceable() const override { return true; }
866
867 VECTOR2I GetPosition() const override { return m_pos; }
868 void SetPosition( const VECTOR2I& aPosition ) override { Move( aPosition - m_pos ); }
869
870 int GetX() const { return GetPosition().x; };
871 void SetX( int aX ) { SetPosition( VECTOR2I( aX, GetY() ) ); }
872
873 int GetY() const { return GetPosition().y; }
874 void SetY( int aY ) { SetPosition( VECTOR2I( GetX(), aY ) ); }
875
876 bool HitTest( const VECTOR2I& aPosition, int aAccuracy = 0 ) const override;
877 bool HitTest( const BOX2I& aRect, bool aContained, int aAccuracy = 0 ) const override;
878 bool HitTest( const SHAPE_LINE_CHAIN& aPoly, bool aContained ) const override;
879
880 void Plot( PLOTTER* aPlotter, bool aBackground, const SCH_PLOT_OPTS& aPlotOpts,
881 int aUnit, int aBodyStyle, const VECTOR2I& aOffset, bool aDimmed ) override;
882
890 void PlotPins( PLOTTER* aPlotter ) const;
891
897 void PlotLocalPowerIconShape( PLOTTER* aPlotter ) const;
898
905 void PlotDNP( PLOTTER* aPlotter ) const;
906
916 static void BuildLocalPowerIconShape( std::vector<SCH_SHAPE>& aShapeList, const VECTOR2D& aPos,
917 double aSize, double aLineWidth, bool aHorizontal );
918
919 EDA_ITEM* Clone() const override;
920
921#if defined(DEBUG)
922 void Show( int nestLevel, std::ostream& os ) const override;
923#endif
924
925 void ClearBrightenedPins();
926
927 bool HasBrightenedPins();
928
929 bool IsPointClickableAnchor( const VECTOR2I& aPos ) const override;
930
936 bool IsSymbolLikePowerGlobalLabel() const;
937 bool IsSymbolLikePowerLocalLabel() const;
938
939 bool IsGlobalPower() const override;
940 bool IsLocalPower() const override;
941 bool IsPower() const override;
942 bool IsNormal() const override;
943
944 bool GetShowPinNames() const override;
945 void SetShowPinNames( bool aShow ) override;
946
947 bool GetShowPinNumbers() const override;
948 void SetShowPinNumbers( bool aShow ) override;
949
950 double Similarity( const SCH_ITEM& aOther ) const override;
951
953 std::unordered_set<wxString> GetComponentClassNames( const SCH_SHEET_PATH* aPath ) const;
954
955 void DeleteVariant( const KIID_PATH& aPath, const wxString& aVariantName );
956
957 void RenameVariant( const KIID_PATH& aPath, const wxString& aOldName, const wxString& aNewName );
958
959 void CopyVariant( const KIID_PATH& aPath, const wxString& aSourceVariant,
960 const wxString& aNewVariant );
961
962 std::optional<SCH_SYMBOL_VARIANT> GetVariant( const SCH_SHEET_PATH& aInstance, const wxString& aVariantName ) const;
963 void AddVariant( const SCH_SHEET_PATH& aInstance, const SCH_SYMBOL_VARIANT& aVariant );
964
965 void DeleteVariant( const SCH_SHEET_PATH& aInstance, const wxString& aVariantName )
966 {
967 DeleteVariant( aInstance.Path(), aVariantName );
968 }
969
970 void RenameVariant( const SCH_SHEET_PATH& aInstance, const wxString& aOldName,
971 const wxString& aNewName )
972 {
973 RenameVariant( aInstance.Path(), aOldName, aNewName );
974 }
975
976 void CopyVariant( const SCH_SHEET_PATH& aInstance, const wxString& aSourceVariant,
977 const wxString& aNewVariant )
978 {
979 CopyVariant( aInstance.Path(), aSourceVariant, aNewVariant );
980 }
981
982 bool operator==( const SCH_ITEM& aOther ) const override;
983
984protected:
985 void swapData( SCH_ITEM* aItem ) override;
986
987private:
988 BOX2I doGetBoundingBox( bool aIncludePins, bool aIncludeFields ) const;
989
990 bool doIsConnected( const VECTOR2I& aPosition ) const override;
991
992 void Init( const VECTOR2I& pos = VECTOR2I( 0, 0 ) );
993
995 const SCH_SYMBOL_INSTANCE* getInstance( const KIID_PATH& aPath ) const;
996
997 SCH_SYMBOL_INSTANCE* getInstance( const SCH_SHEET_PATH& aPath ) { return getInstance( aPath.Path() ); }
998 const SCH_SYMBOL_INSTANCE* getInstance( const SCH_SHEET_PATH& aPath ) const { return getInstance( aPath.Path() ); }
999
1000private:
1003 wxString m_prefix;
1007
1016
1017 std::vector<SCH_FIELD> m_fields;
1018
1019 std::unique_ptr<LIB_SYMBOL> m_part;
1022
1023 std::vector<std::unique_ptr<SCH_PIN>> m_pins;
1024 std::unordered_map<SCH_PIN*, SCH_PIN*> m_pinMap;
1025
1031 std::vector<SCH_SYMBOL_INSTANCE> m_instances;
1032
1034 static std::unordered_map<TRANSFORM, int> s_transformToOrientationCache;
1035};
1036
1037
1038#endif /* SCH_SYMBOL_H */
BITMAPS
A list of all bitmap identifiers.
BOX2< VECTOR2I > BOX2I
Definition box2.h:922
The base class for create windows for drawing purpose.
A base class for most all the KiCad significant classes used in schematics and boards.
Definition eda_item.h:98
KICAD_T Type() const
Returns the type of object.
Definition eda_item.h:110
EDA_ITEM(EDA_ITEM *parent, KICAD_T idType, bool isSCH_ITEM=false, bool isBOARD_ITEM=false)
Definition eda_item.cpp:39
A collection of #SYMBOL_LIB objects.
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
EDA_MSG_PANEL items for displaying messages.
Definition msgpanel.h:54
Base plotter engine class.
Definition plotter.h:136
wxString GetName(bool aUseDefaultName=true) const
Return the field name (not translated).
Base class for any item which can be embedded within the SCHEMATIC container class,...
Definition sch_item.h:167
SCHEMATIC * Schematic() const
Search the item hierarchy to find a SCHEMATIC.
Definition sch_item.cpp:252
int GetBodyStyle() const
Definition sch_item.h:247
friend class LIB_SYMBOL
Definition sch_item.h:792
SCH_LAYER_ID GetLayer() const
Return the layer this item is on.
Definition sch_item.h:340
virtual void SetUnit(int aUnit)
Definition sch_item.h:237
SCH_ITEM(EDA_ITEM *aParent, KICAD_T aType, int aUnit=0, int aBodyStyle=0)
Definition sch_item.cpp:54
Handle access to a stack of flattened SCH_SHEET objects by way of a path for creating a flattened sch...
KIID_PATH Path() const
Get the sheet path as an KIID_PATH.
Variant information for a schematic symbol.
Schematic symbol object.
Definition sch_symbol.h:76
wxString GetUnitDisplayName(int aUnit, bool aLabel) const override
Return the display name for a given unit aUnit.
SCH_SYMBOL & operator=(const SCH_SYMBOL &aItem)
int GetUnitProp() const
Definition sch_symbol.h:518
size_t GetFullPinCount() const
std::vector< SCH_SYMBOL_INSTANCE > m_instances
Define the hierarchical path and reference of the symbol.
void UpdatePrefix()
Set the prefix based on the current reference designator.
wxString m_prefix
C, R, U, Q etc - the first character(s) which typically indicate what the symbol is.
wxString GetDescription() const override
std::unordered_map< SCH_PIN *, SCH_PIN * > m_pinMap
Library pin pointer : SCH_PIN indices.
void SetMirrorX(bool aMirror)
Definition sch_symbol.h:322
bool IsSymbolLikePowerGlobalLabel() const
VECTOR2I m_pos
EMBEDDED_FILES * GetEmbeddedFiles() override
SCH_SYMBOLs don't currently support embedded files, but their LIB_SYMBOL counterparts do.
wxString GetSymbolIDAsString() const
Definition sch_symbol.h:167
LIB_ID m_lib_id
Name and library the symbol was loaded from, i.e. 74xx:74LS00.
bool GetExcludedFromSim(const SCH_SHEET_PATH *aInstance=nullptr, const wxString &aVariantName=wxEmptyString) const override
bool HitTest(const VECTOR2I &aPosition, int aAccuracy=0) const override
Test if aPosition is inside or on the boundary of this item.
bool GetShowPinNumbers() const override
wxString GetDatasheet() const
Return the documentation text for the given part alias.
double Similarity(const SCH_ITEM &aOther) const override
Return a measure of how likely the other object is to represent the same object.
void SetLibId(const LIB_ID &aName)
bool HasBrightenedPins()
std::vector< SCH_FIELD > & GetFields()
Return a reference to the vector holding the symbol's fields.
Definition sch_symbol.h:452
BOX2I GetBodyAndPinsBoundingBox() const override
Return a bounding box for the symbol body and pins but not the fields.
wxString GetBodyStyleProp() const override
Definition sch_symbol.h:535
void SetRefProp(const wxString &aRef)
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...
virtual void SetDNP(bool aEnable, const SCH_SHEET_PATH *aInstance=nullptr, const wxString &aVariantName=wxEmptyString) override
SCH_ITEM * GetDrawItem(const VECTOR2I &aPosition, KICAD_T aType=TYPE_NOT_INIT)
Return the symbol library item at aPosition that is part of this symbol.
void GetMsgPanelInfo(EDA_DRAW_FRAME *aFrame, std::vector< MSG_PANEL_ITEM > &aList) override
Populate aList of MSG_PANEL_ITEM objects with it's internal state for display purposes.
std::vector< std::unique_ptr< SCH_PIN > > & GetRawPins()
Definition sch_symbol.h:663
const std::vector< SCH_SYMBOL_INSTANCE > & GetInstances() const
Definition sch_symbol.h:135
void SetPosition(const VECTOR2I &aPosition) override
Definition sch_symbol.h:868
void PlotDNP(PLOTTER *aPlotter) const
Plot the red 'X' over the symbol.
bool operator!=(const SCH_SYMBOL &aSymbol) const
void SetShowPinNumbers(bool aShow) override
Set or clear the pin number visibility flag.
bool IsConnectable() const override
Definition sch_symbol.h:818
SYMBOL_ORIENTATION_PROP GetOrientationProp() const
Definition sch_symbol.h:305
int GetY() const
Definition sch_symbol.h:873
SCH_SYMBOL_INSTANCE * getInstance(const KIID_PATH &aPath)
wxString SubReference(int aUnit, bool aAddSeparator=true) const
wxString GetClass() const override
Return the class name.
Definition sch_symbol.h:115
void RemoveInstance(const SCH_SHEET_PATH &aInstancePath)
void SetFieldText(const wxString &aFieldName, const wxString &aFieldText, const SCH_SHEET_PATH *aPath=nullptr, const wxString &aVariantName=wxEmptyString)
void CopyVariant(const SCH_SHEET_PATH &aInstance, const wxString &aSourceVariant, const wxString &aNewVariant)
Definition sch_symbol.h:976
bool IsAnnotated(const SCH_SHEET_PATH *aSheet) const
Check if the symbol has a valid annotation (reference) for the given sheet path.
void SetMirrorY(bool aMirror)
Definition sch_symbol.h:339
void PlotPins(PLOTTER *aPlotter) const
Plot just the symbol pins.
void SetBodyStyleProp(const wxString &aBodyStyle) override
Definition sch_symbol.h:540
bool UseLibIdLookup() const
Definition sch_symbol.h:182
int GetX() const
Definition sch_symbol.h:870
std::vector< SCH_PIN * > GetPins() const override
bool IsMultiBodyStyle() const override
Definition sch_symbol.h:264
bool GetExcludedFromPosFilesProp() const
Definition sch_symbol.h:767
void RemoveField(const wxString &aFieldName)
Remove a user field from the symbol.
void AutoplaceFields(SCH_SCREEN *aScreen, AUTOPLACE_ALGO aAlgo) override
Automatically orient all the fields in the symbol.
wxString GetFieldText(const wxString &aFieldName, const SCH_SHEET_PATH *aPath=nullptr, const wxString &aVariantName=wxEmptyString) const
void SetExcludedFromSim(bool aEnable, const SCH_SHEET_PATH *aInstance=nullptr, const wxString &aVariantName=wxEmptyString) override
Set or clear the exclude from simulation flag.
void SetExcludedFromSimProp(bool aEnable)
Definition sch_symbol.h:742
void SetBodyStyle(int aBodyStyle) override
void SetShowPinNames(bool aShow) override
Set or clear the pin name visibility flag.
wxString GetKeyWords() const override
wxString GetSchSymbolLibraryName() const
wxString GetShownKeyWords(int aDepth=0) const override
static bool ClassOf(const EDA_ITEM *aItem)
Definition sch_symbol.h:110
void DeleteVariant(const SCH_SHEET_PATH &aInstance, const wxString &aVariantName)
Definition sch_symbol.h:965
bool IsInNetlist() const
void Move(const VECTOR2I &aMoveVector) override
Move the item by aMoveVector to a new position.
Definition sch_symbol.h:783
std::optional< SCH_SYMBOL_VARIANT > GetVariant(const SCH_SHEET_PATH &aInstance, const wxString &aVariantName) const
bool GetExcludedFromBoardProp() const
Definition sch_symbol.h:752
void ClearBrightenedPins()
void SetY(int aY)
Definition sch_symbol.h:874
EDA_ITEM * Clone() const override
Create a duplicate of this item with linked list members set to NULL.
bool HasConnectivityChanges(const SCH_ITEM *aItem, const SCH_SHEET_PATH *aInstance=nullptr) const override
Check if aItem has connectivity changes against this object.
bool GetExcludedFromSimProp() const
Definition sch_symbol.h:737
bool GetExcludedFromBOM(const SCH_SHEET_PATH *aInstance=nullptr, const wxString &aVariantName=wxEmptyString) const override
bool IsGlobalPower() const override
bool GetMirrorX() const
Definition sch_symbol.h:334
wxString GetRefProp() const
Definition sch_symbol.h:504
wxString GetBodyStyleDescription(int aBodyStyle, bool aLabel) const override
bool AddSheetPathReferenceEntryIfMissing(const KIID_PATH &aSheetPath)
Add an instance to the alternate references list (m_instances), if this entry does not already exist.
bool Matches(const EDA_SEARCH_DATA &aSearchData, void *aAuxData) const override
Compare the item against the search criteria in aSearchData.
void SetExcludedFromBOMProp(bool aEnable)
Definition sch_symbol.h:727
static std::unordered_map< TRANSFORM, int > s_transformToOrientationCache
void UpdatePins()
Updates the cache of SCH_PIN objects for each pin.
SCH_FIELD * FindFieldCaseInsensitive(const wxString &aFieldName)
Search for a SCH_FIELD with aFieldName.
const std::unique_ptr< LIB_SYMBOL > & GetLibSymbolRef() const
Definition sch_symbol.h:185
void MirrorVertically(int aCenter) override
Mirror item vertically about aCenter.
bool IsPointClickableAnchor(const VECTOR2I &aPos) const override
void UpdateFields(const SCH_SHEET_PATH *aPath, bool aUpdateStyle, bool aUpdateRef, bool aUpdateOtherFields, bool aResetRef, bool aResetOtherFields)
Restore fields to the original library values.
wxString m_schLibSymbolName
The name used to look up a symbol in the symbol library embedded in a schematic.
void SetRef(const SCH_SHEET_PATH *aSheet, const wxString &aReference)
Set the reference for the given sheet path for this symbol.
const wxString GetValue(bool aResolve, const SCH_SHEET_PATH *aPath, bool aAllowExtraText, const wxString &aVariantName=wxEmptyString) const override
void ClearAnnotation(const SCH_SHEET_PATH *aSheetPath, bool aResetPrefix)
Clear exiting symbol annotation.
void RenameVariant(const KIID_PATH &aPath, const wxString &aOldName, const wxString &aNewName)
bool IsMultiUnit() const override
Definition sch_symbol.h:255
void SetOrientationProp(SYMBOL_ORIENTATION_PROP aAngle)
Orientation/mirroring access for property manager.
Definition sch_symbol.h:296
bool GetShowPinNames() const override
bool HasDeMorganBodyStyles() const override
std::vector< SCH_FIELD > m_fields
Variable length list of fields.
std::vector< SCH_PIN * > GetAllLibPins() const
const wxString GetFootprintFieldText(bool aResolve, const SCH_SHEET_PATH *aPath, bool aAllowExtraText, const wxString &aVariantName=wxEmptyString) const
int GetBodyStyleCount() const override
Return the number of body styles of the symbol.
void SetOrientation(int aOrientation)
Compute the new transform matrix based on aOrientation for the symbol which is applied to the current...
bool GetDNPProp() const
Definition sch_symbol.h:712
const BOX2I GetBoundingBox() const override
Return the orthogonal bounding box of this object for display purposes.
void SetFootprintFieldText(const wxString &aFootprint)
bool doIsConnected(const VECTOR2I &aPosition) const override
Provide the object specific test to see if it is connected to aPosition.
void AddHierarchicalReference(const KIID_PATH &aPath, const wxString &aRef, int aUnit)
Add a full hierarchical reference to this symbol.
bool IsMissingLibSymbol() const
Check to see if the library symbol is set to the dummy library symbol.
VECTOR2I GetPosition() const override
Definition sch_symbol.h:867
std::unique_ptr< LIB_SYMBOL > m_part
A flattened copy of the LIB_SYMBOL from the PROJECT object's libraries.
int GetNextFieldOrdinal() const
Return the next ordinal for a user field for this symbol.
void SetExcludedFromPosFiles(bool aEnable, const SCH_SHEET_PATH *aInstance=nullptr, const wxString &aVariantName=wxEmptyString) override
void swapData(SCH_ITEM *aItem) override
Swap the internal data structures aItem with the schematic item.
bool ResolveTextVar(const SCH_SHEET_PATH *aPath, wxString *token, int aDepth=0) const
Resolve any references to system tokens supported by the symbol.
const std::vector< SCH_FIELD > & GetFields() const
Definition sch_symbol.h:453
SCH_SYMBOL_INSTANCE * getInstance(const SCH_SHEET_PATH &aPath)
Definition sch_symbol.h:997
bool CanConnect(const SCH_ITEM *aItem) const override
Definition sch_symbol.h:823
void SyncOtherUnits(const SCH_SHEET_PATH &aSourceSheet, SCH_COMMIT &aCommit, PROPERTY_BASE *aProperty, const wxString &aVariantName=wxEmptyString)
Keep fields other than the reference, include/exclude flags, and alternate pin assignments in sync in...
void Init(const VECTOR2I &pos=VECTOR2I(0, 0))
void SetExcludedFromPosFilesProp(bool aEnable)
Definition sch_symbol.h:772
wxString GetShownDescription(int aDepth=0) const override
const LIB_ID & GetLibId() const override
Definition sch_symbol.h:165
bool operator<(const SCH_ITEM &aItem) const override
static void BuildLocalPowerIconShape(std::vector< SCH_SHAPE > &aShapeList, const VECTOR2D &aPos, double aSize, double aLineWidth, bool aHorizontal)
Build the local power pin indicator icon shape, at coordinate aPos.
void GetContextualTextVars(wxArrayString *aVars) const
Return the list of system text vars & fields for this symbol.
void SetValueProp(const wxString &aValue)
void SetUnitProp(int aUnit)
Definition sch_symbol.h:529
void RenameVariant(const SCH_SHEET_PATH &aInstance, const wxString &aOldName, const wxString &aNewName)
Definition sch_symbol.h:970
void SetSchSymbolLibraryName(const wxString &aName)
The name of the symbol in the schematic library symbol list.
Definition sch_symbol.h:180
void MirrorHorizontally(int aCenter) override
Mirror item horizontally about aCenter.
void SetValueFieldText(const wxString &aValue, const SCH_SHEET_PATH *aInstance=nullptr, const wxString &aVariantName=wxEmptyString)
std::vector< SCH_PIN * > GetLibPins() const
Populate a vector with all the pins from the library object that match the current unit and bodyStyle...
bool UpdateDanglingState(std::vector< DANGLING_END_ITEM > &aItemListByType, std::vector< DANGLING_END_ITEM > &aItemListByPos, const SCH_SHEET_PATH *aPath=nullptr) override
Test if the symbol's dangling state has changed for all pins.
bool GetExcludedFromPosFiles(const SCH_SHEET_PATH *aInstance=nullptr, const wxString &aVariantName=wxEmptyString) const override
bool GetInstance(SCH_SYMBOL_INSTANCE &aInstance, const KIID_PATH &aSheetPath, bool aTestFromEnd=false) const
void AddVariant(const SCH_SHEET_PATH &aInstance, const SCH_SYMBOL_VARIANT &aVariant)
BOX2I doGetBoundingBox(bool aIncludePins, bool aIncludeFields) const
bool GetMirrorY() const
Definition sch_symbol.h:351
SCH_FIELD * AddField(const SCH_FIELD &aField)
Add a field to the symbol.
void SetDNPProp(bool aEnable)
Definition sch_symbol.h:714
bool GetExcludedFromBoard(const SCH_SHEET_PATH *aInstance=nullptr, const wxString &aVariantName=wxEmptyString) const override
std::vector< SCH_PIN * > GetPinsByNumber(const wxString &aNumber) const
Find all symbol pins with the given number.
void GetEndPoints(std::vector< DANGLING_END_ITEM > &aItemList) override
Add the schematic item end points to aItemList if the item has end points.
void RemoveField(SCH_FIELD *aField)
Definition sch_symbol.h:471
void SetX(int aX)
Definition sch_symbol.h:871
std::vector< VECTOR2I > GetConnectionPoints() const override
Add all the connection points for this item to aPoints.
BITMAPS GetMenuImage() const override
Return a pointer to an image to be used in menus.
const SCH_SYMBOL_INSTANCE * getInstance(const SCH_SHEET_PATH &aPath) const
Definition sch_symbol.h:998
bool m_isInNetlist
True if the symbol should appear in netlist.
int GetUnitSelection(const SCH_SHEET_PATH *aSheet) const
Return the instance-specific unit selection for the given sheet path.
SCH_PIN * GetPin(const wxString &number) const
Find a symbol pin by number.
wxString GetValueProp() const
Definition sch_symbol.h:511
bool IsLocalPower() const override
void RunOnChildren(const std::function< void(SCH_ITEM *)> &aFunction, RECURSE_MODE aMode) override
int GetUnitCount() const override
Return the number of units per package of the symbol.
void SetPrefix(const wxString &aPrefix)
Definition sch_symbol.h:239
int GetOrientation() const override
Get the display symbol orientation.
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.
bool IsSymbolLikePowerLocalLabel() const
bool GetExcludedFromBOMProp() const
Definition sch_symbol.h:722
void SetUnitSelection(const SCH_SHEET_PATH *aSheet, int aUnitSelection)
Set the selected unit of this symbol on one sheet.
void SetExcludedFromBoardProp(bool aEnable)
Definition sch_symbol.h:757
void SetExcludedFromBOM(bool aEnable, const SCH_SHEET_PATH *aInstance=nullptr, const wxString &aVariantName=wxEmptyString) override
Set or clear the exclude from schematic bill of materials flag.
void PlotLocalPowerIconShape(PLOTTER *aPlotter) const
Plot the local power pin indicator icon shape.
bool IsNormal() const override
std::unique_ptr< LIB_SYMBOL > & GetLibSymbolRef()
Definition sch_symbol.h:184
std::unordered_set< wxString > GetComponentClassNames(const SCH_SHEET_PATH *aPath) const
Return the component classes this symbol belongs in.
std::vector< std::unique_ptr< SCH_PIN > > m_pins
A SCH_PIN for every #LIB_PIN.
void DeleteVariant(const KIID_PATH &aPath, const wxString &aVariantName)
bool IsReplaceable() const override
Override this method in any derived object that supports test find and replace.
Definition sch_symbol.h:865
void SetLibSymbol(LIB_SYMBOL *aLibSymbol)
Set this schematic symbol library symbol reference to aLibSymbol.
VECTOR2I GetPinPhysicalPosition(const SCH_PIN *Pin) const
BOX2I GetBodyBoundingBox() const override
Return a bounding box for the symbol body but not the pins or fields.
virtual bool GetDNP(const SCH_SHEET_PATH *aInstance=nullptr, const wxString &aVariantName=wxEmptyString) const override
Set or clear the 'Do Not Populate' flag.
const wxString GetRef(const SCH_SHEET_PATH *aSheet, bool aIncludeUnit=false) const override
wxString GetPrefix() const
Definition sch_symbol.h:238
void Rotate(const VECTOR2I &aCenter, bool aRotateCCW) override
Rotate the item around aCenter 90 degrees in the clockwise direction.
wxString GetItemDescription(UNITS_PROVIDER *aUnitsProvider, bool aFull) const override
Return a user-visible description string of this item.
bool IsMovableFromAnchorPoint() const override
Return true for items which are moved with the anchor point at mouse cursor and false for items moved...
bool IsPower() const override
void SetExcludedFromBoard(bool aEnable, const SCH_SHEET_PATH *aInstance=nullptr, const wxString &aVariantName=wxEmptyString) override
void CopyVariant(const KIID_PATH &aPath, const wxString &aSourceVariant, const wxString &aNewVariant)
bool operator==(const SCH_SYMBOL &aSymbol) const
SCH_FIELD * GetField(FIELD_T aFieldType)
Return a mandatory field in this symbol.
Represent a polyline containing arcs as well as line segments: A chain of connected line and/or arc s...
SYMBOL(KICAD_T idType)
Definition symbol.h:65
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
@ LAYER_WIRE
Definition layer_ids.h:452
AUTOPLACE_ALGO
Definition sch_item.h:68
Definition of the SCH_SHEET_PATH and SCH_SHEET_LIST classes for Eeschema.
std::string toUTFTildaText(const wxString &txt)
Convert a wxString to UTF8 and replace any control characters with a ~, where a control character is ...
std::weak_ptr< LIB_SYMBOL > PART_REF
Definition sch_symbol.h:66
std::vector< SCH_FIELD > SCH_FIELDS
A container for several SCH_FIELD items.
Definition sch_symbol.h:64
A simple container for schematic symbol instance information.
SYMBOL_ORIENTATION_PROP
Definition symbol.h:51
@ SYMBOL_ANGLE_180
Definition symbol.h:54
@ SYMBOL_ANGLE_0
Definition symbol.h:52
@ SYMBOL_ANGLE_90
Definition symbol.h:53
@ SYMBOL_ANGLE_270
Definition symbol.h:55
SYMBOL_ORIENTATION_T
enum used in RotationMiroir()
Definition symbol.h:35
@ SYM_ORIENT_270
Definition symbol.h:42
@ SYM_MIRROR_Y
Definition symbol.h:44
@ SYM_ORIENT_180
Definition symbol.h:41
@ SYM_MIRROR_X
Definition symbol.h:43
@ SYM_NORMAL
Definition symbol.h:36
@ SYM_ORIENT_90
Definition symbol.h:40
@ SYM_ORIENT_0
Definition symbol.h:39
FIELD_T
The set of all field indices assuming an array like sequence that a SCH_COMPONENT or LIB_PART can hol...
KICAD_T
The set of class identification values stored in EDA_ITEM::m_structType.
Definition typeinfo.h:78
@ SCH_LINE_T
Definition typeinfo.h:167
@ SCH_NO_CONNECT_T
Definition typeinfo.h:164
@ TYPE_NOT_INIT
Definition typeinfo.h:81
@ SCH_SYMBOL_T
Definition typeinfo.h:176
@ SCH_DIRECTIVE_LABEL_T
Definition typeinfo.h:175
@ SCH_LABEL_T
Definition typeinfo.h:171
@ SCH_HIER_LABEL_T
Definition typeinfo.h:173
@ SCH_GLOBAL_LABEL_T
Definition typeinfo.h:172
@ SCH_JUNCTION_T
Definition typeinfo.h:163
VECTOR2< int32_t > VECTOR2I
Definition vector2d.h:695
VECTOR2< double > VECTOR2D
Definition vector2d.h:694