OrcaSlicer latest
OrcaSlicer
Loading...
Searching...
No Matches
Slic3r::Voronoi::detail Namespace Reference

Classes

struct  Intersections

Functions

double first_circle_segment_intersection_parameter (const Vec2d &center, const double r, const Vec2d &pt, const Vec2d &v)
Intersections point_point_equal_distance_points (const Point &pt1, const Point &pt2, const double d)
Intersections line_point_equal_distance_points (const Line &line, const Point &ipt, const double d)
template<typename VertexType>
bool vertex_equal_to_point (const VertexType &vertex, const Point &ipt)
bool vertex_equal_to_point (const VD::vertex_type *vertex, const Point &ipt)
double dist_to_site (const Lines &lines, const VD::cell_type &cell, const Vec2d &point)
bool on_site (const Lines &lines, const VD::cell_type &cell, const Vec2d &pt)
std::pair< Vec2d, Vec2d > point_point_dr_dl_thresholds (const Point &pt1_site, const Point &pt2_site, const Vec2d &voronoi_point1, const Vec2d &voronoi_point2, const double threshold_tan_alpha_half)
std::pair< Vec2d, Vec2d > point_segment_dr_dl_thresholds (const Point &pt_site, const Line &line_site, const Vec2d &voronoi_point1, const Vec2d &voronoi_point2, const double threshold_tan_alpha_half)
std::pair< Vec2d, Vec2d > point_point_skeleton_thresholds (const Point &pt1_site, const Point &pt2_site, const Vec2d &voronoi_point1, const Vec2d &voronoi_point2, const double tan_alpha_half)
std::pair< Vec2d, Vec2d > point_segment_skeleton_thresholds (const Point &pt_site, const Line &line_site, const Vec2d &voronoi_point1, const Vec2d &voronoi_point2, const double threshold_cos_alpha)

Class Documentation

◆ Slic3r::Voronoi::detail::Intersections

struct Slic3r::Voronoi::detail::Intersections
Class Members
int count
Vec2d pts[2]

Function Documentation

◆ dist_to_site()

double Slic3r::Voronoi::detail::dist_to_site ( const Lines & lines,
const VD::cell_type & cell,
const Vec2d & point )
239 {
240 const Line &line = lines[cell.source_index()];
241 return cell.contains_point() ?
242 (((cell.source_category() == boost::polygon::SOURCE_CATEGORY_SEGMENT_START_POINT) ? line.a : line.b).cast<double>() - point).norm() :
243 (Geometry::foot_pt<Vec2d>(line.a.cast<double>(), (line.b - line.a).cast<double>(), point) - point).norm();
244 };
Definition Line.hpp:156
Point b
Definition Line.hpp:199
Point a
Definition Line.hpp:198
T foot_pt(const T &line_pt, const T &line_dir, const T &pt)
Definition Geometry.hpp:186

References Slic3r::Line::a, Slic3r::Line::b, and Slic3r::Geometry::foot_pt().

Referenced by Slic3r::Voronoi::edge_offset_contour_intersections(), Slic3r::Voronoi::offset(), Slic3r::Voronoi::debug::verify_offset_intersection_points(), and Slic3r::Voronoi::debug::verify_signed_distances().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ first_circle_segment_intersection_parameter()

double Slic3r::Voronoi::detail::first_circle_segment_intersection_parameter ( const Vec2d & center,
const double r,
const Vec2d & pt,
const Vec2d & v )
35 {
36 const Vec2d d = pt - center;
37#ifndef NDEBUG
38 // Start point should be inside, end point should be outside the circle.
39 double d0 = (pt - center).norm();
40 double d1 = (pt + v - center).norm();
41 assert(d0 < r + SCALED_EPSILON);
42 assert(d1 > r - SCALED_EPSILON);
43#endif /* NDEBUG */
44 const double a = v.squaredNorm();
45 const double b = 2. * d.dot(v);
46 const double c = d.squaredNorm() - r * r;
47 std::pair<int, std::array<double, 2>> out;
48 double u = b * b - 4. * a * c;
49 assert(u > - EPSILON);
50 double t;
51 if (u <= 0) {
52 // Degenerate to a single closest point.
53 t = - b / (2. * a);
54 assert(t >= - EPSILON && t <= 1. + EPSILON);
55 return std::clamp(t, 0., 1.);
56 } else {
57 u = sqrt(u);
58 out.first = 2;
59 double t0 = (- b - u) / (2. * a);
60 double t1 = (- b + u) / (2. * a);
61 // One of the intersections shall be found inside the segment.
62 assert((t0 >= - EPSILON && t0 <= 1. + EPSILON) || (t1 >= - EPSILON && t1 <= 1. + EPSILON));
63 if (t1 < 0.)
64 return 0.;
65 if (t0 > 1.)
66 return 1.;
67 return (t0 > 0.) ? t0 : t1;
68 }
69 }
#define EPSILON
Definition ColorUtils.cpp:64
#define SCALED_EPSILON
Definition libslic3r.h:109
void center(ExPolygonsWithIds &e)
Definition Emboss.cpp:1382
Eigen::Matrix< double, 2, 1, Eigen::DontAlign > Vec2d
Definition Point.hpp:67

