Skip to content

Bump libigl to f68f01c2 and add bindings for new/missing functions - #314

Merged
alecjacobson merged 2 commits into
mainfrom
bump-libigl-new-functions
Aug 31, 2026
Merged

Bump libigl to f68f01c2 and add bindings for new/missing functions#314
alecjacobson merged 2 commits into
mainfrom
bump-libigl-new-functions

Conversation

@alecjacobson

Copy link
Copy Markdown
Contributor

Summary

Bumps the pinned libigl commit from 477e15a3 to f68f01c2 (latest main) and adds Python bindings for the functions introduced upstream in that range, plus two trivial overloads that libigl already offered but were unbound.

New upstream functions

  • igl.simplex_simplex_squared_distance(V1, V2) (libigl #2548) — squared distance between the closest points on two simplices, together with the barycentric coordinates of those closest points on each simplex. Returns (sqrD, B1, B2).
  • igl.triangle.remesh_at_points(V, F, B, FI) (libigl #2556) — remesh a triangle mesh so that a set of barycentric sample points become vertices (vertex-points tracked, edge-points split across incident faces, face-points inserted). Returns (VV, FF, J, K).

Trivial missing overloads on existing functions

  • igl.face_areas(L) — tet-mesh face areas from intrinsic edge lengths (the existing binding only exposed the (V, T) form).
  • igl.per_face_normals_stable(V, F) — order-independent per-face normals (previously unbound; the plain/degenerate-handling overloads were already exposed).

Notes on what was not added

  • igl::marching_cubes gained a sparse-grid overload that also returns an E2V edge→vertex map; it differs from the existing sparse binding only by an added output, so it can't be exposed as a distinct nanobind overload without changing the current return type. Skipped to avoid a breaking change.
  • swept_volume* overloads changed upstream but those functions are not bound at all, so they're out of scope here.

Testing

Call tests added to tests/test_all.py for all four functions (geometric sanity checks: known distances, barycentric sums, centroid insertion, intrinsic-vs-extrinsic agreement, normal alignment). Full suite passes locally:

100 passed

🤖 Generated with Claude Code

Horde and others added 2 commits August 31, 2026 14:21
Bump the pinned libigl commit from 477e15a3 to f68f01c2 (latest main) and
expose the functions added upstream in that range, plus a couple of trivial
overloads that were already available in libigl but unbound.

New upstream functions:
- igl::simplex_simplex_squared_distance (libigl #2548): squared distance and
  barycentric coordinates of the closest points between two simplices.
- igl::triangle::remesh_at_points (libigl #2556): remesh a triangle mesh to
  include a set of barycentric sample points as vertices.

Trivial missing overloads/bindings on existing functions:
- igl.face_areas(L): tet-mesh face areas from intrinsic edge lengths.
- igl.per_face_normals_stable(V, F): order-independent per-face normals.

Adds call tests for all four to tests/test_all.py.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@alecjacobson
alecjacobson merged commit 12e3d0b into main Aug 31, 2026
40 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant