Program Listing for File ridge_group.h
↰ Return to documentation for file (src/ridge_impl/ridge_group.h)
#pragma once
#include <functional> // for function
#include <map> // for map
#include <memory> // for unique_ptr
#include <optional> // for optional
#include <utility> // for move, pair
#include <vector> // for vector
#include "ridge_impl/ridge_mesh.h"
#include "ridge_impl/ridge_set.h" // for RidgeSet
namespace sota {
class RidgeMesh;
using GroupOfRidgeMeshes = std::vector<RidgeMesh*>;
using BiomeGroups = std::vector<GroupOfRidgeMeshes>;
class RidgeGroup {
public:
RidgeGroup(GroupOfRidgeMeshes meshes, std::unique_ptr<RidgeSet> ridge_set)
: _meshes(meshes), _ridge_set(std::move(ridge_set)) {}
RidgeGroup(GroupOfRidgeMeshes meshes) : _meshes(meshes), _ridge_set({}) {}
RidgeGroup() = default;
RidgeGroup(const RidgeGroup& other) = delete;
RidgeGroup(RidgeGroup&& other) = default;
RidgeGroup& operator=(const RidgeGroup& other) = delete;
RidgeGroup& operator=(RidgeGroup&& other) = default;
// getters
const GroupOfRidgeMeshes& meshes();
void fmap(std::function<void(const GroupOfRidgeMeshes&)> func);
void init_ridges(DiscreteVertexToDistance& distance_map, float offset, int divisions);
private:
GroupOfRidgeMeshes _meshes;
std::optional<std::unique_ptr<RidgeSet>> _ridge_set{};
void assign_ridges();
void calculate_corner_points_distances_to_border(DiscreteVertexToDistance& distance_map, int divisions);
};
} // namespace sota