KiCad PCB EDA Suite
Loading...
Searching...
No Matches
sch_group.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 The KiCad Developers, see AUTHORS.txt for contributors.
5 *
6 * This program is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU General Public License
8 * as published by the Free Software Foundation; either version 2
9 * of the License, or (at your option) any later version.
10 *
11 * This program is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU General Public License for more details.
15 *
16 * You should have received a copy of the GNU General Public License
17 * along with this program. If not, see <https://www.gnu.org/licenses/>.
18 */
19
24
25#ifndef CLASS_SCH_GROUP_H_
26#define CLASS_SCH_GROUP_H_
27
28#include <eda_group.h>
29#include <sch_commit.h>
30#include <sch_item.h>
31#include <lset.h>
32#include <unordered_set>
33
34namespace KIGFX
35{
36class VIEW;
37}
38
47class SCH_GROUP : public SCH_ITEM, public EDA_GROUP
48{
49public:
50 SCH_GROUP();
51
52 SCH_GROUP( SCH_ITEM* aParent );
53
54 SCH_GROUP( SCH_SCREEN* aParent );
55
56 void Serialize( google::protobuf::Any& aContainer ) const override;
57 bool Deserialize( const google::protobuf::Any& aContainer ) override;
58
59 EDA_ITEM* AsEdaItem() override { return this; }
60
61 static inline bool ClassOf( const EDA_ITEM* aItem ) { return aItem && SCH_GROUP_T == aItem->Type(); }
62
63 wxString GetClass() const override { return wxT( "SCH_GROUP" ); }
64
65 std::unordered_set<SCH_ITEM*> GetSchItems() const;
66
67 /*
68 * Search for highest level group inside of aScope, containing item.
69 *
70 * @param aScope restricts the search to groups within the group scope.
71 * @param isSymbolEditor true if we should stop promoting at the symbol level
72 * @return group inside of aScope, containing item, if exists, otherwise, nullptr
73 */
74 static EDA_GROUP* TopLevelGroup( SCH_ITEM* aItem, EDA_GROUP* aScope, bool isSymbolEditor );
75
76 static bool WithinScope( SCH_ITEM* aItem, SCH_GROUP* aScope, bool isSymbolEditor );
77
78 double Similarity( const SCH_ITEM& aOther ) const override;
79
80 bool operator==( const SCH_GROUP& aOther ) const;
81 bool operator==( const SCH_ITEM& aSchItem ) const override;
82
83#if defined( DEBUG )
84 void Show( int nestLevel, std::ostream& os ) const override { ShowDummy( os ); }
85#endif
86
88 VECTOR2I GetPosition() const override;
89
91 void SetPosition( const VECTOR2I& aNewpos ) override;
92
94 EDA_ITEM* Clone() const override;
95
96 /*
97 * Clone this and all descendants
98 */
99 SCH_GROUP* DeepClone() const;
100
101 /*
102 * Duplicate this and all descendants
103 *
104 * @param addToParentGroup if the original is part of a group then the new member will also
105 * be added to said group
106 */
107 SCH_GROUP* DeepDuplicate( bool addToParentGroup, SCH_COMMIT* aCommit = nullptr ) const;
108
110 bool HitTest( const VECTOR2I& aPosition, int aAccuracy = 0 ) const override;
111
113 bool HitTest( const BOX2I& aRect, bool aContained, int aAccuracy = 0 ) const override;
114
116 const BOX2I GetBoundingBox() const override;
117
119 INSPECT_RESULT Visit( INSPECTOR aInspector, void* aTestData,
120 const std::vector<KICAD_T>& aScanTypes ) override;
121
123 std::vector<int> ViewGetLayers() const override;
124
126 double ViewGetLOD( int aLayer, const KIGFX::VIEW* aView ) const override;
127
129 void Move( const VECTOR2I& aMoveVector ) override;
130
132 void Rotate( const VECTOR2I& aCenter, bool aRotateCCW ) override;
133
135 void MirrorHorizontally( int aCenter ) override;
136
138 void MirrorVertically( int aCenter ) override;
139
140 void Plot( PLOTTER* aPlotter, bool aBackground, const SCH_PLOT_OPTS& aPlotOpts,
141 int aUnit, int aBodyStyle, const VECTOR2I& aOffset, bool aDimmed ) override;
142
144 wxString GetItemDescription( UNITS_PROVIDER* aUnitsProvider, bool aFull ) const override;
145
147 BITMAPS GetMenuImage() const override;
148
150 void GetMsgPanelInfo( EDA_DRAW_FRAME* aFrame, std::vector<MSG_PANEL_ITEM>& aList ) override;
151
153 bool Matches( const EDA_SEARCH_DATA& aSearchData, void* aAuxData ) const override;
154
156 void RunOnChildren( const std::function<void( SCH_ITEM* )>& aFunction, RECURSE_MODE aMode ) override;
157
159 void swapData( SCH_ITEM* aImage ) override;
160};
161
162#endif
BITMAPS
A list of all bitmap identifiers.
BOX2< VECTOR2I > BOX2I
Definition box2.h:918
A set of EDA_ITEMs (i.e., without duplicates).
Definition eda_group.h:42
KICAD_T Type() const
Returns the type of object.
Definition eda_item.h:108
EDA_ITEM(EDA_ITEM *parent, KICAD_T idType, bool isSCH_ITEM=false, bool isBOARD_ITEM=false)
Definition eda_item.cpp:37
Hold a (potentially large) number of VIEW_ITEMs and renders them on a graphics device provided by the...
Definition view.h:63
A set of SCH_ITEMs (i.e., without duplicates).
Definition sch_group.h:48
SCH_GROUP * DeepDuplicate(bool addToParentGroup, SCH_COMMIT *aCommit=nullptr) const
void Move(const VECTOR2I &aMoveVector) override
Move the item by aMoveVector to a new position.
std::vector< int > ViewGetLayers() const override
BITMAPS GetMenuImage() const override
Return a pointer to an image to be used in menus.
void Rotate(const VECTOR2I &aCenter, bool aRotateCCW) override
Rotate the item around aCenter 90 degrees in the clockwise direction.
double Similarity(const SCH_ITEM &aOther) const override
Return a measure of how likely the other object is to represent the same object.
EDA_ITEM * Clone() const override
Create a duplicate of this item with linked list members set to NULL.
wxString GetClass() const override
Return the class name.
Definition sch_group.h:63
bool Deserialize(const google::protobuf::Any &aContainer) override
Deserializes the given protobuf message into this object.
Definition sch_group.cpp:74
static bool WithinScope(SCH_ITEM *aItem, SCH_GROUP *aScope, bool isSymbolEditor)
bool Matches(const EDA_SEARCH_DATA &aSearchData, void *aAuxData) const override
Compare the item against the search criteria in aSearchData.
bool operator==(const SCH_GROUP &aOther) const
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.
void Serialize(google::protobuf::Any &aContainer) const override
Serializes this object to the given Any message.
Definition sch_group.cpp:55
wxString GetItemDescription(UNITS_PROVIDER *aUnitsProvider, bool aFull) const override
Return a user-visible description string of this item.
SCH_GROUP * DeepClone() const
double ViewGetLOD(int aLayer, const KIGFX::VIEW *aView) const override
INSPECT_RESULT Visit(INSPECTOR aInspector, void *aTestData, 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 MirrorVertically(int aCenter) override
Mirror item vertically about aCenter.
void RunOnChildren(const std::function< void(SCH_ITEM *)> &aFunction, RECURSE_MODE aMode) override
void SetPosition(const VECTOR2I &aNewpos) override
std::unordered_set< SCH_ITEM * > GetSchItems() const
static bool ClassOf(const EDA_ITEM *aItem)
Definition sch_group.h:61
static EDA_GROUP * TopLevelGroup(SCH_ITEM *aItem, EDA_GROUP *aScope, bool isSymbolEditor)
void swapData(SCH_ITEM *aImage) override
Swap the internal data structures aItem with the schematic item.
void MirrorHorizontally(int aCenter) override
Mirror item horizontally about aCenter.
bool HitTest(const VECTOR2I &aPosition, int aAccuracy=0) const override
Test if aPosition is inside or on the boundary of this item.
EDA_ITEM * AsEdaItem() override
Definition sch_group.h:59
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.
const BOX2I GetBoundingBox() const override
Return the orthogonal bounding box of this object for display purposes.
VECTOR2I GetPosition() const override
Base class for any item which can be embedded within the SCHEMATIC container class,...
Definition sch_item.h:162
SCH_ITEM(EDA_ITEM *aParent, KICAD_T aType, int aUnit=0, int aBodyStyle=0)
Definition sch_item.cpp:52
RECURSE_MODE
Definition eda_item.h:48
INSPECT_RESULT
Definition eda_item.h:42
const INSPECTOR_FUNC & INSPECTOR
std::function passed to nested users by ref, avoids copying std::function.
Definition eda_item.h:89
The Cairo implementation of the graphics abstraction layer.
Definition eda_group.h:29
@ SCH_GROUP_T
Definition typeinfo.h:170
VECTOR2< int32_t > VECTOR2I
Definition vector2d.h:683