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;
56class SYMBOL_LIB;
57class SYMBOL_LIBS;
58class SCH_SCREEN;
59class SCH_COMMIT;
60
61
63typedef std::vector<SCH_FIELD> SCH_FIELDS;
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 {
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
202 void SetLibSymbol( LIB_SYMBOL* aLibSymbol );
203
207 wxString GetDescription() const override;
208
212 wxString GetKeyWords() const override;
213
217 wxString GetDatasheet() const;
218
222 void UpdatePins();
223
229 wxString GetUnitDisplayName( int aUnit, bool aLabel ) const override;
230
231 wxString GetBodyStyleDescription( int aBodyStyle, bool aLabel ) const override;
232
233 void SetBodyStyle( int aBodyStyle ) override;
234
235 wxString GetPrefix() const { return m_prefix; }
236 void SetPrefix( const wxString& aPrefix ) { m_prefix = aPrefix; }
237
241 void UpdatePrefix();
242
243 wxString SubReference( int aUnit, bool aAddSeparator = true ) const;
244
250 int GetUnitCount() const override;
251
252 bool IsMultiUnit() const override { return GetUnitCount() > 1; }
253
259 int GetBodyStyleCount() const override;
260
261 bool IsMultiBodyStyle() const override { return GetBodyStyleCount() > 1; }
262
263 bool HasDeMorganBodyStyles() const override;
264
271 void SetOrientation( int aOrientation );
272
288 int GetOrientation() const override;
289
294 {
295 int mirroring = GetOrientation();
296
298
299 SetOrientation( aAngle | mirroring );
300 }
301
318
319 void SetMirrorX( bool aMirror )
320 {
321 int orientation = GetOrientation();
322
323 if( aMirror )
325 else
327
328 SetOrientation( orientation );
329 }
330
331 bool GetMirrorX() const
332 {
334 }
335
336 void SetMirrorY( bool aMirror )
337 {
338 int orientation = GetOrientation();
339
340 if( aMirror )
342 else
344
345 SetOrientation( orientation );
346 }
347
348 bool GetMirrorY() const
349 {
351 }
352
356 void GetContextualTextVars( wxArrayString* aVars ) const;
357
363 bool ResolveTextVar( const SCH_SHEET_PATH* aPath, wxString* token, int aDepth = 0 ) const;
364
365 void GetMsgPanelInfo( EDA_DRAW_FRAME* aFrame, std::vector<MSG_PANEL_ITEM>& aList ) override;
366
377 void ClearAnnotation( const SCH_SHEET_PATH* aSheetPath, bool aResetPrefix );
378
390 bool AddSheetPathReferenceEntryIfMissing( const KIID_PATH& aSheetPath );
391
392
393 const BOX2I GetBoundingBox() const override;
394
398 BOX2I GetBodyBoundingBox() const override;
399
403 BOX2I GetBodyAndPinsBoundingBox() const override;
404
405
406 //-----<Fields>-----------------------------------------------------------
407
412 SCH_FIELD* GetField( FIELD_T aFieldType );
413 const SCH_FIELD* GetField( FIELD_T aFieldNdx ) const;
414
418 SCH_FIELD* GetField( const wxString& aFieldName );
419 const SCH_FIELD* GetField( const wxString& aFieldName ) const;
420
427 void GetFields( std::vector<SCH_FIELD*>& aVector, bool aVisibleOnly ) const override;
428
432 std::vector<SCH_FIELD>& GetFields() { return m_fields; }
433 const std::vector<SCH_FIELD>& GetFields() const { return m_fields; }
434
442 SCH_FIELD* AddField( const SCH_FIELD& aField );
443
449 void RemoveField( const wxString& aFieldName );
450
451 void RemoveField( SCH_FIELD* aField ) { RemoveField( aField->GetName() ); }
452
460 SCH_FIELD* FindFieldCaseInsensitive( const wxString& aFieldName );
461
465 const wxString GetRef( const SCH_SHEET_PATH* aSheet,
466 bool aIncludeUnit = false ) const override;
467
471 const wxString GetValue( bool aResolve, const SCH_SHEET_PATH* aPath,
472 bool aAllowExtraText ) const override;
473
474 void SetValueFieldText( const wxString& aValue );
475
476 const wxString GetFootprintFieldText( bool aResolve, const SCH_SHEET_PATH* aPath,
477 bool aAllowExtraText ) const;
478 void SetFootprintFieldText( const wxString& aFootprint );
479
480 /*
481 * Field access for property manager
482 */
483 wxString GetRefProp() const
484 {
485 return GetRef( &Schematic()->CurrentSheet() );
486 }
487
488 void SetRefProp( const wxString& aRef );
489
490 wxString GetValueProp() const
491 {
492 return GetValue( false, &Schematic()->CurrentSheet(), false );
493 }
494
495 void SetValueProp( const wxString& aRef )
496 {
497 SetValueFieldText( aRef );
498 }
499
500 int GetUnitProp() const
501 {
502 return GetUnitSelection( &Schematic()->CurrentSheet() );
503 }
504
505 void SetUnitProp( int aUnit )
506 {
507 SetUnitSelection( &Schematic()->CurrentSheet(), aUnit );
508 SetUnit( aUnit );
509 }
510
511 wxString GetBodyStyleProp() const override
512 {
513 return GetBodyStyleDescription( GetBodyStyle(), false );
514 }
515
516 void SetBodyStyleProp( const wxString& aBodyStyle ) override
517 {
518 for( int bodyStyle = 1; bodyStyle <= GetBodyStyleCount(); bodyStyle++ )
519 {
520 if( GetBodyStyleDescription( bodyStyle, false ) == aBodyStyle )
521 {
522 SetBodyStyle( bodyStyle );
523 return;
524 }
525 }
526 }
527
538 void UpdateFields( const SCH_SHEET_PATH* aPath, bool aUpdateStyle, bool aUpdateRef,
539 bool aUpdateOtherFields, bool aResetRef, bool aResetOtherFields );
540
550 void SyncOtherUnits( const SCH_SHEET_PATH& aSourceSheet, SCH_COMMIT& aCommit,
551 PROPERTY_BASE* aProperty );
552
556 int GetNextFieldOrdinal() const;
557
564 void AutoplaceFields( SCH_SCREEN* aScreen, AUTOPLACE_ALGO aAlgo ) override;
565
566 void RunOnChildren( const std::function<void( SCH_ITEM* )>& aFunction, RECURSE_MODE aMode ) override;
567
568
569 //-----</Fields>----------------------------------------------------------
570
571
578 SCH_PIN* GetPin( const wxString& number ) const;
579
586 std::vector<SCH_PIN*> GetLibPins() const;
587
592 std::vector<SCH_PIN*> GetAllLibPins() const;
593
597 size_t GetFullPinCount() const;
598
602 SCH_PIN* GetPin( SCH_PIN* aLibPin ) const;
603
611 const SCH_PIN* GetPin( const VECTOR2I& aPosition ) const;
612
621 std::vector<SCH_PIN*> GetPins( const SCH_SHEET_PATH* aSheet ) const;
622
623 std::vector<SCH_PIN*> GetPins() const override;
624
625
626 std::vector<std::unique_ptr<SCH_PIN>>& GetRawPins() { return m_pins; }
627
634 void SetRef( const SCH_SHEET_PATH* aSheet, const wxString& aReference );
635
642 bool IsAnnotated( const SCH_SHEET_PATH* aSheet ) const;
643
655 void AddHierarchicalReference( const KIID_PATH& aPath,
656 const wxString& aRef,
657 int aUnit );
658
659 void AddHierarchicalReference( const SCH_SYMBOL_INSTANCE& aInstance );
660
662 int GetUnitSelection( const SCH_SHEET_PATH* aSheet ) const;
663
665 void SetUnitSelection( const SCH_SHEET_PATH* aSheet, int aUnitSelection );
666
668 void SetUnitSelection( int aUnitSelection );
669
675
676 void Move( const VECTOR2I& aMoveVector ) override
677 {
678 if( aMoveVector == VECTOR2I( 0, 0 ) )
679 return;
680
681 m_pos += aMoveVector;
682
683 for( SCH_FIELD& field : m_fields )
684 field.Move( aMoveVector );
685 }
686
687 void MirrorHorizontally( int aCenter ) override;
688 void MirrorVertically( int aCenter ) override;
689 void Rotate( const VECTOR2I& aCenter, bool aRotateCCW ) override;
690
691 bool Matches( const EDA_SEARCH_DATA& aSearchData, void* aAuxData ) const override;
692
693 void GetEndPoints( std::vector<DANGLING_END_ITEM>& aItemList ) override;
694
705 bool UpdateDanglingState( std::vector<DANGLING_END_ITEM>& aItemListByType,
706 std::vector<DANGLING_END_ITEM>& aItemListByPos,
707 const SCH_SHEET_PATH* aPath = nullptr ) override;
708
709 VECTOR2I GetPinPhysicalPosition( const SCH_PIN* Pin ) const;
710
711 bool IsConnectable() const override { return true; }
712
713 bool HasConnectivityChanges( const SCH_ITEM* aItem,
714 const SCH_SHEET_PATH* aInstance = nullptr ) const override;
715
716 bool CanConnect( const SCH_ITEM* aItem ) const override
717 {
718 return ( aItem->Type() == SCH_LINE_T && aItem->GetLayer() == LAYER_WIRE ) ||
719 ( aItem->Type() == SCH_NO_CONNECT_T ) ||
720 ( aItem->Type() == SCH_JUNCTION_T ) ||
721 ( aItem->Type() == SCH_SYMBOL_T ) ||
722 ( aItem->Type() == SCH_DIRECTIVE_LABEL_T ) ||
723 ( aItem->Type() == SCH_LABEL_T ) ||
724 ( aItem->Type() == SCH_HIER_LABEL_T ) ||
725 ( aItem->Type() == SCH_GLOBAL_LABEL_T );
726 }
727
731 bool IsInNetlist() const;
732
733 std::vector<VECTOR2I> GetConnectionPoints() const override;
734
735 INSPECT_RESULT Visit( INSPECTOR inspector, void* testData,
736 const std::vector<KICAD_T>& aScanTypes ) override;
737
745 SCH_ITEM* GetDrawItem( const VECTOR2I& aPosition, KICAD_T aType = TYPE_NOT_INIT );
746
747 wxString GetItemDescription( UNITS_PROVIDER* aUnitsProvider, bool aFull ) const override;
748
749 BITMAPS GetMenuImage() const override;
750
751 bool operator <( const SCH_ITEM& aItem ) const override;
752
753 bool operator==( const SCH_SYMBOL& aSymbol) const;
754 bool operator!=( const SCH_SYMBOL& aSymbol) const;
755
756 SCH_SYMBOL& operator=( const SCH_SYMBOL& aItem );
757
758 bool IsReplaceable() const override { return true; }
759
760 VECTOR2I GetPosition() const override { return m_pos; }
761 void SetPosition( const VECTOR2I& aPosition ) override { Move( aPosition - m_pos ); }
762
763 int GetX() const { return GetPosition().x; };
764 void SetX( int aX ) { SetPosition( VECTOR2I( aX, GetY() ) ); }
765
766 int GetY() const { return GetPosition().y; }
767 void SetY( int aY ) { SetPosition( VECTOR2I( GetX(), aY ) ); }
768
769 bool HitTest( const VECTOR2I& aPosition, int aAccuracy = 0 ) const override;
770 bool HitTest( const BOX2I& aRect, bool aContained, int aAccuracy = 0 ) const override;
771 bool HitTest( const SHAPE_LINE_CHAIN& aPoly, bool aContained ) const override;
772
773 void Plot( PLOTTER* aPlotter, bool aBackground, const SCH_PLOT_OPTS& aPlotOpts,
774 int aUnit, int aBodyStyle, const VECTOR2I& aOffset, bool aDimmed ) override;
775
783 void PlotPins( PLOTTER* aPlotter ) const;
784
791 void PlotDNP( PLOTTER* aPlotter ) const;
792
793 EDA_ITEM* Clone() const override;
794
795#if defined(DEBUG)
796 void Show( int nestLevel, std::ostream& os ) const override;
797#endif
798
799 void ClearBrightenedPins();
800
801 bool HasBrightenedPins();
802
803 bool IsPointClickableAnchor( const VECTOR2I& aPos ) const override;
804
810 bool IsSymbolLikePowerGlobalLabel() const;
811 bool IsSymbolLikePowerLocalLabel() const;
812
813 bool IsGlobalPower() const override;
814 bool IsLocalPower() const override;
815 bool IsPower() const override;
816 bool IsNormal() const override;
817
818 bool GetShowPinNames() const override;
819 void SetShowPinNames( bool aShow ) override;
820
821 bool GetShowPinNumbers() const override;
822 void SetShowPinNumbers( bool aShow ) override;
823
824 double Similarity( const SCH_ITEM& aOther ) const override;
825
827 std::unordered_set<wxString> GetComponentClassNames( const SCH_SHEET_PATH* aPath ) const;
828
829 bool operator==( const SCH_ITEM& aOther ) const override;
830
831protected:
832 void swapData( SCH_ITEM* aItem ) override;
833
834private:
835 BOX2I doGetBoundingBox( bool aIncludePins, bool aIncludeFields ) const;
836
837 bool doIsConnected( const VECTOR2I& aPosition ) const override;
838
839 void Init( const VECTOR2I& pos = VECTOR2I( 0, 0 ) );
840
841private:
844 wxString m_prefix;
848
857
858 std::vector<SCH_FIELD> m_fields;
859
860 std::unique_ptr<LIB_SYMBOL> m_part;
863
864 std::vector<std::unique_ptr<SCH_PIN>> m_pins;
865 std::unordered_map<SCH_PIN*, SCH_PIN*> m_pinMap;
866
872 std::vector<SCH_SYMBOL_INSTANCE> m_instanceReferences;
873
875 static std::unordered_map<TRANSFORM, int> s_transformToOrientationCache;
876};
877
878#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 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:85
EDA_MSG_PANEL items for displaying messages.
Definition msgpanel.h:54
Base plotter engine class.
Definition plotter.h:121
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:217
int GetBodyStyle() const
Definition sch_item.h:244
friend class LIB_SYMBOL
Definition sch_item.h:759
SCH_LAYER_ID GetLayer() const
Return the layer this item is on.
Definition sch_item.h:309
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:51
Handle access to a stack of flattened SCH_SHEET objects by way of a path for creating a flattened sch...
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.
void SetValueProp(const wxString &aRef)
Definition sch_symbol.h:495
SCH_SYMBOL & operator=(const SCH_SYMBOL &aItem)
int GetUnitProp() const
Definition sch_symbol.h:500
size_t GetFullPinCount() const
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.
Definition sch_symbol.h:844
wxString GetDescription() const override
std::unordered_map< SCH_PIN *, SCH_PIN * > m_pinMap
Library pin pointer : SCH_PIN indices.
Definition sch_symbol.h:865
void SetMirrorX(bool aMirror)
Definition sch_symbol.h:319
bool IsSymbolLikePowerGlobalLabel() const
VECTOR2I m_pos
Definition sch_symbol.h:842
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.
Definition sch_symbol.h:843
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:432
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:511
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...
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:626
const std::vector< SCH_SYMBOL_INSTANCE > & GetInstances() const
Definition sch_symbol.h:134
void SetPosition(const VECTOR2I &aPosition) override
Definition sch_symbol.h:761
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:711
SYMBOL_ORIENTATION_PROP GetOrientationProp() const
Definition sch_symbol.h:302
int GetY() const
Definition sch_symbol.h:766
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)
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:336
void PlotPins(PLOTTER *aPlotter) const
Plot just the symbol pins.
void SetBodyStyleProp(const wxString &aBodyStyle) override
Definition sch_symbol.h:516
bool UseLibIdLookup() const
Definition sch_symbol.h:181
void SetValueFieldText(const wxString &aValue)
int GetX() const
Definition sch_symbol.h:763
std::vector< SCH_PIN * > GetPins() const override
bool IsMultiBodyStyle() const override
Definition sch_symbol.h:261
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.
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
static bool ClassOf(const EDA_ITEM *aItem)
Definition sch_symbol.h:109
bool IsInNetlist() const
void Move(const VECTOR2I &aMoveVector) override
Move the item by aMoveVector to a new position.
Definition sch_symbol.h:676
void ClearBrightenedPins()
void SetY(int aY)
Definition sch_symbol.h:767
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 IsGlobalPower() const override
bool GetMirrorX() const
Definition sch_symbol.h:331
wxString GetRefProp() const
Definition sch_symbol.h:483
wxString GetBodyStyleDescription(int aBodyStyle, bool aLabel) const override
bool AddSheetPathReferenceEntryIfMissing(const KIID_PATH &aSheetPath)
Add an instance to the alternate references list (m_instanceReferences), if this entry does not alrea...
bool Matches(const EDA_SEARCH_DATA &aSearchData, void *aAuxData) const override
Compare the item against the search criteria in aSearchData.
static std::unordered_map< TRANSFORM, int > s_transformToOrientationCache
Definition sch_symbol.h:875
void UpdatePins()
Updates the cache of SCH_PIN objects for each pin.
std::vector< SCH_SYMBOL_INSTANCE > m_instanceReferences
Define the hierarchical path and reference of the symbol.
Definition sch_symbol.h:872
const wxString GetValue(bool aResolve, const SCH_SHEET_PATH *aPath, bool aAllowExtraText) const override
void SyncOtherUnits(const SCH_SHEET_PATH &aSourceSheet, SCH_COMMIT &aCommit, PROPERTY_BASE *aProperty)
Keep fields other than the reference, include/exclude flags, and alternate pin assignments in sync in...
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.
Definition sch_symbol.h:856
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.
bool IsMultiUnit() const override
Definition sch_symbol.h:252
void SetOrientationProp(SYMBOL_ORIENTATION_PROP aAngle)
Orientation/mirroring access for property manager.
Definition sch_symbol.h:293
bool GetShowPinNames() const override
const wxString GetFootprintFieldText(bool aResolve, const SCH_SHEET_PATH *aPath, bool aAllowExtraText) const
bool HasDeMorganBodyStyles() const override
std::vector< SCH_FIELD > m_fields
Variable length list of fields.
Definition sch_symbol.h:858
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...
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:760
std::unique_ptr< LIB_SYMBOL > m_part
A flattened copy of the LIB_SYMBOL from the PROJECT object's libraries.
Definition sch_symbol.h:860
int GetNextFieldOrdinal() const
Return the next ordinal for a user field for this symbol.
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:433
bool CanConnect(const SCH_ITEM *aItem) const override
Definition sch_symbol.h:716
void Init(const VECTOR2I &pos=VECTOR2I(0, 0))
const LIB_ID & GetLibId() const override
Definition sch_symbol.h:164
bool operator<(const SCH_ITEM &aItem) const override
void GetContextualTextVars(wxArrayString *aVars) const
Return the list of system text vars & fields for this symbol.
void SetUnitProp(int aUnit)
Definition sch_symbol.h:505
void SetSchSymbolLibraryName(const wxString &aName)
The name of the symbol in the schematic library symbol list.
Definition sch_symbol.h:179
void MirrorHorizontally(int aCenter) override
Mirror item horizontally about aCenter.
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 GetInstance(SCH_SYMBOL_INSTANCE &aInstance, const KIID_PATH &aSheetPath, bool aTestFromEnd=false) const
BOX2I doGetBoundingBox(bool aIncludePins, bool aIncludeFields) const
bool GetMirrorY() const
Definition sch_symbol.h:348
SCH_FIELD * AddField(const SCH_FIELD &aField)
Add a field to the symbol.
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:451
void SetX(int aX)
Definition sch_symbol.h:764
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.
bool m_isInNetlist
True if the symbol should appear in netlist.
Definition sch_symbol.h:862
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:490
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:236
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
void SetUnitSelection(const SCH_SHEET_PATH *aSheet, int aUnitSelection)
Set the selected unit of this symbol on one sheet.
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.
Definition sch_symbol.h:864
bool IsReplaceable() const override
Override this method in any derived object that supports test find and replace.
Definition sch_symbol.h:758
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.
const wxString GetRef(const SCH_SHEET_PATH *aSheet, bool aIncludeUnit=false) const override
wxString GetPrefix() const
Definition sch_symbol.h:235
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
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...
A collection of SYMBOL_LIB objects.
Object used to load, save, search, and otherwise manipulate symbol library files.
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:451
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
std::vector< SCH_FIELD > SCH_FIELDS
A container for several SCH_FIELD items.
Definition sch_symbol.h:63
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:165
@ SCH_NO_CONNECT_T
Definition typeinfo.h:162
@ TYPE_NOT_INIT
Definition typeinfo.h:81
@ SCH_SYMBOL_T
Definition typeinfo.h:174
@ SCH_DIRECTIVE_LABEL_T
Definition typeinfo.h:173
@ SCH_LABEL_T
Definition typeinfo.h:169
@ SCH_HIER_LABEL_T
Definition typeinfo.h:171
@ SCH_GLOBAL_LABEL_T
Definition typeinfo.h:170
@ SCH_JUNCTION_T
Definition typeinfo.h:161
VECTOR2< int32_t > VECTOR2I
Definition vector2d.h:695