13#define ANONYMOUS anonymous
17static const double a = (1.0 + std::sqrt(5.0)) / 2.0;
19static const std::array<gml::dvec3, 20> vertices{
20 {{1.0, 1.0, -1.0}, {-1.0, 1.0, -1.0}, {1.0, -1.0, -1.0}, {-1.0, -1.0, -1.0},
21 {1.0, 1.0, 1.0}, {-1.0, 1.0, 1.0}, {1.0, -1.0, 1.0}, {-1.0, -1.0, 1.0},
23 {0.0, 1.0 /
a, -
a}, {0.0, -1.0 /
a, -
a}, {0.0, 1.0 /
a,
a}, {0.0, -1.0 /
a,
a},
25 {1.0 /
a,
a, 0.0}, {-1.0 /
a,
a, 0.0}, {1.0 /
a, -
a, 0.0}, {-1.0 /
a, -
a, 0.0},
27 {
a, 0.0, -1.0 /
a}, {-
a, 0.0, -1.0 /
a}, {
a, 0.0, 1.0 /
a}, {-
a, 0.0, 1.0 /
a}}};
29static const std::array<std::array<int, 5>, 12> polygons{{
46static std::vector<gml::dvec3> makevertices_t(
int faceIndex)
noexcept
48 std::vector<gml::dvec3> result(5);
49 for(
int i = 0;
i < 5; ++
i)
51 result.at(i) = gml::normalize(ANONYMOUS::vertices.at(ANONYMOUS::polygons.at(faceIndex)[i]));
59 , face_mesh_{std::make_shared<convex_polygon_mesh_t>(makevertices_t(0), mesh_->segments_, mesh_->rings_)}
60 , triangles_{face_mesh_->triangles()}
66 return face_index_ == ANONYMOUS::polygons.size();
72 throw std::out_of_range(
"Done!");
76 const int base = face_index_ * mesh_->face_vertex_count_;
88 throw std::out_of_range(
"Done!");
98 face_mesh_ = std::make_shared<convex_polygon_mesh_t>(makevertices_t(face_index_), mesh_->segments_);
100 triangles_ = face_mesh_->triangles();
108 , face_mesh_{std::make_shared<convex_polygon_mesh_t>(makevertices_t(0), mesh_->segments_, mesh_->rings_)}
109 , vertices_{face_mesh_->vertices()}
115 return face_index_ == ANONYMOUS::polygons.size();
138 std::make_shared<convex_polygon_mesh_t>(makevertices_t(face_index_), mesh_->segments_, mesh_->rings_);
140 vertices_ = face_mesh_->vertices();
vertices_t vertices() const noexcept
triangle_t generate() const
bool done() const noexcept
mesh_vertex_t generate() const
bool done() const noexcept
triangles_t triangles() const noexcept
vertices_t vertices() const noexcept
dodecahedron_mesh_t(double radius=1.0, int segments=1, int rings=1) noexcept
gml::ivec3 vertices
Zero based indices of the triangle vertices in counterclockwise order.
int count(const generator_t &generator) noexcept
Counts the number of steps left in the generator.
const segment_list * segments