Skip to content

Commit 65840ea

Browse files
committed
Aesthetic changes to triangulation
1 parent ba9bf66 commit 65840ea

2 files changed

Lines changed: 18 additions & 15 deletions

File tree

include/kigumi/Corefine.h

Lines changed: 14 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515

1616
#include <algorithm>
1717
#include <boost/container/static_vector.hpp>
18+
#include <boost/iterator/function_output_iterator.hpp>
1819
#include <boost/range/iterator_range.hpp>
1920
#include <boost/unordered/unordered_flat_map.hpp>
2021
#include <functional>
@@ -251,7 +252,11 @@ class Corefine {
251252
const std::vector<std::size_t>& point_ids, OutputIterator faces) const {
252253
auto it = triangulations.find(fi);
253254
if (it != triangulations.end()) {
254-
return it->second.value().get_faces(faces);
255+
return it->second.value().get_faces(
256+
boost::make_function_output_iterator([&](const auto& face) {
257+
auto [a, b, c] = face;
258+
*faces++ = {Vertex_index{a}, Vertex_index{b}, Vertex_index{c}};
259+
}));
255260
}
256261

257262
const auto& f = soup.face(fi);
@@ -263,23 +268,22 @@ class Corefine {
263268
}
264269

265270
void insert_intersection(Triangulation& triangulation, const Intersection_info& info) {
266-
typename Triangulation::Vertex_handle null_vh;
267-
auto first = null_vh;
268-
auto prev = null_vh;
271+
using Vertex_handle = typename Triangulation::Vertex_handle;
272+
Vertex_handle first;
273+
Vertex_handle last;
269274
for (std::size_t i = 0; i < info.intersections.size(); ++i) {
270275
auto id = info.intersections.at(i);
271276
auto sym = info.symbolic_intersections.at(i);
272277
auto cur = triangulation.insert(id, sym);
273-
if (prev != null_vh) {
274-
triangulation.insert_constraint(prev, cur);
275-
}
276-
if (first == null_vh) {
278+
if (i == 0) {
277279
first = cur;
280+
} else {
281+
triangulation.insert_constraint(last, cur);
278282
}
279-
prev = cur;
283+
last = cur;
280284
}
281285
if (info.intersections.size() > 2) {
282-
triangulation.insert_constraint(prev, first);
286+
triangulation.insert_constraint(last, first);
283287
}
284288
}
285289

include/kigumi/Triangulation.h

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@
44
#include <CGAL/Kernel/global_functions.h>
55
#include <CGAL/Projection_traits_3.h>
66
#include <CGAL/Triangulation_vertex_base_with_info_2.h>
7-
#include <kigumi/Mesh_indices.h>
87
#include <kigumi/Point_list.h>
98
#include <kigumi/Triangle_region.h>
109

@@ -45,10 +44,10 @@ class Triangulation {
4544
std::size_t get_faces(OutputIterator faces) const {
4645
std::size_t count{};
4746
for (auto it = cdt_.finite_faces_begin(); it != cdt_.finite_faces_end(); ++it) {
48-
auto a = Vertex_index{it->vertex(0)->info()};
49-
auto b = Vertex_index{it->vertex(1)->info()};
50-
auto c = Vertex_index{it->vertex(2)->info()};
51-
*faces++ = {a, b, c};
47+
auto a = it->vertex(0)->info();
48+
auto b = it->vertex(1)->info();
49+
auto c = it->vertex(2)->info();
50+
*faces++ = std::array<std::size_t, 3>{a, b, c};
5251
++count;
5352
}
5453
return count;

0 commit comments

Comments
 (0)