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, see <https://www.gnu.org/licenses/>.
22 */
23
24#ifndef SCH_SYMBOL_H
25#define SCH_SYMBOL_H
26
27#include <eda_item.h>
28#include <core/typeinfo.h>
29#include <layer_ids.h>
30#include <lib_id.h>
31
32#include <map>
33#include <memory>
34#include <string>
35#include <unordered_map>
36#include <vector>
37#include <wx/arrstr.h>
38#include <wx/chartype.h>
39#include <wx/string.h>
40
41#include <schematic.h>
42#include <symbol.h>
43#include <sch_field.h>
44#include <sch_pin.h>
45#include <sch_sheet_path.h> // SCH_SYMBOL_INSTANCE
46#include <transform.h>
47
48struct PICKED_SYMBOL;
49class KIID_PATH;
50class SCH_SCREEN;
51class LIB_SYMBOL;
52class MSG_PANEL_ITEM;
55class SCH_SCREEN;
56class SCH_COMMIT;
57class SCH_SHAPE;
58
60{
61class SchematicSymbolInstance;
62}
63
64
65typedef std::weak_ptr<LIB_SYMBOL> PART_REF;
66
67
68extern std::string toUTFTildaText( const wxString& txt );
69
70
74class SCH_SYMBOL : public SYMBOL
75{
76public:
77 SCH_SYMBOL();
78
89 SCH_SYMBOL( const LIB_SYMBOL& aSymbol, const LIB_ID& aLibId, const SCH_SHEET_PATH* aSheet,
90 int aUnit, int aBodyStyle = 0, const VECTOR2I& aPosition = VECTOR2I( 0, 0 ),
91 EDA_ITEM* aParent = nullptr );
92
93 SCH_SYMBOL( const LIB_SYMBOL& aSymbol, const SCH_SHEET_PATH* aSheet, const PICKED_SYMBOL& aSel,
94 const VECTOR2I& aPosition = VECTOR2I( 0, 0 ), EDA_ITEM* aParent = nullptr );
95
105 SCH_SYMBOL( const SCH_SYMBOL& aSymbol );
106
107 ~SCH_SYMBOL();
108
109 static inline bool ClassOf( const EDA_ITEM* aItem )
110 {
111 return aItem && SCH_SYMBOL_T == aItem->Type();
112 }
113
114 wxString GetClass() const override
115 {
116 return wxT( "SCH_SYMBOL" );
117 }
118
132 bool IsMissingLibSymbol() const;
133
134 const std::vector<SCH_SYMBOL_INSTANCE>& GetInstances() const
135 {
136 return m_instances;
137 }
138
139 bool GetInstance( SCH_SYMBOL_INSTANCE& aInstance,
140 const KIID_PATH& aSheetPath, bool aTestFromEnd = false ) const;
141
142 void RemoveInstance( const SCH_SHEET_PATH& aInstancePath );
143
144 void RemoveInstance( const KIID_PATH& aInstancePath );
145
160 bool IsMovableFromAnchorPoint() const override;
161
162 void SetLibId( const LIB_ID& aName );
163
164 const LIB_ID& GetLibId() const override { return m_lib_id; }
165
166 wxString GetSymbolIDAsString() const { return m_lib_id.Format(); }
167
179 void SetSchSymbolLibraryName( const wxString& aName ) { m_schLibSymbolName = aName; }
180 wxString GetSchSymbolLibraryName() const;
181 bool UseLibIdLookup() const { return m_schLibSymbolName.IsEmpty(); }
182
183 std::unique_ptr< LIB_SYMBOL >& GetLibSymbolRef() { return m_part; }
184 const std::unique_ptr< LIB_SYMBOL >& GetLibSymbolRef() const { return m_part; }
185
187
204 void SetLibSymbol( LIB_SYMBOL* aLibSymbol );
205
209 wxString GetDescription() const override;
210 wxString GetShownDescription( RESOLUTION_CONTEXT aContext, int aDepth = 0 ) const override;
211
215 wxString GetKeyWords() const override;
216 wxString GetShownKeyWords( RESOLUTION_CONTEXT aContext, int aDepth = 0 ) const override;
217
221 wxString GetDatasheet() const;
222
226 void UpdatePins();
227
233 wxString GetUnitDisplayName( int aUnit, bool aLabel ) const override;
234
235 wxString GetBodyStyleDescription( int aBodyStyle, bool aLabel ) const override;
236
237 void SetBodyStyle( int aBodyStyle ) override;
238
239 wxString GetPrefix() const { return m_prefix; }
240 void SetPrefix( const wxString& aPrefix ) { m_prefix = aPrefix; }
241
245 void UpdatePrefix();
246
247 wxString SubReference( int aUnit, bool aAddSeparator = true ) const;
248
254 int GetUnitCount() const override;
255
256 bool IsMultiUnit() const override { return GetUnitCount() > 1; }
257
263 int GetBodyStyleCount() const override;
264
265 bool IsMultiBodyStyle() const override { return GetBodyStyleCount() > 1; }
266
267 bool HasDeMorganBodyStyles() const override;
268
275 void SetOrientation( int aOrientation );
276
292 int GetOrientation() const override;
293
298 {
299 int mirroring = GetOrientation();
300
302
303 SetOrientation( aAngle | mirroring );
304 }
305
322
323 void SetMirrorX( bool aMirror )
324 {
325 int orientation = GetOrientation();
326
327 if( aMirror )
329 else
331
332 SetOrientation( orientation );
333 }
334
335 bool GetMirrorX() const
336 {
338 }
339
340 void SetMirrorY( bool aMirror )
341 {
342 int orientation = GetOrientation();
343
344 if( aMirror )
346 else
348
349 SetOrientation( orientation );
350 }
351
352 bool GetMirrorY() const
353 {
355 }
356
360 void GetContextualTextVars( wxArrayString* aVars ) const;
361
369 bool ResolveTextVar( const SCH_SHEET_PATH* aPath, wxString* token, int aDepth = 0 ) const;
370
379 bool ResolveTextVar( const SCH_SHEET_PATH* aPath, wxString* token,
380 const wxString& aVariantName, int aDepth = 0 ) const;
381
382 void GetMsgPanelInfo( EDA_DRAW_FRAME* aFrame, std::vector<MSG_PANEL_ITEM>& aList ) override;
383
394 void ClearAnnotation( const SCH_SHEET_PATH* aSheetPath, bool aResetPrefix );
395
407 bool AddSheetPathReferenceEntryIfMissing( const KIID_PATH& aSheetPath );
408
416 bool SetInstanceProjectName( const KIID_PATH& aSheetPath, const wxString& aProjectName );
417
418
419 const BOX2I GetBoundingBox() const override;
420
424 BOX2I GetBodyBoundingBox() const override;
425
429 BOX2I GetBodyAndPinsBoundingBox() const override;
430
431
432 //-----<Fields>-----------------------------------------------------------
433
438 SCH_FIELD* GetField( FIELD_T aFieldType );
439 const SCH_FIELD* GetField( FIELD_T aFieldNdx ) const;
440
448 SCH_FIELD* GetField( const wxString& aFieldName );
449 const SCH_FIELD* GetField( const wxString& aFieldName ) const;
450
457 void GetFields( std::vector<SCH_FIELD*>& aVector, bool aVisibleOnly ) const override;
458
462 std::vector<SCH_FIELD>& GetFields() { return m_fields; }
463 const std::vector<SCH_FIELD>& GetFields() const { return m_fields; }
464
465 std::vector<PROPERTY_BASE*> GetDynamicProperties() const override;
466 std::vector<PROPERTY_BASE*> GetDynamicProperties( const SCH_SHEET_PATH* aPath ) const;
467
475 SCH_FIELD* AddField( const SCH_FIELD& aField );
476
482 void RemoveField( const wxString& aFieldName );
483
484 void RemoveField( SCH_FIELD* aField )
485 {
486 if( aField )
487 RemoveField( aField->GetName() );
488 }
489
497 SCH_FIELD* FindFieldCaseInsensitive( const wxString& aFieldName );
498 const SCH_FIELD* FindFieldCaseInsensitive( const wxString& aFieldName ) const;
499
503 const wxString GetRef( const SCH_SHEET_PATH* aSheet,
504 bool aIncludeUnit = false ) const override;
505
509 const wxString GetValue( const SCH_SHEET_PATH* aPath, RESOLUTION_CONTEXT aContext,
510 const wxString& aVariantName = wxEmptyString ) const override;
511
512 void SetValueFieldText( const wxString& aValue, const SCH_SHEET_PATH* aInstance = nullptr,
513 const wxString& aVariantName = wxEmptyString );
514
515 const wxString GetFootprintFieldText( const SCH_SHEET_PATH* aPath, RESOLUTION_CONTEXT aContext,
516 const wxString& aVariantName = wxEmptyString ) const;
517 void SetFootprintFieldText( const wxString& aFootprint );
518
519 /*
520 * Field access for property manager
521 */
522 wxString GetRefProp() const
523 {
524 return GetRef( &Schematic()->CurrentSheet() );
525 }
526
527 void SetRefProp( const wxString& aRef );
528
529 wxString GetValueProp() const
530 {
531 return GetValue( &Schematic()->CurrentSheet(), RAW_VALUE, Schematic()->GetCurrentVariant() );
532 }
533
534 void SetValueProp( const wxString& aValue ); // Implemented in sch_symbol.cpp for tracing
535
536 int GetUnitProp() const
537 {
538 return GetUnitSelection( &Schematic()->CurrentSheet() );
539 }
540
541 void SetFieldText( const wxString& aFieldName, const wxString& aFieldText, const SCH_SHEET_PATH* aPath = nullptr,
542 const wxString& aVariantName = wxEmptyString );
543
544 wxString GetFieldText( const wxString& aFieldName, const SCH_SHEET_PATH* aPath = nullptr,
545 const wxString& aVariantName = wxEmptyString ) const;
546
547 void SetUnitProp( int aUnit )
548 {
549 SetUnitSelection( &Schematic()->CurrentSheet(), aUnit );
550 SetUnit( aUnit );
551 }
552
553 wxString GetBodyStyleProp() const override
554 {
555 return GetBodyStyleDescription( GetBodyStyle(), false );
556 }
557
558 void SetBodyStyleProp( const wxString& aBodyStyle ) override
559 {
560 for( int bodyStyle = 1; bodyStyle <= GetBodyStyleCount(); bodyStyle++ )
561 {
562 if( GetBodyStyleDescription( bodyStyle, false ) == aBodyStyle )
563 {
564 SetBodyStyle( bodyStyle );
565 return;
566 }
567 }
568 }
569
580 void UpdateFields( const SCH_SHEET_PATH* aPath, bool aUpdateStyle, bool aUpdateRef,
581 bool aUpdateOtherFields, bool aResetRef, bool aResetOtherFields );
582
592 void SyncOtherUnits( const SCH_SHEET_PATH& aSourceSheet, SCH_COMMIT& aCommit,
593 PROPERTY_BASE* aProperty,
594 const wxString& aVariantName = wxEmptyString );
595
599 int GetNextFieldOrdinal() const;
600
607 void AutoplaceFields( SCH_SCREEN* aScreen, AUTOPLACE_ALGO aAlgo ) override;
608
609 void RunOnChildren( const std::function<void( SCH_ITEM* )>& aFunction, RECURSE_MODE aMode ) override;
610
611 void ClearCaches() override;
612
613 //-----</Fields>----------------------------------------------------------
614
615
622 SCH_PIN* GetPin( const wxString& number ) const;
623
631 SCH_PIN* GetPinByEffectivePadNumber( const wxString& aPadNumber, const SCH_SHEET_PATH* aSheet,
632 const wxString& aVariantName = wxEmptyString ) const;
633
643 std::vector<SCH_PIN*> GetPinsByNumber( const wxString& aNumber ) const;
644
651 std::vector<SCH_PIN*> GetLibPins() const;
652
657 std::vector<SCH_PIN*> GetAllLibPins() const;
658
662 size_t GetFullPinCount() const;
663
667 SCH_PIN* GetPin( SCH_PIN* aLibPin ) const;
668
676 const SCH_PIN* GetPin( const VECTOR2I& aPosition ) const;
677
686 std::vector<const SCH_PIN*> GetPins( const SCH_SHEET_PATH* aSheet ) const;
687 std::vector<SCH_PIN*> GetPins( const SCH_SHEET_PATH* aSheet );
688
689 std::vector<SCH_PIN*> GetPins() const override;
690
691
692 std::vector<std::unique_ptr<SCH_PIN>>& GetRawPins() { return m_pins; }
693
700 void SetRef( const SCH_SHEET_PATH* aSheet, const wxString& aReference );
701
708 bool IsAnnotated( const SCH_SHEET_PATH* aSheet ) const;
709
721 void AddHierarchicalReference( const KIID_PATH& aPath,
722 const wxString& aRef,
723 int aUnit );
724
725 void AddHierarchicalReference( const SCH_SYMBOL_INSTANCE& aInstance );
726
728 int GetUnitSelection( const SCH_SHEET_PATH* aSheet ) const;
729
731 void SetUnitSelection( const SCH_SHEET_PATH* aSheet, int aUnitSelection );
732
734 void SetUnitSelection( int aUnitSelection );
735
736 virtual void SetDNP( bool aEnable, const SCH_SHEET_PATH* aInstance = nullptr,
737 const wxString& aVariantName = wxEmptyString ) override;
738 virtual bool GetDNP( const SCH_SHEET_PATH* aInstance = nullptr,
739 const wxString& aVariantName = wxEmptyString ) const override;
740
741 bool GetDNPProp() const { return GetDNP( &Schematic()->CurrentSheet(), Schematic()->GetCurrentVariant() ); }
742
743 void SetDNPProp( bool aEnable ) { SetDNP( aEnable, &Schematic()->CurrentSheet(),
744 Schematic()->GetCurrentVariant() ); }
745
752 void SetPinMapOverride( const PIN_MAP_INSTANCE_OVERRIDE& aOverride, const SCH_SHEET_PATH* aInstance = nullptr,
753 const wxString& aVariantName = wxEmptyString );
754
762 const wxString& aVariantName = wxEmptyString ) const;
763
764 void SetExcludedFromBOM( bool aEnable, const SCH_SHEET_PATH* aInstance = nullptr,
765 const wxString& aVariantName = wxEmptyString ) override;
766 bool GetExcludedFromBOM( const SCH_SHEET_PATH* aInstance = nullptr,
767 const wxString& aVariantName = wxEmptyString ) const override;
768
770 {
771 return GetExcludedFromBOM( &Schematic()->CurrentSheet(), Schematic()->GetCurrentVariant() );
772 }
773
774 void SetExcludedFromBOMProp( bool aEnable )
775 {
776 SetExcludedFromBOM( aEnable, &Schematic()->CurrentSheet(), Schematic()->GetCurrentVariant() );
777 }
778
779 void SetExcludedFromSim( bool aEnable, const SCH_SHEET_PATH* aInstance = nullptr,
780 const wxString& aVariantName = wxEmptyString ) override;
781 bool GetExcludedFromSim( const SCH_SHEET_PATH* aInstance = nullptr,
782 const wxString& aVariantName = wxEmptyString ) const override;
783
785 {
786 return GetExcludedFromSim( &Schematic()->CurrentSheet(), Schematic()->GetCurrentVariant() );
787 }
788
789 void SetExcludedFromSimProp( bool aEnable )
790 {
791 SetExcludedFromSim( aEnable, &Schematic()->CurrentSheet(), Schematic()->GetCurrentVariant() );
792 }
793
794 void SetExcludedFromBoard( bool aEnable, const SCH_SHEET_PATH* aInstance = nullptr,
795 const wxString& aVariantName = wxEmptyString ) override;
796 bool GetExcludedFromBoard( const SCH_SHEET_PATH* aInstance = nullptr,
797 const wxString& aVariantName = wxEmptyString ) const override;
798
800 {
801 return GetExcludedFromBoard( &Schematic()->CurrentSheet(), Schematic()->GetCurrentVariant() );
802 }
803
804 void SetExcludedFromBoardProp( bool aEnable )
805 {
806 SetExcludedFromBoard( aEnable, &Schematic()->CurrentSheet(), Schematic()->GetCurrentVariant() );
807 }
808
809 void SetExcludedFromPosFiles( bool aEnable, const SCH_SHEET_PATH* aInstance = nullptr,
810 const wxString& aVariantName = wxEmptyString ) override;
811 bool GetExcludedFromPosFiles( const SCH_SHEET_PATH* aInstance = nullptr,
812 const wxString& aVariantName = wxEmptyString ) const override;
813
815 {
816 return GetExcludedFromPosFiles( &Schematic()->CurrentSheet(), Schematic()->GetCurrentVariant() );
817 }
818
819 void SetExcludedFromPosFilesProp( bool aEnable )
820 {
821 SetExcludedFromPosFiles( aEnable, &Schematic()->CurrentSheet(), Schematic()->GetCurrentVariant() );
822 }
823
829
830 void Move( const VECTOR2I& aMoveVector ) override
831 {
832 if( aMoveVector == VECTOR2I( 0, 0 ) )
833 return;
834
835 m_pos += aMoveVector;
836
837 for( SCH_FIELD& field : m_fields )
838 field.Move( aMoveVector );
839 }
840
841 void MirrorHorizontally( int aCenter ) override;
842 void MirrorVertically( int aCenter ) override;
843 void Rotate( const VECTOR2I& aCenter, bool aRotateCCW ) override;
844
845 bool Matches( const EDA_SEARCH_DATA& aSearchData, void* aAuxData ) const override;
846
847 void GetEndPoints( std::vector<DANGLING_END_ITEM>& aItemList ) override;
848
859 bool UpdateDanglingState( std::vector<DANGLING_END_ITEM>& aItemListByType,
860 std::vector<DANGLING_END_ITEM>& aItemListByPos,
861 const SCH_SHEET_PATH* aPath = nullptr ) override;
862
863 VECTOR2I GetPinPhysicalPosition( const SCH_PIN* Pin ) const;
864
865 bool IsConnectable() const override { return true; }
866
867 bool HasConnectivityChanges( const SCH_ITEM* aItem,
868 const SCH_SHEET_PATH* aInstance = nullptr ) const override;
869
870 bool CanConnect( const SCH_ITEM* aItem ) const override
871 {
872 return ( aItem->Type() == SCH_LINE_T && aItem->GetLayer() == LAYER_WIRE ) ||
873 ( aItem->Type() == SCH_NO_CONNECT_T ) ||
874 ( aItem->Type() == SCH_JUNCTION_T ) ||
875 ( aItem->Type() == SCH_SYMBOL_T ) ||
876 ( aItem->Type() == SCH_DIRECTIVE_LABEL_T ) ||
877 ( aItem->Type() == SCH_LABEL_T ) ||
878 ( aItem->Type() == SCH_HIER_LABEL_T ) ||
879 ( aItem->Type() == SCH_GLOBAL_LABEL_T );
880 }
881
885 bool IsInNetlist() const;
886
893
896 {
897 if( m_passthroughMode != aMode )
898 {
899 m_passthroughMode = aMode;
901 }
902 }
903
904 const wxString& GetNetChainName() const { return m_signalName; }
905 void SetNetChainName( wxString aName ) noexcept { m_signalName.swap( aName ); }
906
907 std::vector<VECTOR2I> GetConnectionPoints() const override;
908
909 INSPECT_RESULT Visit( INSPECTOR inspector, void* testData,
910 const std::vector<KICAD_T>& aScanTypes ) override;
911
919 SCH_ITEM* GetDrawItem( const VECTOR2I& aPosition, KICAD_T aType = TYPE_NOT_INIT );
920
921 wxString GetItemDescription( UNITS_PROVIDER* aUnitsProvider, bool aFull ) const override;
922
923 BITMAPS GetMenuImage() const override;
924
925 bool operator <( const SCH_ITEM& aItem ) const override;
926
927 bool operator==( const SCH_SYMBOL& aSymbol) const;
928 bool operator!=( const SCH_SYMBOL& aSymbol) const;
929
930 SCH_SYMBOL& operator=( const SCH_SYMBOL& aItem );
931
932 bool IsReplaceable() const override { return true; }
933
934 VECTOR2I GetPosition() const override { return m_pos; }
935 void SetPosition( const VECTOR2I& aPosition ) override { Move( aPosition - m_pos ); }
936
937 int GetX() const { return GetPosition().x; };
938 void SetX( int aX ) { SetPosition( VECTOR2I( aX, GetY() ) ); }
939
940 int GetY() const { return GetPosition().y; }
941 void SetY( int aY ) { SetPosition( VECTOR2I( GetX(), aY ) ); }
942
943 bool HitTest( const VECTOR2I& aPosition, int aAccuracy = 0 ) const override;
944 bool HitTest( const BOX2I& aRect, bool aContained, int aAccuracy = 0 ) const override;
945 bool HitTest( const SHAPE_LINE_CHAIN& aPoly, bool aContained ) const override;
946
947 void Plot( PLOTTER* aPlotter, bool aBackground, const SCH_PLOT_OPTS& aPlotOpts,
948 int aUnit, int aBodyStyle, const VECTOR2I& aOffset, bool aDimmed ) override;
949
957 void PlotPins( PLOTTER* aPlotter, bool aDnp ) const;
958
964 void PlotLocalPowerIconShape( PLOTTER* aPlotter ) const;
965
972 void PlotDNP( PLOTTER* aPlotter ) const;
973
983 static void BuildLocalPowerIconShape( std::vector<SCH_SHAPE>& aShapeList, const VECTOR2D& aPos,
984 double aSize, double aLineWidth, bool aHorizontal );
985
986 EDA_ITEM* Clone() const override;
987
988 void Serialize( google::protobuf::Any& aContainer ) const override;
989 bool Deserialize( const google::protobuf::Any& aContainer ) override;
990
991 void Serialize( kiapi::schematic::types::SchematicSymbolInstance& aSymbol ) const;
992 bool Deserialize( const kiapi::schematic::types::SchematicSymbolInstance& aSymbol );
993
994#if defined(DEBUG)
995 void Show( int nestLevel, std::ostream& os ) const override;
996#endif
997
998 void ClearBrightenedPins();
999
1000 bool HasBrightenedPins();
1001
1002 bool IsPointClickableAnchor( const VECTOR2I& aPos ) const override;
1003
1009 bool IsSymbolLikePowerGlobalLabel() const;
1010 bool IsSymbolLikePowerLocalLabel() const;
1011
1012 bool IsGlobalPower() const override;
1013 bool IsLocalPower() const override;
1014 bool IsPower() const override;
1015 bool IsNormal() const override;
1016
1017 bool GetShowPinNames() const override;
1018 void SetShowPinNames( bool aShow ) override;
1019
1020 bool GetShowPinNumbers() const override;
1021 void SetShowPinNumbers( bool aShow ) override;
1022
1023 double Similarity( const SCH_ITEM& aOther ) const override;
1024
1026 std::unordered_set<wxString> GetComponentClassNames( const SCH_SHEET_PATH* aPath ) const;
1027
1028 void DeleteVariant( const KIID_PATH& aPath, const wxString& aVariantName );
1029
1030 // Remove a variant's override of one field
1031 void ClearVariantField( const KIID_PATH& aPath, const wxString& aVariantName,
1032 const wxString& aFieldName );
1033
1034 void RenameVariant( const KIID_PATH& aPath, const wxString& aOldName, const wxString& aNewName );
1035
1036 void CopyVariant( const KIID_PATH& aPath, const wxString& aSourceVariant,
1037 const wxString& aNewVariant );
1038
1039 std::optional<SCH_SYMBOL_VARIANT> GetVariant( const SCH_SHEET_PATH& aInstance, const wxString& aVariantName ) const;
1040 void AddVariant( const SCH_SHEET_PATH& aInstance, const SCH_SYMBOL_VARIANT& aVariant );
1041
1047 void SetVariantSymbolOverride( const SCH_SHEET_PATH& aPath, const wxString& aVariantName,
1048 const LIB_ID& aLibId );
1049
1055 bool ClearVariantSymbolOverride( const SCH_SHEET_PATH& aPath, const wxString& aVariantName );
1056
1068 LIB_SYMBOL* GetVariantLibSymbol( const wxString& aVariantName,
1069 const SCH_SHEET_PATH& aPath ) const;
1070
1080 const LIB_SYMBOL* GetEffectiveLibSymbol( const SCH_SHEET_PATH* aPath = nullptr ) const;
1081
1093 std::vector<SCH_PIN*> MapLibPins( const std::vector<const SCH_PIN*>& aLibPins,
1094 bool aByNumber ) const;
1095
1096 void DeleteVariant( const SCH_SHEET_PATH& aInstance, const wxString& aVariantName )
1097 {
1098 DeleteVariant( aInstance.Path(), aVariantName );
1099 }
1100
1101 void RenameVariant( const SCH_SHEET_PATH& aInstance, const wxString& aOldName,
1102 const wxString& aNewName )
1103 {
1104 RenameVariant( aInstance.Path(), aOldName, aNewName );
1105 }
1106
1107 void CopyVariant( const SCH_SHEET_PATH& aInstance, const wxString& aSourceVariant,
1108 const wxString& aNewVariant )
1109 {
1110 CopyVariant( aInstance.Path(), aSourceVariant, aNewVariant );
1111 }
1112
1113 bool operator==( const SCH_ITEM& aOther ) const override;
1114
1115protected:
1116 void swapData( SCH_ITEM* aItem ) override;
1117
1118private:
1119 BOX2I doGetBoundingBox( bool aIncludePins, bool aIncludeFields ) const;
1120
1121 bool doIsConnected( const VECTOR2I& aPosition ) const override;
1122
1123 void Init( const VECTOR2I& pos = VECTOR2I( 0, 0 ) );
1124
1125 SCH_SYMBOL_INSTANCE* getInstance( const KIID_PATH& aPath );
1126 const SCH_SYMBOL_INSTANCE* getInstance( const KIID_PATH& aPath ) const;
1127
1128 SCH_SYMBOL_INSTANCE* getInstance( const SCH_SHEET_PATH& aPath ) { return getInstance( aPath.Path() ); }
1129 const SCH_SYMBOL_INSTANCE* getInstance( const SCH_SHEET_PATH& aPath ) const { return getInstance( aPath.Path() ); }
1130
1133 const wxString& aVariantName ) const;
1134
1135private:
1138 wxString m_prefix;
1142
1151
1152 std::vector<SCH_FIELD> m_fields;
1153
1157 mutable std::map<wxString, std::unique_ptr<PROPERTY_BASE>> m_dynamicPropertyCache;
1158
1159 std::unique_ptr<LIB_SYMBOL> m_part;
1162
1164
1166
1167 std::vector<std::unique_ptr<SCH_PIN>> m_pins;
1168 std::unordered_map<SCH_PIN*, SCH_PIN*> m_pinMap;
1169
1173
1179 std::vector<SCH_SYMBOL_INSTANCE> m_instances;
1180
1185 std::unordered_map<KIID_PATH, size_t> m_instancePathIndex;
1186
1188
1189 mutable std::map<wxString, std::unique_ptr<LIB_SYMBOL>> m_variantSymbolCache;
1190
1192 static std::unordered_map<TRANSFORM, int> s_transformToOrientationCache;
1193};
1194
1195
1196#endif /* SCH_SYMBOL_H */
BITMAPS
A list of all bitmap identifiers.
BOX2< VECTOR2I > BOX2I
Definition box2.h:927
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:84
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:45
Define a library symbol object.
Definition lib_symbol.h:119
EDA_MSG_PANEL items for displaying messages.
Definition msgpanel.h:50
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:165
SCHEMATIC * Schematic() const
Search the item hierarchy to find a SCHEMATIC.
Definition sch_item.cpp:281
int GetBodyStyle() const
Definition sch_item.h:247
friend class LIB_SYMBOL
Definition sch_item.h:812
SCH_LAYER_ID GetLayer() const
Return the layer this item is on.
Definition sch_item.h:345
void SetConnectivityDirty(bool aDirty=true)
Definition sch_item.h:600
virtual void SetUnit(int aUnit)
Definition sch_item.h:236
SCH_ITEM(EDA_ITEM *aParent, KICAD_T aType, int aUnit=0, int aBodyStyle=0)
Definition sch_item.cpp:52
Handle access to a stack of flattened SCH_SHEET objects by way of a path for creating a flattened sch...
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:75
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:536
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:323
bool IsSymbolLikePowerGlobalLabel() const
VECTOR2I m_pos
PASSTHROUGH_MODE GetPassthroughMode() const
Definition sch_symbol.h:894
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:166
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:462
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:553
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
void Serialize(google::protobuf::Any &aContainer) const override
Serializes this object to the given Any message.
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:692
const std::vector< SCH_SYMBOL_INSTANCE > & GetInstances() const
Definition sch_symbol.h:134
void SetPosition(const VECTOR2I &aPosition) override
Definition sch_symbol.h:935
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.
wxString m_signalName
bool IsConnectable() const override
Definition sch_symbol.h:865
bool ClearVariantSymbolOverride(const SCH_SHEET_PATH &aPath, const wxString &aVariantName)
Remove the alternate-symbol override for a given variant and sheet instance.
SYMBOL_ORIENTATION_PROP GetOrientationProp() const
Definition sch_symbol.h:306
std::map< wxString, std::unique_ptr< LIB_SYMBOL > > m_variantSymbolCache
int GetY() const
Definition sch_symbol.h:940
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:114
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)
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:340
void SetBodyStyleProp(const wxString &aBodyStyle) override
Definition sch_symbol.h:558
void SetVariantSymbolOverride(const SCH_SHEET_PATH &aPath, const wxString &aVariantName, const LIB_ID &aLibId)
Set the alternate-symbol override for a given variant and sheet instance.
bool UseLibIdLookup() const
Definition sch_symbol.h:181
int GetX() const
Definition sch_symbol.h:937
std::vector< SCH_PIN * > GetPins() const override
bool IsMultiBodyStyle() const override
Definition sch_symbol.h:265
bool GetExcludedFromPosFilesProp() const
Definition sch_symbol.h:814
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:789
void SetBodyStyle(int aBodyStyle) override
void SetShowPinNames(bool aShow) override
Set or clear the pin name visibility flag.
wxString GetKeyWords() const override
bool SetInstanceProjectName(const KIID_PATH &aSheetPath, const wxString &aProjectName)
Set the owning project of the instance stored for aSheetPath.
wxString GetSchSymbolLibraryName() const
void ClearCaches() override
const wxString & GetNetChainName() const
Definition sch_symbol.h:904
static bool ClassOf(const EDA_ITEM *aItem)
Definition sch_symbol.h:109
void DeleteVariant(const SCH_SHEET_PATH &aInstance, const wxString &aVariantName)
const wxString GetFootprintFieldText(const SCH_SHEET_PATH *aPath, RESOLUTION_CONTEXT aContext, const wxString &aVariantName=wxEmptyString) const
PASSTHROUGH_MODE m_passthroughMode
bool IsInNetlist() const
void Move(const VECTOR2I &aMoveVector) override
Move the item by aMoveVector to a new position.
Definition sch_symbol.h:830
std::optional< SCH_SYMBOL_VARIANT > GetVariant(const SCH_SHEET_PATH &aInstance, const wxString &aVariantName) const
PIN_MAP_INSTANCE_OVERRIDE GetPinMapOverride(const SCH_SHEET_PATH *aInstance=nullptr, const wxString &aVariantName=wxEmptyString) const
bool GetExcludedFromBoardProp() const
Definition sch_symbol.h:799
void ClearBrightenedPins()
void SetY(int aY)
Definition sch_symbol.h:941
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:784
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:335
wxString GetRefProp() const
Definition sch_symbol.h:522
void SetPinMapOverride(const PIN_MAP_INSTANCE_OVERRIDE &aOverride, const SCH_SHEET_PATH *aInstance=nullptr, const wxString &aVariantName=wxEmptyString)
Set the per-instance pin-to-pad map override (issue #2282).
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.
wxString GetShownKeyWords(RESOLUTION_CONTEXT aContext, int aDepth=0) const override
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:774
void ClearVariantField(const KIID_PATH &aPath, const wxString &aVariantName, const wxString &aFieldName)
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:184
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.
void ClearAnnotation(const SCH_SHEET_PATH *aSheetPath, bool aResetPrefix)
Clear exiting symbol annotation.
SCH_PIN * GetPinByEffectivePadNumber(const wxString &aPadNumber, const SCH_SHEET_PATH *aSheet, const wxString &aVariantName=wxEmptyString) const
Find the pin whose effective footprint pad number (issue #2282) is aPadNumber on aSheet,...
void RenameVariant(const KIID_PATH &aPath, const wxString &aOldName, const wxString &aNewName)
bool IsMultiUnit() const override
Definition sch_symbol.h:256
void SetOrientationProp(SYMBOL_ORIENTATION_PROP aAngle)
Orientation/mirroring access for property manager.
Definition sch_symbol.h:297
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
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:741
void PlotPins(PLOTTER *aPlotter, bool aDnp) const
Plot just the symbol pins.
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.
wxString GetShownDescription(RESOLUTION_CONTEXT aContext, int aDepth=0) const override
std::unordered_map< KIID_PATH, size_t > m_instancePathIndex
Index from an instance's sheet path to its position in m_instances for O(1) lookups.
std::vector< SCH_PIN * > MapLibPins(const std::vector< const SCH_PIN * > &aLibPins, bool aByNumber) const
Map pins of an effective library symbol to this symbol's instance pins.
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:934
PIN_MAP_INSTANCE_OVERRIDE resolveDelegatedPinMapOverride(const SCH_SHEET_PATH &aSheet, const wxString &aVariantName) const
Return unit 1's pin-map override for a unit that delegates to it (issue #2282).
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 rebuildInstancePathIndex()
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:463
SCH_SYMBOL_INSTANCE * getInstance(const SCH_SHEET_PATH &aPath)
bool CanConnect(const SCH_ITEM *aItem) const override
Definition sch_symbol.h:870
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:819
const LIB_SYMBOL * GetEffectiveLibSymbol(const SCH_SHEET_PATH *aPath=nullptr) const
Return the library symbol to use for rendering and bounding box calculations.
void SetNetChainName(wxString aName) noexcept
Definition sch_symbol.h:905
const LIB_ID & GetLibId() const override
Definition sch_symbol.h:164
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.
LIB_SYMBOL * GetVariantLibSymbol(const wxString &aVariantName, const SCH_SHEET_PATH &aPath) const
Resolve the alternate library symbol for a given variant.
void SetValueProp(const wxString &aValue)
void SetUnitProp(int aUnit)
Definition sch_symbol.h:547
void RenameVariant(const SCH_SHEET_PATH &aInstance, const wxString &aOldName, const wxString &aNewName)
void SetSchSymbolLibraryName(const wxString &aName)
The name of the symbol in the schematic library symbol list.
Definition sch_symbol.h:179
bool Deserialize(const google::protobuf::Any &aContainer) override
Deserializes the given protobuf message into this object.
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:352
std::map< wxString, std::unique_ptr< PROPERTY_BASE > > m_dynamicPropertyCache
Per-object cache of dynamic property descriptors for custom fields and effective pin-map entries,...
SCH_FIELD * AddField(const SCH_FIELD &aField)
Add a field to the symbol.
void SetDNPProp(bool aEnable)
Definition sch_symbol.h:743
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.
std::vector< PROPERTY_BASE * > GetDynamicProperties() const override
Return dynamically-computed properties specific to this object instance (e.g.
void RemoveField(SCH_FIELD *aField)
Definition sch_symbol.h:484
void SetPassthroughMode(PASSTHROUGH_MODE aMode)
Definition sch_symbol.h:895
void SetX(int aX)
Definition sch_symbol.h:938
std::vector< VECTOR2I > GetConnectionPoints() const override
Add all the connection points for this item to aPoints.
const wxString GetValue(const SCH_SHEET_PATH *aPath, RESOLUTION_CONTEXT aContext, const wxString &aVariantName=wxEmptyString) const override
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
PIN_MAP_INSTANCE_OVERRIDE m_pinMapOverride
Base (no-variant) pin-to-pad map override applied when no variant override exists for the sheet path ...
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:529
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:240
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:769
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:804
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:183
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:932
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:239
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 HasEffectiveAssociatedFootprint() const
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:61
RESOLUTION_CONTEXT
Definition common.h:87
@ RAW_VALUE
Definition common.h:94
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:474
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:65
Per-instance override of the active pin map and a sparse delta on top.
Definition pin_map.h:200
A simple container for schematic symbol instance information.
SYMBOL_ORIENTATION_PROP
Definition symbol.h:47
@ SYMBOL_ANGLE_180
Definition symbol.h:50
@ SYMBOL_ANGLE_0
Definition symbol.h:48
@ SYMBOL_ANGLE_90
Definition symbol.h:49
@ SYMBOL_ANGLE_270
Definition symbol.h:51
SYMBOL_ORIENTATION_T
enum used in RotationMiroir()
Definition symbol.h:31
@ SYM_ORIENT_270
Definition symbol.h:38
@ SYM_MIRROR_Y
Definition symbol.h:40
@ SYM_ORIENT_180
Definition symbol.h:37
@ SYM_MIRROR_X
Definition symbol.h:39
@ SYM_NORMAL
Definition symbol.h:32
@ SYM_ORIENT_90
Definition symbol.h:36
@ SYM_ORIENT_0
Definition symbol.h:35
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:70
@ SCH_LINE_T
Definition typeinfo.h:159
@ SCH_NO_CONNECT_T
Definition typeinfo.h:156
@ TYPE_NOT_INIT
Definition typeinfo.h:73
@ SCH_SYMBOL_T
Definition typeinfo.h:168
@ SCH_DIRECTIVE_LABEL_T
Definition typeinfo.h:167
@ SCH_LABEL_T
Definition typeinfo.h:163
@ SCH_HIER_LABEL_T
Definition typeinfo.h:165
@ SCH_GLOBAL_LABEL_T
Definition typeinfo.h:164
@ SCH_JUNCTION_T
Definition typeinfo.h:155
VECTOR2< int32_t > VECTOR2I
Definition vector2d.h:683
VECTOR2< double > VECTOR2D
Definition vector2d.h:682