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 (C) 1992-2024 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 <symbol_lib_table.h>
50#include <transform.h>
51
52struct PICKED_SYMBOL;
53class KIID_PATH;
54class SCH_SCREEN;
55class LIB_SYMBOL;
56class MSG_PANEL_ITEM;
57class NETLIST_OBJECT_LIST;
58class SYMBOL_LIB;
59class SYMBOL_LIBS;
60class EE_COLLECTOR;
61class SCH_SCREEN;
62class SCH_COMMIT;
64
65
67typedef std::vector<SCH_FIELD> SCH_FIELDS;
68
69typedef std::weak_ptr<LIB_SYMBOL> PART_REF;
70
71
72extern std::string toUTFTildaText( const wxString& txt );
73
74
75// @todo Move this to transform alone with all of the transform manipulation code.
78{
79 SYM_NORMAL, // Normal orientation, no rotation or mirror
80 SYM_ROTATE_CLOCKWISE, // Rotate -90
82 SYM_ORIENT_0, // No rotation and no mirror id SYM_NORMAL
83 SYM_ORIENT_90, // Rotate 90, no mirror
84 SYM_ORIENT_180, // Rotate 180, no mirror
85 SYM_ORIENT_270, // Rotate -90, no mirror
86 SYM_MIRROR_X = 0x100, // Mirror around X axis
87 SYM_MIRROR_Y = 0x200 // Mirror around Y axis
88};
89
90
91// Cover for SYMBOL_ORIENTATION_T for property manager (in order to expose only a subset of
92// SYMBOL_ORIENTATION_T's values).
94{
99};
100
101
105class SCH_SYMBOL : public SYMBOL
106{
107public:
108 SCH_SYMBOL();
109
120 SCH_SYMBOL( const LIB_SYMBOL& aSymbol, const LIB_ID& aLibId, const SCH_SHEET_PATH* aSheet,
121 int aUnit, int aBodyStyle = 0, const VECTOR2I& aPosition = VECTOR2I( 0, 0 ),
122 EDA_ITEM* aParent = nullptr );
123
124 SCH_SYMBOL( const LIB_SYMBOL& aSymbol, const SCH_SHEET_PATH* aSheet, const PICKED_SYMBOL& aSel,
125 const VECTOR2I& aPosition = VECTOR2I( 0, 0 ), EDA_ITEM* aParent = nullptr );
126
136 SCH_SYMBOL( const SCH_SYMBOL& aSymbol );
137
138 ~SCH_SYMBOL();
139
140 static inline bool ClassOf( const EDA_ITEM* aItem )
141 {
142 return aItem && SCH_SYMBOL_T == aItem->Type();
143 }
144
145 wxString GetClass() const override
146 {
147 return wxT( "SCH_SYMBOL" );
148 }
149
163 bool IsMissingLibSymbol() const;
164
165 const std::vector<SCH_SYMBOL_INSTANCE>& GetInstances() const
166 {
168 }
169
170 bool GetInstance( SCH_SYMBOL_INSTANCE& aInstance,
171 const KIID_PATH& aSheetPath, bool aTestFromEnd = false ) const;
172
173 void RemoveInstance( const SCH_SHEET_PATH& aInstancePath );
174
175 void RemoveInstance( const KIID_PATH& aInstancePath );
176
191 bool IsMovableFromAnchorPoint() const override;
192
193 void SetLibId( const LIB_ID& aName );
194
195 const LIB_ID& GetLibId() const override { return m_lib_id; }
196
197 wxString GetSymbolIDAsString() const { return m_lib_id.Format(); }
198
210 void SetSchSymbolLibraryName( const wxString& aName ) { m_schLibSymbolName = aName; }
211 wxString GetSchSymbolLibraryName() const;
212 bool UseLibIdLookup() const { return m_schLibSymbolName.IsEmpty(); }
213
214 std::unique_ptr< LIB_SYMBOL >& GetLibSymbolRef() { return m_part; }
215 const std::unique_ptr< LIB_SYMBOL >& GetLibSymbolRef() const { return m_part; }
216
233 void SetLibSymbol( LIB_SYMBOL* aLibSymbol );
234
238 wxString GetDescription() const override;
239
243 wxString GetKeyWords() const override;
244
248 wxString GetDatasheet() const;
249
253 void UpdatePins();
254
260 bool HasUnitDisplayName( int aUnit ) const;
261
267 wxString GetUnitDisplayName( int aUnit ) const;
268
269 void SetBodyStyle( int aBodyStyle ) override;
270
276 void SetBodyStyleUnconditional( int aBodyStyle );
277
278 bool HasAlternateBodyStyle() const override;
279
280 wxString GetPrefix() const { return m_prefix; }
281 void SetPrefix( const wxString& aPrefix ) { m_prefix = aPrefix; }
282
286 void UpdatePrefix();
287
288 wxString SubReference( int aUnit, bool aAddSeparator = true ) const;
289
291 const TRANSFORM& GetTransform() const { return m_transform; }
292
293 void SetTransform( const TRANSFORM& aTransform );
294
300 int GetUnitCount() const override;
301
302 bool IsMulti() const override { return GetUnitCount() > 1; }
303
310 void SetOrientation( int aOrientation );
311
327 int GetOrientation() const;
328
333 {
334 int mirroring = GetOrientation();
335
336 mirroring &= ( SYMBOL_ORIENTATION_T::SYM_MIRROR_X | SYMBOL_ORIENTATION_T::SYM_MIRROR_Y );
337
338 SetOrientation( aAngle | mirroring );
339 }
340
342 {
343 int orientation = GetOrientation();
344
345 orientation &= ~( SYMBOL_ORIENTATION_T::SYM_MIRROR_X | SYMBOL_ORIENTATION_T::SYM_MIRROR_Y );
346
347 switch( orientation )
348 {
349 default:
350 case SYM_NORMAL:
351 case SYM_ORIENT_0: return SYMBOL_ORIENTATION_PROP::SYMBOL_ANGLE_0;
352 case SYM_ORIENT_90: return SYMBOL_ORIENTATION_PROP::SYMBOL_ANGLE_90;
353 case SYM_ORIENT_180: return SYMBOL_ORIENTATION_PROP::SYMBOL_ANGLE_180;
354 case SYM_ORIENT_270: return SYMBOL_ORIENTATION_PROP::SYMBOL_ANGLE_270;
355 }
356 }
357
358 void SetMirrorX( bool aMirror )
359 {
360 int orientation = GetOrientation();
361
362 if( aMirror )
363 orientation |= SYMBOL_ORIENTATION_T::SYM_MIRROR_X;
364 else
366
367 SetOrientation( orientation );
368 }
369
370 bool GetMirrorX() const
371 {
372 return GetOrientation() & SYMBOL_ORIENTATION_T::SYM_MIRROR_X;
373 }
374
375 void SetMirrorY( bool aMirror )
376 {
377 int orientation = GetOrientation();
378
379 if( aMirror )
380 orientation |= SYMBOL_ORIENTATION_T::SYM_MIRROR_Y;
381 else
383
384 SetOrientation( orientation );
385 }
386
387 bool GetMirrorY() const
388 {
389 return GetOrientation() & SYMBOL_ORIENTATION_T::SYM_MIRROR_Y;
390 }
391
395 void GetContextualTextVars( wxArrayString* aVars ) const;
396
402 bool ResolveTextVar( const SCH_SHEET_PATH* aPath, wxString* token, int aDepth = 0 ) const;
403
404 void GetMsgPanelInfo( EDA_DRAW_FRAME* aFrame, std::vector<MSG_PANEL_ITEM>& aList ) override;
405
416 void ClearAnnotation( const SCH_SHEET_PATH* aSheetPath, bool aResetPrefix );
417
429 bool AddSheetPathReferenceEntryIfMissing( const KIID_PATH& aSheetPath );
430
431
432 const BOX2I GetBoundingBox() const override;
433
438
443
444
445 //-----<Fields>-----------------------------------------------------------
446
455 SCH_FIELD* GetField( MANDATORY_FIELD_T aFieldType );
456 const SCH_FIELD* GetField( MANDATORY_FIELD_T aFieldNdx ) const;
457
465 SCH_FIELD* GetFieldById( int aFieldId );
466
474 SCH_FIELD* GetFieldByName( const wxString& aFieldName );
475
476 const SCH_FIELD* GetFieldByName( const wxString& aFieldName ) const;
477
484 void GetFields( std::vector<SCH_FIELD*>& aVector, bool aVisibleOnly );
485
489 std::vector<SCH_FIELD>& GetFields() { return m_fields; }
490 const std::vector<SCH_FIELD>& GetFields() const { return m_fields; }
491
499 SCH_FIELD* AddField( const SCH_FIELD& aField );
500
506 void RemoveField( const wxString& aFieldName );
507
508 void RemoveField( SCH_FIELD* aField ) { RemoveField( aField->GetName() ); }
509
519 SCH_FIELD* FindField( const wxString& aFieldName, bool aIncludeDefaultFields = true,
520 bool aCaseInsensitive = false );
521
525 const wxString GetRef( const SCH_SHEET_PATH* aSheet,
526 bool aIncludeUnit = false ) const override;
527
531 const wxString GetValue( bool aResolve, const SCH_SHEET_PATH* aPath,
532 bool aAllowExtraText ) const override;
533
534 void SetValueFieldText( const wxString& aValue );
535
536 const wxString GetFootprintFieldText( bool aResolve, const SCH_SHEET_PATH* aPath,
537 bool aAllowExtraText ) const;
538 void SetFootprintFieldText( const wxString& aFootprint );
539
540 /*
541 * Field access for property manager
542 */
543 wxString GetRefProp() const
544 {
545 return GetRef( &Schematic()->CurrentSheet() );
546 }
547 void SetRefProp( const wxString& aRef )
548 {
549 SetRef( &Schematic()->CurrentSheet(), aRef );
550 }
551 wxString GetValueProp() const
552 {
553 return GetValue( false, &Schematic()->CurrentSheet(), false );
554 }
555 void SetValueProp( const wxString& aRef )
556 {
557 SetValueFieldText( aRef );
558 }
559 int GetUnitProp() const
560 {
561 return GetUnitSelection( &Schematic()->CurrentSheet() );
562 }
563 void SetUnitProp( int aUnit )
564 {
565 if( aUnit < 1 )
566 return;
567
568 if( aUnit > GetUnitCount() )
569 aUnit = GetUnitCount();
570
571 SetUnitSelection( &Schematic()->CurrentSheet(), aUnit );
572 SetUnit( aUnit );
573 }
575 {
576 return GetBodyStyle();
577 }
578 void SetBodyStyleProp( int aBodyStyle )
579 {
580 SetBodyStyle( aBodyStyle );
581 }
582
593 void UpdateFields( const SCH_SHEET_PATH* aPath, bool aUpdateStyle, bool aUpdateRef,
594 bool aUpdateOtherFields, bool aResetRef, bool aResetOtherFields );
595
605 void SyncOtherUnits( const SCH_SHEET_PATH& aSourceSheet, SCH_COMMIT& aCommit,
606 PROPERTY_BASE* aProperty );
607
611 int GetFieldCount() const { return (int)m_fields.size(); }
612
622 void AutoplaceFields( SCH_SCREEN* aScreen, bool aManual ) override;
623
624 void RunOnChildren( const std::function<void( SCH_ITEM* )>& aFunction ) override;
625
626
627 //-----</Fields>----------------------------------------------------------
628
629
636 SCH_PIN* GetPin( const wxString& number ) const;
637
644 std::vector<SCH_PIN*> GetLibPins() const;
645
650 std::vector<SCH_PIN*> GetAllLibPins() const;
651
655 size_t GetFullPinCount() const;
656
660 SCH_PIN* GetPin( SCH_PIN* aLibPin ) const;
661
669 const SCH_PIN* GetPin( const VECTOR2I& aPosition ) const;
670
679 std::vector<SCH_PIN*> GetPins( const SCH_SHEET_PATH* aSheet = nullptr ) const;
680
681
682 std::vector<std::unique_ptr<SCH_PIN>>& GetRawPins() { return m_pins; }
683
684 void SwapData( SCH_ITEM* aItem ) override;
685
694 static bool IsReferenceStringValid( const wxString& aReferenceString );
695
702 void SetRef( const SCH_SHEET_PATH* aSheet, const wxString& aReference );
703
710 bool IsAnnotated( const SCH_SHEET_PATH* aSheet ) const;
711
723 void AddHierarchicalReference( const KIID_PATH& aPath,
724 const wxString& aRef,
725 int aUnit );
726
727 void AddHierarchicalReference( const SCH_SYMBOL_INSTANCE& aInstance );
728
730 int GetUnitSelection( const SCH_SHEET_PATH* aSheet ) const;
731
733 void SetUnitSelection( const SCH_SHEET_PATH* aSheet, int aUnitSelection );
734
736 void SetUnitSelection( int aUnitSelection );
737
738 void Move( const VECTOR2I& aMoveVector ) override
739 {
740 if( aMoveVector == VECTOR2I( 0, 0 ) )
741 return;
742
743 m_pos += aMoveVector;
744
745 for( SCH_FIELD& field : m_fields )
746 field.Move( aMoveVector );
747 }
748
749 void MirrorHorizontally( int aCenter ) override;
750 void MirrorVertically( int aCenter ) override;
751 void Rotate( const VECTOR2I& aCenter, bool aRotateCCW ) override;
752
753 bool Matches( const EDA_SEARCH_DATA& aSearchData, void* aAuxData ) const override;
754
755 void GetEndPoints( std::vector<DANGLING_END_ITEM>& aItemList ) override;
756
767 bool UpdateDanglingState( std::vector<DANGLING_END_ITEM>& aItemListByType,
768 std::vector<DANGLING_END_ITEM>& aItemListByPos,
769 const SCH_SHEET_PATH* aPath = nullptr ) override;
770
771 VECTOR2I GetPinPhysicalPosition( const SCH_PIN* Pin ) const;
772
773 bool IsConnectable() const override { return true; }
774
775 bool HasConnectivityChanges( const SCH_ITEM* aItem,
776 const SCH_SHEET_PATH* aInstance = nullptr ) const override;
777
778 bool CanConnect( const SCH_ITEM* aItem ) const override
779 {
780 return ( aItem->Type() == SCH_LINE_T && aItem->GetLayer() == LAYER_WIRE ) ||
781 ( aItem->Type() == SCH_NO_CONNECT_T ) ||
782 ( aItem->Type() == SCH_JUNCTION_T ) ||
783 ( aItem->Type() == SCH_SYMBOL_T ) ||
784 ( aItem->Type() == SCH_DIRECTIVE_LABEL_T ) ||
785 ( aItem->Type() == SCH_LABEL_T ) ||
786 ( aItem->Type() == SCH_HIER_LABEL_T ) ||
787 ( aItem->Type() == SCH_GLOBAL_LABEL_T );
788 }
789
793 bool IsInNetlist() const;
794
795 std::vector<VECTOR2I> GetConnectionPoints() const override;
796
797 INSPECT_RESULT Visit( INSPECTOR inspector, void* testData,
798 const std::vector<KICAD_T>& aScanTypes ) override;
799
807 SCH_ITEM* GetDrawItem( const VECTOR2I& aPosition, KICAD_T aType = TYPE_NOT_INIT );
808
809 wxString GetItemDescription( UNITS_PROVIDER* aUnitsProvider, bool aFull ) const override;
810
811 BITMAPS GetMenuImage() const override;
812
813 bool operator <( const SCH_ITEM& aItem ) const override;
814
815 bool operator==( const SCH_SYMBOL& aSymbol) const;
816 bool operator!=( const SCH_SYMBOL& aSymbol) const;
817
818 SCH_SYMBOL& operator=( const SCH_SYMBOL& aItem );
819
820 bool IsReplaceable() const override { return true; }
821
822 VECTOR2I GetPosition() const override { return m_pos; }
823 void SetPosition( const VECTOR2I& aPosition ) override { Move( aPosition - m_pos ); }
824
825 int GetX() const { return GetPosition().x; };
826 void SetX( int aX ) { SetPosition( VECTOR2I( aX, GetY() ) ); }
827
828 int GetY() const { return GetPosition().y; }
829 void SetY( int aY ) { SetPosition( VECTOR2I( GetX(), aY ) ); }
830
831 bool HitTest( const VECTOR2I& aPosition, int aAccuracy = 0 ) const override;
832 bool HitTest( const BOX2I& aRect, bool aContained, int aAccuracy = 0 ) const override;
833
841 void Print( const SCH_RENDER_SETTINGS* aSettings, int aUnit, int aBodyStyle,
842 const VECTOR2I& aOffset, bool aForceNoFill, bool aDimmed ) override;
843
851 void PrintBackground( const SCH_RENDER_SETTINGS* aSettings, int aUnit, int aBodyStyle,
852 const VECTOR2I& aOffset, bool aDimmed ) override;
853
854 void Plot( PLOTTER* aPlotter, bool aBackground, const SCH_PLOT_OPTS& aPlotOpts,
855 int aUnit, int aBodyStyle, const VECTOR2I& aOffset, bool aDimmed ) override;
856
864 void PlotPins( PLOTTER* aPlotter ) const;
865
872 void PlotDNP( PLOTTER* aPlotter ) const;
873
874 EDA_ITEM* Clone() const override;
875
876#if defined(DEBUG)
877 void Show( int nestLevel, std::ostream& os ) const override;
878#endif
879
880 void ClearBrightenedPins();
881
882 bool HasBrightenedPins();
883
884 bool IsPointClickableAnchor( const VECTOR2I& aPos ) const override;
885
891 bool IsSymbolLikePowerGlobalLabel() const;
892
893 bool IsPower() const override;
894 bool IsNormal() const override;
895
896 bool GetShowPinNames() const override;
897 void SetShowPinNames( bool aShow ) override;
898
899 bool GetShowPinNumbers() const override;
900 void SetShowPinNumbers( bool aShow ) override;
901
902 double Similarity( const SCH_ITEM& aOther ) const override;
903
904 bool operator==( const SCH_ITEM& aOther ) const override;
905
906private:
907 BOX2I doGetBoundingBox( bool aIncludePins, bool aIncludeFields ) const;
908
909 bool doIsConnected( const VECTOR2I& aPosition ) const override;
910
911 void Init( const VECTOR2I& pos = VECTOR2I( 0, 0 ) );
912
913private:
916 wxString m_prefix;
920
929
931 std::vector<SCH_FIELD> m_fields;
932
933 std::unique_ptr<LIB_SYMBOL> m_part;
936
937 std::vector<std::unique_ptr<SCH_PIN>> m_pins;
938 std::unordered_map<SCH_PIN*, SCH_PIN*> m_pinMap;
939
940 // Defines the hierarchical path and reference of the symbol. This allows support for multiple
941 // references to a single sub-sheet.
942 std::vector<SCH_SYMBOL_INSTANCE> m_instanceReferences;
943
945 static std::unordered_map<TRANSFORM, int> s_transformToOrientationCache;
946};
947
948#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:89
KICAD_T Type() const
Returns the type of object.
Definition: eda_item.h:101
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:118
Define a library symbol object.
Definition: lib_symbol.h:78
EDA_MSG_PANEL items for displaying messages.
Definition: msgpanel.h:54
Base plotter engine class.
Definition: plotter.h:105
Instances are attached to a symbol or sheet and provide a place for the symbol's value,...
Definition: sch_field.h:51
wxString GetName(bool aUseDefaultName=true) const
Return the field name (not translated).
Definition: sch_field.cpp:1220
Base class for any item which can be embedded within the SCHEMATIC container class,...
Definition: sch_item.h:166
SCHEMATIC * Schematic() const
Searches the item hierarchy to find a SCHEMATIC.
Definition: sch_item.cpp:150
int GetBodyStyle() const
Definition: sch_item.h:232
SCH_LAYER_ID GetLayer() const
Return the layer this item is on.
Definition: sch_item.h:281
virtual void SetUnit(int aUnit)
Definition: sch_item.h:228
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:106
const TRANSFORM & GetTransform() const
Definition: sch_symbol.h:291
void SetValueProp(const wxString &aRef)
Definition: sch_symbol.h:555
SCH_SYMBOL & operator=(const SCH_SYMBOL &aItem)
int GetUnitProp() const
Definition: sch_symbol.h:559
size_t GetFullPinCount() const
void UpdatePrefix()
Set the prefix based on the current reference designator.
Definition: sch_symbol.cpp:824
wxString m_prefix
C, R, U, Q etc - the first character(s) which typically indicate what the symbol is.
Definition: sch_symbol.h:916
SCH_FIELD * GetFieldByName(const wxString &aFieldName)
Return a field in this symbol.
Definition: sch_symbol.cpp:958
wxString GetDescription() const override
Definition: sch_symbol.cpp:286
std::unordered_map< SCH_PIN *, SCH_PIN * > m_pinMap
library pin pointer : SCH_PIN's index
Definition: sch_symbol.h:938
void RunOnChildren(const std::function< void(SCH_ITEM *)> &aFunction) override
void SetMirrorX(bool aMirror)
Definition: sch_symbol.h:358
bool IsSymbolLikePowerGlobalLabel() const
VECTOR2I m_pos
Definition: sch_symbol.h:914
wxString GetSymbolIDAsString() const
Definition: sch_symbol.h:197
LIB_ID m_lib_id
Name and library the symbol was loaded from, i.e. 74xx:74LS00.
Definition: sch_symbol.h:915
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:304
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:262
bool HasBrightenedPins()
std::vector< SCH_FIELD > & GetFields()
Return a vector of fields from the symbol.
Definition: sch_symbol.h:489
void SetRefProp(const wxString &aRef)
Definition: sch_symbol.h:547
void Print(const SCH_RENDER_SETTINGS *aSettings, int aUnit, int aBodyStyle, const VECTOR2I &aOffset, bool aForceNoFill, bool aDimmed) override
Print a symbol.
Definition: sch_symbol.cpp:508
wxString GetUnitDisplayName(int aUnit) const
Return the display name for a given unit aUnit.
Definition: sch_symbol.cpp:475
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...
void AutoplaceFields(SCH_SCREEN *aScreen, bool aManual) override
Automatically orient all the fields in the symbol.
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:682
const std::vector< SCH_SYMBOL_INSTANCE > & GetInstances() const
Definition: sch_symbol.h:165
void SetPosition(const VECTOR2I &aPosition) override
Definition: sch_symbol.h:823
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:773
SYMBOL_ORIENTATION_PROP GetOrientationProp() const
Definition: sch_symbol.h:341
int GetFieldCount() const
Return the number of fields in this symbol.
Definition: sch_symbol.h:611
void SetBodyStyleUnconditional(int aBodyStyle)
Similar to SetBodyStyle(), but always set the body style, regardless the lib symbol properties (the L...
Definition: sch_symbol.cpp:425
int GetY() const
Definition: sch_symbol.h:828
wxString SubReference(int aUnit, bool aAddSeparator=true) const
Definition: sch_symbol.cpp:851
wxString GetClass() const override
Return the class name.
Definition: sch_symbol.h:145
void RemoveInstance(const SCH_SHEET_PATH &aInstancePath)
Definition: sch_symbol.cpp:607
static bool IsReferenceStringValid(const wxString &aReferenceString)
Test for an acceptable reference string.
Definition: sch_symbol.cpp:768
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:810
void SetMirrorY(bool aMirror)
Definition: sch_symbol.h:375
void PlotPins(PLOTTER *aPlotter) const
Plot just the symbol pins.
bool UseLibIdLookup() const
Definition: sch_symbol.h:212
void SetValueFieldText(const wxString &aValue)
Definition: sch_symbol.cpp:912
int GetX() const
Definition: sch_symbol.h:825
void RemoveField(const wxString &aFieldName)
Remove a user field from the symbol.
void SetBodyStyle(int aBodyStyle) override
Definition: sch_symbol.cpp:438
void SwapData(SCH_ITEM *aItem) override
Swap the internal data structures aItem with the schematic item.
void SetShowPinNames(bool aShow) override
Set or clear the pin name visibility flag.
wxString GetKeyWords() const override
Definition: sch_symbol.cpp:295
wxString GetSchSymbolLibraryName() const
Definition: sch_symbol.cpp:268
SCH_FIELD * FindField(const wxString &aFieldName, bool aIncludeDefaultFields=true, bool aCaseInsensitive=false)
Search for a SCH_FIELD with aFieldName.
static bool ClassOf(const EDA_ITEM *aItem)
Definition: sch_symbol.h:140
bool IsInNetlist() const
void Move(const VECTOR2I &aMoveVector) override
Move the item by aMoveVector to a new position.
Definition: sch_symbol.h:738
void SetBodyStyleProp(int aBodyStyle)
Definition: sch_symbol.h:578
void ClearBrightenedPins()
void SetY(int aY)
Definition: sch_symbol.h:829
EDA_ITEM * Clone() const override
Create a duplicate of this item with linked list members set to NULL.
Definition: sch_symbol.cpp:229
bool HasConnectivityChanges(const SCH_ITEM *aItem, const SCH_SHEET_PATH *aInstance=nullptr) const override
Check if aItem has connectivity changes against this object.
bool GetMirrorX() const
Definition: sch_symbol.h:370
wxString GetRefProp() const
Definition: sch_symbol.h:543
bool AddSheetPathReferenceEntryIfMissing(const KIID_PATH &aSheetPath)
Add an instance to the alternate references list (m_instanceReferences), if this entry does not alrea...
SCH_FIELD * GetField(MANDATORY_FIELD_T aFieldType)
Return a mandatory field in this symbol.
Definition: sch_symbol.cpp:934
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:945
void UpdatePins()
Updates the cache of SCH_PIN objects for each pin.
Definition: sch_symbol.cpp:313
std::vector< SCH_SYMBOL_INSTANCE > m_instanceReferences
Definition: sch_symbol.h:942
const wxString GetValue(bool aResolve, const SCH_SHEET_PATH *aPath, bool aAllowExtraText) const override
Definition: sch_symbol.cpp:902
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 assignements in sync i...
const std::unique_ptr< LIB_SYMBOL > & GetLibSymbolRef() const
Definition: sch_symbol.h:215
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:928
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:774
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:332
bool GetShowPinNames() const override
std::vector< SCH_PIN * > GetPins(const SCH_SHEET_PATH *aSheet=nullptr) const
Retrieve a list of the SCH_PINs for the given sheet path.
const wxString GetFootprintFieldText(bool aResolve, const SCH_SHEET_PATH *aPath, bool aAllowExtraText) const
Definition: sch_symbol.cpp:918
std::vector< SCH_FIELD > m_fields
Variable length list of fields.
Definition: sch_symbol.h:931
int GetBodyStyleProp() const
Definition: sch_symbol.h:574
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:928
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:635
bool IsMissingLibSymbol() const
Check to see if the library symbol is set to the dummy library symbol.
Definition: sch_symbol.cpp:235
VECTOR2I GetPosition() const override
Definition: sch_symbol.h:822
void SetTransform(const TRANSFORM &aTransform)
Definition: sch_symbol.cpp:460
std::unique_ptr< LIB_SYMBOL > m_part
A flattened copy of the LIB_SYMBOL from the PROJECT's libraries.
Definition: sch_symbol.h:933
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:490
bool CanConnect(const SCH_ITEM *aItem) const override
Definition: sch_symbol.h:778
void Init(const VECTOR2I &pos=VECTOR2I(0, 0))
Definition: sch_symbol.cpp:201
bool HasAlternateBodyStyle() const override
Test if symbol has more than one body conversion type (DeMorgan).
Definition: sch_symbol.cpp:451
const LIB_ID & GetLibId() const override
Definition: sch_symbol.h:195
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:563
void SetSchSymbolLibraryName(const wxString &aName)
The name of the symbol in the schematic library symbol list.
Definition: sch_symbol.h:210
bool IsMulti() const override
Definition: sch_symbol.h:302
void MirrorHorizontally(int aCenter) override
Mirror item horizontally about aCenter.
SCH_FIELD * GetFieldById(int aFieldId)
Return a field in this symbol.
Definition: sch_symbol.cpp:946
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:583
TRANSFORM & GetTransform()
Definition: sch_symbol.h:290
BOX2I doGetBoundingBox(bool aIncludePins, bool aIncludeFields) const
bool GetMirrorY() const
Definition: sch_symbol.h:387
SCH_FIELD * AddField(const SCH_FIELD &aField)
Add a field to the symbol.
Definition: sch_symbol.cpp:997
void GetEndPoints(std::vector< DANGLING_END_ITEM > &aItemList) override
Add the schematic item end points to aItemList if the item has end points.
int GetOrientation() const
Get the display symbol orientation.
void RemoveField(SCH_FIELD *aField)
Definition: sch_symbol.h:508
void SetX(int aX)
Definition: sch_symbol.h:826
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:935
int GetUnitSelection(const SCH_SHEET_PATH *aSheet) const
Return the instance-specific unit selection for the given sheet path.
Definition: sch_symbol.cpp:860
BOX2I GetBodyAndPinsBoundingBox() const
Return a bounding box for the symbol body and pins but not the fields.
TRANSFORM m_transform
The rotation/mirror transformation.
Definition: sch_symbol.h:930
SCH_PIN * GetPin(const wxString &number) const
Find a symbol pin by number.
wxString GetValueProp() const
Definition: sch_symbol.h:551
void PrintBackground(const SCH_RENDER_SETTINGS *aSettings, int aUnit, int aBodyStyle, const VECTOR2I &aOffset, bool aDimmed) override
Print only the background parts of a symbol (if any)
Definition: sch_symbol.cpp:491
int GetUnitCount() const override
Return the number of units per package of the symbol.
Definition: sch_symbol.cpp:466
void SetPrefix(const wxString &aPrefix)
Definition: sch_symbol.h:281
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.
void SetUnitSelection(const SCH_SHEET_PATH *aSheet, int aUnitSelection)
Set the selected unit of this symbol on one sheet.
Definition: sch_symbol.cpp:876
bool IsNormal() const override
std::unique_ptr< LIB_SYMBOL > & GetLibSymbolRef()
Definition: sch_symbol.h:214
std::vector< std::unique_ptr< SCH_PIN > > m_pins
a SCH_PIN for every SCH_PIN (all units)
Definition: sch_symbol.h:937
bool IsReplaceable() const override
Override this method in any derived object that supports test find and replace.
Definition: sch_symbol.h:820
void SetLibSymbol(LIB_SYMBOL *aLibSymbol)
Set this schematic symbol library symbol reference to aLibSymbol.
Definition: sch_symbol.cpp:277
VECTOR2I GetPinPhysicalPosition(const SCH_PIN *Pin) const
BOX2I GetBodyBoundingBox() const
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:735
wxString GetPrefix() const
Definition: sch_symbol.h:280
bool HasUnitDisplayName(int aUnit) const
Return true if the given unit aUnit has a display name set.
Definition: sch_symbol.cpp:483
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:241
bool IsPower() const override
bool operator==(const SCH_SYMBOL &aSymbol) const
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:34
for transforming drawing coordinates for a wxDC device context.
Definition: transform.h:46
INSPECT_RESULT
Definition: eda_item.h:43
const INSPECTOR_FUNC & INSPECTOR
Definition: eda_item.h:82
@ LAYER_WIRE
Definition: layer_ids.h:357
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:54
std::weak_ptr< LIB_SYMBOL > PART_REF
Definition: sch_symbol.h:69
SYMBOL_ORIENTATION_PROP
Definition: sch_symbol.h:94
@ SYMBOL_ANGLE_180
Definition: sch_symbol.h:97
@ SYMBOL_ANGLE_0
Definition: sch_symbol.h:95
@ SYMBOL_ANGLE_90
Definition: sch_symbol.h:96
@ SYMBOL_ANGLE_270
Definition: sch_symbol.h:98
std::vector< SCH_FIELD > SCH_FIELDS
A container for several SCH_FIELD items.
Definition: sch_symbol.h:67
SYMBOL_ORIENTATION_T
enum used in RotationMiroir()
Definition: sch_symbol.h:78
@ SYM_ORIENT_270
Definition: sch_symbol.h:85
@ SYM_ROTATE_CLOCKWISE
Definition: sch_symbol.h:80
@ SYM_ROTATE_COUNTERCLOCKWISE
Definition: sch_symbol.h:81
@ SYM_MIRROR_Y
Definition: sch_symbol.h:87
@ SYM_ORIENT_180
Definition: sch_symbol.h:84
@ SYM_MIRROR_X
Definition: sch_symbol.h:86
@ SYM_NORMAL
Definition: sch_symbol.h:79
@ SYM_ORIENT_90
Definition: sch_symbol.h:83
@ SYM_ORIENT_0
Definition: sch_symbol.h:82
A simple container for schematic symbol instance information.
MANDATORY_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:163
@ SCH_NO_CONNECT_T
Definition: typeinfo.h:160
@ TYPE_NOT_INIT
Definition: typeinfo.h:81
@ SCH_SYMBOL_T
Definition: typeinfo.h:172
@ SCH_DIRECTIVE_LABEL_T
Definition: typeinfo.h:171
@ SCH_LABEL_T
Definition: typeinfo.h:167
@ SCH_HIER_LABEL_T
Definition: typeinfo.h:169
@ SCH_GLOBAL_LABEL_T
Definition: typeinfo.h:168
@ SCH_JUNCTION_T
Definition: typeinfo.h:159
VECTOR2< int32_t > VECTOR2I
Definition: vector2d.h:676