Developer Documentation
ACG::Triangulator Class Reference

Classes

struct  RingVertex
 

Public Member Functions

 Triangulator (const std::vector< Vec3f > &_pos)
 Execute the triangulation algorithm on a polygon. More...
 
virtual ~Triangulator ()
 Destructor. More...
 
size_t numTriangles () const
 Get number of triangles. More...
 
int index (int _i) const
 Get local vertex index. More...
 
const std::vector< int > & indices () const
 Get local index buffer. More...
 
bool convex () const
 Is the polygon convex? More...
 
size_t numReflexVertices () const
 Get number of reflex vertices. More...
 
bool isReflexVertex (int _i) const
 Check if a vertex is reflex. More...
 
bool success () const
 Check if the triangulation was successful. More...
 

Private Member Functions

void initVertexList ()
 
int earClippingN2 ()
 
int earClippingN3 ()
 
Triangulatoroperator= (const Triangulator &)=delete
 
float triangleAreaSign (const Vec2f &v0, const Vec2f &v1, const Vec2f &v2) const
 
float distancePointToSegmentSq (const Vec2f &v0, const Vec2f &v1, const Vec2f &pt) const
 
bool isReflexVertex (const Vec2f &v0, const Vec2f &v1, const Vec2f &v2) const
 
bool pointInTriangle (const Vec2f &v0, const Vec2f &v1, const Vec2f &v2, const Vec2f &pt) const
 
bool updateReflexVertex (RingVertex *v)
 
void addEar (RingVertex *_earTip)
 

Private Attributes

const size_t polySize_
 
size_t numRemaningVertices_
 
size_t numTris_
 
size_t numReflexVertices_
 
bool ok_
 
bool convex_
 
std::vector< Vec2fpos_
 
std::vector< RingVertexvertices_
 
std::list< RingVertex * > reflexVertices_
 
std::vector< int > tris_
 

Detailed Description

Definition at line 58 of file Triangulator.hh.

Constructor & Destructor Documentation

◆ Triangulator()

ACG::Triangulator::Triangulator ( const std::vector< Vec3f > &  _pos)
explicit

Execute the triangulation algorithm on a polygon.

Parameters
_pospolygon vertex positions (ccw)

Definition at line 52 of file Triangulator.cc.

◆ ~Triangulator()

ACG::Triangulator::~Triangulator ( )
virtual

Destructor.

Definition at line 171 of file Triangulator.cc.

Member Function Documentation

◆ addEar()

void ACG::Triangulator::addEar ( RingVertex _earTip)
private

Definition at line 469 of file Triangulator.cc.

◆ convex()

bool ACG::Triangulator::convex ( ) const
inline

Is the polygon convex?

Returns
convex true or false

Definition at line 93 of file Triangulator.hh.

◆ distancePointToSegmentSq()

float ACG::Triangulator::distancePointToSegmentSq ( const Vec2f v0,
const Vec2f v1,
const Vec2f pt 
) const
private

Definition at line 202 of file Triangulator.cc.

◆ earClippingN2()

int ACG::Triangulator::earClippingN2 ( )
private

Definition at line 374 of file Triangulator.cc.

◆ earClippingN3()

int ACG::Triangulator::earClippingN3 ( )
private

Definition at line 290 of file Triangulator.cc.

◆ index()

int ACG::Triangulator::index ( int  _i) const
inline

Get local vertex index.

Parameters
_iindex to index buffer in range [0, .., numTris*3 - 1]
Returns
vertex index in range [0, .., _pos.size()-1], where _pos is the input vector of positions as passed to the constructor

Definition at line 81 of file Triangulator.hh.

◆ indices()

const std::vector< int > & ACG::Triangulator::indices ( ) const
inline

Get local index buffer.

Returns
index buffer

Definition at line 87 of file Triangulator.hh.

◆ initVertexList()

void ACG::Triangulator::initVertexList ( )
private

Definition at line 272 of file Triangulator.cc.

◆ isReflexVertex() [1/2]

bool ACG::Triangulator::isReflexVertex ( const Vec2f v0,
const Vec2f v1,
const Vec2f v2 
) const
private

Definition at line 176 of file Triangulator.cc.

◆ isReflexVertex() [2/2]

bool ACG::Triangulator::isReflexVertex ( int  _i) const

Check if a vertex is reflex.

A reflex vertex is a vertex with an inner angle larger than 180 deg.

Parameters
_ilocal vertex index in range [0, .., _pos.size()-1]
Returns
reflex vertex true or false

Definition at line 188 of file Triangulator.cc.

◆ numReflexVertices()

size_t ACG::Triangulator::numReflexVertices ( ) const
inline

Get number of reflex vertices.

A reflex vertex is a vertex with an inner angle larger than 180 deg.

Returns
number of reflex vertices

Definition at line 100 of file Triangulator.hh.

◆ numTriangles()

size_t ACG::Triangulator::numTriangles ( ) const
inline

Get number of triangles.

Returns
number of triangles after triangulation

Definition at line 74 of file Triangulator.hh.

◆ pointInTriangle()

bool ACG::Triangulator::pointInTriangle ( const Vec2f v0,
const Vec2f v1,
const Vec2f v2,
const Vec2f pt 
) const
private

Definition at line 221 of file Triangulator.cc.

◆ success()

bool ACG::Triangulator::success ( ) const
inline

Check if the triangulation was successful.

Returns
success true or false

Definition at line 114 of file Triangulator.hh.

◆ triangleAreaSign()

float ACG::Triangulator::triangleAreaSign ( const Vec2f v0,
const Vec2f v1,
const Vec2f v2 
) const
private

Definition at line 196 of file Triangulator.cc.

◆ updateReflexVertex()

bool ACG::Triangulator::updateReflexVertex ( RingVertex v)
private

Definition at line 454 of file Triangulator.cc.

Member Data Documentation

◆ convex_

bool ACG::Triangulator::convex_
private

Definition at line 169 of file Triangulator.hh.

◆ numReflexVertices_

size_t ACG::Triangulator::numReflexVertices_
private

Definition at line 166 of file Triangulator.hh.

◆ numRemaningVertices_

size_t ACG::Triangulator::numRemaningVertices_
private

Definition at line 164 of file Triangulator.hh.

◆ numTris_

size_t ACG::Triangulator::numTris_
private

Definition at line 165 of file Triangulator.hh.

◆ ok_

bool ACG::Triangulator::ok_
private

Definition at line 168 of file Triangulator.hh.

◆ polySize_

const size_t ACG::Triangulator::polySize_
private

Definition at line 163 of file Triangulator.hh.

◆ pos_

std::vector<Vec2f> ACG::Triangulator::pos_
private

Definition at line 172 of file Triangulator.hh.

◆ reflexVertices_

std::list<RingVertex*> ACG::Triangulator::reflexVertices_
private

Definition at line 175 of file Triangulator.hh.

◆ tris_

std::vector<int> ACG::Triangulator::tris_
private

Definition at line 177 of file Triangulator.hh.

◆ vertices_

std::vector<RingVertex> ACG::Triangulator::vertices_
private

Definition at line 174 of file Triangulator.hh.


The documentation for this class was generated from the following files: