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. | |
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. | |
void | Clear () |
Remove all points from the polygon. | |
const BOX2I | BBox (int aClearance=0) const override |
Compute a bounding box of the shape, with a margin of aClearance a collision. | |
int | PointCount () const |
Return the number of points (vertices) in this polygon. | |
const VECTOR2I & | CPoint (int aIndex) const |
Return a const reference to a given point in the polygon. | |
const VECTOR2D | CDPoint (int aIndex) const |
Return a given point as a vector with elements of type double. | |
const SHAPE_LINE_CHAIN & | Vertices () const |
Return the list of vertices defining this simple polygon. | |
void | Append (int aX, int aY) |
Append a new point at the end of the polygon. | |
void | Append (const VECTOR2I &aP) |
Append a new point at the end of the polygon. | |
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. | |
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 |
void | TransformToPolygon (SHAPE_POLY_SET &aBuffer, int aError, ERROR_LOC aErrorLoc) const override |
Fills a SHAPE_POLY_SET with a polygon representation of this shape. | |
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. | |
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. | |
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 override |
bool | PointInside (const VECTOR2I &aPt, int aAccuracy=0, bool aUseBBoxCache=false) const override |
Check if point aP lies inside a closed shape. | |
bool | PointOnEdge (const VECTOR2I &aP, int aAccuracy=0) const |
Check if point aP lies on an edge or vertex of the line chain. | |
int | EdgeContainingPoint (const VECTOR2I &aP, int aAccuracy=0) const |
Check if point aP lies on an edge or vertex of the line chain. | |
virtual BOX2I * | GetCachedBBox () const |
int | GetClearance (const SHAPE *aOther) const |
Return the actual minimum distance between two shapes. | |
bool | IsNull () const |
Return true if the shape is a null shape. | |
virtual VECTOR2I | Centre () const |
Compute a center-of-mass of the shape. | |
virtual int | Distance (const VECTOR2I &aP) const |
Returns the minimum distance from a given point to this shape. | |
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. | |
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. | |
Protected Types | |
typedef VECTOR2I::extended_type | ecoord |
Protected Attributes | |
SHAPE_TYPE | m_type |
< type of our shape | |
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 232 of file shape.h.
References SHAPE::BBox(), and BOX2< Vec >::Centre().
Referenced by PNS::TOPOLOGY::AssembleDiffPair(), Collide(), SCH_EASYEDA_PARSER::ParseSchematic(), and pickSegment().
|
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 | [out] 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 1172 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 1178 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 420 of file shape_line_chain.cpp.
References VECTOR2< int32_t >::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().
|
virtualinherited |
Returns the minimum distance from a given point to this shape.
Always returns zero if the point is inside a closed shape and aOutlineOnly is false.
aP | is the point to test |
Reimplemented in SHAPE_COMPOUND, and SHAPE_LINE_CHAIN.
Definition at line 108 of file shape.cpp.
References SHAPE::SquaredDistance().
|
inherited |
Check if point aP lies on an edge or vertex of the line chain.
aP | point to check |
Definition at line 1990 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 46 of file shape.cpp.
References SHAPE_BASE::m_type.
Referenced by PNS::VIA::Format(), SHAPE_CIRCLE::Format(), SHAPE_SEGMENT::Format(), and SHAPE_FILE_IO::Write().
|
inlinevirtualinherited |
Reimplemented in SHAPE_LINE_CHAIN.
Definition at line 351 of file shape.h.
Referenced by SHAPE_LINE_CHAIN_BASE::PointInside().
|
inherited |
Return the actual minimum distance between two shapes.
distance | in IU |
POLY_SETs contain a bunch of polygons that are triangulated. But there are way more triangles than necessary for collision detection. Triangles check three vertices each but for the outline, we only need one. These are also fractured, so we don't need to worry about holes
Definition at line 54 of file shape.cpp.
References SHAPE_POLY_SET::COutline(), SHAPE_BASE::GetIndexableSubshapeCount(), SHAPE_BASE::GetIndexableSubshapes(), SHAPE_POLY_SET::OutlineCount(), and SHAPE_BASE::Type().
|
inlinevirtualinherited |
Reimplemented in SHAPE_COMPOUND, and SHAPE_POLY_SET.
Definition at line 113 of file shape.h.
Referenced by SHAPE::GetClearance().
|
inlinevirtualinherited |
Reimplemented in SHAPE_COMPOUND, and SHAPE_POLY_SET.
Definition at line 115 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 108 of file shape.h.
Referenced by 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 166 of file shape.h.
References SHAPE_BASE::m_type, and SH_NULL.
|
inlineoverridevirtual |
Implements SHAPE.
Definition at line 168 of file shape_simple.h.
|
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.
|
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().
|
overridevirtualinherited |
Check if point aP lies inside a closed shape.
Always returns false if this shape is not closed.
aPt | point to check |
aUseBBoxCache | gives better performance if the bounding box caches have been generated. |
Reimplemented from SHAPE.
Definition at line 1933 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(), doConvertOutlineToPolygon(), PCB_TUNING_PATTERN::EditPush(), BOARD::GetBoardPolygonOutlines(), ZONE::HitTestCutout(), MARKER_BASE::HitTestMarker(), CONNECTIVITY_DATA::IsConnectedOnLayer(), PNS::SHOVE::onReverseCollidingVia(), SHAPE::PointInside(), SHAPE_POLY_SET::PointInside(), SHAPE_POLY_SET::RebuildHolesFromContours(), PCB_TUNING_PATTERN::recoverBaseline(), KIGEOM::RectifyPolygon(), 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 1984 of file shape_line_chain.cpp.
References SHAPE_LINE_CHAIN_BASE::EdgeContainingPoint().
Referenced by getPNSLine(), PCB_TUNING_PATTERN::initBaseLine(), 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.
|
overridevirtualinherited |
Reimplemented from SHAPE.
Definition at line 1214 of file shape_line_chain.cpp.
References VECTOR2< int32_t >::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(), and SHAPE::SquaredDistance().
|
overridevirtual |
Fills a SHAPE_POLY_SET with a polygon representation of this shape.
aBuffer | [out] will be filled with the polygonal representation of this shape. |
aError | controls the maximum allowed deviation when converting rounded shapes to segments |
aErrorLoc | controls where the error is placed when approximating rounded shapes |
Reimplemented from SHAPE_LINE_CHAIN_BASE.
Definition at line 138 of file shape.cpp.
References SHAPE_POLY_SET::AddOutline(), and m_points.
|
inlineinherited |
Return the type of the shape.
the | type |
Definition at line 98 of file shape.h.
References SHAPE_BASE::m_type.
Referenced by CreepageGraph::Addshape(), 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(), EDA_SHAPE::EDA_SHAPE(), SHAPE::GetClearance(), PNS::HOLE::Hull(), PNS::SOLID::Hull(), DRC_RTREE::QueryColliding(), PNS::HOLE::Radius(), ROUTER_PREVIEW_ITEM::ROUTER_PREVIEW_ITEM(), PNS::HOLE::SetCenter(), PNS::HOLE::SetRadius(), STROKE_PARAMS::Stroke(), and SHAPE_FILE_IO::Write().
|
inlineinherited |
Definition at line 103 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 188 of file shape_simple.h.
Referenced by Append(), BBox(), Clear(), Collide(), CPoint(), GetPoint(), GetPointCount(), GetSegment(), GetSegmentCount(), Move(), PointCount(), SHAPE_SIMPLE(), TransformToPolygon(), and Vertices().
|
protectedinherited |
< type of our shape
Definition at line 119 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 131 of file shape.h.
Referenced by BOOST_AUTO_TEST_CASE(), DIRECTION_45::BuildInitialTrace(), CompareLength(), CIRCLE::Contains(), EDIT_TOOL::FilletTracks(), CIRCLE::IntersectLine(), and LINE_FILLET_ROUTINE::ProcessLinePair().