Skip to content

Commit cf15bbe

Browse files
committed
Fix functor usage in Distance_23
+ various code improvements along the way
1 parent b95c60f commit cf15bbe

35 files changed

+530
-453
lines changed

Distance_2/include/CGAL/Distance_2/Line_2_Line_2.h

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,6 @@
2020
#define CGAL_DISTANCE_2_LINE_2_LINE_2_H
2121

2222
#include <CGAL/Distance_2/internal/squared_distance_utils_2.h>
23-
#include <CGAL/Distance_2/Point_2_Line_2.h>
2423

2524
#include <CGAL/Kernel/global_functions.h>
2625
#include <CGAL/Line_2.h>
@@ -35,8 +34,11 @@ squared_distance(const typename K::Line_2& line1,
3534
const K& k)
3635
{
3736
typedef typename K::FT FT;
37+
38+
typename K::Compute_squared_distance_2 sq_dist = k.compute_squared_distance_2_object();
39+
3840
if(internal::parallel(line1, line2, k))
39-
return internal::squared_distance(line1.point(), line2, k);
41+
return sq_dist(line1.point(), line2);
4042
else
4143
return FT(0);
4244
}
@@ -48,7 +50,7 @@ inline typename K::FT
4850
squared_distance(const Line_2<K>& line1,
4951
const Line_2<K>& line2)
5052
{
51-
return internal::squared_distance(line1, line2, K());
53+
return K().compute_squared_distance_2_object()(line1, line2);
5254
}
5355

5456
} // namespace CGAL

Distance_2/include/CGAL/Distance_2/Line_2_Triangle_2.h

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,6 @@
2020
#define CGAL_DISTANCE_2_LINE_2_TRIANGLE_2_H
2121

2222
#include <CGAL/Distance_2/internal/squared_distance_utils_2.h>
23-
#include <CGAL/Distance_2/Point_2_Line_2.h>
2423

2524
#include <CGAL/enum.h>
2625

@@ -38,17 +37,19 @@ squared_distance(const typename K::Line_2& line,
3837
{
3938
typedef typename K::FT FT;
4039

41-
Oriented_side side0 = line.oriented_side(triangle.vertex(0));
40+
typename K::Compute_squared_distance_2 sq_dist = k.compute_squared_distance_2_object();
41+
42+
const Oriented_side side0 = line.oriented_side(triangle.vertex(0));
4243
if(line.oriented_side(triangle.vertex(1)) != side0)
4344
return FT(0);
4445

4546
if(line.oriented_side(triangle.vertex(2)) != side0)
4647
return FT(0);
4748

48-
FT mindist = internal::squared_distance(triangle.vertex(0), line, k);
49+
FT mindist = sq_dist(triangle.vertex(0), line);
4950
for(int i=1; i<3; ++i)
5051
{
51-
FT dist = internal::squared_distance(triangle.vertex(i), line, k);
52+
FT dist = sq_dist(triangle.vertex(i), line);
5253
if(dist < mindist)
5354
mindist = dist;
5455
}
@@ -72,15 +73,15 @@ inline typename K::FT
7273
squared_distance(const Line_2<K>& line,
7374
const Triangle_2<K>& triangle)
7475
{
75-
return internal::squared_distance(line, triangle, K());
76+
return K().compute_squared_distance_2_object()(line, triangle);
7677
}
7778

7879
template <class K>
7980
inline typename K::FT
8081
squared_distance(const Triangle_2<K>& triangle,
8182
const Line_2<K>& line)
8283
{
83-
return internal::squared_distance(line, triangle, K());
84+
return K().compute_squared_distance_2_object()(triangle, line);
8485
}
8586

8687
} // namespace CGAL

Distance_2/include/CGAL/Distance_2/Point_2_Line_2.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -92,15 +92,15 @@ inline typename K::FT
9292
squared_distance(const Point_2<K>& pt,
9393
const Line_2<K>& line)
9494
{
95-
return internal::squared_distance(pt, line, K());
95+
return K().compute_squared_distance_2_object()(pt, line);
9696
}
9797

9898
template <class K>
9999
inline typename K::FT
100100
squared_distance(const Line_2<K>& line,
101101
const Point_2<K>& pt)
102102
{
103-
return internal::squared_distance(pt, line, K());
103+
return K().compute_squared_distance_2_object()(line, pt);
104104
}
105105

106106
} // namespace CGAL

Distance_2/include/CGAL/Distance_2/Point_2_Point_2.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ inline typename K::FT
4141
squared_distance(const Point_2<K>& pt1,
4242
const Point_2<K>& pt2)
4343
{
44-
return internal::squared_distance(pt1, pt2, K());
44+
return K().compute_squared_distance_2_object()(pt1, pt2);
4545
}
4646

4747
} // namespace CGAL

Distance_2/include/CGAL/Distance_2/Point_2_Segment_2.h

Lines changed: 19 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,6 @@
2020
#define CGAL_DISTANCE_2_POINT_2_SEGMENT_2_H
2121

2222
#include <CGAL/Distance_2/internal/squared_distance_utils_2.h>
23-
#include <CGAL/Distance_2/Point_2_Point_2.h>
24-
#include <CGAL/Distance_2/Point_2_Line_2.h>
2523