References Slic3r::center(), EPSILON, and SCALED_EPSILON.

Referenced by Slic3r::Voronoi::edge_offset_contour_intersections().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ line_point_equal_distance_points()

Intersections Slic3r::Voronoi::detail::line_point_equal_distance_points ( const Line & line,
const Point & ipt,
const double d )
130 {
131 assert(line.a != ipt && line.b != ipt);
132 // Calculating two points of distance "d" to a ray and a point.
133 // Point.
134 Vec2d pt = ipt.cast<double>();
135 Vec2d lv = (line.b - line.a).cast<double>();
136 double l2 = lv.squaredNorm();
137 Vec2d lpv = (line.a - ipt).cast<double>();
138 double c = cross2(lpv, lv);
139 if (c < 0) {
140 lv = - lv;
141 c = - c;
142 }
143
144 // Line equation (ax + by + c - d * sqrt(l2)).
145 auto a = - lv.y();
146 auto b = lv.x();
147 // Line point shifted by -ipt is on the line.
148 assert(std::abs(lpv.x() * a + lpv.y() * b + c) < SCALED_EPSILON);
149 // Line vector (a, b) points towards ipt.
150 assert(a * lpv.x() + b * lpv.y() < - SCALED_EPSILON);
151
152#ifndef NDEBUG
153 {
154 // Foot point of ipt on line.
155 Vec2d ft = Geometry::foot_pt(line, ipt);
156 // Center point between ipt and line, its distance to both line and ipt is equal.
157 Vec2d centerpt = 0.5 * (ft + pt) - pt;
158 double dcenter = 0.5 * (ft - pt).norm();
159 // Verify that the center point
160 assert(std::abs(centerpt.x() * a + centerpt.y() * b + c - dcenter * sqrt(l2)) < SCALED_EPSILON * sqrt(l2));
161 }
162#endif // NDEBUG
163
164 // Calculate the two intersection points.
165 // With the help of Python package sympy:
166 // res = solve([a * x + b * y + c - d * sqrt(a**2 + b**2), x**2 + y**2 - d**2], [x, y])
167 // ccode(cse((res[0][0], res[0][1], res[1][0], res[1][1])))
168 // where (a, b, c, d) is the line equation, not normalized (vector a,b is not normalized),
169 // d is distance from the line and the point (0, 0).
170 // The result is then shifted to ipt.
171
172 double dscaled = d * sqrt(l2);
173 double s = c * (2. * dscaled - c);
174 if (s < 0.)
175 // Distance of pt from line is bigger than 2 * d.
176 return Intersections { 0 };
177 double u;
178 int cnt;
179 // Avoid division by zero if a gets too small.
180 bool xy_swapped = std::abs(a) < std::abs(b);
181 if (xy_swapped)
182 std::swap(a, b);
183 if (s == 0.) {
184 // Distance of pt from line is 2 * d.
185 cnt = 1;
186 u = 0.;
187 } else {
188 // Distance of pt from line is smaller than 2 * d.
189 cnt = 2;
190 u = a * sqrt(s) / l2;
191 }
192 double e = dscaled - c;
193 double f = b * e / l2;
194 double g = f - u;
195 double h = f + u;
196 Intersections out { cnt, { Vec2d((- b * g + e) / a, g),
197 Vec2d((- b * h + e) / a, h) } };
198 if (xy_swapped) {
199 std::swap(out.pts[0].x(), out.pts[0].y());
200 std::swap(out.pts[1].x(), out.pts[1].y());
201 }
202 out.pts[0] += pt;
203 out.pts[1] += pt;
204
205 assert(std::abs(Geometry::ray_point_distance<Vec2d>(line.a.cast<double>(), (line.b - line.a).cast<double>(), out.pts[0]) - d) < SCALED_EPSILON);
206 assert(std::abs(Geometry::ray_point_distance<Vec2d>(line.a.cast<double>(), (line.b - line.a).cast<double>(), out.pts[1]) - d) < SCALED_EPSILON);
207 assert(std::abs((out.pts[0] - ipt.cast<double>()).norm() - d) < SCALED_EPSILON);
208 assert(std::abs((out.pts[1] - ipt.cast<double>()).norm() - d) < SCALED_EPSILON);
209 return out;
210 }
auto ray_point_distance(const T &ray_pt, const T &ray_dir, const T &pt)
Definition Geometry.hpp:204
Vec2d pts[2]
Definition VoronoiOffset.cpp:74
Definition VoronoiOffset.cpp:72
T l2(const boost::geometry::model::d2::point_xy< T > &v)
Definition ExtrusionSimulator.cpp:177
int32_t cross2(const Eigen::MatrixBase< Eigen::Matrix< int32_t, 2, 1, Options > > &v1, const Eigen::MatrixBase< Eigen::Matrix< int32_t, 2, 1, Options > > &v2)=delete
static double f(double x, double z_sin, double z_cos, bool vertical, bool flip)
Definition FillGyroid.cpp:124
auto cast(const BoundingBoxBase< Tin > &b)
Definition BoundingBox.hpp:299

