Skip to content

Commit 14809e0

Browse files
authored
Merge pull request #902 from Geode-solutions/feat/update_py_dist
fix(PyAPI): add dimension in distance function names.
2 parents ba33ce2 + a0b6178 commit 14809e0

File tree

3 files changed

+45
-35
lines changed

3 files changed

+45
-35
lines changed

bindings/python/src/geometry/distance.cpp

Lines changed: 17 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,10 @@
3333
#include <geode/geometry/point.h>
3434

3535
#define PYTHON_DISTANCE( dimension ) \
36+
const auto point_point_distance##dimension = \
37+
"point_point_distance" + std::to_string( dimension ) + "D"; \
38+
module.def( point_point_distance##dimension.c_str(), \
39+
&point_point_distance< dimension > ); \
3640
const auto point_segment_distance##dimension = \
3741
"point_segment_distance" + std::to_string( dimension ) + "D"; \
3842
module.def( point_segment_distance##dimension.c_str(), \
@@ -72,15 +76,20 @@ namespace geode
7276
{
7377
PYTHON_DISTANCE( 2 );
7478
PYTHON_DISTANCE( 3 );
75-
module.def( "point_tetrahedron_distance", &point_tetrahedron_distance );
76-
module.def( "point_plane_distance", &point_plane_distance );
7779
module.def(
78-
"point_plane_signed_distance", &point_plane_signed_distance );
79-
module.def( "point_circle_distance", &point_circle_distance );
80+
"point_line_signed_distance2D", &point_line_signed_distance );
81+
module.def( "point_triangle_signed_distance3D",
82+
&point_triangle_signed_distance );
83+
module.def( "line_triangle_distance3D", &line_triangle_distance );
84+
module.def( "segment_triangle_distance3D", &segment_triangle_distance );
8085
module.def(
81-
"point_circle_signed_distance", &point_circle_signed_distance );
82-
module.def( "point_disk_distance", &point_disk_distance );
83-
module.def( "line_triangle_distance", &line_triangle_distance );
84-
module.def( "segment_triangle_distance", &segment_triangle_distance );
86+
"point_tetrahedron_distance3D", &point_tetrahedron_distance );
87+
module.def( "point_plane_distance3D", &point_plane_distance );
88+
module.def(
89+
"point_plane_signed_distance3D", &point_plane_signed_distance );
90+
module.def( "point_circle_distance3D", &point_circle_distance );
91+
module.def(
92+
"point_circle_signed_distance3D", &point_circle_signed_distance );
93+
module.def( "point_disk_distance3D", &point_disk_distance );
8594
}
8695
} // namespace geode

bindings/python/tests/geometry/test-py-distance.py

Lines changed: 25 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -250,27 +250,27 @@ def test_point_plane_distance():
250250
plane = triangle.plane()
251251

252252
q1 = geom.Point3D([0.5, 0.5, 1])
253-
distance, closest_point = geom.point_plane_distance(q1, plane)
253+
distance, closest_point = geom.point_plane_distance3D(q1, plane)
254254
answer = geom.Point3D([0.5, 0.5, 0.0])
255255
if distance != 1.0 or closest_point != answer:
256256
raise ValueError(
257257
"[Test] Wrong result for point_plane_distance with query point q1"
258258
)
259-
distance, closest_point = geom.point_plane_signed_distance(q1, plane)
259+
distance, closest_point = geom.point_plane_signed_distance3D(q1, plane)
260260
answer = geom.Point3D([0.5, 0.5, 0.0])
261261
if distance != 1.0 or closest_point != answer:
262262
raise ValueError(
263263
"[Test] Wrong result for point_plane_signed_distance with query point q1"
264264
)
265265