2624
#include <CGAL/Point_2.h>
2725
#include <CGAL/Segment_2.h>
@@ -57,11 +55,15 @@ squared_distance_indexed(const typename K::Point_2 &pt,
5755
int ind,
5856
const K& k)
5957
{
58+
typename K::Compute_squared_distance_2 sq_dist = k.compute_squared_distance_2_object();
59+
6060
if(ind == 0)
61-
return internal::squared_distance(pt, seg.source(), k);
61+
return sq_dist(pt, seg.source());
62+
6263
if(ind == 1)
63-
return internal::squared_distance(pt, seg.target(), k);
64-
return internal::squared_distance(pt, seg.supporting_line(), k);
64+
return sq_dist(pt, seg.target());
65+
66+
return sq_dist(pt, seg.supporting_line());
6567
}
6668

6769
template <class K>
@@ -73,21 +75,23 @@ squared_distance(const typename K::Point_2& pt,
7375
typedef typename K::Vector_2 Vector_2;
7476
typedef typename K::RT RT;
7577

76-
typename K::Construct_vector_2 construct_vector = k.construct_vector_2_object();
78+
typename K::Construct_vector_2 vector = k.construct_vector_2_object();
79+
typename K::Compute_squared_length_2 sq_length = k.compute_squared_length_2_object();
80+
typename K::Compute_squared_distance_2 sq_dist = k.compute_squared_distance_2_object();
7781

7882
// assert that the segment is valid (non zero length).
79-
Vector_2 diff = construct_vector(seg.source(), pt);
80-
Vector_2 segvec = construct_vector(seg.source(), seg.target());
83+
const Vector_2 diff = vector(seg.source(), pt);
84+
const Vector_2 segvec = vector(seg.source(), seg.target());
8185

82-
RT d = wdot(diff, segvec, k);
86+
const RT d = wdot(diff, segvec, k);
8387
if(d <= RT(0))
84-
return k.compute_squared_length_2_object()(diff);
88+
return sq_length(diff);
8589

86-
RT e = wdot(segvec,segvec, k);
90+
const RT e = wdot(segvec,segvec, k);
8791
if(wmult((K*)0 ,d, segvec.hw()) > wmult((K*)0, e, diff.hw()))
88-
return internal::squared_distance(pt, seg.target(), k);
92+
return sq_dist(pt, seg.target());
8993

90-
return internal::squared_distance(pt, seg.supporting_line(), k);
94+
return sq_dist(pt, seg.supporting_line());
9195
}
9296

9397
template <class K>
@@ -106,15 +110,15 @@ inline typename K::FT
106110
squared_distance(const Point_2<K>& pt,
107111
const Segment_2<K>& seg)
108112
{
109-
return internal::squared_distance(pt, seg, K());
113+
return K().compute_squared_distance_2_object()(pt, seg);
110114
}
111115

112116
template <class K>
113117
inline typename K::FT
114118
squared_distance(const Segment_2<K>& seg,
115119
const Point_2<K>& pt)
116120
{
117-
return internal::squared_distance(pt, seg, K());
121+
return K().compute_squared_distance_2_object()(seg, pt);
118122
}
119123

120124
} // namespace CGAL

Distance_2/include/CGAL/Distance_2/Point_2_Triangle_2.h

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -212,13 +212,15 @@ squared_distance_indexed(const typename K::Point_2& pt,
212212
typedef typename K::FT FT;
213213
typedef typename K::Line_2 Line_2;
214214

215+
typename K::Compute_squared_distance_2 sq_dist = k.compute_squared_distance_2_object();
216+
215217
if(ind1 == -1)
216218
return FT(0);
217219

218220
if(ind2 == -1)
219-
return internal::squared_distance(pt, triangle.vertex(ind1), k);
221+
return sq_dist(pt, triangle.vertex(ind1));
220222

221-
return internal::squared_distance(pt, Line_2(triangle.vertex(ind1), triangle.vertex(ind2)), k);
223+
return sq_dist(pt, Line_2{triangle.vertex(ind1), triangle.vertex(ind2)});
222224
}
223225

224226
template <class K>
@@ -248,15 +250,15 @@ inline typename K::FT
248250
squared_distance(const Point_2<K>& pt,
249251
const Triangle_2<K>& triangle)
250252
{
251-
return internal::squared_distance(pt, triangle, K());
253+
return K().compute_squared_distance_2_object()(pt, triangle);
252254
}
253255

254256
template <class K>
255257
inline typename K::FT
256258
squared_distance(const Triangle_2<K>& triangle,
257259
const Point_2<K>& pt)
258260
{
259-
return internal::squared_distance(pt, triangle, K());
261+
return K().compute_squared_distance_2_object()(triangle, pt);
260262
}
261263

262264
} // namespace CGAL

Distance_2/include/CGAL/Distance_2/Ray_2_Line_2.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -72,15 +72,15 @@ inline typename K::FT
7272
squared_distance(const Line_2<K>& line,
7373
const Ray_2<K>& ray)
7474
{
75-
return internal::squared_distance(line, ray, K());
75+
return K().compute_squared_distance_2_object()(line, ray);
7676
}
7777