References Slic3r::Line::a, Slic3r::Line::b, Slic3r::cast(), Slic3r::cross2(), Slic3r::f(), Slic3r::Geometry::foot_pt(), Slic3r::l2(), Slic3r::Voronoi::detail::Intersections::pts, Slic3r::Geometry::ray_point_distance(), and SCALED_EPSILON.

Referenced by Slic3r::Voronoi::edge_offset_contour_intersections().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ on_site()

bool Slic3r::Voronoi::detail::on_site ( const Lines & lines,
const VD::cell_type & cell,
const Vec2d & pt )
247 {
248 const Line &line = lines[cell.source_index()];
249 auto on_contour = [&pt](const Point &ipt) { return detail::vertex_equal_to_point(pt, ipt); };
250 if (cell.contains_point()) {
251 return on_contour(contour_point(cell, line));
252 } else {
253 assert(! (on_contour(line.a) && on_contour(line.b)));
254 return on_contour(line.a) || on_contour(line.b);
255 }
256 };
Definition Point.hpp:199
bool vertex_equal_to_point(const VertexType &vertex, const Point &ipt)
Definition VoronoiOffset.cpp:214
const Point & contour_point(const VD::cell_type &cell, const Line &line)
Definition VoronoiOffset.hpp:21

References Slic3r::Line::a, Slic3r::Line::b, Slic3r::Voronoi::contour_point(), and vertex_equal_to_point().

Referenced by Slic3r::Voronoi::annotate_inside_outside(), and Slic3r::Voronoi::debug::verify_vertices_on_contour().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ point_point_dr_dl_thresholds()

