145{
146 struct Visitor {
148
149 auto cell_data_range = grid.cell_data_range(iy, ix);
150 for (auto it_contour_and_segment = cell_data_range.first; it_contour_and_segment != cell_data_range.second; ++it_contour_and_segment) {
151
152 auto segment = grid.segment(*it_contour_and_segment);
153 if (
Vec2d ip; Geometry::segment_segment_intersection(
segment.first.cast<
double>(),
segment.second.cast<
double>(), this->line_a, this->line_b, ip))
154 if (double d = (this->intersection_pt - this->line_b).squaredNorm(); d < d2min) {
155 this->d2min = d;
156 this->intersection_pt = ip;
157 }
158 }
159
160 return true;
161 }
162
163 const EdgeGrid::Grid&
grid;
166 Vec2d intersection_pt;
167 double d2min { std::numeric_limits<double>::max() };
168 } visitor { outline_locator,
a.cast<
double>(),
b.cast<
double>() };
169
171 if (visitor.d2min < double(within_max_dist) * double(within_max_dist)) {
172 result =
Point(visitor.intersection_pt);
173 return true;
174 }
175 return false;
176}
EIGEN_DEVICE_FUNC SegmentReturnType segment(Index start, Index n)
This is the const version of segment(Index,Index).
Definition BlockMethods.h:888
void visit_cells_intersecting_line(Slic3r::Point p1, Slic3r::Point p2, VISITOR &visitor) const
Definition EdgeGrid.hpp:172
int32_t coord_t
Definition libslic3r.h:39
Eigen::Matrix< double, 2, 1, Eigen::DontAlign > Vec2d
Definition Point.hpp:51
IGL_INLINE void grid(const Eigen::MatrixBase< Derivedres > &res, Eigen::PlainObjectBase< DerivedGV > &GV)
Definition grid.cpp:13
Kernel::Point_2 Point
Definition point_areas.cpp:20