summaryrefslogtreecommitdiff
path: root/thirdparty/openmesh/helpers.h
blob: d148c063983742a3781c3ff9d815f18dea7f9b6c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#pragma once
#include <OpenMesh/Core/Mesh/BaseKernel.hh>
#include <OpenMesh/Core/Mesh/PolyConnectivity.hh>
#include <ranges>

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)...);
			}
		};
	}
}