std::pair< Vec2d, Vec2d > Slic3r::Voronoi::detail::point_point_dr_dl_thresholds ( const Point & pt1_site,
const Point & pt2_site,
const Vec2d & voronoi_point1,
const Vec2d & voronoi_point2,
const double threshold_tan_alpha_half )
274 {
275 // sympy code to calculate +-x
276 // of a linear bisector of pt1_site, pt2_site parametrized with pt + x * v, |v| = 1
277 // where dr/dl = threshold_dr_dl
278 // equals d|pt1_site - pt + x * v| / dx = threshold_dr_dl
279 //
280 // y = sqrt(x^2 + d^2)
281 // dy = diff(y, x)
282 // solve(dy - c, x)
283 //
284 // Project voronoi_point1/2 to line_site.
285 Vec2d dir_y = (pt2_site - pt1_site).cast<double>();
286 Vec2d dir_x = Vec2d(- dir_y.y(), dir_y.x()).normalized();
287 Vec2d cntr = 0.5 * (pt1_site.cast<double>() + pt2_site.cast<double>());
288 double t1 = (voronoi_point1 - cntr).dot(dir_x);
289 double t2 = (voronoi_point2 - cntr).dot(dir_x);
290 if (t1 > t2) {
291 t1 = -t1;
292 t2 = -t2;
293 dir_x = - dir_x;
294 }
295 auto x = 0.5 * dir_y.norm() * threshold_tan_alpha_half;
296 static constexpr double nan = std::numeric_limits<double>::quiet_NaN();
297 auto out = std::make_pair(Vec2d(nan, nan), Vec2d(nan, nan));
298 if (t2 > -x && t1 < x) {
299 // Intervals overlap.
300 dir_x *= x;
301 out.first = (t1 < -x) ? cntr - dir_x : voronoi_point1;
302 out.second = (t2 > +x) ? cntr + dir_x : voronoi_point2;
303 }
304 return out;
305 }
T dot(const boost::geometry::model::d2::point_xy< T > &v1, const boost::geometry::model::d2::point_xy< T > &v2)
Definition ExtrusionSimulator.cpp:154

References Slic3r::cast(), and Slic3r::dot().

Referenced by Slic3r::Voronoi::skeleton_edges_rough().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ point_point_equal_distance_points()

Intersections Slic3r::Voronoi::detail::point_point_equal_distance_points ( const Point & pt1,
const Point & pt2,
const double d )
79 {
80 // Calculate the two intersection points.
81 // With the help of Python package sympy:
82 // res = solve([(x - cx)**2 + (y - cy)**2 - d**2, x**2 + y**2 - d**2], [x, y])
83 // ccode(cse((res[0][0], res[0][1], res[1][0], res[1][1])))
84 // where cx, cy is the center of pt1 relative to pt2,
85 // d is distance from the line and the point (0, 0).
86 // The result is then shifted to pt2.
87 auto cx = double(pt1.x() - pt2.x());
88 auto cy = double(pt1.y() - pt2.y());
89 double cl = cx * cx + cy * cy;
90 double discr = 4. * d * d - cl;
91 if (discr < 0.) {
92 // No intersection point found, the two circles are too far away.
93 return Intersections { 0, { Vec2d(), Vec2d() } };
94 }
95 // Avoid division by zero if a gets too small.
96 bool xy_swapped = std::abs(cx) < std::abs(cy);
97 if (xy_swapped)
98 std::swap(cx, cy);
99 double u;
100 int cnt;
101 if (discr == 0.) {
102 cnt = 1;
103 u = 0;
104 } else {
105 cnt = 2;
106 u = 0.5 * cx * sqrt(cl * discr) / cl;
107 }
108 double v = 0.5 * cy - u;
109 double w = 2. * cy;
110 double e = 0.5 / cx;
111 double f = 0.5 * cy + u;
112 Intersections out { cnt, { Vec2d(-e * (v * w - cl), v),
113 Vec2d(-e * (w * f - cl), f) } };
114 if (xy_swapped) {
115 std::swap(out.pts[0].x(), out.pts[0].y());
116 std::swap(out.pts[1].x(), out.pts[1].y());
117 }
118 out.pts[0] += pt2.cast<double>();
119 out.pts[1] += pt2.cast<double>();
120
121 assert(std::abs((out.pts[0] - pt1.cast<double>()).norm() - d) < SCALED_EPSILON);
122 assert(std::abs((out.pts[1] - pt1.cast<double>()).norm() - d) < SCALED_EPSILON);
123 assert(std::abs((out.pts[0] - pt2.cast<double>()).norm() - d) < SCALED_EPSILON);
124 assert(std::abs((out.pts[1] - pt2.cast<double>()).norm() - d) < SCALED_EPSILON);
125 return out;
126 }

References Slic3r::f(), Slic3r::Voronoi::detail::Intersections::pts, and SCALED_EPSILON.

Referenced by Slic3r::Voronoi::edge_offset_contour_intersections().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ point_point_skeleton_thresholds()

