File distance_diagnoser_feature.h
File List > core > distance_diagnoser_feature.h
Go to the documentation of this file
#pragma once
#include <uipc/core/feature.h>
#include <uipc/geometry/geometry.h>
#include <uipc/geometry/simplicial_complex.h>
namespace uipc::core
{
class UIPC_CORE_API DistanceDiagnoserFeatureOverrider
{
public:
virtual ~DistanceDiagnoserFeatureOverrider() = default;
virtual void do_compute_point_triangle_distance(
geometry::Geometry& R,
const geometry::SimplicialComplex& points,
const geometry::SimplicialComplex& triangles) = 0;
virtual void do_compute_edge_edge_distance(
geometry::Geometry& R,
const geometry::SimplicialComplex& edges_a,
const geometry::SimplicialComplex& edges_b,
const geometry::SimplicialComplex& rest_edges_a,
const geometry::SimplicialComplex& rest_edges_b) = 0;
virtual void do_compute_point_edge_distance(
geometry::Geometry& R,
const geometry::SimplicialComplex& points,
const geometry::SimplicialComplex& edges) = 0;
virtual void do_compute_point_point_distance(
geometry::Geometry& R,
const geometry::SimplicialComplex& points_a,
const geometry::SimplicialComplex& points_b) = 0;
};
class UIPC_CORE_API DistanceDiagnoserFeature final : public Feature
{
public:
constexpr static std::string_view FeatureName = "core/distance_diagnoser";
DistanceDiagnoserFeature(S<DistanceDiagnoserFeatureOverrider> overrider);
void compute_point_triangle_distance(
geometry::Geometry& R,
const geometry::SimplicialComplex& points,
const geometry::SimplicialComplex& triangles);
void compute_edge_edge_distance(
geometry::Geometry& R,
const geometry::SimplicialComplex& edges_a,
const geometry::SimplicialComplex& edges_b,
const geometry::SimplicialComplex& rest_edges_a,
const geometry::SimplicialComplex& rest_edges_b);
void compute_point_edge_distance(
geometry::Geometry& R,
const geometry::SimplicialComplex& points,
const geometry::SimplicialComplex& edges);
void compute_point_point_distance(
geometry::Geometry& R,
const geometry::SimplicialComplex& points_a,
const geometry::SimplicialComplex& points_b);
private:
virtual std::string_view get_name() const override;
S<DistanceDiagnoserFeatureOverrider> m_impl;
};
} // namespace uipc::core