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
240 void SetBodyStyleUnconditional( int aBodyStyle );
241
242 bool HasAlternateBodyStyle() const override;
243
244 wxString GetPrefix() const { return m_prefix; }
245 void SetPrefix( const wxString& aPrefix ) { m_prefix = aPrefix; }
246
250 void UpdatePrefix();
251
252 wxString SubReference( int aUnit, bool aAddSeparator = true ) const;
253
259 int GetUnitCount() const override;
260
261 bool IsMulti() const override { return GetUnitCount() > 1; }
262
269 void SetOrientation( int aOrientation );
270
286 int GetOrientation() const override;
287
292 {
293 int mirroring = GetOrientation();
294
295 mirroring &= ( SYMBOL_ORIENTATION_T::SYM_MIRROR_X | SYMBOL_ORIENTATION_T::SYM_MIRROR_Y );
296
297 SetOrientation( aAngle | mirroring );
298 }
299
301 {
302 int orientation = GetOrientation();
303
304 orientation &= ~( SYMBOL_ORIENTATION_T::SYM_MIRROR_X | SYMBOL_ORIENTATION_T::SYM_MIRROR_Y );
305
306 switch( orientation )
307 {
308 default:
309 case SYM_NORMAL:
310 case SYM_ORIENT_0: return SYMBOL_ORIENTATION_PROP::SYMBOL_ANGLE_0;
311 case SYM_ORIENT_90: return SYMBOL_ORIENTATION_PROP::SYMBOL_ANGLE_90;
312 case SYM_ORIENT_180: return SYMBOL_ORIENTATION_PROP::SYMBOL_ANGLE_180;
313 case SYM_ORIENT_270: return SYMBOL_ORIENTATION_PROP::SYMBOL_ANGLE_270;
314 }
315 }
316
317 void SetMirrorX( bool aMirror )
318 {
319 int orientation = GetOrientation();
320
321 if( aMirror )
322 orientation |= SYMBOL_ORIENTATION_T::SYM_MIRROR_X;
323 else
325
326 SetOrientation( orientation );
327 }
328
329 bool GetMirrorX() const
330 {
331 return GetOrientation() & SYMBOL_ORIENTATION_T::SYM_MIRROR_X;
332 }
333
334 void SetMirrorY( bool aMirror )
335 {
336 int orientation = GetOrientation();
337
338 if( aMirror )
339 orientation |= SYMBOL_ORIENTATION_T::SYM_MIRROR_Y;
340 else
342
343 SetOrientation( orientation );
344 }
345
346 bool GetMirrorY() const
347 {
348 return GetOrientation() & SYMBOL_ORIENTATION_T::SYM_MIRROR_Y;
349 }
350
354 void GetContextualTextVars( wxArrayString* aVars ) const;
355
361 bool ResolveTextVar( const SCH_SHEET_PATH* aPath, wxString* token, int aDepth = 0 ) const;
362
363 void GetMsgPanelInfo( EDA_DRAW_FRAME* aFrame, std::vector<MSG_PANEL_ITEM>& aList ) override;
364
375 void ClearAnnotation( const SCH_SHEET_PATH* aSheetPath, bool aResetPrefix );
376
388 bool AddSheetPathReferenceEntryIfMissing( const KIID_PATH& aSheetPath );
389
390
391 const BOX2I GetBoundingBox() const override;
392
396 BOX2I GetBodyBoundingBox() const override;
397
401 BOX2I GetBodyAndPinsBoundingBox() const override;
402
403
404 //-----<Fields>-----------------------------------------------------------
405
410 SCH_FIELD* GetField( FIELD_T aFieldType );
411 const SCH_FIELD* GetField( FIELD_T aFieldNdx ) const;
412
416 SCH_FIELD* GetField( const wxString& aFieldName );
417 const SCH_FIELD* GetField( const wxString& aFieldName ) const;
418
425 void GetFields( std::vector<SCH_FIELD*>& aVector, bool aVisibleOnly ) const override;
426
430 std::vector<SCH_FIELD>& GetFields() { return m_fields; }
431 const std::vector<SCH_FIELD>& GetFields() const { return m_fields; }
432
440 SCH_FIELD* AddField( const SCH_FIELD& aField );
441
447 void RemoveField( const wxString& aFieldName );
448
449 void RemoveField( SCH_FIELD* aField ) { RemoveField( aField->GetName() ); }
450
458 SCH_FIELD* FindFieldCaseInsensitive( const wxString& aFieldName );
459
463 const wxString GetRef( const SCH_SHEET_PATH* aSheet,
464 bool aIncludeUnit = false ) const override;
465
469 const wxString GetValue( bool aResolve, const SCH_SHEET_PATH* aPath,
470 bool aAllowExtraText ) const override;
471
472 void SetValueFieldText( const wxString& aValue );
473
474 const wxString GetFootprintFieldText( bool aResolve, const SCH_SHEET_PATH* aPath,
475 bool aAllowExtraText ) const;
476 void SetFootprintFieldText( const wxString& aFootprint );
477
478 /*
479 * Field access for property manager
480 */
481 wxString GetRefProp() const
482 {
483 return GetRef( &Schematic()->CurrentSheet() );
484 }
485
486 void SetRefProp( const wxString& aRef );
487
488 wxString GetValueProp() const
489 {
490 return GetValue( false, &Schematic()->CurrentSheet(), false );
491 }
492
493 void SetValueProp( const wxString& aRef )
494 {
495 SetValueFieldText( aRef );
496 }
497
498 wxString GetUnitProp() const override
499 {
500 int unit = GetUnitSelection( &Schematic()->CurrentSheet() );
501
502 return GetUnitDisplayName( unit, false );
503 }
504
505 void SetUnitProp( const wxString& aUnit ) override
506 {
507 for( int unit = 1; unit <= GetUnitCount(); unit++ )
508 {
509 if( GetUnitDisplayName( unit, false ) == aUnit )
510 {
511 SetUnitSelection( &Schematic()->CurrentSheet(), unit );
512 SetUnit( unit );
513 return;
514 }
515 }
516 }
517
518 wxString GetBodyStyleProp() const override
519 {
520 return GetBodyStyleDescription( GetBodyStyle(), false );
521 }
522
523 void SetBodyStyleProp( const wxString& aBodyStyle ) override
524 {
525 for( int bodyStyle : { BODY_STYLE::BASE, BODY_STYLE::DEMORGAN } )
526 {
527 if( GetBodyStyleDescription( bodyStyle, false ) == aBodyStyle )
528 {
529 SetBodyStyle( bodyStyle );
530 return;
531 }
532 }
533 }
534
545 void UpdateFields( const SCH_SHEET_PATH* aPath, bool aUpdateStyle, bool aUpdateRef,
546 bool aUpdateOtherFields, bool aResetRef, bool aResetOtherFields );
547
557 void SyncOtherUnits( const SCH_SHEET_PATH& aSourceSheet, SCH_COMMIT& aCommit,
558 PROPERTY_BASE* aProperty );
559
563 int GetNextFieldOrdinal() const;
564
571 void AutoplaceFields( SCH_SCREEN* aScreen, AUTOPLACE_ALGO aAlgo ) override;
572
573 void RunOnChildren( const std::function<void( SCH_ITEM* )>& aFunction, RECURSE_MODE aMode ) override;
574
575
576 //-----</Fields>----------------------------------------------------------
577
578
585 SCH_PIN* GetPin( const wxString& number ) const;
586
593 std::vector<SCH_PIN*> GetLibPins() const;
594
599 std::vector<SCH_PIN*> GetAllLibPins() const;
600
604 size_t GetFullPinCount() const;
605
609 SCH_PIN* GetPin( SCH_PIN* aLibPin ) const;
610
618 const SCH_PIN* GetPin( const VECTOR2I& aPosition ) const;
619
628 std::vector<SCH_PIN*> GetPins( const SCH_SHEET_PATH* aSheet ) const;
629
630 std::vector<SCH_PIN*> GetPins() const override;
631
632
633 std::vector<std::unique_ptr<SCH_PIN>>& GetRawPins() { return m_pins; }
634
641 void SetRef( const SCH_SHEET_PATH* aSheet, const wxString& aReference );
642
649 bool IsAnnotated( const SCH_SHEET_PATH* aSheet ) const;
650
662 void AddHierarchicalReference( const KIID_PATH& aPath,
663 const wxString& aRef,
664 int aUnit );
665
666 void AddHierarchicalReference( const SCH_SYMBOL_INSTANCE& aInstance );
667
669 int GetUnitSelection( const SCH_SHEET_PATH* aSheet ) const;
670
672 void SetUnitSelection( const SCH_SHEET_PATH* aSheet, int aUnitSelection );
673
675 void SetUnitSelection( int aUnitSelection );
676
682
683 void Move( const VECTOR2I& aMoveVector ) override
684 {
685 if( aMoveVector == VECTOR2I( 0, 0 ) )
686 return;
687
688 m_pos += aMoveVector;
689
690 for( SCH_FIELD& field : m_fields )
691 field.Move( aMoveVector );
692 }
693
694 void MirrorHorizontally( int aCenter ) override;
695 void MirrorVertically( int aCenter ) override;
696 void Rotate( const VECTOR2I& aCenter, bool aRotateCCW ) override;
697
698 bool Matches( const EDA_SEARCH_DATA& aSearchData, void* aAuxData ) const override;
699
700 void GetEndPoints( std::vector<DANGLING_END_ITEM>& aItemList ) override;
701
712 bool UpdateDanglingState( std::vector<DANGLING_END_ITEM>& aItemListByType,
713 std::vector<DANGLING_END_ITEM>& aItemListByPos,
714 const SCH_SHEET_PATH* aPath = nullptr ) override;
715
716 VECTOR2I GetPinPhysicalPosition( const SCH_PIN* Pin ) const;
717
718 bool IsConnectable() const override { return true; }
719
720 bool HasConnectivityChanges( const SCH_ITEM* aItem,
721 const SCH_SHEET_PATH* aInstance = nullptr ) const override;
722
723 bool CanConnect( const SCH_ITEM* aItem ) const override
724 {
725 return ( aItem->Type() == SCH_LINE_T && aItem->GetLayer() == LAYER_WIRE ) ||
726 ( aItem->Type() == SCH_NO_CONNECT_T ) ||
727 ( aItem->Type() == SCH_JUNCTION_T ) ||
728 ( aItem->Type() == SCH_SYMBOL_T ) ||
729 ( aItem->Type() == SCH_DIRECTIVE_LABEL_T ) ||
730 ( aItem->Type() == SCH_LABEL_T ) ||
731 ( aItem->Type() == SCH_HIER_LABEL_T ) ||
732 ( aItem->Type() == SCH_GLOBAL_LABEL_T );
733 }
734
738 bool IsInNetlist() const;
739
740 std::vector<VECTOR2I> GetConnectionPoints() const override;
741
742 INSPECT_RESULT Visit( INSPECTOR inspector, void* testData,
743 const std::vector<KICAD_T>& aScanTypes ) override;
744
752 SCH_ITEM* GetDrawItem( const VECTOR2I& aPosition, KICAD_T aType = TYPE_NOT_INIT );
753
754 wxString GetItemDescription( UNITS_PROVIDER* aUnitsProvider, bool aFull ) const override;
755
756 BITMAPS GetMenuImage() const override;
757
758 bool operator <( const SCH_ITEM& aItem ) const override;
759
760 bool operator==( const SCH_SYMBOL& aSymbol) const;
761 bool operator!=( const SCH_SYMBOL& aSymbol) const;
762
763 SCH_SYMBOL& operator=( const SCH_SYMBOL& aItem );
764
765 bool IsReplaceable() const override { return true; }
766
767 VECTOR2I GetPosition() const override { return m_pos; }
768 void SetPosition( const VECTOR2I& aPosition ) override { Move( aPosition - m_pos ); }
769
770 int GetX() const { return GetPosition().x; };
771 void SetX( int aX ) { SetPosition( VECTOR2I( aX, GetY() ) ); }
772
773 int GetY() const { return GetPosition().y; }
774 void SetY( int aY ) { SetPosition( VECTOR2I( GetX(), aY ) ); }
775
776 bool HitTest( const VECTOR2I& aPosition, int aAccuracy = 0 ) const override;
777 bool HitTest( const BOX2I& aRect, bool aContained, int aAccuracy = 0 ) const override;
778
779 void Plot( PLOTTER* aPlotter, bool aBackground, const SCH_PLOT_OPTS& aPlotOpts,
780 int aUnit, int aBodyStyle, const VECTOR2I& aOffset, bool aDimmed ) override;
781
789 void PlotPins( PLOTTER* aPlotter ) const;
790
797 void PlotDNP( PLOTTER* aPlotter ) const;
798
799 EDA_ITEM* Clone() const override;
800
801#if defined(DEBUG)
802 void Show( int nestLevel, std::ostream& os ) const override;
803#endif
804
805 void ClearBrightenedPins();
806
807 bool HasBrightenedPins();
808
809 bool IsPointClickableAnchor( const VECTOR2I& aPos ) const override;
810
816 bool IsSymbolLikePowerGlobalLabel() const;
817 bool IsSymbolLikePowerLocalLabel() const;
818
819 bool IsGlobalPower() const override;
820 bool IsLocalPower() const override;
821 bool IsPower() const override;
822 bool IsNormal() const override;
823
824 bool GetShowPinNames() const override;
825 void SetShowPinNames( bool aShow ) override;
826
827 bool GetShowPinNumbers() const override;
828 void SetShowPinNumbers( bool aShow ) override;
829
830 double Similarity( const SCH_ITEM& aOther ) const override;
831
833 std::unordered_set<wxString> GetComponentClassNames( const SCH_SHEET_PATH* aPath ) const;
834
835 bool operator==( const SCH_ITEM& aOther ) const override;
836
837protected:
838 void swapData( SCH_ITEM* aItem ) override;
839
840private:
841 BOX2I doGetBoundingBox( bool aIncludePins, bool aIncludeFields ) const;
842
843 bool doIsConnected( const VECTOR2I& aPosition ) const override;
844
845 void Init( const VECTOR2I& pos = VECTOR2I( 0, 0 ) );
846
847private:
850 wxString m_prefix;
854
863
864 std::vector<SCH_FIELD> m_fields;
865
866 std::unique_ptr<LIB_SYMBOL> m_part;
869
870 std::vector<std::unique_ptr<SCH_PIN>> m_pins;
871 std::unordered_map<SCH_PIN*, SCH_PIN*> m_pinMap;
872
878 std::vector<SCH_SYMBOL_INSTANCE> m_instanceReferences;
879
881 static std::unordered_map<TRANSFORM, int> s_transformToOrientationCache;
882};
883
884#endif /* SCH_SYMBOL_H */
BITMAPS
A list of all bitmap identifiers.
Definition: bitmaps_list.h:33
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
A logical library item identifier and consists of various portions much like a URI.
Definition: lib_id.h:49
UTF8 Format() const
Definition: lib_id.cpp:119
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).
Definition: sch_field.cpp:1103
Base class for any item which can be embedded within the SCHEMATIC container class,...
Definition: sch_item.h:168
SCHEMATIC * Schematic() const
Search the item hierarchy to find a SCHEMATIC.
Definition: sch_item.cpp:246
int GetBodyStyle() const
Definition: sch_item.h:248
SCH_LAYER_ID GetLayer() const
Return the layer this item is on.
Definition: sch_item.h:313
virtual void SetUnit(int aUnit)
Definition: sch_item.h:238
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.
Definition: sch_symbol.cpp:444
void SetValueProp(const wxString &aRef)
Definition: sch_symbol.h:493
SCH_SYMBOL & operator=(const SCH_SYMBOL &aItem)
size_t GetFullPinCount() const
void UpdatePrefix()
Set the prefix based on the current reference designator.
Definition: sch_symbol.cpp:650
wxString m_prefix
C, R, U, Q etc - the first character(s) which typically indicate what the symbol is.
Definition: sch_symbol.h:850
wxString GetDescription() const override
Definition: sch_symbol.cpp:261
std::unordered_map< SCH_PIN *, SCH_PIN * > m_pinMap
Library pin pointer : SCH_PIN indices.
Definition: sch_symbol.h:871
void SetMirrorX(bool aMirror)
Definition: sch_symbol.h:317
bool IsSymbolLikePowerGlobalLabel() const
VECTOR2I m_pos
Definition: sch_symbol.h:848
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:849
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.
Definition: sch_symbol.cpp:279
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)
Definition: sch_symbol.cpp:237
bool HasBrightenedPins()
std::vector< SCH_FIELD > & GetFields()
Return a reference to the vector holding the symbol's fields.
Definition: sch_symbol.h:430
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:518
void SetRefProp(const wxString &aRef)
Definition: sch_symbol.cpp:591
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:633
const std::vector< SCH_SYMBOL_INSTANCE > & GetInstances() const
Definition: sch_symbol.h:134
void SetPosition(const VECTOR2I &aPosition) override
Definition: sch_symbol.h:768
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:718
SYMBOL_ORIENTATION_PROP GetOrientationProp() const
Definition: sch_symbol.h:300
void SetBodyStyleUnconditional(int aBodyStyle)
Similar to SetBodyStyle(), but always set the body style, regardless the lib symbol properties (the L...
Definition: sch_symbol.cpp:400
int GetY() const
Definition: sch_symbol.h:773
wxString SubReference(int aUnit, bool aAddSeparator=true) const
Definition: sch_symbol.cpp:677
wxString GetClass() const override
Return the class name.
Definition: sch_symbol.h:114
void RemoveInstance(const SCH_SHEET_PATH &aInstancePath)
Definition: sch_symbol.cpp:492
bool IsAnnotated(const SCH_SHEET_PATH *aSheet) const
Check if the symbol has a valid annotation (reference) for the given sheet path.
Definition: sch_symbol.cpp:636
void SetMirrorY(bool aMirror)
Definition: sch_symbol.h:334
void PlotPins(PLOTTER *aPlotter) const
Plot just the symbol pins.
void SetBodyStyleProp(const wxString &aBodyStyle) override
Definition: sch_symbol.h:523
bool UseLibIdLookup() const
Definition: sch_symbol.h:181
void SetValueFieldText(const wxString &aValue)
Definition: sch_symbol.cpp:738
int GetX() const
Definition: sch_symbol.h:770
std::vector< SCH_PIN * > GetPins() const override
void RemoveField(const wxString &aFieldName)
Remove a user field from the symbol.
Definition: sch_symbol.cpp:822
void AutoplaceFields(SCH_SCREEN *aScreen, AUTOPLACE_ALGO aAlgo) override
Automatically orient all the fields in the symbol.
void SetBodyStyle(int aBodyStyle) override
Definition: sch_symbol.cpp:413
void SetShowPinNames(bool aShow) override
Set or clear the pin name visibility flag.
wxString GetKeyWords() const override
Definition: sch_symbol.cpp:270
wxString GetSchSymbolLibraryName() const
Definition: sch_symbol.cpp:243
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:683
void ClearBrightenedPins()
void SetY(int aY)
Definition: sch_symbol.h:774
EDA_ITEM * Clone() const override
Create a duplicate of this item with linked list members set to NULL.
Definition: sch_symbol.cpp:204
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:329
wxString GetRefProp() const
Definition: sch_symbol.h:481
wxString GetBodyStyleDescription(int aBodyStyle, bool aLabel) const override
Definition: sch_symbol.cpp:455
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:881
void UpdatePins()
Updates the cache of SCH_PIN objects for each pin.
Definition: sch_symbol.cpp:288
std::vector< SCH_SYMBOL_INSTANCE > m_instanceReferences
Define the hierarchical path and reference of the symbol.
Definition: sch_symbol.h:878
const wxString GetValue(bool aResolve, const SCH_SHEET_PATH *aPath, bool aAllowExtraText) const override
Definition: sch_symbol.cpp:728
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...
Definition: sch_symbol.cpp:916
SCH_FIELD * FindFieldCaseInsensitive(const wxString &aFieldName)
Search for a SCH_FIELD with aFieldName.
Definition: sch_symbol.cpp:838
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.
Definition: sch_symbol.cpp:850
wxString m_schLibSymbolName
The name used to look up a symbol in the symbol library embedded in a schematic.
Definition: sch_symbol.h:862
void SetRef(const SCH_SHEET_PATH *aSheet, const wxString &aReference)
Set the reference for the given sheet path for this symbol.
Definition: sch_symbol.cpp:600
void ClearAnnotation(const SCH_SHEET_PATH *aSheetPath, bool aResetPrefix)
Clear exiting symbol annotation.
void SetOrientationProp(SYMBOL_ORIENTATION_PROP aAngle)
Orientation/mirroring access for property manager.
Definition: sch_symbol.h:291
bool GetShowPinNames() const override
const wxString GetFootprintFieldText(bool aResolve, const SCH_SHEET_PATH *aPath, bool aAllowExtraText) const
Definition: sch_symbol.cpp:744
std::vector< SCH_FIELD > m_fields
Variable length list of fields.
Definition: sch_symbol.h:864
std::vector< SCH_PIN * > GetAllLibPins() const
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)
Definition: sch_symbol.cpp:754
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.
Definition: sch_symbol.cpp:520
bool IsMissingLibSymbol() const
Check to see if the library symbol is set to the dummy library symbol.
Definition: sch_symbol.cpp:210
VECTOR2I GetPosition() const override
Definition: sch_symbol.h:767
std::unique_ptr< LIB_SYMBOL > m_part
A flattened copy of the LIB_SYMBOL from the PROJECT object's libraries.
Definition: sch_symbol.h:866
int GetNextFieldOrdinal() const
Return the next ordinal for a user field for this symbol.
Definition: sch_symbol.cpp:809
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:431
bool CanConnect(const SCH_ITEM *aItem) const override
Definition: sch_symbol.h:723
void Init(const VECTOR2I &pos=VECTOR2I(0, 0))
Definition: sch_symbol.cpp:174
bool HasAlternateBodyStyle() const override
Test if symbol has more than one body conversion type (DeMorgan).
Definition: sch_symbol.cpp:426
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.
wxString GetUnitProp() const override
Definition: sch_symbol.h:498
void SetSchSymbolLibraryName(const wxString &aName)
The name of the symbol in the schematic library symbol list.
Definition: sch_symbol.h:179
bool IsMulti() const override
Definition: sch_symbol.h:261
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
Definition: sch_symbol.cpp:468
BOX2I doGetBoundingBox(bool aIncludePins, bool aIncludeFields) const
bool GetMirrorY() const
Definition: sch_symbol.h:346
SCH_FIELD * AddField(const SCH_FIELD &aField)
Add a field to the symbol.
Definition: sch_symbol.cpp:815
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:449
void SetX(int aX)
Definition: sch_symbol.h:771
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:868
int GetUnitSelection(const SCH_SHEET_PATH *aSheet) const
Return the instance-specific unit selection for the given sheet path.
Definition: sch_symbol.cpp:686
SCH_PIN * GetPin(const wxString &number) const
Find a symbol pin by number.
wxString GetValueProp() const
Definition: sch_symbol.h:488
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.
Definition: sch_symbol.cpp:435
void SetPrefix(const wxString &aPrefix)
Definition: sch_symbol.h:245
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.
Definition: sch_symbol.cpp:702
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:870
bool IsReplaceable() const override
Override this method in any derived object that supports test find and replace.
Definition: sch_symbol.h:765
void SetLibSymbol(LIB_SYMBOL *aLibSymbol)
Set this schematic symbol library symbol reference to aLibSymbol.
Definition: sch_symbol.cpp:252
void SetUnitProp(const wxString &aUnit) override
Definition: sch_symbol.h:505
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
Definition: sch_symbol.cpp:558
wxString GetPrefix() const
Definition: sch_symbol.h:244
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...
Definition: sch_symbol.cpp:216
bool IsPower() const override
bool operator==(const SCH_SYMBOL &aSymbol) const
SCH_FIELD * GetField(FIELD_T aFieldType)
Return a mandatory field in this symbol.
Definition: sch_symbol.cpp:760
A collection of SYMBOL_LIB objects.
Object used to load, save, search, and otherwise manipulate symbol library files.
A base class for LIB_SYMBOL and SCH_SYMBOL.
Definition: symbol.h:63
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:442
AUTOPLACE_ALGO
Definition: sch_item.h:69
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 ...
Definition: sch_symbol.cpp:56
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_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:164
@ SCH_NO_CONNECT_T
Definition: typeinfo.h:161
@ TYPE_NOT_INIT
Definition: typeinfo.h:81
@ SCH_SYMBOL_T
Definition: typeinfo.h:173
@ SCH_DIRECTIVE_LABEL_T
Definition: typeinfo.h:172
@ SCH_LABEL_T
Definition: typeinfo.h:168
@ SCH_HIER_LABEL_T
Definition: typeinfo.h:170
@ SCH_GLOBAL_LABEL_T
Definition: typeinfo.h:169
@ SCH_JUNCTION_T
Definition: typeinfo.h:160
VECTOR2< int32_t > VECTOR2I
Definition: vector2d.h:695