std::pair< Vec2d, Vec2d > Slic3r::Voronoi::detail::point_point_skeleton_thresholds ( const Point & pt1_site,
const Point & pt2_site,
const Vec2d & voronoi_point1,
const Vec2d & voronoi_point2,
const double tan_alpha_half )
379 {
380 // Project voronoi_point1/2 to line_site.
381 Vec2d dir_y = (pt2_site - pt1_site).cast<double>();
382 Vec2d dir_x = Vec2d(- dir_y.y(), dir_y.x()).normalized();
383 Vec2d cntr = 0.5 * (pt1_site.cast<double>() + pt2_site.cast<double>());
384 double t1 = (voronoi_point1 - cntr).dot(dir_x);
385 double t2 = (voronoi_point2 - cntr).dot(dir_x);
386 if (t1 > t2) {
387 t1 = -t1;
388 t2 = -t2;
389 dir_x = - dir_x;
390 }
391 auto x = 0.5 * dir_y.norm() * tan_alpha_half;
392 static constexpr double nan = std::numeric_limits<double>::quiet_NaN();
393 auto out = std::make_pair(Vec2d(nan, nan), Vec2d(nan, nan));
394 if (t2 > -x && t1 < x) {
395 // Intervals overlap.
396 dir_x *= x;
397 out.first = (t1 < -x) ? cntr - dir_x : voronoi_point1;
398 out.second = (t2 > +x) ? cntr + dir_x : voronoi_point2;
399 }
400 return out;
401 }

References Slic3r::cast(), and Slic3r::dot().

Here is the call graph for this function:

◆ point_segment_dr_dl_thresholds()

std::pair< Vec2d, Vec2d > Slic3r::Voronoi::detail::point_segment_dr_dl_thresholds ( const Point & pt_site,
const Line & line_site,
const Vec2d & voronoi_point1,
const Vec2d & voronoi_point2,
const double threshold_tan_alpha_half )
323 {
324 // sympy code to calculate +-x
325 // of a parabola y = ax^2 + b
326 // where dr/dl = threshold_dr_dl
327 //
328 // a = 1 / (4 * b)
329 // y = a*x**2 + b
330 // dy = diff(y, x)
331 // solve(dy / sqrt(1 + dy**2) - c, x)
332 //
333 // Foot point of the point site on the line site.
334 Vec2d ft = Geometry::foot_pt(line_site, pt_site);
335 // Minimum distance of the bisector (parabolic arc) from the two sites, squared.
336 Vec2d dir_pt_ft = pt_site.cast<double>() - ft;
337 double b = 0.5 * dir_pt_ft.norm();
338 static constexpr double nan = std::numeric_limits<double>::quiet_NaN();
339 auto out = std::make_pair(Vec2d(nan, nan), Vec2d(nan, nan));
340 {
341 // +x, -x are the two parameters along the line_site, where threshold_tan_alpha_half is met.
342 double x = 2. * b * threshold_tan_alpha_half;
343 // Project voronoi_point1/2 to line_site.
344 Vec2d dir_x = (line_site.b - line_site.a).cast<double>().normalized();
345 double t1 = (voronoi_point1 - ft).dot(dir_x);
346 double t2 = (voronoi_point2 - ft).dot(dir_x);
347 if (t1 > t2) {
348 t1 = -t1;
349 t2 = -t2;
350 dir_x = - dir_x;
351 }
352 if (t2 > -x && t1 < x) {
353 // Intervals overlap.
354 bool t1_valid = t1 < -x;
355 bool t2_valid = t2 > +x;
356 // Direction of the Y axis of the parabola.
357 Vec2d dir_y(- dir_x.y(), dir_x.x());
358 // Orient the Y axis towards the point site.
359 if (dir_y.dot(dir_pt_ft) < 0.)
360 dir_y = - dir_y;
361 // Equation of the parabola: y = b + a * x^2
362 double a = 0.25 / b;
363 dir_x *= x;
364 dir_y *= b + a * x * x;
365 out.first = t1_valid ? ft - dir_x + dir_y : voronoi_point1;
366 out.second = t2_valid ? ft + dir_x + dir_y : voronoi_point2;
367 }
368 }
369 return out;
370 }

References Slic3r::Line::a, Slic3r::Line::b, Slic3r::cast(), Slic3r::dot(), and Slic3r::Geometry::foot_pt().

Referenced by Slic3r::Voronoi::skeleton_edges_rough().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ point_segment_skeleton_thresholds()

