libigl 2.6.2__tar.gz → 2.6.3.dev1__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 → libigl-2.6.3.dev1}/.github/workflows/wheels.yml +1 -1
- {libigl-2.6.2 → libigl-2.6.3.dev1}/PKG-INFO +1 -1
- libigl-2.6.3.dev1/memory/MEMORY.md +26 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/pyproject.toml +1 -1
- libigl-2.6.3.dev1/src/accumarray.cpp +48 -0
- libigl-2.6.3.dev1/src/barycentric_interpolation.cpp +36 -0
- libigl-2.6.3.dev1/src/bezier.cpp +48 -0
- libigl-2.6.3.dev1/src/centroid.cpp +40 -0
- libigl-2.6.3.dev1/src/colormap.cpp +62 -0
- libigl-2.6.3.dev1/src/combine.cpp +33 -0
- libigl-2.6.3.dev1/src/dijkstra.cpp +84 -0
- libigl-2.6.3.dev1/src/directed_edge_parents.cpp +26 -0
- libigl-2.6.3.dev1/src/edge_topology.cpp +32 -0
- libigl-2.6.3.dev1/src/edges_to_path.cpp +36 -0
- libigl-2.6.3.dev1/src/euler_characteristic.cpp +20 -0
- libigl-2.6.3.dev1/src/exterior_edges.cpp +26 -0
- libigl-2.6.3.dev1/src/extract_manifold_patches.cpp +30 -0
- libigl-2.6.3.dev1/src/face_occurrences.cpp +26 -0
- libigl-2.6.3.dev1/src/fit_plane.cpp +30 -0
- libigl-2.6.3.dev1/src/flipped_triangles.cpp +29 -0
- libigl-2.6.3.dev1/src/flood_fill.cpp +31 -0
- libigl-2.6.3.dev1/src/hausdorff.cpp +37 -0
- libigl-2.6.3.dev1/src/hsv_to_rgb.cpp +26 -0
- libigl-2.6.3.dev1/src/is_boundary_edge.cpp +55 -0
- libigl-2.6.3.dev1/src/is_delaunay.cpp +30 -0
- libigl-2.6.3.dev1/src/is_irregular_vertex.cpp +22 -0
- libigl-2.6.3.dev1/src/iterative_closest_point.cpp +45 -0
- libigl-2.6.3.dev1/src/lbs_matrix.cpp +34 -0
- libigl-2.6.3.dev1/src/look_at.cpp +36 -0
- libigl-2.6.3.dev1/src/mvc.cpp +31 -0
- libigl-2.6.3.dev1/src/orient_outward.cpp +39 -0
- libigl-2.6.3.dev1/src/orientable_patches.cpp +45 -0
- libigl-2.6.3.dev1/src/per_corner_normals.cpp +34 -0
- libigl-2.6.3.dev1/src/per_edge_normals.cpp +47 -0
- libigl-2.6.3.dev1/src/per_vertex_attribute_smoothing.cpp +32 -0
- libigl-2.6.3.dev1/src/polar_dec.cpp +57 -0
- libigl-2.6.3.dev1/src/procrustes.cpp +41 -0
- libigl-2.6.3.dev1/src/pseudonormal_test.cpp +56 -0
- libigl-2.6.3.dev1/src/random_dir.cpp +28 -0
- libigl-2.6.3.dev1/src/ray_sphere_intersect.cpp +41 -0
- libigl-2.6.3.dev1/src/ray_triangle_intersect.cpp +50 -0
- libigl-2.6.3.dev1/src/readCSV.cpp +29 -0
- libigl-2.6.3.dev1/src/readSTL.cpp +42 -0
- libigl-2.6.3.dev1/src/rgb_to_hsv.cpp +26 -0
- libigl-2.6.3.dev1/src/rigid_alignment.cpp +36 -0
- libigl-2.6.3.dev1/src/rotation_matrix_from_directions.cpp +31 -0
- libigl-2.6.3.dev1/src/sample_edges.cpp +34 -0
- libigl-2.6.3.dev1/src/segment_segment_intersect.cpp +49 -0
- libigl-2.6.3.dev1/src/sharp_edges.cpp +32 -0
- libigl-2.6.3.dev1/src/signed_angle.cpp +32 -0
- libigl-2.6.3.dev1/src/snap_points.cpp +34 -0
- libigl-2.6.3.dev1/src/solid_angle.cpp +35 -0
- libigl-2.6.3.dev1/src/super_fibonacci.cpp +28 -0
- libigl-2.6.3.dev1/src/tet_tet_adjacency.cpp +30 -0
- libigl-2.6.3.dev1/src/tri_tri_intersect.cpp +73 -0
- libigl-2.6.3.dev1/src/turning_number.cpp +20 -0
- libigl-2.6.3.dev1/src/uniformly_sample_two_manifold.cpp +38 -0
- libigl-2.6.3.dev1/src/vector_area_matrix.cpp +29 -0
- libigl-2.6.3.dev1/src/voronoi_mass.cpp +29 -0
- libigl-2.6.3.dev1/src/writeOFF.cpp +52 -0
- libigl-2.6.3.dev1/src/writeSTL.cpp +37 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/tests/test_all.py +441 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/.github/workflows/pip.yml +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/.gitignore +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/CMakeLists.txt +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/LICENSE.GPL +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/LICENSE.MPL2 +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/README.md +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/attic/copyleft/tetgen_tetrahedralize.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/attic/copyleft/triangle_triangulate.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/attic/skip/SolverStatus.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/attic/skip/WindingNumberMethod.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/attic/skip/angular_distance.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/attic/skip/canonical_quaternions.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/attic/skip/column_to_quats.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/attic/skip/comiso_nrosy.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/attic/skip/covariance_scatter_matrix.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/attic/skip/file_contents_as_string.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/attic/skip/fit_rotations.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/attic/skip/frame_field_deformer.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/attic/skip/frame_to_cross_field.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/attic/skip/frustum.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/attic/skip/group_sum_matrix.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/attic/skip/harwell_boeing.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/attic/skip/histc.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/attic/skip/hsv_to_rgb.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/attic/skip/infinite_cost_stopping_condition.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/attic/skip/intersect.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/attic/skip/invert_diag.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/attic/skip/is_planar.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/attic/skip/limit_faces.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/attic/skip/line_field_missmatch.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/attic/skip/line_search.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/attic/skip/mat_to_quat.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/attic/skip/material_colors.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/attic/skip/max_faces_stopping_condition.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/attic/skip/min_quad_dense.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/attic/skip/normalize_quat.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/attic/skip/on_boundary.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/attic/skip/opengl2_draw_beach_ball.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/attic/skip/opengl2_draw_floor.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/attic/skip/opengl2_draw_mesh.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/attic/skip/opengl2_draw_point.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/attic/skip/opengl2_draw_rectangular_marquee.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/attic/skip/opengl2_draw_skeleton_3d.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/attic/skip/opengl2_draw_skeleton_vector_graphics.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/attic/skip/opengl2_flare_textures.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/attic/skip/opengl2_model_proj_viewport.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/attic/skip/opengl2_print_gl_get.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/attic/skip/opengl2_project.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/attic/skip/opengl2_right_axis.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/attic/skip/opengl2_shine_textures.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/attic/skip/opengl2_sort_triangles.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/attic/skip/opengl2_unproject.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/attic/skip/opengl2_unproject_to_zero_plane.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/attic/skip/opengl2_up_axis.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/attic/skip/opengl2_view_axis.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/attic/skip/opengl_create_shader_program.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/attic/skip/opengl_destroy_shader_program.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/attic/skip/opengl_gl_type_size.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/attic/skip/opengl_glfw_background_window.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/attic/skip/opengl_glfw_imgui_ImGuiHelpers.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/attic/skip/opengl_init_render_to_texture.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/attic/skip/opengl_load_shader.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/attic/skip/opengl_print_program_info_log.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/attic/skip/opengl_print_shader_info_log.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/attic/skip/opengl_report_gl_error.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/attic/skip/opengl_uniform_type_to_string.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/attic/skip/ortho.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/attic/skip/parallel_transport_angles.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/attic/skip/polar_svd.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/attic/skip/polar_svd3x3.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/attic/skip/qslim_optimal_collapse_edge_callbacks.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/attic/skip/quadric_binary_plus_operator.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/attic/skip/quat_conjugate.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/attic/skip/quat_mult.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/attic/skip/quat_to_axis_angle.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/attic/skip/quat_to_mat.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/attic/skip/quats_to_column.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/attic/skip/random_quaternion.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/attic/skip/readBF.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/attic/skip/readNODE.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/attic/skip/readPLY.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/attic/skip/readSTL.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/attic/skip/rgb_to_hsv.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/attic/skip/rotate_by_quat.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/attic/skip/rotation_matrix_from_directions.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/attic/skip/snap_to_canonical_view_quat.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/attic/skip/snap_to_fixed_up.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/attic/skip/sort_angles.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/attic/skip/sort_triangles.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/attic/skip/sort_vectors_ccw.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/attic/skip/svd3x3.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/attic/skip/svd3x3_avx.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/attic/skip/svd3x3_sse.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/attic/skip/trackball.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/attic/skip/transpose_blocks.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/attic/skip/unique_rows.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/attic/skip/voxel_grid.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/attic/skip/writePLY.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/attic/skip/writeSTL.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/attic/skip/writeWRL.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/attic/todo-old/MeshBooleanType.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/attic/todo-old/NormalType.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/attic/todo-old/collapse_edge.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/attic/todo-old/copyleft/copyleft_cgal_assign.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/attic/todo-old/copyleft/copyleft_cgal_assign_scalar.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/attic/todo-old/copyleft/copyleft_cgal_cell_adjacency.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/attic/todo-old/copyleft/copyleft_cgal_closest_facet.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/attic/todo-old/copyleft/copyleft_cgal_complex_to_mesh.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/attic/todo-old/copyleft/copyleft_cgal_component_inside_component.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/attic/todo-old/copyleft/copyleft_cgal_convex_hull.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/attic/todo-old/copyleft/copyleft_cgal_delaunay_triangulation.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/attic/todo-old/copyleft/copyleft_cgal_extract_cells.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/attic/todo-old/copyleft/copyleft_cgal_extract_feature.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/attic/todo-old/copyleft/copyleft_cgal_fast_winding_number.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/attic/todo-old/copyleft/copyleft_cgal_half_space_box.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/attic/todo-old/copyleft/copyleft_cgal_hausdorff.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/attic/todo-old/copyleft/copyleft_cgal_incircle.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/attic/todo-old/copyleft/copyleft_cgal_insert_into_cdt.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/attic/todo-old/copyleft/copyleft_cgal_insphere.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/attic/todo-old/copyleft/copyleft_cgal_intersect_other.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/attic/todo-old/copyleft/copyleft_cgal_intersect_with_half_space.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/attic/todo-old/copyleft/copyleft_cgal_lexicographic_triangulation.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/attic/todo-old/copyleft/copyleft_cgal_mesh_boolean.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/attic/todo-old/copyleft/copyleft_cgal_mesh_boolean_type_to_funcs.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/attic/todo-old/copyleft/copyleft_cgal_mesh_to_cgal_triangle_list.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/attic/todo-old/copyleft/copyleft_cgal_mesh_to_polyhedron.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/attic/todo-old/copyleft/copyleft_cgal_minkowski_sum.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/attic/todo-old/copyleft/copyleft_cgal_order_facets_around_edge.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/attic/todo-old/copyleft/copyleft_cgal_order_facets_around_edges.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/attic/todo-old/copyleft/copyleft_cgal_orient2D.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/attic/todo-old/copyleft/copyleft_cgal_orient3D.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/attic/todo-old/copyleft/copyleft_cgal_outer_element.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/attic/todo-old/copyleft/copyleft_cgal_outer_facet.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/attic/todo-old/copyleft/copyleft_cgal_outer_hull.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/attic/todo-old/copyleft/copyleft_cgal_peel_outer_hull_layers.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/attic/todo-old/copyleft/copyleft_cgal_peel_winding_number_layers.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/attic/todo-old/copyleft/copyleft_cgal_piecewise_constant_winding_number.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/attic/todo-old/copyleft/copyleft_cgal_point_areas.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/attic/todo-old/copyleft/copyleft_cgal_point_mesh_squared_distance.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/attic/todo-old/copyleft/copyleft_cgal_point_segment_squared_distance.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/attic/todo-old/copyleft/copyleft_cgal_point_solid_signed_squared_distance.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/attic/todo-old/copyleft/copyleft_cgal_point_triangle_squared_distance.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/attic/todo-old/copyleft/copyleft_cgal_points_inside_component.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/attic/todo-old/copyleft/copyleft_cgal_polyhedron_to_mesh.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/attic/todo-old/copyleft/copyleft_cgal_projected_cdt.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/attic/todo-old/copyleft/copyleft_cgal_projected_delaunay.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/attic/todo-old/copyleft/copyleft_cgal_propagate_winding_numbers.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/attic/todo-old/copyleft/copyleft_cgal_read_triangle_mesh.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/attic/todo-old/copyleft/copyleft_cgal_relabel_small_immersed_cells.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/attic/todo-old/copyleft/copyleft_cgal_remesh_intersections.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/attic/todo-old/copyleft/copyleft_cgal_remesh_self_intersections.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/attic/todo-old/copyleft/copyleft_cgal_resolve_intersections.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/attic/todo-old/copyleft/copyleft_cgal_row_to_point.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/attic/todo-old/copyleft/copyleft_cgal_segment_segment_squared_distance.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/attic/todo-old/copyleft/copyleft_cgal_signed_distance_isosurface.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/attic/todo-old/copyleft/copyleft_cgal_snap_rounding.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/attic/todo-old/copyleft/copyleft_cgal_string_to_mesh_boolean_type.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/attic/todo-old/copyleft/copyleft_cgal_subdivide_segments.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/attic/todo-old/copyleft/copyleft_cgal_submesh_aabb_tree.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/attic/todo-old/copyleft/copyleft_cgal_triangle_triangle_squared_distance.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/attic/todo-old/copyleft/copyleft_cgal_trim_with_solid.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/attic/todo-old/copyleft/copyleft_cgal_wire_mesh.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/attic/todo-old/copyleft/copyleft_comiso_miq.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/attic/todo-old/copyleft/copyleft_cork_mesh_boolean.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/attic/todo-old/copyleft/copyleft_marching_cubes.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/attic/todo-old/copyleft/copyleft_offset_surface.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/attic/todo-old/copyleft/copyleft_opengl2_render_to_tga.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/attic/todo-old/copyleft/copyleft_opengl2_texture_from_tga.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/attic/todo-old/copyleft/copyleft_progressive_hulls.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/attic/todo-old/copyleft/copyleft_progressive_hulls_cost_and_placement.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/attic/todo-old/copyleft/copyleft_quadprog.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/attic/todo-old/copyleft/copyleft_swept_volume.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/attic/todo-old/copyleft/copyleft_tetgen_mesh_with_skeleton.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/attic/todo-old/copyleft/copyleft_tetgen_read_into_tetgenio.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/attic/todo-old/copyleft/copyleft_tetgen_tetrahedralize.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/attic/todo-old/dijkstra.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/attic/todo-old/embree_bone_heat.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/attic/todo-old/embree_reorient_facets_raycast.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/attic/todo-old/fast_winding_number.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/attic/todo-old/flip_edge.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/attic/todo-old/knn.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/attic/todo-old/mosek_mosek_guarded.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/attic/todo-old/mosek_mosek_linprog.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/attic/todo-old/octree.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/attic/todo-old/per_vertex_point_to_plane_quadrics.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/attic/todo-old/png_readPNG.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/attic/todo-old/png_render_to_png.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/attic/todo-old/png_render_to_png_async.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/attic/todo-old/png_texture_from_file.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/attic/todo-old/png_texture_from_png.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/attic/todo-old/png_writePNG.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/attic/todo-old/pseudonormal_test.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/attic/todo-old/readWRL.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/attic/todo-old/remesh_along_isoline.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/attic/todo-old/seam_edges.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/attic/todo-old/shortest_edge_and_midpoint.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/attic/todo-old/squared_edge_lengths.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/attic/todo-old/straighten_seams.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/attic/todo-old/swept_volume_signed_distance.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/attic/todo-old/triangle_cdt.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/attic/todo-old/unzip_corners.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/attic/todo-old/writeBF.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/attic/todo-old/writeDMAT.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/attic/todo-old/writeMESH.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/attic/todo-old/writeTGF.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/attic/todo-old/xml_writeDAE.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/attic/todo-old/xml_write_triangle_mesh.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/classes/AABB.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/classes/classes.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/cmake/CXXFeatures.cmake +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/cmake/FindLIBIGL.cmake +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/cmake/UseColors.cmake +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/cmake/Warnings.cmake +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/include/default_types.h +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/missing.sh +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/mkdocs.yml +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/postBuild +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/priority.txt +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/scripts/basic_function.mako +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/scripts/blender_igl_export.py +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/scripts/generate_bindings.py +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/scripts/make_lean.py +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/scripts/parser.py +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/src/AABB.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/src/FileEncoding.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/src/MappingEnergyType.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/src/MassMatrixType.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/src/OrientedBoundingBoxMinimizeType.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/src/adjacency_list.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/src/adjacency_matrix.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/src/all_pairs_distances.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/src/arap.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/src/average_from_edges_onto_vertices.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/src/average_onto_faces.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/src/average_onto_vertices.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/src/avg_edge_length.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/src/barycenter.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/src/barycentric_coordinates.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/src/bbw.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/src/bfs_orient.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/src/biharmonic_coordinates.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/src/bijective_composite_harmonic_mapping.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/src/blue_noise.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/src/boundary_facets.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/src/boundary_loop.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/src/bounding_box.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/src/bounding_box_diagonal.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/src/circulation.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/src/circumradius.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/src/collapse_edge.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/src/comb_cross_field.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/src/comb_frame_field.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/src/compute_frame_field_bisectors.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/src/connected_components.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/src/copyleft/cgal/convex_hull.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/src/copyleft/cgal/fast_winding_number.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/src/copyleft/cgal/intersect_other.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/src/copyleft/cgal/intersect_with_half_space.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/src/copyleft/cgal/mesh_boolean.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/src/copyleft/cgal/module.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/src/copyleft/cgal/oriented_bounding_box.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/src/copyleft/cgal/point_areas.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/src/copyleft/cgal/remesh_self_intersections.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/src/copyleft/cgal/trim_with_solid.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/src/copyleft/module.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/src/copyleft/progressive_hulls.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/src/copyleft/tetgen/module.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/src/copyleft/tetgen/tetrahedralize.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/src/cotmatrix.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/src/cotmatrix_entries.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/src/cotmatrix_intrinsic.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/src/cross_field_mismatch.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/src/crouzeix_raviart_cotmatrix.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/src/crouzeix_raviart_massmatrix.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/src/curved_hessian_energy.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/src/cut_mesh.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/src/cut_mesh_from_singularities.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/src/cut_to_disk.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/src/cylinder.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/src/decimate.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/src/dihedral_angles.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/src/dihedral_angles_intrinsic.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/src/doublearea.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/src/dual_contouring.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/src/ears.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/src/edge_flaps.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/src/edge_lengths.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/src/edges.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/src/embree/EmbreeIntersector.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/src/embree/ambient_occlusion.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/src/embree/module.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/src/embree/reorient_facets_raycast.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/src/embree/shape_diameter_function.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/src/exact_geodesic.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/src/face_areas.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/src/facet_adjacency_matrix.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/src/facet_components.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/src/false_barycentric_subdivision.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/src/fast_winding_number.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/src/find_cross_field_singularities.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/src/gaussian_curvature.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/src/grad.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/src/grid.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/src/harmonic.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/src/heat_geodesics.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/src/hessian.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/src/hessian_energy.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/src/icosahedron.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/src/in_element.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/src/inradius.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/src/internal_angles.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/src/intrinsic_delaunay_cotmatrix.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/src/intrinsic_delaunay_triangulation.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/src/is_border_vertex.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/src/is_edge_manifold.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/src/is_intrinsic_delaunay.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/src/is_vertex_manifold.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/src/ismember_rows.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/src/isolines.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/src/isolines_intrinsic.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/src/kelvinlets.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/src/knn.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/src/lipschitz_octree.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/src/local_basis.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/src/loop.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/src/lscm.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/src/map_vertices_to_circle.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/src/marching_cubes.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/src/massmatrix.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/src/massmatrix_intrinsic.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/src/matlab_format.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/src/min_quad_with_fixed.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/src/module.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/src/moments.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/src/noop.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/src/octree.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/src/offset_surface.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/src/on_boundary.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/src/orient_halfedges.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/src/oriented_bounding_box.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/src/oriented_facets.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/src/per_face_normals.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/src/per_vertex_normals.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/src/point_mesh_squared_distance.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/src/polar_svd.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/src/polygon_corners.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/src/polygons_to_triangles.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/src/principal_curvature.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/src/project.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/src/project_to_line.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/src/project_to_line_segment.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/src/qslim.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/src/quad_grid.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/src/random_points_on_mesh.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/src/ray_mesh_intersect.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/src/readDMAT.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/src/readMESH.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/src/readMSH.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/src/readOBJ.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/src/readOFF.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/src/read_triangle_mesh.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/src/remove_duplicate_vertices.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/src/remove_unreferenced.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/src/rotate_vectors.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/src/signed_distance.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/src/slim.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/src/sparse_map_noop.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/src/sparse_map_shape.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/src/sparse_noop.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/src/sparse_shape.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/src/split_nonmanifold.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/src/squared_edge_lengths.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/src/triangle/module.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/src/triangle/scaf.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/src/triangle/triangulate.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/src/triangle_fan.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/src/triangle_triangle_adjacency.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/src/triangulated_grid.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/src/unique_edge_map.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/src/unique_simplices.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/src/unique_sparse_voxel_corners.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/src/unproject.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/src/upsample.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/src/vertex_components.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/src/vertex_triangle_adjacency.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/src/volume.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/src/voxel_grid.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/src/winding_number.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/src/writeDMAT.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/src/writeMESH.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/src/writeMSH.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/src/writeOBJ.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/src/writePLY.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/src/write_triangle_mesh.cpp +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/tutorial/contributing.md +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/tutorial/exporter.py +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/tutorial/igl_docs.md +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/tutorial/images/102_DrawMesh.png +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/tutorial/images/104_Colors.png +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/tutorial/images/105_Overlays.png +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/tutorial/images/106_ViewerMenu.png +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/tutorial/images/501_HarmonicParam.png +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/tutorial/images/502_LSCMParam.png +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/tutorial/images/503_ARAPParam.png +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/tutorial/images/504_nrosy_field.png +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/tutorial/images/504_vector_field.png +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/tutorial/images/505_MIQ_1.png +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/tutorial/images/505_MIQ_2.png +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/tutorial/images/505_MIQ_3.png +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/tutorial/images/505_MIQ_4.png +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/tutorial/images/505_MIQ_5.png +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/tutorial/images/505_MIQ_6.png +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/tutorial/images/505_MIQ_7.png +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/tutorial/images/505_MIQ_8.png +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/tutorial/images/506_FrameField_1.png +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/tutorial/images/506_FrameField_2.png +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/tutorial/images/506_FrameField_3.png +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/tutorial/images/506_FrameField_4.png +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/tutorial/images/507_PolyVectorField.png +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/tutorial/images/508_ConjugateField.png +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/tutorial/images/509_Planarization.png +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/tutorial/images/510_Integrable.png +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/tutorial/images/511_PolyVectorFieldGeneral.png +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/tutorial/images/602_Matlab_1.png +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/tutorial/images/602_Matlab_2.png +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/tutorial/images/604_Triangle.png +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/tutorial/images/605_Tetgen.png +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/tutorial/images/606_AmbientOcclusion.png +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/tutorial/images/607_Picking.png +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/tutorial/images/608_LIM.png +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/tutorial/images/712_beetles.jpg +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/tutorial/images/713_ShapeUp.png +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/tutorial/images/VF.pdf +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/tutorial/images/VF.png +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/tutorial/images/arm-dqs.jpg +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/tutorial/images/armadillo-fast.jpg +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/tutorial/images/armadillo-marching-cubes.jpg +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/tutorial/images/background.gif +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/tutorial/images/beetle-eigen-decomposition.gif +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/tutorial/images/big-sigcat-winding-number.gif +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/tutorial/images/bump-k-harmonic.jpg +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/tutorial/images/bumpy-gaussian-curvature.jpg +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/tutorial/images/bunny-signed-distance.gif +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/tutorial/images/bunny-swept-volume.gif +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/tutorial/images/camelhead-laplace-equation.jpg +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/tutorial/images/cheburashka-biharmonic-leq.jpg +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/tutorial/images/cheburashka-gradient.jpg +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/tutorial/images/cheburashka-knight-boolean.jpg +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/tutorial/images/cheburashka-multiscale-biharmonic-kernels.jpg +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/tutorial/images/cow-curvature-flow.jpg +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/tutorial/images/cube-sphere-cylinders-csg-tree.jpg +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/tutorial/images/cube-sphere-cylinders-csg.gif +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/tutorial/images/decimated-knight-arap.jpg +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/tutorial/images/decimated-knight-slice-color.jpg +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/tutorial/images/decimated-knight-sort-color.jpg +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/tutorial/images/decimated-knight-subdivision.gif +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/tutorial/images/edge-collapse.jpg +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/tutorial/images/edge-collapse.pdf +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/tutorial/images/fandisk-normals.jpg +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/tutorial/images/fertility-edge-collapse.gif +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/tutorial/images/fertility-principal-curvature.jpg +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/tutorial/images/geodesicdistance.jpg +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/tutorial/images/hand-bbw.jpg +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/tutorial/images/hat-function.jpg +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/tutorial/images/heat-geodesic-beetle.gif +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/tutorial/images/heat-geodesic-peaks.png +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/tutorial/images/libigl-logo.jpg +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/tutorial/images/max-biharmonic.jpg +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/tutorial/images/multiple-meshes.png +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/tutorial/images/octopus-biharmonic-coordinates-physics.gif +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/tutorial/images/simplicial_complex_augmentation_framework.png +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/tutorial/images/slim.png +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/tutorial/images/streamlines.jpg +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/tutorial/images/truck-facet-orientation.jpg +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/tutorial/index.md +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/tutorial/marching_cubes.py +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/tutorial/plot_to_md.py +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/tutorial/tut-chapter0.ipynb +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/tutorial/tut-chapter1.ipynb +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/tutorial/tut-chapter2.ipynb +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/tutorial/tut-chapter3.ipynb +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/tutorial/tut-chapter4.ipynb +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/tutorial/tut-chapter5.ipynb +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/tutorial/tut-chapter6.ipynb +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/tutorial/tut-chapter7.ipynb +0 -0
- {libigl-2.6.2 → libigl-2.6.3.dev1}/tutorial/tutorials.ipynb +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: libigl
|
|
3
|
-
Version: 2.6.
|
|
3
|
+
Version: 2.6.3.dev1
|
|
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)
|
|
@@ -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`
|
|
@@ -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,36 @@
|
|
|
1
|
+
#include "default_types.h"
|
|
2
|
+
#include <igl/barycentric_interpolation.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 barycentric_interpolation(
|
|
12
|
+
const nb::DRef<const Eigen::MatrixXN> &D,
|
|
13
|
+
const nb::DRef<const Eigen::MatrixXI> &F,
|
|
14
|
+
const nb::DRef<const Eigen::MatrixXN> &B,
|
|
15
|
+
const nb::DRef<const Eigen::MatrixXI> &I)
|
|
16
|
+
{
|
|
17
|
+
// I is indexed as a vector internally
|
|
18
|
+
const Eigen::VectorXI idx = I.reshaped();
|
|
19
|
+
Eigen::MatrixXN X;
|
|
20
|
+
igl::barycentric_interpolation(D, F, B, idx, X);
|
|
21
|
+
return X;
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
void bind_barycentric_interpolation(nb::module_ &m)
|
|
26
|
+
{
|
|
27
|
+
m.def("barycentric_interpolation", &pyigl::barycentric_interpolation,
|
|
28
|
+
"D"_a, "F"_a, "B"_a, "I"_a,
|
|
29
|
+
R"(Interpolate per-vertex data on a triangle mesh using barycentric coordinates.
|
|
30
|
+
|
|
31
|
+
@param[in] D #V by dim list of per-vertex data
|
|
32
|
+
@param[in] F #F by 3 list of triangle indices
|
|
33
|
+
@param[in] B #X by 3 list of barycentric coordinates
|
|
34
|
+
@param[in] I #X list of triangle indices into F
|
|
35
|
+
@return X #X by dim list of interpolated data)");
|
|
36
|
+
}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
#include "default_types.h"
|
|
2
|
+
#include <igl/bezier.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
|
+
// Single parameter t
|
|
12
|
+
auto bezier_t(
|
|
13
|
+
const nb::DRef<const Eigen::MatrixXN> &V,
|
|
14
|
+
const Numeric t)
|
|
15
|
+
{
|
|
16
|
+
Eigen::MatrixXN P;
|
|
17
|
+
igl::bezier(V, t, P);
|
|
18
|
+
return P;
|
|
19
|
+
}
|
|
20
|
+
// Array of parameters T
|
|
21
|
+
auto bezier_T(
|
|
22
|
+
const nb::DRef<const Eigen::MatrixXN> &V,
|
|
23
|
+
const nb::DRef<const Eigen::MatrixXN> &T)
|
|
24
|
+
{
|
|
25
|
+
// Copy T to compact vector for single-index access
|
|
26
|
+
const Eigen::VectorXN t = T.reshaped();
|
|
27
|
+
Eigen::MatrixXN P;
|
|
28
|
+
igl::bezier(V, t, P);
|
|
29
|
+
return P;
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
void bind_bezier(nb::module_ &m)
|
|
34
|
+
{
|
|
35
|
+
m.def("bezier", &pyigl::bezier_t, "V"_a, "t"_a,
|
|
36
|
+
R"(Evaluate a polynomial Bezier curve at a single parameter value.
|
|
37
|
+
|
|
38
|
+
@param[in] V #V by dim list of Bezier control points
|
|
39
|
+
@param[in] t evaluation parameter in [0,1]
|
|
40
|
+
@return P 1 by dim output point)");
|
|
41
|
+
|
|
42
|
+
m.def("bezier", &pyigl::bezier_T, "V"_a, "T"_a,
|
|
43
|
+
R"(Evaluate a polynomial Bezier curve at many parameter values.
|
|
44
|
+
|
|
45
|
+
@param[in] V #V by dim list of Bezier control points
|
|
46
|
+
@param[in] T #T list of evaluation parameters in [0,1]
|
|
47
|
+
@return P #T by dim output points)");
|
|
48
|
+
}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
#include "default_types.h"
|
|
2
|
+
#include <igl/centroid.h>
|
|
3
|
+
#include <nanobind/nanobind.h>
|
|
4
|
+
#include <nanobind/eigen/dense.h>
|
|
5
|
+
#include <nanobind/stl/tuple.h>
|
|
6
|
+
|
|
7
|
+
namespace nb = nanobind;
|
|
8
|
+
using namespace nb::literals;
|
|
9
|
+
|
|
10
|
+
namespace pyigl
|
|
11
|
+
{
|
|
12
|
+
auto centroid(
|
|
13
|
+
const nb::DRef<const Eigen::MatrixXN> &V,
|
|
14
|
+
const nb::DRef<const Eigen::MatrixXI> &F)
|
|
15
|
+
{
|
|
16
|
+
Eigen::VectorXN c;
|
|
17
|
+
Numeric vol;
|
|
18
|
+
igl::centroid(V,F,c,vol);
|
|
19
|
+
return std::make_tuple(c,vol);
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
void bind_centroid(nb::module_ &m)
|
|
24
|
+
{
|
|
25
|
+
m.def(
|
|
26
|
+
"centroid",
|
|
27
|
+
&pyigl::centroid,
|
|
28
|
+
"V"_a,
|
|
29
|
+
"F"_a,
|
|
30
|
+
R"(Computes the centroid and enclosed volume of a closed mesh using a surface
|
|
31
|
+
integral.
|
|
32
|
+
|
|
33
|
+
@param[in] V #V by dim list of rest domain positions
|
|
34
|
+
@param[in] F #F by 3 list of triangle indices into V
|
|
35
|
+
@return c dim vector of centroid coordinates
|
|
36
|
+
@return vol total volume of solid
|
|
37
|
+
|
|
38
|
+
\see moments
|
|
39
|
+
)");
|
|
40
|
+
}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
#include "default_types.h"
|
|
2
|
+
#include <igl/colormap.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
|
+
// Map scalar array to RGB colors using a colormap
|
|
12
|
+
auto colormap(
|
|
13
|
+
const igl::ColorMapType cm,
|
|
14
|
+
const nb::DRef<const Eigen::VectorXN> &Z,
|
|
15
|
+
const bool normalize)
|
|
16
|
+
{
|
|
17
|
+
Eigen::MatrixXN C;
|
|
18
|
+
igl::colormap(cm, Z, normalize, C);
|
|
19
|
+
return C;
|
|
20
|
+
}
|
|
21
|
+
// Map scalar to single RGB triple
|
|
22
|
+
auto colormap_scalar(
|
|
23
|
+
const igl::ColorMapType cm,
|
|
24
|
+
const Numeric f)
|
|
25
|
+
{
|
|
26
|
+
Numeric r, g, b;
|
|
27
|
+
igl::colormap(cm, f, r, g, b);
|
|
28
|
+
Eigen::Vector3d rgb;
|
|
29
|
+
rgb << r, g, b;
|
|
30
|
+
return rgb;
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
void bind_colormap(nb::module_ &m)
|
|
35
|
+
{
|
|
36
|
+
nb::enum_<igl::ColorMapType>(m, "ColorMapType")
|
|
37
|
+
.value("INFERNO", igl::COLOR_MAP_TYPE_INFERNO)
|
|
38
|
+
.value("JET", igl::COLOR_MAP_TYPE_JET)
|
|
39
|
+
.value("MAGMA", igl::COLOR_MAP_TYPE_MAGMA)
|
|
40
|
+
.value("PARULA", igl::COLOR_MAP_TYPE_PARULA)
|
|
41
|
+
.value("PLASMA", igl::COLOR_MAP_TYPE_PLASMA)
|
|
42
|
+
.value("VIRIDIS", igl::COLOR_MAP_TYPE_VIRIDIS)
|
|
43
|
+
.value("TURBO", igl::COLOR_MAP_TYPE_TURBO)
|
|
44
|
+
.export_values();
|
|
45
|
+
|
|
46
|
+
m.def("colormap", &pyigl::colormap,
|
|
47
|
+
"cm"_a, "Z"_a, "normalize"_a = true,
|
|
48
|
+
R"(Map scalar values to RGB colors using a colormap.
|
|
49
|
+
|
|
50
|
+
@param[in] cm colormap type (igl.ColorMapType.VIRIDIS, .JET, etc.)
|
|
51
|
+
@param[in] Z #Z list of scalar values
|
|
52
|
+
@param[in] normalize if true, normalize Z to [0,1] range before mapping
|
|
53
|
+
@return C #Z by 3 list of RGB colors in [0,1])");
|
|
54
|
+
|
|
55
|
+
m.def("colormap", &pyigl::colormap_scalar,
|
|
56
|
+
"cm"_a, "f"_a,
|
|
57
|
+
R"(Map a single scalar in [0,1] to an RGB color.
|
|
58
|
+
|
|
59
|
+
@param[in] cm colormap type
|
|
60
|
+
@param[in] f scalar in [0,1]
|
|
61
|
+
@return 3-vector of RGB values in [0,1])");
|
|
62
|
+
}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
#include "default_types.h"
|
|
2
|
+
#include <igl/combine.h>
|
|
3
|
+
#include <nanobind/nanobind.h>
|
|
4
|
+
#include <nanobind/eigen/dense.h>
|
|
5
|
+
#include <nanobind/stl/tuple.h>
|
|
6
|
+
#include <nanobind/stl/vector.h>
|
|
7
|
+
|
|
8
|
+
namespace nb = nanobind;
|
|
9
|
+
using namespace nb::literals;
|
|
10
|
+
|
|
11
|
+
namespace pyigl
|
|
12
|
+
{
|
|
13
|
+
auto combine(
|
|
14
|
+
const std::vector<Eigen::MatrixXN> &VV,
|
|
15
|
+
const std::vector<Eigen::MatrixXI> &FF)
|
|
16
|
+
{
|
|
17
|
+
Eigen::MatrixXN V;
|
|
18
|
+
Eigen::MatrixXI F;
|
|
19
|
+
igl::combine(VV, FF, V, F);
|
|
20
|
+
return std::make_tuple(V, F);
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
void bind_combine(nb::module_ &m)
|
|
25
|
+
{
|
|
26
|
+
m.def("combine", &pyigl::combine, "VV"_a, "FF"_a,
|
|
27
|
+
R"(Concatenate multiple meshes into a single mesh.
|
|
28
|
+
|
|
29
|
+
@param[in] VV list of vertex position matrices, each #Vi by dim
|
|
30
|
+
@param[in] FF list of face index matrices, each #Fi by simplex_size
|
|
31
|
+
@return V concatenated vertex positions
|
|
32
|
+
@return F concatenated face indices (reindexed into V))");
|
|
33
|
+
}
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
#include "default_types.h"
|
|
2
|
+
#include <igl/dijkstra.h>
|
|
3
|
+
#include <nanobind/nanobind.h>
|
|
4
|
+
#include <nanobind/eigen/dense.h>
|
|
5
|
+
#include <nanobind/stl/tuple.h>
|
|
6
|
+
#include <nanobind/stl/vector.h>
|
|
7
|
+
#include <nanobind/stl/set.h>
|
|
8
|
+
|
|
9
|
+
namespace nb = nanobind;
|
|
10
|
+
using namespace nb::literals;
|
|
11
|
+
|
|
12
|
+
namespace pyigl
|
|
13
|
+
{
|
|
14
|
+
// Dijkstra with uniform edge weights (Euclidean distance via vertex positions)
|
|
15
|
+
auto dijkstra(
|
|
16
|
+
const nb::DRef<const Eigen::MatrixXN> &V,
|
|
17
|
+
const std::vector<std::vector<Integer>> &VV,
|
|
18
|
+
const Integer source,
|
|
19
|
+
const std::set<Integer> &targets)
|
|
20
|
+
{
|
|
21
|
+
Eigen::VectorXN min_distance;
|
|
22
|
+
Eigen::VectorXI previous;
|
|
23
|
+
igl::dijkstra(V, VV, source, targets, min_distance, previous);
|
|
24
|
+
return std::make_tuple(min_distance, previous);
|
|
25
|
+
}
|
|
26
|
+
// Dijkstra with custom vertex weights
|
|
27
|
+
auto dijkstra_weighted(
|
|
28
|
+
const Integer source,
|
|
29
|
+
const std::set<Integer> &targets,
|
|
30
|
+
const std::vector<std::vector<Integer>> &VV,
|
|
31
|
+
const std::vector<double> &weights)
|
|
32
|
+
{
|
|
33
|
+
Eigen::VectorXN min_distance;
|
|
34
|
+
Eigen::VectorXI previous;
|
|
35
|
+
igl::dijkstra(source, targets, VV, weights, min_distance, previous);
|
|
36
|
+
return std::make_tuple(min_distance, previous);
|
|
37
|
+
}
|
|
38
|
+
// Backtrack path from vertex to source
|
|
39
|
+
auto dijkstra_backtrack(
|
|
40
|
+
const Integer vertex,
|
|
41
|
+
const nb::DRef<const Eigen::MatrixXI> &previous)
|
|
42
|
+
{
|
|
43
|
+
// previous[i] single-index access requires IsVectorAtCompileTime — copy to VectorXI
|
|
44
|
+
const Eigen::VectorXI prev = previous.reshaped();
|
|
45
|
+
std::vector<Integer> path;
|
|
46
|
+
igl::dijkstra(vertex, prev, path);
|
|
47
|
+
Eigen::VectorXI result(path.size());
|
|
48
|
+
for (size_t i = 0; i < path.size(); ++i) result(i) = path[i];
|
|
49
|
+
return result;
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
void bind_dijkstra(nb::module_ &m)
|
|
54
|
+
{
|
|
55
|
+
m.def("dijkstra", &pyigl::dijkstra,
|
|
56
|
+
"V"_a, "VV"_a, "source"_a, "targets"_a,
|
|
57
|
+
R"(Dijkstra shortest paths using Euclidean edge weights.
|
|
58
|
+
|
|
59
|
+
@param[in] V #V by 3 list of vertex positions
|
|
60
|
+
@param[in] VV #V list of adjacency lists (e.g. from adjacency_list)
|
|
61
|
+
@param[in] source source vertex index
|
|
62
|
+
@param[in] targets set of target vertex indices (stop early if reached)
|
|
63
|
+
@return min_distance #V list of minimum distances from source
|
|
64
|
+
@return previous #V list of previous vertex indices for path reconstruction)");
|
|
65
|
+
|
|
66
|
+
m.def("dijkstra", &pyigl::dijkstra_weighted,
|
|
67
|
+
"source"_a, "targets"_a, "VV"_a, "weights"_a,
|
|
68
|
+
R"(Dijkstra shortest paths with custom vertex weights.
|
|
69
|
+
|
|
70
|
+
@param[in] source source vertex index
|
|
71
|
+
@param[in] targets set of target vertex indices
|
|
72
|
+
@param[in] VV #V list of adjacency lists
|
|
73
|
+
@param[in] weights #V list of vertex weights
|
|
74
|
+
@return min_distance #V list of minimum distances from source
|
|
75
|
+
@return previous #V list of previous vertex indices)");
|
|
76
|
+
|
|
77
|
+
m.def("dijkstra_backtrack", &pyigl::dijkstra_backtrack,
|
|
78
|
+
"vertex"_a, "previous"_a,
|
|
79
|
+
R"(Backtrack path from a vertex to the source using Dijkstra's previous array.
|
|
80
|
+
|
|
81
|
+
@param[in] vertex destination vertex
|
|
82
|
+
@param[in] previous #V list of previous vertex indices (from dijkstra)
|
|
83
|
+
@return path list of vertex indices from vertex to source)");
|
|
84
|
+
}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
#include "default_types.h"
|
|
2
|
+
#include <igl/directed_edge_parents.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 directed_edge_parents(const nb::DRef<const Eigen::MatrixXI> &E)
|
|
12
|
+
{
|
|
13
|
+
Eigen::VectorXI P;
|
|
14
|
+
igl::directed_edge_parents(E, P);
|
|
15
|
+
return P;
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
void bind_directed_edge_parents(nb::module_ &m)
|
|
20
|
+
{
|
|
21
|
+
m.def("directed_edge_parents", &pyigl::directed_edge_parents, "E"_a,
|
|
22
|
+
R"(Recover parent edges in a tree given directed edges.
|
|
23
|
+
|
|
24
|
+
@param[in] E #E by 2 list of directed edges
|
|
25
|
+
@return P #E list of parent indices into E (-1 means root))");
|
|
26
|
+
}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
#include "default_types.h"
|
|
2
|
+
#include <igl/edge_topology.h>
|
|
3
|
+
#include <nanobind/nanobind.h>
|
|
4
|
+
#include <nanobind/eigen/dense.h>
|
|
5
|
+
#include <nanobind/stl/tuple.h>
|
|
6
|
+
|
|
7
|
+
namespace nb = nanobind;
|
|
8
|
+
using namespace nb::literals;
|
|
9
|
+
|
|
10
|
+
namespace pyigl
|
|
11
|
+
{
|
|
12
|
+
auto edge_topology(
|
|
13
|
+
const nb::DRef<const Eigen::MatrixXN> &V,
|
|
14
|
+
const nb::DRef<const Eigen::MatrixXI> &F)
|
|
15
|
+
{
|
|
16
|
+
Eigen::MatrixXI EV, FE, EF;
|
|
17
|
+
igl::edge_topology(V, F, EV, FE, EF);
|
|
18
|
+
return std::make_tuple(EV, FE, EF);
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
void bind_edge_topology(nb::module_ &m)
|
|
23
|
+
{
|
|
24
|
+
m.def("edge_topology", &pyigl::edge_topology, "V"_a, "F"_a,
|
|
25
|
+
R"(Initialize edges and their topological relations for an edge-manifold mesh.
|
|
26
|
+
|
|
27
|
+
@param[in] V #V by dim list of vertex positions (unused, kept for API compatibility)
|
|
28
|
+
@param[in] F #F by 3 list of triangle indices
|
|
29
|
+
@return EV #E by 2 list of edge vertex indices
|
|
30
|
+
@return FE #F by 3 list of face-edge relations (FE(f,c) is an edge incident on corner c of face f)
|
|
31
|
+
@return EF #E by 2 list of edge-face relations (EF(e,:) are the two adjacent faces))");
|
|
32
|
+
}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
#include "default_types.h"
|
|
2
|
+
#include <igl/edges_to_path.h>
|
|
3
|
+
#include <nanobind/nanobind.h>
|
|
4
|
+
#include <nanobind/eigen/dense.h>
|
|
5
|
+
#include <nanobind/stl/tuple.h>
|
|
6
|
+
|
|
7
|
+
namespace nb = nanobind;
|
|
8
|
+
using namespace nb::literals;
|
|
9
|
+
|
|
10
|
+
namespace pyigl
|
|
11
|
+
{
|
|
12
|
+
auto edges_to_path(const nb::DRef<const Eigen::MatrixXI> &E)
|
|
13
|
+
{
|
|
14
|
+
// igl::edges_to_path internally uses Eigen::Map<DerivedE>(vE.data(), ...) where
|
|
15
|
+
// vE is Eigen::VectorXi (int32). Must use Eigen::MatrixXi (int32, ColMajor).
|
|
16
|
+
Eigen::MatrixXi e = E.cast<int>();
|
|
17
|
+
Eigen::VectorXi I, J, K;
|
|
18
|
+
igl::edges_to_path(e, I, J, K);
|
|
19
|
+
// Cast int32 outputs back to int64 (Integer)
|
|
20
|
+
return std::make_tuple(
|
|
21
|
+
Eigen::VectorXI(I.cast<Integer>()),
|
|
22
|
+
Eigen::VectorXI(J.cast<Integer>()),
|
|
23
|
+
Eigen::VectorXI(K.cast<Integer>()));
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
void bind_edges_to_path(nb::module_ &m)
|
|
28
|
+
{
|
|
29
|
+
m.def("edges_to_path", &pyigl::edges_to_path, "E"_a,
|
|
30
|
+
R"(Given undirected edges forming a single chain/loop, find the path visiting all nodes.
|
|
31
|
+
|
|
32
|
+
@param[in] E #E by 2 list of undirected edges
|
|
33
|
+
@return I #E+1 list of node indices tracing the chain (if loop: I[0]==I[-1])
|
|
34
|
+
@return J #E list of indices into E tracing I
|
|
35
|
+
@return K #E list of column indices in E (0 or 1) indicating edge direction)");
|
|
36
|
+
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
#include "default_types.h"
|
|
2
|
+
#include <igl/euler_characteristic.h>
|
|
3
|
+
#include <nanobind/nanobind.h>
|
|
4
|
+
#include <nanobind/eigen/dense.h>
|
|
5
|
+
|
|
6
|
+
namespace nb = nanobind;
|
|
7
|
+
using namespace nb::literals;
|
|
8
|
+
|
|
9
|
+
void bind_euler_characteristic(nb::module_ &m)
|
|
10
|
+
{
|
|
11
|
+
m.def("euler_characteristic",
|
|
12
|
+
[](const nb::DRef<const Eigen::MatrixXI> &F) -> int {
|
|
13
|
+
return igl::euler_characteristic(F);
|
|
14
|
+
},
|
|
15
|
+
"F"_a,
|
|
16
|
+
R"(Compute the Euler characteristic of a mesh: χ = |V| - |E| + |F|
|
|
17
|
+
|
|
18
|
+
@param[in] F #F by dim list of mesh faces
|
|
19
|
+
@return Euler characteristic (e.g. 2 for a closed genus-0 surface))");
|
|
20
|
+
}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
#include "default_types.h"
|
|
2
|
+
#include <igl/exterior_edges.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 exterior_edges(const nb::DRef<const Eigen::MatrixXI> &F)
|
|
12
|
+
{
|
|
13
|
+
Eigen::MatrixXI E;
|
|
14
|
+
igl::exterior_edges(F, E);
|
|
15
|
+
return E;
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
void bind_exterior_edges(nb::module_ &m)
|
|
20
|
+
{
|
|
21
|
+
m.def("exterior_edges", &pyigl::exterior_edges, "F"_a,
|
|
22
|
+
R"(Determine boundary edges (edges with odd number of occurrences).
|
|
23
|
+
|
|
24
|
+
@param[in] F #F by simplex_size list of faces
|
|
25
|
+
@return E #E by simplex_size-1 list of exterior edges)");
|
|
26
|
+
}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
#include "default_types.h"
|
|
2
|
+
#include <igl/extract_manifold_patches.h>
|
|
3
|
+
#include <nanobind/nanobind.h>
|
|
4
|
+
#include <nanobind/eigen/dense.h>
|
|
5
|
+
#include <nanobind/stl/tuple.h>
|
|
6
|
+
|
|
7
|
+
namespace nb = nanobind;
|
|
8
|
+
using namespace nb::literals;
|
|
9
|
+
|
|
10
|
+
namespace pyigl
|
|
11
|
+
{
|
|
12
|
+
auto extract_manifold_patches(const nb::DRef<const Eigen::MatrixXI> &F)
|
|
13
|
+
{
|
|
14
|
+
Eigen::VectorXI P;
|
|
15
|
+
int n = igl::extract_manifold_patches(F, P);
|
|
16
|
+
return std::make_tuple(n, Eigen::VectorXI(P));
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
void bind_extract_manifold_patches(nb::module_ &m)
|
|
21
|
+
{
|
|
22
|
+
m.def("extract_manifold_patches", &pyigl::extract_manifold_patches, "F"_a,
|
|
23
|
+
R"(Extract maximal manifold patches from a triangle mesh.
|
|
24
|
+
|
|
25
|
+
A patch is a maximal subset of faces connected via manifold edges.
|
|
26
|
+
|
|
27
|
+
@param[in] F #F by 3 list of triangle indices
|
|
28
|
+
@return n number of manifold patches
|
|
29
|
+
@return P #F list of patch indices for each face)");
|
|
30
|
+
}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
#include "default_types.h"
|
|
2
|
+
#include <igl/face_occurrences.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 face_occurrences(const nb::DRef<const Eigen::MatrixXI> &F)
|
|
12
|
+
{
|
|
13
|
+
Eigen::VectorXI C;
|
|
14
|
+
igl::face_occurrences(F, C);
|
|
15
|
+
return C;
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
void bind_face_occurrences(nb::module_ &m)
|
|
20
|
+
{
|
|
21
|
+
m.def("face_occurrences", &pyigl::face_occurrences, "F"_a,
|
|
22
|
+
R"(Count the occurrences of each face (row) in a list of face indices.
|
|
23
|
+
|
|
24
|
+
@param[in] F #F by simplex_size list of faces
|
|
25
|
+
@return C #F list of occurrence counts)");
|
|
26
|
+
}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
#include "default_types.h"
|
|
2
|
+
#include <igl/fit_plane.h>
|
|
3
|
+
#include <nanobind/nanobind.h>
|
|
4
|
+
#include <nanobind/eigen/dense.h>
|
|
5
|
+
#include <nanobind/stl/tuple.h>
|
|
6
|
+
|
|
7
|
+
namespace nb = nanobind;
|
|
8
|
+
using namespace nb::literals;
|
|
9
|
+
|
|
10
|
+
namespace pyigl
|
|
11
|
+
{
|
|
12
|
+
auto fit_plane(const nb::DRef<const Eigen::MatrixXN> &V)
|
|
13
|
+
{
|
|
14
|
+
Eigen::RowVector3d N, C;
|
|
15
|
+
igl::fit_plane(V, N, C);
|
|
16
|
+
return std::make_tuple(
|
|
17
|
+
Eigen::VectorXN(N.transpose()),
|
|
18
|
+
Eigen::VectorXN(C.transpose()));
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
void bind_fit_plane(nb::module_ &m)
|
|
23
|
+
{
|
|
24
|
+
m.def("fit_plane", &pyigl::fit_plane, "V"_a,
|
|
25
|
+
R"(Fit a plane to a point cloud.
|
|
26
|
+
|
|
27
|
+
@param[in] V #V by 3 matrix of 3D point cloud positions
|
|
28
|
+
@return N 3-vector normal of the fitted plane
|
|
29
|
+
@return C 3-vector of a point that lies on the fitted plane)");
|
|
30
|
+
}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
#include "default_types.h"
|
|
2
|
+
#include <igl/flipped_triangles.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 flipped_triangles(
|
|
12
|
+
const nb::DRef<const Eigen::MatrixXN> &V,
|
|
13
|
+
const nb::DRef<const Eigen::MatrixXI> &F)
|
|
14
|
+
{
|
|
15
|
+
Eigen::VectorXI X;
|
|
16
|
+
igl::flipped_triangles(V, F, X);
|
|
17
|
+
return X;
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
void bind_flipped_triangles(nb::module_ &m)
|
|
22
|
+
{
|
|
23
|
+
m.def("flipped_triangles", &pyigl::flipped_triangles, "V"_a, "F"_a,
|
|
24
|
+
R"(Find indices of flipped triangles in a 2D UV mapping.
|
|
25
|
+
|
|
26
|
+
@param[in] V #V by 2 list of UV vertex positions
|
|
27
|
+
@param[in] F #F by 3 list of triangle indices
|
|
28
|
+
@return X list of indices into F of flipped triangles)");
|
|
29
|
+
}
|