26 #include <tulip/Coord.h>
27 #include <tulip/tuliphash.h>
43 TLP_SCOPE
bool delaunayTriangulation(std::vector<Coord> &points,
44 std::vector<std::pair<unsigned int, unsigned int>> &edges,
45 std::vector<std::vector<unsigned int>> &simplices,
46 bool voronoiMode =
false);
48 static std::string QhullVersion();
54 class TLP_SCOPE VoronoiDiagram {
63 typedef std::pair<unsigned int, unsigned int> Edge;
66 typedef std::set<unsigned int> Cell;
69 inline unsigned int nbSites()
const {
74 inline unsigned int nbVertices()
const {
75 return vertices.size();
79 inline unsigned int nbEdges()
const {
84 inline const Site &site(
const unsigned int siteIdx) {
85 return sites[siteIdx];
89 inline const Vertex &vertex(
const unsigned int vertexIdx) {
90 return vertices[vertexIdx];
94 inline const Edge &edge(
const unsigned int edgeIdx) {
95 return edges[edgeIdx];
99 inline const Cell &cell(
const unsigned int cellIdx) {
100 return cells[cellIdx];
104 inline unsigned int degreeOfVertex(
const unsigned int vertexIdx) {
105 return verticesDegree[vertexIdx];
109 std::vector<Edge> voronoiEdgesForSite(
const unsigned int siteIdx) {
110 auto &site = siteToCellEdges[siteIdx];
111 std::vector<Edge> ret(site.size());
113 for (
size_t i = 0; i < siteToCellEdges[siteIdx].size(); ++i) {
114 ret.push_back(edges[siteToCellEdges[siteIdx][i]]);
121 inline const Cell &voronoiCellForSite(
const unsigned int siteIdx) {
122 return cells[siteToCell[siteIdx]];
126 std::vector<Site> sites;
127 std::vector<Vertex> vertices;
128 std::vector<Edge> edges;
129 std::vector<Cell> cells;
130 tlp_hash_map<unsigned int, std::vector<unsigned int>> siteToCellEdges;
131 tlp_hash_map<unsigned int, unsigned int> siteToCell;
132 tlp_hash_map<unsigned int, unsigned int> verticesDegree;
144 TLP_SCOPE
bool voronoiDiagram(std::vector<Coord> &sites, VoronoiDiagram &voronoiDiagram);