summaryrefslogtreecommitdiff
path: root/thirdparty
diff options
context:
space:
mode:
authorDan Goodliffe <dan@randomdan.homeip.net>2025-02-14 02:31:34 +0000
committerDan Goodliffe <dan@randomdan.homeip.net>2025-02-14 02:31:34 +0000
commitae0d124dc1e0476d6729d5073e0ab438521cf4ff (patch)
tree52ec55cfc30c14e3fb96596aa3cfdc3efe993015 /thirdparty
parentMove basic setHeights lambdas into proper helper functions (diff)
downloadilt-ae0d124dc1e0476d6729d5073e0ab438521cf4ff.tar.bz2
ilt-ae0d124dc1e0476d6729d5073e0ab438521cf4ff.tar.xz
ilt-ae0d124dc1e0476d6729d5073e0ab438521cf4ff.zip
Add operator| overload to make OpenMesh XY_range(...) work with std::ranges
Wraps the OpenMesh with iota and forwards the adapter
Diffstat (limited to 'thirdparty')
-rw-r--r--thirdparty/openmesh/helpers.h31
1 files changed, 24 insertions, 7 deletions
diff --git a/thirdparty/openmesh/helpers.h b/thirdparty/openmesh/helpers.h
index bed885c..d148c06 100644
--- a/thirdparty/openmesh/helpers.h
+++ b/thirdparty/openmesh/helpers.h
@@ -1,11 +1,28 @@
#pragma once
#include <OpenMesh/Core/Mesh/BaseKernel.hh>
+#include <OpenMesh/Core/Mesh/PolyConnectivity.hh>
+#include <ranges>
-namespace OpenMesh::Helpers {
- template<typename Type, template<typename> typename PropertyT> struct Property : public PropertyT<Type> {
- template<typename... Params> explicit Property(OpenMesh::BaseKernel * kernel, Params &&... params)
- {
- kernel->add_property(*this, std::forward<Params>(params)...);
- }
- };
+namespace OpenMesh {
+ template<typename Iter, typename CenterEntityHandle>
+ using IteratorFunction = Iter (OpenMesh::PolyConnectivity::*)(CenterEntityHandle) const;
+
+ template<typename Iter, typename CenterEntityHandle, IteratorFunction<Iter, CenterEntityHandle> BeginFunc,
+ IteratorFunction<Iter, CenterEntityHandle> EndFunc, typename Adaptor>
+ auto
+ operator|(const OpenMesh::PolyConnectivity::CirculatorRange<OpenMesh::PolyConnectivity, Iter, CenterEntityHandle,
+ BeginFunc, EndFunc> & range,
+ Adaptor && adaptor)
+ {
+ return std::views::iota(range.begin(), range.end()) | std::forward<Adaptor>(adaptor);
+ }
+
+ namespace Helpers {
+ template<typename Type, template<typename> typename PropertyT> struct Property : public PropertyT<Type> {
+ template<typename... Params> explicit Property(OpenMesh::BaseKernel * kernel, Params &&... params)
+ {
+ kernel->add_property(*this, std::forward<Params>(params)...);
+ }
+ };
+ }
}