KiCad PCB EDA Suite
Loading...
Searching...
No Matches
sch_sheet_pin.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) 1992-2021 KiCad Developers, see AUTHORS.txt for contributors.
6 *
7 * This program is free software; you can redistribute it and/or
8 * modify it under the terms of the GNU General Public License
9 * as published by the Free Software Foundation; either version 2
10 * of the License, or (at your option) any later version.
11 *
12 * This program is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 * GNU General Public License for more details.
16 *
17 * You should have received a copy of the GNU General Public License
18 * along with this program; if not, you may find one here:
19 * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
20 * or you may search the http://www.gnu.org website for the version 2 license,
21 * or you may write to the Free Software Foundation, Inc.,
22 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
23 */
24
25#ifndef SCH_SHEEET_PIN_H
26#define SCH_SHEEET_PIN_H
27
28#include <sch_label.h>
29
30class KIID;
31class LINE_READER;
32class SCH_SHEET;
33
34
45enum class SHEET_SIDE
46{
47 LEFT = 0,
48 RIGHT,
49 TOP,
50 BOTTOM,
52};
53
54
66{
67public:
68 SCH_SHEET_PIN( SCH_SHEET* parent, const VECTOR2I& pos = VECTOR2I( 0, 0 ),
69 const wxString& text = wxEmptyString );
70
71 // Do not create a copy constructor. The one generated by the compiler is adequate.
72
74
75 static inline bool ClassOf( const EDA_ITEM* aItem )
76 {
77 return aItem && SCH_SHEET_PIN_T == aItem->Type();
78 }
79
80 wxString GetClass() const override
81 {
82 return wxT( "SCH_SHEET_PIN" );
83 }
84
85 bool operator ==( const SCH_SHEET_PIN* aPin ) const;
86
88 {
89 switch( aSide )
90 {
91 case SHEET_SIDE::TOP: return SHEET_SIDE::BOTTOM;
92 case SHEET_SIDE::BOTTOM: return SHEET_SIDE::TOP;
93 case SHEET_SIDE::LEFT: return SHEET_SIDE::RIGHT;
94 case SHEET_SIDE::RIGHT: return SHEET_SIDE::LEFT;
95 default: return SHEET_SIDE::UNDEFINED;
96 }
97 }
98
105 bool IsMovableFromAnchorPoint() const override { return true; }
106
107 void Print( const RENDER_SETTINGS* aSettings, const VECTOR2I& aOffset ) override;
108
115 void CreateGraphicShape( const RENDER_SETTINGS* aSettings, std::vector<VECTOR2I>& aPoints,
116 const VECTOR2I& aPos ) const override;
117
118 void SwapData( SCH_ITEM* aItem ) override;
119
120 int GetPenWidth() const override;
121
127 int GetNumber() const { return m_number; }
128
134 void SetNumber( int aNumber );
135
136 void SetSide( SHEET_SIDE aEdge );
137
138 SHEET_SIDE GetSide() const;
139
144 void ConstrainOnEdge( VECTOR2I aPos, bool aAllowEdgeSwitch );
145
152 SCH_SHEET* GetParent() const { return (SCH_SHEET*) m_parent; }
153
154#if defined(DEBUG)
155 void Show( int nestLevel, std::ostream& os ) const override;
156#endif
157
158 // Geometric transforms (used in block operations):
159
160 void Move( const VECTOR2I& aMoveVector ) override
161 {
162 Offset( aMoveVector );
163 }
164
165 void MirrorVertically( int aCenter ) override;
166 void MirrorHorizontally( int aCenter ) override;
167 void Rotate( const VECTOR2I& aCenter ) override;
168
169 bool Matches( const EDA_SEARCH_DATA& aSearchData, void* aAuxData ) const override
170 {
171 return SCH_ITEM::Matches( GetText(), aSearchData );
172 }
173
174 bool Replace( const EDA_SEARCH_DATA& aSearchData, void* aAuxData = nullptr ) override
175 {
176 return EDA_TEXT::Replace( aSearchData );
177 }
178
179 bool IsReplaceable() const override { return true; }
180
181 void GetEndPoints( std::vector< DANGLING_END_ITEM >& aItemList ) override;
182
183 bool IsConnectable() const override { return true; }
184
185 wxString GetItemDescription( UNITS_PROVIDER* aUnitsProvider ) const override;
186
187 BITMAPS GetMenuImage() const override;
188
189 void SetPosition( const VECTOR2I& aPosition ) override
190 {
191 ConstrainOnEdge( aPosition, true );
192 }
193
194 bool IsPointClickableAnchor( const VECTOR2I& aPos ) const override
195 {
196 return m_isDangling && GetPosition() == aPos;
197 }
198
199 bool HitTest( const VECTOR2I& aPosition, int aAccuracy = 0 ) const override;
200
201 EDA_ITEM* Clone() const override;
202
203private:
208
210};
211
212#endif // SCH_SHEEET_PIN_H
BITMAPS
A list of all bitmap identifiers.
Definition: bitmaps_list.h:33
A base class for most all the KiCad significant classes used in schematics and boards.
Definition: eda_item.h:85
KICAD_T Type() const
Returns the type of object.
Definition: eda_item.h:97
virtual bool Matches(const EDA_SEARCH_DATA &aSearchData, void *aAuxData) const
Compare the item against the search criteria in aSearchData.
Definition: eda_item.h:372
EDA_ITEM * m_parent
Linked list: Link (parent struct)
Definition: eda_item.h:485
virtual const wxString & GetText() const
Return the string associated with the text object.
Definition: eda_text.h:95
void Offset(const VECTOR2I &aOffset)
Definition: eda_text.cpp:416
bool Replace(const EDA_SEARCH_DATA &aSearchData)
Helper function used in search and replace dialog.
Definition: eda_text.cpp:326
Container for all the knowledge about how graphical objects are drawn on any output surface/device.
Definition: kiid.h:49
An abstract class from which implementation specific LINE_READERs may be derived to read single lines...
Definition: richio.h:93
Base class for any item which can be embedded within the SCHEMATIC container class,...
Definition: sch_item.h:150
bool m_isDangling
Definition: sch_label.h:323
Define a sheet pin (label) used in sheets to create hierarchical schematics.
Definition: sch_sheet_pin.h:66
EDA_ITEM * Clone() const override
Create a duplicate of this item with linked list members set to NULL.
bool Replace(const EDA_SEARCH_DATA &aSearchData, void *aAuxData=nullptr) override
Perform a text replace using the find and replace criteria in aSearchData on items that support text ...
void SetNumber(int aNumber)
Set the sheet label number.
void Print(const RENDER_SETTINGS *aSettings, const VECTOR2I &aOffset) override
Print a schematic item.
void Move(const VECTOR2I &aMoveVector) override
Move the item by aMoveVector to a new position.
SHEET_SIDE m_edge
bool IsMovableFromAnchorPoint() const override
Return true for items which are moved with the anchor point at mouse cursor and false for items moved...
bool IsPointClickableAnchor(const VECTOR2I &aPos) const override
void SetPosition(const VECTOR2I &aPosition) override
int m_number
Label number use for saving sheet label to file.
bool Matches(const EDA_SEARCH_DATA &aSearchData, void *aAuxData) const override
Compare the item against the search criteria in aSearchData.
void MirrorHorizontally(int aCenter) override
Mirror item horizontally about aCenter.
bool IsReplaceable() const override
Override this method in any derived object that supports test find and replace.
static bool ClassOf(const EDA_ITEM *aItem)
Definition: sch_sheet_pin.h:75
void MirrorVertically(int aCenter) override
Mirror item vertically about aCenter.
wxString GetItemDescription(UNITS_PROVIDER *aUnitsProvider) const override
Return a user-visible description string of this item.
void ConstrainOnEdge(VECTOR2I aPos, bool aAllowEdgeSwitch)
Adjust label position to edge based on proximity to vertical or horizontal edge of the parent sheet.
int GetPenWidth() const override
bool IsConnectable() const override
static SHEET_SIDE GetOppositeSide(SHEET_SIDE aSide)
Definition: sch_sheet_pin.h:87
void CreateGraphicShape(const RENDER_SETTINGS *aSettings, std::vector< VECTOR2I > &aPoints, const VECTOR2I &aPos) const override
Calculate the graphic shape (a polygon) associated to the text.
void SwapData(SCH_ITEM *aItem) override
Swap the internal data structures aItem with the schematic item.
SHEET_SIDE GetSide() const
wxString GetClass() const override
Return the class name.
Definition: sch_sheet_pin.h:80
void GetEndPoints(std::vector< DANGLING_END_ITEM > &aItemList) override
Add the schematic item end points to aItemList if the item has end points.
void Rotate(const VECTOR2I &aCenter) override
Rotate the item around aCenter 90 degrees in the clockwise direction.
int GetNumber() const
Get the sheet label number.
bool operator==(const SCH_SHEET_PIN *aPin) const
BITMAPS GetMenuImage() const override
Return a pointer to an image to be used in menus.
bool HitTest(const VECTOR2I &aPosition, int aAccuracy=0) const override
Test if aPosition is inside or on the boundary of this item.
SCH_SHEET * GetParent() const
Get the parent sheet object of this sheet pin.
void SetSide(SHEET_SIDE aEdge)
Sheet symbol placed in a schematic, and is the entry point for a sub schematic.
Definition: sch_sheet.h:57
VECTOR2I GetPosition() const override
Definition: sch_text.h:126
SHEET_SIDE
Define the edge of the sheet that the sheet pin is positioned.
Definition: sch_sheet_pin.h:46
@ SCH_SHEET_PIN_T
Definition: typeinfo.h:156
VECTOR2< int > VECTOR2I
Definition: vector2d.h:588