KiCad PCB EDA Suite
|
#include <vertex_set.h>
Public Member Functions | |
VERTEX_SET (int aSimplificationLevel) | |
~VERTEX_SET () | |
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. | |
int32_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 |
Friends | |
class | VERTEX |
Definition at line 249 of file vertex_set.h.
|
inline |
Definition at line 254 of file vertex_set.h.
References m_simplificationLevel.
|
inline |
Definition at line 258 of file vertex_set.h.
Return the twice the signed area of the triangle formed by vertices p, q, and r.
Definition at line 83 of file vertex_set.cpp.
References VERTEX::x, and VERTEX::y.
Referenced by POLYGON_TRIANGULATION::earcutList(), POLYGON_TRIANGULATION::goodSplit(), POLYGON_TRIANGULATION::intersects(), VERTEX::isEar(), locallyInside(), POLYGON_TRIANGULATION::removeNullTriangles(), and POLYGON_TRIANGULATION::splitPolygon().
VERTEX * VERTEX_SET::createList | ( | const SHAPE_LINE_CHAIN & | points, |
VERTEX * | aTail = nullptr , |
||
void * | aUserData = nullptr |
||
) |
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(), insertVertex(), m_simplificationLevel, VERTEX::next, SHAPE_LINE_CHAIN::PointCount(), VERTEX::remove(), VECTOR2< T >::SquaredEuclideanNorm(), VECTOR2< T >::x, and VECTOR2< T >::y.
Referenced by POLYGON_TEST::FindPairs(), POLYGON_TRIANGULATION::TesselatePolygon(), and VERTEX_CONNECTOR::VERTEX_CONNECTOR().
Get the next vertex in the outline, avoiding steiner points and points that overlap with splits.
aPt | the current vertex |
Definition at line 94 of file vertex_set.cpp.
References VERTEX::next, VERTEX::nextZ, VERTEX::prev, VERTEX::prevZ, same_point(), and VERTEX::y.
Referenced by POLYGON_TEST::isSubstantial(), and locallyInside().
Get the previous vertex in the outline, avoiding steiner points and points that overlap with splits.
aPt | the current vertex |
Definition at line 121 of file vertex_set.cpp.
References VERTEX::nextZ, VERTEX::prev, VERTEX::prevZ, same_point(), and VERTEX::y.
Referenced by POLYGON_TEST::isSubstantial(), and locallyInside().
VERTEX * VERTEX_SET::insertVertex | ( | int | aIndex, |
const VECTOR2I & | pt, | ||
VERTEX * | last, | ||
void * | aUserData = nullptr |
||
) |
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 187 of file vertex_set.cpp.
References m_vertices, VERTEX::next, VERTEX::prev, VECTOR2< T >::x, and VECTOR2< T >::y.
Referenced by createList(), POLYGON_TRIANGULATION::insertTriVertex(), and VERTEX::split().
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 150 of file vertex_set.cpp.
References area(), getNextOutlineVertex(), and getPrevOutlineVertex().
Referenced by POLYGON_TRIANGULATION::earcutList(), POLYGON_TEST::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 162 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 89 of file vertex_set.cpp.
References VERTEX::x, and VERTEX::y.
Referenced by getNextOutlineVertex(), getPrevOutlineVertex(), and POLYGON_TEST::isSubstantial().
void VERTEX_SET::SetBoundingBox | ( | const BOX2I & | aBBox | ) |
Definition at line 3 of file vertex_set.cpp.
References m_bbox.
Referenced by VERTEX_CONNECTOR::VERTEX_CONNECTOR().
|
protected |
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 m_bbox.
Referenced by POLYGON_TEST::getKink(), VERTEX_CONNECTOR::getPoint(), VERTEX::isEar(), and VERTEX::updateOrder().
|
friend |
Definition at line 251 of file vertex_set.h.
|
protected |
Definition at line 338 of file vertex_set.h.
Referenced by POLYGON_TEST::FindPairs(), SetBoundingBox(), POLYGON_TRIANGULATION::TesselatePolygon(), and zOrder().
|
protected |
Definition at line 340 of file vertex_set.h.
Referenced by createList(), and VERTEX_SET().
|
protected |
Definition at line 339 of file vertex_set.h.
Referenced by POLYGON_TEST::FindPairs(), VERTEX_CONNECTOR::FindResults(), insertVertex(), POLYGON_TRIANGULATION::intersectsPolygon(), POLYGON_TEST::isSubstantial(), POLYGON_TRIANGULATION::logRemaining(), VERTEX::split(), and POLYGON_TRIANGULATION::TesselatePolygon().