libigl 2.6.2.dev0__tar.gz → 2.6.3__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {libigl-2.6.2.dev0 → libigl-2.6.3}/.github/workflows/pip.yml +1 -1
- libigl-2.6.3/.github/workflows/wheels.yml +183 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/.gitignore +4 -1
- libigl-2.6.3/CHANGELOG.md +70 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/CMakeLists.txt +25 -2
- {libigl-2.6.2.dev0 → libigl-2.6.3}/PKG-INFO +19 -3
- {libigl-2.6.2.dev0 → libigl-2.6.3}/README.md +18 -2
- {libigl-2.6.2.dev0 → libigl-2.6.3}/include/default_types.h +1 -0
- libigl-2.6.3/include/parse_transforms.h +45 -0
- libigl-2.6.3/memory/MEMORY.md +26 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/pyproject.toml +2 -3
- libigl-2.6.3/src/accumarray.cpp +48 -0
- libigl-2.6.3/src/active_set.cpp +100 -0
- libigl-2.6.3/src/ambient_occlusion.cpp +49 -0
- libigl-2.6.3/src/barycentric_interpolation.cpp +36 -0
- libigl-2.6.3/src/bezier.cpp +48 -0
- libigl-2.6.3/src/boundary_conditions.cpp +67 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/src/boundary_loop.cpp +1 -1
- libigl-2.6.3/src/bounding_box_diagonal.cpp +25 -0
- libigl-2.6.3/src/centroid.cpp +40 -0
- libigl-2.6.3/src/colormap.cpp +62 -0
- libigl-2.6.3/src/comb_cross_field.cpp +39 -0
- libigl-2.6.3/src/comb_frame_field.cpp +47 -0
- libigl-2.6.3/src/combine.cpp +33 -0
- libigl-2.6.3/src/compute_frame_field_bisectors.cpp +71 -0
- libigl-2.6.3/src/connect_boundary_to_infinity.cpp +57 -0
- libigl-2.6.3/src/copyleft/cgal/coplanar.cpp +24 -0
- libigl-2.6.3/src/copyleft/cgal/delaunay_triangulation.cpp +26 -0
- libigl-2.6.3/src/copyleft/cgal/extract_cells.cpp +35 -0
- libigl-2.6.3/src/copyleft/cgal/outer_hull.cpp +42 -0
- libigl-2.6.3/src/copyleft/cgal/peel_outer_hull_layers.cpp +36 -0
- libigl-2.6.3/src/copyleft/cgal/peel_winding_number_layers.cpp +34 -0
- libigl-2.6.3/src/copyleft/marching_cubes.cpp +68 -0
- libigl-2.6.3/src/copyleft/quadprog.cpp +49 -0
- libigl-2.6.3/src/copyleft/tetgen/cdt.cpp +57 -0
- libigl-2.6.3/src/copyleft/tetgen/mesh_with_skeleton.cpp +61 -0
- libigl-2.6.3/src/cross_field_mismatch.cpp +45 -0
- libigl-2.6.3/src/cubic.cpp +29 -0
- libigl-2.6.3/src/cubic_is_flat.cpp +31 -0
- libigl-2.6.3/src/cubic_monomial_bases.cpp +35 -0
- libigl-2.6.3/src/cubic_split.cpp +33 -0
- libigl-2.6.3/src/curved_hessian_energy.cpp +46 -0
- libigl-2.6.3/src/cycodebase/box_cubic.cpp +50 -0
- libigl-2.6.3/src/cycodebase/module.cpp +11 -0
- libigl-2.6.3/src/cycodebase/point_cubic_squared_distance.cpp +67 -0
- libigl-2.6.3/src/cycodebase/point_spline_squared_distance.cpp +78 -0
- libigl-2.6.3/src/cycodebase/roots.cpp +39 -0
- libigl-2.6.3/src/cycodebase/spline_eytzinger_aabb.cpp +35 -0
- libigl-2.6.3/src/dijkstra.cpp +84 -0
- libigl-2.6.3/src/directed_edge_parents.cpp +26 -0
- libigl-2.6.3/src/edge_topology.cpp +32 -0
- libigl-2.6.3/src/edges_to_path.cpp +36 -0
- libigl-2.6.3/src/embree/bone_visible.cpp +40 -0
- libigl-2.6.3/src/embree/line_mesh_intersection.cpp +44 -0
- libigl-2.6.3/src/euler_characteristic.cpp +20 -0
- libigl-2.6.3/src/exterior_edges.cpp +26 -0
- libigl-2.6.3/src/extract_manifold_patches.cpp +30 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/src/face_areas.cpp +15 -0
- libigl-2.6.3/src/face_occurrences.cpp +26 -0
- libigl-2.6.3/src/fast_winding_number.cpp +181 -0
- libigl-2.6.3/src/find_cross_field_singularities.cpp +64 -0
- libigl-2.6.3/src/fit_cubic_bezier.cpp +37 -0
- libigl-2.6.3/src/fit_plane.cpp +30 -0
- libigl-2.6.3/src/fit_rotations.cpp +35 -0
- libigl-2.6.3/src/flipped_triangles.cpp +29 -0
- libigl-2.6.3/src/flood_fill.cpp +31 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/src/harmonic.cpp +24 -1
- libigl-2.6.3/src/hausdorff.cpp +37 -0
- libigl-2.6.3/src/hessian.cpp +48 -0
- libigl-2.6.3/src/hessian_energy.cpp +47 -0
- libigl-2.6.3/src/hsv_to_rgb.cpp +26 -0
- libigl-2.6.3/src/is_boundary_edge.cpp +55 -0
- libigl-2.6.3/src/is_delaunay.cpp +30 -0
- libigl-2.6.3/src/is_intrinsic_delaunay.cpp +33 -0
- libigl-2.6.3/src/is_irregular_vertex.cpp +22 -0
- libigl-2.6.3/src/iterative_closest_point.cpp +45 -0
- libigl-2.6.3/src/lbs_matrix.cpp +34 -0
- libigl-2.6.3/src/lexicographic_triangulation.cpp +47 -0
- libigl-2.6.3/src/look_at.cpp +36 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/src/marching_cubes.cpp +10 -4
- libigl-2.6.3/src/mvc.cpp +31 -0
- libigl-2.6.3/src/orient_outward.cpp +39 -0
- libigl-2.6.3/src/orientable_patches.cpp +45 -0
- libigl-2.6.3/src/path_to_edges.cpp +35 -0
- libigl-2.6.3/src/per_corner_normals.cpp +34 -0
- libigl-2.6.3/src/per_edge_normals.cpp +47 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/src/per_face_normals.cpp +22 -0
- libigl-2.6.3/src/per_vertex_attribute_smoothing.cpp +32 -0
- libigl-2.6.3/src/planarize_quad_mesh.cpp +43 -0
- libigl-2.6.3/src/point_simplex_squared_distance.cpp +64 -0
- libigl-2.6.3/src/polar_dec.cpp +57 -0
- libigl-2.6.3/src/polar_svd3x3.cpp +32 -0
- libigl-2.6.3/src/predicates/Orientation.cpp +21 -0
- libigl-2.6.3/src/predicates/cubic_winding_number.cpp +27 -0
- libigl-2.6.3/src/predicates/delaunay_triangulation.cpp +30 -0
- libigl-2.6.3/src/predicates/ear_clipping.cpp +56 -0
- libigl-2.6.3/src/predicates/find_intersections.cpp +49 -0
- libigl-2.6.3/src/predicates/find_self_intersections.cpp +43 -0
- libigl-2.6.3/src/predicates/incircle.cpp +37 -0
- libigl-2.6.3/src/predicates/insphere.cpp +39 -0
- libigl-2.6.3/src/predicates/lexicographic_triangulation.cpp +30 -0
- libigl-2.6.3/src/predicates/module.cpp +9 -0
- libigl-2.6.3/src/predicates/orient2d.cpp +35 -0
- libigl-2.6.3/src/predicates/orient3d.cpp +59 -0
- libigl-2.6.3/src/predicates/point_in_convex_hull.cpp +35 -0
- libigl-2.6.3/src/predicates/point_inside_convex_polygon.cpp +30 -0
- libigl-2.6.3/src/predicates/polygons_to_triangles.cpp +40 -0
- libigl-2.6.3/src/predicates/segment_segment_intersect.cpp +34 -0
- libigl-2.6.3/src/predicates/spline_winding_number.cpp +41 -0
- libigl-2.6.3/src/predicates/triangle_triangle_intersect.cpp +43 -0
- libigl-2.6.3/src/procrustes.cpp +41 -0
- libigl-2.6.3/src/pseudonormal_test.cpp +56 -0
- libigl-2.6.3/src/quad_edges.cpp +33 -0
- libigl-2.6.3/src/quad_planarity.cpp +36 -0
- libigl-2.6.3/src/ramer_douglas_peucker.cpp +38 -0
- libigl-2.6.3/src/random_dir.cpp +28 -0
- libigl-2.6.3/src/ray_sphere_intersect.cpp +41 -0
- libigl-2.6.3/src/ray_triangle_intersect.cpp +50 -0
- libigl-2.6.3/src/readCSV.cpp +29 -0
- libigl-2.6.3/src/readSTL.cpp +42 -0
- libigl-2.6.3/src/resolve_duplicated_faces.cpp +45 -0
- libigl-2.6.3/src/rgb_to_hsv.cpp +26 -0
- libigl-2.6.3/src/rigid_alignment.cpp +36 -0
- libigl-2.6.3/src/rotate_vectors.cpp +28 -0
- libigl-2.6.3/src/rotation_matrix_from_directions.cpp +31 -0
- libigl-2.6.3/src/sample_edges.cpp +34 -0
- libigl-2.6.3/src/segment_segment_intersect.cpp +49 -0
- libigl-2.6.3/src/sharp_edges.cpp +32 -0
- libigl-2.6.3/src/signed_angle.cpp +32 -0
- libigl-2.6.3/src/simplex_simplex_squared_distance.cpp +44 -0
- libigl-2.6.3/src/smooth_corner_adjacency.cpp +44 -0
- libigl-2.6.3/src/snap_points.cpp +34 -0
- libigl-2.6.3/src/solid_angle.cpp +35 -0
- libigl-2.6.3/src/spectra/EigsType.cpp +12 -0
- libigl-2.6.3/src/spectra/eigs.cpp +78 -0
- libigl-2.6.3/src/spectra/lscm.cpp +40 -0
- libigl-2.6.3/src/spectra/module.cpp +11 -0
- libigl-2.6.3/src/super_fibonacci.cpp +28 -0
- libigl-2.6.3/src/swept_volume.cpp +60 -0
- libigl-2.6.3/src/swept_volume_bounding_box.cpp +48 -0
- libigl-2.6.3/src/swept_volume_signed_distance.cpp +91 -0
- libigl-2.6.3/src/tet_tet_adjacency.cpp +30 -0
- libigl-2.6.3/src/tri_tri_intersect.cpp +73 -0
- libigl-2.6.3/src/triangle/cdt.cpp +47 -0
- libigl-2.6.3/src/triangle/refine.cpp +39 -0
- libigl-2.6.3/src/triangle/remesh_at_points.cpp +55 -0
- libigl-2.6.3/src/turning_number.cpp +20 -0
- libigl-2.6.3/src/uniformly_sample_two_manifold.cpp +38 -0
- libigl-2.6.3/src/vector_area_matrix.cpp +29 -0
- libigl-2.6.3/src/vertex_components.cpp +54 -0
- libigl-2.6.3/src/voronoi_mass.cpp +29 -0
- libigl-2.6.3/src/voxel_grid.cpp +81 -0
- libigl-2.6.3/src/writeOFF.cpp +52 -0
- libigl-2.6.3/src/writeSTL.cpp +37 -0
- libigl-2.6.3/tests/test_all.py +2256 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/tutorial/tut-chapter1.ipynb +2 -16
- libigl-2.6.2.dev0/.github/workflows/wheels.yml +0 -91
- libigl-2.6.2.dev0/src/fast_winding_number.cpp +0 -38
- libigl-2.6.2.dev0/src/vertex_components.cpp +0 -33
- libigl-2.6.2.dev0/src/voxel_grid.cpp +0 -42
- libigl-2.6.2.dev0/tests/test_all.py +0 -592
- {libigl-2.6.2.dev0 → libigl-2.6.3}/LICENSE.GPL +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/LICENSE.MPL2 +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/attic/copyleft/tetgen_tetrahedralize.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/attic/copyleft/triangle_triangulate.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/attic/skip/SolverStatus.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/attic/skip/WindingNumberMethod.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/attic/skip/angular_distance.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/attic/skip/canonical_quaternions.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/attic/skip/column_to_quats.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/attic/skip/comiso_nrosy.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/attic/skip/covariance_scatter_matrix.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/attic/skip/file_contents_as_string.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/attic/skip/fit_rotations.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/attic/skip/frame_field_deformer.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/attic/skip/frame_to_cross_field.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/attic/skip/frustum.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/attic/skip/group_sum_matrix.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/attic/skip/harwell_boeing.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/attic/skip/histc.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/attic/skip/hsv_to_rgb.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/attic/skip/infinite_cost_stopping_condition.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/attic/skip/intersect.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/attic/skip/invert_diag.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/attic/skip/is_planar.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/attic/skip/limit_faces.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/attic/skip/line_field_missmatch.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/attic/skip/line_search.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/attic/skip/mat_to_quat.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/attic/skip/material_colors.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/attic/skip/max_faces_stopping_condition.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/attic/skip/min_quad_dense.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/attic/skip/normalize_quat.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/attic/skip/on_boundary.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/attic/skip/opengl2_draw_beach_ball.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/attic/skip/opengl2_draw_floor.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/attic/skip/opengl2_draw_mesh.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/attic/skip/opengl2_draw_point.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/attic/skip/opengl2_draw_rectangular_marquee.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/attic/skip/opengl2_draw_skeleton_3d.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/attic/skip/opengl2_draw_skeleton_vector_graphics.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/attic/skip/opengl2_flare_textures.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/attic/skip/opengl2_model_proj_viewport.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/attic/skip/opengl2_print_gl_get.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/attic/skip/opengl2_project.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/attic/skip/opengl2_right_axis.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/attic/skip/opengl2_shine_textures.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/attic/skip/opengl2_sort_triangles.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/attic/skip/opengl2_unproject.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/attic/skip/opengl2_unproject_to_zero_plane.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/attic/skip/opengl2_up_axis.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/attic/skip/opengl2_view_axis.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/attic/skip/opengl_create_shader_program.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/attic/skip/opengl_destroy_shader_program.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/attic/skip/opengl_gl_type_size.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/attic/skip/opengl_glfw_background_window.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/attic/skip/opengl_glfw_imgui_ImGuiHelpers.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/attic/skip/opengl_init_render_to_texture.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/attic/skip/opengl_load_shader.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/attic/skip/opengl_print_program_info_log.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/attic/skip/opengl_print_shader_info_log.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/attic/skip/opengl_report_gl_error.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/attic/skip/opengl_uniform_type_to_string.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/attic/skip/ortho.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/attic/skip/parallel_transport_angles.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/attic/skip/polar_svd.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/attic/skip/polar_svd3x3.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/attic/skip/qslim_optimal_collapse_edge_callbacks.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/attic/skip/quadric_binary_plus_operator.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/attic/skip/quat_conjugate.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/attic/skip/quat_mult.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/attic/skip/quat_to_axis_angle.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/attic/skip/quat_to_mat.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/attic/skip/quats_to_column.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/attic/skip/random_quaternion.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/attic/skip/readBF.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/attic/skip/readNODE.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/attic/skip/readPLY.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/attic/skip/readSTL.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/attic/skip/rgb_to_hsv.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/attic/skip/rotate_by_quat.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/attic/skip/rotation_matrix_from_directions.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/attic/skip/snap_to_canonical_view_quat.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/attic/skip/snap_to_fixed_up.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/attic/skip/sort_angles.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/attic/skip/sort_triangles.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/attic/skip/sort_vectors_ccw.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/attic/skip/svd3x3.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/attic/skip/svd3x3_avx.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/attic/skip/svd3x3_sse.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/attic/skip/trackball.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/attic/skip/transpose_blocks.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/attic/skip/unique_rows.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/attic/skip/voxel_grid.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/attic/skip/writePLY.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/attic/skip/writeSTL.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/attic/skip/writeWRL.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/attic/todo-old/MeshBooleanType.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/attic/todo-old/NormalType.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/attic/todo-old/collapse_edge.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/attic/todo-old/copyleft/copyleft_cgal_assign.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/attic/todo-old/copyleft/copyleft_cgal_assign_scalar.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/attic/todo-old/copyleft/copyleft_cgal_cell_adjacency.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/attic/todo-old/copyleft/copyleft_cgal_closest_facet.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/attic/todo-old/copyleft/copyleft_cgal_complex_to_mesh.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/attic/todo-old/copyleft/copyleft_cgal_component_inside_component.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/attic/todo-old/copyleft/copyleft_cgal_convex_hull.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/attic/todo-old/copyleft/copyleft_cgal_delaunay_triangulation.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/attic/todo-old/copyleft/copyleft_cgal_extract_cells.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/attic/todo-old/copyleft/copyleft_cgal_extract_feature.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/attic/todo-old/copyleft/copyleft_cgal_fast_winding_number.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/attic/todo-old/copyleft/copyleft_cgal_half_space_box.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/attic/todo-old/copyleft/copyleft_cgal_hausdorff.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/attic/todo-old/copyleft/copyleft_cgal_incircle.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/attic/todo-old/copyleft/copyleft_cgal_insert_into_cdt.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/attic/todo-old/copyleft/copyleft_cgal_insphere.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/attic/todo-old/copyleft/copyleft_cgal_intersect_other.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/attic/todo-old/copyleft/copyleft_cgal_intersect_with_half_space.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/attic/todo-old/copyleft/copyleft_cgal_lexicographic_triangulation.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/attic/todo-old/copyleft/copyleft_cgal_mesh_boolean.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/attic/todo-old/copyleft/copyleft_cgal_mesh_boolean_type_to_funcs.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/attic/todo-old/copyleft/copyleft_cgal_mesh_to_cgal_triangle_list.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/attic/todo-old/copyleft/copyleft_cgal_mesh_to_polyhedron.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/attic/todo-old/copyleft/copyleft_cgal_minkowski_sum.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/attic/todo-old/copyleft/copyleft_cgal_order_facets_around_edge.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/attic/todo-old/copyleft/copyleft_cgal_order_facets_around_edges.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/attic/todo-old/copyleft/copyleft_cgal_orient2D.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/attic/todo-old/copyleft/copyleft_cgal_orient3D.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/attic/todo-old/copyleft/copyleft_cgal_outer_element.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/attic/todo-old/copyleft/copyleft_cgal_outer_facet.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/attic/todo-old/copyleft/copyleft_cgal_outer_hull.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/attic/todo-old/copyleft/copyleft_cgal_peel_outer_hull_layers.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/attic/todo-old/copyleft/copyleft_cgal_peel_winding_number_layers.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/attic/todo-old/copyleft/copyleft_cgal_piecewise_constant_winding_number.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/attic/todo-old/copyleft/copyleft_cgal_point_areas.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/attic/todo-old/copyleft/copyleft_cgal_point_mesh_squared_distance.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/attic/todo-old/copyleft/copyleft_cgal_point_segment_squared_distance.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/attic/todo-old/copyleft/copyleft_cgal_point_solid_signed_squared_distance.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/attic/todo-old/copyleft/copyleft_cgal_point_triangle_squared_distance.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/attic/todo-old/copyleft/copyleft_cgal_points_inside_component.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/attic/todo-old/copyleft/copyleft_cgal_polyhedron_to_mesh.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/attic/todo-old/copyleft/copyleft_cgal_projected_cdt.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/attic/todo-old/copyleft/copyleft_cgal_projected_delaunay.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/attic/todo-old/copyleft/copyleft_cgal_propagate_winding_numbers.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/attic/todo-old/copyleft/copyleft_cgal_read_triangle_mesh.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/attic/todo-old/copyleft/copyleft_cgal_relabel_small_immersed_cells.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/attic/todo-old/copyleft/copyleft_cgal_remesh_intersections.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/attic/todo-old/copyleft/copyleft_cgal_remesh_self_intersections.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/attic/todo-old/copyleft/copyleft_cgal_resolve_intersections.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/attic/todo-old/copyleft/copyleft_cgal_row_to_point.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/attic/todo-old/copyleft/copyleft_cgal_segment_segment_squared_distance.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/attic/todo-old/copyleft/copyleft_cgal_signed_distance_isosurface.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/attic/todo-old/copyleft/copyleft_cgal_snap_rounding.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/attic/todo-old/copyleft/copyleft_cgal_string_to_mesh_boolean_type.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/attic/todo-old/copyleft/copyleft_cgal_subdivide_segments.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/attic/todo-old/copyleft/copyleft_cgal_submesh_aabb_tree.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/attic/todo-old/copyleft/copyleft_cgal_triangle_triangle_squared_distance.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/attic/todo-old/copyleft/copyleft_cgal_trim_with_solid.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/attic/todo-old/copyleft/copyleft_cgal_wire_mesh.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/attic/todo-old/copyleft/copyleft_comiso_miq.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/attic/todo-old/copyleft/copyleft_cork_mesh_boolean.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/attic/todo-old/copyleft/copyleft_marching_cubes.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/attic/todo-old/copyleft/copyleft_offset_surface.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/attic/todo-old/copyleft/copyleft_opengl2_render_to_tga.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/attic/todo-old/copyleft/copyleft_opengl2_texture_from_tga.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/attic/todo-old/copyleft/copyleft_progressive_hulls.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/attic/todo-old/copyleft/copyleft_progressive_hulls_cost_and_placement.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/attic/todo-old/copyleft/copyleft_quadprog.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/attic/todo-old/copyleft/copyleft_swept_volume.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/attic/todo-old/copyleft/copyleft_tetgen_mesh_with_skeleton.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/attic/todo-old/copyleft/copyleft_tetgen_read_into_tetgenio.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/attic/todo-old/copyleft/copyleft_tetgen_tetrahedralize.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/attic/todo-old/dijkstra.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/attic/todo-old/embree_bone_heat.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/attic/todo-old/embree_reorient_facets_raycast.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/attic/todo-old/fast_winding_number.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/attic/todo-old/flip_edge.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/attic/todo-old/knn.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/attic/todo-old/mosek_mosek_guarded.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/attic/todo-old/mosek_mosek_linprog.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/attic/todo-old/octree.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/attic/todo-old/per_vertex_point_to_plane_quadrics.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/attic/todo-old/png_readPNG.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/attic/todo-old/png_render_to_png.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/attic/todo-old/png_render_to_png_async.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/attic/todo-old/png_texture_from_file.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/attic/todo-old/png_texture_from_png.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/attic/todo-old/png_writePNG.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/attic/todo-old/pseudonormal_test.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/attic/todo-old/readWRL.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/attic/todo-old/remesh_along_isoline.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/attic/todo-old/seam_edges.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/attic/todo-old/shortest_edge_and_midpoint.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/attic/todo-old/squared_edge_lengths.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/attic/todo-old/straighten_seams.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/attic/todo-old/swept_volume_signed_distance.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/attic/todo-old/triangle_cdt.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/attic/todo-old/unzip_corners.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/attic/todo-old/writeBF.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/attic/todo-old/writeDMAT.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/attic/todo-old/writeMESH.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/attic/todo-old/writeTGF.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/attic/todo-old/xml_writeDAE.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/attic/todo-old/xml_write_triangle_mesh.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/classes/AABB.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/classes/classes.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/cmake/CXXFeatures.cmake +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/cmake/FindLIBIGL.cmake +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/cmake/UseColors.cmake +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/cmake/Warnings.cmake +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/missing.sh +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/mkdocs.yml +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/postBuild +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/priority.txt +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/scripts/basic_function.mako +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/scripts/blender_igl_export.py +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/scripts/generate_bindings.py +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/scripts/make_lean.py +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/scripts/parser.py +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/src/AABB.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/src/FileEncoding.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/src/MappingEnergyType.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/src/MassMatrixType.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/src/OrientedBoundingBoxMinimizeType.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/src/adjacency_list.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/src/adjacency_matrix.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/src/all_pairs_distances.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/src/arap.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/src/average_from_edges_onto_vertices.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/src/average_onto_faces.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/src/average_onto_vertices.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/src/avg_edge_length.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/src/barycenter.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/src/barycentric_coordinates.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/src/bbw.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/src/bfs_orient.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/src/biharmonic_coordinates.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/src/bijective_composite_harmonic_mapping.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/src/blue_noise.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/src/boundary_facets.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/src/bounding_box.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/src/circulation.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/src/circumradius.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/src/collapse_edge.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/src/connected_components.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/src/copyleft/cgal/convex_hull.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/src/copyleft/cgal/fast_winding_number.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/src/copyleft/cgal/intersect_other.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/src/copyleft/cgal/intersect_with_half_space.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/src/copyleft/cgal/mesh_boolean.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/src/copyleft/cgal/module.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/src/copyleft/cgal/oriented_bounding_box.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/src/copyleft/cgal/point_areas.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/src/copyleft/cgal/remesh_self_intersections.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/src/copyleft/cgal/trim_with_solid.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/src/copyleft/module.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/src/copyleft/progressive_hulls.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/src/copyleft/tetgen/module.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/src/copyleft/tetgen/tetrahedralize.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/src/cotmatrix.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/src/cotmatrix_entries.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/src/cotmatrix_intrinsic.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/src/crouzeix_raviart_cotmatrix.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/src/crouzeix_raviart_massmatrix.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/src/cut_mesh.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/src/cut_mesh_from_singularities.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/src/cut_to_disk.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/src/cylinder.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/src/decimate.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/src/dihedral_angles.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/src/dihedral_angles_intrinsic.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/src/doublearea.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/src/dual_contouring.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/src/ears.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/src/edge_flaps.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/src/edge_lengths.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/src/edges.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/src/embree/EmbreeIntersector.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/src/embree/ambient_occlusion.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/src/embree/module.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/src/embree/reorient_facets_raycast.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/src/embree/shape_diameter_function.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/src/exact_geodesic.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/src/facet_adjacency_matrix.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/src/facet_components.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/src/false_barycentric_subdivision.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/src/gaussian_curvature.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/src/grad.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/src/grid.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/src/heat_geodesics.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/src/icosahedron.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/src/in_element.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/src/inradius.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/src/internal_angles.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/src/intrinsic_delaunay_cotmatrix.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/src/intrinsic_delaunay_triangulation.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/src/is_border_vertex.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/src/is_edge_manifold.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/src/is_vertex_manifold.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/src/ismember_rows.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/src/isolines.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/src/isolines_intrinsic.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/src/kelvinlets.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/src/knn.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/src/lipschitz_octree.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/src/local_basis.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/src/loop.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/src/lscm.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/src/map_vertices_to_circle.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/src/massmatrix.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/src/massmatrix_intrinsic.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/src/matlab_format.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/src/min_quad_with_fixed.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/src/module.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/src/moments.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/src/noop.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/src/octree.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/src/offset_surface.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/src/on_boundary.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/src/orient_halfedges.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/src/oriented_bounding_box.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/src/oriented_facets.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/src/per_vertex_normals.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/src/point_mesh_squared_distance.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/src/polar_svd.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/src/polygon_corners.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/src/polygons_to_triangles.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/src/principal_curvature.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/src/project.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/src/project_to_line.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/src/project_to_line_segment.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/src/qslim.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/src/quad_grid.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/src/random_points_on_mesh.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/src/ray_mesh_intersect.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/src/readDMAT.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/src/readMESH.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/src/readMSH.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/src/readOBJ.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/src/readOFF.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/src/read_triangle_mesh.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/src/remove_duplicate_vertices.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/src/remove_unreferenced.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/src/signed_distance.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/src/slim.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/src/sparse_map_noop.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/src/sparse_map_shape.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/src/sparse_noop.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/src/sparse_shape.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/src/split_nonmanifold.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/src/squared_edge_lengths.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/src/triangle/module.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/src/triangle/scaf.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/src/triangle/triangulate.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/src/triangle_fan.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/src/triangle_triangle_adjacency.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/src/triangulated_grid.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/src/unique_edge_map.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/src/unique_simplices.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/src/unique_sparse_voxel_corners.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/src/unproject.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/src/upsample.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/src/vertex_triangle_adjacency.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/src/volume.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/src/winding_number.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/src/writeDMAT.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/src/writeMESH.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/src/writeMSH.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/src/writeOBJ.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/src/writePLY.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/src/write_triangle_mesh.cpp +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/tutorial/contributing.md +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/tutorial/exporter.py +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/tutorial/igl_docs.md +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/tutorial/images/102_DrawMesh.png +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/tutorial/images/104_Colors.png +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/tutorial/images/105_Overlays.png +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/tutorial/images/106_ViewerMenu.png +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/tutorial/images/501_HarmonicParam.png +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/tutorial/images/502_LSCMParam.png +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/tutorial/images/503_ARAPParam.png +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/tutorial/images/504_nrosy_field.png +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/tutorial/images/504_vector_field.png +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/tutorial/images/505_MIQ_1.png +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/tutorial/images/505_MIQ_2.png +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/tutorial/images/505_MIQ_3.png +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/tutorial/images/505_MIQ_4.png +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/tutorial/images/505_MIQ_5.png +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/tutorial/images/505_MIQ_6.png +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/tutorial/images/505_MIQ_7.png +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/tutorial/images/505_MIQ_8.png +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/tutorial/images/506_FrameField_1.png +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/tutorial/images/506_FrameField_2.png +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/tutorial/images/506_FrameField_3.png +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/tutorial/images/506_FrameField_4.png +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/tutorial/images/507_PolyVectorField.png +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/tutorial/images/508_ConjugateField.png +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/tutorial/images/509_Planarization.png +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/tutorial/images/510_Integrable.png +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/tutorial/images/511_PolyVectorFieldGeneral.png +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/tutorial/images/602_Matlab_1.png +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/tutorial/images/602_Matlab_2.png +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/tutorial/images/604_Triangle.png +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/tutorial/images/605_Tetgen.png +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/tutorial/images/606_AmbientOcclusion.png +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/tutorial/images/607_Picking.png +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/tutorial/images/608_LIM.png +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/tutorial/images/712_beetles.jpg +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/tutorial/images/713_ShapeUp.png +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/tutorial/images/VF.pdf +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/tutorial/images/VF.png +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/tutorial/images/arm-dqs.jpg +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/tutorial/images/armadillo-fast.jpg +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/tutorial/images/armadillo-marching-cubes.jpg +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/tutorial/images/background.gif +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/tutorial/images/beetle-eigen-decomposition.gif +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/tutorial/images/big-sigcat-winding-number.gif +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/tutorial/images/bump-k-harmonic.jpg +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/tutorial/images/bumpy-gaussian-curvature.jpg +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/tutorial/images/bunny-signed-distance.gif +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/tutorial/images/bunny-swept-volume.gif +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/tutorial/images/camelhead-laplace-equation.jpg +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/tutorial/images/cheburashka-biharmonic-leq.jpg +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/tutorial/images/cheburashka-gradient.jpg +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/tutorial/images/cheburashka-knight-boolean.jpg +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/tutorial/images/cheburashka-multiscale-biharmonic-kernels.jpg +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/tutorial/images/cow-curvature-flow.jpg +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/tutorial/images/cube-sphere-cylinders-csg-tree.jpg +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/tutorial/images/cube-sphere-cylinders-csg.gif +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/tutorial/images/decimated-knight-arap.jpg +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/tutorial/images/decimated-knight-slice-color.jpg +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/tutorial/images/decimated-knight-sort-color.jpg +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/tutorial/images/decimated-knight-subdivision.gif +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/tutorial/images/edge-collapse.jpg +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/tutorial/images/edge-collapse.pdf +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/tutorial/images/fandisk-normals.jpg +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/tutorial/images/fertility-edge-collapse.gif +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/tutorial/images/fertility-principal-curvature.jpg +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/tutorial/images/geodesicdistance.jpg +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/tutorial/images/hand-bbw.jpg +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/tutorial/images/hat-function.jpg +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/tutorial/images/heat-geodesic-beetle.gif +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/tutorial/images/heat-geodesic-peaks.png +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/tutorial/images/libigl-logo.jpg +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/tutorial/images/max-biharmonic.jpg +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/tutorial/images/multiple-meshes.png +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/tutorial/images/octopus-biharmonic-coordinates-physics.gif +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/tutorial/images/simplicial_complex_augmentation_framework.png +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/tutorial/images/slim.png +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/tutorial/images/streamlines.jpg +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/tutorial/images/truck-facet-orientation.jpg +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/tutorial/index.md +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/tutorial/marching_cubes.py +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/tutorial/plot_to_md.py +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/tutorial/tut-chapter0.ipynb +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/tutorial/tut-chapter2.ipynb +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/tutorial/tut-chapter3.ipynb +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/tutorial/tut-chapter4.ipynb +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/tutorial/tut-chapter5.ipynb +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/tutorial/tut-chapter6.ipynb +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/tutorial/tut-chapter7.ipynb +0 -0
- {libigl-2.6.2.dev0 → libigl-2.6.3}/tutorial/tutorials.ipynb +0 -0
|
@@ -0,0 +1,183 @@
|
|
|
1
|
+
name: Wheels
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
workflow_dispatch:
|
|
5
|
+
push:
|
|
6
|
+
branches:
|
|
7
|
+
- main
|
|
8
|
+
pull_request:
|
|
9
|
+
branches:
|
|
10
|
+
- main
|
|
11
|
+
|
|
12
|
+
jobs:
|
|
13
|
+
build_sdist:
|
|
14
|
+
runs-on: ubuntu-latest
|
|
15
|
+
steps:
|
|
16
|
+
- uses: actions/checkout@v4
|
|
17
|
+
with:
|
|
18
|
+
submodules: true
|
|
19
|
+
- run: pipx run build --sdist
|
|
20
|
+
- run: pipx run twine check dist/* || exit 1 # Ensure failure on twine check errors
|
|
21
|
+
- uses: actions/upload-artifact@v4
|
|
22
|
+
with:
|
|
23
|
+
name: dist-sdist
|
|
24
|
+
path: dist/*.tar.gz
|
|
25
|
+
|
|
26
|
+
build_wheels:
|
|
27
|
+
runs-on: ${{ matrix.os }}
|
|
28
|
+
strategy:
|
|
29
|
+
fail-fast: false
|
|
30
|
+
matrix:
|
|
31
|
+
os: [ubuntu-24.04, ubuntu-24.04-arm, macos-latest, macos-15-intel, windows-latest] # Use specific versions for clarity
|
|
32
|
+
arch: [x86_64, arm64]
|
|
33
|
+
pybuilds: [cp38, cp39, cp310, cp311, cp312] # Define pybuilds at the top level
|
|
34
|
+
exclude:
|
|
35
|
+
- os: ubuntu-24.04-arm # No need to specify arch, it's already implicit
|
|
36
|
+
arch: x86_64 # Exclude x86_64 on ARM
|
|
37
|
+
- os: macos-latest
|
|
38
|
+
arch: x86_64 # Exclude x86_64 explicitly
|
|
39
|
+
- os: macos-latest # Exclude cp38
|
|
40
|
+
pybuilds: cp38
|
|
41
|
+
- os: macos-15-intel
|
|
42
|
+
arch: arm64 # Exclude arm64 on macOS 13
|
|
43
|
+
- os: macos-15-intel
|
|
44
|
+
pybuilds: cp38
|
|
45
|
+
|
|
46
|
+
name: >
|
|
47
|
+
${{ matrix.pybuilds }} ${{ matrix.os }} ${{ matrix.arch }}
|
|
48
|
+
|
|
49
|
+
steps:
|
|
50
|
+
- uses: actions/checkout@v4
|
|
51
|
+
- uses: actions/setup-python@v5
|
|
52
|
+
with:
|
|
53
|
+
python-version: '3.12'
|
|
54
|
+
- run: pip install cibuildwheel==3.1.4
|
|
55
|
+
- name: Build wheels
|
|
56
|
+
run: python -m cibuildwheel --output-dir wheelhouse
|
|
57
|
+
env:
|
|
58
|
+
CIBW_BEFORE_ALL_LINUX: "yum install -y clang"
|
|
59
|
+
CIBW_ENVIRONMENT_LINUX: "CC=clang CXX=clang++"
|
|
60
|
+
CIBW_MANYLINUX_X86_64_IMAGE: "manylinux_2_28"
|
|
61
|
+
CIBW_MANYLINUX_AARCH64_IMAGE: "manylinux_2_28"
|
|
62
|
+
CIBW_BUILD: "${{ matrix.pybuilds }}-*" # Use matrix.pybuilds and matrix.arch
|
|
63
|
+
CIBW_ARCHS_MACOS: ${{ matrix.arch }}
|
|
64
|
+
CIBW_SKIP: "cp*-manylinux_i686 cp*-musllinux* cp*-win32"
|
|
65
|
+
- name: Upload Artifact
|
|
66
|
+
uses: actions/upload-artifact@v4
|
|
67
|
+
continue-on-error: true # Important: Continue if upload fails
|
|
68
|
+
with:
|
|
69
|
+
# Include pybuilds in the artifact name
|
|
70
|
+
name: wheels-${{ matrix.os }}-${{ matrix.arch }}-${{ matrix.pybuilds }}
|
|
71
|
+
path: ./wheelhouse/*.whl
|
|
72
|
+
if-no-files-found: error # Fail if no wheels are found
|
|
73
|
+
compression-level: 6
|
|
74
|
+
overwrite: false
|
|
75
|
+
include-hidden-files: false
|
|
76
|
+
|
|
77
|
+
check_version:
|
|
78
|
+
name: Check for a version bump
|
|
79
|
+
# Only a push to main can release; PRs and workflow_dispatch never do.
|
|
80
|
+
if: github.event_name == 'push' && github.ref == 'refs/heads/main'
|
|
81
|
+
runs-on: ubuntu-latest
|
|
82
|
+
outputs:
|
|
83
|
+
should_release: ${{ steps.check.outputs.should_release }}
|
|
84
|
+
version: ${{ steps.check.outputs.version }}
|
|
85
|
+
prerelease: ${{ steps.check.outputs.prerelease }}
|
|
86
|
+
steps:
|
|
87
|
+
- uses: actions/checkout@v4
|
|
88
|
+
with:
|
|
89
|
+
# Need history to read pyproject.toml as of the previous commit
|
|
90
|
+
fetch-depth: 0
|
|
91
|
+
- uses: actions/setup-python@v5
|
|
92
|
+
with:
|
|
93
|
+
python-version: '3.12' # tomllib needs >=3.11
|
|
94
|
+
- name: Compare pyproject.toml version against the previous commit
|
|
95
|
+
id: check
|
|
96
|
+
env:
|
|
97
|
+
BEFORE: ${{ github.event.before }}
|
|
98
|
+
run: |
|
|
99
|
+
set -euo pipefail
|
|
100
|
+
|
|
101
|
+
# Read project.version from pyproject.toml at a given revision
|
|
102
|
+
# (empty revision = the working tree)
|
|
103
|
+
read_version() {
|
|
104
|
+
if [ -z "${1:-}" ]; then cat pyproject.toml; else git show "$1:pyproject.toml"; fi \
|
|
105
|
+
| python3 -c 'import sys,tomllib; print(tomllib.loads(sys.stdin.read())["project"]["version"])'
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
version=$(read_version)
|
|
109
|
+
echo "version=$version" >> "$GITHUB_OUTPUT"
|
|
110
|
+
# PEP 440 pre-releases (aN/bN/rcN/.devN) are flagged as such on GitHub.
|
|
111
|
+
# Note `.postN` is deliberately not a pre-release.
|
|
112
|
+
if printf '%s' "$version" | grep -Eq '(a[0-9]+|b[0-9]+|rc[0-9]+|\.dev[0-9]*)$'; then
|
|
113
|
+
echo "prerelease=true" >> "$GITHUB_OUTPUT"
|
|
114
|
+
else
|
|
115
|
+
echo "prerelease=false" >> "$GITHUB_OUTPUT"
|
|
116
|
+
fi
|
|
117
|
+
|
|
118
|
+
# `before` is all-zeros when the branch is first created, and can point
|
|
119
|
+
# at a vanished commit after a force-push; fall back to the first parent.
|
|
120
|
+
base="$BEFORE"
|
|
121
|
+
if [ -z "$base" ] || [ "$base" = "0000000000000000000000000000000000000000" ] \
|
|
122
|
+
|| ! git cat-file -e "$base^{commit}" 2>/dev/null; then
|
|
123
|
+
base=$(git rev-parse --verify --quiet HEAD^ || true)
|
|
124
|
+
fi
|
|
125
|
+
if [ -z "$base" ]; then
|
|
126
|
+
echo "No previous commit to compare against; not releasing."
|
|
127
|
+
echo "should_release=false" >> "$GITHUB_OUTPUT"
|
|
128
|
+
exit 0
|
|
129
|
+
fi
|
|
130
|
+
|
|
131
|
+
previous=$(read_version "$base")
|
|
132
|
+
echo "previous version: $previous"
|
|
133
|
+
echo "current version: $version"
|
|
134
|
+
if [ "$version" = "$previous" ]; then
|
|
135
|
+
echo "Version unchanged; not releasing."
|
|
136
|
+
echo "should_release=false" >> "$GITHUB_OUTPUT"
|
|
137
|
+
exit 0
|
|
138
|
+
fi
|
|
139
|
+
|
|
140
|
+
# Belt and braces: PyPI refuses to overwrite an existing version, and a
|
|
141
|
+
# re-run of this workflow would otherwise try to. Also covers the case
|
|
142
|
+
# where a bump was published by some other route.
|
|
143
|
+
if curl -sfL -o /dev/null "https://pypi.org/pypi/libigl/$version/json"; then
|
|
144
|
+
echo "libigl $version is already on PyPI; not releasing."
|
|
145
|
+
echo "should_release=false" >> "$GITHUB_OUTPUT"
|
|
146
|
+
exit 0
|
|
147
|
+
fi
|
|
148
|
+
|
|
149
|
+
echo "Version bumped $previous -> $version; releasing."
|
|
150
|
+
echo "should_release=true" >> "$GITHUB_OUTPUT"
|
|
151
|
+
|
|
152
|
+
release_artifacts:
|
|
153
|
+
name: Publish ${{ needs.check_version.outputs.version }} to PyPI
|
|
154
|
+
needs: [check_version, build_sdist, build_wheels]
|
|
155
|
+
if: needs.check_version.outputs.should_release == 'true'
|
|
156
|
+
runs-on: ubuntu-latest
|
|
157
|
+
permissions:
|
|
158
|
+
id-token: write # for PyPI trusted publishing
|
|
159
|
+
contents: write # to create the tag and GitHub release
|
|
160
|
+
steps:
|
|
161
|
+
- uses: actions/download-artifact@v4
|
|
162
|
+
with:
|
|
163
|
+
path: ./artifacts
|
|
164
|
+
merge-multiple: true
|
|
165
|
+
- run: ls -R ./artifacts
|
|
166
|
+
- name: Tag and create a GitHub release
|
|
167
|
+
uses: ncipollo/release-action@v1
|
|
168
|
+
with:
|
|
169
|
+
tag: ${{ needs.check_version.outputs.version }}
|
|
170
|
+
commit: ${{ github.sha }}
|
|
171
|
+
name: ${{ needs.check_version.outputs.version }}
|
|
172
|
+
prerelease: ${{ needs.check_version.outputs.prerelease }}
|
|
173
|
+
allowUpdates: true
|
|
174
|
+
# Auto-populate the release body with the merged PRs since the
|
|
175
|
+
# previous tag (curated highlights live in CHANGELOG.md).
|
|
176
|
+
generateReleaseNotes: true
|
|
177
|
+
artifacts: "./artifacts/**/*"
|
|
178
|
+
token: ${{ secrets.GITHUB_TOKEN }}
|
|
179
|
+
- name: Publish to PyPI
|
|
180
|
+
uses: pypa/gh-action-pypi-publish@v1.13.0
|
|
181
|
+
with:
|
|
182
|
+
packages-dir: ./artifacts
|
|
183
|
+
skip-existing: true
|
|
@@ -5,6 +5,7 @@ external
|
|
|
5
5
|
bin
|
|
6
6
|
bin_rel
|
|
7
7
|
build
|
|
8
|
+
build-full
|
|
8
9
|
|
|
9
10
|
tutorial/data
|
|
10
11
|
tutorial/.ipynb_*
|
|
@@ -18,7 +19,7 @@ __pycache__
|
|
|
18
19
|
igl.egg-info
|
|
19
20
|
libigl.egg-info
|
|
20
21
|
*.code-workspace
|
|
21
|
-
out
|
|
22
|
+
out.*
|
|
22
23
|
test.off
|
|
23
24
|
.vscode
|
|
24
25
|
|
|
@@ -40,3 +41,5 @@ junit
|
|
|
40
41
|
*~
|
|
41
42
|
dist/
|
|
42
43
|
igl/*
|
|
44
|
+
CLAUDE.md
|
|
45
|
+
wheelhouse/
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
All notable, user-facing changes to the `libigl` Python bindings are recorded
|
|
4
|
+
here. The project loosely follows [Semantic Versioning](https://semver.org) and
|
|
5
|
+
version numbers match the [PyPI releases](https://pypi.org/project/libigl/#history).
|
|
6
|
+
|
|
7
|
+
> Historical note: releases up to and including 2.6.2 were published to PyPI
|
|
8
|
+
> without matching git tags or GitHub releases (see #235). Starting with 2.6.3,
|
|
9
|
+
> pushing a version bump to `main` automatically creates the git tag, the GitHub
|
|
10
|
+
> release, and the PyPI upload together (#313). The 2.6.3 section below therefore
|
|
11
|
+
> folds in changes first shipped in the tag-less interim 2.6.2 release, i.e. it
|
|
12
|
+
> covers everything since the last tagged release, 2.6.1.
|
|
13
|
+
|
|
14
|
+
## 2.6.3 — 2026-08-31
|
|
15
|
+
|
|
16
|
+
### Added
|
|
17
|
+
|
|
18
|
+
New function bindings:
|
|
19
|
+
|
|
20
|
+
- **Distances & closest points:** `simplex_simplex_squared_distance`,
|
|
21
|
+
`point_simplex_squared_distance`, `offset_surface`.
|
|
22
|
+
- **Rotations / ARAP:** `polar_svd3x3`, `fit_rotations`.
|
|
23
|
+
- **Quad meshes:** `quad_planarity`, `planarize_quad_mesh`, `quad_edges`.
|
|
24
|
+
- **Curves & mesh topology:** `ramer_douglas_peucker`, `path_to_edges`,
|
|
25
|
+
`connect_boundary_to_infinity`, `smooth_corner_adjacency`,
|
|
26
|
+
`per_face_normals_stable`, `resolve_duplicated_faces`, `vertex_components`,
|
|
27
|
+
`is_vertex_manifold`, `is_intrinsic_delaunay`.
|
|
28
|
+
- **Remeshing:** `triangle.remesh_at_points`.
|
|
29
|
+
- **Winding numbers & distance fields:** `swept_volume`,
|
|
30
|
+
`swept_volume_bounding_box`, `swept_volume_signed_distance`,
|
|
31
|
+
point-cloud and pre-built-tree support for `fast_winding_number`,
|
|
32
|
+
`lipschitz_octree`, `unique_sparse_voxel_corners`, and an edge→vertex (`E2V`)
|
|
33
|
+
output for sparse `marching_cubes`.
|
|
34
|
+
- **Ambient occlusion:** core `ambient_occlusion` binding.
|
|
35
|
+
- **Solvers & energies:** `active_set`, `boundary_conditions`,
|
|
36
|
+
`harmonic_integrated_from_laplacian_and_mass`, Hessian and Hessian-energy
|
|
37
|
+
operators, and cross-field bindings.
|
|
38
|
+
- **Bounding boxes:** oriented-bounding-box functions, `bounding_box_diagonal`.
|
|
39
|
+
- **Curves & predicates:** cubic Bézier evaluation and roots, additional
|
|
40
|
+
`igl::predicates` bindings, `igl::spectra` bindings, and
|
|
41
|
+
`lexicographic_triangulation`.
|
|
42
|
+
- **Misc:** `centroid`, a `face_areas` overload taking intrinsic edge lengths,
|
|
43
|
+
and an optional `seed` parameter for `random_points_on_mesh`.
|
|
44
|
+
|
|
45
|
+
### Changed
|
|
46
|
+
|
|
47
|
+
- Bumped the bundled libigl to
|
|
48
|
+
[`f68f01c2`](https://github.com/libigl/libigl/commit/f68f01c23ac82351e2543ce8c529b6d4c89fdf16).
|
|
49
|
+
- `cycodebase` distance queries can now reuse a prebuilt AABB tree / precomputed
|
|
50
|
+
bases for fast repeated queries.
|
|
51
|
+
- Releases are now cut by pushing a version bump to `main`, which tags the
|
|
52
|
+
commit and creates the GitHub release and PyPI upload in one step (#313).
|
|
53
|
+
|
|
54
|
+
### Packaging / CI
|
|
55
|
+
|
|
56
|
+
- Added CPython 3.13 wheels.
|
|
57
|
+
- Switched the Linux CI builds to Clang to fix a 2.6.1 performance regression.
|
|
58
|
+
- Bumped `pypa/gh-action-pypi-publish` to 1.13.0.
|
|
59
|
+
|
|
60
|
+
## 2.6.2 — PyPI only
|
|
61
|
+
|
|
62
|
+
Interim release published to PyPI on 2025 without a git tag or GitHub release.
|
|
63
|
+
Its changes are folded into the 2.6.3 entry above.
|
|
64
|
+
|
|
65
|
+
## 2.6.1 — 2025-05-15
|
|
66
|
+
|
|
67
|
+
Last release before this changelog was introduced. See the
|
|
68
|
+
[git history](https://github.com/libigl/libigl-python-bindings/commits/2.6.1)
|
|
69
|
+
and the [PyPI release history](https://pypi.org/project/libigl/#history) for
|
|
70
|
+
earlier changes.
|
|
@@ -36,16 +36,31 @@ FetchContent_Declare(
|
|
|
36
36
|
)
|
|
37
37
|
FetchContent_MakeAvailable(nanobind)
|
|
38
38
|
|
|
39
|
+
# Pin Eigen to 3.4.0. Recent libigl bumped its Eigen dependency to 5.0.1, whose
|
|
40
|
+
# stricter ScalarBinaryOpTraits rejects the int64-vs-int comparisons in some
|
|
41
|
+
# libigl headers (e.g. unique_edge_map), which the 64-bit-index Python bindings
|
|
42
|
+
# instantiate. Declaring Eigen first makes FetchContent use this version instead
|
|
43
|
+
# of the one requested by libigl's own recipe.
|
|
44
|
+
FetchContent_Declare(
|
|
45
|
+
eigen
|
|
46
|
+
GIT_REPOSITORY https://gitlab.com/libeigen/eigen.git
|
|
47
|
+
GIT_TAG tags/3.4.0
|
|
48
|
+
GIT_SHALLOW TRUE
|
|
49
|
+
)
|
|
50
|
+
|
|
39
51
|
# Download and set up libigl
|
|
40
52
|
option(LIBIGL_COPYLEFT_CORE "Build target igl_copyleft::core" ON)
|
|
41
53
|
option(LIBIGL_COPYLEFT_CGAL "Build target igl_copyleft::cgal" ON)
|
|
42
54
|
option(LIBIGL_EMBREE "Build target igl::embree" ON)
|
|
43
55
|
option(LIBIGL_COPYLEFT_TETGEN "Build target igl_copyleft::tetgen" ON)
|
|
44
56
|
option(LIBIGL_RESTRICTED_TRIANGLE "Build target igl_restricted::triangle" ON)
|
|
57
|
+
option(LIBIGL_SPECTRA "Build igl::spectra bindings" ON)
|
|
58
|
+
option(LIBIGL_PREDICATES "Build igl::predicates bindings" ON)
|
|
59
|
+
option(LIBIGL_CYCODEBASE "Build igl::cycodebase bindings" ON)
|
|
45
60
|
FetchContent_Declare(
|
|
46
61
|
libigl
|
|
47
62
|
GIT_REPOSITORY https://github.com/libigl/libigl.git
|
|
48
|
-
GIT_TAG
|
|
63
|
+
GIT_TAG f68f01c23ac82351e2543ce8c529b6d4c89fdf16
|
|
49
64
|
)
|
|
50
65
|
FetchContent_MakeAvailable(libigl)
|
|
51
66
|
|
|
@@ -182,6 +197,14 @@ endif()
|
|
|
182
197
|
if(LIBIGL_RESTRICTED_TRIANGLE)
|
|
183
198
|
pyigl_include("restricted" "triangle")
|
|
184
199
|
endif()
|
|
185
|
-
|
|
200
|
+
if(LIBIGL_SPECTRA)
|
|
201
|
+
pyigl_include("" "spectra")
|
|
202
|
+
endif()
|
|
203
|
+
if(LIBIGL_PREDICATES)
|
|
204
|
+
pyigl_include("" "predicates")
|
|
205
|
+
endif()
|
|
206
|
+
if(LIBIGL_CYCODEBASE)
|
|
207
|
+
pyigl_include("" "cycodebase")
|
|
208
|
+
endif()
|
|
186
209
|
|
|
187
210
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: libigl
|
|
3
|
-
Version: 2.6.
|
|
3
|
+
Version: 2.6.3
|
|
4
4
|
Summary: libigl: A simple C++ geometry processing library
|
|
5
5
|
Author-Email: Alec Jacobson <alecjacobson@gmail.com>
|
|
6
6
|
Classifier: License :: OSI Approved :: Mozilla Public License 2.0 (MPL 2.0)
|
|
@@ -48,7 +48,7 @@ libigl_version = importlib.metadata.version('libigl')
|
|
|
48
48
|
The version of libigl is defined in the [pyproject.toml](./pyproject.toml) file.
|
|
49
49
|
|
|
50
50
|
|
|
51
|
-
## Compiling and modifying the
|
|
51
|
+
## Compiling and modifying the bindings
|
|
52
52
|
|
|
53
53
|
According to the [scikit-build-core documentation](https://scikit-build-core.readthedocs.io/en/latest/configuration.html#editable-installs), the way to make an editable (incremental) build is to:
|
|
54
54
|
|
|
@@ -81,6 +81,20 @@ test in `tests/test_all.py` to ensure the binding can at least be called as
|
|
|
81
81
|
expected.
|
|
82
82
|
|
|
83
83
|
|
|
84
|
+
### Packaging a wheel from an existing build
|
|
85
|
+
|
|
86
|
+
If you already have a compiled build directory, you can package it into a
|
|
87
|
+
`.whl` without recompiling and install that wheel into other virtual
|
|
88
|
+
environments on the same machine:
|
|
89
|
+
|
|
90
|
+
```
|
|
91
|
+
python -m pip wheel --no-build-isolation --no-deps -Cbuild-dir=build -w wheelhouse .
|
|
92
|
+
pip install wheelhouse/libigl-*.whl
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
The `--no-deps` flag skips bundling numpy/scipy (the target environment must
|
|
96
|
+
have them already). No compiler or CMake is required in the target environment.
|
|
97
|
+
|
|
84
98
|
## Testing cibuildwheel locally
|
|
85
99
|
|
|
86
100
|
Install whichever version of Python from the [official website](https://www.python.org/downloads/) and then run:
|
|
@@ -101,7 +115,9 @@ A successful [.github/workflows/wheels.yml](.github/workflows/wheels.yml) run wi
|
|
|
101
115
|
|
|
102
116
|
Then these can be uploaded to pypi using:
|
|
103
117
|
|
|
104
|
-
|
|
118
|
+
for f in wheelhouse/*/*.whl wheelhouse/*/*.tar.gz; do
|
|
119
|
+
python3 -m twine upload --repository pypi "$f" || echo "Skipping failed upload: $f"
|
|
120
|
+
done
|
|
105
121
|
|
|
106
122
|
## Acknowledgements
|
|
107
123
|
|
|
@@ -36,7 +36,7 @@ libigl_version = importlib.metadata.version('libigl')
|
|
|
36
36
|
The version of libigl is defined in the [pyproject.toml](./pyproject.toml) file.
|
|
37
37
|
|
|
38
38
|
|
|
39
|
-
## Compiling and modifying the
|
|
39
|
+
## Compiling and modifying the bindings
|
|
40
40
|
|
|
41
41
|
According to the [scikit-build-core documentation](https://scikit-build-core.readthedocs.io/en/latest/configuration.html#editable-installs), the way to make an editable (incremental) build is to:
|
|
42
42
|
|
|
@@ -69,6 +69,20 @@ test in `tests/test_all.py` to ensure the binding can at least be called as
|
|
|
69
69
|
expected.
|
|
70
70
|
|
|
71
71
|
|
|
72
|
+
### Packaging a wheel from an existing build
|
|
73
|
+
|
|
74
|
+
If you already have a compiled build directory, you can package it into a
|
|
75
|
+
`.whl` without recompiling and install that wheel into other virtual
|
|
76
|
+
environments on the same machine:
|
|
77
|
+
|
|
78
|
+
```
|
|
79
|
+
python -m pip wheel --no-build-isolation --no-deps -Cbuild-dir=build -w wheelhouse .
|
|
80
|
+
pip install wheelhouse/libigl-*.whl
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
The `--no-deps` flag skips bundling numpy/scipy (the target environment must
|
|
84
|
+
have them already). No compiler or CMake is required in the target environment.
|
|
85
|
+
|
|
72
86
|
## Testing cibuildwheel locally
|
|
73
87
|
|
|
74
88
|
Install whichever version of Python from the [official website](https://www.python.org/downloads/) and then run:
|
|
@@ -89,7 +103,9 @@ A successful [.github/workflows/wheels.yml](.github/workflows/wheels.yml) run wi
|
|
|
89
103
|
|
|
90
104
|
Then these can be uploaded to pypi using:
|
|
91
105
|
|
|
92
|
-
|
|
106
|
+
for f in wheelhouse/*/*.whl wheelhouse/*/*.tar.gz; do
|
|
107
|
+
python3 -m twine upload --repository pypi "$f" || echo "Skipping failed upload: $f"
|
|
108
|
+
done
|
|
93
109
|
|
|
94
110
|
## Acknowledgements
|
|
95
111
|
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
#pragma once
|
|
2
|
+
#include "default_types.h"
|
|
3
|
+
#include <Eigen/Geometry>
|
|
4
|
+
#include <stdexcept>
|
|
5
|
+
#include <string>
|
|
6
|
+
#include <vector>
|
|
7
|
+
|
|
8
|
+
namespace pyigl
|
|
9
|
+
{
|
|
10
|
+
typedef Eigen::Transform<Numeric,3,Eigen::Affine> AffineN3;
|
|
11
|
+
typedef std::vector<AffineN3,Eigen::aligned_allocator<AffineN3> > AffineN3List;
|
|
12
|
+
|
|
13
|
+
/// Convert a Python list of 4×4 (or 3×4) matrices into the list of
|
|
14
|
+
/// Eigen::Transforms that the igl::swept_volume* functions expect.
|
|
15
|
+
///
|
|
16
|
+
/// @param[in] transforms #transforms list of 4×4 or 3×4 matrices
|
|
17
|
+
/// @param[in] caller name used to prefix error messages
|
|
18
|
+
/// @return #transforms list of affine transformations
|
|
19
|
+
inline AffineN3List parse_transforms(
|
|
20
|
+
const std::vector<Eigen::MatrixXN> &transforms,
|
|
21
|
+
const char * const caller)
|
|
22
|
+
{
|
|
23
|
+
if(transforms.empty())
|
|
24
|
+
{
|
|
25
|
+
throw std::runtime_error(
|
|
26
|
+
std::string(caller)+": transforms must be non-empty");
|
|
27
|
+
}
|
|
28
|
+
AffineN3List T;
|
|
29
|
+
T.reserve(transforms.size());
|
|
30
|
+
for(const auto & M : transforms)
|
|
31
|
+
{
|
|
32
|
+
if(M.cols() != 4 || (M.rows() != 3 && M.rows() != 4))
|
|
33
|
+
{
|
|
34
|
+
throw std::runtime_error(
|
|
35
|
+
std::string(caller)+": each transform must be 3×4 or 4×4");
|
|
36
|
+
}
|
|
37
|
+
AffineN3 Ti;
|
|
38
|
+
// A 3×4 input leaves the implicit bottom row as [0 0 0 1]
|
|
39
|
+
Ti.matrix().setIdentity();
|
|
40
|
+
Ti.matrix().topRows(M.rows()) = M;
|
|
41
|
+
T.emplace_back(Ti);
|
|
42
|
+
}
|
|
43
|
+
return T;
|
|
44
|
+
}
|
|
45
|
+
}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
# libigl-python-bindings memory
|
|
2
|
+
|
|
3
|
+
## Project
|
|
4
|
+
Python bindings for libigl C++ geometry library using nanobind + scikit-build-core.
|
|
5
|
+
C++ libigl source lives at `build/_deps/libigl-src/include/igl/` (fetched by CMake).
|
|
6
|
+
|
|
7
|
+
## Binding Architecture
|
|
8
|
+
- Each `src/<name>.cpp` → corresponds to `build/_deps/libigl-src/include/igl/<name>.h`
|
|
9
|
+
- CMake globs all `.cpp` files, generates `BINDING_DECLARATIONS.in` / `BINDING_INVOCATIONS.in`, `module.cpp` includes them — adding a `.cpp` auto-registers it
|
|
10
|
+
- Types centralized in `include/default_types.h`: `Numeric=double`, `Integer=int64_t`, `RowMajor`
|
|
11
|
+
- Zero-copy input: `nb::DRef<const Eigen::MatrixXN>` (requires C-contiguous float64)
|
|
12
|
+
- Multiple C++ output params → `std::make_tuple(...)` → Python tuple unpacking
|
|
13
|
+
- Sparse output: `Eigen::SparseMatrixN` + `<nanobind/eigen/sparse.h>` → scipy CSR automatically
|
|
14
|
+
|
|
15
|
+
## Submodules
|
|
16
|
+
- `src/` → `igl` (core, MPL2)
|
|
17
|
+
- `src/copyleft/` → `igl.copyleft` (GPL)
|
|
18
|
+
- `src/copyleft/cgal/` → `igl.copyleft.cgal`
|
|
19
|
+
- `src/embree/` → `igl.embree`
|
|
20
|
+
- `src/triangle/` → `igl.triangle`
|
|
21
|
+
|
|
22
|
+
## Key Gotchas
|
|
23
|
+
- numpy `int32`/`float32` silently copies; always use `int64`/`float64` in tests
|
|
24
|
+
- In-place mutation: use `Eigen::Ref<>` + `.noconvert()` on the arg
|
|
25
|
+
- Class templates must be typedef'd to concrete type before `nb::class_<>`
|
|
26
|
+
- Sparse inputs must be `scipy.sparse.csr_matrix`
|
|
@@ -1,9 +1,8 @@
|
|
|
1
1
|
[build-system]
|
|
2
2
|
requires = [
|
|
3
|
-
"cmake>=3.16",
|
|
4
3
|
"nanobind >=1.3.2",
|
|
5
4
|
"numpy>=2.0.0; python_version >= '3.9'",
|
|
6
|
-
"numpy; python_version < '3.9'",
|
|
5
|
+
"numpy<2.0.0; python_version < '3.9'",
|
|
7
6
|
"packaging",
|
|
8
7
|
"scikit-build-core >=0.10",
|
|
9
8
|
"scipy",
|
|
@@ -14,7 +13,7 @@ build-backend = "scikit_build_core.build"
|
|
|
14
13
|
|
|
15
14
|
[project]
|
|
16
15
|
name = "libigl"
|
|
17
|
-
version = "2.6.
|
|
16
|
+
version = "2.6.3"
|
|
18
17
|
description = "libigl: A simple C++ geometry processing library"
|
|
19
18
|
readme = "README.md"
|
|
20
19
|
requires-python = ">=3.8"
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
#include "default_types.h"
|
|
2
|
+
#include <igl/accumarray.h>
|
|
3
|
+
#include <nanobind/nanobind.h>
|
|
4
|
+
#include <nanobind/eigen/dense.h>
|
|
5
|
+
|
|
6
|
+
namespace nb = nanobind;
|
|
7
|
+
using namespace nb::literals;
|
|
8
|
+
|
|
9
|
+
namespace pyigl
|
|
10
|
+
{
|
|
11
|
+
auto accumarray_V(
|
|
12
|
+
const nb::DRef<const Eigen::MatrixXI> &S,
|
|
13
|
+
const nb::DRef<const Eigen::MatrixXN> &V)
|
|
14
|
+
{
|
|
15
|
+
// Copy to compact column vectors so single-index (i) access works
|
|
16
|
+
const Eigen::VectorXI s = S.reshaped();
|
|
17
|
+
const Eigen::VectorXN v = V.reshaped();
|
|
18
|
+
Eigen::VectorXN A;
|
|
19
|
+
igl::accumarray(s, v, A);
|
|
20
|
+
return A;
|
|
21
|
+
}
|
|
22
|
+
auto accumarray_val(
|
|
23
|
+
const nb::DRef<const Eigen::MatrixXI> &S,
|
|
24
|
+
const Numeric val)
|
|
25
|
+
{
|
|
26
|
+
const Eigen::VectorXI s = S.reshaped();
|
|
27
|
+
Eigen::VectorXN A;
|
|
28
|
+
igl::accumarray(s, val, A);
|
|
29
|
+
return A;
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
void bind_accumarray(nb::module_ &m)
|
|
34
|
+
{
|
|
35
|
+
m.def("accumarray", &pyigl::accumarray_V, "S"_a, "V"_a,
|
|
36
|
+
R"(Accumulate values V at subscripts S. Like MATLAB's accumarray.
|
|
37
|
+
|
|
38
|
+
@param[in] S #S list of subscripts (integer indices)
|
|
39
|
+
@param[in] V #S list of values
|
|
40
|
+
@return A max(S)+1 list of accumulated (summed) values)");
|
|
41
|
+
|
|
42
|
+
m.def("accumarray", &pyigl::accumarray_val, "S"_a, "val"_a,
|
|
43
|
+
R"(Accumulate a constant value at subscripts S. Like MATLAB's accumarray.
|
|
44
|
+
|
|
45
|
+
@param[in] S #S list of subscripts (integer indices)
|
|
46
|
+
@param[in] val scalar value to accumulate at each subscript
|
|
47
|
+
@return A max(S)+1 list of accumulated (summed) values)");
|
|
48
|
+
}
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
#include "default_types.h"
|
|
2
|
+
#include <igl/active_set.h>
|
|
3
|
+
#include <nanobind/nanobind.h>
|
|
4
|
+
#include <nanobind/ndarray.h>
|
|
5
|
+
#include <nanobind/eigen/dense.h>
|
|
6
|
+
#include <nanobind/eigen/sparse.h>
|
|
7
|
+
|
|
8
|
+
namespace nb = nanobind;
|
|
9
|
+
using namespace nb::literals;
|
|
10
|
+
|
|
11
|
+
namespace pyigl
|
|
12
|
+
{
|
|
13
|
+
// Wrapper for active_set function
|
|
14
|
+
auto active_set(
|
|
15
|
+
const Eigen::SparseMatrixN &A,
|
|
16
|
+
const nb::DRef<const Eigen::VectorXN> &B,
|
|
17
|
+
const nb::DRef<const Eigen::VectorXI> &known,
|
|
18
|
+
const nb::DRef<const Eigen::VectorXN> &Y,
|
|
19
|
+
const Eigen::SparseMatrixN &Aeq,
|
|
20
|
+
const nb::DRef<const Eigen::VectorXN> &Beq,
|
|
21
|
+
const Eigen::SparseMatrixN &Aieq,
|
|
22
|
+
const nb::DRef<const Eigen::VectorXN> &Bieq,
|
|
23
|
+
const nb::DRef<const Eigen::VectorXN> &lx,
|
|
24
|
+
const nb::DRef<const Eigen::VectorXN> &ux,
|
|
25
|
+
const bool Auu_pd,
|
|
26
|
+
const int max_iter,
|
|
27
|
+
const double inactive_threshold,
|
|
28
|
+
const double constraint_threshold,
|
|
29
|
+
const double solution_diff_threshold)
|
|
30
|
+
{
|
|
31
|
+
igl::active_set_params params;
|
|
32
|
+
params.Auu_pd = Auu_pd;
|
|
33
|
+
params.max_iter = max_iter;
|
|
34
|
+
params.inactive_threshold = inactive_threshold;
|
|
35
|
+
params.constraint_threshold = constraint_threshold;
|
|
36
|
+
params.solution_diff_threshold = solution_diff_threshold;
|
|
37
|
+
|
|
38
|
+
Eigen::VectorXN Z;
|
|
39
|
+
igl::SolverStatus status = igl::active_set(
|
|
40
|
+
A, B, known, Y, Aeq, Beq, Aieq, Bieq, lx, ux, params, Z);
|
|
41
|
+
|
|
42
|
+
if(status == igl::SOLVER_STATUS_ERROR)
|
|
43
|
+
{
|
|
44
|
+
throw std::runtime_error("active_set: solver failed");
|
|
45
|
+
}
|
|
46
|
+
return Z;
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
// Bind the wrapper to the Python module
|
|
51
|
+
void bind_active_set(nb::module_ &m)
|
|
52
|
+
{
|
|
53
|
+
igl::active_set_params params;
|
|
54
|
+
m.def(
|
|
55
|
+
"active_set",
|
|
56
|
+
&pyigl::active_set,
|
|
57
|
+
"A"_a,
|
|
58
|
+
"B"_a,
|
|
59
|
+
"known"_a = Eigen::VectorXI(),
|
|
60
|
+
"Y"_a = Eigen::VectorXN(),
|
|
61
|
+
"Aeq"_a = Eigen::SparseMatrixN(),
|
|
62
|
+
"Beq"_a = Eigen::VectorXN(),
|
|
63
|
+
"Aieq"_a = Eigen::SparseMatrixN(),
|
|
64
|
+
"Bieq"_a = Eigen::VectorXN(),
|
|
65
|
+
"lx"_a = Eigen::VectorXN(),
|
|
66
|
+
"ux"_a = Eigen::VectorXN(),
|
|
67
|
+
"Auu_pd"_a = params.Auu_pd,
|
|
68
|
+
"max_iter"_a = params.max_iter,
|
|
69
|
+
"inactive_threshold"_a = params.inactive_threshold,
|
|
70
|
+
"constraint_threshold"_a = params.constraint_threshold,
|
|
71
|
+
"solution_diff_threshold"_a = params.solution_diff_threshold,
|
|
72
|
+
R"(Minimize a convex quadratic energy subject to linear constraints.
|
|
73
|
+
|
|
74
|
+
Solves:
|
|
75
|
+
min 0.5 * Z' * A * Z + Z' * B
|
|
76
|
+
Z
|
|
77
|
+
subject to
|
|
78
|
+
Z(known) = Y
|
|
79
|
+
Aeq * Z = Beq
|
|
80
|
+
Aieq * Z <= Bieq
|
|
81
|
+
lx <= Z <= ux
|
|
82
|
+
|
|
83
|
+
@param[in] A n by n matrix of quadratic coefficients
|
|
84
|
+
@param[in] B n by 1 column of linear coefficients
|
|
85
|
+
@param[in] known list of indices to known rows in Z
|
|
86
|
+
@param[in] Y list of fixed values corresponding to known rows in Z
|
|
87
|
+
@param[in] Aeq meq by n list of linear equality constraint coefficients
|
|
88
|
+
@param[in] Beq meq by 1 list of linear equality constraint constant values
|
|
89
|
+
@param[in] Aieq mieq by n list of linear inequality constraint coefficients
|
|
90
|
+
@param[in] Bieq mieq by 1 list of linear inequality constraint constant values
|
|
91
|
+
@param[in] lx n by 1 list of lower bounds [] implies -Inf
|
|
92
|
+
@param[in] ux n by 1 list of upper bounds [] implies Inf
|
|
93
|
+
@param[in] Auu_pd whether Auu is positive definite {false}
|
|
94
|
+
@param[in] max_iter maximum number of iterations {100}
|
|
95
|
+
@param[in] inactive_threshold threshold on Lagrange multiplier values {1e-14}
|
|
96
|
+
@param[in] constraint_threshold threshold on constraint violation {1e-14}
|
|
97
|
+
@param[in] solution_diff_threshold threshold on solution difference {1e-14}
|
|
98
|
+
@return Z n by 1 solution vector)"
|
|
99
|
+
);
|
|
100
|
+
}
|