std::pair< Vec2d, Vec2d > Slic3r::Voronoi::detail::point_segment_skeleton_thresholds ( const Point & pt_site,
const Line & line_site,
const Vec2d & voronoi_point1,
const Vec2d & voronoi_point2,
const double threshold_cos_alpha )
410 {
411 // Foot point of the point site on the line site.
412 Vec2d ft = Geometry::foot_pt(line_site, pt_site);
413 // Minimum distance of the bisector (parabolic arc) from the two sites, squared.
414 Vec2d dir_pt_ft = pt_site.cast<double>() - ft;
415 // Distance of Voronoi point site from the Voronoi line site.
416 double l = dir_pt_ft.norm();
417 static constexpr double nan = std::numeric_limits<double>::quiet_NaN();
418 auto out = std::make_pair(Vec2d(nan, nan), Vec2d(nan, nan));
419 // +x, -x are the two parameters along the line_site, where threshold is met.
420 double r = l / (1. + threshold_cos_alpha);
421 double x2 = r * r - Slic3r::sqr(l - r);
422 double x = sqrt(x2);
423 // Project voronoi_point1/2 to line_site.
424 Vec2d dir_x = (line_site.b - line_site.a).cast<double>().normalized();
425 double t1 = (voronoi_point1 - ft).dot(dir_x);
426 double t2 = (voronoi_point2 - ft).dot(dir_x);
427 if (t1 > t2) {
428 t1 = -t1;
429 t2 = -t2;
430 dir_x = - dir_x;
431 }
432 if (t2 > -x && t1 < x) {
433 // Intervals overlap.
434 bool t1_valid = t1 < -x;
435 bool t2_valid = t2 > +x;
436 // Direction of the Y axis of the parabola.
437 Vec2d dir_y(- dir_x.y(), dir_x.x());
438 // Orient the Y axis towards the point site.
439 if (dir_y.dot(dir_pt_ft) < 0.)
440 dir_y = - dir_y;
441 // Equation of the parabola: y = b + a * x^2
442 double a = 0.5 / l;
443 dir_x *= x;
444 dir_y *= 0.5 * l + a * x2;
445 out.first = t1_valid ? ft - dir_x + dir_y : voronoi_point1;
446 out.second = t2_valid ? ft + dir_x + dir_y : voronoi_point2;
447 }
448 return out;
449 }
constexpr T sqr(T x)
Definition libslic3r.h:301

References Slic3r::Line::a, Slic3r::Line::b, Slic3r::cast(), Slic3r::dot(), Slic3r::Geometry::foot_pt(), and Slic3r::sqr().

Here is the call graph for this function:

◆ vertex_equal_to_point() [1/2]

bool Slic3r::Voronoi::detail::vertex_equal_to_point ( const VD::vertex_type * vertex,
const Point & ipt )
236 { return vertex_equal_to_point(*vertex, ipt); }

References vertex_equal_to_point().

Here is the call graph for this function:

◆ vertex_equal_to_point() [2/2]

template<typename VertexType>
bool Slic3r::Voronoi::detail::vertex_equal_to_point ( const VertexType & vertex,
const Point & ipt )
inline
215 {
216 // Convert ipt to doubles, force the 80bit FPU temporary to 64bit and then compare.
217 // This should work with any settings of math compiler switches and the C++ compiler
218 // shall understand the memcpies as type punning and it shall optimize them out.
219#if 1
220 using ulp_cmp_type = boost::polygon::detail::ulp_comparison<double>;
221 ulp_cmp_type ulp_cmp;
222 static constexpr int ULPS = boost::polygon::voronoi_diagram_traits<double>::vertex_equality_predicate_type::ULPS;
223 return ulp_cmp(vertex.x(), double(ipt.x()), ULPS) == ulp_cmp_type::EQUAL &&
224 ulp_cmp(vertex.y(), double(ipt.y()), ULPS) == ulp_cmp_type::EQUAL;
225#else
226 volatile double u = static_cast<double>(ipt.x());
227 volatile double v = vertex.x();
228 if (u != v)
229 return false;
230 u = static_cast<double>(ipt.y());
231 v = vertex.y();
232 return u == v;
233#endif
234 };

Referenced by Slic3r::Voronoi::annotate_inside_outside(), on_site(), and vertex_equal_to_point().

Here is the caller graph for this function: