1#ifndef VCL_SPACE_COMPLEX_SAMPLER_VERTEX_SAMPLER_H
2#define VCL_SPACE_COMPLEX_SAMPLER_VERTEX_SAMPLER_H
4#include <vclib/concepts/mesh/elements/vertex.h>
5#include <vclib/concepts/space/sampler.h>
6#include <vclib/views/mesh.h>
14template<VertexConcept VertexType,
bool CNST = false>
17 using VP = std::conditional_t<CNST, const VertexType*, VertexType*>;
18 using VPar = std::conditional_t<CNST, const VertexType&, VertexType&>;
20 std::vector<VP> mSamples;
23 using PointType = VertexType::CoordType;
27 const std::vector<VP> samples()
const {
return mSamples; }
29 const typename VertexType::CoordType& sample(uint i)
const
31 return mSamples[i]->coord();
34 std::size_t size()
const {
return mSamples.size(); }
36 void clear() { mSamples.clear(); }
38 void reserve(uint n) { mSamples.reserve(n); }
40 void resize(uint n) { mSamples.resize(n); }
42 void add(VPar v) { mSamples.push_back(&v); }
44 void set(uint i, VPar v) { mSamples[i] = &v; }
46 auto begin()
const {
return std::begin(mSamples | views::coords); }
48 auto end()
const {
return std::end(mSamples | views::coords); }
53template<VertexConcept VertexType>
54using VertexSampler = detail::VertexSampler<VertexType, false>;
56template<VertexConcept VertexType>
57using ConstVertexSampler = detail::VertexSampler<VertexType, true>;