3333
3434#include < geode/geometry/aabb.hpp>
3535#include < geode/geometry/basic_objects/segment.hpp>
36+ #include < geode/geometry/coordinate_system.hpp>
3637#include < geode/geometry/distance.hpp>
3738#include < geode/geometry/point.hpp>
3839#include < geode/geometry/projection.hpp>
@@ -65,6 +66,20 @@ namespace geode
6566 return point_segment_distance ( query, segment );
6667 }
6768
69+ template < index_t dimension >
70+ double AnisotropicDistanceToEdge< dimension >::operator ()(
71+ const Point< dimension >& query, index_t cur_box ) const
72+ {
73+ const auto segment = mesh_.segment ( cur_box );
74+ const auto vertices = segment.vertices ();
75+ const auto point0 = coordinate_system_.coordinates ( vertices[0 ].get () );
76+ const auto point1 = coordinate_system_.coordinates ( vertices[1 ].get () );
77+ const auto query_in_metric_space =
78+ coordinate_system_.coordinates ( query );
79+ geode::Segment< dimension > segment_in_metric_space{ point0, point1 };
80+ return point_segment_distance ( query_in_metric_space, segment );
81+ }
82+
6883 template opengeode_mesh_api AABBTree1D create_aabb_tree< 1 >(
6984 const EdgedCurve1D& );
7085 template opengeode_mesh_api AABBTree2D create_aabb_tree< 2 >(
@@ -75,4 +90,7 @@ namespace geode
7590 template class opengeode_mesh_api DistanceToEdge< 1 >;
7691 template class opengeode_mesh_api DistanceToEdge< 2 >;
7792 template class opengeode_mesh_api DistanceToEdge< 3 >;
93+
94+ template class opengeode_mesh_api AnisotropicDistanceToEdge< 2 >;
95+ template class opengeode_mesh_api AnisotropicDistanceToEdge< 3 >;
7896} // namespace geode
0 commit comments