266266
q2 = geom.Point3D([0.5, 0.5, -1])
267-
distance, closest_point = geom.point_plane_distance(q2, plane)
267+
distance, closest_point = geom.point_plane_distance3D(q2, plane)
268268
answer = geom.Point3D([0.5, 0.5, 0.0])
269269
if distance != 1.0 or closest_point != answer:
270270
raise ValueError(
271271
"[Test] Wrong result for point_plane_distance with query point q2"
272272
)
273-
distance, closest_point = geom.point_plane_signed_distance(q2, plane)
273+
distance, closest_point = geom.point_plane_signed_distance3D(q2, plane)
274274
answer = geom.Point3D([0.5, 0.5, 0.0])
275275
if distance != -1.0 or closest_point != answer:
276276
raise ValueError(
@@ -372,82 +372,82 @@ def test_point_circle_distance():
372372
circle_z = geom.Circle(plane_z, 2)
373373

374374
q1 = geom.Point3D([2.0, 0.0, 1.0])
375-
distance, closest_point = geom.point_circle_distance(q1, circle_x)
375+
distance, closest_point = geom.point_circle_distance3D(q1, circle_x)
376376
answer = geom.Point3D([0.0, 2.0, 1.0])
377377
if distance != math.sqrt(8) or closest_point != answer:
378378
raise ValueError(
379379
"[Test] Wrong result for point_circle_distance with query Point3D q1 and circle_x"
380380
)
381381

382-
distance, closest_point = geom.point_circle_distance(q1, circle_z)
382+
distance, closest_point = geom.point_circle_distance3D(q1, circle_z)
383383
if distance != 0 or closest_point != q1:
384384
raise ValueError(
385385
"[Test] Wrong result for point_circle_distance with query Point3D q1 and circle_z"
386386
)
387387

388-
distance, closest_point = geom.point_circle_signed_distance(q1, circle_x)
388+
distance, closest_point = geom.point_circle_signed_distance3D(q1, circle_x)
389389
answer = geom.Point3D([0.0, 2.0, 1.0])
390390
if distance != -math.sqrt(8) or closest_point != answer:
391391
raise ValueError(
392392
"[Test] Wrong result for point_circle_signed_distance with query Point3D q1 and circle_x"
393393
)
394394

395-
distance, closest_point = geom.point_circle_signed_distance(q1, circle_z)
395+
distance, closest_point = geom.point_circle_signed_distance3D(q1, circle_z)
396396
if distance != 0 or closest_point != q1:
397397
raise ValueError(
398398
"[Test] Wrong result for point_circle_signed_distance with query Point3D q1 and circle_z"
399399
)
400400

401-
distance, closest_point = geom.point_disk_distance(q1, circle_x)
401+
distance, closest_point = geom.point_disk_distance3D(q1, circle_x)
402402
answer = geom.Point3D([0.0, 0.0, 1.0])
403403
if distance != 2 or closest_point != answer:
404404
raise ValueError(
405405
"[Test] Wrong result for point_disk_distance with query Point3D q1 and circle_x"
406406
)
407407

408-
distance, closest_point = geom.point_disk_distance(q1, circle_z)
408+
distance, closest_point = geom.point_disk_distance3D(q1, circle_z)
409409
if distance != 0 or closest_point != q1:
410410
raise ValueError(
411411
"[Test] Wrong result for point_disk_distance with query Point3D q1 and circle_z"
412412
)
413413

414414
q2 = geom.Point3D([0.0, 3.0, 1.0])
415-
distance, closest_point = geom.point_circle_distance(q2, circle_x)
415+
distance, closest_point = geom.point_circle_distance3D(q2, circle_x)
416416
answer = geom.Point3D([0.0, 2.0, 1.0])
417417
if distance != 1 or closest_point != answer:
418418
raise ValueError(
419419
"[Test] Wrong result for point_circle_distance with query Point3D q2 and circle_x"
420420
)
421421

422-
distance, closest_point = geom.point_circle_signed_distance(q2, circle_x)
422+
distance, closest_point = geom.point_circle_signed_distance3D(q2, circle_x)
423423
answer = geom.Point3D([0.0, 2.0, 1.0])
424424
if distance != 1 or closest_point != answer:
425425
raise ValueError(
426426
"[Test] Wrong result for point_circle_signed_distance with query Point3D q2 and circle_x"
427427
)
428428

429-
distance, closest_point = geom.point_disk_distance(q2, circle_x)
429+
distance, closest_point = geom.point_disk_distance3D(q2, circle_x)
430430
answer = geom.Point3D([0.0, 2.0, 1.0])
431431
if distance != 1 or closest_point != answer:
432432
raise ValueError(
433433
"[Test] Wrong result for point_disk_distance with query Point3D q2 and circle_x"
434434
)
435435

436-
distance, closest_point = geom.point_circle_distance(a, circle_x)
436+
distance, closest_point = geom.point_circle_distance3D(a, circle_x)
437437
answer = geom.Point3D([0.0, 2.0, 1.0])
438438
if distance != 2 or closest_point != answer:
439439
raise ValueError(
440440
"[Test] Wrong result for point_circle_distance with query Point3D a and circle_x"
441441
)
442442

443-
distance, closest_point = geom.point_circle_signed_distance(a, circle_x)
443+
distance, closest_point = geom.point_circle_signed_distance3D(a, circle_x)
444444
answer = geom.Point3D([0.0, 2.0, 1.0])
445445
if distance != 2 or closest_point != answer:
446446
raise ValueError(
447447
"[Test] Wrong result for point_circle_signed_distance with query Point3D a and circle_x"
448448
)
449449

450-
distance, closest_point = geom.point_disk_distance(a, circle_x)
450+
distance, closest_point = geom.point_disk_distance3D(a, circle_x)
451451
if distance != 0 or closest_point != a:
452452
raise ValueError(
453453
"[Test] Wrong result for point_disk_distance with query Point3D a and circle_x"
@@ -473,7 +473,7 @@ def test_line_triangle_distance():
473473
line_bz = geom.InfiniteLine3D(zdir, b)
474474
line_hx = geom.InfiniteLine3D(xdir, h)
475475

476-
distance, closest_point0, closest_point1 = geom.line_triangle_distance(line_ab, cdg)
476+
distance, closest_point0, closest_point1 = geom.line_triangle_distance3D(line_ab, cdg)
477477
r00 = geom.Point3D([1.0, 1.0, 0.0])
478478
r01 = geom.Point3D([1.0, 1.0, 1.0])
479479
if (
@@ -485,7 +485,7 @@ def test_line_triangle_distance():
485485
"[Test] Wrong result for line_triangle_distance with query line_ab"
486486
)
487487

488-
distance, closest_point0, closest_point1 = geom.line_triangle_distance(line_ef, cdg)
488+
distance, closest_point0, closest_point1 = geom.line_triangle_distance3D(line_ef, cdg)
489489
r00 = geom.Point3D([1.0, 1.0, 1.0])
490490
r01 = geom.Point3D([1.0, 1.0, 1.0])
491491
if (
@@ -497,7 +497,7 @@ def test_line_triangle_distance():
497497
"[Test] Wrong result for line_triangle_distance with query line_ef"
498498
)
499499

500-
distance, closest_point0, closest_point1 = geom.line_triangle_distance(line_bz, cdg)
500+
distance, closest_point0, closest_point1 = geom.line_triangle_distance3D(line_bz, cdg)
501501
if (
502502
abs(distance) > og.global_epsilon
503503
or not closest_point0.inexact_equal(f)
@@ -507,7 +507,7 @@ def test_line_triangle_distance():
507507
"[Test] Wrong result for line_triangle_distance with query line_bz"
508508
)
509509

510-
distance, closest_point0, closest_point1 = geom.line_triangle_distance(line_hx, cdg)
510+
distance, closest_point0, closest_point1 = geom.line_triangle_distance3D(line_hx, cdg)
511511
r00 = geom.Point3D([3.0, 5.0, 1.0])
512512
if (
513513
abs(distance - 2) > og.global_epsilon
@@ -538,7 +538,7 @@ def test_segment_triangle_distance():
538538
seg_bz1 = geom.Segment3D(bminus, b)
539539
seg_hx = geom.Segment3D(h2, h)
540540

541-
distance, closest_point0, closest_point1 = geom.segment_triangle_distance(
541+
distance, closest_point0, closest_point1 = geom.segment_triangle_distance3D(
542542
seg_ab, cdg
543543
)
544544
r00 = geom.Point3D([1.0, 1.0, 0.0])
@@ -552,7 +552,7 @@ def test_segment_triangle_distance():
552552
"[Test] Wrong result for segment_triangle_distance with query seg_ab"
553553
)
554554

555-
distance, closest_point0, closest_point1 = geom.segment_triangle_distance(
555+
distance, closest_point0, closest_point1 = geom.segment_triangle_distance3D(
556556
seg_ef, cdg
557557
)
558558
r00 = geom.Point3D([1.0, 1.0, 1.0])
@@ -566,7 +566,7 @@ def test_segment_triangle_distance():
566566
"[Test] Wrong result for segment_triangle_distance with query seg_ef"
567567
)
568568

569-
distance, closest_point0, closest_point1 = geom.segment_triangle_distance(
569+
distance, closest_point0, closest_point1 = geom.segment_triangle_distance3D(
570570
seg_bz0, cdg
571571
)
572572
if (
@@ -578,7 +578,7 @@ def test_segment_triangle_distance():
578578
"[Test] Wrong result for segment_triangle_distance with query seg_bz0"
579579
)
580580

581-
distance, closest_point0, closest_point1 = geom.segment_triangle_distance(
581+
distance, closest_point0, closest_point1 = geom.segment_triangle_distance3D(
582582
seg_bz1, cdg
583583
)
584584
if (
@@ -590,7 +590,7 @@ def test_segment_triangle_distance():
590590
"[Test] Wrong result for segment_triangle_distance with query seg_bz1"
591591
)
592592

593-
distance, closest_point0, closest_point1 = geom.segment_triangle_distance(
593+
distance, closest_point0, closest_point1 = geom.segment_triangle_distance3D(
594594
seg_hx, cdg
595595
)
596596
r00 = geom.Point3D([3.0, 5.0, 1.0])

include/geode/geometry/distance.h

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -110,8 +110,9 @@ namespace geode
110110
* @details the sign is given by the triangle normal (positive if in the
111111
* same plane).
112112
*/
113-
std::tuple< double, Point3D > point_triangle_signed_distance(
114-
const Point3D& point, const Triangle3D& triangle );
113+
std::tuple< double, Point3D >
114+
opengeode_geometry_api point_triangle_signed_distance(
115+
const Point3D& point, const Triangle3D& triangle );
115116

116117
/*!
117118
* Compute the smallest distance between an infinite line and a triangle

0 commit comments

Comments
 (0)