summaryrefslogtreecommitdiff
path: root/game/geoDataMesh.h
diff options
context:
space:
mode:
Diffstat (limited to 'game/geoDataMesh.h')
-rw-r--r--game/geoDataMesh.h31
1 files changed, 30 insertions, 1 deletions
diff --git a/game/geoDataMesh.h b/game/geoDataMesh.h
index 00db67c..5d0bade 100644
--- a/game/geoDataMesh.h
+++ b/game/geoDataMesh.h
@@ -1,7 +1,6 @@
#pragma once
#include "config/types.h"
-#include "ray.h"
#include "triangle.h"
#include <OpenMesh/Core/Mesh/TriMesh_ArrayKernelT.hh>
#include <source_location>
@@ -61,6 +60,36 @@ protected:
[[nodiscard]] HalfEdgePoints points(HalfEdgeVertices) const;
template<glm::length_t D>
+ [[nodiscard]] auto
+ vertexDistanceFunction(GlobalPosition<D> point) const
+ {
+ struct DistanceCalculator {
+ [[nodiscard]] std::pair<VertexHandle, float>
+ operator()(VertexHandle compVertex) const
+ {
+ return std::make_pair(
+ compVertex, ::distance<D, GlobalDistance, glm::defaultp>(point, mesh->point(compVertex)));
+ }
+
+ [[nodiscard]]
+ std::pair<HalfedgeHandle, float>
+ operator()(const HalfedgeHandle compHalfedge) const
+ {
+ const auto edgePoints = mesh->points(mesh->toVertexHandles(compHalfedge));
+ return std::make_pair(compHalfedge, Triangle<2> {edgePoints.second, edgePoints.first, point}.height());
+ };
+
+ const GeoDataMesh * mesh;
+ GlobalPosition<D> point;
+ };
+
+ return DistanceCalculator {this, point};
+ }
+
+ [[nodiscard]] bool canFlip(HalfedgeHandle edge) const;
+ [[nodiscard]] std::optional<EdgeHandle> shouldFlip(HalfedgeHandle next, GlobalPosition2D startPoint) const;
+
+ template<glm::length_t D>
[[nodiscard]] RelativeDistance
length(HalfedgeHandle heh) const
{