565 {
566
567 auto cell_data_range =
grid.cell_data_range(iy, ix);
569 const double v1_sqr_norm = v1.squaredNorm();
571 for (auto it_contour_and_segment = cell_data_range.first; it_contour_and_segment != cell_data_range.second; ++it_contour_and_segment) {
572 Line grid_line =
grid.line(*it_contour_and_segment);
573 const Vec2d v2 = grid_line.vector().cast<
double>();
574 double heuristic_thr_sqr =
Slic3r::sqr(heuristic_thr_part + grid_line.length());
575
576
577
578 if ((grid_line.a -
line_to_test.a).cast<
double>().squaredNorm() > heuristic_thr_sqr ||
579 (grid_line.b -
line_to_test.a).cast<
double>().squaredNorm() > heuristic_thr_sqr ||
580 (grid_line.a -
line_to_test.b).cast<
double>().squaredNorm() > heuristic_thr_sqr ||
581 (grid_line.b -
line_to_test.b).cast<
double>().squaredNorm() > heuristic_thr_sqr)
582 continue;
583
584
586
592 Line line_to_test_projected;
594
595 if ((line_to_test_projected.a - grid_line.a).cast<double>().squaredNorm() > (line_to_test_projected.b - grid_line.a).cast<double>().squaredNorm())
596 line_to_test_projected.reverse();
597
599 {
601 painted_lines.push_back({it_contour_and_segment->first, it_contour_and_segment->second, line_to_test_projected, this->
color});
602 }
603 }
604 }
605 }
606 }
607
608 return true;
609 }
static bool project_line_on_line(const Line &projection_l, const Line &projected_l, Line *new_projected)
Definition MultiMaterialSegmentation.cpp:524
constexpr T sqr(T x)
Definition libslic3r.h:301
Eigen::Matrix< double, 2, 1, Eigen::DontAlign > Vec2d
Definition Point.hpp:67
@ lock
Definition GLGizmoEmboss.cpp:209
static const double append_threshold2
Definition MultiMaterialSegmentation.cpp:620
static const double append_threshold
Definition MultiMaterialSegmentation.cpp:619
Line line_to_test
Definition MultiMaterialSegmentation.cpp:614
int color
Definition MultiMaterialSegmentation.cpp:616
static const double cos_threshold2
Definition MultiMaterialSegmentation.cpp:618