libigl 2.5.4.dev0__tar.gz → 2.6.1__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.5.4.dev0 → libigl-2.6.1}/.github/workflows/pip.yml +5 -5
- libigl-2.6.1/.github/workflows/wheels.yml +91 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/CMakeLists.txt +9 -10
- libigl-2.6.1/PKG-INFO +117 -0
- libigl-2.6.1/README.md +105 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/cmake/Warnings.cmake +1 -1
- {libigl-2.5.4.dev0 → libigl-2.6.1}/priority.txt +0 -3
- {libigl-2.5.4.dev0 → libigl-2.6.1}/pyproject.toml +7 -1
- libigl-2.6.1/src/all_pairs_distances.cpp +37 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/src/copyleft/cgal/remesh_self_intersections.cpp +4 -2
- libigl-2.6.1/src/internal_angles.cpp +31 -0
- libigl-2.6.1/src/is_vertex_manifold.cpp +38 -0
- libigl-2.6.1/src/map_vertices_to_circle.cpp +33 -0
- libigl-2.6.1/src/sparse_map_noop.cpp +27 -0
- libigl-2.6.1/src/sparse_map_shape.cpp +29 -0
- libigl-2.6.1/src/sparse_noop.cpp +27 -0
- libigl-2.6.1/src/sparse_shape.cpp +29 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/tests/test_all.py +5 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/tutorial/igl_docs.md +17 -1
- libigl-2.5.4.dev0/.github/workflows/wheels.yml +0 -70
- libigl-2.5.4.dev0/PKG-INFO +0 -56
- libigl-2.5.4.dev0/README.md +0 -44
- {libigl-2.5.4.dev0 → libigl-2.6.1}/.gitignore +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/LICENSE.GPL +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/LICENSE.MPL2 +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/attic/copyleft/tetgen_tetrahedralize.cpp +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/attic/copyleft/triangle_triangulate.cpp +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/attic/skip/SolverStatus.cpp +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/attic/skip/WindingNumberMethod.cpp +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/attic/skip/angular_distance.cpp +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/attic/skip/canonical_quaternions.cpp +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/attic/skip/column_to_quats.cpp +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/attic/skip/comiso_nrosy.cpp +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/attic/skip/covariance_scatter_matrix.cpp +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/attic/skip/file_contents_as_string.cpp +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/attic/skip/fit_rotations.cpp +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/attic/skip/frame_field_deformer.cpp +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/attic/skip/frame_to_cross_field.cpp +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/attic/skip/frustum.cpp +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/attic/skip/group_sum_matrix.cpp +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/attic/skip/harwell_boeing.cpp +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/attic/skip/histc.cpp +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/attic/skip/hsv_to_rgb.cpp +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/attic/skip/infinite_cost_stopping_condition.cpp +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/attic/skip/intersect.cpp +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/attic/skip/invert_diag.cpp +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/attic/skip/is_planar.cpp +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/attic/skip/limit_faces.cpp +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/attic/skip/line_field_missmatch.cpp +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/attic/skip/line_search.cpp +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/attic/skip/mat_to_quat.cpp +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/attic/skip/material_colors.cpp +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/attic/skip/max_faces_stopping_condition.cpp +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/attic/skip/min_quad_dense.cpp +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/attic/skip/normalize_quat.cpp +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/attic/skip/on_boundary.cpp +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/attic/skip/opengl2_draw_beach_ball.cpp +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/attic/skip/opengl2_draw_floor.cpp +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/attic/skip/opengl2_draw_mesh.cpp +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/attic/skip/opengl2_draw_point.cpp +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/attic/skip/opengl2_draw_rectangular_marquee.cpp +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/attic/skip/opengl2_draw_skeleton_3d.cpp +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/attic/skip/opengl2_draw_skeleton_vector_graphics.cpp +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/attic/skip/opengl2_flare_textures.cpp +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/attic/skip/opengl2_model_proj_viewport.cpp +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/attic/skip/opengl2_print_gl_get.cpp +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/attic/skip/opengl2_project.cpp +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/attic/skip/opengl2_right_axis.cpp +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/attic/skip/opengl2_shine_textures.cpp +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/attic/skip/opengl2_sort_triangles.cpp +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/attic/skip/opengl2_unproject.cpp +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/attic/skip/opengl2_unproject_to_zero_plane.cpp +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/attic/skip/opengl2_up_axis.cpp +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/attic/skip/opengl2_view_axis.cpp +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/attic/skip/opengl_create_shader_program.cpp +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/attic/skip/opengl_destroy_shader_program.cpp +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/attic/skip/opengl_gl_type_size.cpp +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/attic/skip/opengl_glfw_background_window.cpp +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/attic/skip/opengl_glfw_imgui_ImGuiHelpers.cpp +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/attic/skip/opengl_init_render_to_texture.cpp +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/attic/skip/opengl_load_shader.cpp +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/attic/skip/opengl_print_program_info_log.cpp +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/attic/skip/opengl_print_shader_info_log.cpp +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/attic/skip/opengl_report_gl_error.cpp +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/attic/skip/opengl_uniform_type_to_string.cpp +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/attic/skip/ortho.cpp +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/attic/skip/parallel_transport_angles.cpp +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/attic/skip/polar_svd.cpp +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/attic/skip/polar_svd3x3.cpp +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/attic/skip/qslim_optimal_collapse_edge_callbacks.cpp +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/attic/skip/quadric_binary_plus_operator.cpp +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/attic/skip/quat_conjugate.cpp +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/attic/skip/quat_mult.cpp +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/attic/skip/quat_to_axis_angle.cpp +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/attic/skip/quat_to_mat.cpp +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/attic/skip/quats_to_column.cpp +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/attic/skip/random_quaternion.cpp +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/attic/skip/readBF.cpp +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/attic/skip/readNODE.cpp +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/attic/skip/readPLY.cpp +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/attic/skip/readSTL.cpp +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/attic/skip/rgb_to_hsv.cpp +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/attic/skip/rotate_by_quat.cpp +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/attic/skip/rotation_matrix_from_directions.cpp +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/attic/skip/snap_to_canonical_view_quat.cpp +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/attic/skip/snap_to_fixed_up.cpp +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/attic/skip/sort_angles.cpp +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/attic/skip/sort_triangles.cpp +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/attic/skip/sort_vectors_ccw.cpp +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/attic/skip/svd3x3.cpp +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/attic/skip/svd3x3_avx.cpp +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/attic/skip/svd3x3_sse.cpp +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/attic/skip/trackball.cpp +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/attic/skip/transpose_blocks.cpp +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/attic/skip/unique_rows.cpp +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/attic/skip/voxel_grid.cpp +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/attic/skip/writePLY.cpp +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/attic/skip/writeSTL.cpp +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/attic/skip/writeWRL.cpp +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/attic/todo-old/MeshBooleanType.cpp +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/attic/todo-old/NormalType.cpp +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/attic/todo-old/collapse_edge.cpp +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/attic/todo-old/copyleft/copyleft_cgal_assign.cpp +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/attic/todo-old/copyleft/copyleft_cgal_assign_scalar.cpp +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/attic/todo-old/copyleft/copyleft_cgal_cell_adjacency.cpp +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/attic/todo-old/copyleft/copyleft_cgal_closest_facet.cpp +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/attic/todo-old/copyleft/copyleft_cgal_complex_to_mesh.cpp +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/attic/todo-old/copyleft/copyleft_cgal_component_inside_component.cpp +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/attic/todo-old/copyleft/copyleft_cgal_convex_hull.cpp +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/attic/todo-old/copyleft/copyleft_cgal_delaunay_triangulation.cpp +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/attic/todo-old/copyleft/copyleft_cgal_extract_cells.cpp +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/attic/todo-old/copyleft/copyleft_cgal_extract_feature.cpp +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/attic/todo-old/copyleft/copyleft_cgal_fast_winding_number.cpp +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/attic/todo-old/copyleft/copyleft_cgal_half_space_box.cpp +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/attic/todo-old/copyleft/copyleft_cgal_hausdorff.cpp +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/attic/todo-old/copyleft/copyleft_cgal_incircle.cpp +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/attic/todo-old/copyleft/copyleft_cgal_insert_into_cdt.cpp +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/attic/todo-old/copyleft/copyleft_cgal_insphere.cpp +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/attic/todo-old/copyleft/copyleft_cgal_intersect_other.cpp +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/attic/todo-old/copyleft/copyleft_cgal_intersect_with_half_space.cpp +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/attic/todo-old/copyleft/copyleft_cgal_lexicographic_triangulation.cpp +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/attic/todo-old/copyleft/copyleft_cgal_mesh_boolean.cpp +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/attic/todo-old/copyleft/copyleft_cgal_mesh_boolean_type_to_funcs.cpp +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/attic/todo-old/copyleft/copyleft_cgal_mesh_to_cgal_triangle_list.cpp +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/attic/todo-old/copyleft/copyleft_cgal_mesh_to_polyhedron.cpp +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/attic/todo-old/copyleft/copyleft_cgal_minkowski_sum.cpp +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/attic/todo-old/copyleft/copyleft_cgal_order_facets_around_edge.cpp +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/attic/todo-old/copyleft/copyleft_cgal_order_facets_around_edges.cpp +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/attic/todo-old/copyleft/copyleft_cgal_orient2D.cpp +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/attic/todo-old/copyleft/copyleft_cgal_orient3D.cpp +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/attic/todo-old/copyleft/copyleft_cgal_outer_element.cpp +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/attic/todo-old/copyleft/copyleft_cgal_outer_facet.cpp +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/attic/todo-old/copyleft/copyleft_cgal_outer_hull.cpp +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/attic/todo-old/copyleft/copyleft_cgal_peel_outer_hull_layers.cpp +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/attic/todo-old/copyleft/copyleft_cgal_peel_winding_number_layers.cpp +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/attic/todo-old/copyleft/copyleft_cgal_piecewise_constant_winding_number.cpp +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/attic/todo-old/copyleft/copyleft_cgal_point_areas.cpp +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/attic/todo-old/copyleft/copyleft_cgal_point_mesh_squared_distance.cpp +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/attic/todo-old/copyleft/copyleft_cgal_point_segment_squared_distance.cpp +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/attic/todo-old/copyleft/copyleft_cgal_point_solid_signed_squared_distance.cpp +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/attic/todo-old/copyleft/copyleft_cgal_point_triangle_squared_distance.cpp +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/attic/todo-old/copyleft/copyleft_cgal_points_inside_component.cpp +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/attic/todo-old/copyleft/copyleft_cgal_polyhedron_to_mesh.cpp +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/attic/todo-old/copyleft/copyleft_cgal_projected_cdt.cpp +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/attic/todo-old/copyleft/copyleft_cgal_projected_delaunay.cpp +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/attic/todo-old/copyleft/copyleft_cgal_propagate_winding_numbers.cpp +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/attic/todo-old/copyleft/copyleft_cgal_read_triangle_mesh.cpp +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/attic/todo-old/copyleft/copyleft_cgal_relabel_small_immersed_cells.cpp +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/attic/todo-old/copyleft/copyleft_cgal_remesh_intersections.cpp +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/attic/todo-old/copyleft/copyleft_cgal_remesh_self_intersections.cpp +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/attic/todo-old/copyleft/copyleft_cgal_resolve_intersections.cpp +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/attic/todo-old/copyleft/copyleft_cgal_row_to_point.cpp +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/attic/todo-old/copyleft/copyleft_cgal_segment_segment_squared_distance.cpp +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/attic/todo-old/copyleft/copyleft_cgal_signed_distance_isosurface.cpp +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/attic/todo-old/copyleft/copyleft_cgal_snap_rounding.cpp +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/attic/todo-old/copyleft/copyleft_cgal_string_to_mesh_boolean_type.cpp +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/attic/todo-old/copyleft/copyleft_cgal_subdivide_segments.cpp +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/attic/todo-old/copyleft/copyleft_cgal_submesh_aabb_tree.cpp +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/attic/todo-old/copyleft/copyleft_cgal_triangle_triangle_squared_distance.cpp +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/attic/todo-old/copyleft/copyleft_cgal_trim_with_solid.cpp +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/attic/todo-old/copyleft/copyleft_cgal_wire_mesh.cpp +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/attic/todo-old/copyleft/copyleft_comiso_miq.cpp +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/attic/todo-old/copyleft/copyleft_cork_mesh_boolean.cpp +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/attic/todo-old/copyleft/copyleft_marching_cubes.cpp +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/attic/todo-old/copyleft/copyleft_offset_surface.cpp +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/attic/todo-old/copyleft/copyleft_opengl2_render_to_tga.cpp +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/attic/todo-old/copyleft/copyleft_opengl2_texture_from_tga.cpp +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/attic/todo-old/copyleft/copyleft_progressive_hulls.cpp +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/attic/todo-old/copyleft/copyleft_progressive_hulls_cost_and_placement.cpp +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/attic/todo-old/copyleft/copyleft_quadprog.cpp +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/attic/todo-old/copyleft/copyleft_swept_volume.cpp +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/attic/todo-old/copyleft/copyleft_tetgen_mesh_with_skeleton.cpp +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/attic/todo-old/copyleft/copyleft_tetgen_read_into_tetgenio.cpp +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/attic/todo-old/copyleft/copyleft_tetgen_tetrahedralize.cpp +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/attic/todo-old/dijkstra.cpp +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/attic/todo-old/embree_bone_heat.cpp +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/attic/todo-old/embree_reorient_facets_raycast.cpp +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/attic/todo-old/fast_winding_number.cpp +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/attic/todo-old/flip_edge.cpp +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/attic/todo-old/knn.cpp +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/attic/todo-old/mosek_mosek_guarded.cpp +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/attic/todo-old/mosek_mosek_linprog.cpp +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/attic/todo-old/octree.cpp +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/attic/todo-old/per_vertex_point_to_plane_quadrics.cpp +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/attic/todo-old/png_readPNG.cpp +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/attic/todo-old/png_render_to_png.cpp +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/attic/todo-old/png_render_to_png_async.cpp +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/attic/todo-old/png_texture_from_file.cpp +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/attic/todo-old/png_texture_from_png.cpp +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/attic/todo-old/png_writePNG.cpp +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/attic/todo-old/pseudonormal_test.cpp +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/attic/todo-old/readWRL.cpp +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/attic/todo-old/remesh_along_isoline.cpp +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/attic/todo-old/seam_edges.cpp +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/attic/todo-old/shortest_edge_and_midpoint.cpp +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/attic/todo-old/squared_edge_lengths.cpp +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/attic/todo-old/straighten_seams.cpp +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/attic/todo-old/swept_volume_signed_distance.cpp +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/attic/todo-old/triangle_cdt.cpp +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/attic/todo-old/unzip_corners.cpp +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/attic/todo-old/writeBF.cpp +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/attic/todo-old/writeDMAT.cpp +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/attic/todo-old/writeMESH.cpp +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/attic/todo-old/writeTGF.cpp +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/attic/todo-old/xml_writeDAE.cpp +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/attic/todo-old/xml_write_triangle_mesh.cpp +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/classes/AABB.cpp +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/classes/classes.cpp +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/cmake/CXXFeatures.cmake +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/cmake/FindLIBIGL.cmake +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/cmake/UseColors.cmake +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/include/default_types.h +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/missing.sh +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/mkdocs.yml +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/postBuild +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/scripts/basic_function.mako +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/scripts/blender_igl_export.py +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/scripts/generate_bindings.py +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/scripts/make_lean.py +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/scripts/parser.py +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/src/AABB.cpp +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/src/FileEncoding.cpp +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/src/MappingEnergyType.cpp +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/src/MassMatrixType.cpp +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/src/adjacency_list.cpp +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/src/adjacency_matrix.cpp +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/src/arap.cpp +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/src/average_from_edges_onto_vertices.cpp +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/src/average_onto_faces.cpp +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/src/average_onto_vertices.cpp +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/src/avg_edge_length.cpp +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/src/barycenter.cpp +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/src/barycentric_coordinates.cpp +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/src/bbw.cpp +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/src/bfs_orient.cpp +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/src/biharmonic_coordinates.cpp +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/src/bijective_composite_harmonic_mapping.cpp +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/src/blue_noise.cpp +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/src/boundary_facets.cpp +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/src/boundary_loop.cpp +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/src/bounding_box.cpp +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/src/circulation.cpp +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/src/circumradius.cpp +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/src/collapse_edge.cpp +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/src/connected_components.cpp +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/src/copyleft/cgal/convex_hull.cpp +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/src/copyleft/cgal/fast_winding_number.cpp +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/src/copyleft/cgal/intersect_other.cpp +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/src/copyleft/cgal/intersect_with_half_space.cpp +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/src/copyleft/cgal/mesh_boolean.cpp +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/src/copyleft/cgal/module.cpp +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/src/copyleft/cgal/point_areas.cpp +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/src/copyleft/cgal/trim_with_solid.cpp +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/src/copyleft/module.cpp +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/src/copyleft/progressive_hulls.cpp +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/src/copyleft/tetgen/module.cpp +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/src/copyleft/tetgen/tetrahedralize.cpp +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/src/cotmatrix.cpp +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/src/cotmatrix_entries.cpp +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/src/cotmatrix_intrinsic.cpp +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/src/crouzeix_raviart_cotmatrix.cpp +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/src/crouzeix_raviart_massmatrix.cpp +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/src/cut_mesh.cpp +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/src/cut_mesh_from_singularities.cpp +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/src/cut_to_disk.cpp +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/src/cylinder.cpp +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/src/decimate.cpp +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/src/dihedral_angles.cpp +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/src/dihedral_angles_intrinsic.cpp +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/src/doublearea.cpp +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/src/dual_contouring.cpp +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/src/ears.cpp +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/src/edge_flaps.cpp +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/src/edge_lengths.cpp +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/src/edges.cpp +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/src/embree/EmbreeIntersector.cpp +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/src/embree/ambient_occlusion.cpp +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/src/embree/module.cpp +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/src/embree/reorient_facets_raycast.cpp +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/src/embree/shape_diameter_function.cpp +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/src/exact_geodesic.cpp +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/src/face_areas.cpp +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/src/facet_adjacency_matrix.cpp +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/src/facet_components.cpp +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/src/false_barycentric_subdivision.cpp +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/src/fast_winding_number.cpp +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/src/gaussian_curvature.cpp +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/src/grad.cpp +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/src/grid.cpp +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/src/harmonic.cpp +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/src/heat_geodesics.cpp +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/src/icosahedron.cpp +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/src/in_element.cpp +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/src/inradius.cpp +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/src/intrinsic_delaunay_cotmatrix.cpp +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/src/intrinsic_delaunay_triangulation.cpp +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/src/is_border_vertex.cpp +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/src/is_edge_manifold.cpp +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/src/ismember_rows.cpp +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/src/isolines.cpp +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/src/isolines_intrinsic.cpp +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/src/kelvinlets.cpp +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/src/knn.cpp +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/src/local_basis.cpp +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/src/loop.cpp +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/src/lscm.cpp +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/src/marching_cubes.cpp +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/src/massmatrix.cpp +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/src/massmatrix_intrinsic.cpp +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/src/matlab_format.cpp +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/src/min_quad_with_fixed.cpp +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/src/module.cpp +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/src/moments.cpp +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/src/noop.cpp +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/src/octree.cpp +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/src/on_boundary.cpp +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/src/orient_halfedges.cpp +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/src/oriented_facets.cpp +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/src/per_face_normals.cpp +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/src/per_vertex_normals.cpp +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/src/point_mesh_squared_distance.cpp +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/src/polar_svd.cpp +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/src/polygon_corners.cpp +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/src/polygons_to_triangles.cpp +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/src/principal_curvature.cpp +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/src/project.cpp +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/src/project_to_line.cpp +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/src/project_to_line_segment.cpp +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/src/qslim.cpp +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/src/quad_grid.cpp +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/src/random_points_on_mesh.cpp +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/src/ray_mesh_intersect.cpp +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/src/readDMAT.cpp +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/src/readMESH.cpp +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/src/readMSH.cpp +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/src/readOBJ.cpp +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/src/readOFF.cpp +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/src/read_triangle_mesh.cpp +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/src/remove_duplicate_vertices.cpp +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/src/remove_unreferenced.cpp +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/src/signed_distance.cpp +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/src/slim.cpp +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/src/split_nonmanifold.cpp +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/src/squared_edge_lengths.cpp +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/src/triangle/module.cpp +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/src/triangle/scaf.cpp +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/src/triangle/triangulate.cpp +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/src/triangle_fan.cpp +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/src/triangle_triangle_adjacency.cpp +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/src/triangulated_grid.cpp +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/src/unique_edge_map.cpp +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/src/unique_simplices.cpp +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/src/unproject.cpp +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/src/upsample.cpp +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/src/vertex_components.cpp +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/src/vertex_triangle_adjacency.cpp +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/src/volume.cpp +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/src/voxel_grid.cpp +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/src/winding_number.cpp +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/src/writeDMAT.cpp +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/src/writeMESH.cpp +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/src/writeMSH.cpp +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/src/writeOBJ.cpp +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/src/writePLY.cpp +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/src/write_triangle_mesh.cpp +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/tutorial/contributing.md +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/tutorial/exporter.py +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/tutorial/images/102_DrawMesh.png +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/tutorial/images/104_Colors.png +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/tutorial/images/105_Overlays.png +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/tutorial/images/106_ViewerMenu.png +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/tutorial/images/501_HarmonicParam.png +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/tutorial/images/502_LSCMParam.png +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/tutorial/images/503_ARAPParam.png +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/tutorial/images/504_nrosy_field.png +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/tutorial/images/504_vector_field.png +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/tutorial/images/505_MIQ_1.png +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/tutorial/images/505_MIQ_2.png +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/tutorial/images/505_MIQ_3.png +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/tutorial/images/505_MIQ_4.png +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/tutorial/images/505_MIQ_5.png +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/tutorial/images/505_MIQ_6.png +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/tutorial/images/505_MIQ_7.png +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/tutorial/images/505_MIQ_8.png +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/tutorial/images/506_FrameField_1.png +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/tutorial/images/506_FrameField_2.png +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/tutorial/images/506_FrameField_3.png +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/tutorial/images/506_FrameField_4.png +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/tutorial/images/507_PolyVectorField.png +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/tutorial/images/508_ConjugateField.png +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/tutorial/images/509_Planarization.png +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/tutorial/images/510_Integrable.png +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/tutorial/images/511_PolyVectorFieldGeneral.png +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/tutorial/images/602_Matlab_1.png +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/tutorial/images/602_Matlab_2.png +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/tutorial/images/604_Triangle.png +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/tutorial/images/605_Tetgen.png +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/tutorial/images/606_AmbientOcclusion.png +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/tutorial/images/607_Picking.png +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/tutorial/images/608_LIM.png +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/tutorial/images/712_beetles.jpg +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/tutorial/images/713_ShapeUp.png +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/tutorial/images/VF.pdf +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/tutorial/images/VF.png +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/tutorial/images/arm-dqs.jpg +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/tutorial/images/armadillo-fast.jpg +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/tutorial/images/armadillo-marching-cubes.jpg +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/tutorial/images/background.gif +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/tutorial/images/beetle-eigen-decomposition.gif +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/tutorial/images/big-sigcat-winding-number.gif +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/tutorial/images/bump-k-harmonic.jpg +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/tutorial/images/bumpy-gaussian-curvature.jpg +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/tutorial/images/bunny-signed-distance.gif +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/tutorial/images/bunny-swept-volume.gif +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/tutorial/images/camelhead-laplace-equation.jpg +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/tutorial/images/cheburashka-biharmonic-leq.jpg +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/tutorial/images/cheburashka-gradient.jpg +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/tutorial/images/cheburashka-knight-boolean.jpg +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/tutorial/images/cheburashka-multiscale-biharmonic-kernels.jpg +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/tutorial/images/cow-curvature-flow.jpg +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/tutorial/images/cube-sphere-cylinders-csg-tree.jpg +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/tutorial/images/cube-sphere-cylinders-csg.gif +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/tutorial/images/decimated-knight-arap.jpg +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/tutorial/images/decimated-knight-slice-color.jpg +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/tutorial/images/decimated-knight-sort-color.jpg +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/tutorial/images/decimated-knight-subdivision.gif +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/tutorial/images/edge-collapse.jpg +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/tutorial/images/edge-collapse.pdf +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/tutorial/images/fandisk-normals.jpg +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/tutorial/images/fertility-edge-collapse.gif +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/tutorial/images/fertility-principal-curvature.jpg +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/tutorial/images/geodesicdistance.jpg +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/tutorial/images/hand-bbw.jpg +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/tutorial/images/hat-function.jpg +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/tutorial/images/heat-geodesic-beetle.gif +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/tutorial/images/heat-geodesic-peaks.png +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/tutorial/images/libigl-logo.jpg +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/tutorial/images/max-biharmonic.jpg +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/tutorial/images/multiple-meshes.png +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/tutorial/images/octopus-biharmonic-coordinates-physics.gif +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/tutorial/images/simplicial_complex_augmentation_framework.png +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/tutorial/images/slim.png +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/tutorial/images/streamlines.jpg +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/tutorial/images/truck-facet-orientation.jpg +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/tutorial/index.md +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/tutorial/marching_cubes.py +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/tutorial/plot_to_md.py +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/tutorial/tut-chapter0.ipynb +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/tutorial/tut-chapter1.ipynb +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/tutorial/tut-chapter2.ipynb +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/tutorial/tut-chapter3.ipynb +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/tutorial/tut-chapter4.ipynb +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/tutorial/tut-chapter5.ipynb +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/tutorial/tut-chapter6.ipynb +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/tutorial/tut-chapter7.ipynb +0 -0
- {libigl-2.5.4.dev0 → libigl-2.6.1}/tutorial/tutorials.ipynb +0 -0
|
@@ -2,10 +2,10 @@ name: Pip
|
|
|
2
2
|
|
|
3
3
|
on:
|
|
4
4
|
workflow_dispatch:
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
5
|
+
pull_request:
|
|
6
|
+
push:
|
|
7
|
+
branches:
|
|
8
|
+
- master
|
|
9
9
|
|
|
10
10
|
jobs:
|
|
11
11
|
build:
|
|
@@ -14,7 +14,7 @@ jobs:
|
|
|
14
14
|
strategy:
|
|
15
15
|
fail-fast: false
|
|
16
16
|
matrix:
|
|
17
|
-
platform: [windows-latest, macos-latest, ubuntu-latest]
|
|
17
|
+
platform: [windows-latest, macos-latest, ubuntu-latest, ubuntu-24.04-arm]
|
|
18
18
|
python-version: ["3.10"]
|
|
19
19
|
|
|
20
20
|
steps:
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
name: Wheels
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
branches:
|
|
6
|
+
- main
|
|
7
|
+
pull_request:
|
|
8
|
+
branches:
|
|
9
|
+
- main
|
|
10
|
+
|
|
11
|
+
jobs:
|
|
12
|
+
build_sdist:
|
|
13
|
+
runs-on: ubuntu-latest
|
|
14
|
+
steps:
|
|
15
|
+
- uses: actions/checkout@v4
|
|
16
|
+
with:
|
|
17
|
+
submodules: true
|
|
18
|
+
- run: pipx run build --sdist
|
|
19
|
+
- run: pipx run twine check dist/* || exit 1 # Ensure failure on twine check errors
|
|
20
|
+
- uses: actions/upload-artifact@v4
|
|
21
|
+
with:
|
|
22
|
+
name: dist-sdist
|
|
23
|
+
path: dist/*.tar.gz
|
|
24
|
+
|
|
25
|
+
build_wheels:
|
|
26
|
+
runs-on: ${{ matrix.os }}
|
|
27
|
+
strategy:
|
|
28
|
+
fail-fast: false
|
|
29
|
+
matrix:
|
|
30
|
+
os: [ubuntu-24.04, ubuntu-24.04-arm, macos-14, macos-13, windows-latest] # Use specific versions for clarity
|
|
31
|
+
arch: [x86_64, arm64]
|
|
32
|
+
pybuilds: [cp38, cp39, cp310, cp311, cp312] # Define pybuilds at the top level
|
|
33
|
+
exclude:
|
|
34
|
+
- os: ubuntu-24.04-arm # No need to specify arch, it's already implicit
|
|
35
|
+
arch: x86_64 # Exclude x86_64 on ARM
|
|
36
|
+
- os: macos-14 # Exclude macOS 14 (Sonoma)
|
|
37
|
+
arch: x86_64 # Exclude x86_64 explicitly
|
|
38
|
+
- os: macos-14 # Exclude cp38
|
|
39
|
+
pybuilds: cp38
|
|
40
|
+
- os: macos-13 # Exclude macOS 13 (Ventura) - arm64
|
|
41
|
+
arch: arm64 # Exclude arm64 on macOS 13
|
|
42
|
+
- os: macos-13
|
|
43
|
+
pybuilds: cp38
|
|
44
|
+
|
|
45
|
+
name: >
|
|
46
|
+
${{ matrix.pybuilds }} ${{ matrix.os }} ${{ matrix.arch }}
|
|
47
|
+
|
|
48
|
+
steps:
|
|
49
|
+
- uses: actions/checkout@v4
|
|
50
|
+
- uses: actions/setup-python@v5
|
|
51
|
+
with:
|
|
52
|
+
python-version: '3.12'
|
|
53
|
+
- run: pip install cibuildwheel==2.23.0
|
|
54
|
+
- run: python -m cibuildwheel --output-dir wheelhouse
|
|
55
|
+
env:
|
|
56
|
+
CIBW_BUILD: "${{ matrix.pybuilds }}-*" # Use matrix.pybuilds and matrix.arch
|
|
57
|
+
CIBW_ARCHS_MACOS: ${{ matrix.arch }}
|
|
58
|
+
CIBW_SKIP: "cp*-manylinux_i686 cp*-musllinux* cp*-win32"
|
|
59
|
+
- name: Upload Artifact
|
|
60
|
+
uses: actions/upload-artifact@v4
|
|
61
|
+
continue-on-error: true # Important: Continue if upload fails
|
|
62
|
+
with:
|
|
63
|
+
# Include pybuilds in the artifact name
|
|
64
|
+
name: wheels-${{ matrix.os }}-${{ matrix.arch }}-${{ matrix.pybuilds }}
|
|
65
|
+
path: ./wheelhouse/*.whl
|
|
66
|
+
if-no-files-found: error # Fail if no wheels are found
|
|
67
|
+
compression-level: 6
|
|
68
|
+
overwrite: false
|
|
69
|
+
include-hidden-files: false
|
|
70
|
+
|
|
71
|
+
release_artifacts:
|
|
72
|
+
if: github.event_name == 'push' && contains(github.ref, 'refs/tags/')
|
|
73
|
+
needs: build_wheels
|
|
74
|
+
runs-on: ubuntu-latest
|
|
75
|
+
permissions:
|
|
76
|
+
id-token: write
|
|
77
|
+
contents: write
|
|
78
|
+
steps:
|
|
79
|
+
- uses: actions/download-artifact@v4
|
|
80
|
+
with:
|
|
81
|
+
path: ./artifacts
|
|
82
|
+
merge-multiple: true
|
|
83
|
+
- run: ls -R ./artifacts
|
|
84
|
+
- uses: ncipollo/release-action@v1
|
|
85
|
+
with:
|
|
86
|
+
allowUpdates: true
|
|
87
|
+
artifacts: "./artifacts/**/*"
|
|
88
|
+
token: ${{ secrets.GITHUB_TOKEN }}
|
|
89
|
+
- uses: pypa/gh-action-pypi-publish@v1.12.4
|
|
90
|
+
with:
|
|
91
|
+
packages-dir: ./artifacts
|
|
@@ -14,13 +14,9 @@ set(CMAKE_OSX_DEPLOYMENT_TARGET "10.15")
|
|
|
14
14
|
# <20 for embree
|
|
15
15
|
set(CMAKE_CXX_STANDARD 17)
|
|
16
16
|
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
set(DEV_MODULE Development.Module)
|
|
21
|
-
endif()
|
|
22
|
-
|
|
23
|
-
find_package(Python 3.8 COMPONENTS Interpreter ${DEV_MODULE} REQUIRED)
|
|
17
|
+
find_package(Python 3.8
|
|
18
|
+
REQUIRED COMPONENTS Interpreter Development.Module
|
|
19
|
+
OPTIONAL_COMPONENTS Development.SABIModule)
|
|
24
20
|
|
|
25
21
|
if (NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES)
|
|
26
22
|
set(CMAKE_BUILD_TYPE Release CACHE STRING "Choose the type of build." FORCE)
|
|
@@ -36,7 +32,7 @@ include(FetchContent)
|
|
|
36
32
|
FetchContent_Declare(
|
|
37
33
|
nanobind
|
|
38
34
|
GIT_REPOSITORY https://github.com/wjakob/nanobind.git
|
|
39
|
-
GIT_TAG v2.
|
|
35
|
+
GIT_TAG v2.7.0
|
|
40
36
|
)
|
|
41
37
|
FetchContent_MakeAvailable(nanobind)
|
|
42
38
|
|
|
@@ -49,7 +45,7 @@ option(LIBIGL_RESTRICTED_TRIANGLE "Build target igl_restricted::triangle" ON)
|
|
|
49
45
|
FetchContent_Declare(
|
|
50
46
|
libigl
|
|
51
47
|
GIT_REPOSITORY https://github.com/libigl/libigl.git
|
|
52
|
-
GIT_TAG
|
|
48
|
+
GIT_TAG v2.6.0
|
|
53
49
|
)
|
|
54
50
|
FetchContent_MakeAvailable(libigl)
|
|
55
51
|
|
|
@@ -125,7 +121,10 @@ function(pyigl_include prefix name)
|
|
|
125
121
|
file(WRITE "${generated_dir}/BINDING_INVOCATIONS.in" "${BINDING_INVOCATIONS}")
|
|
126
122
|
|
|
127
123
|
set(target_name "pyigl${prefix_lc}_${name}")
|
|
128
|
-
nanobind_add_module(
|
|
124
|
+
nanobind_add_module(
|
|
125
|
+
${target_name}
|
|
126
|
+
STABLE_ABI
|
|
127
|
+
${sources})
|
|
129
128
|
|
|
130
129
|
# important for scikit-build
|
|
131
130
|
install(TARGETS ${target_name} LIBRARY DESTINATION "igl/${subpath}")
|
libigl-2.6.1/PKG-INFO
ADDED
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
Metadata-Version: 2.1
|
|
2
|
+
Name: libigl
|
|
3
|
+
Version: 2.6.1
|
|
4
|
+
Summary: libigl: A simple C++ geometry processing library
|
|
5
|
+
Author-Email: Alec Jacobson <alecjacobson@gmail.com>
|
|
6
|
+
Classifier: License :: OSI Approved :: Mozilla Public License 2.0 (MPL 2.0)
|
|
7
|
+
Project-URL: Homepage, https://github.com/libigl/libigl-python-bindings
|
|
8
|
+
Requires-Python: >=3.8
|
|
9
|
+
Requires-Dist: numpy
|
|
10
|
+
Requires-Dist: scipy
|
|
11
|
+
Description-Content-Type: text/markdown
|
|
12
|
+
|
|
13
|
+
# libigl Python Bindings
|
|
14
|
+
[](https://pypi.org/project/libigl/)
|
|
15
|
+
[](https://github.com/libigl/libigl-python-bindings/actions/workflows/wheels.yml?query=branch%3Amain)
|
|
16
|
+
|
|
17
|
+
This repository contains the source code for the python bindings for the C++
|
|
18
|
+
[libigl](https://github.com/libigl/libigl) library written using
|
|
19
|
+
[nanobind](https://nanobind.readthedocs.io/en/latest/). Functions allow NumPy
|
|
20
|
+
arrays as input and output for dense matrices and vectors and SciPy sparse
|
|
21
|
+
matrices for sparse matrices.
|
|
22
|
+
|
|
23
|
+
## Installation
|
|
24
|
+
|
|
25
|
+
```
|
|
26
|
+
python -m pip install libigl
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
## Documentation
|
|
30
|
+
|
|
31
|
+
| :warning: WARNING |
|
|
32
|
+
|:----------------------------|
|
|
33
|
+
| The [python-binding documentation](https://libigl.github.io/libigl-python-bindings/) is perennially out of date and will likely be removed/changed. |
|
|
34
|
+
|
|
35
|
+
* A tutorial on how to use the bindings can be found [here](https://libigl.github.io/libigl-python-bindings/tutorials/)
|
|
36
|
+
* A function reference can be found [here](https://libigl.github.io/libigl-python-bindings/igl_docs/)
|
|
37
|
+
|
|
38
|
+
## Getting the current version of libigl within python code
|
|
39
|
+
|
|
40
|
+
Since version 2.5.4.dev0, the `igl.__version__` attribute has been removed. To
|
|
41
|
+
get the version of the libigl package you're using within your python code, you
|
|
42
|
+
can use the following code:
|
|
43
|
+
|
|
44
|
+
```
|
|
45
|
+
import importlib.metadata
|
|
46
|
+
libigl_version = importlib.metadata.version('libigl')
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
The version of libigl is defined in the [pyproject.toml](./pyproject.toml) file.
|
|
50
|
+
|
|
51
|
+
|
|
52
|
+
## Compiling and modifying the bindiings
|
|
53
|
+
|
|
54
|
+
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:
|
|
55
|
+
|
|
56
|
+
1. Preinstall the dependencies (at the top of pyproject.toml
|
|
57
|
+
2. Then use this very long command:
|
|
58
|
+
|
|
59
|
+
```
|
|
60
|
+
CMAKE_BUILD_PARALLEL_LEVEL=10 python -m pip install --no-build-isolation --config-settings=editable.rebuild=true -Cbuild-dir=build -ve.
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
The `CMAKE_BUILD_PARALLEL_LEVEL=10` will invoke with 10 parallel build threads.
|
|
64
|
+
|
|
65
|
+
### Adding a missing binding
|
|
66
|
+
|
|
67
|
+
Bindings are fairly mechanical to write. For example, suppose we didn't have a
|
|
68
|
+
binding for the c++ function `igl::moments`. The first step would be to look at
|
|
69
|
+
the corresponding `.h` header file in the C++ libigl library:
|
|
70
|
+
[moments.h](https://github.com/libigl/libigl/blob/main/include/igl/moments.h).
|
|
71
|
+
|
|
72
|
+
Then we would create the [src/moments.cpp](src/moments.cpp) file in this project
|
|
73
|
+
which uses `Eigen::MatrixXN` for numeric types and `Eigen::MatrixXI` for integer
|
|
74
|
+
types. Typically this requires a simple wrapper around the function matching
|
|
75
|
+
its signature to these types and some boilerplate `void bind_moments(...` code which adds the function to the python module.
|
|
76
|
+
|
|
77
|
+
Simply adding this `.cpp` file will be enough to add the bindings on the next
|
|
78
|
+
build.
|
|
79
|
+
|
|
80
|
+
If submitting a pull request with a new binding, please also add an execution
|
|
81
|
+
test in `tests/test_all.py` to ensure the binding can at least be called as
|
|
82
|
+
expected.
|
|
83
|
+
|
|
84
|
+
|
|
85
|
+
## Testing cibuildwheel locally
|
|
86
|
+
|
|
87
|
+
Install whichever version of Python from the [official website](https://www.python.org/downloads/) and then run:
|
|
88
|
+
|
|
89
|
+
|
|
90
|
+
/Library/Frameworks/Python.framework/Versions/3.11/bin/python3.11 -m venv venv-official-3.11
|
|
91
|
+
source venv-official-3.11/bin/activate
|
|
92
|
+
python -m pip install cibuildwheel
|
|
93
|
+
CIBW_BUILD="cp311-*" python -m cibuildwheel --output-dir wheelhouse --platform macos
|
|
94
|
+
|
|
95
|
+
## Downloading all the artifacts
|
|
96
|
+
|
|
97
|
+
A successful [.github/workflows/wheels.yml](.github/workflows/wheels.yml) run will a lot of `.whl` files. To download these all at once, you can use the following command:
|
|
98
|
+
|
|
99
|
+
mkdir wheelhouse
|
|
100
|
+
cd wheelhouse
|
|
101
|
+
gh run download [runid]
|
|
102
|
+
|
|
103
|
+
Then these can be uploaded to pypi using:
|
|
104
|
+
|
|
105
|
+
python -m twine upload --repository testpypi wheelhouse/*/*.whl wheelhouse/*/*.tar.gz
|
|
106
|
+
|
|
107
|
+
## Acknowledgements
|
|
108
|
+
|
|
109
|
+
The original python bindings were generated and maintained by
|
|
110
|
+
[@teseoch](https://github.com/teseoch),
|
|
111
|
+
[@KarlLeell](https://github.com/KarlLeell),
|
|
112
|
+
[@fwilliams](https://github.com/fwilliams),
|
|
113
|
+
[@skoch9](https://github.com/skoch9), and
|
|
114
|
+
[@danielepanozzo](https://github.com/danielepanozzo)
|
|
115
|
+
|
|
116
|
+
The modern python bindings (since 2.5.4.dev0) can largely be blamed on
|
|
117
|
+
[@alecjacobson](https://github.com/alecjacobson).
|
libigl-2.6.1/README.md
ADDED
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
# libigl Python Bindings
|
|
2
|
+
[](https://pypi.org/project/libigl/)
|
|
3
|
+
[](https://github.com/libigl/libigl-python-bindings/actions/workflows/wheels.yml?query=branch%3Amain)
|
|
4
|
+
|
|
5
|
+
This repository contains the source code for the python bindings for the C++
|
|
6
|
+
[libigl](https://github.com/libigl/libigl) library written using
|
|
7
|
+
[nanobind](https://nanobind.readthedocs.io/en/latest/). Functions allow NumPy
|
|
8
|
+
arrays as input and output for dense matrices and vectors and SciPy sparse
|
|
9
|
+
matrices for sparse matrices.
|
|
10
|
+
|
|
11
|
+
## Installation
|
|
12
|
+
|
|
13
|
+
```
|
|
14
|
+
python -m pip install libigl
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
## Documentation
|
|
18
|
+
|
|
19
|
+
| :warning: WARNING |
|
|
20
|
+
|:----------------------------|
|
|
21
|
+
| The [python-binding documentation](https://libigl.github.io/libigl-python-bindings/) is perennially out of date and will likely be removed/changed. |
|
|
22
|
+
|
|
23
|
+
* A tutorial on how to use the bindings can be found [here](https://libigl.github.io/libigl-python-bindings/tutorials/)
|
|
24
|
+
* A function reference can be found [here](https://libigl.github.io/libigl-python-bindings/igl_docs/)
|
|
25
|
+
|
|
26
|
+
## Getting the current version of libigl within python code
|
|
27
|
+
|
|
28
|
+
Since version 2.5.4.dev0, the `igl.__version__` attribute has been removed. To
|
|
29
|
+
get the version of the libigl package you're using within your python code, you
|
|
30
|
+
can use the following code:
|
|
31
|
+
|
|
32
|
+
```
|
|
33
|
+
import importlib.metadata
|
|
34
|
+
libigl_version = importlib.metadata.version('libigl')
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
The version of libigl is defined in the [pyproject.toml](./pyproject.toml) file.
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
## Compiling and modifying the bindiings
|
|
41
|
+
|
|
42
|
+
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:
|
|
43
|
+
|
|
44
|
+
1. Preinstall the dependencies (at the top of pyproject.toml
|
|
45
|
+
2. Then use this very long command:
|
|
46
|
+
|
|
47
|
+
```
|
|
48
|
+
CMAKE_BUILD_PARALLEL_LEVEL=10 python -m pip install --no-build-isolation --config-settings=editable.rebuild=true -Cbuild-dir=build -ve.
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
The `CMAKE_BUILD_PARALLEL_LEVEL=10` will invoke with 10 parallel build threads.
|
|
52
|
+
|
|
53
|
+
### Adding a missing binding
|
|
54
|
+
|
|
55
|
+
Bindings are fairly mechanical to write. For example, suppose we didn't have a
|
|
56
|
+
binding for the c++ function `igl::moments`. The first step would be to look at
|
|
57
|
+
the corresponding `.h` header file in the C++ libigl library:
|
|
58
|
+
[moments.h](https://github.com/libigl/libigl/blob/main/include/igl/moments.h).
|
|
59
|
+
|
|
60
|
+
Then we would create the [src/moments.cpp](src/moments.cpp) file in this project
|
|
61
|
+
which uses `Eigen::MatrixXN` for numeric types and `Eigen::MatrixXI` for integer
|
|
62
|
+
types. Typically this requires a simple wrapper around the function matching
|
|
63
|
+
its signature to these types and some boilerplate `void bind_moments(...` code which adds the function to the python module.
|
|
64
|
+
|
|
65
|
+
Simply adding this `.cpp` file will be enough to add the bindings on the next
|
|
66
|
+
build.
|
|
67
|
+
|
|
68
|
+
If submitting a pull request with a new binding, please also add an execution
|
|
69
|
+
test in `tests/test_all.py` to ensure the binding can at least be called as
|
|
70
|
+
expected.
|
|
71
|
+
|
|
72
|
+
|
|
73
|
+
## Testing cibuildwheel locally
|
|
74
|
+
|
|
75
|
+
Install whichever version of Python from the [official website](https://www.python.org/downloads/) and then run:
|
|
76
|
+
|
|
77
|
+
|
|
78
|
+
/Library/Frameworks/Python.framework/Versions/3.11/bin/python3.11 -m venv venv-official-3.11
|
|
79
|
+
source venv-official-3.11/bin/activate
|
|
80
|
+
python -m pip install cibuildwheel
|
|
81
|
+
CIBW_BUILD="cp311-*" python -m cibuildwheel --output-dir wheelhouse --platform macos
|
|
82
|
+
|
|
83
|
+
## Downloading all the artifacts
|
|
84
|
+
|
|
85
|
+
A successful [.github/workflows/wheels.yml](.github/workflows/wheels.yml) run will a lot of `.whl` files. To download these all at once, you can use the following command:
|
|
86
|
+
|
|
87
|
+
mkdir wheelhouse
|
|
88
|
+
cd wheelhouse
|
|
89
|
+
gh run download [runid]
|
|
90
|
+
|
|
91
|
+
Then these can be uploaded to pypi using:
|
|
92
|
+
|
|
93
|
+
python -m twine upload --repository testpypi wheelhouse/*/*.whl wheelhouse/*/*.tar.gz
|
|
94
|
+
|
|
95
|
+
## Acknowledgements
|
|
96
|
+
|
|
97
|
+
The original python bindings were generated and maintained by
|
|
98
|
+
[@teseoch](https://github.com/teseoch),
|
|
99
|
+
[@KarlLeell](https://github.com/KarlLeell),
|
|
100
|
+
[@fwilliams](https://github.com/fwilliams),
|
|
101
|
+
[@skoch9](https://github.com/skoch9), and
|
|
102
|
+
[@danielepanozzo](https://github.com/danielepanozzo)
|
|
103
|
+
|
|
104
|
+
The modern python bindings (since 2.5.4.dev0) can largely be blamed on
|
|
105
|
+
[@alecjacobson](https://github.com/alecjacobson).
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
################################################################################
|
|
2
|
-
cmake_minimum_required(VERSION
|
|
2
|
+
cmake_minimum_required(VERSION 3.5)
|
|
3
3
|
################################################################################
|
|
4
4
|
# See comments and discussions here:
|
|
5
5
|
# http://stackoverflow.com/questions/5088460/flags-to-enable-thorough-and-verbose-g-warnings
|
|
@@ -7,13 +7,11 @@ euler_characteristic.cpp
|
|
|
7
7
|
grad_intrinsic.cpp
|
|
8
8
|
hessian.cpp
|
|
9
9
|
hessian_energy.cpp
|
|
10
|
-
internal_angles.cpp
|
|
11
10
|
is_delaunay.cpp
|
|
12
11
|
is_intrinsic_delaunay.cpp
|
|
13
12
|
is_irregular_vertex.cpp
|
|
14
13
|
iterative_closest_point.cpp
|
|
15
14
|
lbs_matrix.cpp
|
|
16
|
-
map_vertices_to_circle.cpp
|
|
17
15
|
marching_tets.cpp
|
|
18
16
|
mvc.cpp
|
|
19
17
|
offset_surface.cpp
|
|
@@ -35,7 +33,6 @@ sparse_voxel_grid.cpp
|
|
|
35
33
|
tet_tet_adjacency.cpp
|
|
36
34
|
|
|
37
35
|
active_set.cpp
|
|
38
|
-
all_pairs_distances.cpp
|
|
39
36
|
ambient_occlusion.cpp
|
|
40
37
|
arap_linear_block.cpp
|
|
41
38
|
arap_rhs.cpp
|
|
@@ -14,7 +14,7 @@ build-backend = "scikit_build_core.build"
|
|
|
14
14
|
|
|
15
15
|
[project]
|
|
16
16
|
name = "libigl"
|
|
17
|
-
version = "2.
|
|
17
|
+
version = "2.6.1"
|
|
18
18
|
description = "libigl: A simple C++ geometry processing library"
|
|
19
19
|
readme = "README.md"
|
|
20
20
|
requires-python = ">=3.8"
|
|
@@ -42,10 +42,12 @@ build-dir = "build/{wheel_tag}"
|
|
|
42
42
|
# Build stable ABI wheels for CPython 3.12+
|
|
43
43
|
wheel.py-api = "cp312"
|
|
44
44
|
|
|
45
|
+
|
|
45
46
|
[tool.scikit-build.cmake]
|
|
46
47
|
build-type = "Release"
|
|
47
48
|
|
|
48
49
|
[tool.cibuildwheel]
|
|
50
|
+
archs = "auto64"
|
|
49
51
|
# Necessary to see build output from the actual compilation
|
|
50
52
|
build-verbosity = 1
|
|
51
53
|
|
|
@@ -53,6 +55,10 @@ build-verbosity = 1
|
|
|
53
55
|
test-command = "pytest {project}/tests"
|
|
54
56
|
test-requires = "pytest"
|
|
55
57
|
|
|
58
|
+
# linux images
|
|
59
|
+
manylinux-x86_64-image = "quay.io/pypa/manylinux_2_28_x86_64"
|
|
60
|
+
manylinux-aarch64-image = "quay.io/pypa/manylinux_2_28_aarch64"
|
|
61
|
+
|
|
56
62
|
# Don't test Python 3.8 wheels on macOS/arm64
|
|
57
63
|
test-skip="cp38-macosx_*:arm64"
|
|
58
64
|
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
#include "default_types.h"
|
|
2
|
+
#include <igl/all_pairs_distances.h>
|
|
3
|
+
#include <nanobind/nanobind.h>
|
|
4
|
+
#include <nanobind/ndarray.h>
|
|
5
|
+
#include <nanobind/eigen/dense.h>
|
|
6
|
+
|
|
7
|
+
namespace nb = nanobind;
|
|
8
|
+
using namespace nb::literals;
|
|
9
|
+
namespace pyigl
|
|
10
|
+
{
|
|
11
|
+
auto all_pairs_distances(
|
|
12
|
+
const Eigen::MatrixXd &V,
|
|
13
|
+
const Eigen::MatrixXd &U,
|
|
14
|
+
const bool squared)
|
|
15
|
+
{
|
|
16
|
+
Eigen::MatrixXd D;
|
|
17
|
+
igl::all_pairs_distances(V, U, squared, D);
|
|
18
|
+
return D;
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
void bind_all_pairs_distances(nb::module_ &m)
|
|
23
|
+
{
|
|
24
|
+
m.def("all_pairs_distances", &pyigl::all_pairs_distances,
|
|
25
|
+
"V"_a,
|
|
26
|
+
"U"_a,
|
|
27
|
+
"squared"_a,
|
|
28
|
+
R"(Compute distances between each point i in V and point j in U
|
|
29
|
+
D = all_pairs_distances(V,U)
|
|
30
|
+
@tparam matrix class like MatrixXd
|
|
31
|
+
@param[in] V #V by dim list of points
|
|
32
|
+
@param[in] U #U by dim list of points
|
|
33
|
+
@param[in] squared whether to return squared distances
|
|
34
|
+
@param[out] D #V by #U matrix of distances, where D(i,j) gives the distance or
|
|
35
|
+
squareed distance between V(i,:) and U(j,:)
|
|
36
|
+
)");
|
|
37
|
+
}
|
|
@@ -61,7 +61,9 @@ void bind_remesh_self_intersections(nb::module_ &m)
|
|
|
61
61
|
- VV: remeshed vertex positions
|
|
62
62
|
- FF: remeshed face indices
|
|
63
63
|
- IF: intersecting face pairs
|
|
64
|
-
- J: birth triangle indices
|
|
65
|
-
|
|
64
|
+
- J: birth triangle indices
|
|
65
|
+
- IM if stitch_all = true #VV list from 0 to #VV-1
|
|
66
|
+
elseif stitch_all = false #VV list of indices into VV of unique vertices.
|
|
67
|
+
)");
|
|
66
68
|
}
|
|
67
69
|
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
#include "default_types.h"
|
|
2
|
+
#include <igl/internal_angles.h>
|
|
3
|
+
#include <nanobind/nanobind.h>
|
|
4
|
+
#include <nanobind/ndarray.h>
|
|
5
|
+
#include <nanobind/eigen/dense.h>
|
|
6
|
+
|
|
7
|
+
namespace nb = nanobind;
|
|
8
|
+
using namespace nb::literals;
|
|
9
|
+
namespace pyigl
|
|
10
|
+
{
|
|
11
|
+
auto internal_angles(
|
|
12
|
+
const nb::DRef<const Eigen::MatrixXN> &V,
|
|
13
|
+
const nb::DRef<const Eigen::MatrixXI> &F)
|
|
14
|
+
{
|
|
15
|
+
Eigen::MatrixXN K;
|
|
16
|
+
igl::internal_angles(V, F, K);
|
|
17
|
+
return K;
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
void bind_internal_angles(nb::module_ &m)
|
|
22
|
+
{
|
|
23
|
+
m.def("internal_angles", &pyigl::internal_angles,
|
|
24
|
+
"V"_a,
|
|
25
|
+
"F"_a,
|
|
26
|
+
R"(Compute internal angles for all tets of a given tet mesh (V,T).
|
|
27
|
+
@param[in] V #V by dim eigen Matrix of mesh vertex nD positions
|
|
28
|
+
@param[in] F #F by poly-size eigen Matrix of face (triangle) indices
|
|
29
|
+
@param[out] K #F by poly-size eigen Matrix of internal angles
|
|
30
|
+
for triangles, columns correspond to edges [1,2],[2,0],[0,1])");
|
|
31
|
+
}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
#include "default_types.h"
|
|
2
|
+
#include <igl/is_vertex_manifold.h>
|
|
3
|
+
#include <nanobind/nanobind.h>
|
|
4
|
+
#include <nanobind/ndarray.h>
|
|
5
|
+
#include <nanobind/eigen/dense.h>
|
|
6
|
+
|
|
7
|
+
namespace nb = nanobind;
|
|
8
|
+
using namespace nb::literals;
|
|
9
|
+
|
|
10
|
+
namespace pyigl
|
|
11
|
+
{
|
|
12
|
+
// Wrapper for is_vertex_manifold with overload handling
|
|
13
|
+
auto is_vertex_manifold(
|
|
14
|
+
const nb::DRef<const Eigen::MatrixXI> &F)
|
|
15
|
+
{
|
|
16
|
+
Eigen::Matrix<bool, Eigen::Dynamic, 1> B;
|
|
17
|
+
igl::is_vertex_manifold(F, B);
|
|
18
|
+
return B;
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
// Bind the wrapper to the Python module
|
|
23
|
+
void bind_is_vertex_manifold(nb::module_ &m)
|
|
24
|
+
{
|
|
25
|
+
m.def(
|
|
26
|
+
"is_vertex_manifold",
|
|
27
|
+
&pyigl::is_vertex_manifold,
|
|
28
|
+
"F"_a,
|
|
29
|
+
R"(Check if a mesh is vertex-manifold.
|
|
30
|
+
|
|
31
|
+
This only checks whether the faces incident on each vertex form exactly one
|
|
32
|
+
connected component. Vertices incident on non-manifold edges are not consider
|
|
33
|
+
non-manifold by this function (see is_edge_manifold). Unreferenced verties are
|
|
34
|
+
considered non-manifold (zero components).
|
|
35
|
+
|
|
36
|
+
@param[in] F #F by 3 list of triangle indices
|
|
37
|
+
@return B #V list indicate whether each vertex is locally manifold (the mesh is vertex manifold if all(B) == True)");
|
|
38
|
+
}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
#include "default_types.h"
|
|
2
|
+
#include <igl/map_vertices_to_circle.h>
|
|
3
|
+
#include <nanobind/nanobind.h>
|
|
4
|
+
#include <nanobind/ndarray.h>
|
|
5
|
+
#include <nanobind/eigen/dense.h>
|
|
6
|
+
#include <nanobind/stl/vector.h>
|
|
7
|
+
|
|
8
|
+
namespace nb = nanobind;
|
|
9
|
+
using namespace nb::literals;
|
|
10
|
+
namespace pyigl
|
|
11
|
+
{
|
|
12
|
+
auto map_vertices_to_circle(
|
|
13
|
+
const Eigen::MatrixXd &V,
|
|
14
|
+
const Eigen::VectorXi &bnd)
|
|
15
|
+
{
|
|
16
|
+
Eigen::MatrixXd UV;
|
|
17
|
+
igl::map_vertices_to_circle(V, bnd, UV);
|
|
18
|
+
return UV;
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
void bind_map_vertices_to_circle(nb::module_ &m)
|
|
23
|
+
{
|
|
24
|
+
m.def("map_vertices_to_circle", &pyigl::map_vertices_to_circle,
|
|
25
|
+
"V"_a,
|
|
26
|
+
"bnd"_a,
|
|
27
|
+
R"(Map the vertices whose indices are in a given boundary loop (bnd) on the
|
|
28
|
+
unit circle with spacing proportional to the original boundary edge
|
|
29
|
+
lengths.
|
|
30
|
+
@param[in] V #V by dim list of mesh vertex positions
|
|
31
|
+
@param[in] b #W list of vertex ids
|
|
32
|
+
@param[out] UV #W by 2 list of 2D position on the unit circle for the vertices in b)");
|
|
33
|
+
}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
#include "default_types.h"
|
|
2
|
+
#include <nanobind/nanobind.h>
|
|
3
|
+
#include <nanobind/eigen/sparse.h>
|
|
4
|
+
#include <nanobind/ndarray.h>
|
|
5
|
+
#include <nanobind/stl/tuple.h>
|
|
6
|
+
|
|
7
|
+
namespace nb = nanobind;
|
|
8
|
+
using namespace nb::literals;
|
|
9
|
+
|
|
10
|
+
namespace pyigl
|
|
11
|
+
{
|
|
12
|
+
auto sparse_map_noop( const Eigen::Map<const Eigen::SparseMatrix<Integer>> &A)
|
|
13
|
+
{
|
|
14
|
+
return A;
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
// Bind the wrapper to the Python module
|
|
19
|
+
void bind_sparse_map_noop(nb::module_ &m)
|
|
20
|
+
{
|
|
21
|
+
m.def(
|
|
22
|
+
"sparse_map_noop",
|
|
23
|
+
&pyigl::sparse_map_noop,
|
|
24
|
+
"A"_a,
|
|
25
|
+
R"("Returns input A)");
|
|
26
|
+
}
|
|
27
|
+
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
#include "default_types.h"
|
|
2
|
+
#include <nanobind/nanobind.h>
|
|
3
|
+
#include <nanobind/eigen/sparse.h>
|
|
4
|
+
#include <nanobind/ndarray.h>
|
|
5
|
+
#include <nanobind/stl/tuple.h>
|
|
6
|
+
|
|
7
|
+
namespace nb = nanobind;
|
|
8
|
+
using namespace nb::literals;
|
|
9
|
+
|
|
10
|
+
namespace pyigl
|
|
11
|
+
{
|
|
12
|
+
auto sparse_map_shape( const Eigen::Map<const Eigen::SparseMatrix<Integer>> &A)
|
|
13
|
+
{
|
|
14
|
+
Eigen::Matrix<Integer,2,1> dims(A.rows(), A.cols());
|
|
15
|
+
return dims;
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
// Bind the wrapper to the Python module
|
|
20
|
+
void bind_sparse_map_shape(nb::module_ &m)
|
|
21
|
+
{
|
|
22
|
+
m.def(
|
|
23
|
+
"sparse_map_shape",
|
|
24
|
+
&pyigl::sparse_map_shape,
|
|
25
|
+
"A"_a,
|
|
26
|
+
R"("Returns shape of A as 2-vector)");
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
|