KiCad PCB EDA Suite
|
Represent a simple polygon consisting of a zero-thickness closed chain of connected line segments. More...
#include <shape_simple.h>
Public Member Functions | |
SHAPE_SIMPLE () | |
Create an empty polygon. More... | |
SHAPE_SIMPLE (const SHAPE_LINE_CHAIN &aPoly) | |
SHAPE_SIMPLE (const SHAPE_SIMPLE &aOther) | |
SHAPE * | Clone () const override |
Return a dynamically allocated copy of the shape. More... | |
void | Clear () |
Remove all points from the polygon. More... | |
const BOX2I | BBox (int aClearance=0) const override |
Compute a bounding box of the shape, with a margin of aClearance a collision. More... | |
int | PointCount () const |
Return the number of points (vertices) in this polygon. More... | |
const VECTOR2I & | CPoint (int aIndex) const |
Return a const reference to a given point in the polygon. More... | |
const VECTOR2D | CDPoint (int aIndex) const |
Return a given point as a vector with elements of type double. More... | |
const SHAPE_LINE_CHAIN & | Vertices () const |
Return the list of vertices defining this simple polygon. More... | |
void | Append (int aX, int aY) |
Append a new point at the end of the polygon. More... | |
void | Append (const VECTOR2I &aP) |
Append a new point at the end of the polygon. More... | |
bool | Collide (const SEG &aSeg, int aClearance=0, int *aActual=nullptr, VECTOR2I *aLocation=nullptr) const override |
Check if the boundary of shape (this) lies closer to the point aP than aClearance, indicating a collision. More... | |
void | Rotate (const EDA_ANGLE &aAngle, const VECTOR2I &aCenter={ 0, 0 }) override |
void | Move (const VECTOR2I &aVector) override |
bool | IsSolid () const override |
virtual const VECTOR2I | GetPoint (int aIndex) const override |
virtual const SEG | GetSegment (int aIndex) const override |
virtual size_t | GetPointCount () const override |
virtual size_t | GetSegmentCount () const override |
bool | IsClosed () const override |
virtual bool | Collide (const VECTOR2I &aP, int aClearance=0, int *aActual=nullptr, VECTOR2I *aLocation=nullptr) const override |
Check if point aP lies closer to us than aClearance. More... | |
virtual bool | Collide (const SHAPE *aShape, int aClearance, VECTOR2I *aMTV) const |
Check if the boundary of shape (this) lies closer to the shape aShape than aClearance, indicating a collision. More... | |
virtual bool | Collide (const SHAPE *aShape, int aClearance=0, int *aActual=nullptr, VECTOR2I *aLocation=nullptr) const |
SEG::ecoord | SquaredDistance (const VECTOR2I &aP, bool aOutlineOnly=false) const |
bool | PointInside (const VECTOR2I &aPt, int aAccuracy=0, bool aUseBBoxCache=false) const |
Check if point aP lies inside a polygon (any type) defined by the line chain. More... | |
bool | PointOnEdge (const VECTOR2I &aP, int aAccuracy=0) const |
Check if point aP lies on an edge or vertex of the line chain. More... | |
int | EdgeContainingPoint (const VECTOR2I &aP, int aAccuracy=0) const |
Check if point aP lies on an edge or vertex of the line chain. More... | |
virtual BOX2I * | GetCachedBBox () const |
int | GetClearance (const SHAPE *aOther) const |
Return the actual minimum distance between two shapes. More... | |
bool | IsNull () const |
Return true if the shape is a null shape. More... | |
virtual VECTOR2I | Centre () const |
Compute a center-of-mass of the shape. More... | |
virtual bool | Parse (std::stringstream &aStream) |
virtual const std::string | Format (bool aCplusPlus=true) const |
FACET * | NewFacet () |
SGNODE * | CalcShape (SGNODE *aParent, SGNODE *aColor, WRL1_ORDER aVertexOrder, float aCreaseLimit=0.74317, bool isVRML2=false) |
SHAPE_TYPE | Type () const |
Return the type of the shape. More... | |
wxString | TypeName () const |
virtual bool | HasIndexableSubshapes () const |
virtual size_t | GetIndexableSubshapeCount () const |
virtual void | GetIndexableSubshapes (std::vector< const SHAPE * > &aSubshapes) const |
Static Public Attributes | |
static const int | MIN_PRECISION_IU = 4 |
This is the minimum precision for all the points in a shape. More... | |
Protected Types | |
typedef VECTOR2I::extended_type | ecoord |
Protected Attributes | |
SHAPE_TYPE | m_type |
< type of our shape More... | |
Private Attributes | |
SHAPE_LINE_CHAIN | m_points |
std::list< FACET * > | facets |
Represent a simple polygon consisting of a zero-thickness closed chain of connected line segments.
Internally the vertices are held in a SHAPE_LINE_CHAIN, please note that there is a "virtual" line segment between the last and first vertex.
Definition at line 41 of file shape_simple.h.
|
protectedinherited |
|
inline |
Create an empty polygon.
Definition at line 47 of file shape_simple.h.
References m_points, and SHAPE_LINE_CHAIN::SetClosed().
Referenced by Clone().
|
inline |
Definition at line 53 of file shape_simple.h.
References m_points, and SHAPE_LINE_CHAIN::SetClosed().
|
inline |
Definition at line 60 of file shape_simple.h.
|
inline |
Append a new point at the end of the polygon.
aP | is the new point. |
Definition at line 146 of file shape_simple.h.
References SHAPE_LINE_CHAIN::Append(), and m_points.
|
inline |
Append a new point at the end of the polygon.
aX | is X coordinate of the new point. |
aY | is Y coordinate of the new point. |
Definition at line 135 of file shape_simple.h.
References Append().
Referenced by Append(), EDA_TEXT::GetEffectiveTextShape(), PNS_KICAD_IFACE_BASE::syncTextItem(), and PNS_KICAD_IFACE_BASE::syncZone().
|
inlineoverridevirtual |
Compute a bounding box of the shape, with a margin of aClearance a collision.
aClearance | how much the bounding box is expanded wrs to the minimum enclosing rectangle for the shape. |
Implements SHAPE.
Definition at line 78 of file shape_simple.h.
References SHAPE_LINE_CHAIN::BBox(), and m_points.
Referenced by PNS::ConvexHull(), and PNS::OPTIMIZER::customBreakouts().
|
inherited |
Definition at line 703 of file wrlfacet.cpp.
References IFSG_NODE::AddChildNode(), IFSG_INDEX::AddIndex(), IFSG_NODE::AddRefNode(), SHAPE::facets, IFSG_NODE::GetRawPtr(), S3D::GetSGNodeParent(), IFSG_FACESET::NewNode(), IFSG_SHAPE::NewNode(), IFSG_COLORS::SetColorList(), IFSG_COORDS::SetCoordsList(), IFSG_NORMALS::SetNormalList(), SGPOINT::x, SGPOINT::y, and SGPOINT::z.
Referenced by WRL2FACESET::TranslateToSG(), X3DIFACESET::TranslateToSG(), and WRL1FACESET::TranslateToSG().
|
inline |
Return a given point as a vector with elements of type double.
aIndex | is the index of the point. |
Definition at line 113 of file shape_simple.h.
References CPoint(), VECTOR2< T >::x, and VECTOR2< T >::y.
Referenced by ROUTER_PREVIEW_ITEM::drawShape().
|
inlinevirtualinherited |
Compute a center-of-mass of the shape.
Definition at line 230 of file shape.h.
References SHAPE::BBox(), and BOX2< Vec >::Centre().
Referenced by Collide().
|
inline |
Remove all points from the polygon.
Definition at line 72 of file shape_simple.h.
References SHAPE_LINE_CHAIN::Clear(), and m_points.
|
inlineoverridevirtual |
Return a dynamically allocated copy of the shape.
copy | of the shape |
Reimplemented from SHAPE.
Definition at line 64 of file shape_simple.h.
References SHAPE_SIMPLE().
|
inlineoverridevirtual |
Check if the boundary of shape (this) lies closer to the point aP than aClearance, indicating a collision.
aActual | [out] an optional pointer to an int to store the actual distance in the event of a collision. |
aLocation | [out] an option pointer to a point to store a nearby location in the event of a collision. |
Reimplemented from SHAPE_LINE_CHAIN_BASE.
Definition at line 152 of file shape_simple.h.
References SHAPE_LINE_CHAIN::Collide(), and m_points.
|
virtualinherited |
Check if the boundary of shape (this) lies closer to the shape aShape than aClearance, indicating a collision.
aShape | shape to check collision against |
aClearance | minimum clearance |
aMTV | minimum translation vector |
aActual | [out] an optional pointer to an int to store the actual distance in the event of a collision. |
aLocation | [out] an option pointer to a point to store a nearby location in the event of a collision. |
Reimplemented in SHAPE_COMPOUND, SHAPE_RECT, and SHAPE_SEGMENT.
Definition at line 1109 of file shape_collisions.cpp.
References collideShapes().
|
virtualinherited |
Reimplemented in SHAPE_ARC, SHAPE_COMPOUND, SHAPE_POLY_SET, SHAPE_RECT, and SHAPE_SEGMENT.
Definition at line 1115 of file shape_collisions.cpp.
References collideShapes().
|
overridevirtualinherited |
Check if point aP lies closer to us than aClearance.
aP | the point to check for collisions with |
aClearance | minimum distance that does not qualify as a collision. |
aActual | an optional pointer to an int to store the actual distance in the event of a collision. |
Reimplemented from SHAPE.
Reimplemented in SHAPE_LINE_CHAIN.
Definition at line 385 of file shape_line_chain.cpp.
References VECTOR2< int >::ECOORD_MAX, SHAPE_LINE_CHAIN_BASE::GetSegment(), SHAPE_LINE_CHAIN_BASE::GetSegmentCount(), SHAPE_LINE_CHAIN_BASE::IsClosed(), SEG::NearestPoint(), SHAPE_LINE_CHAIN_BASE::PointInside(), and SEG::Square().
Referenced by Collide().
|
inline |
Return a const reference to a given point in the polygon.
Negative indices count from the end of the point list, e.g. -1 means "last point", -2 means "second to last point" and so on.
aIndex | is the index of the point. |
Definition at line 102 of file shape_simple.h.
References SHAPE_LINE_CHAIN::CPoint(), and m_points.
Referenced by CDPoint(), and KIGFX::PCB_PAINTER::draw().
|
inherited |
Check if point aP lies on an edge or vertex of the line chain.
aP | point to check |
Definition at line 1679 of file shape_line_chain.cpp.
References SEG::A, SEG::B, SEG::Distance(), SHAPE_LINE_CHAIN_BASE::GetPoint(), SHAPE_LINE_CHAIN_BASE::GetPointCount(), SHAPE_LINE_CHAIN_BASE::GetSegment(), SHAPE_LINE_CHAIN_BASE::GetSegmentCount(), VECTOR2< T >::x, and VECTOR2< T >::y.
Referenced by SHAPE_LINE_CHAIN_BASE::PointOnEdge().
|
virtualinherited |
Reimplemented in SHAPE_CIRCLE, SHAPE_COMPOUND, SHAPE_LINE_CHAIN, SHAPE_POLY_SET, SHAPE_RECT, and SHAPE_SEGMENT.
Definition at line 41 of file shape.cpp.
References SHAPE_BASE::m_type.
Referenced by SHAPE_CIRCLE::Format(), SHAPE_SEGMENT::Format(), and SHAPE_FILE_IO::Write().
|
inlinevirtualinherited |
Reimplemented in SHAPE_LINE_CHAIN.
Definition at line 326 of file shape.h.
Referenced by SHAPE_LINE_CHAIN_BASE::PointInside().
|
inherited |
Return the actual minimum distance between two shapes.
distance | in IU |
Definition at line 49 of file shape.cpp.
References SHAPE_BASE::GetIndexableSubshapeCount(), and SHAPE_BASE::GetIndexableSubshapes().
|
inlinevirtualinherited |
Reimplemented in SHAPE_COMPOUND, and SHAPE_POLY_SET.
Definition at line 111 of file shape.h.
Referenced by SHAPE::GetClearance().
|
inlinevirtualinherited |
Reimplemented in SHAPE_COMPOUND, and SHAPE_POLY_SET.
Definition at line 113 of file shape.h.
Referenced by SHAPE_COMPOUND::AddShape(), SHAPE::GetClearance(), and ROUTER_PREVIEW_ITEM::ViewDraw().
|
inlineoverridevirtual |
Implements SHAPE_LINE_CHAIN_BASE.
Definition at line 173 of file shape_simple.h.
References SHAPE_LINE_CHAIN::CPoint(), and m_points.
|
inlineoverridevirtual |
Implements SHAPE_LINE_CHAIN_BASE.
Definition at line 175 of file shape_simple.h.
References m_points, and SHAPE_LINE_CHAIN::PointCount().
|
inlineoverridevirtual |
Implements SHAPE_LINE_CHAIN_BASE.
Definition at line 174 of file shape_simple.h.
References SHAPE_LINE_CHAIN::CSegment(), and m_points.
Referenced by KIGFX::PCB_PAINTER::draw(), and STROKE_PARAMS::Stroke().
|
inlineoverridevirtual |
Implements SHAPE_LINE_CHAIN_BASE.
Definition at line 176 of file shape_simple.h.
References m_points, and SHAPE_LINE_CHAIN::SegmentCount().
Referenced by KIGFX::PCB_PAINTER::draw(), and STROKE_PARAMS::Stroke().
|
inlinevirtualinherited |
Reimplemented in SHAPE_COMPOUND, and SHAPE_POLY_SET.
Definition at line 106 of file shape.h.
Referenced by SHAPE_COMPOUND::AddShape(), and ROUTER_PREVIEW_ITEM::ViewDraw().
|
inlineoverridevirtual |
Implements SHAPE_LINE_CHAIN_BASE.
Definition at line 178 of file shape_simple.h.
|
inlineinherited |
Return true if the shape is a null shape.
true | if null :-) |
Definition at line 164 of file shape.h.
References SHAPE_BASE::m_type, and SH_NULL.
|
inlineoverridevirtual |
|
inlineoverridevirtual |
Implements SHAPE.
Definition at line 163 of file shape_simple.h.
References m_points, and SHAPE_LINE_CHAIN::Move().
|
inherited |
Definition at line 695 of file wrlfacet.cpp.
References SHAPE::facets.
Referenced by WRL2FACESET::TranslateToSG(), X3DIFACESET::TranslateToSG(), and WRL1FACESET::TranslateToSG().
|
virtualinherited |
Reimplemented in SHAPE_LINE_CHAIN, and SHAPE_POLY_SET.
Definition at line 34 of file shape.cpp.
|
inline |
Return the number of points (vertices) in this polygon.
Definition at line 88 of file shape_simple.h.
References m_points, and SHAPE_LINE_CHAIN::PointCount().
Referenced by KIGFX::PCB_PAINTER::draw(), and ROUTER_PREVIEW_ITEM::drawShape().
|
inherited |
Check if point aP lies inside a polygon (any type) defined by the line chain.
For closed shapes only.
aPt | point to check |
aUseBBoxCache | gives better performance if the bounding box caches have been generated. |
Definition at line 1621 of file shape_line_chain.cpp.
References SHAPE_LINE_CHAIN_BASE::GetCachedBBox(), SHAPE_LINE_CHAIN_BASE::GetPoint(), SHAPE_LINE_CHAIN_BASE::GetPointCount(), SHAPE_LINE_CHAIN_BASE::IsClosed(), SHAPE_LINE_CHAIN_BASE::PointOnEdge(), rescale(), VECTOR2< T >::x, and VECTOR2< T >::y.
Referenced by BuildBoardPolygonOutlines(), Collide(), SHAPE_LINE_CHAIN_BASE::Collide(), SHAPE_LINE_CHAIN::Collide(), SHAPE_POLY_SET::containsSingle(), ConvertOutlineToPolygon(), ZONE::HitTestCutout(), MARKER_BASE::HitTestMarker(), CONNECTIVITY_DATA::IsConnectedOnLayer(), SHAPE_LINE_CHAIN_BASE::SquaredDistance(), DRC_TEST_PROVIDER_ZONE_CONNECTIONS::testZoneLayer(), and PNS::LINE::Walkaround().
|
inherited |
Check if point aP lies on an edge or vertex of the line chain.
aP | point to check |
Definition at line 1673 of file shape_line_chain.cpp.
References SHAPE_LINE_CHAIN_BASE::EdgeContainingPoint().
Referenced by FABMASTER::loadZones(), SHAPE_LINE_CHAIN_BASE::PointInside(), PNS::LINE_PLACER::splitHeadTail(), and PNS::LINE::Walkaround().
|
inlineoverridevirtual |
aCenter | is the rotation center. |
aAngle | rotation angle. |
Implements SHAPE.
Definition at line 158 of file shape_simple.h.
|
inherited |
Definition at line 884 of file shape_line_chain.cpp.
References VECTOR2< int >::ECOORD_MAX, SHAPE_LINE_CHAIN_BASE::GetSegment(), SHAPE_LINE_CHAIN_BASE::GetSegmentCount(), SHAPE_LINE_CHAIN_BASE::IsClosed(), SHAPE_LINE_CHAIN_BASE::PointInside(), and SEG::SquaredDistance().
Referenced by SHAPE_LINE_CHAIN::Distance().
|
inlineinherited |
Return the type of the shape.
the | type |
Definition at line 96 of file shape.h.
References SHAPE_BASE::m_type.
Referenced by PNS::DP_GATEWAYS::BuildFromPrimitivePair(), PNS::buildHullForPrimitiveShape(), PNS_LOG_VIEWER_FRAME::buildListTree(), SHAPE_POLY_SET::Collide(), Collide(), collideShapes(), collideSingleShapes(), PNS::OPTIMIZER::computeBreakouts(), ROUTER_PREVIEW_ITEM::drawShape(), PNS_LOG_VIEWER_FRAME::drawSimpleShape(), PNS::SOLID::HoleHull(), PNS::SOLID::Hull(), STROKE_PARAMS::Stroke(), and SHAPE_FILE_IO::Write().
|
inlineinherited |
Definition at line 101 of file shape.h.
References SHAPE_BASE::m_type, and SHAPE_TYPE_asString().
Referenced by Collide().
|
inline |
Return the list of vertices defining this simple polygon.
Definition at line 124 of file shape_simple.h.
References m_points.
Referenced by PNS::ConvexHull(), BOARD_ADAPTER::createPadWithMargin(), PNS::OPTIMIZER::customBreakouts(), and KIGFX::PCB_PAINTER::draw().
|
privateinherited |
Definition at line 143 of file wrlfacet.h.
Referenced by SHAPE::CalcShape(), and SHAPE::NewFacet().
|
private |
Definition at line 185 of file shape_simple.h.
Referenced by Append(), BBox(), Clear(), Collide(), CPoint(), GetPoint(), GetPointCount(), GetSegment(), GetSegmentCount(), Move(), PointCount(), SHAPE_SIMPLE(), and Vertices().
|
protectedinherited |
< type of our shape
Definition at line 117 of file shape.h.
Referenced by SHAPE::Format(), SHAPE::IsNull(), SHAPE_BASE::Type(), and SHAPE_BASE::TypeName().
|
staticinherited |
This is the minimum precision for all the points in a shape.
Definition at line 129 of file shape.h.
Referenced by BOOST_AUTO_TEST_CASE(), DIRECTION_45::BuildInitialTrace(), CompareLength(), CIRCLE::Contains(), EDIT_TOOL::FilletTracks(), and CIRCLE::IntersectLine().