7878
template <class K>
7979
inline typename K::FT
8080
squared_distance(const Ray_2<K>& ray,
8181
const Line_2<K>& line)
8282
{
83-
return internal::squared_distance(line, ray, K());
83+
return K().compute_squared_distance_2_object()(ray, line);
8484
}
8585

8686
} // namespace CGAL

Distance_2/include/CGAL/Distance_2/Ray_2_Ray_2.h

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ ray_ray_squared_distance_parallel(const typename K::Vector_2& ray1dir,
4646
RT wcr = wcross(ray1dir, from1to2, k);
4747
RT w = from1to2.hw();
4848

49-
return (square(wcr) / FT(wmult((K*)0, RT(wdot(ray1dir, ray1dir, k)), w, w)));
49+
return (square(wcr) / FT(wmult((K*)0, wdot(ray1dir, ray1dir, k), w, w)));
5050
}
5151

5252
template <class K>
@@ -58,11 +58,12 @@ squared_distance(const typename K::Ray_2& ray1,
5858
typedef typename K::Vector_2 Vector_2;
5959
typedef typename K::FT FT;
6060

61-
typename K::Construct_vector_2 construct_vector = k.construct_vector_2_object();
61+
typename K::Construct_vector_2 vector = k.construct_vector_2_object();
62+
typename K::Compute_squared_distance_2 sq_dist = k.compute_squared_distance_2_object();
6263

63-
const Vector_2& ray1dir = ray1.direction().vector();
64-
const Vector_2& ray2dir = ray2.direction().vector();
65-
Vector_2 diffvec(construct_vector(ray1.source(),ray2.source()));
64+
const Vector_2 ray1dir = ray1.direction().vector();
65+
const Vector_2 ray2dir = ray2.direction().vector();
66+
const Vector_2 diffvec = vector(ray1.source(),ray2.source());
6667

6768
bool crossing1, crossing2;
6869
switch(orientation(ray1dir, ray2dir, k))
@@ -83,18 +84,18 @@ squared_distance(const typename K::Ray_2& ray1,
8384
{
8485
if(crossing2)
8586
return FT(0);
86-
return internal::squared_distance(ray2.source(), ray1, k);
87+
return sq_dist(ray2.source(), ray1);
8788
}
8889
else
8990
{
9091
if(crossing2)
9192
{
92-
return internal::squared_distance(ray1.source(), ray2, k);
93+
return sq_dist(ray1.source(), ray2);
9394
}
9495
else
9596
{
96-
FT min1 = internal::squared_distance(ray1.source(), ray2, k);
97-
FT min2 = internal::squared_distance(ray2.source(), ray1, k);
97+
FT min1 = sq_dist(ray1.source(), ray2);
98+
FT min2 = sq_dist(ray2.source(), ray1);
9899
return (min1 < min2) ? min1 : min2;
99100
}
100101
}
@@ -106,7 +107,7 @@ template <class K>
106107
inline typename K::FT
107108
squared_distance(const Ray_2<K> &ray1, const Ray_2<K> &ray2)
108109
{
109-
return internal::squared_distance(ray1, ray2, K());
110+
return K().compute_squared_distance_2_object()(ray1, ray2);
110111
}
111112

112113
} // namespace CGAL

Distance_2/include/CGAL/Distance_2/Ray_2_Triangle_2.h

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
#define CGAL_DISTANCE_2_RAY_2_TRIANGLE_2_H
2121

2222
#include <CGAL/Distance_2/internal/squared_distance_utils_2.h>
23+
#include <CGAL/Distance_2/Point_2_Triangle_2.h>
2324

2425
#include <CGAL/Ray_2.h>
2526
#include <CGAL/Triangle_2.h>
@@ -64,11 +65,10 @@ squared_distance(const typename K::Ray_2& ray,
6465
{
6566
// Check if all the segment vertices lie at the same side of
6667
// the triangle segment.
67-
const Point_2 &vt1 = triangle.vertex(ind_tr1);
68-
const Point_2 &vt2 = triangle.vertex(ind_tr2);
68+
const Point_2& vt1 = triangle.vertex(ind_tr1);
69+
const Point_2& vt2 = triangle.vertex(ind_tr2);
6970
if(clockwise(ray.direction().vector(), vt2-vt1, k))
7071
mindist = FT(0);
71-
7272
}
7373
else
7474
{
@@ -105,15 +105,15 @@ inline typename K::FT
105105
squared_distance(const Ray_2<K>& ray,
106106
const Triangle_2<K>& triangle)
107107
{
108-
return internal::squared_distance(ray, triangle, K());
108+
return K().compute_squared_distance_2_object()(ray, triangle);
109109
}
110110

111111
template <class K>
112112
inline typename K::FT
113113
squared_distance(const Triangle_2<K>& triangle,
114114
const Ray_2<K>& ray)
115115
{
116-
return internal::squared_distance(ray, triangle, K());
116+
return K().compute_squared_distance_2_object()(triangle, ray);
117117
}
118118

119119
} // namespace CGAL

0 commit comments

Comments
 (0)