Add bindings for igl::lazy_cage and core igl::progressive_hulls - #318
Open
alecjacobson wants to merge 2 commits into
Open
Add bindings for igl::lazy_cage and core igl::progressive_hulls#318alecjacobson wants to merge 2 commits into
alecjacobson wants to merge 2 commits into
Conversation
Bump libigl to main (c07f8586), which now has igl::lazy_cage and — via libigl PR #2558 — core igl::progressive_hulls (moved out of copyleft, dropping the quadprog dependency). Both are pure-core (no CGAL). New bindings: - progressive_hulls(V, F, max_m, block_intersections=False) -> (success, U, G, J): nested enclosing coarsening of a closed manifold via "progressive hulls". - lazy_cage(V, F, num_faces, grid_size=0) -> (success, CV, CF, sigma): offset + decimate a closed mesh to an enclosing, self-intersection-free cage. Plus a full overload exposing max_sigma / num_iters / use_qslim / metric / grid_mode / distance, the LazyCageMetric / LazyCageGridMode / LazyCageDistance enums, and the lazy_cage_default_grid_size helper. Concrete Eigen::MatrixXi (int32) in/out are cast to/from the int64 binding types. Adds call tests for both. Full suite passes. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
alecjacobson
force-pushed
the
add-lazy-cage-progressive-hulls
branch
from
September 1, 2026 17:52
d4c405f to
9fbc387
Compare
libigl PR #2558 moved progressive_hulls from igl::copyleft to core, deleting igl/copyleft/progressive_hulls.h. The pre-existing src/copyleft/progressive_hulls.cpp binding still included that header, so the copyleft module failed to compile on every platform in CI (the core-only local build missed it). Remove that stale binding — the new core src/progressive_hulls.cpp replaces it as igl.progressive_hulls — and drop the igl.copyleft.progressive_hulls call from test_copyleft (covered by test_progressive_hulls). Bump version 2.6.4.dev0 -> 2.6.4.dev1 so merging publishes these bindings to PyPI. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Adds Python bindings for two libigl functions.
libigl bump
Bumps libigl to main (
c07f8586), which hasigl::lazy_cageand — via now-merged libigl PR #2558 — coreigl::progressive_hulls(moved out ofcopyleft, droppingigl::copyleft::quadprogforigl::project_to_halfspace_intersection). Both are pure-core (no CGAL).New bindings
progressive_hulls(V, F, max_m, block_intersections=False)→(success, U, G, J)— nested, enclosing coarsening of a closed manifold mesh ("progressive hulls", Sander et al. 2000), with the intersection-blocking variant behind a flag.lazy_cage(V, F, num_faces, grid_size=0)→(success, CV, CF, sigma)— offset-and-decimate a closed mesh into an enclosing, self-intersection-free cage with exactlynum_facesfaces. Plus:max_sigma,num_iters,use_qslim,metric,grid_mode,distance;LazyCageMetric/LazyCageGridMode/LazyCageDistanceenums;lazy_cage_default_grid_size(num_faces)helper.Both functions use concrete
Eigen::MatrixXi(int32) in/out, which the wrappers cast to/from the int64 binding types.Tests
test_progressive_hulls(coarsen an upsampled icosahedron to 40 faces; check enclosure + index validity) andtest_lazy_cage(simple + full overloads on an icosahedron,num_faces=50, grid_size=32, checkssuccess, exact face count, enclosure; smoke-tests the helper + enums). Rebuilt against merged libigl main; both pass.🤖 Generated with Claude Code