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 <transform.h>
50
51struct PICKED_SYMBOL;
52class KIID_PATH;
53class SCH_SCREEN;
54class LIB_SYMBOL;
55class MSG_PANEL_ITEM;
56class NETLIST_OBJECT_LIST;
57class SYMBOL_LIB;
58class SYMBOL_LIBS;
59class EE_COLLECTOR;
60class SCH_SCREEN;
61class SCH_COMMIT;
62
63
65typedef std::vector<SCH_FIELD> SCH_FIELDS;
66
67typedef std::weak_ptr<LIB_SYMBOL> PART_REF;
68
69
70extern std::string toUTFTildaText( const wxString& txt );
71
72
73// @todo Move this to transform alone with all of the transform manipulation code.
76{
77 SYM_NORMAL, // Normal orientation, no rotation or mirror
78 SYM_ROTATE_CLOCKWISE, // Rotate -90
80 SYM_ORIENT_0, // No rotation and no mirror id SYM_NORMAL
81 SYM_ORIENT_90, // Rotate 90, no mirror
82 SYM_ORIENT_180, // Rotate 180, no mirror
83 SYM_ORIENT_270, // Rotate -90, no mirror
84 SYM_MIRROR_X = 0x100, // Mirror around X axis
85 SYM_MIRROR_Y = 0x200 // Mirror around Y axis
86};
87
88
89// Cover for SYMBOL_ORIENTATION_T for property manager (in order to expose only a subset of
90// SYMBOL_ORIENTATION_T's values).
92{
97};
98
99
103class SCH_SYMBOL : public SYMBOL
104{
105public:
106 SCH_SYMBOL();
107
118 SCH_SYMBOL( const LIB_SYMBOL& aSymbol, const LIB_ID& aLibId, const SCH_SHEET_PATH* aSheet,
119 int aUnit, int aBodyStyle = 0, const VECTOR2I& aPosition = VECTOR2I( 0, 0 ),
120 EDA_ITEM* aParent = nullptr );
121
122 SCH_SYMBOL( const LIB_SYMBOL& aSymbol, const SCH_SHEET_PATH* aSheet, const PICKED_SYMBOL& aSel,
123 const VECTOR2I& aPosition = VECTOR2I( 0, 0 ), EDA_ITEM* aParent = nullptr );
124
134 SCH_SYMBOL( const SCH_SYMBOL& aSymbol );
135
136 ~SCH_SYMBOL();
137
138 static inline bool ClassOf( const EDA_ITEM* aItem )
139 {
140 return aItem && SCH_SYMBOL_T == aItem->Type();
141 }
142
143 wxString GetClass() const override
144 {
145 return wxT( "SCH_SYMBOL" );
146 }
147
161 bool IsMissingLibSymbol() const;
162
163 const std::vector<SCH_SYMBOL_INSTANCE>& GetInstances() const
164 {
166 }
167
168 bool GetInstance( SCH_SYMBOL_INSTANCE& aInstance,
169 const KIID_PATH& aSheetPath, bool aTestFromEnd = false ) const;
170
171 void RemoveInstance( const SCH_SHEET_PATH& aInstancePath );
172
173 void RemoveInstance( const KIID_PATH& aInstancePath );
174
189 bool IsMovableFromAnchorPoint() const override;
190
191 void SetLibId( const LIB_ID& aName );
192
193 const LIB_ID& GetLibId() const override { return m_lib_id; }
194
195 wxString GetSymbolIDAsString() const { return m_lib_id.Format(); }
196
208 void SetSchSymbolLibraryName( const wxString& aName ) { m_schLibSymbolName = aName; }
209 wxString GetSchSymbolLibraryName() const;
210 bool UseLibIdLookup() const { return m_schLibSymbolName.IsEmpty(); }
211
212 std::unique_ptr< LIB_SYMBOL >& GetLibSymbolRef() { return m_part; }
213 const std::unique_ptr< LIB_SYMBOL >& GetLibSymbolRef() const { return m_part; }
214
231 void SetLibSymbol( LIB_SYMBOL* aLibSymbol );
232
236 wxString GetDescription() const override;
237
241 wxString GetKeyWords() const override;
242
246 wxString GetDatasheet() const;
247
251 void UpdatePins();
252
258 bool HasUnitDisplayName( int aUnit ) const;
259
265 wxString GetUnitDisplayName( int aUnit ) const;
266
267 void SetBodyStyle( int aBodyStyle ) override;
268
274 void SetBodyStyleUnconditional( int aBodyStyle );
275
276 bool HasAlternateBodyStyle() const override;
277
278 wxString GetPrefix() const { return m_prefix; }
279 void SetPrefix( const wxString& aPrefix ) { m_prefix = aPrefix; }
280
284 void UpdatePrefix();
285
286 wxString SubReference( int aUnit, bool aAddSeparator = true ) const;
287
289 const TRANSFORM& GetTransform() const { return m_transform; }
290
291 void SetTransform( const TRANSFORM& aTransform );
292
298 int GetUnitCount() const override;
299
300 bool IsMulti() const override { return GetUnitCount() > 1; }
301
308 void SetOrientation( int aOrientation );
309
325 int GetOrientation() const;
326
331 {
332 int mirroring = GetOrientation();
333
334 mirroring &= ( SYMBOL_ORIENTATION_T::SYM_MIRROR_X | SYMBOL_ORIENTATION_T::SYM_MIRROR_Y );
335
336 SetOrientation( aAngle | mirroring );
337 }
338
340 {
341 int orientation = GetOrientation();
342
343 orientation &= ~( SYMBOL_ORIENTATION_T::SYM_MIRROR_X | SYMBOL_ORIENTATION_T::SYM_MIRROR_Y );
344
345 switch( orientation )
346 {
347 default:
348 case SYM_NORMAL:
349 case SYM_ORIENT_0: return SYMBOL_ORIENTATION_PROP::SYMBOL_ANGLE_0;
350 case SYM_ORIENT_90: return SYMBOL_ORIENTATION_PROP::SYMBOL_ANGLE_90;
351 case SYM_ORIENT_180: return SYMBOL_ORIENTATION_PROP::SYMBOL_ANGLE_180;
352 case SYM_ORIENT_270: return SYMBOL_ORIENTATION_PROP::SYMBOL_ANGLE_270;
353 }
354 }
355
356 void SetMirrorX( bool aMirror )
357 {
358 int orientation = GetOrientation();
359
360 if( aMirror )
361 orientation |= SYMBOL_ORIENTATION_T::SYM_MIRROR_X;
362 else
364
365 SetOrientation( orientation );
366 }
367
368 bool GetMirrorX() const
369 {
370 return GetOrientation() & SYMBOL_ORIENTATION_T::SYM_MIRROR_X;
371 }
372
373 void SetMirrorY( bool aMirror )
374 {
375 int orientation = GetOrientation();
376
377 if( aMirror )
378 orientation |= SYMBOL_ORIENTATION_T::SYM_MIRROR_Y;
379 else
381
382 SetOrientation( orientation );
383 }
384
385 bool GetMirrorY() const
386 {
387 return GetOrientation() & SYMBOL_ORIENTATION_T::SYM_MIRROR_Y;
388 }
389
393 void GetContextualTextVars( wxArrayString* aVars ) const;
394
400 bool ResolveTextVar( const SCH_SHEET_PATH* aPath, wxString* token, int aDepth = 0 ) const;
401
402 void GetMsgPanelInfo( EDA_DRAW_FRAME* aFrame, std::vector<MSG_PANEL_ITEM>& aList ) override;
403
414 void ClearAnnotation( const SCH_SHEET_PATH* aSheetPath, bool aResetPrefix );
415
427 bool AddSheetPathReferenceEntryIfMissing( const KIID_PATH& aSheetPath );
428
429
430 const BOX2I GetBoundingBox() const override;
431
436
441
442
443 //-----<Fields>-----------------------------------------------------------
444
453 SCH_FIELD* GetField( MANDATORY_FIELD_T aFieldType );
454 const SCH_FIELD* GetField( MANDATORY_FIELD_T aFieldNdx ) const;
455
463 SCH_FIELD* GetFieldById( int aFieldId );
464
472 SCH_FIELD* GetFieldByName( const wxString& aFieldName );
473
474 const SCH_FIELD* GetFieldByName( const wxString& aFieldName ) const;
475
482 void GetFields( std::vector<SCH_FIELD*>& aVector, bool aVisibleOnly );
483
487 std::vector<SCH_FIELD>& GetFields() { return m_fields; }
488 const std::vector<SCH_FIELD>& GetFields() const { return m_fields; }
489
497 SCH_FIELD* AddField( const SCH_FIELD& aField );
498
504 void RemoveField( const wxString& aFieldName );
505
506 void RemoveField( SCH_FIELD* aField ) { RemoveField( aField->GetName() ); }
507
517 SCH_FIELD* FindField( const wxString& aFieldName, bool aIncludeDefaultFields = true,
518 bool aCaseInsensitive = false );
519
523 const wxString GetRef( const SCH_SHEET_PATH* aSheet,
524 bool aIncludeUnit = false ) const override;
525
529 const wxString GetValue( bool aResolve, const SCH_SHEET_PATH* aPath,
530 bool aAllowExtraText ) const override;
531
532 void SetValueFieldText( const wxString& aValue );
533
534 const wxString GetFootprintFieldText( bool aResolve, const SCH_SHEET_PATH* aPath,
535 bool aAllowExtraText ) const;
536 void SetFootprintFieldText( const wxString& aFootprint );
537
538 /*
539 * Field access for property manager
540 */
541 wxString GetRefProp() const
542 {
543 return GetRef( &Schematic()->CurrentSheet() );
544 }
545 void SetRefProp( const wxString& aRef )
546 {
547 SetRef( &Schematic()->CurrentSheet(), aRef );
548 }
549 wxString GetValueProp() const
550 {
551 return GetValue( false, &Schematic()->CurrentSheet(), false );
552 }
553 void SetValueProp( const wxString& aRef )
554 {
555 SetValueFieldText( aRef );
556 }
557 int GetUnitProp() const
558 {
559 return GetUnitSelection( &Schematic()->CurrentSheet() );
560 }
561 void SetUnitProp( int aUnit )
562 {
563 if( aUnit < 1 )
564 return;
565
566 if( aUnit > GetUnitCount() )
567 aUnit = GetUnitCount();
568
569 SetUnitSelection( &Schematic()->CurrentSheet(), aUnit );
570 SetUnit( aUnit );
571 }
573 {
574 return GetBodyStyle();
575 }
576 void SetBodyStyleProp( int aBodyStyle )
577 {
578 SetBodyStyle( aBodyStyle );
579 }
580
591 void UpdateFields( const SCH_SHEET_PATH* aPath, bool aUpdateStyle, bool aUpdateRef,
592 bool aUpdateOtherFields, bool aResetRef, bool aResetOtherFields );
593
603 void SyncOtherUnits( const SCH_SHEET_PATH& aSourceSheet, SCH_COMMIT& aCommit,
604 PROPERTY_BASE* aProperty );
605
609 int GetFieldCount() const { return (int)m_fields.size(); }
610
620 void AutoplaceFields( SCH_SCREEN* aScreen, bool aManual ) override;
621
622 void RunOnChildren( const std::function<void( SCH_ITEM* )>& aFunction ) override;
623
624
625 //-----</Fields>----------------------------------------------------------
626
627
634 SCH_PIN* GetPin( const wxString& number ) const;
635
642 std::vector<SCH_PIN*> GetLibPins() const;
643
648 std::vector<SCH_PIN*> GetAllLibPins() const;
649
653 size_t GetFullPinCount() const;
654
658 SCH_PIN* GetPin( SCH_PIN* aLibPin ) const;
659
667 const SCH_PIN* GetPin( const VECTOR2I& aPosition ) const;
668
677 std::vector<SCH_PIN*> GetPins( const SCH_SHEET_PATH* aSheet = nullptr ) const;
678
679
680 std::vector<std::unique_ptr<SCH_PIN>>& GetRawPins() { return m_pins; }
681
682 void SwapData( SCH_ITEM* aItem ) override;
683
692 static bool IsReferenceStringValid( const wxString& aReferenceString );
693
700 void SetRef( const SCH_SHEET_PATH* aSheet, const wxString& aReference );
701
708 bool IsAnnotated( const SCH_SHEET_PATH* aSheet ) const;
709
721 void AddHierarchicalReference( const KIID_PATH& aPath,
722 const wxString& aRef,
723 int aUnit );
724
725 void AddHierarchicalReference( const SCH_SYMBOL_INSTANCE& aInstance );
726
728 int GetUnitSelection( const SCH_SHEET_PATH* aSheet ) const;
729
731 void SetUnitSelection( const SCH_SHEET_PATH* aSheet, int aUnitSelection );
732
734 void SetUnitSelection( int aUnitSelection );
735
736 void Move( const VECTOR2I& aMoveVector ) override
737 {
738 if( aMoveVector == VECTOR2I( 0, 0 ) )
739 return;
740
741 m_pos += aMoveVector;
742
743 for( SCH_FIELD& field : m_fields )
744 field.Move( aMoveVector );
745 }
746
747 void MirrorHorizontally( int aCenter ) override;
748 void MirrorVertically( int aCenter ) override;
749 void Rotate( const VECTOR2I& aCenter, bool aRotateCCW ) override;
750
751 bool Matches( const EDA_SEARCH_DATA& aSearchData, void* aAuxData ) const override;
752
753 void GetEndPoints( std::vector<DANGLING_END_ITEM>& aItemList ) override;
754
765 bool UpdateDanglingState( std::vector<DANGLING_END_ITEM>& aItemListByType,
766 std::vector<DANGLING_END_ITEM>& aItemListByPos,
767 const SCH_SHEET_PATH* aPath = nullptr ) override;
768
769 VECTOR2I GetPinPhysicalPosition( const SCH_PIN* Pin ) const;
770
771 bool IsConnectable() const override { return true; }
772
773 bool HasConnectivityChanges( const SCH_ITEM* aItem,
774 const SCH_SHEET_PATH* aInstance = nullptr ) const override;
775
776 bool CanConnect( const SCH_ITEM* aItem ) const override
777 {
778 return ( aItem->Type() == SCH_LINE_T && aItem->GetLayer() == LAYER_WIRE ) ||
779 ( aItem->Type() == SCH_NO_CONNECT_T ) ||
780 ( aItem->Type() == SCH_JUNCTION_T ) ||
781 ( aItem->Type() == SCH_SYMBOL_T ) ||
782 ( aItem->Type() == SCH_DIRECTIVE_LABEL_T ) ||
783 ( aItem->Type() == SCH_LABEL_T ) ||
784 ( aItem->Type() == SCH_HIER_LABEL_T ) ||
785 ( aItem->Type() == SCH_GLOBAL_LABEL_T );
786 }
787
791 bool IsInNetlist() const;
792
793 std::vector<VECTOR2I> GetConnectionPoints() const override;
794
795 INSPECT_RESULT Visit( INSPECTOR inspector, void* testData,
796 const std::vector<KICAD_T>& aScanTypes ) override;
797
805 SCH_ITEM* GetDrawItem( const VECTOR2I& aPosition, KICAD_T aType = TYPE_NOT_INIT );
806
807 wxString GetItemDescription( UNITS_PROVIDER* aUnitsProvider, bool aFull ) const override;
808
809 BITMAPS GetMenuImage() const override;
810
811 bool operator <( const SCH_ITEM& aItem ) const override;
812
813 bool operator==( const SCH_SYMBOL& aSymbol) const;
814 bool operator!=( const SCH_SYMBOL& aSymbol) const;
815
816 SCH_SYMBOL& operator=( const SCH_SYMBOL& aItem );
817
818 bool IsReplaceable() const override { return true; }
819
820 VECTOR2I GetPosition() const override { return m_pos; }
821 void SetPosition( const VECTOR2I& aPosition ) override { Move( aPosition - m_pos ); }
822
823 int GetX() const { return GetPosition().x; };
824 void SetX( int aX ) { SetPosition( VECTOR2I( aX, GetY() ) ); }
825
826 int GetY() const { return GetPosition().y; }
827 void SetY( int aY ) { SetPosition( VECTOR2I( GetX(), aY ) ); }
828
829 bool HitTest( const VECTOR2I& aPosition, int aAccuracy = 0 ) const override;
830 bool HitTest( const BOX2I& aRect, bool aContained, int aAccuracy = 0 ) const override;
831
839 void Print( const SCH_RENDER_SETTINGS* aSettings, int aUnit, int aBodyStyle,
840 const VECTOR2I& aOffset, bool aForceNoFill, bool aDimmed ) override;
841
849 void PrintBackground( const SCH_RENDER_SETTINGS* aSettings, int aUnit, int aBodyStyle,
850 const VECTOR2I& aOffset, bool aDimmed ) override;
851
852 void Plot( PLOTTER* aPlotter, bool aBackground, const SCH_PLOT_OPTS& aPlotOpts,
853 int aUnit, int aBodyStyle, const VECTOR2I& aOffset, bool aDimmed ) override;
854
862 void PlotPins( PLOTTER* aPlotter ) const;
863
870 void PlotDNP( PLOTTER* aPlotter ) const;
871
872 EDA_ITEM* Clone() const override;
873
874#if defined(DEBUG)
875 void Show( int nestLevel, std::ostream& os ) const override;
876#endif
877
878 void ClearBrightenedPins();
879
880 bool HasBrightenedPins();
881
882 bool IsPointClickableAnchor( const VECTOR2I& aPos ) const override;
883
889 bool IsSymbolLikePowerGlobalLabel() const;
890
891 bool IsPower() const override;
892 bool IsNormal() const override;
893
894 bool GetShowPinNames() const override;
895 void SetShowPinNames( bool aShow ) override;
896
897 bool GetShowPinNumbers() const override;
898 void SetShowPinNumbers( bool aShow ) override;
899
900 double Similarity( const SCH_ITEM& aOther ) const override;
901
903 std::unordered_set<wxString> GetComponentClassNames( const SCH_SHEET_PATH* aPath ) const;
904
905 bool operator==( const SCH_ITEM& aOther ) const override;
906
907private:
908 BOX2I doGetBoundingBox( bool aIncludePins, bool aIncludeFields ) const;
909
910 bool doIsConnected( const VECTOR2I& aPosition ) const override;
911
912 void Init( const VECTOR2I& pos = VECTOR2I( 0, 0 ) );
913
914private:
917 wxString m_prefix;
921
930
932 std::vector<SCH_FIELD> m_fields;
933
934 std::unique_ptr<LIB_SYMBOL> m_part;
937
938 std::vector<std::unique_ptr<SCH_PIN>> m_pins;
939 std::unordered_map<SCH_PIN*, SCH_PIN*> m_pinMap;
940
941 // Defines the hierarchical path and reference of the symbol. This allows support for multiple
942 // references to a single sub-sheet.
943 std::vector<SCH_SYMBOL_INSTANCE> m_instanceReferences;
944
946 static std::unordered_map<TRANSFORM, int> s_transformToOrientationCache;
947};
948
949#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:1227
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:104
const TRANSFORM & GetTransform() const
Definition: sch_symbol.h:289
void SetValueProp(const wxString &aRef)
Definition: sch_symbol.h:553
SCH_SYMBOL & operator=(const SCH_SYMBOL &aItem)
int GetUnitProp() const
Definition: sch_symbol.h:557
size_t GetFullPinCount() const
void UpdatePrefix()
Set the prefix based on the current reference designator.
Definition: sch_symbol.cpp:825
wxString m_prefix
C, R, U, Q etc - the first character(s) which typically indicate what the symbol is.
Definition: sch_symbol.h:917
SCH_FIELD * GetFieldByName(const wxString &aFieldName)
Return a field in this symbol.
Definition: sch_symbol.cpp:959
wxString GetDescription() const override
Definition: sch_symbol.cpp:287
std::unordered_map< SCH_PIN *, SCH_PIN * > m_pinMap
library pin pointer : SCH_PIN's index
Definition: sch_symbol.h:939
void RunOnChildren(const std::function< void(SCH_ITEM *)> &aFunction) override
void SetMirrorX(bool aMirror)
Definition: sch_symbol.h:356
bool IsSymbolLikePowerGlobalLabel() const
VECTOR2I m_pos
Definition: sch_symbol.h:915
wxString GetSymbolIDAsString() const
Definition: sch_symbol.h:195
LIB_ID m_lib_id
Name and library the symbol was loaded from, i.e. 74xx:74LS00.
Definition: sch_symbol.h:916
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:305
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:263
bool HasBrightenedPins()
std::vector< SCH_FIELD > & GetFields()
Return a vector of fields from the symbol.
Definition: sch_symbol.h:487
void SetRefProp(const wxString &aRef)
Definition: sch_symbol.h:545
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:509
wxString GetUnitDisplayName(int aUnit) const
Return the display name for a given unit aUnit.
Definition: sch_symbol.cpp:476
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:680
const std::vector< SCH_SYMBOL_INSTANCE > & GetInstances() const
Definition: sch_symbol.h:163
void SetPosition(const VECTOR2I &aPosition) override
Definition: sch_symbol.h:821
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:771
SYMBOL_ORIENTATION_PROP GetOrientationProp() const
Definition: sch_symbol.h:339
int GetFieldCount() const
Return the number of fields in this symbol.
Definition: sch_symbol.h:609
void SetBodyStyleUnconditional(int aBodyStyle)
Similar to SetBodyStyle(), but always set the body style, regardless the lib symbol properties (the L...
Definition: sch_symbol.cpp:426
int GetY() const
Definition: sch_symbol.h:826
wxString SubReference(int aUnit, bool aAddSeparator=true) const
Definition: sch_symbol.cpp:852
wxString GetClass() const override
Return the class name.
Definition: sch_symbol.h:143
void RemoveInstance(const SCH_SHEET_PATH &aInstancePath)
Definition: sch_symbol.cpp:608
static bool IsReferenceStringValid(const wxString &aReferenceString)
Test for an acceptable reference string.
Definition: sch_symbol.cpp:769
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:811
void SetMirrorY(bool aMirror)
Definition: sch_symbol.h:373
void PlotPins(PLOTTER *aPlotter) const
Plot just the symbol pins.
bool UseLibIdLookup() const
Definition: sch_symbol.h:210
void SetValueFieldText(const wxString &aValue)
Definition: sch_symbol.cpp:913
int GetX() const
Definition: sch_symbol.h:823
void RemoveField(const wxString &aFieldName)
Remove a user field from the symbol.
void SetBodyStyle(int aBodyStyle) override
Definition: sch_symbol.cpp:439
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:296
wxString GetSchSymbolLibraryName() const
Definition: sch_symbol.cpp:269
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:138
bool IsInNetlist() const
void Move(const VECTOR2I &aMoveVector) override
Move the item by aMoveVector to a new position.
Definition: sch_symbol.h:736
void SetBodyStyleProp(int aBodyStyle)
Definition: sch_symbol.h:576
void ClearBrightenedPins()
void SetY(int aY)
Definition: sch_symbol.h:827
EDA_ITEM * Clone() const override
Create a duplicate of this item with linked list members set to NULL.
Definition: sch_symbol.cpp:230
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:368
wxString GetRefProp() const
Definition: sch_symbol.h:541
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:935
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:946
void UpdatePins()
Updates the cache of SCH_PIN objects for each pin.
Definition: sch_symbol.cpp:314
std::vector< SCH_SYMBOL_INSTANCE > m_instanceReferences
Definition: sch_symbol.h:943
const wxString GetValue(bool aResolve, const SCH_SHEET_PATH *aPath, bool aAllowExtraText) const override
Definition: sch_symbol.cpp:903
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:213
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:929
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:775
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:330
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:919
std::vector< SCH_FIELD > m_fields
Variable length list of fields.
Definition: sch_symbol.h:932
int GetBodyStyleProp() const
Definition: sch_symbol.h:572
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:929
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:636
bool IsMissingLibSymbol() const
Check to see if the library symbol is set to the dummy library symbol.
Definition: sch_symbol.cpp:236
VECTOR2I GetPosition() const override
Definition: sch_symbol.h:820
void SetTransform(const TRANSFORM &aTransform)
Definition: sch_symbol.cpp:461
std::unique_ptr< LIB_SYMBOL > m_part
A flattened copy of the LIB_SYMBOL from the PROJECT's libraries.
Definition: sch_symbol.h:934
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:488
bool CanConnect(const SCH_ITEM *aItem) const override
Definition: sch_symbol.h:776
void Init(const VECTOR2I &pos=VECTOR2I(0, 0))
Definition: sch_symbol.cpp:202
bool HasAlternateBodyStyle() const override
Test if symbol has more than one body conversion type (DeMorgan).
Definition: sch_symbol.cpp:452
const LIB_ID & GetLibId() const override
Definition: sch_symbol.h:193
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:561
void SetSchSymbolLibraryName(const wxString &aName)
The name of the symbol in the schematic library symbol list.
Definition: sch_symbol.h:208
bool IsMulti() const override
Definition: sch_symbol.h:300
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:947
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:584
TRANSFORM & GetTransform()
Definition: sch_symbol.h:288
BOX2I doGetBoundingBox(bool aIncludePins, bool aIncludeFields) const
bool GetMirrorY() const
Definition: sch_symbol.h:385
SCH_FIELD * AddField(const SCH_FIELD &aField)
Add a field to the symbol.
Definition: sch_symbol.cpp:998
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:506
void SetX(int aX)
Definition: sch_symbol.h:824
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:936
int GetUnitSelection(const SCH_SHEET_PATH *aSheet) const
Return the instance-specific unit selection for the given sheet path.
Definition: sch_symbol.cpp:861
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:931
SCH_PIN * GetPin(const wxString &number) const
Find a symbol pin by number.
wxString GetValueProp() const
Definition: sch_symbol.h:549
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:492
int GetUnitCount() const override
Return the number of units per package of the symbol.
Definition: sch_symbol.cpp:467
void SetPrefix(const wxString &aPrefix)
Definition: sch_symbol.h:279
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:877
bool IsNormal() const override
std::unique_ptr< LIB_SYMBOL > & GetLibSymbolRef()
Definition: sch_symbol.h:212
std::unordered_set< wxString > GetComponentClassNames(const SCH_SHEET_PATH *aPath) const
Returns the component classes this symbol belongs in.
std::vector< std::unique_ptr< SCH_PIN > > m_pins
a SCH_PIN for every SCH_PIN (all units)
Definition: sch_symbol.h:938
bool IsReplaceable() const override
Override this method in any derived object that supports test find and replace.
Definition: sch_symbol.h:818
void SetLibSymbol(LIB_SYMBOL *aLibSymbol)
Set this schematic symbol library symbol reference to aLibSymbol.
Definition: sch_symbol.cpp:278
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:736
wxString GetPrefix() const
Definition: sch_symbol.h:278
bool HasUnitDisplayName(int aUnit) const
Return true if the given unit aUnit has a display name set.
Definition: sch_symbol.cpp:484
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:242
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:55
std::weak_ptr< LIB_SYMBOL > PART_REF
Definition: sch_symbol.h:67
SYMBOL_ORIENTATION_PROP
Definition: sch_symbol.h:92
@ SYMBOL_ANGLE_180
Definition: sch_symbol.h:95
@ SYMBOL_ANGLE_0
Definition: sch_symbol.h:93
@ SYMBOL_ANGLE_90
Definition: sch_symbol.h:94
@ SYMBOL_ANGLE_270
Definition: sch_symbol.h:96
std::vector< SCH_FIELD > SCH_FIELDS
A container for several SCH_FIELD items.
Definition: sch_symbol.h:65
SYMBOL_ORIENTATION_T
enum used in RotationMiroir()
Definition: sch_symbol.h:76
@ SYM_ORIENT_270
Definition: sch_symbol.h:83
@ SYM_ROTATE_CLOCKWISE
Definition: sch_symbol.h:78
@ SYM_ROTATE_COUNTERCLOCKWISE
Definition: sch_symbol.h:79
@ SYM_MIRROR_Y
Definition: sch_symbol.h:85
@ SYM_ORIENT_180
Definition: sch_symbol.h:82
@ SYM_MIRROR_X
Definition: sch_symbol.h:84
@ SYM_NORMAL
Definition: sch_symbol.h:77
@ SYM_ORIENT_90
Definition: sch_symbol.h:81
@ SYM_ORIENT_0
Definition: sch_symbol.h:80
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:691