KiCad PCB EDA Suite
Loading...
Searching...
No Matches
pcb_shape.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) 2018 Jean-Pierre Charras jp.charras at wanadoo.fr
5 * Copyright (C) 1992-2024 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 PCB_SHAPE_H
26#define PCB_SHAPE_H
27
29#include <eda_shape.h>
30
31
32class LINE_READER;
33class EDA_DRAW_FRAME;
34class FOOTPRINT;
35class MSG_PANEL_ITEM;
36
37
39{
40public:
41 PCB_SHAPE( BOARD_ITEM* aParent, KICAD_T aItemType, SHAPE_T aShapeType );
42
43 PCB_SHAPE( BOARD_ITEM* aParent = NULL, SHAPE_T aShapeType = SHAPE_T::SEGMENT );
44
45 // Do not create a copy constructor & operator=.
46 // The ones generated by the compiler are adequate.
47
48 ~PCB_SHAPE() override;
49
50 static bool ClassOf( const EDA_ITEM* aItem )
51 {
52 return aItem && PCB_SHAPE_T == aItem->Type();
53 }
54
55 wxString GetClass() const override
56 {
57 return wxT( "PCB_SHAPE" );
58 }
59
60 void Serialize( google::protobuf::Any &aContainer ) const override;
61 bool Deserialize( const google::protobuf::Any &aContainer ) override;
62
63 bool IsConnected() const override;
64
65 wxString GetFriendlyName() const override { return getFriendlyName(); }
66
67 bool IsType( const std::vector<KICAD_T>& aScanTypes ) const override;
68
69 void SetLayer( PCB_LAYER_ID aLayer ) override;
70 PCB_LAYER_ID GetLayer() const override { return m_layer; }
71
72 void SetPosition( const VECTOR2I& aPos ) override { setPosition( aPos ); }
73 VECTOR2I GetPosition() const override { return getPosition(); }
74
75 VECTOR2I GetCenter() const override { return getCenter(); }
76
81 std::vector<VECTOR2I> GetConnectionPoints() const;
82
83 bool HasLineStroke() const override { return true; }
84
85 STROKE_PARAMS GetStroke() const override { return m_stroke; }
86 void SetStroke( const STROKE_PARAMS& aStroke ) override { m_stroke = aStroke; }
87
88 int GetWidth() const override;
89
90 void StyleFromSettings( const BOARD_DESIGN_SETTINGS& settings ) override;
91
96 virtual std::vector<VECTOR2I> GetCorners() const;
97
102 const VECTOR2I GetFocusPosition() const override;
103
107 std::shared_ptr<SHAPE> GetEffectiveShape( PCB_LAYER_ID aLayer = UNDEFINED_LAYER,
108 FLASHING aFlash = FLASHING::DEFAULT ) const override;
109
110 bool IsProxyItem() const override { return m_proxyItem; }
111 void SetIsProxyItem( bool aIsProxy = true ) override;
112
113 void GetMsgPanelInfo( EDA_DRAW_FRAME* aFrame, std::vector<MSG_PANEL_ITEM>& aList ) override;
114
115 const BOX2I GetBoundingBox() const override { return getBoundingBox(); }
116
117 bool HitTest( const VECTOR2I& aPosition, int aAccuracy = 0 ) const override
118 {
119 return hitTest( aPosition, aAccuracy );
120 }
121
122 bool HitTest( const BOX2I& aRect, bool aContained, int aAccuracy = 0 ) const override
123 {
124 return hitTest( aRect, aContained, aAccuracy );
125 }
126
127 void Normalize() override;
128
129 void Move( const VECTOR2I& aMoveVector ) override;
130
131 void Rotate( const VECTOR2I& aRotCentre, const EDA_ANGLE& aAngle ) override;
132
133 void Flip( const VECTOR2I& aCentre, bool aFlipLeftRight ) override;
134
135 virtual void Mirror( const VECTOR2I& aCentre, bool aMirrorAroundXAxis );
136
137 void Scale( double aScale );
138
149 void TransformShapeToPolygon( SHAPE_POLY_SET& aBuffer, PCB_LAYER_ID aLayer, int aClearance,
150 int aError, ERROR_LOC aErrorLoc,
151 bool ignoreLineWidth = false ) const override;
152
153 wxString GetItemDescription( UNITS_PROVIDER* aUnitsProvider ) const override;
154
155 BITMAPS GetMenuImage() const override;
156
157 EDA_ITEM* Clone() const override;
158
159 const BOX2I ViewBBox() const override;
160
161 void ViewGetLayers( int aLayers[], int& aCount ) const override;
162
164 double ViewGetLOD( int aLayer, KIGFX::VIEW* aView ) const override;
165
166 double Similarity( const BOARD_ITEM& aBoardItem ) const override;
167
168 bool operator==( const BOARD_ITEM& aBoardItem ) const override;
169
170#if defined(DEBUG)
171 void Show( int nestLevel, std::ostream& os ) const override { ShowDummy( os ); }
172#endif
173
174protected:
175 void swapData( BOARD_ITEM* aImage ) override;
176
178 {
179 bool operator()( const BOARD_ITEM* aFirst, const BOARD_ITEM* aSecond ) const;
180 };
181};
182
183#endif // PCB_SHAPE_H
BITMAPS
A list of all bitmap identifiers.
Definition: bitmaps_list.h:33
A base class derived from BOARD_ITEM for items that can be connected and have a net,...
Container for design settings for a BOARD object.
A base class for any item which can be embedded within the BOARD container class, and therefore insta...
Definition: board_item.h:77
PCB_LAYER_ID m_layer
Definition: board_item.h:388
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:88
KICAD_T Type() const
Returns the type of object.
Definition: eda_item.h:100
bool m_proxyItem
Definition: eda_shape.h:419
VECTOR2I getCenter() const
Definition: eda_shape.cpp:517
bool hitTest(const VECTOR2I &aPosition, int aAccuracy=0) const
Definition: eda_shape.cpp:842
void setPosition(const VECTOR2I &aPos)
Definition: eda_shape.cpp:104
const BOX2I getBoundingBox() const
Definition: eda_shape.cpp:788
VECTOR2I getPosition() const
Definition: eda_shape.cpp:110
STROKE_PARAMS m_stroke
Definition: eda_shape.h:396
wxString getFriendlyName() const
Definition: eda_shape.cpp:704
Hold a (potentially large) number of VIEW_ITEMs and renders them on a graphics device provided by the...
Definition: view.h:68
An abstract class from which implementation specific LINE_READERs may be derived to read single lines...
Definition: richio.h:93
EDA_MSG_PANEL items for displaying messages.
Definition: msgpanel.h:54
const BOX2I GetBoundingBox() const override
Return the orthogonal bounding box of this object for display purposes.
Definition: pcb_shape.h:115
bool operator==(const BOARD_ITEM &aBoardItem) const override
Definition: pcb_shape.cpp:793
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.
Definition: pcb_shape.cpp:680
void swapData(BOARD_ITEM *aImage) override
Definition: pcb_shape.cpp:745
bool IsConnected() const override
Returns information if the object is derived from BOARD_CONNECTED_ITEM.
Definition: pcb_shape.cpp:307
void Flip(const VECTOR2I &aCentre, bool aFlipLeftRight) override
Flip this object, i.e.
Definition: pcb_shape.cpp:529
VECTOR2I GetCenter() const override
This defaults to the center of the bounding box if not overridden.
Definition: pcb_shape.h:75
void Rotate(const VECTOR2I &aRotCentre, const EDA_ANGLE &aAngle) override
Rotate this object.
Definition: pcb_shape.cpp:523
BITMAPS GetMenuImage() const override
Return a pointer to an image to be used in menus.
Definition: pcb_shape.cpp:713
bool HasLineStroke() const override
Check if this item has line stoke properties.
Definition: pcb_shape.h:83
int GetWidth() const override
Definition: pcb_shape.cpp:366
const BOX2I ViewBBox() const override
Return the bounding box of the item covering all its layers.
Definition: pcb_shape.cpp:728
bool HitTest(const VECTOR2I &aPosition, int aAccuracy=0) const override
Test if aPosition is inside or on the boundary of this item.
Definition: pcb_shape.h:117
std::shared_ptr< SHAPE > GetEffectiveShape(PCB_LAYER_ID aLayer=UNDEFINED_LAYER, FLASHING aFlash=FLASHING::DEFAULT) const override
Make a set of SHAPE objects representing the PCB_SHAPE.
Definition: pcb_shape.cpp:739
void ViewGetLayers(int aLayers[], int &aCount) const override
Definition: pcb_shape.cpp:661
void SetPosition(const VECTOR2I &aPos) override
Definition: pcb_shape.h:72
const VECTOR2I GetFocusPosition() const override
Allows items to return their visual center rather than their anchor.
Definition: pcb_shape.cpp:382
wxString GetItemDescription(UNITS_PROVIDER *aUnitsProvider) const override
Return a user-visible description string of this item.
Definition: pcb_shape.cpp:699
virtual std::vector< VECTOR2I > GetCorners() const
Return 4 corners for a rectangle or rotated rectangle (stored as a poly).
Definition: pcb_shape.cpp:424
bool IsProxyItem() const override
Definition: pcb_shape.h:110
~PCB_SHAPE() override
Definition: pcb_shape.cpp:60
static bool ClassOf(const EDA_ITEM *aItem)
Definition: pcb_shape.h:50
void SetLayer(PCB_LAYER_ID aLayer) override
Set the layer this item is on.
Definition: pcb_shape.cpp:314
wxString GetFriendlyName() const override
Definition: pcb_shape.h:65
void TransformShapeToPolygon(SHAPE_POLY_SET &aBuffer, PCB_LAYER_ID aLayer, int aClearance, int aError, ERROR_LOC aErrorLoc, bool ignoreLineWidth=false) const override
Convert the shape to a closed polygon.
Definition: pcb_shape.cpp:785
STROKE_PARAMS GetStroke() const override
Definition: pcb_shape.h:85
void SetIsProxyItem(bool aIsProxy=true) override
Definition: pcb_shape.cpp:584
void StyleFromSettings(const BOARD_DESIGN_SETTINGS &settings) override
Definition: pcb_shape.cpp:376
void Move(const VECTOR2I &aMoveVector) override
Move this object.
Definition: pcb_shape.cpp:452
std::vector< VECTOR2I > GetConnectionPoints() const
Definition: pcb_shape.cpp:323
bool Deserialize(const google::protobuf::Any &aContainer) override
Deserializes the given protobuf message into this object.
Definition: pcb_shape.cpp:178
EDA_ITEM * Clone() const override
Create a duplicate of this item with linked list members set to NULL.
Definition: pcb_shape.cpp:722
double ViewGetLOD(int aLayer, KIGFX::VIEW *aView) const override
Return the level of detail (LOD) of the item.
Definition: pcb_shape.cpp:626
virtual void Mirror(const VECTOR2I &aCentre, bool aMirrorAroundXAxis)
Definition: pcb_shape.cpp:537
void Scale(double aScale)
Definition: pcb_shape.cpp:458
bool HitTest(const BOX2I &aRect, bool aContained, int aAccuracy=0) const override
Test if aRect intersects this item.
Definition: pcb_shape.h:122
void Serialize(google::protobuf::Any &aContainer) const override
Serializes this object to the given Any message.
Definition: pcb_shape.cpp:65
void SetStroke(const STROKE_PARAMS &aStroke) override
Definition: pcb_shape.h:86
void Normalize() override
Perform any normalization required after a user rotate and/or flip.
Definition: pcb_shape.cpp:464
bool IsType(const std::vector< KICAD_T > &aScanTypes) const override
Check whether the item is one of the listed types.
Definition: pcb_shape.cpp:275
wxString GetClass() const override
Return the class name.
Definition: pcb_shape.h:55
double Similarity(const BOARD_ITEM &aBoardItem) const override
Return a measure of how likely the other object is to represent the same object.
Definition: pcb_shape.cpp:822
VECTOR2I GetPosition() const override
Definition: pcb_shape.h:73
PCB_LAYER_ID GetLayer() const override
Return the primary layer this item is on.
Definition: pcb_shape.h:70
Represent a set of closed polygons.
Simple container to manage line stroke parameters.
Definition: stroke_params.h:81
SHAPE_T
Definition: eda_shape.h:42
ERROR_LOC
When approximating an arc or circle, should the error be placed on the outside or inside of the curve...
FLASHING
Enum used during connectivity building to ensure we do not query connectivity while building the data...
Definition: layer_ids.h:149
PCB_LAYER_ID
A quick note on layer IDs:
Definition: layer_ids.h:60
@ UNDEFINED_LAYER
Definition: layer_ids.h:61
bool operator()(const BOARD_ITEM *aFirst, const BOARD_ITEM *aSecond) const
Definition: pcb_shape.cpp:763
KICAD_T
The set of class identification values stored in EDA_ITEM::m_structType.
Definition: typeinfo.h:78
@ PCB_SHAPE_T
class PCB_SHAPE, a segment not on copper layers
Definition: typeinfo.h:88