diff options
author | Dan Goodliffe <dan@randomdan.homeip.net> | 2025-02-14 02:31:34 +0000 |
---|---|---|
committer | Dan Goodliffe <dan@randomdan.homeip.net> | 2025-02-14 02:31:34 +0000 |
commit | ae0d124dc1e0476d6729d5073e0ab438521cf4ff (patch) | |
tree | 52ec55cfc30c14e3fb96596aa3cfdc3efe993015 /thirdparty | |
parent | Move basic setHeights lambdas into proper helper functions (diff) | |
download | ilt-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.h | 31 |
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)...); + } + }; + } } |