KiCad PCB EDA Suite
|
Public Member Functions | |
POLYGON_TEST (int aLimit) | |
bool | FindPairs (const SHAPE_LINE_CHAIN &aPoly) |
std::set< std::pair< int, int > > & | GetVertices () |
bool | isSubstantial (const VERTEX *aA, const VERTEX *aB) const |
Checks to see if there is a "substantial" protrusion in each polygon produced by the cut from aA to aB. | |
VERTEX * | getKink (VERTEX *aPt) const |
void | SetBoundingBox (const BOX2I &aBBox) |
VERTEX * | insertVertex (int aIndex, const VECTOR2I &pt, VERTEX *last, void *aUserData=nullptr) |
Insert a vertex into the vertex set. | |
VERTEX * | createList (const SHAPE_LINE_CHAIN &points, VERTEX *aTail=nullptr, void *aUserData=nullptr) |
Create a list of vertices from a line chain. | |
Protected Member Functions | |
VERTEX * | getNextOutlineVertex (const VERTEX *aPt) const |
Get the next vertex in the outline, avoiding steiner points and points that overlap with splits. | |
VERTEX * | getPrevOutlineVertex (const VERTEX *aPt) const |
Get the previous vertex in the outline, avoiding steiner points and points that overlap with splits. | |
bool | locallyInside (const VERTEX *a, const VERTEX *b) const |
Check whether the segment from vertex a -> vertex b is inside the polygon around the immediate area of vertex a. | |
bool | middleInside (const VERTEX *a, const VERTEX *b) const |
Check if the middle of the segment from a to b is inside the polygon. | |
bool | same_point (const VERTEX *aA, const VERTEX *aB) const |
Check if two vertices are at the same point. | |
uint32_t | zOrder (const double aX, const double aY) const |
Note that while the inputs are doubles, these are scaled by the size of the bounding box to fit into a 32-bit Morton code. | |
double | area (const VERTEX *p, const VERTEX *q, const VERTEX *r) const |
Return the twice the signed area of the triangle formed by vertices p, q, and r. | |
Protected Attributes | |
BOX2I | m_bbox |
std::deque< VERTEX > | m_vertices |
VECTOR2I::extended_type | m_simplificationLevel |
Private Attributes | |
int | m_limit |
std::set< std::pair< int, int > > | m_hits |
Definition at line 115 of file drc_test_provider_connection_width.cpp.
|
inline |
Definition at line 118 of file drc_test_provider_connection_width.cpp.
|
protectedinherited |
Return the twice the signed area of the triangle formed by vertices p, q, and r.
Definition at line 86 of file vertex_set.cpp.
References VERTEX::x, and VERTEX::y.
Referenced by POLYGON_TRIANGULATION::earcutList(), POLYGON_TRIANGULATION::goodSplit(), POLYGON_TRIANGULATION::intersects(), VERTEX::isEar(), VERTEX_SET::locallyInside(), POLYGON_TRIANGULATION::removeNullTriangles(), and POLYGON_TRIANGULATION::splitPolygon().
|
inherited |
Create a list of vertices from a line chain.
Take a SHAPE_LINE_CHAIN and links each point into a circular, doubly-linked list.
points | the line chain to create the list from |
aTail | the optional vertex to which to append the list |
aUserData | user data to associate with the vertices |
Definition at line 9 of file vertex_set.cpp.
References SHAPE_LINE_CHAIN::CPoint(), VERTEX_SET::insertVertex(), VERTEX_SET::m_simplificationLevel, VERTEX::next, SHAPE_LINE_CHAIN::PointCount(), VERTEX::remove(), VECTOR2< T >::SquaredEuclideanNorm(), VECTOR2< T >::x, and VECTOR2< T >::y.
Referenced by FindPairs(), POLYGON_TRIANGULATION::TesselatePolygon(), and VERTEX_CONNECTOR::VERTEX_CONNECTOR().
|
inline |
Definition at line 124 of file drc_test_provider_connection_width.cpp.
References SHAPE_LINE_CHAIN::BBox(), VERTEX_SET::createList(), getKink(), VERTEX::i, VERTEX_SET::m_bbox, m_hits, VERTEX_SET::m_vertices, VERTEX::next, and VERTEX::prev.
Definition at line 248 of file drc_test_provider_connection_width.cpp.
References std::abs(), VERTEX::i, isSubstantial(), VERTEX_SET::locallyInside(), m_limit, VERTEX::next, VERTEX::nextZ, VERTEX::prev, VERTEX::prevZ, SEG::Square(), VECTOR2< T >::SquaredEuclideanNorm(), VERTEX::x, VERTEX::y, VERTEX::z, and VERTEX_SET::zOrder().
Referenced by FindPairs().
Get the next vertex in the outline, avoiding steiner points and points that overlap with splits.
aPt | the current vertex |
Definition at line 97 of file vertex_set.cpp.
References VERTEX::next, VERTEX::nextZ, VERTEX::prev, VERTEX::prevZ, VERTEX_SET::same_point(), and VERTEX::y.
Referenced by isSubstantial(), and VERTEX_SET::locallyInside().
Get the previous vertex in the outline, avoiding steiner points and points that overlap with splits.
aPt | the current vertex |
Definition at line 124 of file vertex_set.cpp.
References VERTEX::nextZ, VERTEX::prev, VERTEX::prevZ, VERTEX_SET::same_point(), and VERTEX::y.
Referenced by isSubstantial(), and VERTEX_SET::locallyInside().
|
inline |
Definition at line 161 of file drc_test_provider_connection_width.cpp.
References m_hits.
|
inherited |
Insert a vertex into the vertex set.
Create an entry in the vertices lookup and optionally inserts the newly created vertex into an existing linked list.
aIndex | the index of the vertex |
pt | the point to insert |
last | the last vertex in the list |
aUserData | user data to associate with the vertex |
Definition at line 190 of file vertex_set.cpp.
References VERTEX_SET::m_vertices, VERTEX::next, VERTEX::prev, VECTOR2< T >::x, and VECTOR2< T >::y.
Referenced by VERTEX_SET::createList(), POLYGON_TRIANGULATION::insertTriVertex(), and VERTEX::split().
Checks to see if there is a "substantial" protrusion in each polygon produced by the cut from aA to aB.
Substantial in this case means that the polygon bulges out to a wider cross-section than the distance from aA to aB
aA | Starting point in the polygon |
aB | Ending point in the polygon |
Definition at line 175 of file drc_test_provider_connection_width.cpp.
References std::abs(), VERTEX_SET::getNextOutlineVertex(), VERTEX_SET::getPrevOutlineVertex(), m_limit, VERTEX_SET::m_vertices, VERTEX_SET::same_point(), VERTEX::x, and VERTEX::y.
Referenced by getKink().
Check whether the segment from vertex a -> vertex b is inside the polygon around the immediate area of vertex a.
We don't define the exact area over which the segment is inside but it is guaranteed to be inside the polygon immediately adjacent to vertex a.
Definition at line 153 of file vertex_set.cpp.
References VERTEX_SET::area(), VERTEX_SET::getNextOutlineVertex(), and VERTEX_SET::getPrevOutlineVertex().
Referenced by POLYGON_TRIANGULATION::earcutList(), getKink(), and POLYGON_TRIANGULATION::goodSplit().
Check if the middle of the segment from a to b is inside the polygon.
a | the first vertex |
b | the second vertex |
Definition at line 165 of file vertex_set.cpp.
References VERTEX::next, VERTEX::x, and VERTEX::y.
Referenced by POLYGON_TRIANGULATION::goodSplit().
Check if two vertices are at the same point.
aA | the first vertex |
aB | the second vertex |
Definition at line 92 of file vertex_set.cpp.
References VERTEX::x, and VERTEX::y.
Referenced by VERTEX_SET::getNextOutlineVertex(), VERTEX_SET::getPrevOutlineVertex(), and isSubstantial().
|
inherited |
Definition at line 3 of file vertex_set.cpp.
References VERTEX_SET::m_bbox.
Referenced by VERTEX_CONNECTOR::VERTEX_CONNECTOR().
|
protectedinherited |
Note that while the inputs are doubles, these are scaled by the size of the bounding box to fit into a 32-bit Morton code.
Calculate the Morton code of the VERTEX http://www.graphics.stanford.edu/~seander/bithacks.html#InterleaveBMN.
Definition at line 61 of file vertex_set.cpp.
References BOX2< Vec >::GetHeight(), BOX2< Vec >::GetWidth(), BOX2< Vec >::GetX(), BOX2< Vec >::GetY(), and VERTEX_SET::m_bbox.
Referenced by getKink(), VERTEX_CONNECTOR::getPoint(), VERTEX::isEar(), and VERTEX::updateOrder().
|
protectedinherited |
Definition at line 342 of file vertex_set.h.
Referenced by FindPairs(), VERTEX_SET::SetBoundingBox(), POLYGON_TRIANGULATION::TesselatePolygon(), and VERTEX_SET::zOrder().
|
private |
Definition at line 302 of file drc_test_provider_connection_width.cpp.
Referenced by FindPairs(), and GetVertices().
|
private |
Definition at line 301 of file drc_test_provider_connection_width.cpp.
Referenced by getKink(), and isSubstantial().
|
protectedinherited |
Definition at line 344 of file vertex_set.h.
Referenced by VERTEX_SET::createList(), and VERTEX_SET::VERTEX_SET().
|
protectedinherited |
Definition at line 343 of file vertex_set.h.
Referenced by FindPairs(), VERTEX_CONNECTOR::FindResults(), VERTEX_SET::insertVertex(), POLYGON_TRIANGULATION::intersectsPolygon(), isSubstantial(), POLYGON_TRIANGULATION::logRemaining(), VERTEX::split(), and POLYGON_TRIANGULATION::TesselatePolygon().