Skip to content

File UniformAreaSampler.h

File List > algos > mesh_to_pointcloud > UniformAreaSampler.h

Go to the documentation of this file

#pragma once

#include "ISurfaceSampler.h"
#include "mesh/Mesh.h"
#include "point_cloud/PointCloud.h"

namespace Argos {

    class UniformAreaSampler : public ISurfaceSampler
    {
    private:
        std::size_t m_pointCount; 
    public:
        explicit UniformAreaSampler(std::size_t pointCount): m_pointCount(pointCount) {}

        PointCloud sample(const Mesh& mesh) override;

        std::string name() const override {
            return "(UniformAreaSampler-pc" + std::to_string(m_pointCount) + ")";
        }

        double computeMeshSurfaceArea(const Mesh& mesh) const;

        std::vector<std::size_t> distributePointsOverFaces(
            const Mesh& mesh,
            double totalArea
        ) const;

        void sampleTriangleSurface(
            const Vector3D<double>& A,
            const Vector3D<double>& B,
            const Vector3D<double>& C,
            std::size_t pointCount,
            PointCloud& cloud
        ) const;

        void sampleFaceSurface(
            const Mesh& mesh,
            const Face& face,
            std::size_t pointCount,
            PointCloud& cloud
        ) const;
    };

} // namespace Argos