Prusa Slicer 2.6.0
Loading...
Searching...
No Matches
Slic3r::MinDistanceVisitor Struct Reference
+ Collaboration diagram for Slic3r::MinDistanceVisitor:

Public Member Functions

 MinDistanceVisitor (const EdgeGrid::Grid &grid, const Point &center, double max_distance_squared)
 
void init ()
 
bool operator() (coord_t iy, coord_t ix)
 

Public Attributes

const EdgeGrid::Gridgrid
 
const Slic3r::Point center
 
std::vector< ClosestLineclosest_lines
 
std::unordered_set< std::pair< size_t, size_t >, boost::hash< std::pair< size_t, size_t > > > closest_lines_set
 
double max_distance_squared = std::numeric_limits<double>::max()
 

Detailed Description

Constructor & Destructor Documentation

◆ MinDistanceVisitor()

Slic3r::MinDistanceVisitor::MinDistanceVisitor ( const EdgeGrid::Grid grid,
const Point center,
double  max_distance_squared 
)
inlineexplicit
128 {}
const EdgeGrid::Grid & grid
Definition AvoidCrossingPerimeters.cpp:154
double max_distance_squared
Definition AvoidCrossingPerimeters.cpp:158
const Slic3r::Point center
Definition AvoidCrossingPerimeters.cpp:155

Member Function Documentation

◆ init()

void Slic3r::MinDistanceVisitor::init ( )
inline
131 {
132 this->closest_lines.clear();
133 this->closest_lines_set.clear();
134 }
std::unordered_set< std::pair< size_t, size_t >, boost::hash< std::pair< size_t, size_t > > > closest_lines_set
Definition AvoidCrossingPerimeters.cpp:157
std::vector< ClosestLine > closest_lines
Definition AvoidCrossingPerimeters.cpp:156

References closest_lines, and closest_lines_set.

◆ operator()()

bool Slic3r::MinDistanceVisitor::operator() ( coord_t  iy,
coord_t  ix 
)
inline
137 {
138 // Called with a row and column of the grid cell, which is inside a bounding box.
139 auto cell_data_range = grid.cell_data_range(iy, ix);
140 for (auto it_contour_and_segment = cell_data_range.first; it_contour_and_segment != cell_data_range.second; ++it_contour_and_segment) {
141 // End points of the line segment and their vector.
142 auto segment = grid.segment(*it_contour_and_segment);
143 Point closest_point;
144 if (closest_lines_set.find(*it_contour_and_segment) == closest_lines_set.end() &&
145 line_alg::distance_to_squared(Line(segment.first, segment.second), center, &closest_point) <= this->max_distance_squared) {
146 closest_lines.push_back({it_contour_and_segment->first, it_contour_and_segment->second, closest_point});
147 closest_lines_set.insert(*it_contour_and_segment);
148 }
149 }
150 // Continue traversing the grid along the edge.
151 return true;
152 }
EIGEN_DEVICE_FUNC SegmentReturnType segment(Index start, Index n)
This is the const version of segment(Index,Index).
Definition BlockMethods.h:888
std::pair< const Slic3r::Point &, const Slic3r::Point & > segment(const std::pair< size_t, size_t > &contour_and_segment_idx) const
Definition EdgeGrid.hpp:344
std::pair< std::vector< std::pair< size_t, size_t > >::const_iterator, std::vector< std::pair< size_t, size_t > >::const_iterator > cell_data_range(coord_t row, coord_t col) const
Definition EdgeGrid.hpp:336
double distance_to_squared(const L &line, const Vec< Dim< L >, Scalar< L > > &point, Vec< Dim< L >, Scalar< L > > *nearest_point)
Definition Line.hpp:43
Kernel::Point_2 Point
Definition point_areas.cpp:20

References Slic3r::EdgeGrid::Grid::cell_data_range(), center, closest_lines, closest_lines_set, Slic3r::line_alg::distance_to_squared(), grid, max_distance_squared, Slic3r::EdgeGrid::Grid::segment(), and segment().

+ Here is the call graph for this function:

Member Data Documentation

◆ center

const Slic3r::Point Slic3r::MinDistanceVisitor::center

Referenced by operator()().

◆ closest_lines

std::vector<ClosestLine> Slic3r::MinDistanceVisitor::closest_lines

◆ closest_lines_set

std::unordered_set<std::pair<size_t, size_t>, boost::hash<std::pair<size_t, size_t> > > Slic3r::MinDistanceVisitor::closest_lines_set

Referenced by init(), and operator()().

◆ grid

const EdgeGrid::Grid& Slic3r::MinDistanceVisitor::grid

Referenced by operator()().

◆ max_distance_squared

double Slic3r::MinDistanceVisitor::max_distance_squared = std::numeric_limits<double>::max()

Referenced by operator()().


The documentation for this struct was generated from the following file: