From 92ad22f65614a87cf8ccfab1d16ff682b9957c02 Mon Sep 17 00:00:00 2001 From: lisyarus Date: Mon, 19 Sep 2022 23:35:03 +0300 Subject: [PATCH] Add cg::fill_missing_faces that creates faces for edge loops without a connected face --- libs/cg/include/psemek/cg/dcel.hpp | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/libs/cg/include/psemek/cg/dcel.hpp b/libs/cg/include/psemek/cg/dcel.hpp index 8d87016d..a7ec1b95 100644 --- a/libs/cg/include/psemek/cg/dcel.hpp +++ b/libs/cg/include/psemek/cg/dcel.hpp @@ -587,6 +587,23 @@ namespace psemek::cg return result; } + template + void fill_missing_faces(dcel & dcel) + { + for (Index i = 0; i < dcel.edges.size(); ++i) + { + if (dcel.edges[i].face != dcel.null) continue; + + auto e = dcel.edge(i); + auto f = dcel.push_face(); + f.edge(e); + e.face(f); + + for (e = e.next(); e.index() != i; e = e.next()) + e.face(f); + } + } + template auto polygon_dcel(Iterator begin, Iterator end) {