-
Notifications
You must be signed in to change notification settings - Fork 6
/
generate_alpha_shape.cpp
62 lines (51 loc) · 1.32 KB
/
generate_alpha_shape.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
#include <vector>
#include <array>
#include <string>
#include <fstream>
#include <iostream>
#include <diode/diode.h>
struct Points
{
float operator()(unsigned i, unsigned j) const { return points[i][j]; }
size_t size() const { return points.size(); }
std::vector<std::array<float, 3>> points;
};
struct OutputSimplex
{
template<unsigned long D>
void operator()(const std::array<unsigned, D>& vertices, float alpha) const
{
for (unsigned i = 0; i < D; ++i)
std::cout << vertices[i] << ' ';
std::cout << alpha << std::endl;
}
};
Points read_points(std::string fn)
{
Points result;
std::ifstream in(fn);
while (in)
{
std::string line;
std::getline(in, line);
if (line[0] == '#') continue;
std::istringstream iss(line);
float x,y,z;
iss >> x >> y >> z;
std::array<float, 3> p {x,y,z};
result.points.emplace_back(p);
}
return result;
}
int main(int argc, char** argv)
{
if (argc < 2)
{
std::cout << "Usage: " << argv[0] << " points" << std::endl;
return 1;
}
// read points
Points points = read_points(argv[1]);
// generate the alpha shape
diode::AlphaShapes<>::fill_alpha_shapes(points, OutputSimplex());
}