37 {
39 if (stop >= 0.0 && !source_normals)
41 if ((vertex - p).norm() <= stop) return {vertex, (vertex - p).norm()};
42 for (
size_t i = 0; i < c.
points.size(); ++i) {
45 const double length2 = d.squaredNorm();
46 if (source_normals) {
47 if (length2 <= 1e-18) continue;
49
50 if (std::none_of(source_normals->begin(), source_normals->end(), [&](
const Vec2d &n) {
51 return n.dot(normal) >= normal_cosine;
52 })) continue;
53 }
54 const double t = length2 > 0.0 ? std::clamp((p - a).
dot(d) / length2, 0.0, 1.0) : 0.0;
55 const Vec2d q = a + t * d;
56 const double distance = (q - p).norm();
57 if (distance < result.
distance) result = {q, distance};
59 }
60 return result;
61}
double distance
Definition SeamContour.cpp:17
std::vector< Vec2d > points
Definition SeamContour.hpp:15
bool hole
Definition SeamContour.hpp:16
Point normal(Point pt, double scale)
Definition TreeSupport.cpp:112
Eigen::Matrix< double, 2, 1, Eigen::DontAlign > Vec2d
Definition Point.hpp:67
T dot(const boost::geometry::model::d2::point_xy< T > &v1, const boost::geometry::model::d2::point_xy< T > &v2)
Definition ExtrusionSimulator.cpp:154