GemaCoreLib
The GeMA Core library
Loading...
Searching...
No Matches
gmPolygonTriangulator.h
Go to the documentation of this file.
1
11#ifndef _GEMA_POLYGON_TRIANGULATOR_H_
12#define _GEMA_POLYGON_TRIANGULATOR_H_
13
14#include "gmCoreConfig.h"
15#include <QVector>
16#include <functional>
17#include <gmVector.h>
18
19
20constexpr int MAX_POLY_SIZE = 8;
21//squared eps
22constexpr double MIN_EPS_2 = 1e-10;
24
25 struct CostIndex {
26 double cost;
27 int k;
28 };
29
30 struct Node {
31 int index; //point index
32 double cos; //cosine angle of this point
33 Node* next;
34 Node* prev;
35 };
36
37 QVector<Node> _nodes;
38 const GmVector3* _points;
39 int _pcount;
40public:
41
42 //int triangulate(const QVector<GmVector3>& points, QVector<int>& outTriIndex, const QVector<QPair<int, signed char>>& indexList);
43 template<class T>
44 static int triangulate(const QVector<GmVector3>& points, QVector<int>& outTriIndex, const QVector<T>& indexList);
45
46private:
47 //Greedy
48 //int gTriangulate(const QVector<GmVector3>& points, QVector<int>& outTriIndex, const QVector<QPair<int, signed char>>& indexList);
49
50 static int gTriangulate(const QVector<GmVector3>& points, int pcount, std::function<int(int)> index, QVector<int>& outTriIndex);
51
52 //Dynamic Programming
53 //int dpTriangulate(const QVector<GmVector3>& points, QVector<int>& outTriIndex, const QVector<QPair<int, signed char>>& indexList);
54
55 static int dpTriangulate(const QVector<GmVector3>& points, int pcount, std::function<int(int)> index, QVector<int>& outTriIndex);
56
57 static int triangulateNodes(const QVector<GmVector3>& points, QVector<Node>& nodes, QVector<int>& outTriIndex);
58 static void updateNodeCos(const QVector<GmVector3>& points, Node* node);
59 static void removeNode(const QVector<GmVector3>& points, Node* node);
60
61 static int dpPushTriangles(int i, int j, CostIndex dp[MAX_POLY_SIZE][MAX_POLY_SIZE], std::function<int(int)> index, QVector<int>& outTriIndex);
62 static void dpFillTable(const QVector<GmVector3>& points, int pcount, CostIndex dp[MAX_POLY_SIZE][MAX_POLY_SIZE], std::function<int(int)> index);
63
64 template<class T>
65 static std::function<int(int)> makeIndexFunction(const QVector<T>& indexList);
66};
67#endif //_GEMA_POLYGON_TRIANGULATOR_H_
Definition gmPolygonTriangulator.h:23
Declaration of useful configuration definitions for the Core library.
#define GMC_API_EXPORT
Macro for controlling if the class is being exported (GEMA_CORE_LIB defined) or imported (GEMA_CORE_L...
Definition gmCoreConfig.h:35
Declaration of the GmVector class.
arma::vec3 GmVector3
A 3D vector with fixed size of 3 elements.
Definition gmVector.h:35
Definition gmPolygonTriangulator.h:25
Definition gmPolygonTriangulator.h:30