Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/prusa3d/PrusaSlicer.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/CMakeLists.txt1
-rw-r--r--src/libigl/CMakeLists.txt14
-rw-r--r--src/libigl/igl/AABB.cpp (renamed from src/igl/AABB.cpp)0
-rw-r--r--src/libigl/igl/AABB.h (renamed from src/igl/AABB.h)0
-rw-r--r--src/libigl/igl/ARAPEnergyType.h (renamed from src/igl/ARAPEnergyType.h)0
-rw-r--r--src/libigl/igl/AtA_cached.cpp (renamed from src/igl/AtA_cached.cpp)0
-rw-r--r--src/libigl/igl/AtA_cached.h (renamed from src/igl/AtA_cached.h)0
-rw-r--r--src/libigl/igl/C_STR.h (renamed from src/igl/C_STR.h)0
-rw-r--r--src/libigl/igl/Camera.h (renamed from src/igl/Camera.h)0
-rw-r--r--src/libigl/igl/EPS.cpp (renamed from src/igl/EPS.cpp)0
-rw-r--r--src/libigl/igl/EPS.h (renamed from src/igl/EPS.h)0
-rw-r--r--src/libigl/igl/HalfEdgeIterator.cpp (renamed from src/igl/HalfEdgeIterator.cpp)0
-rw-r--r--src/libigl/igl/HalfEdgeIterator.h (renamed from src/igl/HalfEdgeIterator.h)0
-rw-r--r--src/libigl/igl/Hit.h (renamed from src/igl/Hit.h)0
-rw-r--r--src/libigl/igl/IO (renamed from src/igl/IO)0
-rw-r--r--src/libigl/igl/IndexComparison.h (renamed from src/igl/IndexComparison.h)0
-rw-r--r--src/libigl/igl/LinSpaced.h (renamed from src/igl/LinSpaced.h)0
-rw-r--r--src/libigl/igl/MeshBooleanType.h (renamed from src/igl/MeshBooleanType.h)0
-rw-r--r--src/libigl/igl/NormalType.h (renamed from src/igl/NormalType.h)0
-rw-r--r--src/libigl/igl/ONE.h (renamed from src/igl/ONE.h)0
-rw-r--r--src/libigl/igl/PI.h (renamed from src/igl/PI.h)0
-rw-r--r--src/libigl/igl/REDRUM.h (renamed from src/igl/REDRUM.h)0
-rw-r--r--src/libigl/igl/STR.h (renamed from src/igl/STR.h)0
-rw-r--r--src/libigl/igl/Singular_Value_Decomposition_Givens_QR_Factorization_Kernel.hpp (renamed from src/igl/Singular_Value_Decomposition_Givens_QR_Factorization_Kernel.hpp)0
-rw-r--r--src/libigl/igl/Singular_Value_Decomposition_Jacobi_Conjugation_Kernel.hpp (renamed from src/igl/Singular_Value_Decomposition_Jacobi_Conjugation_Kernel.hpp)0
-rw-r--r--src/libigl/igl/Singular_Value_Decomposition_Kernel_Declarations.hpp (renamed from src/igl/Singular_Value_Decomposition_Kernel_Declarations.hpp)0
-rw-r--r--src/libigl/igl/Singular_Value_Decomposition_Main_Kernel_Body.hpp (renamed from src/igl/Singular_Value_Decomposition_Main_Kernel_Body.hpp)0
-rw-r--r--src/libigl/igl/Singular_Value_Decomposition_Preamble.hpp (renamed from src/igl/Singular_Value_Decomposition_Preamble.hpp)0
-rw-r--r--src/libigl/igl/SolverStatus.h (renamed from src/igl/SolverStatus.h)0
-rw-r--r--src/libigl/igl/SortableRow.h (renamed from src/igl/SortableRow.h)0
-rw-r--r--src/libigl/igl/Timer.h (renamed from src/igl/Timer.h)0
-rw-r--r--src/libigl/igl/Viewport.h (renamed from src/igl/Viewport.h)0
-rw-r--r--src/libigl/igl/WindingNumberAABB.h (renamed from src/igl/WindingNumberAABB.h)0
-rw-r--r--src/libigl/igl/WindingNumberMethod.h (renamed from src/igl/WindingNumberMethod.h)0
-rw-r--r--src/libigl/igl/WindingNumberTree.h (renamed from src/igl/WindingNumberTree.h)0
-rw-r--r--src/libigl/igl/ZERO.h (renamed from src/igl/ZERO.h)0
-rwxr-xr-xsrc/libigl/igl/active_set.cpp (renamed from src/igl/active_set.cpp)0
-rw-r--r--src/libigl/igl/active_set.h (renamed from src/igl/active_set.h)0
-rw-r--r--src/libigl/igl/adjacency_list.cpp (renamed from src/igl/adjacency_list.cpp)0
-rw-r--r--src/libigl/igl/adjacency_list.h (renamed from src/igl/adjacency_list.h)0
-rw-r--r--src/libigl/igl/adjacency_matrix.cpp (renamed from src/igl/adjacency_matrix.cpp)0
-rw-r--r--src/libigl/igl/adjacency_matrix.h (renamed from src/igl/adjacency_matrix.h)0
-rw-r--r--src/libigl/igl/all.cpp (renamed from src/igl/all.cpp)0
-rw-r--r--src/libigl/igl/all.h (renamed from src/igl/all.h)0
-rw-r--r--src/libigl/igl/all_edges.cpp (renamed from src/igl/all_edges.cpp)0
-rw-r--r--src/libigl/igl/all_edges.h (renamed from src/igl/all_edges.h)0
-rw-r--r--src/libigl/igl/all_pairs_distances.cpp (renamed from src/igl/all_pairs_distances.cpp)0
-rw-r--r--src/libigl/igl/all_pairs_distances.h (renamed from src/igl/all_pairs_distances.h)0
-rw-r--r--src/libigl/igl/ambient_occlusion.cpp (renamed from src/igl/ambient_occlusion.cpp)0
-rw-r--r--src/libigl/igl/ambient_occlusion.h (renamed from src/igl/ambient_occlusion.h)0
-rw-r--r--src/libigl/igl/angular_distance.cpp (renamed from src/igl/angular_distance.cpp)0
-rw-r--r--src/libigl/igl/angular_distance.h (renamed from src/igl/angular_distance.h)0
-rw-r--r--src/libigl/igl/anttweakbar/ReAntTweakBar.cpp (renamed from src/igl/anttweakbar/ReAntTweakBar.cpp)0
-rw-r--r--src/libigl/igl/anttweakbar/ReAntTweakBar.h (renamed from src/igl/anttweakbar/ReAntTweakBar.h)0
-rw-r--r--src/libigl/igl/anttweakbar/cocoa_key_to_anttweakbar_key.cpp (renamed from src/igl/anttweakbar/cocoa_key_to_anttweakbar_key.cpp)0
-rw-r--r--src/libigl/igl/anttweakbar/cocoa_key_to_anttweakbar_key.h (renamed from src/igl/anttweakbar/cocoa_key_to_anttweakbar_key.h)0
-rw-r--r--src/libigl/igl/any.cpp (renamed from src/igl/any.cpp)0
-rw-r--r--src/libigl/igl/any.h (renamed from src/igl/any.h)0
-rw-r--r--src/libigl/igl/any_of.cpp (renamed from src/igl/any_of.cpp)0
-rw-r--r--src/libigl/igl/any_of.h (renamed from src/igl/any_of.h)0
-rw-r--r--src/libigl/igl/arap.cpp (renamed from src/igl/arap.cpp)0
-rw-r--r--src/libigl/igl/arap.h (renamed from src/igl/arap.h)0
-rw-r--r--src/libigl/igl/arap_dof.cpp (renamed from src/igl/arap_dof.cpp)0
-rw-r--r--src/libigl/igl/arap_dof.h (renamed from src/igl/arap_dof.h)0
-rw-r--r--src/libigl/igl/arap_linear_block.cpp (renamed from src/igl/arap_linear_block.cpp)0
-rw-r--r--src/libigl/igl/arap_linear_block.h (renamed from src/igl/arap_linear_block.h)0
-rw-r--r--src/libigl/igl/arap_rhs.cpp (renamed from src/igl/arap_rhs.cpp)0
-rw-r--r--src/libigl/igl/arap_rhs.h (renamed from src/igl/arap_rhs.h)0
-rw-r--r--src/libigl/igl/average_onto_faces.cpp (renamed from src/igl/average_onto_faces.cpp)0
-rw-r--r--src/libigl/igl/average_onto_faces.h (renamed from src/igl/average_onto_faces.h)0
-rw-r--r--src/libigl/igl/average_onto_vertices.cpp (renamed from src/igl/average_onto_vertices.cpp)0
-rw-r--r--src/libigl/igl/average_onto_vertices.h (renamed from src/igl/average_onto_vertices.h)0
-rw-r--r--src/libigl/igl/avg_edge_length.cpp (renamed from src/igl/avg_edge_length.cpp)0
-rw-r--r--src/libigl/igl/avg_edge_length.h (renamed from src/igl/avg_edge_length.h)0
-rw-r--r--src/libigl/igl/axis_angle_to_quat.cpp (renamed from src/igl/axis_angle_to_quat.cpp)0
-rw-r--r--src/libigl/igl/axis_angle_to_quat.h (renamed from src/igl/axis_angle_to_quat.h)0
-rw-r--r--src/libigl/igl/barycenter.cpp (renamed from src/igl/barycenter.cpp)0
-rw-r--r--src/libigl/igl/barycenter.h (renamed from src/igl/barycenter.h)0
-rw-r--r--src/libigl/igl/barycentric_coordinates.cpp (renamed from src/igl/barycentric_coordinates.cpp)0
-rw-r--r--src/libigl/igl/barycentric_coordinates.h (renamed from src/igl/barycentric_coordinates.h)0
-rwxr-xr-xsrc/libigl/igl/barycentric_to_global.cpp (renamed from src/igl/barycentric_to_global.cpp)0
-rwxr-xr-xsrc/libigl/igl/barycentric_to_global.h (renamed from src/igl/barycentric_to_global.h)0
-rw-r--r--src/libigl/igl/basename.cpp (renamed from src/igl/basename.cpp)0
-rw-r--r--src/libigl/igl/basename.h (renamed from src/igl/basename.h)0
-rw-r--r--src/libigl/igl/bbw.cpp (renamed from src/igl/bbw.cpp)0
-rw-r--r--src/libigl/igl/bbw.h (renamed from src/igl/bbw.h)0
-rw-r--r--src/libigl/igl/bfs.cpp (renamed from src/igl/bfs.cpp)0
-rw-r--r--src/libigl/igl/bfs.h (renamed from src/igl/bfs.h)0
-rw-r--r--src/libigl/igl/bfs_orient.cpp (renamed from src/igl/bfs_orient.cpp)0
-rw-r--r--src/libigl/igl/bfs_orient.h (renamed from src/igl/bfs_orient.h)0
-rw-r--r--src/libigl/igl/biharmonic_coordinates.cpp (renamed from src/igl/biharmonic_coordinates.cpp)0
-rw-r--r--src/libigl/igl/biharmonic_coordinates.h (renamed from src/igl/biharmonic_coordinates.h)0
-rw-r--r--src/libigl/igl/bijective_composite_harmonic_mapping.cpp (renamed from src/igl/bijective_composite_harmonic_mapping.cpp)0
-rw-r--r--src/libigl/igl/bijective_composite_harmonic_mapping.h (renamed from src/igl/bijective_composite_harmonic_mapping.h)0
-rw-r--r--src/libigl/igl/bone_parents.cpp (renamed from src/igl/bone_parents.cpp)0
-rw-r--r--src/libigl/igl/bone_parents.h (renamed from src/igl/bone_parents.h)0
-rw-r--r--src/libigl/igl/boundary_conditions.cpp (renamed from src/igl/boundary_conditions.cpp)0
-rw-r--r--src/libigl/igl/boundary_conditions.h (renamed from src/igl/boundary_conditions.h)0
-rw-r--r--src/libigl/igl/boundary_facets.cpp (renamed from src/igl/boundary_facets.cpp)0
-rw-r--r--src/libigl/igl/boundary_facets.h (renamed from src/igl/boundary_facets.h)0
-rwxr-xr-xsrc/libigl/igl/boundary_loop.cpp (renamed from src/igl/boundary_loop.cpp)0
-rwxr-xr-xsrc/libigl/igl/boundary_loop.h (renamed from src/igl/boundary_loop.h)0
-rw-r--r--src/libigl/igl/bounding_box.cpp (renamed from src/igl/bounding_box.cpp)0
-rw-r--r--src/libigl/igl/bounding_box.h (renamed from src/igl/bounding_box.h)0
-rw-r--r--src/libigl/igl/bounding_box_diagonal.cpp (renamed from src/igl/bounding_box_diagonal.cpp)0
-rw-r--r--src/libigl/igl/bounding_box_diagonal.h (renamed from src/igl/bounding_box_diagonal.h)0
-rw-r--r--src/libigl/igl/canonical_quaternions.cpp (renamed from src/igl/canonical_quaternions.cpp)0
-rw-r--r--src/libigl/igl/canonical_quaternions.h (renamed from src/igl/canonical_quaternions.h)0
-rw-r--r--src/libigl/igl/cat.cpp (renamed from src/igl/cat.cpp)0
-rw-r--r--src/libigl/igl/cat.h (renamed from src/igl/cat.h)0
-rw-r--r--src/libigl/igl/ceil.cpp (renamed from src/igl/ceil.cpp)0
-rw-r--r--src/libigl/igl/ceil.h (renamed from src/igl/ceil.h)0
-rw-r--r--src/libigl/igl/centroid.cpp (renamed from src/igl/centroid.cpp)0
-rw-r--r--src/libigl/igl/centroid.h (renamed from src/igl/centroid.h)0
-rw-r--r--src/libigl/igl/circulation.cpp (renamed from src/igl/circulation.cpp)0
-rw-r--r--src/libigl/igl/circulation.h (renamed from src/igl/circulation.h)0
-rw-r--r--src/libigl/igl/circumradius.cpp (renamed from src/igl/circumradius.cpp)0
-rw-r--r--src/libigl/igl/circumradius.h (renamed from src/igl/circumradius.h)0
-rw-r--r--src/libigl/igl/collapse_edge.cpp (renamed from src/igl/collapse_edge.cpp)0
-rw-r--r--src/libigl/igl/collapse_edge.h (renamed from src/igl/collapse_edge.h)0
-rw-r--r--src/libigl/igl/collapse_small_triangles.cpp (renamed from src/igl/collapse_small_triangles.cpp)0
-rw-r--r--src/libigl/igl/collapse_small_triangles.h (renamed from src/igl/collapse_small_triangles.h)0
-rw-r--r--src/libigl/igl/colon.cpp (renamed from src/igl/colon.cpp)0
-rw-r--r--src/libigl/igl/colon.h (renamed from src/igl/colon.h)0
-rw-r--r--src/libigl/igl/colormap.cpp (renamed from src/igl/colormap.cpp)0
-rw-r--r--src/libigl/igl/colormap.h (renamed from src/igl/colormap.h)0
-rw-r--r--src/libigl/igl/column_to_quats.cpp (renamed from src/igl/column_to_quats.cpp)0
-rw-r--r--src/libigl/igl/column_to_quats.h (renamed from src/igl/column_to_quats.h)0
-rw-r--r--src/libigl/igl/columnize.cpp (renamed from src/igl/columnize.cpp)0
-rw-r--r--src/libigl/igl/columnize.h (renamed from src/igl/columnize.h)0
-rw-r--r--src/libigl/igl/comb_cross_field.cpp (renamed from src/igl/comb_cross_field.cpp)0
-rw-r--r--src/libigl/igl/comb_cross_field.h (renamed from src/igl/comb_cross_field.h)0
-rw-r--r--src/libigl/igl/comb_frame_field.cpp (renamed from src/igl/comb_frame_field.cpp)0
-rw-r--r--src/libigl/igl/comb_frame_field.h (renamed from src/igl/comb_frame_field.h)0
-rw-r--r--src/libigl/igl/comb_line_field.cpp (renamed from src/igl/comb_line_field.cpp)0
-rw-r--r--src/libigl/igl/comb_line_field.h (renamed from src/igl/comb_line_field.h)0
-rw-r--r--src/libigl/igl/combine.cpp (renamed from src/igl/combine.cpp)0
-rw-r--r--src/libigl/igl/combine.h (renamed from src/igl/combine.h)0
-rw-r--r--src/libigl/igl/components.cpp (renamed from src/igl/components.cpp)0
-rw-r--r--src/libigl/igl/components.h (renamed from src/igl/components.h)0
-rw-r--r--src/libigl/igl/compute_frame_field_bisectors.cpp (renamed from src/igl/compute_frame_field_bisectors.cpp)0
-rw-r--r--src/libigl/igl/compute_frame_field_bisectors.h (renamed from src/igl/compute_frame_field_bisectors.h)0
-rw-r--r--src/libigl/igl/connect_boundary_to_infinity.cpp (renamed from src/igl/connect_boundary_to_infinity.cpp)0
-rw-r--r--src/libigl/igl/connect_boundary_to_infinity.h (renamed from src/igl/connect_boundary_to_infinity.h)0
-rw-r--r--src/libigl/igl/copyleft/README.md (renamed from src/igl/copyleft/README.md)0
-rw-r--r--src/libigl/igl/copyleft/cgal/BinaryWindingNumberOperations.h (renamed from src/igl/copyleft/cgal/BinaryWindingNumberOperations.h)0
-rw-r--r--src/libigl/igl/copyleft/cgal/CGAL_includes.hpp (renamed from src/igl/copyleft/cgal/CGAL_includes.hpp)0
-rw-r--r--src/libigl/igl/copyleft/cgal/CSGTree.h (renamed from src/igl/copyleft/cgal/CSGTree.h)0
-rw-r--r--src/libigl/igl/copyleft/cgal/RemeshSelfIntersectionsParam.h (renamed from src/igl/copyleft/cgal/RemeshSelfIntersectionsParam.h)0
-rw-r--r--src/libigl/igl/copyleft/cgal/SelfIntersectMesh.h (renamed from src/igl/copyleft/cgal/SelfIntersectMesh.h)0
-rw-r--r--src/libigl/igl/copyleft/cgal/assign.cpp (renamed from src/igl/copyleft/cgal/assign.cpp)0
-rw-r--r--src/libigl/igl/copyleft/cgal/assign.h (renamed from src/igl/copyleft/cgal/assign.h)0
-rw-r--r--src/libigl/igl/copyleft/cgal/assign_scalar.cpp (renamed from src/igl/copyleft/cgal/assign_scalar.cpp)0
-rw-r--r--src/libigl/igl/copyleft/cgal/assign_scalar.h (renamed from src/igl/copyleft/cgal/assign_scalar.h)0
-rw-r--r--src/libigl/igl/copyleft/cgal/barycenter.cpp (renamed from src/igl/copyleft/cgal/barycenter.cpp)0
-rw-r--r--src/libigl/igl/copyleft/cgal/cell_adjacency.cpp (renamed from src/igl/copyleft/cgal/cell_adjacency.cpp)0
-rw-r--r--src/libigl/igl/copyleft/cgal/cell_adjacency.h (renamed from src/igl/copyleft/cgal/cell_adjacency.h)0
-rw-r--r--src/libigl/igl/copyleft/cgal/closest_facet.cpp (renamed from src/igl/copyleft/cgal/closest_facet.cpp)0
-rw-r--r--src/libigl/igl/copyleft/cgal/closest_facet.h (renamed from src/igl/copyleft/cgal/closest_facet.h)0
-rw-r--r--src/libigl/igl/copyleft/cgal/complex_to_mesh.cpp (renamed from src/igl/copyleft/cgal/complex_to_mesh.cpp)0
-rw-r--r--src/libigl/igl/copyleft/cgal/complex_to_mesh.h (renamed from src/igl/copyleft/cgal/complex_to_mesh.h)0
-rw-r--r--src/libigl/igl/copyleft/cgal/component_inside_component.cpp (renamed from src/igl/copyleft/cgal/component_inside_component.cpp)0
-rw-r--r--src/libigl/igl/copyleft/cgal/component_inside_component.h (renamed from src/igl/copyleft/cgal/component_inside_component.h)0
-rw-r--r--src/libigl/igl/copyleft/cgal/convex_hull.cpp (renamed from src/igl/copyleft/cgal/convex_hull.cpp)0
-rw-r--r--src/libigl/igl/copyleft/cgal/convex_hull.h (renamed from src/igl/copyleft/cgal/convex_hull.h)0
-rw-r--r--src/libigl/igl/copyleft/cgal/delaunay_triangulation.cpp (renamed from src/igl/copyleft/cgal/delaunay_triangulation.cpp)0
-rw-r--r--src/libigl/igl/copyleft/cgal/delaunay_triangulation.h (renamed from src/igl/copyleft/cgal/delaunay_triangulation.h)0
-rw-r--r--src/libigl/igl/copyleft/cgal/extract_cells.cpp (renamed from src/igl/copyleft/cgal/extract_cells.cpp)0
-rw-r--r--src/libigl/igl/copyleft/cgal/extract_cells.h (renamed from src/igl/copyleft/cgal/extract_cells.h)0
-rw-r--r--src/libigl/igl/copyleft/cgal/extract_feature.cpp (renamed from src/igl/copyleft/cgal/extract_feature.cpp)0
-rw-r--r--src/libigl/igl/copyleft/cgal/extract_feature.h (renamed from src/igl/copyleft/cgal/extract_feature.h)0
-rw-r--r--src/libigl/igl/copyleft/cgal/fast_winding_number.cpp (renamed from src/igl/copyleft/cgal/fast_winding_number.cpp)0
-rw-r--r--src/libigl/igl/copyleft/cgal/fast_winding_number.h (renamed from src/igl/copyleft/cgal/fast_winding_number.h)0
-rw-r--r--src/libigl/igl/copyleft/cgal/half_space_box.cpp (renamed from src/igl/copyleft/cgal/half_space_box.cpp)0
-rw-r--r--src/libigl/igl/copyleft/cgal/half_space_box.h (renamed from src/igl/copyleft/cgal/half_space_box.h)0
-rw-r--r--src/libigl/igl/copyleft/cgal/hausdorff.cpp (renamed from src/igl/copyleft/cgal/hausdorff.cpp)0
-rw-r--r--src/libigl/igl/copyleft/cgal/hausdorff.h (renamed from src/igl/copyleft/cgal/hausdorff.h)0
-rw-r--r--src/libigl/igl/copyleft/cgal/incircle.cpp (renamed from src/igl/copyleft/cgal/incircle.cpp)0
-rw-r--r--src/libigl/igl/copyleft/cgal/incircle.h (renamed from src/igl/copyleft/cgal/incircle.h)0
-rw-r--r--src/libigl/igl/copyleft/cgal/insert_into_cdt.cpp (renamed from src/igl/copyleft/cgal/insert_into_cdt.cpp)0
-rw-r--r--src/libigl/igl/copyleft/cgal/insert_into_cdt.h (renamed from src/igl/copyleft/cgal/insert_into_cdt.h)0
-rw-r--r--src/libigl/igl/copyleft/cgal/insphere.cpp (renamed from src/igl/copyleft/cgal/insphere.cpp)0
-rw-r--r--src/libigl/igl/copyleft/cgal/insphere.h (renamed from src/igl/copyleft/cgal/insphere.h)0
-rw-r--r--src/libigl/igl/copyleft/cgal/intersect_other.cpp (renamed from src/igl/copyleft/cgal/intersect_other.cpp)0
-rw-r--r--src/libigl/igl/copyleft/cgal/intersect_other.h (renamed from src/igl/copyleft/cgal/intersect_other.h)0
-rw-r--r--src/libigl/igl/copyleft/cgal/intersect_with_half_space.cpp (renamed from src/igl/copyleft/cgal/intersect_with_half_space.cpp)0
-rw-r--r--src/libigl/igl/copyleft/cgal/intersect_with_half_space.h (renamed from src/igl/copyleft/cgal/intersect_with_half_space.h)0
-rw-r--r--src/libigl/igl/copyleft/cgal/lexicographic_triangulation.cpp (renamed from src/igl/copyleft/cgal/lexicographic_triangulation.cpp)0
-rw-r--r--src/libigl/igl/copyleft/cgal/lexicographic_triangulation.h (renamed from src/igl/copyleft/cgal/lexicographic_triangulation.h)0
-rw-r--r--src/libigl/igl/copyleft/cgal/list_to_matrix.cpp (renamed from src/igl/copyleft/cgal/list_to_matrix.cpp)0
-rw-r--r--src/libigl/igl/copyleft/cgal/mesh_boolean.cpp (renamed from src/igl/copyleft/cgal/mesh_boolean.cpp)0
-rw-r--r--src/libigl/igl/copyleft/cgal/mesh_boolean.h (renamed from src/igl/copyleft/cgal/mesh_boolean.h)0
-rw-r--r--src/libigl/igl/copyleft/cgal/mesh_boolean_type_to_funcs.cpp (renamed from src/igl/copyleft/cgal/mesh_boolean_type_to_funcs.cpp)0
-rw-r--r--src/libigl/igl/copyleft/cgal/mesh_boolean_type_to_funcs.h (renamed from src/igl/copyleft/cgal/mesh_boolean_type_to_funcs.h)0
-rw-r--r--src/libigl/igl/copyleft/cgal/mesh_to_cgal_triangle_list.cpp (renamed from src/igl/copyleft/cgal/mesh_to_cgal_triangle_list.cpp)0
-rw-r--r--src/libigl/igl/copyleft/cgal/mesh_to_cgal_triangle_list.h (renamed from src/igl/copyleft/cgal/mesh_to_cgal_triangle_list.h)0
-rw-r--r--src/libigl/igl/copyleft/cgal/mesh_to_polyhedron.cpp (renamed from src/igl/copyleft/cgal/mesh_to_polyhedron.cpp)0
-rw-r--r--src/libigl/igl/copyleft/cgal/mesh_to_polyhedron.h (renamed from src/igl/copyleft/cgal/mesh_to_polyhedron.h)0
-rw-r--r--src/libigl/igl/copyleft/cgal/minkowski_sum.cpp (renamed from src/igl/copyleft/cgal/minkowski_sum.cpp)0
-rw-r--r--src/libigl/igl/copyleft/cgal/minkowski_sum.h (renamed from src/igl/copyleft/cgal/minkowski_sum.h)0
-rw-r--r--src/libigl/igl/copyleft/cgal/order_facets_around_edge.cpp (renamed from src/igl/copyleft/cgal/order_facets_around_edge.cpp)0
-rw-r--r--src/libigl/igl/copyleft/cgal/order_facets_around_edge.h (renamed from src/igl/copyleft/cgal/order_facets_around_edge.h)0
-rw-r--r--src/libigl/igl/copyleft/cgal/order_facets_around_edges.cpp (renamed from src/igl/copyleft/cgal/order_facets_around_edges.cpp)0
-rw-r--r--src/libigl/igl/copyleft/cgal/order_facets_around_edges.h (renamed from src/igl/copyleft/cgal/order_facets_around_edges.h)0
-rw-r--r--src/libigl/igl/copyleft/cgal/orient2D.cpp (renamed from src/igl/copyleft/cgal/orient2D.cpp)0
-rw-r--r--src/libigl/igl/copyleft/cgal/orient2D.h (renamed from src/igl/copyleft/cgal/orient2D.h)0
-rw-r--r--src/libigl/igl/copyleft/cgal/orient3D.cpp (renamed from src/igl/copyleft/cgal/orient3D.cpp)0
-rw-r--r--src/libigl/igl/copyleft/cgal/orient3D.h (renamed from src/igl/copyleft/cgal/orient3D.h)0
-rw-r--r--src/libigl/igl/copyleft/cgal/outer_element.cpp (renamed from src/igl/copyleft/cgal/outer_element.cpp)0
-rw-r--r--src/libigl/igl/copyleft/cgal/outer_element.h (renamed from src/igl/copyleft/cgal/outer_element.h)0
-rw-r--r--src/libigl/igl/copyleft/cgal/outer_facet.cpp (renamed from src/igl/copyleft/cgal/outer_facet.cpp)0
-rw-r--r--src/libigl/igl/copyleft/cgal/outer_facet.h (renamed from src/igl/copyleft/cgal/outer_facet.h)0
-rw-r--r--src/libigl/igl/copyleft/cgal/outer_hull.cpp (renamed from src/igl/copyleft/cgal/outer_hull.cpp)0
-rw-r--r--src/libigl/igl/copyleft/cgal/outer_hull.h (renamed from src/igl/copyleft/cgal/outer_hull.h)0
-rw-r--r--src/libigl/igl/copyleft/cgal/peel_outer_hull_layers.cpp (renamed from src/igl/copyleft/cgal/peel_outer_hull_layers.cpp)0
-rw-r--r--src/libigl/igl/copyleft/cgal/peel_outer_hull_layers.h (renamed from src/igl/copyleft/cgal/peel_outer_hull_layers.h)0
-rw-r--r--src/libigl/igl/copyleft/cgal/peel_winding_number_layers.cpp (renamed from src/igl/copyleft/cgal/peel_winding_number_layers.cpp)0
-rw-r--r--src/libigl/igl/copyleft/cgal/peel_winding_number_layers.h (renamed from src/igl/copyleft/cgal/peel_winding_number_layers.h)0
-rw-r--r--src/libigl/igl/copyleft/cgal/piecewise_constant_winding_number.cpp (renamed from src/igl/copyleft/cgal/piecewise_constant_winding_number.cpp)0
-rw-r--r--src/libigl/igl/copyleft/cgal/piecewise_constant_winding_number.h (renamed from src/igl/copyleft/cgal/piecewise_constant_winding_number.h)0
-rw-r--r--src/libigl/igl/copyleft/cgal/point_areas.cpp (renamed from src/igl/copyleft/cgal/point_areas.cpp)0
-rw-r--r--src/libigl/igl/copyleft/cgal/point_areas.h (renamed from src/igl/copyleft/cgal/point_areas.h)0
-rw-r--r--src/libigl/igl/copyleft/cgal/point_mesh_squared_distance.cpp (renamed from src/igl/copyleft/cgal/point_mesh_squared_distance.cpp)0
-rw-r--r--src/libigl/igl/copyleft/cgal/point_mesh_squared_distance.h (renamed from src/igl/copyleft/cgal/point_mesh_squared_distance.h)0
-rw-r--r--src/libigl/igl/copyleft/cgal/point_segment_squared_distance.cpp (renamed from src/igl/copyleft/cgal/point_segment_squared_distance.cpp)0
-rw-r--r--src/libigl/igl/copyleft/cgal/point_segment_squared_distance.h (renamed from src/igl/copyleft/cgal/point_segment_squared_distance.h)0
-rw-r--r--src/libigl/igl/copyleft/cgal/point_solid_signed_squared_distance.cpp (renamed from src/igl/copyleft/cgal/point_solid_signed_squared_distance.cpp)0
-rw-r--r--src/libigl/igl/copyleft/cgal/point_solid_signed_squared_distance.h (renamed from src/igl/copyleft/cgal/point_solid_signed_squared_distance.h)0
-rw-r--r--src/libigl/igl/copyleft/cgal/point_triangle_squared_distance.cpp (renamed from src/igl/copyleft/cgal/point_triangle_squared_distance.cpp)0
-rw-r--r--src/libigl/igl/copyleft/cgal/point_triangle_squared_distance.h (renamed from src/igl/copyleft/cgal/point_triangle_squared_distance.h)0
-rw-r--r--src/libigl/igl/copyleft/cgal/points_inside_component.cpp (renamed from src/igl/copyleft/cgal/points_inside_component.cpp)0
-rw-r--r--src/libigl/igl/copyleft/cgal/points_inside_component.h (renamed from src/igl/copyleft/cgal/points_inside_component.h)0
-rw-r--r--src/libigl/igl/copyleft/cgal/polyhedron_to_mesh.cpp (renamed from src/igl/copyleft/cgal/polyhedron_to_mesh.cpp)0
-rw-r--r--src/libigl/igl/copyleft/cgal/polyhedron_to_mesh.h (renamed from src/igl/copyleft/cgal/polyhedron_to_mesh.h)0
-rw-r--r--src/libigl/igl/copyleft/cgal/projected_cdt.cpp (renamed from src/igl/copyleft/cgal/projected_cdt.cpp)0
-rw-r--r--src/libigl/igl/copyleft/cgal/projected_cdt.h (renamed from src/igl/copyleft/cgal/projected_cdt.h)0
-rw-r--r--src/libigl/igl/copyleft/cgal/projected_delaunay.cpp (renamed from src/igl/copyleft/cgal/projected_delaunay.cpp)0
-rw-r--r--src/libigl/igl/copyleft/cgal/projected_delaunay.h (renamed from src/igl/copyleft/cgal/projected_delaunay.h)0
-rw-r--r--src/libigl/igl/copyleft/cgal/propagate_winding_numbers.cpp (renamed from src/igl/copyleft/cgal/propagate_winding_numbers.cpp)0
-rw-r--r--src/libigl/igl/copyleft/cgal/propagate_winding_numbers.h (renamed from src/igl/copyleft/cgal/propagate_winding_numbers.h)0
-rw-r--r--src/libigl/igl/copyleft/cgal/read_triangle_mesh.cpp (renamed from src/igl/copyleft/cgal/read_triangle_mesh.cpp)0
-rw-r--r--src/libigl/igl/copyleft/cgal/read_triangle_mesh.h (renamed from src/igl/copyleft/cgal/read_triangle_mesh.h)0
-rw-r--r--src/libigl/igl/copyleft/cgal/relabel_small_immersed_cells.cpp (renamed from src/igl/copyleft/cgal/relabel_small_immersed_cells.cpp)0
-rw-r--r--src/libigl/igl/copyleft/cgal/relabel_small_immersed_cells.h (renamed from src/igl/copyleft/cgal/relabel_small_immersed_cells.h)0
-rw-r--r--src/libigl/igl/copyleft/cgal/remesh_intersections.cpp (renamed from src/igl/copyleft/cgal/remesh_intersections.cpp)0
-rw-r--r--src/libigl/igl/copyleft/cgal/remesh_intersections.h (renamed from src/igl/copyleft/cgal/remesh_intersections.h)0
-rw-r--r--src/libigl/igl/copyleft/cgal/remesh_self_intersections.cpp (renamed from src/igl/copyleft/cgal/remesh_self_intersections.cpp)0
-rw-r--r--src/libigl/igl/copyleft/cgal/remesh_self_intersections.h (renamed from src/igl/copyleft/cgal/remesh_self_intersections.h)0
-rw-r--r--src/libigl/igl/copyleft/cgal/remove_unreferenced.cpp (renamed from src/igl/copyleft/cgal/remove_unreferenced.cpp)0
-rw-r--r--src/libigl/igl/copyleft/cgal/resolve_intersections.cpp (renamed from src/igl/copyleft/cgal/resolve_intersections.cpp)0
-rw-r--r--src/libigl/igl/copyleft/cgal/resolve_intersections.h (renamed from src/igl/copyleft/cgal/resolve_intersections.h)0
-rw-r--r--src/libigl/igl/copyleft/cgal/row_to_point.cpp (renamed from src/igl/copyleft/cgal/row_to_point.cpp)0
-rw-r--r--src/libigl/igl/copyleft/cgal/row_to_point.h (renamed from src/igl/copyleft/cgal/row_to_point.h)0
-rw-r--r--src/libigl/igl/copyleft/cgal/segment_segment_squared_distance.cpp (renamed from src/igl/copyleft/cgal/segment_segment_squared_distance.cpp)0
-rw-r--r--src/libigl/igl/copyleft/cgal/segment_segment_squared_distance.h (renamed from src/igl/copyleft/cgal/segment_segment_squared_distance.h)0
-rw-r--r--src/libigl/igl/copyleft/cgal/signed_distance_isosurface.cpp (renamed from src/igl/copyleft/cgal/signed_distance_isosurface.cpp)0
-rw-r--r--src/libigl/igl/copyleft/cgal/signed_distance_isosurface.h (renamed from src/igl/copyleft/cgal/signed_distance_isosurface.h)0
-rw-r--r--src/libigl/igl/copyleft/cgal/slice.cpp (renamed from src/igl/copyleft/cgal/slice.cpp)0
-rw-r--r--src/libigl/igl/copyleft/cgal/slice_mask.cpp (renamed from src/igl/copyleft/cgal/slice_mask.cpp)0
-rw-r--r--src/libigl/igl/copyleft/cgal/snap_rounding.cpp (renamed from src/igl/copyleft/cgal/snap_rounding.cpp)0
-rw-r--r--src/libigl/igl/copyleft/cgal/snap_rounding.h (renamed from src/igl/copyleft/cgal/snap_rounding.h)0
-rw-r--r--src/libigl/igl/copyleft/cgal/string_to_mesh_boolean_type.cpp (renamed from src/igl/copyleft/cgal/string_to_mesh_boolean_type.cpp)0
-rw-r--r--src/libigl/igl/copyleft/cgal/string_to_mesh_boolean_type.h (renamed from src/igl/copyleft/cgal/string_to_mesh_boolean_type.h)0
-rw-r--r--src/libigl/igl/copyleft/cgal/subdivide_segments.cpp (renamed from src/igl/copyleft/cgal/subdivide_segments.cpp)0
-rw-r--r--src/libigl/igl/copyleft/cgal/subdivide_segments.h (renamed from src/igl/copyleft/cgal/subdivide_segments.h)0
-rw-r--r--src/libigl/igl/copyleft/cgal/submesh_aabb_tree.cpp (renamed from src/igl/copyleft/cgal/submesh_aabb_tree.cpp)0
-rw-r--r--src/libigl/igl/copyleft/cgal/submesh_aabb_tree.h (renamed from src/igl/copyleft/cgal/submesh_aabb_tree.h)0
-rw-r--r--src/libigl/igl/copyleft/cgal/triangle_triangle_squared_distance.cpp (renamed from src/igl/copyleft/cgal/triangle_triangle_squared_distance.cpp)0
-rw-r--r--src/libigl/igl/copyleft/cgal/triangle_triangle_squared_distance.h (renamed from src/igl/copyleft/cgal/triangle_triangle_squared_distance.h)0
-rw-r--r--src/libigl/igl/copyleft/cgal/trim_with_solid.cpp (renamed from src/igl/copyleft/cgal/trim_with_solid.cpp)0
-rw-r--r--src/libigl/igl/copyleft/cgal/trim_with_solid.h (renamed from src/igl/copyleft/cgal/trim_with_solid.h)0
-rw-r--r--src/libigl/igl/copyleft/cgal/unique.cpp (renamed from src/igl/copyleft/cgal/unique.cpp)0
-rw-r--r--src/libigl/igl/copyleft/cgal/unique_rows.cpp (renamed from src/igl/copyleft/cgal/unique_rows.cpp)0
-rw-r--r--src/libigl/igl/copyleft/cgal/wire_mesh.cpp (renamed from src/igl/copyleft/cgal/wire_mesh.cpp)0
-rw-r--r--src/libigl/igl/copyleft/cgal/wire_mesh.h (renamed from src/igl/copyleft/cgal/wire_mesh.h)0
-rw-r--r--src/libigl/igl/copyleft/comiso/frame_field.cpp (renamed from src/igl/copyleft/comiso/frame_field.cpp)0
-rw-r--r--src/libigl/igl/copyleft/comiso/frame_field.h (renamed from src/igl/copyleft/comiso/frame_field.h)0
-rw-r--r--src/libigl/igl/copyleft/comiso/miq.cpp (renamed from src/igl/copyleft/comiso/miq.cpp)0
-rw-r--r--src/libigl/igl/copyleft/comiso/miq.h (renamed from src/igl/copyleft/comiso/miq.h)0
-rw-r--r--src/libigl/igl/copyleft/comiso/nrosy.cpp (renamed from src/igl/copyleft/comiso/nrosy.cpp)0
-rw-r--r--src/libigl/igl/copyleft/comiso/nrosy.h (renamed from src/igl/copyleft/comiso/nrosy.h)0
-rw-r--r--src/libigl/igl/copyleft/cork/from_cork_mesh.cpp (renamed from src/igl/copyleft/cork/from_cork_mesh.cpp)0
-rw-r--r--src/libigl/igl/copyleft/cork/from_cork_mesh.h (renamed from src/igl/copyleft/cork/from_cork_mesh.h)0
-rw-r--r--src/libigl/igl/copyleft/cork/mesh_boolean.cpp (renamed from src/igl/copyleft/cork/mesh_boolean.cpp)0
-rw-r--r--src/libigl/igl/copyleft/cork/mesh_boolean.h (renamed from src/igl/copyleft/cork/mesh_boolean.h)0
-rw-r--r--src/libigl/igl/copyleft/cork/to_cork_mesh.cpp (renamed from src/igl/copyleft/cork/to_cork_mesh.cpp)0
-rw-r--r--src/libigl/igl/copyleft/cork/to_cork_mesh.h (renamed from src/igl/copyleft/cork/to_cork_mesh.h)0
-rw-r--r--src/libigl/igl/copyleft/marching_cubes.cpp (renamed from src/igl/copyleft/marching_cubes.cpp)0
-rw-r--r--src/libigl/igl/copyleft/marching_cubes.h (renamed from src/igl/copyleft/marching_cubes.h)0
-rw-r--r--src/libigl/igl/copyleft/marching_cubes_tables.h (renamed from src/igl/copyleft/marching_cubes_tables.h)0
-rw-r--r--src/libigl/igl/copyleft/offset_surface.cpp (renamed from src/igl/copyleft/offset_surface.cpp)0
-rw-r--r--src/libigl/igl/copyleft/offset_surface.h (renamed from src/igl/copyleft/offset_surface.h)0
-rw-r--r--src/libigl/igl/copyleft/opengl2/render_to_tga.cpp (renamed from src/igl/copyleft/opengl2/render_to_tga.cpp)0
-rw-r--r--src/libigl/igl/copyleft/opengl2/render_to_tga.h (renamed from src/igl/copyleft/opengl2/render_to_tga.h)0
-rw-r--r--src/libigl/igl/copyleft/opengl2/texture_from_tga.cpp (renamed from src/igl/copyleft/opengl2/texture_from_tga.cpp)0
-rw-r--r--src/libigl/igl/copyleft/opengl2/texture_from_tga.h (renamed from src/igl/copyleft/opengl2/texture_from_tga.h)0
-rw-r--r--src/libigl/igl/copyleft/opengl2/tga.cpp (renamed from src/igl/copyleft/opengl2/tga.cpp)0
-rw-r--r--src/libigl/igl/copyleft/opengl2/tga.h (renamed from src/igl/copyleft/opengl2/tga.h)0
-rw-r--r--src/libigl/igl/copyleft/progressive_hulls.cpp (renamed from src/igl/copyleft/progressive_hulls.cpp)0
-rw-r--r--src/libigl/igl/copyleft/progressive_hulls.h (renamed from src/igl/copyleft/progressive_hulls.h)0
-rw-r--r--src/libigl/igl/copyleft/progressive_hulls_cost_and_placement.cpp (renamed from src/igl/copyleft/progressive_hulls_cost_and_placement.cpp)0
-rw-r--r--src/libigl/igl/copyleft/progressive_hulls_cost_and_placement.h (renamed from src/igl/copyleft/progressive_hulls_cost_and_placement.h)0
-rw-r--r--src/libigl/igl/copyleft/quadprog.cpp (renamed from src/igl/copyleft/quadprog.cpp)0
-rw-r--r--src/libigl/igl/copyleft/quadprog.h (renamed from src/igl/copyleft/quadprog.h)0
-rw-r--r--src/libigl/igl/copyleft/swept_volume.cpp (renamed from src/igl/copyleft/swept_volume.cpp)0
-rw-r--r--src/libigl/igl/copyleft/swept_volume.h (renamed from src/igl/copyleft/swept_volume.h)0
-rw-r--r--src/libigl/igl/copyleft/tetgen/README (renamed from src/igl/copyleft/tetgen/README)0
-rw-r--r--src/libigl/igl/copyleft/tetgen/cdt.cpp (renamed from src/igl/copyleft/tetgen/cdt.cpp)0
-rw-r--r--src/libigl/igl/copyleft/tetgen/cdt.h (renamed from src/igl/copyleft/tetgen/cdt.h)0
-rw-r--r--src/libigl/igl/copyleft/tetgen/mesh_to_tetgenio.cpp (renamed from src/igl/copyleft/tetgen/mesh_to_tetgenio.cpp)0
-rw-r--r--src/libigl/igl/copyleft/tetgen/mesh_to_tetgenio.h (renamed from src/igl/copyleft/tetgen/mesh_to_tetgenio.h)0
-rw-r--r--src/libigl/igl/copyleft/tetgen/mesh_with_skeleton.cpp (renamed from src/igl/copyleft/tetgen/mesh_with_skeleton.cpp)0
-rw-r--r--src/libigl/igl/copyleft/tetgen/mesh_with_skeleton.h (renamed from src/igl/copyleft/tetgen/mesh_with_skeleton.h)0
-rw-r--r--src/libigl/igl/copyleft/tetgen/read_into_tetgenio.cpp (renamed from src/igl/copyleft/tetgen/read_into_tetgenio.cpp)0
-rw-r--r--src/libigl/igl/copyleft/tetgen/read_into_tetgenio.h (renamed from src/igl/copyleft/tetgen/read_into_tetgenio.h)0
-rw-r--r--src/libigl/igl/copyleft/tetgen/tetgenio_to_tetmesh.cpp (renamed from src/igl/copyleft/tetgen/tetgenio_to_tetmesh.cpp)0
-rw-r--r--src/libigl/igl/copyleft/tetgen/tetgenio_to_tetmesh.h (renamed from src/igl/copyleft/tetgen/tetgenio_to_tetmesh.h)0
-rw-r--r--src/libigl/igl/copyleft/tetgen/tetrahedralize.cpp (renamed from src/igl/copyleft/tetgen/tetrahedralize.cpp)0
-rw-r--r--src/libigl/igl/copyleft/tetgen/tetrahedralize.h (renamed from src/igl/copyleft/tetgen/tetrahedralize.h)0
-rw-r--r--src/libigl/igl/cotmatrix.cpp (renamed from src/igl/cotmatrix.cpp)0
-rw-r--r--src/libigl/igl/cotmatrix.h (renamed from src/igl/cotmatrix.h)0
-rw-r--r--src/libigl/igl/cotmatrix_entries.cpp (renamed from src/igl/cotmatrix_entries.cpp)0
-rw-r--r--src/libigl/igl/cotmatrix_entries.h (renamed from src/igl/cotmatrix_entries.h)0
-rw-r--r--src/libigl/igl/count.cpp (renamed from src/igl/count.cpp)0
-rw-r--r--src/libigl/igl/count.h (renamed from src/igl/count.h)0
-rw-r--r--src/libigl/igl/covariance_scatter_matrix.cpp (renamed from src/igl/covariance_scatter_matrix.cpp)0
-rw-r--r--src/libigl/igl/covariance_scatter_matrix.h (renamed from src/igl/covariance_scatter_matrix.h)0
-rw-r--r--src/libigl/igl/cross.cpp (renamed from src/igl/cross.cpp)0
-rw-r--r--src/libigl/igl/cross.h (renamed from src/igl/cross.h)0
-rw-r--r--src/libigl/igl/cross_field_missmatch.cpp (renamed from src/igl/cross_field_missmatch.cpp)0
-rw-r--r--src/libigl/igl/cross_field_missmatch.h (renamed from src/igl/cross_field_missmatch.h)0
-rw-r--r--src/libigl/igl/crouzeix_raviart_cotmatrix.cpp (renamed from src/igl/crouzeix_raviart_cotmatrix.cpp)0
-rw-r--r--src/libigl/igl/crouzeix_raviart_cotmatrix.h (renamed from src/igl/crouzeix_raviart_cotmatrix.h)0
-rw-r--r--src/libigl/igl/crouzeix_raviart_massmatrix.cpp (renamed from src/igl/crouzeix_raviart_massmatrix.cpp)0
-rw-r--r--src/libigl/igl/crouzeix_raviart_massmatrix.h (renamed from src/igl/crouzeix_raviart_massmatrix.h)0
-rw-r--r--src/libigl/igl/cumsum.cpp (renamed from src/igl/cumsum.cpp)0
-rw-r--r--src/libigl/igl/cumsum.h (renamed from src/igl/cumsum.h)0
-rw-r--r--src/libigl/igl/cut_mesh.cpp (renamed from src/igl/cut_mesh.cpp)0
-rw-r--r--src/libigl/igl/cut_mesh.h (renamed from src/igl/cut_mesh.h)0
-rw-r--r--src/libigl/igl/cut_mesh_from_singularities.cpp (renamed from src/igl/cut_mesh_from_singularities.cpp)0
-rw-r--r--src/libigl/igl/cut_mesh_from_singularities.h (renamed from src/igl/cut_mesh_from_singularities.h)0
-rw-r--r--src/libigl/igl/cylinder.cpp (renamed from src/igl/cylinder.cpp)0
-rw-r--r--src/libigl/igl/cylinder.h (renamed from src/igl/cylinder.h)0
-rw-r--r--src/libigl/igl/dated_copy.cpp (renamed from src/igl/dated_copy.cpp)0
-rw-r--r--src/libigl/igl/dated_copy.h (renamed from src/igl/dated_copy.h)0
-rw-r--r--src/libigl/igl/decimate.cpp (renamed from src/igl/decimate.cpp)0
-rw-r--r--src/libigl/igl/decimate.h (renamed from src/igl/decimate.h)0
-rw-r--r--src/libigl/igl/deform_skeleton.cpp (renamed from src/igl/deform_skeleton.cpp)0
-rw-r--r--src/libigl/igl/deform_skeleton.h (renamed from src/igl/deform_skeleton.h)0
-rw-r--r--src/libigl/igl/delaunay_triangulation.cpp (renamed from src/igl/delaunay_triangulation.cpp)0
-rw-r--r--src/libigl/igl/delaunay_triangulation.h (renamed from src/igl/delaunay_triangulation.h)0
-rw-r--r--src/libigl/igl/deprecated.h (renamed from src/igl/deprecated.h)0
-rw-r--r--src/libigl/igl/dfs.cpp (renamed from src/igl/dfs.cpp)0
-rw-r--r--src/libigl/igl/dfs.h (renamed from src/igl/dfs.h)0
-rw-r--r--src/libigl/igl/diag.cpp (renamed from src/igl/diag.cpp)0
-rw-r--r--src/libigl/igl/diag.h (renamed from src/igl/diag.h)0
-rw-r--r--src/libigl/igl/dihedral_angles.cpp (renamed from src/igl/dihedral_angles.cpp)0
-rw-r--r--src/libigl/igl/dihedral_angles.h (renamed from src/igl/dihedral_angles.h)0
-rw-r--r--src/libigl/igl/dijkstra.cpp (renamed from src/igl/dijkstra.cpp)0
-rw-r--r--src/libigl/igl/dijkstra.h (renamed from src/igl/dijkstra.h)0
-rw-r--r--src/libigl/igl/directed_edge_orientations.cpp (renamed from src/igl/directed_edge_orientations.cpp)0
-rw-r--r--src/libigl/igl/directed_edge_orientations.h (renamed from src/igl/directed_edge_orientations.h)0
-rw-r--r--src/libigl/igl/directed_edge_parents.cpp (renamed from src/igl/directed_edge_parents.cpp)0
-rw-r--r--src/libigl/igl/directed_edge_parents.h (renamed from src/igl/directed_edge_parents.h)0
-rw-r--r--src/libigl/igl/dirname.cpp (renamed from src/igl/dirname.cpp)0
-rw-r--r--src/libigl/igl/dirname.h (renamed from src/igl/dirname.h)0
-rw-r--r--src/libigl/igl/dot.cpp (renamed from src/igl/dot.cpp)0
-rw-r--r--src/libigl/igl/dot.h (renamed from src/igl/dot.h)0
-rw-r--r--src/libigl/igl/dot_row.cpp (renamed from src/igl/dot_row.cpp)0
-rw-r--r--src/libigl/igl/dot_row.h (renamed from src/igl/dot_row.h)0
-rw-r--r--src/libigl/igl/doublearea.cpp (renamed from src/igl/doublearea.cpp)0
-rw-r--r--src/libigl/igl/doublearea.h (renamed from src/igl/doublearea.h)0
-rw-r--r--src/libigl/igl/dqs.cpp (renamed from src/igl/dqs.cpp)0
-rw-r--r--src/libigl/igl/dqs.h (renamed from src/igl/dqs.h)0
-rw-r--r--src/libigl/igl/ears.cpp (renamed from src/igl/ears.cpp)0
-rw-r--r--src/libigl/igl/ears.h (renamed from src/igl/ears.h)0
-rw-r--r--src/libigl/igl/edge_collapse_is_valid.cpp (renamed from src/igl/edge_collapse_is_valid.cpp)0
-rw-r--r--src/libigl/igl/edge_collapse_is_valid.h (renamed from src/igl/edge_collapse_is_valid.h)0
-rw-r--r--src/libigl/igl/edge_flaps.cpp (renamed from src/igl/edge_flaps.cpp)0
-rw-r--r--src/libigl/igl/edge_flaps.h (renamed from src/igl/edge_flaps.h)0
-rw-r--r--src/libigl/igl/edge_lengths.cpp (renamed from src/igl/edge_lengths.cpp)0
-rw-r--r--src/libigl/igl/edge_lengths.h (renamed from src/igl/edge_lengths.h)0
-rw-r--r--src/libigl/igl/edge_topology.cpp (renamed from src/igl/edge_topology.cpp)0
-rw-r--r--src/libigl/igl/edge_topology.h (renamed from src/igl/edge_topology.h)0
-rw-r--r--src/libigl/igl/edges.cpp (renamed from src/igl/edges.cpp)0
-rw-r--r--src/libigl/igl/edges.h (renamed from src/igl/edges.h)0
-rw-r--r--src/libigl/igl/edges_to_path.cpp (renamed from src/igl/edges_to_path.cpp)0
-rw-r--r--src/libigl/igl/edges_to_path.h (renamed from src/igl/edges_to_path.h)0
-rwxr-xr-xsrc/libigl/igl/eigs.cpp (renamed from src/igl/eigs.cpp)0
-rw-r--r--src/libigl/igl/eigs.h (renamed from src/igl/eigs.h)0
-rw-r--r--src/libigl/igl/embree/EmbreeIntersector.h (renamed from src/igl/embree/EmbreeIntersector.h)0
-rw-r--r--src/libigl/igl/embree/Embree_convenience.h (renamed from src/igl/embree/Embree_convenience.h)0
-rw-r--r--src/libigl/igl/embree/ambient_occlusion.cpp (renamed from src/igl/embree/ambient_occlusion.cpp)0
-rw-r--r--src/libigl/igl/embree/ambient_occlusion.h (renamed from src/igl/embree/ambient_occlusion.h)0
-rw-r--r--src/libigl/igl/embree/bone_heat.cpp (renamed from src/igl/embree/bone_heat.cpp)0
-rw-r--r--src/libigl/igl/embree/bone_heat.h (renamed from src/igl/embree/bone_heat.h)0
-rw-r--r--src/libigl/igl/embree/bone_visible.cpp (renamed from src/igl/embree/bone_visible.cpp)0
-rw-r--r--src/libigl/igl/embree/bone_visible.h (renamed from src/igl/embree/bone_visible.h)0
-rw-r--r--src/libigl/igl/embree/embree2/rtcore.h (renamed from src/igl/embree/embree2/rtcore.h)0
-rw-r--r--src/libigl/igl/embree/embree2/rtcore.isph (renamed from src/igl/embree/embree2/rtcore.isph)0
-rw-r--r--src/libigl/igl/embree/embree2/rtcore_geometry.h (renamed from src/igl/embree/embree2/rtcore_geometry.h)0
-rw-r--r--src/libigl/igl/embree/embree2/rtcore_geometry.isph (renamed from src/igl/embree/embree2/rtcore_geometry.isph)0
-rw-r--r--src/libigl/igl/embree/embree2/rtcore_geometry_user.h (renamed from src/igl/embree/embree2/rtcore_geometry_user.h)0
-rw-r--r--src/libigl/igl/embree/embree2/rtcore_geometry_user.isph (renamed from src/igl/embree/embree2/rtcore_geometry_user.isph)0
-rw-r--r--src/libigl/igl/embree/embree2/rtcore_ray.h (renamed from src/igl/embree/embree2/rtcore_ray.h)0
-rw-r--r--src/libigl/igl/embree/embree2/rtcore_ray.isph (renamed from src/igl/embree/embree2/rtcore_ray.isph)0
-rw-r--r--src/libigl/igl/embree/embree2/rtcore_scene.h (renamed from src/igl/embree/embree2/rtcore_scene.h)0
-rw-r--r--src/libigl/igl/embree/embree2/rtcore_scene.isph (renamed from src/igl/embree/embree2/rtcore_scene.isph)0
-rw-r--r--src/libigl/igl/embree/line_mesh_intersection.cpp (renamed from src/igl/embree/line_mesh_intersection.cpp)0
-rw-r--r--src/libigl/igl/embree/line_mesh_intersection.h (renamed from src/igl/embree/line_mesh_intersection.h)0
-rw-r--r--src/libigl/igl/embree/reorient_facets_raycast.cpp (renamed from src/igl/embree/reorient_facets_raycast.cpp)0
-rw-r--r--src/libigl/igl/embree/reorient_facets_raycast.h (renamed from src/igl/embree/reorient_facets_raycast.h)0
-rw-r--r--src/libigl/igl/embree/shape_diameter_function.cpp (renamed from src/igl/embree/shape_diameter_function.cpp)0
-rw-r--r--src/libigl/igl/embree/shape_diameter_function.h (renamed from src/igl/embree/shape_diameter_function.h)0
-rw-r--r--src/libigl/igl/embree/unproject_in_mesh.cpp (renamed from src/igl/embree/unproject_in_mesh.cpp)0
-rw-r--r--src/libigl/igl/embree/unproject_in_mesh.h (renamed from src/igl/embree/unproject_in_mesh.h)0
-rw-r--r--src/libigl/igl/embree/unproject_onto_mesh.cpp (renamed from src/igl/embree/unproject_onto_mesh.cpp)0
-rw-r--r--src/libigl/igl/embree/unproject_onto_mesh.h (renamed from src/igl/embree/unproject_onto_mesh.h)0
-rw-r--r--src/libigl/igl/euler_characteristic.cpp (renamed from src/igl/euler_characteristic.cpp)0
-rw-r--r--src/libigl/igl/euler_characteristic.h (renamed from src/igl/euler_characteristic.h)0
-rw-r--r--src/libigl/igl/exact_geodesic.cpp (renamed from src/igl/exact_geodesic.cpp)0
-rw-r--r--src/libigl/igl/exact_geodesic.h (renamed from src/igl/exact_geodesic.h)0
-rw-r--r--src/libigl/igl/example_fun.cpp (renamed from src/igl/example_fun.cpp)0
-rw-r--r--src/libigl/igl/example_fun.h (renamed from src/igl/example_fun.h)0
-rw-r--r--src/libigl/igl/exterior_edges.cpp (renamed from src/igl/exterior_edges.cpp)0
-rw-r--r--src/libigl/igl/exterior_edges.h (renamed from src/igl/exterior_edges.h)0
-rw-r--r--src/libigl/igl/extract_manifold_patches.cpp (renamed from src/igl/extract_manifold_patches.cpp)0
-rw-r--r--src/libigl/igl/extract_manifold_patches.h (renamed from src/igl/extract_manifold_patches.h)0
-rw-r--r--src/libigl/igl/extract_non_manifold_edge_curves.cpp (renamed from src/igl/extract_non_manifold_edge_curves.cpp)0
-rw-r--r--src/libigl/igl/extract_non_manifold_edge_curves.h (renamed from src/igl/extract_non_manifold_edge_curves.h)0
-rw-r--r--src/libigl/igl/face_areas.cpp (renamed from src/igl/face_areas.cpp)0
-rw-r--r--src/libigl/igl/face_areas.h (renamed from src/igl/face_areas.h)0
-rw-r--r--src/libigl/igl/face_occurrences.cpp (renamed from src/igl/face_occurrences.cpp)0
-rw-r--r--src/libigl/igl/face_occurrences.h (renamed from src/igl/face_occurrences.h)0
-rw-r--r--src/libigl/igl/faces_first.cpp (renamed from src/igl/faces_first.cpp)0
-rw-r--r--src/libigl/igl/faces_first.h (renamed from src/igl/faces_first.h)0
-rw-r--r--src/libigl/igl/facet_components.cpp (renamed from src/igl/facet_components.cpp)0
-rw-r--r--src/libigl/igl/facet_components.h (renamed from src/igl/facet_components.h)0
-rw-r--r--src/libigl/igl/false_barycentric_subdivision.cpp (renamed from src/igl/false_barycentric_subdivision.cpp)0
-rw-r--r--src/libigl/igl/false_barycentric_subdivision.h (renamed from src/igl/false_barycentric_subdivision.h)0
-rw-r--r--src/libigl/igl/fast_winding_number.cpp (renamed from src/igl/fast_winding_number.cpp)0
-rw-r--r--src/libigl/igl/fast_winding_number.h (renamed from src/igl/fast_winding_number.h)0
-rw-r--r--src/libigl/igl/file_contents_as_string.cpp (renamed from src/igl/file_contents_as_string.cpp)0
-rw-r--r--src/libigl/igl/file_contents_as_string.h (renamed from src/igl/file_contents_as_string.h)0
-rw-r--r--src/libigl/igl/file_dialog_open.cpp (renamed from src/igl/file_dialog_open.cpp)0
-rw-r--r--src/libigl/igl/file_dialog_open.h (renamed from src/igl/file_dialog_open.h)0
-rw-r--r--src/libigl/igl/file_dialog_save.cpp (renamed from src/igl/file_dialog_save.cpp)0
-rw-r--r--src/libigl/igl/file_dialog_save.h (renamed from src/igl/file_dialog_save.h)0
-rw-r--r--src/libigl/igl/file_exists.cpp (renamed from src/igl/file_exists.cpp)0
-rw-r--r--src/libigl/igl/file_exists.h (renamed from src/igl/file_exists.h)0
-rw-r--r--src/libigl/igl/find.cpp (renamed from src/igl/find.cpp)0
-rw-r--r--src/libigl/igl/find.h (renamed from src/igl/find.h)0
-rw-r--r--src/libigl/igl/find_cross_field_singularities.cpp (renamed from src/igl/find_cross_field_singularities.cpp)0
-rw-r--r--src/libigl/igl/find_cross_field_singularities.h (renamed from src/igl/find_cross_field_singularities.h)0
-rw-r--r--src/libigl/igl/find_zero.cpp (renamed from src/igl/find_zero.cpp)0
-rw-r--r--src/libigl/igl/find_zero.h (renamed from src/igl/find_zero.h)0
-rw-r--r--src/libigl/igl/fit_plane.cpp (renamed from src/igl/fit_plane.cpp)0
-rw-r--r--src/libigl/igl/fit_plane.h (renamed from src/igl/fit_plane.h)0
-rw-r--r--src/libigl/igl/fit_rotations.cpp (renamed from src/igl/fit_rotations.cpp)0
-rw-r--r--src/libigl/igl/fit_rotations.h (renamed from src/igl/fit_rotations.h)0
-rw-r--r--src/libigl/igl/flip_avoiding_line_search.cpp (renamed from src/igl/flip_avoiding_line_search.cpp)0
-rw-r--r--src/libigl/igl/flip_avoiding_line_search.h (renamed from src/igl/flip_avoiding_line_search.h)0
-rw-r--r--src/libigl/igl/flip_edge.cpp (renamed from src/igl/flip_edge.cpp)0
-rw-r--r--src/libigl/igl/flip_edge.h (renamed from src/igl/flip_edge.h)0
-rw-r--r--src/libigl/igl/flipped_triangles.cpp (renamed from src/igl/flipped_triangles.cpp)0
-rw-r--r--src/libigl/igl/flipped_triangles.h (renamed from src/igl/flipped_triangles.h)0
-rw-r--r--src/libigl/igl/flood_fill.cpp (renamed from src/igl/flood_fill.cpp)0
-rw-r--r--src/libigl/igl/flood_fill.h (renamed from src/igl/flood_fill.h)0
-rw-r--r--src/libigl/igl/floor.cpp (renamed from src/igl/floor.cpp)0
-rw-r--r--src/libigl/igl/floor.h (renamed from src/igl/floor.h)0
-rw-r--r--src/libigl/igl/for_each.h (renamed from src/igl/for_each.h)0
-rw-r--r--src/libigl/igl/forward_kinematics.cpp (renamed from src/igl/forward_kinematics.cpp)0
-rw-r--r--src/libigl/igl/forward_kinematics.h (renamed from src/igl/forward_kinematics.h)0
-rw-r--r--src/libigl/igl/frame_field_deformer.cpp (renamed from src/igl/frame_field_deformer.cpp)0
-rw-r--r--src/libigl/igl/frame_field_deformer.h (renamed from src/igl/frame_field_deformer.h)0
-rw-r--r--src/libigl/igl/frame_to_cross_field.cpp (renamed from src/igl/frame_to_cross_field.cpp)0
-rw-r--r--src/libigl/igl/frame_to_cross_field.h (renamed from src/igl/frame_to_cross_field.h)0
-rw-r--r--src/libigl/igl/frustum.cpp (renamed from src/igl/frustum.cpp)0
-rw-r--r--src/libigl/igl/frustum.h (renamed from src/igl/frustum.h)0
-rw-r--r--src/libigl/igl/gaussian_curvature.cpp (renamed from src/igl/gaussian_curvature.cpp)0
-rw-r--r--src/libigl/igl/gaussian_curvature.h (renamed from src/igl/gaussian_curvature.h)0
-rw-r--r--src/libigl/igl/get_seconds.cpp (renamed from src/igl/get_seconds.cpp)0
-rw-r--r--src/libigl/igl/get_seconds.h (renamed from src/igl/get_seconds.h)0
-rw-r--r--src/libigl/igl/get_seconds_hires.cpp (renamed from src/igl/get_seconds_hires.cpp)0
-rw-r--r--src/libigl/igl/get_seconds_hires.h (renamed from src/igl/get_seconds_hires.h)0
-rw-r--r--src/libigl/igl/grad.cpp (renamed from src/igl/grad.cpp)0
-rw-r--r--src/libigl/igl/grad.h (renamed from src/igl/grad.h)0
-rw-r--r--src/libigl/igl/grid.cpp (renamed from src/igl/grid.cpp)0
-rw-r--r--src/libigl/igl/grid.h (renamed from src/igl/grid.h)0
-rw-r--r--src/libigl/igl/grid_search.cpp (renamed from src/igl/grid_search.cpp)0
-rw-r--r--src/libigl/igl/grid_search.h (renamed from src/igl/grid_search.h)0
-rw-r--r--src/libigl/igl/group_sum_matrix.cpp (renamed from src/igl/group_sum_matrix.cpp)0
-rw-r--r--src/libigl/igl/group_sum_matrix.h (renamed from src/igl/group_sum_matrix.h)0
-rw-r--r--src/libigl/igl/guess_extension.cpp (renamed from src/igl/guess_extension.cpp)0
-rw-r--r--src/libigl/igl/guess_extension.h (renamed from src/igl/guess_extension.h)0
-rw-r--r--src/libigl/igl/harmonic.cpp (renamed from src/igl/harmonic.cpp)0
-rw-r--r--src/libigl/igl/harmonic.h (renamed from src/igl/harmonic.h)0
-rw-r--r--src/libigl/igl/harwell_boeing.cpp (renamed from src/igl/harwell_boeing.cpp)0
-rw-r--r--src/libigl/igl/harwell_boeing.h (renamed from src/igl/harwell_boeing.h)0
-rw-r--r--src/libigl/igl/hausdorff.cpp (renamed from src/igl/hausdorff.cpp)0
-rw-r--r--src/libigl/igl/hausdorff.h (renamed from src/igl/hausdorff.h)0
-rw-r--r--src/libigl/igl/hessian.cpp (renamed from src/igl/hessian.cpp)0
-rw-r--r--src/libigl/igl/hessian.h (renamed from src/igl/hessian.h)0
-rw-r--r--src/libigl/igl/hessian_energy.cpp (renamed from src/igl/hessian_energy.cpp)0
-rw-r--r--src/libigl/igl/hessian_energy.h (renamed from src/igl/hessian_energy.h)0
-rw-r--r--src/libigl/igl/histc.cpp (renamed from src/igl/histc.cpp)0
-rw-r--r--src/libigl/igl/histc.h (renamed from src/igl/histc.h)0
-rw-r--r--src/libigl/igl/hsv_to_rgb.cpp (renamed from src/igl/hsv_to_rgb.cpp)0
-rw-r--r--src/libigl/igl/hsv_to_rgb.h (renamed from src/igl/hsv_to_rgb.h)0
-rw-r--r--src/libigl/igl/igl_inline.h (renamed from src/igl/igl_inline.h)0
-rw-r--r--src/libigl/igl/in_element.cpp (renamed from src/igl/in_element.cpp)0
-rw-r--r--src/libigl/igl/in_element.h (renamed from src/igl/in_element.h)0
-rw-r--r--src/libigl/igl/infinite_cost_stopping_condition.cpp (renamed from src/igl/infinite_cost_stopping_condition.cpp)0
-rw-r--r--src/libigl/igl/infinite_cost_stopping_condition.h (renamed from src/igl/infinite_cost_stopping_condition.h)0
-rw-r--r--src/libigl/igl/inradius.cpp (renamed from src/igl/inradius.cpp)0
-rw-r--r--src/libigl/igl/inradius.h (renamed from src/igl/inradius.h)0
-rw-r--r--src/libigl/igl/internal_angles.cpp (renamed from src/igl/internal_angles.cpp)0
-rw-r--r--src/libigl/igl/internal_angles.h (renamed from src/igl/internal_angles.h)0
-rw-r--r--src/libigl/igl/intersect.cpp (renamed from src/igl/intersect.cpp)0
-rw-r--r--src/libigl/igl/intersect.h (renamed from src/igl/intersect.h)0
-rw-r--r--src/libigl/igl/invert_diag.cpp (renamed from src/igl/invert_diag.cpp)0
-rw-r--r--src/libigl/igl/invert_diag.h (renamed from src/igl/invert_diag.h)0
-rw-r--r--src/libigl/igl/is_border_vertex.cpp (renamed from src/igl/is_border_vertex.cpp)0
-rw-r--r--src/libigl/igl/is_border_vertex.h (renamed from src/igl/is_border_vertex.h)0
-rw-r--r--src/libigl/igl/is_boundary_edge.cpp (renamed from src/igl/is_boundary_edge.cpp)0
-rw-r--r--src/libigl/igl/is_boundary_edge.h (renamed from src/igl/is_boundary_edge.h)0
-rw-r--r--src/libigl/igl/is_dir.cpp (renamed from src/igl/is_dir.cpp)0
-rw-r--r--src/libigl/igl/is_dir.h (renamed from src/igl/is_dir.h)0
-rw-r--r--src/libigl/igl/is_edge_manifold.cpp (renamed from src/igl/is_edge_manifold.cpp)0
-rw-r--r--src/libigl/igl/is_edge_manifold.h (renamed from src/igl/is_edge_manifold.h)0
-rw-r--r--src/libigl/igl/is_file.cpp (renamed from src/igl/is_file.cpp)0
-rw-r--r--src/libigl/igl/is_file.h (renamed from src/igl/is_file.h)0
-rw-r--r--src/libigl/igl/is_irregular_vertex.cpp (renamed from src/igl/is_irregular_vertex.cpp)0
-rw-r--r--src/libigl/igl/is_irregular_vertex.h (renamed from src/igl/is_irregular_vertex.h)0
-rw-r--r--src/libigl/igl/is_planar.cpp (renamed from src/igl/is_planar.cpp)0
-rw-r--r--src/libigl/igl/is_planar.h (renamed from src/igl/is_planar.h)0
-rw-r--r--src/libigl/igl/is_readable.cpp (renamed from src/igl/is_readable.cpp)0
-rw-r--r--src/libigl/igl/is_readable.h (renamed from src/igl/is_readable.h)0
-rw-r--r--src/libigl/igl/is_sparse.cpp (renamed from src/igl/is_sparse.cpp)0
-rw-r--r--src/libigl/igl/is_sparse.h (renamed from src/igl/is_sparse.h)0
-rw-r--r--src/libigl/igl/is_stl.cpp (renamed from src/igl/is_stl.cpp)0
-rw-r--r--src/libigl/igl/is_stl.h (renamed from src/igl/is_stl.h)0
-rw-r--r--src/libigl/igl/is_symmetric.cpp (renamed from src/igl/is_symmetric.cpp)0
-rw-r--r--src/libigl/igl/is_symmetric.h (renamed from src/igl/is_symmetric.h)0
-rw-r--r--src/libigl/igl/is_vertex_manifold.cpp (renamed from src/igl/is_vertex_manifold.cpp)0
-rw-r--r--src/libigl/igl/is_vertex_manifold.h (renamed from src/igl/is_vertex_manifold.h)0
-rw-r--r--src/libigl/igl/is_writable.cpp (renamed from src/igl/is_writable.cpp)0
-rw-r--r--src/libigl/igl/is_writable.h (renamed from src/igl/is_writable.h)0
-rw-r--r--src/libigl/igl/isdiag.cpp (renamed from src/igl/isdiag.cpp)0
-rw-r--r--src/libigl/igl/isdiag.h (renamed from src/igl/isdiag.h)0
-rw-r--r--src/libigl/igl/ismember.cpp (renamed from src/igl/ismember.cpp)0
-rw-r--r--src/libigl/igl/ismember.h (renamed from src/igl/ismember.h)0
-rw-r--r--src/libigl/igl/isolines.cpp (renamed from src/igl/isolines.cpp)0
-rw-r--r--src/libigl/igl/isolines.h (renamed from src/igl/isolines.h)0
-rw-r--r--src/libigl/igl/jet.cpp (renamed from src/igl/jet.cpp)0
-rw-r--r--src/libigl/igl/jet.h (renamed from src/igl/jet.h)0
-rw-r--r--src/libigl/igl/knn.cpp (renamed from src/igl/knn.cpp)0
-rw-r--r--src/libigl/igl/knn.h (renamed from src/igl/knn.h)0
-rw-r--r--src/libigl/igl/launch_medit.cpp (renamed from src/igl/launch_medit.cpp)0
-rw-r--r--src/libigl/igl/launch_medit.h (renamed from src/igl/launch_medit.h)0
-rw-r--r--src/libigl/igl/lbs_matrix.cpp (renamed from src/igl/lbs_matrix.cpp)0
-rw-r--r--src/libigl/igl/lbs_matrix.h (renamed from src/igl/lbs_matrix.h)0
-rw-r--r--src/libigl/igl/lexicographic_triangulation.cpp (renamed from src/igl/lexicographic_triangulation.cpp)0
-rw-r--r--src/libigl/igl/lexicographic_triangulation.h (renamed from src/igl/lexicographic_triangulation.h)0
-rw-r--r--src/libigl/igl/lim/lim.cpp (renamed from src/igl/lim/lim.cpp)0
-rw-r--r--src/libigl/igl/lim/lim.h (renamed from src/igl/lim/lim.h)0
-rw-r--r--src/libigl/igl/limit_faces.cpp (renamed from src/igl/limit_faces.cpp)0
-rw-r--r--src/libigl/igl/limit_faces.h (renamed from src/igl/limit_faces.h)0
-rw-r--r--src/libigl/igl/line_field_missmatch.cpp (renamed from src/igl/line_field_missmatch.cpp)0
-rw-r--r--src/libigl/igl/line_field_missmatch.h (renamed from src/igl/line_field_missmatch.h)0
-rw-r--r--src/libigl/igl/line_search.cpp (renamed from src/igl/line_search.cpp)0
-rw-r--r--src/libigl/igl/line_search.h (renamed from src/igl/line_search.h)0
-rw-r--r--src/libigl/igl/line_segment_in_rectangle.cpp (renamed from src/igl/line_segment_in_rectangle.cpp)0
-rw-r--r--src/libigl/igl/line_segment_in_rectangle.h (renamed from src/igl/line_segment_in_rectangle.h)0
-rw-r--r--src/libigl/igl/linprog.cpp (renamed from src/igl/linprog.cpp)0
-rw-r--r--src/libigl/igl/linprog.h (renamed from src/igl/linprog.h)0
-rw-r--r--src/libigl/igl/list_to_matrix.cpp (renamed from src/igl/list_to_matrix.cpp)0
-rw-r--r--src/libigl/igl/list_to_matrix.h (renamed from src/igl/list_to_matrix.h)0
-rw-r--r--src/libigl/igl/local_basis.cpp (renamed from src/igl/local_basis.cpp)0
-rw-r--r--src/libigl/igl/local_basis.h (renamed from src/igl/local_basis.h)0
-rw-r--r--src/libigl/igl/look_at.cpp (renamed from src/igl/look_at.cpp)0
-rw-r--r--src/libigl/igl/look_at.h (renamed from src/igl/look_at.h)0
-rw-r--r--src/libigl/igl/loop.cpp (renamed from src/igl/loop.cpp)0
-rw-r--r--src/libigl/igl/loop.h (renamed from src/igl/loop.h)0
-rw-r--r--src/libigl/igl/lscm.cpp (renamed from src/igl/lscm.cpp)0
-rw-r--r--src/libigl/igl/lscm.h (renamed from src/igl/lscm.h)0
-rwxr-xr-xsrc/libigl/igl/map_vertices_to_circle.cpp (renamed from src/igl/map_vertices_to_circle.cpp)0
-rwxr-xr-xsrc/libigl/igl/map_vertices_to_circle.h (renamed from src/igl/map_vertices_to_circle.h)0
-rw-r--r--src/libigl/igl/massmatrix.cpp (renamed from src/igl/massmatrix.cpp)0
-rw-r--r--src/libigl/igl/massmatrix.h (renamed from src/igl/massmatrix.h)0
-rw-r--r--src/libigl/igl/mat_max.cpp (renamed from src/igl/mat_max.cpp)0
-rw-r--r--src/libigl/igl/mat_max.h (renamed from src/igl/mat_max.h)0
-rw-r--r--src/libigl/igl/mat_min.cpp (renamed from src/igl/mat_min.cpp)0
-rw-r--r--src/libigl/igl/mat_min.h (renamed from src/igl/mat_min.h)0
-rw-r--r--src/libigl/igl/mat_to_quat.cpp (renamed from src/igl/mat_to_quat.cpp)0
-rw-r--r--src/libigl/igl/mat_to_quat.h (renamed from src/igl/mat_to_quat.h)0
-rw-r--r--src/libigl/igl/material_colors.h (renamed from src/igl/material_colors.h)0
-rw-r--r--src/libigl/igl/matlab/MatlabWorkspace.h (renamed from src/igl/matlab/MatlabWorkspace.h)0
-rw-r--r--src/libigl/igl/matlab/MexStream.h (renamed from src/igl/matlab/MexStream.h)0
-rw-r--r--src/libigl/igl/matlab/matlabinterface.cpp (renamed from src/igl/matlab/matlabinterface.cpp)0
-rw-r--r--src/libigl/igl/matlab/matlabinterface.h (renamed from src/igl/matlab/matlabinterface.h)0
-rw-r--r--src/libigl/igl/matlab/mexErrMsgTxt.cpp (renamed from src/igl/matlab/mexErrMsgTxt.cpp)0
-rw-r--r--src/libigl/igl/matlab/mexErrMsgTxt.h (renamed from src/igl/matlab/mexErrMsgTxt.h)0
-rw-r--r--src/libigl/igl/matlab/parse_rhs.cpp (renamed from src/igl/matlab/parse_rhs.cpp)0
-rw-r--r--src/libigl/igl/matlab/parse_rhs.h (renamed from src/igl/matlab/parse_rhs.h)0
-rw-r--r--src/libigl/igl/matlab/prepare_lhs.cpp (renamed from src/igl/matlab/prepare_lhs.cpp)0
-rw-r--r--src/libigl/igl/matlab/prepare_lhs.h (renamed from src/igl/matlab/prepare_lhs.h)0
-rw-r--r--src/libigl/igl/matlab/requires_arg.cpp (renamed from src/igl/matlab/requires_arg.cpp)0
-rw-r--r--src/libigl/igl/matlab/requires_arg.h (renamed from src/igl/matlab/requires_arg.h)0
-rw-r--r--src/libigl/igl/matlab/validate_arg.cpp (renamed from src/igl/matlab/validate_arg.cpp)0
-rw-r--r--src/libigl/igl/matlab/validate_arg.h (renamed from src/igl/matlab/validate_arg.h)0
-rw-r--r--src/libigl/igl/matlab_format.cpp (renamed from src/igl/matlab_format.cpp)0
-rw-r--r--src/libigl/igl/matlab_format.h (renamed from src/igl/matlab_format.h)0
-rw-r--r--src/libigl/igl/matrix_to_list.cpp (renamed from src/igl/matrix_to_list.cpp)0
-rw-r--r--src/libigl/igl/matrix_to_list.h (renamed from src/igl/matrix_to_list.h)0
-rw-r--r--src/libigl/igl/max.cpp (renamed from src/igl/max.cpp)0
-rw-r--r--src/libigl/igl/max.h (renamed from src/igl/max.h)0
-rw-r--r--src/libigl/igl/max_faces_stopping_condition.cpp (renamed from src/igl/max_faces_stopping_condition.cpp)0
-rw-r--r--src/libigl/igl/max_faces_stopping_condition.h (renamed from src/igl/max_faces_stopping_condition.h)0
-rw-r--r--src/libigl/igl/max_size.cpp (renamed from src/igl/max_size.cpp)0
-rw-r--r--src/libigl/igl/max_size.h (renamed from src/igl/max_size.h)0
-rw-r--r--src/libigl/igl/median.cpp (renamed from src/igl/median.cpp)0
-rw-r--r--src/libigl/igl/median.h (renamed from src/igl/median.h)0
-rw-r--r--src/libigl/igl/min.cpp (renamed from src/igl/min.cpp)0
-rw-r--r--src/libigl/igl/min.h (renamed from src/igl/min.h)0
-rw-r--r--src/libigl/igl/min_quad_dense.cpp (renamed from src/igl/min_quad_dense.cpp)0
-rw-r--r--src/libigl/igl/min_quad_dense.h (renamed from src/igl/min_quad_dense.h)0
-rw-r--r--src/libigl/igl/min_quad_with_fixed.cpp (renamed from src/igl/min_quad_with_fixed.cpp)0
-rw-r--r--src/libigl/igl/min_quad_with_fixed.h (renamed from src/igl/min_quad_with_fixed.h)0
-rw-r--r--src/libigl/igl/min_size.cpp (renamed from src/igl/min_size.cpp)0
-rw-r--r--src/libigl/igl/min_size.h (renamed from src/igl/min_size.h)0
-rw-r--r--src/libigl/igl/mod.cpp (renamed from src/igl/mod.cpp)0
-rw-r--r--src/libigl/igl/mod.h (renamed from src/igl/mod.h)0
-rw-r--r--src/libigl/igl/mode.cpp (renamed from src/igl/mode.cpp)0
-rw-r--r--src/libigl/igl/mode.h (renamed from src/igl/mode.h)0
-rw-r--r--src/libigl/igl/mosek/bbw.cpp (renamed from src/igl/mosek/bbw.cpp)0
-rw-r--r--src/libigl/igl/mosek/bbw.h (renamed from src/igl/mosek/bbw.h)0
-rw-r--r--src/libigl/igl/mosek/mosek_guarded.cpp (renamed from src/igl/mosek/mosek_guarded.cpp)0
-rw-r--r--src/libigl/igl/mosek/mosek_guarded.h (renamed from src/igl/mosek/mosek_guarded.h)0
-rw-r--r--src/libigl/igl/mosek/mosek_linprog.cpp (renamed from src/igl/mosek/mosek_linprog.cpp)0
-rw-r--r--src/libigl/igl/mosek/mosek_linprog.h (renamed from src/igl/mosek/mosek_linprog.h)0
-rw-r--r--src/libigl/igl/mosek/mosek_quadprog.cpp (renamed from src/igl/mosek/mosek_quadprog.cpp)0
-rw-r--r--src/libigl/igl/mosek/mosek_quadprog.h (renamed from src/igl/mosek/mosek_quadprog.h)0
-rw-r--r--src/libigl/igl/mvc.cpp (renamed from src/igl/mvc.cpp)0
-rw-r--r--src/libigl/igl/mvc.h (renamed from src/igl/mvc.h)0
-rw-r--r--src/libigl/igl/nchoosek.cpp (renamed from src/igl/nchoosek.cpp)0
-rw-r--r--src/libigl/igl/nchoosek.h (renamed from src/igl/nchoosek.h)0
-rw-r--r--src/libigl/igl/next_filename.cpp (renamed from src/igl/next_filename.cpp)0
-rw-r--r--src/libigl/igl/next_filename.h (renamed from src/igl/next_filename.h)0
-rw-r--r--src/libigl/igl/normal_derivative.cpp (renamed from src/igl/normal_derivative.cpp)0
-rw-r--r--src/libigl/igl/normal_derivative.h (renamed from src/igl/normal_derivative.h)0
-rw-r--r--src/libigl/igl/normalize_quat.cpp (renamed from src/igl/normalize_quat.cpp)0
-rw-r--r--src/libigl/igl/normalize_quat.h (renamed from src/igl/normalize_quat.h)0
-rw-r--r--src/libigl/igl/normalize_row_lengths.cpp (renamed from src/igl/normalize_row_lengths.cpp)0
-rw-r--r--src/libigl/igl/normalize_row_lengths.h (renamed from src/igl/normalize_row_lengths.h)0
-rw-r--r--src/libigl/igl/normalize_row_sums.cpp (renamed from src/igl/normalize_row_sums.cpp)0
-rw-r--r--src/libigl/igl/normalize_row_sums.h (renamed from src/igl/normalize_row_sums.h)0
-rw-r--r--src/libigl/igl/null.cpp (renamed from src/igl/null.cpp)0
-rw-r--r--src/libigl/igl/null.h (renamed from src/igl/null.h)0
-rw-r--r--src/libigl/igl/octree.cpp (renamed from src/igl/octree.cpp)0
-rw-r--r--src/libigl/igl/octree.h (renamed from src/igl/octree.h)0
-rw-r--r--src/libigl/igl/on_boundary.cpp (renamed from src/igl/on_boundary.cpp)0
-rw-r--r--src/libigl/igl/on_boundary.h (renamed from src/igl/on_boundary.h)0
-rw-r--r--src/libigl/igl/opengl/MeshGL.cpp (renamed from src/igl/opengl/MeshGL.cpp)0
-rw-r--r--src/libigl/igl/opengl/MeshGL.h (renamed from src/igl/opengl/MeshGL.h)0
-rw-r--r--src/libigl/igl/opengl/ViewerCore.cpp (renamed from src/igl/opengl/ViewerCore.cpp)0
-rw-r--r--src/libigl/igl/opengl/ViewerCore.h (renamed from src/igl/opengl/ViewerCore.h)0
-rw-r--r--src/libigl/igl/opengl/ViewerData.cpp (renamed from src/igl/opengl/ViewerData.cpp)0
-rw-r--r--src/libigl/igl/opengl/ViewerData.h (renamed from src/igl/opengl/ViewerData.h)0
-rw-r--r--src/libigl/igl/opengl/bind_vertex_attrib_array.cpp (renamed from src/igl/opengl/bind_vertex_attrib_array.cpp)0
-rw-r--r--src/libigl/igl/opengl/bind_vertex_attrib_array.h (renamed from src/igl/opengl/bind_vertex_attrib_array.h)0
-rw-r--r--src/libigl/igl/opengl/create_index_vbo.cpp (renamed from src/igl/opengl/create_index_vbo.cpp)0
-rw-r--r--src/libigl/igl/opengl/create_index_vbo.h (renamed from src/igl/opengl/create_index_vbo.h)0
-rw-r--r--src/libigl/igl/opengl/create_mesh_vbo.cpp (renamed from src/igl/opengl/create_mesh_vbo.cpp)0
-rw-r--r--src/libigl/igl/opengl/create_mesh_vbo.h (renamed from src/igl/opengl/create_mesh_vbo.h)0
-rw-r--r--src/libigl/igl/opengl/create_shader_program.cpp (renamed from src/igl/opengl/create_shader_program.cpp)0
-rw-r--r--src/libigl/igl/opengl/create_shader_program.h (renamed from src/igl/opengl/create_shader_program.h)0
-rw-r--r--src/libigl/igl/opengl/create_vector_vbo.cpp (renamed from src/igl/opengl/create_vector_vbo.cpp)0
-rw-r--r--src/libigl/igl/opengl/create_vector_vbo.h (renamed from src/igl/opengl/create_vector_vbo.h)0
-rw-r--r--src/libigl/igl/opengl/destroy_shader_program.cpp (renamed from src/igl/opengl/destroy_shader_program.cpp)0
-rw-r--r--src/libigl/igl/opengl/destroy_shader_program.h (renamed from src/igl/opengl/destroy_shader_program.h)0
-rw-r--r--src/libigl/igl/opengl/gl.h (renamed from src/igl/opengl/gl.h)0
-rw-r--r--src/libigl/igl/opengl/gl_type_size.cpp (renamed from src/igl/opengl/gl_type_size.cpp)0
-rw-r--r--src/libigl/igl/opengl/gl_type_size.h (renamed from src/igl/opengl/gl_type_size.h)0
-rw-r--r--src/libigl/igl/opengl/glfw/Viewer.cpp (renamed from src/igl/opengl/glfw/Viewer.cpp)0
-rw-r--r--src/libigl/igl/opengl/glfw/Viewer.h (renamed from src/igl/opengl/glfw/Viewer.h)0
-rw-r--r--src/libigl/igl/opengl/glfw/ViewerPlugin.h (renamed from src/igl/opengl/glfw/ViewerPlugin.h)0
-rw-r--r--src/libigl/igl/opengl/glfw/background_window.cpp (renamed from src/igl/opengl/glfw/background_window.cpp)0
-rw-r--r--src/libigl/igl/opengl/glfw/background_window.h (renamed from src/igl/opengl/glfw/background_window.h)0
-rw-r--r--src/libigl/igl/opengl/glfw/imgui/ImGuiHelpers.h (renamed from src/igl/opengl/glfw/imgui/ImGuiHelpers.h)0
-rw-r--r--src/libigl/igl/opengl/glfw/imgui/ImGuiMenu.cpp (renamed from src/igl/opengl/glfw/imgui/ImGuiMenu.cpp)0
-rw-r--r--src/libigl/igl/opengl/glfw/imgui/ImGuiMenu.h (renamed from src/igl/opengl/glfw/imgui/ImGuiMenu.h)0
-rw-r--r--src/libigl/igl/opengl/glfw/map_texture.cpp (renamed from src/igl/opengl/glfw/map_texture.cpp)0
-rw-r--r--src/libigl/igl/opengl/glfw/map_texture.h (renamed from src/igl/opengl/glfw/map_texture.h)0
-rw-r--r--src/libigl/igl/opengl/init_render_to_texture.cpp (renamed from src/igl/opengl/init_render_to_texture.cpp)0
-rw-r--r--src/libigl/igl/opengl/init_render_to_texture.h (renamed from src/igl/opengl/init_render_to_texture.h)0
-rw-r--r--src/libigl/igl/opengl/load_shader.cpp (renamed from src/igl/opengl/load_shader.cpp)0
-rw-r--r--src/libigl/igl/opengl/load_shader.h (renamed from src/igl/opengl/load_shader.h)0
-rw-r--r--src/libigl/igl/opengl/print_program_info_log.cpp (renamed from src/igl/opengl/print_program_info_log.cpp)0
-rw-r--r--src/libigl/igl/opengl/print_program_info_log.h (renamed from src/igl/opengl/print_program_info_log.h)0
-rw-r--r--src/libigl/igl/opengl/print_shader_info_log.cpp (renamed from src/igl/opengl/print_shader_info_log.cpp)0
-rw-r--r--src/libigl/igl/opengl/print_shader_info_log.h (renamed from src/igl/opengl/print_shader_info_log.h)0
-rw-r--r--src/libigl/igl/opengl/report_gl_error.cpp (renamed from src/igl/opengl/report_gl_error.cpp)0
-rw-r--r--src/libigl/igl/opengl/report_gl_error.h (renamed from src/igl/opengl/report_gl_error.h)0
-rw-r--r--src/libigl/igl/opengl/uniform_type_to_string.cpp (renamed from src/igl/opengl/uniform_type_to_string.cpp)0
-rw-r--r--src/libigl/igl/opengl/uniform_type_to_string.h (renamed from src/igl/opengl/uniform_type_to_string.h)0
-rw-r--r--src/libigl/igl/opengl/vertex_array.cpp (renamed from src/igl/opengl/vertex_array.cpp)0
-rw-r--r--src/libigl/igl/opengl/vertex_array.h (renamed from src/igl/opengl/vertex_array.h)0
-rw-r--r--src/libigl/igl/opengl2/MouseController.h (renamed from src/igl/opengl2/MouseController.h)0
-rw-r--r--src/libigl/igl/opengl2/RotateWidget.h (renamed from src/igl/opengl2/RotateWidget.h)0
-rw-r--r--src/libigl/igl/opengl2/TranslateWidget.h (renamed from src/igl/opengl2/TranslateWidget.h)0
-rw-r--r--src/libigl/igl/opengl2/draw_beach_ball.cpp (renamed from src/igl/opengl2/draw_beach_ball.cpp)0
-rw-r--r--src/libigl/igl/opengl2/draw_beach_ball.h (renamed from src/igl/opengl2/draw_beach_ball.h)0
-rw-r--r--src/libigl/igl/opengl2/draw_floor.cpp (renamed from src/igl/opengl2/draw_floor.cpp)0
-rw-r--r--src/libigl/igl/opengl2/draw_floor.h (renamed from src/igl/opengl2/draw_floor.h)0
-rw-r--r--src/libigl/igl/opengl2/draw_mesh.cpp (renamed from src/igl/opengl2/draw_mesh.cpp)0
-rw-r--r--src/libigl/igl/opengl2/draw_mesh.h (renamed from src/igl/opengl2/draw_mesh.h)0
-rw-r--r--src/libigl/igl/opengl2/draw_point.cpp (renamed from src/igl/opengl2/draw_point.cpp)0
-rw-r--r--src/libigl/igl/opengl2/draw_point.h (renamed from src/igl/opengl2/draw_point.h)0
-rw-r--r--src/libigl/igl/opengl2/draw_rectangular_marquee.cpp (renamed from src/igl/opengl2/draw_rectangular_marquee.cpp)0
-rw-r--r--src/libigl/igl/opengl2/draw_rectangular_marquee.h (renamed from src/igl/opengl2/draw_rectangular_marquee.h)0
-rw-r--r--src/libigl/igl/opengl2/draw_skeleton_3d.cpp (renamed from src/igl/opengl2/draw_skeleton_3d.cpp)0
-rw-r--r--src/libigl/igl/opengl2/draw_skeleton_3d.h (renamed from src/igl/opengl2/draw_skeleton_3d.h)0
-rw-r--r--src/libigl/igl/opengl2/draw_skeleton_vector_graphics.cpp (renamed from src/igl/opengl2/draw_skeleton_vector_graphics.cpp)0
-rw-r--r--src/libigl/igl/opengl2/draw_skeleton_vector_graphics.h (renamed from src/igl/opengl2/draw_skeleton_vector_graphics.h)0
-rw-r--r--src/libigl/igl/opengl2/flare_textures.h (renamed from src/igl/opengl2/flare_textures.h)0
-rw-r--r--src/libigl/igl/opengl2/gl.h (renamed from src/igl/opengl2/gl.h)0
-rw-r--r--src/libigl/igl/opengl2/glext.h (renamed from src/igl/opengl2/glext.h)0
-rw-r--r--src/libigl/igl/opengl2/glu.h (renamed from src/igl/opengl2/glu.h)0
-rw-r--r--src/libigl/igl/opengl2/lens_flare.cpp (renamed from src/igl/opengl2/lens_flare.cpp)0
-rw-r--r--src/libigl/igl/opengl2/lens_flare.h (renamed from src/igl/opengl2/lens_flare.h)0
-rw-r--r--src/libigl/igl/opengl2/model_proj_viewport.cpp (renamed from src/igl/opengl2/model_proj_viewport.cpp)0
-rw-r--r--src/libigl/igl/opengl2/model_proj_viewport.h (renamed from src/igl/opengl2/model_proj_viewport.h)0
-rw-r--r--src/libigl/igl/opengl2/print_gl_get.cpp (renamed from src/igl/opengl2/print_gl_get.cpp)0
-rw-r--r--src/libigl/igl/opengl2/print_gl_get.h (renamed from src/igl/opengl2/print_gl_get.h)0
-rw-r--r--src/libigl/igl/opengl2/project.cpp (renamed from src/igl/opengl2/project.cpp)0
-rw-r--r--src/libigl/igl/opengl2/project.h (renamed from src/igl/opengl2/project.h)0
-rw-r--r--src/libigl/igl/opengl2/right_axis.cpp (renamed from src/igl/opengl2/right_axis.cpp)0
-rw-r--r--src/libigl/igl/opengl2/right_axis.h (renamed from src/igl/opengl2/right_axis.h)0
-rw-r--r--src/libigl/igl/opengl2/shine_textures.h (renamed from src/igl/opengl2/shine_textures.h)0
-rw-r--r--src/libigl/igl/opengl2/sort_triangles.cpp (renamed from src/igl/opengl2/sort_triangles.cpp)0
-rw-r--r--src/libigl/igl/opengl2/sort_triangles.h (renamed from src/igl/opengl2/sort_triangles.h)0
-rw-r--r--src/libigl/igl/opengl2/unproject.cpp (renamed from src/igl/opengl2/unproject.cpp)0
-rw-r--r--src/libigl/igl/opengl2/unproject.h (renamed from src/igl/opengl2/unproject.h)0
-rw-r--r--src/libigl/igl/opengl2/unproject_to_zero_plane.cpp (renamed from src/igl/opengl2/unproject_to_zero_plane.cpp)0
-rw-r--r--src/libigl/igl/opengl2/unproject_to_zero_plane.h (renamed from src/igl/opengl2/unproject_to_zero_plane.h)0
-rw-r--r--src/libigl/igl/opengl2/up_axis.cpp (renamed from src/igl/opengl2/up_axis.cpp)0
-rw-r--r--src/libigl/igl/opengl2/up_axis.h (renamed from src/igl/opengl2/up_axis.h)0
-rw-r--r--src/libigl/igl/opengl2/view_axis.cpp (renamed from src/igl/opengl2/view_axis.cpp)0
-rw-r--r--src/libigl/igl/opengl2/view_axis.h (renamed from src/igl/opengl2/view_axis.h)0
-rw-r--r--src/libigl/igl/orient_outward.cpp (renamed from src/igl/orient_outward.cpp)0
-rw-r--r--src/libigl/igl/orient_outward.h (renamed from src/igl/orient_outward.h)0
-rw-r--r--src/libigl/igl/orientable_patches.cpp (renamed from src/igl/orientable_patches.cpp)0
-rw-r--r--src/libigl/igl/orientable_patches.h (renamed from src/igl/orientable_patches.h)0
-rw-r--r--src/libigl/igl/oriented_facets.cpp (renamed from src/igl/oriented_facets.cpp)0
-rw-r--r--src/libigl/igl/oriented_facets.h (renamed from src/igl/oriented_facets.h)0
-rw-r--r--src/libigl/igl/orth.cpp (renamed from src/igl/orth.cpp)0
-rw-r--r--src/libigl/igl/orth.h (renamed from src/igl/orth.h)0
-rw-r--r--src/libigl/igl/ortho.cpp (renamed from src/igl/ortho.cpp)0
-rw-r--r--src/libigl/igl/ortho.h (renamed from src/igl/ortho.h)0
-rw-r--r--src/libigl/igl/outer_element.cpp (renamed from src/igl/outer_element.cpp)0
-rw-r--r--src/libigl/igl/outer_element.h (renamed from src/igl/outer_element.h)0
-rw-r--r--src/libigl/igl/parallel_for.h (renamed from src/igl/parallel_for.h)0
-rw-r--r--src/libigl/igl/parallel_transport_angles.cpp (renamed from src/igl/parallel_transport_angles.cpp)0
-rw-r--r--src/libigl/igl/parallel_transport_angles.h (renamed from src/igl/parallel_transport_angles.h)0
-rw-r--r--src/libigl/igl/partition.cpp (renamed from src/igl/partition.cpp)0
-rw-r--r--src/libigl/igl/partition.h (renamed from src/igl/partition.h)0
-rw-r--r--src/libigl/igl/parula.cpp (renamed from src/igl/parula.cpp)0
-rw-r--r--src/libigl/igl/parula.h (renamed from src/igl/parula.h)0
-rw-r--r--src/libigl/igl/path_to_executable.cpp (renamed from src/igl/path_to_executable.cpp)0
-rw-r--r--src/libigl/igl/path_to_executable.h (renamed from src/igl/path_to_executable.h)0
-rw-r--r--src/libigl/igl/pathinfo.cpp (renamed from src/igl/pathinfo.cpp)0
-rw-r--r--src/libigl/igl/pathinfo.h (renamed from src/igl/pathinfo.h)0
-rw-r--r--src/libigl/igl/per_corner_normals.cpp (renamed from src/igl/per_corner_normals.cpp)0
-rw-r--r--src/libigl/igl/per_corner_normals.h (renamed from src/igl/per_corner_normals.h)0
-rw-r--r--src/libigl/igl/per_edge_normals.cpp (renamed from src/igl/per_edge_normals.cpp)0
-rw-r--r--src/libigl/igl/per_edge_normals.h (renamed from src/igl/per_edge_normals.h)0
-rw-r--r--src/libigl/igl/per_face_normals.cpp (renamed from src/igl/per_face_normals.cpp)0
-rw-r--r--src/libigl/igl/per_face_normals.h (renamed from src/igl/per_face_normals.h)0
-rw-r--r--src/libigl/igl/per_vertex_attribute_smoothing.cpp (renamed from src/igl/per_vertex_attribute_smoothing.cpp)0
-rw-r--r--src/libigl/igl/per_vertex_attribute_smoothing.h (renamed from src/igl/per_vertex_attribute_smoothing.h)0
-rw-r--r--src/libigl/igl/per_vertex_normals.cpp (renamed from src/igl/per_vertex_normals.cpp)0
-rw-r--r--src/libigl/igl/per_vertex_normals.h (renamed from src/igl/per_vertex_normals.h)0
-rw-r--r--src/libigl/igl/per_vertex_point_to_plane_quadrics.cpp (renamed from src/igl/per_vertex_point_to_plane_quadrics.cpp)0
-rw-r--r--src/libigl/igl/per_vertex_point_to_plane_quadrics.h (renamed from src/igl/per_vertex_point_to_plane_quadrics.h)0
-rw-r--r--src/libigl/igl/piecewise_constant_winding_number.cpp (renamed from src/igl/piecewise_constant_winding_number.cpp)0
-rw-r--r--src/libigl/igl/piecewise_constant_winding_number.h (renamed from src/igl/piecewise_constant_winding_number.h)0
-rw-r--r--src/libigl/igl/pinv.cpp (renamed from src/igl/pinv.cpp)0
-rw-r--r--src/libigl/igl/pinv.h (renamed from src/igl/pinv.h)0
-rw-r--r--src/libigl/igl/planarize_quad_mesh.cpp (renamed from src/igl/planarize_quad_mesh.cpp)0
-rw-r--r--src/libigl/igl/planarize_quad_mesh.h (renamed from src/igl/planarize_quad_mesh.h)0
-rw-r--r--src/libigl/igl/ply.h (renamed from src/igl/ply.h)0
-rw-r--r--src/libigl/igl/png/readPNG.cpp (renamed from src/igl/png/readPNG.cpp)0
-rw-r--r--src/libigl/igl/png/readPNG.h (renamed from src/igl/png/readPNG.h)0
-rw-r--r--src/libigl/igl/png/render_to_png.cpp (renamed from src/igl/png/render_to_png.cpp)0
-rw-r--r--src/libigl/igl/png/render_to_png.h (renamed from src/igl/png/render_to_png.h)0
-rw-r--r--src/libigl/igl/png/render_to_png_async.cpp (renamed from src/igl/png/render_to_png_async.cpp)0
-rw-r--r--src/libigl/igl/png/render_to_png_async.h (renamed from src/igl/png/render_to_png_async.h)0
-rw-r--r--src/libigl/igl/png/texture_from_file.cpp (renamed from src/igl/png/texture_from_file.cpp)0
-rw-r--r--src/libigl/igl/png/texture_from_file.h (renamed from src/igl/png/texture_from_file.h)0
-rw-r--r--src/libigl/igl/png/texture_from_png.cpp (renamed from src/igl/png/texture_from_png.cpp)0
-rw-r--r--src/libigl/igl/png/texture_from_png.h (renamed from src/igl/png/texture_from_png.h)0
-rw-r--r--src/libigl/igl/png/writePNG.cpp (renamed from src/igl/png/writePNG.cpp)0
-rw-r--r--src/libigl/igl/png/writePNG.h (renamed from src/igl/png/writePNG.h)0
-rw-r--r--src/libigl/igl/point_in_circle.cpp (renamed from src/igl/point_in_circle.cpp)0
-rw-r--r--src/libigl/igl/point_in_circle.h (renamed from src/igl/point_in_circle.h)0
-rw-r--r--src/libigl/igl/point_in_poly.cpp (renamed from src/igl/point_in_poly.cpp)0
-rw-r--r--src/libigl/igl/point_in_poly.h (renamed from src/igl/point_in_poly.h)0
-rw-r--r--src/libigl/igl/point_mesh_squared_distance.cpp (renamed from src/igl/point_mesh_squared_distance.cpp)0
-rw-r--r--src/libigl/igl/point_mesh_squared_distance.h (renamed from src/igl/point_mesh_squared_distance.h)0
-rw-r--r--src/libigl/igl/point_simplex_squared_distance.cpp (renamed from src/igl/point_simplex_squared_distance.cpp)0
-rw-r--r--src/libigl/igl/point_simplex_squared_distance.h (renamed from src/igl/point_simplex_squared_distance.h)0
-rw-r--r--src/libigl/igl/polar_dec.cpp (renamed from src/igl/polar_dec.cpp)0
-rw-r--r--src/libigl/igl/polar_dec.h (renamed from src/igl/polar_dec.h)0
-rw-r--r--src/libigl/igl/polar_svd.cpp (renamed from src/igl/polar_svd.cpp)0
-rw-r--r--src/libigl/igl/polar_svd.h (renamed from src/igl/polar_svd.h)0
-rw-r--r--src/libigl/igl/polar_svd3x3.cpp (renamed from src/igl/polar_svd3x3.cpp)0
-rw-r--r--src/libigl/igl/polar_svd3x3.h (renamed from src/igl/polar_svd3x3.h)0
-rw-r--r--src/libigl/igl/polygon_mesh_to_triangle_mesh.cpp (renamed from src/igl/polygon_mesh_to_triangle_mesh.cpp)0
-rw-r--r--src/libigl/igl/polygon_mesh_to_triangle_mesh.h (renamed from src/igl/polygon_mesh_to_triangle_mesh.h)0
-rw-r--r--src/libigl/igl/principal_curvature.cpp (renamed from src/igl/principal_curvature.cpp)0
-rw-r--r--src/libigl/igl/principal_curvature.h (renamed from src/igl/principal_curvature.h)0
-rw-r--r--src/libigl/igl/print_ijv.cpp (renamed from src/igl/print_ijv.cpp)0
-rw-r--r--src/libigl/igl/print_ijv.h (renamed from src/igl/print_ijv.h)0
-rw-r--r--src/libigl/igl/print_vector.cpp (renamed from src/igl/print_vector.cpp)0
-rw-r--r--src/libigl/igl/print_vector.h (renamed from src/igl/print_vector.h)0
-rw-r--r--src/libigl/igl/procrustes.cpp (renamed from src/igl/procrustes.cpp)0
-rw-r--r--src/libigl/igl/procrustes.h (renamed from src/igl/procrustes.h)0
-rw-r--r--src/libigl/igl/project.cpp (renamed from src/igl/project.cpp)0
-rw-r--r--src/libigl/igl/project.h (renamed from src/igl/project.h)0
-rw-r--r--src/libigl/igl/project_isometrically_to_plane.cpp (renamed from src/igl/project_isometrically_to_plane.cpp)0
-rw-r--r--src/libigl/igl/project_isometrically_to_plane.h (renamed from src/igl/project_isometrically_to_plane.h)0
-rw-r--r--src/libigl/igl/project_to_line.cpp (renamed from src/igl/project_to_line.cpp)0
-rw-r--r--src/libigl/igl/project_to_line.h (renamed from src/igl/project_to_line.h)0
-rw-r--r--src/libigl/igl/project_to_line_segment.cpp (renamed from src/igl/project_to_line_segment.cpp)0
-rw-r--r--src/libigl/igl/project_to_line_segment.h (renamed from src/igl/project_to_line_segment.h)0
-rw-r--r--src/libigl/igl/pseudonormal_test.cpp (renamed from src/igl/pseudonormal_test.cpp)0
-rw-r--r--src/libigl/igl/pseudonormal_test.h (renamed from src/igl/pseudonormal_test.h)0
-rw-r--r--src/libigl/igl/pso.cpp (renamed from src/igl/pso.cpp)0
-rw-r--r--src/libigl/igl/pso.h (renamed from src/igl/pso.h)0
-rw-r--r--src/libigl/igl/qslim.cpp (renamed from src/igl/qslim.cpp)0
-rw-r--r--src/libigl/igl/qslim.h (renamed from src/igl/qslim.h)0
-rw-r--r--src/libigl/igl/qslim_optimal_collapse_edge_callbacks.cpp (renamed from src/igl/qslim_optimal_collapse_edge_callbacks.cpp)0
-rw-r--r--src/libigl/igl/qslim_optimal_collapse_edge_callbacks.h (renamed from src/igl/qslim_optimal_collapse_edge_callbacks.h)0
-rw-r--r--src/libigl/igl/quad_planarity.cpp (renamed from src/igl/quad_planarity.cpp)0
-rw-r--r--src/libigl/igl/quad_planarity.h (renamed from src/igl/quad_planarity.h)0
-rw-r--r--src/libigl/igl/quadric_binary_plus_operator.cpp (renamed from src/igl/quadric_binary_plus_operator.cpp)0
-rw-r--r--src/libigl/igl/quadric_binary_plus_operator.h (renamed from src/igl/quadric_binary_plus_operator.h)0
-rw-r--r--src/libigl/igl/quat_conjugate.cpp (renamed from src/igl/quat_conjugate.cpp)0
-rw-r--r--src/libigl/igl/quat_conjugate.h (renamed from src/igl/quat_conjugate.h)0
-rw-r--r--src/libigl/igl/quat_mult.cpp (renamed from src/igl/quat_mult.cpp)0
-rw-r--r--src/libigl/igl/quat_mult.h (renamed from src/igl/quat_mult.h)0
-rw-r--r--src/libigl/igl/quat_to_axis_angle.cpp (renamed from src/igl/quat_to_axis_angle.cpp)0
-rw-r--r--src/libigl/igl/quat_to_axis_angle.h (renamed from src/igl/quat_to_axis_angle.h)0
-rw-r--r--src/libigl/igl/quat_to_mat.cpp (renamed from src/igl/quat_to_mat.cpp)0
-rw-r--r--src/libigl/igl/quat_to_mat.h (renamed from src/igl/quat_to_mat.h)0
-rw-r--r--src/libigl/igl/quats_to_column.cpp (renamed from src/igl/quats_to_column.cpp)0
-rw-r--r--src/libigl/igl/quats_to_column.h (renamed from src/igl/quats_to_column.h)0
-rw-r--r--src/libigl/igl/ramer_douglas_peucker.cpp (renamed from src/igl/ramer_douglas_peucker.cpp)0
-rw-r--r--src/libigl/igl/ramer_douglas_peucker.h (renamed from src/igl/ramer_douglas_peucker.h)0
-rw-r--r--src/libigl/igl/random_dir.cpp (renamed from src/igl/random_dir.cpp)0
-rw-r--r--src/libigl/igl/random_dir.h (renamed from src/igl/random_dir.h)0
-rw-r--r--src/libigl/igl/random_points_on_mesh.cpp (renamed from src/igl/random_points_on_mesh.cpp)0
-rw-r--r--src/libigl/igl/random_points_on_mesh.h (renamed from src/igl/random_points_on_mesh.h)0
-rw-r--r--src/libigl/igl/random_quaternion.cpp (renamed from src/igl/random_quaternion.cpp)0
-rw-r--r--src/libigl/igl/random_quaternion.h (renamed from src/igl/random_quaternion.h)0
-rw-r--r--src/libigl/igl/random_search.cpp (renamed from src/igl/random_search.cpp)0
-rw-r--r--src/libigl/igl/random_search.h (renamed from src/igl/random_search.h)0
-rw-r--r--src/libigl/igl/randperm.cpp (renamed from src/igl/randperm.cpp)0
-rw-r--r--src/libigl/igl/randperm.h (renamed from src/igl/randperm.h)0
-rw-r--r--src/libigl/igl/ray_box_intersect.cpp (renamed from src/igl/ray_box_intersect.cpp)0
-rw-r--r--src/libigl/igl/ray_box_intersect.h (renamed from src/igl/ray_box_intersect.h)0
-rw-r--r--src/libigl/igl/ray_mesh_intersect.cpp (renamed from src/igl/ray_mesh_intersect.cpp)0
-rw-r--r--src/libigl/igl/ray_mesh_intersect.h (renamed from src/igl/ray_mesh_intersect.h)0
-rw-r--r--src/libigl/igl/ray_sphere_intersect.cpp (renamed from src/igl/ray_sphere_intersect.cpp)0
-rw-r--r--src/libigl/igl/ray_sphere_intersect.h (renamed from src/igl/ray_sphere_intersect.h)0
-rw-r--r--src/libigl/igl/raytri.c (renamed from src/igl/raytri.c)0
-rw-r--r--src/libigl/igl/readBF.cpp (renamed from src/igl/readBF.cpp)0
-rw-r--r--src/libigl/igl/readBF.h (renamed from src/igl/readBF.h)0
-rw-r--r--src/libigl/igl/readCSV.cpp (renamed from src/igl/readCSV.cpp)0
-rw-r--r--src/libigl/igl/readCSV.h (renamed from src/igl/readCSV.h)0
-rw-r--r--src/libigl/igl/readDMAT.cpp (renamed from src/igl/readDMAT.cpp)0
-rw-r--r--src/libigl/igl/readDMAT.h (renamed from src/igl/readDMAT.h)0
-rw-r--r--src/libigl/igl/readMESH.cpp (renamed from src/igl/readMESH.cpp)0
-rw-r--r--src/libigl/igl/readMESH.h (renamed from src/igl/readMESH.h)0
-rw-r--r--src/libigl/igl/readMSH.cpp (renamed from src/igl/readMSH.cpp)0
-rw-r--r--src/libigl/igl/readMSH.h (renamed from src/igl/readMSH.h)0
-rw-r--r--src/libigl/igl/readNODE.cpp (renamed from src/igl/readNODE.cpp)0
-rw-r--r--src/libigl/igl/readNODE.h (renamed from src/igl/readNODE.h)0
-rw-r--r--src/libigl/igl/readOBJ.cpp (renamed from src/igl/readOBJ.cpp)0
-rw-r--r--src/libigl/igl/readOBJ.h (renamed from src/igl/readOBJ.h)0
-rw-r--r--src/libigl/igl/readOFF.cpp (renamed from src/igl/readOFF.cpp)0
-rw-r--r--src/libigl/igl/readOFF.h (renamed from src/igl/readOFF.h)0
-rw-r--r--src/libigl/igl/readPLY.cpp (renamed from src/igl/readPLY.cpp)0
-rw-r--r--src/libigl/igl/readPLY.h (renamed from src/igl/readPLY.h)0
-rw-r--r--src/libigl/igl/readSTL.cpp (renamed from src/igl/readSTL.cpp)0
-rw-r--r--src/libigl/igl/readSTL.h (renamed from src/igl/readSTL.h)0
-rw-r--r--src/libigl/igl/readTGF.cpp (renamed from src/igl/readTGF.cpp)0
-rw-r--r--src/libigl/igl/readTGF.h (renamed from src/igl/readTGF.h)0
-rw-r--r--src/libigl/igl/readWRL.cpp (renamed from src/igl/readWRL.cpp)0
-rw-r--r--src/libigl/igl/readWRL.h (renamed from src/igl/readWRL.h)0
-rw-r--r--src/libigl/igl/read_triangle_mesh.cpp (renamed from src/igl/read_triangle_mesh.cpp)0
-rw-r--r--src/libigl/igl/read_triangle_mesh.h (renamed from src/igl/read_triangle_mesh.h)0
-rw-r--r--src/libigl/igl/redux.h (renamed from src/igl/redux.h)0
-rw-r--r--src/libigl/igl/remesh_along_isoline.cpp (renamed from src/igl/remesh_along_isoline.cpp)0
-rw-r--r--src/libigl/igl/remesh_along_isoline.h (renamed from src/igl/remesh_along_isoline.h)0
-rw-r--r--src/libigl/igl/remove_duplicate_vertices.cpp (renamed from src/igl/remove_duplicate_vertices.cpp)0
-rw-r--r--src/libigl/igl/remove_duplicate_vertices.h (renamed from src/igl/remove_duplicate_vertices.h)0
-rw-r--r--src/libigl/igl/remove_duplicates.cpp (renamed from src/igl/remove_duplicates.cpp)0
-rw-r--r--src/libigl/igl/remove_duplicates.h (renamed from src/igl/remove_duplicates.h)0
-rw-r--r--src/libigl/igl/remove_unreferenced.cpp (renamed from src/igl/remove_unreferenced.cpp)0
-rw-r--r--src/libigl/igl/remove_unreferenced.h (renamed from src/igl/remove_unreferenced.h)0
-rw-r--r--src/libigl/igl/reorder.cpp (renamed from src/igl/reorder.cpp)0
-rw-r--r--src/libigl/igl/reorder.h (renamed from src/igl/reorder.h)0
-rw-r--r--src/libigl/igl/repdiag.cpp (renamed from src/igl/repdiag.cpp)0
-rw-r--r--src/libigl/igl/repdiag.h (renamed from src/igl/repdiag.h)0
-rw-r--r--src/libigl/igl/repmat.cpp (renamed from src/igl/repmat.cpp)0
-rw-r--r--src/libigl/igl/repmat.h (renamed from src/igl/repmat.h)0
-rw-r--r--src/libigl/igl/resolve_duplicated_faces.cpp (renamed from src/igl/resolve_duplicated_faces.cpp)0
-rw-r--r--src/libigl/igl/resolve_duplicated_faces.h (renamed from src/igl/resolve_duplicated_faces.h)0
-rw-r--r--src/libigl/igl/rgb_to_hsv.cpp (renamed from src/igl/rgb_to_hsv.cpp)0
-rw-r--r--src/libigl/igl/rgb_to_hsv.h (renamed from src/igl/rgb_to_hsv.h)0
-rw-r--r--src/libigl/igl/rotate_by_quat.cpp (renamed from src/igl/rotate_by_quat.cpp)0
-rw-r--r--src/libigl/igl/rotate_by_quat.h (renamed from src/igl/rotate_by_quat.h)0
-rw-r--r--src/libigl/igl/rotate_vectors.cpp (renamed from src/igl/rotate_vectors.cpp)0
-rw-r--r--src/libigl/igl/rotate_vectors.h (renamed from src/igl/rotate_vectors.h)0
-rw-r--r--src/libigl/igl/rotation_matrix_from_directions.cpp (renamed from src/igl/rotation_matrix_from_directions.cpp)0
-rw-r--r--src/libigl/igl/rotation_matrix_from_directions.h (renamed from src/igl/rotation_matrix_from_directions.h)0
-rw-r--r--src/libigl/igl/round.cpp (renamed from src/igl/round.cpp)0
-rw-r--r--src/libigl/igl/round.h (renamed from src/igl/round.h)0
-rw-r--r--src/libigl/igl/rows_to_matrix.cpp (renamed from src/igl/rows_to_matrix.cpp)0
-rw-r--r--src/libigl/igl/rows_to_matrix.h (renamed from src/igl/rows_to_matrix.h)0
-rw-r--r--src/libigl/igl/sample_edges.cpp (renamed from src/igl/sample_edges.cpp)0
-rw-r--r--src/libigl/igl/sample_edges.h (renamed from src/igl/sample_edges.h)0
-rw-r--r--src/libigl/igl/seam_edges.cpp (renamed from src/igl/seam_edges.cpp)0
-rw-r--r--src/libigl/igl/seam_edges.h (renamed from src/igl/seam_edges.h)0
-rw-r--r--src/libigl/igl/segment_segment_intersect.cpp (renamed from src/igl/segment_segment_intersect.cpp)0
-rw-r--r--src/libigl/igl/segment_segment_intersect.h (renamed from src/igl/segment_segment_intersect.h)0
-rw-r--r--src/libigl/igl/serialize.h (renamed from src/igl/serialize.h)0
-rw-r--r--src/libigl/igl/setdiff.cpp (renamed from src/igl/setdiff.cpp)0
-rw-r--r--src/libigl/igl/setdiff.h (renamed from src/igl/setdiff.h)0
-rw-r--r--src/libigl/igl/setunion.cpp (renamed from src/igl/setunion.cpp)0
-rw-r--r--src/libigl/igl/setunion.h (renamed from src/igl/setunion.h)0
-rw-r--r--src/libigl/igl/setxor.cpp (renamed from src/igl/setxor.cpp)0
-rw-r--r--src/libigl/igl/setxor.h (renamed from src/igl/setxor.h)0
-rw-r--r--src/libigl/igl/shape_diameter_function.cpp (renamed from src/igl/shape_diameter_function.cpp)0
-rw-r--r--src/libigl/igl/shape_diameter_function.h (renamed from src/igl/shape_diameter_function.h)0
-rw-r--r--src/libigl/igl/shapeup.cpp (renamed from src/igl/shapeup.cpp)0
-rw-r--r--src/libigl/igl/shapeup.h (renamed from src/igl/shapeup.h)0
-rw-r--r--src/libigl/igl/shortest_edge_and_midpoint.cpp (renamed from src/igl/shortest_edge_and_midpoint.cpp)0
-rw-r--r--src/libigl/igl/shortest_edge_and_midpoint.h (renamed from src/igl/shortest_edge_and_midpoint.h)0
-rw-r--r--src/libigl/igl/signed_angle.cpp (renamed from src/igl/signed_angle.cpp)0
-rw-r--r--src/libigl/igl/signed_angle.h (renamed from src/igl/signed_angle.h)0
-rw-r--r--src/libigl/igl/signed_distance.cpp (renamed from src/igl/signed_distance.cpp)0
-rw-r--r--src/libigl/igl/signed_distance.h (renamed from src/igl/signed_distance.h)0
-rw-r--r--src/libigl/igl/simplify_polyhedron.cpp (renamed from src/igl/simplify_polyhedron.cpp)0
-rw-r--r--src/libigl/igl/simplify_polyhedron.h (renamed from src/igl/simplify_polyhedron.h)0
-rw-r--r--src/libigl/igl/slice.cpp (renamed from src/igl/slice.cpp)0
-rw-r--r--src/libigl/igl/slice.h (renamed from src/igl/slice.h)0
-rw-r--r--src/libigl/igl/slice_cached.cpp (renamed from src/igl/slice_cached.cpp)0
-rw-r--r--src/libigl/igl/slice_cached.h (renamed from src/igl/slice_cached.h)0
-rw-r--r--src/libigl/igl/slice_into.cpp (renamed from src/igl/slice_into.cpp)0
-rw-r--r--src/libigl/igl/slice_into.h (renamed from src/igl/slice_into.h)0
-rw-r--r--src/libigl/igl/slice_mask.cpp (renamed from src/igl/slice_mask.cpp)0
-rw-r--r--src/libigl/igl/slice_mask.h (renamed from src/igl/slice_mask.h)0
-rw-r--r--src/libigl/igl/slice_tets.cpp (renamed from src/igl/slice_tets.cpp)0
-rw-r--r--src/libigl/igl/slice_tets.h (renamed from src/igl/slice_tets.h)0
-rw-r--r--src/libigl/igl/slim.cpp (renamed from src/igl/slim.cpp)0
-rw-r--r--src/libigl/igl/slim.h (renamed from src/igl/slim.h)0
-rw-r--r--src/libigl/igl/snap_points.cpp (renamed from src/igl/snap_points.cpp)0
-rw-r--r--src/libigl/igl/snap_points.h (renamed from src/igl/snap_points.h)0
-rw-r--r--src/libigl/igl/snap_to_canonical_view_quat.cpp (renamed from src/igl/snap_to_canonical_view_quat.cpp)0
-rw-r--r--src/libigl/igl/snap_to_canonical_view_quat.h (renamed from src/igl/snap_to_canonical_view_quat.h)0
-rw-r--r--src/libigl/igl/snap_to_fixed_up.cpp (renamed from src/igl/snap_to_fixed_up.cpp)0
-rw-r--r--src/libigl/igl/snap_to_fixed_up.h (renamed from src/igl/snap_to_fixed_up.h)0
-rw-r--r--src/libigl/igl/solid_angle.cpp (renamed from src/igl/solid_angle.cpp)0
-rw-r--r--src/libigl/igl/solid_angle.h (renamed from src/igl/solid_angle.h)0
-rw-r--r--src/libigl/igl/sort.cpp (renamed from src/igl/sort.cpp)0
-rw-r--r--src/libigl/igl/sort.h (renamed from src/igl/sort.h)0
-rw-r--r--src/libigl/igl/sort_angles.cpp (renamed from src/igl/sort_angles.cpp)0
-rw-r--r--src/libigl/igl/sort_angles.h (renamed from src/igl/sort_angles.h)0
-rw-r--r--src/libigl/igl/sort_triangles.cpp (renamed from src/igl/sort_triangles.cpp)0
-rw-r--r--src/libigl/igl/sort_triangles.h (renamed from src/igl/sort_triangles.h)0
-rw-r--r--src/libigl/igl/sort_vectors_ccw.cpp (renamed from src/igl/sort_vectors_ccw.cpp)0
-rw-r--r--src/libigl/igl/sort_vectors_ccw.h (renamed from src/igl/sort_vectors_ccw.h)0
-rw-r--r--src/libigl/igl/sortrows.cpp (renamed from src/igl/sortrows.cpp)0
-rw-r--r--src/libigl/igl/sortrows.h (renamed from src/igl/sortrows.h)0
-rw-r--r--src/libigl/igl/sparse.cpp (renamed from src/igl/sparse.cpp)0
-rw-r--r--src/libigl/igl/sparse.h (renamed from src/igl/sparse.h)0
-rw-r--r--src/libigl/igl/sparse_cached.cpp (renamed from src/igl/sparse_cached.cpp)0
-rw-r--r--src/libigl/igl/sparse_cached.h (renamed from src/igl/sparse_cached.h)0
-rw-r--r--src/libigl/igl/speye.cpp (renamed from src/igl/speye.cpp)0
-rw-r--r--src/libigl/igl/speye.h (renamed from src/igl/speye.h)0
-rw-r--r--src/libigl/igl/squared_edge_lengths.cpp (renamed from src/igl/squared_edge_lengths.cpp)0
-rw-r--r--src/libigl/igl/squared_edge_lengths.h (renamed from src/igl/squared_edge_lengths.h)0
-rw-r--r--src/libigl/igl/stdin_to_temp.cpp (renamed from src/igl/stdin_to_temp.cpp)0
-rw-r--r--src/libigl/igl/stdin_to_temp.h (renamed from src/igl/stdin_to_temp.h)0
-rw-r--r--src/libigl/igl/straighten_seams.cpp (renamed from src/igl/straighten_seams.cpp)0
-rw-r--r--src/libigl/igl/straighten_seams.h (renamed from src/igl/straighten_seams.h)0
-rw-r--r--src/libigl/igl/sum.cpp (renamed from src/igl/sum.cpp)0
-rw-r--r--src/libigl/igl/sum.h (renamed from src/igl/sum.h)0
-rw-r--r--src/libigl/igl/svd3x3.cpp (renamed from src/igl/svd3x3.cpp)0
-rw-r--r--src/libigl/igl/svd3x3.h (renamed from src/igl/svd3x3.h)0
-rw-r--r--src/libigl/igl/svd3x3_avx.cpp (renamed from src/igl/svd3x3_avx.cpp)0
-rw-r--r--src/libigl/igl/svd3x3_avx.h (renamed from src/igl/svd3x3_avx.h)0
-rw-r--r--src/libigl/igl/svd3x3_sse.cpp (renamed from src/igl/svd3x3_sse.cpp)0
-rw-r--r--src/libigl/igl/svd3x3_sse.h (renamed from src/igl/svd3x3_sse.h)0
-rw-r--r--src/libigl/igl/swept_volume_bounding_box.cpp (renamed from src/igl/swept_volume_bounding_box.cpp)0
-rw-r--r--src/libigl/igl/swept_volume_bounding_box.h (renamed from src/igl/swept_volume_bounding_box.h)0
-rw-r--r--src/libigl/igl/swept_volume_signed_distance.cpp (renamed from src/igl/swept_volume_signed_distance.cpp)0
-rw-r--r--src/libigl/igl/swept_volume_signed_distance.h (renamed from src/igl/swept_volume_signed_distance.h)0
-rw-r--r--src/libigl/igl/trackball.cpp (renamed from src/igl/trackball.cpp)0
-rw-r--r--src/libigl/igl/trackball.h (renamed from src/igl/trackball.h)0
-rw-r--r--src/libigl/igl/transpose_blocks.cpp (renamed from src/igl/transpose_blocks.cpp)0
-rw-r--r--src/libigl/igl/transpose_blocks.h (renamed from src/igl/transpose_blocks.h)0
-rw-r--r--src/libigl/igl/triangle/cdt.cpp (renamed from src/igl/triangle/cdt.cpp)0
-rw-r--r--src/libigl/igl/triangle/cdt.h (renamed from src/igl/triangle/cdt.h)0
-rw-r--r--src/libigl/igl/triangle/triangulate.cpp (renamed from src/igl/triangle/triangulate.cpp)0
-rw-r--r--src/libigl/igl/triangle/triangulate.h (renamed from src/igl/triangle/triangulate.h)0
-rw-r--r--src/libigl/igl/triangle_fan.cpp (renamed from src/igl/triangle_fan.cpp)0
-rw-r--r--src/libigl/igl/triangle_fan.h (renamed from src/igl/triangle_fan.h)0
-rw-r--r--src/libigl/igl/triangle_triangle_adjacency.cpp (renamed from src/igl/triangle_triangle_adjacency.cpp)0
-rw-r--r--src/libigl/igl/triangle_triangle_adjacency.h (renamed from src/igl/triangle_triangle_adjacency.h)0
-rw-r--r--src/libigl/igl/triangles_from_strip.cpp (renamed from src/igl/triangles_from_strip.cpp)0
-rw-r--r--src/libigl/igl/triangles_from_strip.h (renamed from src/igl/triangles_from_strip.h)0
-rw-r--r--src/libigl/igl/two_axis_valuator_fixed_up.cpp (renamed from src/igl/two_axis_valuator_fixed_up.cpp)0
-rw-r--r--src/libigl/igl/two_axis_valuator_fixed_up.h (renamed from src/igl/two_axis_valuator_fixed_up.h)0
-rw-r--r--src/libigl/igl/uniformly_sample_two_manifold.cpp (renamed from src/igl/uniformly_sample_two_manifold.cpp)0
-rw-r--r--src/libigl/igl/uniformly_sample_two_manifold.h (renamed from src/igl/uniformly_sample_two_manifold.h)0
-rw-r--r--src/libigl/igl/unique.cpp (renamed from src/igl/unique.cpp)0
-rw-r--r--src/libigl/igl/unique.h (renamed from src/igl/unique.h)0
-rw-r--r--src/libigl/igl/unique_edge_map.cpp (renamed from src/igl/unique_edge_map.cpp)0
-rw-r--r--src/libigl/igl/unique_edge_map.h (renamed from src/igl/unique_edge_map.h)0
-rw-r--r--src/libigl/igl/unique_rows.cpp (renamed from src/igl/unique_rows.cpp)0
-rw-r--r--src/libigl/igl/unique_rows.h (renamed from src/igl/unique_rows.h)0
-rw-r--r--src/libigl/igl/unique_simplices.cpp (renamed from src/igl/unique_simplices.cpp)0
-rw-r--r--src/libigl/igl/unique_simplices.h (renamed from src/igl/unique_simplices.h)0
-rw-r--r--src/libigl/igl/unproject.cpp (renamed from src/igl/unproject.cpp)0
-rw-r--r--src/libigl/igl/unproject.h (renamed from src/igl/unproject.h)0
-rw-r--r--src/libigl/igl/unproject_in_mesh.cpp (renamed from src/igl/unproject_in_mesh.cpp)0
-rw-r--r--src/libigl/igl/unproject_in_mesh.h (renamed from src/igl/unproject_in_mesh.h)0
-rw-r--r--src/libigl/igl/unproject_onto_mesh.cpp (renamed from src/igl/unproject_onto_mesh.cpp)0
-rw-r--r--src/libigl/igl/unproject_onto_mesh.h (renamed from src/igl/unproject_onto_mesh.h)0
-rw-r--r--src/libigl/igl/unproject_ray.cpp (renamed from src/igl/unproject_ray.cpp)0
-rw-r--r--src/libigl/igl/unproject_ray.h (renamed from src/igl/unproject_ray.h)0
-rw-r--r--src/libigl/igl/unzip_corners.cpp (renamed from src/igl/unzip_corners.cpp)0
-rw-r--r--src/libigl/igl/unzip_corners.h (renamed from src/igl/unzip_corners.h)0
-rw-r--r--src/libigl/igl/upsample.cpp (renamed from src/igl/upsample.cpp)0
-rw-r--r--src/libigl/igl/upsample.h (renamed from src/igl/upsample.h)0
-rw-r--r--src/libigl/igl/vector_area_matrix.cpp (renamed from src/igl/vector_area_matrix.cpp)0
-rw-r--r--src/libigl/igl/vector_area_matrix.h (renamed from src/igl/vector_area_matrix.h)0
-rw-r--r--src/libigl/igl/verbose.h (renamed from src/igl/verbose.h)0
-rw-r--r--src/libigl/igl/vertex_triangle_adjacency.cpp (renamed from src/igl/vertex_triangle_adjacency.cpp)0
-rw-r--r--src/libigl/igl/vertex_triangle_adjacency.h (renamed from src/igl/vertex_triangle_adjacency.h)0
-rw-r--r--src/libigl/igl/volume.cpp (renamed from src/igl/volume.cpp)0
-rw-r--r--src/libigl/igl/volume.h (renamed from src/igl/volume.h)0
-rw-r--r--src/libigl/igl/voxel_grid.cpp (renamed from src/igl/voxel_grid.cpp)0
-rw-r--r--src/libigl/igl/voxel_grid.h (renamed from src/igl/voxel_grid.h)0
-rw-r--r--src/libigl/igl/winding_number.cpp (renamed from src/igl/winding_number.cpp)0
-rw-r--r--src/libigl/igl/winding_number.h (renamed from src/igl/winding_number.h)0
-rw-r--r--src/libigl/igl/writeBF.cpp (renamed from src/igl/writeBF.cpp)0
-rw-r--r--src/libigl/igl/writeBF.h (renamed from src/igl/writeBF.h)0
-rw-r--r--src/libigl/igl/writeDMAT.cpp (renamed from src/igl/writeDMAT.cpp)0
-rw-r--r--src/libigl/igl/writeDMAT.h (renamed from src/igl/writeDMAT.h)0
-rw-r--r--src/libigl/igl/writeMESH.cpp (renamed from src/igl/writeMESH.cpp)0
-rw-r--r--src/libigl/igl/writeMESH.h (renamed from src/igl/writeMESH.h)0
-rw-r--r--src/libigl/igl/writeOBJ.cpp (renamed from src/igl/writeOBJ.cpp)0
-rw-r--r--src/libigl/igl/writeOBJ.h (renamed from src/igl/writeOBJ.h)0
-rw-r--r--src/libigl/igl/writeOFF.cpp (renamed from src/igl/writeOFF.cpp)0
-rw-r--r--src/libigl/igl/writeOFF.h (renamed from src/igl/writeOFF.h)0
-rw-r--r--src/libigl/igl/writePLY.cpp (renamed from src/igl/writePLY.cpp)0
-rw-r--r--src/libigl/igl/writePLY.h (renamed from src/igl/writePLY.h)0
-rw-r--r--src/libigl/igl/writeSTL.cpp (renamed from src/igl/writeSTL.cpp)0
-rw-r--r--src/libigl/igl/writeSTL.h (renamed from src/igl/writeSTL.h)0
-rw-r--r--src/libigl/igl/writeTGF.cpp (renamed from src/igl/writeTGF.cpp)0
-rw-r--r--src/libigl/igl/writeTGF.h (renamed from src/igl/writeTGF.h)0
-rw-r--r--src/libigl/igl/writeWRL.cpp (renamed from src/igl/writeWRL.cpp)0
-rw-r--r--src/libigl/igl/writeWRL.h (renamed from src/igl/writeWRL.h)0
-rw-r--r--src/libigl/igl/write_triangle_mesh.cpp (renamed from src/igl/write_triangle_mesh.cpp)0
-rw-r--r--src/libigl/igl/write_triangle_mesh.h (renamed from src/igl/write_triangle_mesh.h)0
-rw-r--r--src/libigl/igl/xml/ReAntTweakBarXMLSerialization.h (renamed from src/igl/xml/ReAntTweakBarXMLSerialization.h)0
-rw-r--r--src/libigl/igl/xml/XMLSerializable.h (renamed from src/igl/xml/XMLSerializable.h)0
-rw-r--r--src/libigl/igl/xml/serialization_test.skip (renamed from src/igl/xml/serialization_test.skip)0
-rw-r--r--src/libigl/igl/xml/serialize_xml.cpp (renamed from src/igl/xml/serialize_xml.cpp)0
-rw-r--r--src/libigl/igl/xml/serialize_xml.h (renamed from src/igl/xml/serialize_xml.h)0
-rw-r--r--src/libigl/igl/xml/writeDAE.cpp (renamed from src/igl/xml/writeDAE.cpp)0
-rw-r--r--src/libigl/igl/xml/writeDAE.h (renamed from src/igl/xml/writeDAE.h)0
-rw-r--r--src/libigl/igl/xml/write_triangle_mesh.cpp (renamed from src/igl/xml/write_triangle_mesh.cpp)0
-rw-r--r--src/libigl/igl/xml/write_triangle_mesh.h (renamed from src/igl/xml/write_triangle_mesh.h)0
-rw-r--r--src/libslic3r/CMakeLists.txt1
-rw-r--r--src/libslic3r/GCodeTimeEstimator.cpp4
-rw-r--r--src/libslic3r/Geometry.cpp57
-rw-r--r--src/libslic3r/Geometry.hpp5
-rw-r--r--src/libslic3r/MTUtils.hpp207
-rw-r--r--src/libslic3r/Model.cpp52
-rw-r--r--src/libslic3r/ModelArrange.cpp31
-rw-r--r--src/libslic3r/Technologies.hpp2
-rw-r--r--src/slic3r/Config/Version.cpp1
-rw-r--r--src/slic3r/Config/Version.hpp4
-rw-r--r--src/slic3r/GUI/3DBed.cpp90
-rw-r--r--src/slic3r/GUI/3DBed.hpp17
-rw-r--r--src/slic3r/GUI/3DScene.cpp2
-rw-r--r--src/slic3r/GUI/3DScene.hpp1
-rw-r--r--src/slic3r/GUI/AppConfig.cpp3
-rw-r--r--src/slic3r/GUI/Camera.cpp339
-rw-r--r--src/slic3r/GUI/Camera.hpp49
-rw-r--r--src/slic3r/GUI/FirmwareDialog.cpp87
-rw-r--r--src/slic3r/GUI/GLCanvas3D.cpp333
-rw-r--r--src/slic3r/GUI/GLCanvas3D.hpp17
-rw-r--r--src/slic3r/GUI/GLCanvas3DManager.cpp144
-rw-r--r--src/slic3r/GUI/GLCanvas3DManager.hpp46
-rw-r--r--src/slic3r/GUI/GLSelectionRectangle.cpp2
-rw-r--r--src/slic3r/GUI/GLTexture.cpp193
-rw-r--r--src/slic3r/GUI/GLTexture.hpp56
-rw-r--r--src/slic3r/GUI/GLToolbar.cpp23
-rw-r--r--src/slic3r/GUI/GUI_App.cpp6
-rw-r--r--src/slic3r/GUI/GUI_ObjectList.cpp62
-rw-r--r--src/slic3r/GUI/GUI_ObjectManipulation.cpp6
-rw-r--r--src/slic3r/GUI/GUI_Preview.cpp6
-rw-r--r--src/slic3r/GUI/GUI_Preview.hpp1
-rw-r--r--src/slic3r/GUI/Gizmos/GLGizmosManager.cpp15
-rw-r--r--src/slic3r/GUI/ImGuiWrapper.cpp9
-rw-r--r--src/slic3r/GUI/ImGuiWrapper.hpp2
-rw-r--r--src/slic3r/GUI/KBShortcutsDialog.cpp1
-rw-r--r--src/slic3r/GUI/MainFrame.cpp4
-rw-r--r--src/slic3r/GUI/Plater.cpp62
-rw-r--r--src/slic3r/GUI/Plater.hpp5
-rw-r--r--src/slic3r/GUI/ProgressStatusBar.hpp1
-rw-r--r--src/slic3r/GUI/Selection.cpp80
-rw-r--r--src/slic3r/GUI/Selection.hpp3
-rw-r--r--src/slic3r/GUI/wxExtensions.cpp96
-rw-r--r--src/slic3r/GUI/wxExtensions.hpp12
-rw-r--r--src/slic3r/Utils/PresetUpdater.cpp86
-rw-r--r--src/slic3r/Utils/Semver.hpp5
-rw-r--r--src/slic3r/Utils/Serial.hpp3
-rw-r--r--src/stb_dxt/stb_dxt.h1049
1136 files changed, 2638 insertions, 657 deletions
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index 724063466..61faa0571 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -12,6 +12,7 @@ add_subdirectory(poly2tri)
add_subdirectory(qhull)
add_subdirectory(Shiny)
add_subdirectory(semver)
+add_subdirectory(libigl)
# Adding libnest2d project for bin packing...
set(LIBNEST2D_UNITTESTS ON CACHE BOOL "Force generating unittests for libnest2d")
diff --git a/src/libigl/CMakeLists.txt b/src/libigl/CMakeLists.txt
new file mode 100644
index 000000000..0852fad72
--- /dev/null
+++ b/src/libigl/CMakeLists.txt
@@ -0,0 +1,14 @@
+project(libigl)
+cmake_minimum_required(VERSION 3.0)
+
+add_library(libigl INTERFACE)
+
+find_package(libigl QUIET)
+
+if(libigl_FOUND)
+ message(STATUS "IGL found, using system version...")
+ target_link_libraries(libigl INTERFACE igl::core)
+else()
+ message(STATUS "IGL NOT found, using bundled version...")
+ target_include_directories(libigl INTERFACE SYSTEM ${LIBDIR}/libigl)
+endif()
diff --git a/src/igl/AABB.cpp b/src/libigl/igl/AABB.cpp
index 1b88e9faa..1b88e9faa 100644
--- a/src/igl/AABB.cpp
+++ b/src/libigl/igl/AABB.cpp
diff --git a/src/igl/AABB.h b/src/libigl/igl/AABB.h
index 69bc60c2e..69bc60c2e 100644
--- a/src/igl/AABB.h
+++ b/src/libigl/igl/AABB.h
diff --git a/src/igl/ARAPEnergyType.h b/src/libigl/igl/ARAPEnergyType.h
index 68be24f5d..68be24f5d 100644
--- a/src/igl/ARAPEnergyType.h
+++ b/src/libigl/igl/ARAPEnergyType.h
diff --git a/src/igl/AtA_cached.cpp b/src/libigl/igl/AtA_cached.cpp
index af7d0ad86..af7d0ad86 100644
--- a/src/igl/AtA_cached.cpp
+++ b/src/libigl/igl/AtA_cached.cpp
diff --git a/src/igl/AtA_cached.h b/src/libigl/igl/AtA_cached.h
index 776825411..776825411 100644
--- a/src/igl/AtA_cached.h
+++ b/src/libigl/igl/AtA_cached.h
diff --git a/src/igl/C_STR.h b/src/libigl/igl/C_STR.h
index 9844b35a5..9844b35a5 100644
--- a/src/igl/C_STR.h
+++ b/src/libigl/igl/C_STR.h
diff --git a/src/igl/Camera.h b/src/libigl/igl/Camera.h
index 79ebf603e..79ebf603e 100644
--- a/src/igl/Camera.h
+++ b/src/libigl/igl/Camera.h
diff --git a/src/igl/EPS.cpp b/src/libigl/igl/EPS.cpp
index fc592cc2a..fc592cc2a 100644
--- a/src/igl/EPS.cpp
+++ b/src/libigl/igl/EPS.cpp
diff --git a/src/igl/EPS.h b/src/libigl/igl/EPS.h
index d65007a64..d65007a64 100644
--- a/src/igl/EPS.h
+++ b/src/libigl/igl/EPS.h
diff --git a/src/igl/HalfEdgeIterator.cpp b/src/libigl/igl/HalfEdgeIterator.cpp
index 7c3b9a886..7c3b9a886 100644
--- a/src/igl/HalfEdgeIterator.cpp
+++ b/src/libigl/igl/HalfEdgeIterator.cpp
diff --git a/src/igl/HalfEdgeIterator.h b/src/libigl/igl/HalfEdgeIterator.h
index 3c429e1d1..3c429e1d1 100644
--- a/src/igl/HalfEdgeIterator.h
+++ b/src/libigl/igl/HalfEdgeIterator.h
diff --git a/src/igl/Hit.h b/src/libigl/igl/Hit.h
index 8bffcc843..8bffcc843 100644
--- a/src/igl/Hit.h
+++ b/src/libigl/igl/Hit.h
diff --git a/src/igl/IO b/src/libigl/igl/IO
index f054d8c99..f054d8c99 100644
--- a/src/igl/IO
+++ b/src/libigl/igl/IO
diff --git a/src/igl/IndexComparison.h b/src/libigl/igl/IndexComparison.h
index 44515df51..44515df51 100644
--- a/src/igl/IndexComparison.h
+++ b/src/libigl/igl/IndexComparison.h
diff --git a/src/igl/LinSpaced.h b/src/libigl/igl/LinSpaced.h
index d40db33d3..d40db33d3 100644
--- a/src/igl/LinSpaced.h
+++ b/src/libigl/igl/LinSpaced.h
diff --git a/src/igl/MeshBooleanType.h b/src/libigl/igl/MeshBooleanType.h
index 2eb293624..2eb293624 100644
--- a/src/igl/MeshBooleanType.h
+++ b/src/libigl/igl/MeshBooleanType.h
diff --git a/src/igl/NormalType.h b/src/libigl/igl/NormalType.h
index b74b57b6a..b74b57b6a 100644
--- a/src/igl/NormalType.h
+++ b/src/libigl/igl/NormalType.h
diff --git a/src/igl/ONE.h b/src/libigl/igl/ONE.h
index 93c509d4e..93c509d4e 100644
--- a/src/igl/ONE.h
+++ b/src/libigl/igl/ONE.h
diff --git a/src/igl/PI.h b/src/libigl/igl/PI.h
index f1ef4359d..f1ef4359d 100644
--- a/src/igl/PI.h
+++ b/src/libigl/igl/PI.h
diff --git a/src/igl/REDRUM.h b/src/libigl/igl/REDRUM.h
index 79ab72ffd..79ab72ffd 100644
--- a/src/igl/REDRUM.h
+++ b/src/libigl/igl/REDRUM.h
diff --git a/src/igl/STR.h b/src/libigl/igl/STR.h
index 0e937167b..0e937167b 100644
--- a/src/igl/STR.h
+++ b/src/libigl/igl/STR.h
diff --git a/src/igl/Singular_Value_Decomposition_Givens_QR_Factorization_Kernel.hpp b/src/libigl/igl/Singular_Value_Decomposition_Givens_QR_Factorization_Kernel.hpp
index 2207285aa..2207285aa 100644
--- a/src/igl/Singular_Value_Decomposition_Givens_QR_Factorization_Kernel.hpp
+++ b/src/libigl/igl/Singular_Value_Decomposition_Givens_QR_Factorization_Kernel.hpp
diff --git a/src/igl/Singular_Value_Decomposition_Jacobi_Conjugation_Kernel.hpp b/src/libigl/igl/Singular_Value_Decomposition_Jacobi_Conjugation_Kernel.hpp
index 70b437131..70b437131 100644
--- a/src/igl/Singular_Value_Decomposition_Jacobi_Conjugation_Kernel.hpp
+++ b/src/libigl/igl/Singular_Value_Decomposition_Jacobi_Conjugation_Kernel.hpp
diff --git a/src/igl/Singular_Value_Decomposition_Kernel_Declarations.hpp b/src/libigl/igl/Singular_Value_Decomposition_Kernel_Declarations.hpp
index 0c3b3ff87..0c3b3ff87 100644
--- a/src/igl/Singular_Value_Decomposition_Kernel_Declarations.hpp
+++ b/src/libigl/igl/Singular_Value_Decomposition_Kernel_Declarations.hpp
diff --git a/src/igl/Singular_Value_Decomposition_Main_Kernel_Body.hpp b/src/libigl/igl/Singular_Value_Decomposition_Main_Kernel_Body.hpp
index e8898a8aa..e8898a8aa 100644
--- a/src/igl/Singular_Value_Decomposition_Main_Kernel_Body.hpp
+++ b/src/libigl/igl/Singular_Value_Decomposition_Main_Kernel_Body.hpp
diff --git a/src/igl/Singular_Value_Decomposition_Preamble.hpp b/src/libigl/igl/Singular_Value_Decomposition_Preamble.hpp
index d55fa86cf..d55fa86cf 100644
--- a/src/igl/Singular_Value_Decomposition_Preamble.hpp
+++ b/src/libigl/igl/Singular_Value_Decomposition_Preamble.hpp
diff --git a/src/igl/SolverStatus.h b/src/libigl/igl/SolverStatus.h
index d9151f5c0..d9151f5c0 100644
--- a/src/igl/SolverStatus.h
+++ b/src/libigl/igl/SolverStatus.h
diff --git a/src/igl/SortableRow.h b/src/libigl/igl/SortableRow.h
index 5f172987b..5f172987b 100644
--- a/src/igl/SortableRow.h
+++ b/src/libigl/igl/SortableRow.h
diff --git a/src/igl/Timer.h b/src/libigl/igl/Timer.h
index ac9e55e6b..ac9e55e6b 100644
--- a/src/igl/Timer.h
+++ b/src/libigl/igl/Timer.h
diff --git a/src/igl/Viewport.h b/src/libigl/igl/Viewport.h
index 717d3f97b..717d3f97b 100644
--- a/src/igl/Viewport.h
+++ b/src/libigl/igl/Viewport.h
diff --git a/src/igl/WindingNumberAABB.h b/src/libigl/igl/WindingNumberAABB.h
index 478026989..478026989 100644
--- a/src/igl/WindingNumberAABB.h
+++ b/src/libigl/igl/WindingNumberAABB.h
diff --git a/src/igl/WindingNumberMethod.h b/src/libigl/igl/WindingNumberMethod.h
index 3bb9062b1..3bb9062b1 100644
--- a/src/igl/WindingNumberMethod.h
+++ b/src/libigl/igl/WindingNumberMethod.h
diff --git a/src/igl/WindingNumberTree.h b/src/libigl/igl/WindingNumberTree.h
index 317ad9442..317ad9442 100644
--- a/src/igl/WindingNumberTree.h
+++ b/src/libigl/igl/WindingNumberTree.h
diff --git a/src/igl/ZERO.h b/src/libigl/igl/ZERO.h
index bd2829905..bd2829905 100644
--- a/src/igl/ZERO.h
+++ b/src/libigl/igl/ZERO.h
diff --git a/src/igl/active_set.cpp b/src/libigl/igl/active_set.cpp
index fd5dfba88..fd5dfba88 100755
--- a/src/igl/active_set.cpp
+++ b/src/libigl/igl/active_set.cpp
diff --git a/src/igl/active_set.h b/src/libigl/igl/active_set.h
index b82d0e52b..b82d0e52b 100644
--- a/src/igl/active_set.h
+++ b/src/libigl/igl/active_set.h
diff --git a/src/igl/adjacency_list.cpp b/src/libigl/igl/adjacency_list.cpp
index 1fb61ebf1..1fb61ebf1 100644
--- a/src/igl/adjacency_list.cpp
+++ b/src/libigl/igl/adjacency_list.cpp
diff --git a/src/igl/adjacency_list.h b/src/libigl/igl/adjacency_list.h
index 7438cde42..7438cde42 100644
--- a/src/igl/adjacency_list.h
+++ b/src/libigl/igl/adjacency_list.h
diff --git a/src/igl/adjacency_matrix.cpp b/src/libigl/igl/adjacency_matrix.cpp
index f6db955c2..f6db955c2 100644
--- a/src/igl/adjacency_matrix.cpp
+++ b/src/libigl/igl/adjacency_matrix.cpp
diff --git a/src/igl/adjacency_matrix.h b/src/libigl/igl/adjacency_matrix.h
index b117bccf7..b117bccf7 100644
--- a/src/igl/adjacency_matrix.h
+++ b/src/libigl/igl/adjacency_matrix.h
diff --git a/src/igl/all.cpp b/src/libigl/igl/all.cpp
index 35245eacb..35245eacb 100644
--- a/src/igl/all.cpp
+++ b/src/libigl/igl/all.cpp
diff --git a/src/igl/all.h b/src/libigl/igl/all.h
index 6e84fdd52..6e84fdd52 100644
--- a/src/igl/all.h
+++ b/src/libigl/igl/all.h
diff --git a/src/igl/all_edges.cpp b/src/libigl/igl/all_edges.cpp
index eabad3038..eabad3038 100644
--- a/src/igl/all_edges.cpp
+++ b/src/libigl/igl/all_edges.cpp
diff --git a/src/igl/all_edges.h b/src/libigl/igl/all_edges.h
index d5fe13a9a..d5fe13a9a 100644
--- a/src/igl/all_edges.h
+++ b/src/libigl/igl/all_edges.h
diff --git a/src/igl/all_pairs_distances.cpp b/src/libigl/igl/all_pairs_distances.cpp
index 608cf9b85..608cf9b85 100644
--- a/src/igl/all_pairs_distances.cpp
+++ b/src/libigl/igl/all_pairs_distances.cpp
diff --git a/src/igl/all_pairs_distances.h b/src/libigl/igl/all_pairs_distances.h
index 9acc1b730..9acc1b730 100644
--- a/src/igl/all_pairs_distances.h
+++ b/src/libigl/igl/all_pairs_distances.h
diff --git a/src/igl/ambient_occlusion.cpp b/src/libigl/igl/ambient_occlusion.cpp
index 343f8ae8a..343f8ae8a 100644
--- a/src/igl/ambient_occlusion.cpp
+++ b/src/libigl/igl/ambient_occlusion.cpp
diff --git a/src/igl/ambient_occlusion.h b/src/libigl/igl/ambient_occlusion.h
index 1c173121e..1c173121e 100644
--- a/src/igl/ambient_occlusion.h
+++ b/src/libigl/igl/ambient_occlusion.h
diff --git a/src/igl/angular_distance.cpp b/src/libigl/igl/angular_distance.cpp
index 803c290c9..803c290c9 100644
--- a/src/igl/angular_distance.cpp
+++ b/src/libigl/igl/angular_distance.cpp
diff --git a/src/igl/angular_distance.h b/src/libigl/igl/angular_distance.h
index 35b100ace..35b100ace 100644
--- a/src/igl/angular_distance.h
+++ b/src/libigl/igl/angular_distance.h
diff --git a/src/igl/anttweakbar/ReAntTweakBar.cpp b/src/libigl/igl/anttweakbar/ReAntTweakBar.cpp
index 3664c6bce..3664c6bce 100644
--- a/src/igl/anttweakbar/ReAntTweakBar.cpp
+++ b/src/libigl/igl/anttweakbar/ReAntTweakBar.cpp
diff --git a/src/igl/anttweakbar/ReAntTweakBar.h b/src/libigl/igl/anttweakbar/ReAntTweakBar.h
index d1dede927..d1dede927 100644
--- a/src/igl/anttweakbar/ReAntTweakBar.h
+++ b/src/libigl/igl/anttweakbar/ReAntTweakBar.h
diff --git a/src/igl/anttweakbar/cocoa_key_to_anttweakbar_key.cpp b/src/libigl/igl/anttweakbar/cocoa_key_to_anttweakbar_key.cpp
index bcd6e2be5..bcd6e2be5 100644
--- a/src/igl/anttweakbar/cocoa_key_to_anttweakbar_key.cpp
+++ b/src/libigl/igl/anttweakbar/cocoa_key_to_anttweakbar_key.cpp
diff --git a/src/igl/anttweakbar/cocoa_key_to_anttweakbar_key.h b/src/libigl/igl/anttweakbar/cocoa_key_to_anttweakbar_key.h
index fdf3d3bea..fdf3d3bea 100644
--- a/src/igl/anttweakbar/cocoa_key_to_anttweakbar_key.h
+++ b/src/libigl/igl/anttweakbar/cocoa_key_to_anttweakbar_key.h
diff --git a/src/igl/any.cpp b/src/libigl/igl/any.cpp
index 0488c8ffb..0488c8ffb 100644
--- a/src/igl/any.cpp
+++ b/src/libigl/igl/any.cpp
diff --git a/src/igl/any.h b/src/libigl/igl/any.h
index 08a80e4cb..08a80e4cb 100644
--- a/src/igl/any.h
+++ b/src/libigl/igl/any.h
diff --git a/src/igl/any_of.cpp b/src/libigl/igl/any_of.cpp
index 9defd0339..9defd0339 100644
--- a/src/igl/any_of.cpp
+++ b/src/libigl/igl/any_of.cpp
diff --git a/src/igl/any_of.h b/src/libigl/igl/any_of.h
index 95ec1d373..95ec1d373 100644
--- a/src/igl/any_of.h
+++ b/src/libigl/igl/any_of.h
diff --git a/src/igl/arap.cpp b/src/libigl/igl/arap.cpp
index dc5af4cf6..dc5af4cf6 100644
--- a/src/igl/arap.cpp
+++ b/src/libigl/igl/arap.cpp
diff --git a/src/igl/arap.h b/src/libigl/igl/arap.h
index b2210e64f..b2210e64f 100644
--- a/src/igl/arap.h
+++ b/src/libigl/igl/arap.h
diff --git a/src/igl/arap_dof.cpp b/src/libigl/igl/arap_dof.cpp
index 033d1deb3..033d1deb3 100644
--- a/src/igl/arap_dof.cpp
+++ b/src/libigl/igl/arap_dof.cpp
diff --git a/src/igl/arap_dof.h b/src/libigl/igl/arap_dof.h
index f3647a3a1..f3647a3a1 100644
--- a/src/igl/arap_dof.h
+++ b/src/libigl/igl/arap_dof.h
diff --git a/src/igl/arap_linear_block.cpp b/src/libigl/igl/arap_linear_block.cpp
index 14886b2bc..14886b2bc 100644
--- a/src/igl/arap_linear_block.cpp
+++ b/src/libigl/igl/arap_linear_block.cpp
diff --git a/src/igl/arap_linear_block.h b/src/libigl/igl/arap_linear_block.h
index 8dfb744f6..8dfb744f6 100644
--- a/src/igl/arap_linear_block.h
+++ b/src/libigl/igl/arap_linear_block.h
diff --git a/src/igl/arap_rhs.cpp b/src/libigl/igl/arap_rhs.cpp
index b46462168..b46462168 100644
--- a/src/igl/arap_rhs.cpp
+++ b/src/libigl/igl/arap_rhs.cpp
diff --git a/src/igl/arap_rhs.h b/src/libigl/igl/arap_rhs.h
index 5a1c370c1..5a1c370c1 100644
--- a/src/igl/arap_rhs.h
+++ b/src/libigl/igl/arap_rhs.h
diff --git a/src/igl/average_onto_faces.cpp b/src/libigl/igl/average_onto_faces.cpp
index b5cec91ad..b5cec91ad 100644
--- a/src/igl/average_onto_faces.cpp
+++ b/src/libigl/igl/average_onto_faces.cpp
diff --git a/src/igl/average_onto_faces.h b/src/libigl/igl/average_onto_faces.h
index 1afa919e9..1afa919e9 100644
--- a/src/igl/average_onto_faces.h
+++ b/src/libigl/igl/average_onto_faces.h
diff --git a/src/igl/average_onto_vertices.cpp b/src/libigl/igl/average_onto_vertices.cpp
index a30854edb..a30854edb 100644
--- a/src/igl/average_onto_vertices.cpp
+++ b/src/libigl/igl/average_onto_vertices.cpp
diff --git a/src/igl/average_onto_vertices.h b/src/libigl/igl/average_onto_vertices.h
index e7fca6238..e7fca6238 100644
--- a/src/igl/average_onto_vertices.h
+++ b/src/libigl/igl/average_onto_vertices.h
diff --git a/src/igl/avg_edge_length.cpp b/src/libigl/igl/avg_edge_length.cpp
index b813d484a..b813d484a 100644
--- a/src/igl/avg_edge_length.cpp
+++ b/src/libigl/igl/avg_edge_length.cpp
diff --git a/src/igl/avg_edge_length.h b/src/libigl/igl/avg_edge_length.h
index 613f8f5da..613f8f5da 100644
--- a/src/igl/avg_edge_length.h
+++ b/src/libigl/igl/avg_edge_length.h
diff --git a/src/igl/axis_angle_to_quat.cpp b/src/libigl/igl/axis_angle_to_quat.cpp
index 009d0522c..009d0522c 100644
--- a/src/igl/axis_angle_to_quat.cpp
+++ b/src/libigl/igl/axis_angle_to_quat.cpp
diff --git a/src/igl/axis_angle_to_quat.h b/src/libigl/igl/axis_angle_to_quat.h
index 6533b1bec..6533b1bec 100644
--- a/src/igl/axis_angle_to_quat.h
+++ b/src/libigl/igl/axis_angle_to_quat.h
diff --git a/src/igl/barycenter.cpp b/src/libigl/igl/barycenter.cpp
index 065f82aab..065f82aab 100644
--- a/src/igl/barycenter.cpp
+++ b/src/libigl/igl/barycenter.cpp
diff --git a/src/igl/barycenter.h b/src/libigl/igl/barycenter.h
index ef78e94a6..ef78e94a6 100644
--- a/src/igl/barycenter.h
+++ b/src/libigl/igl/barycenter.h
diff --git a/src/igl/barycentric_coordinates.cpp b/src/libigl/igl/barycentric_coordinates.cpp
index 998a737bf..998a737bf 100644
--- a/src/igl/barycentric_coordinates.cpp
+++ b/src/libigl/igl/barycentric_coordinates.cpp
diff --git a/src/igl/barycentric_coordinates.h b/src/libigl/igl/barycentric_coordinates.h
index ec08669f2..ec08669f2 100644
--- a/src/igl/barycentric_coordinates.h
+++ b/src/libigl/igl/barycentric_coordinates.h
diff --git a/src/igl/barycentric_to_global.cpp b/src/libigl/igl/barycentric_to_global.cpp
index e2656ad70..e2656ad70 100755
--- a/src/igl/barycentric_to_global.cpp
+++ b/src/libigl/igl/barycentric_to_global.cpp
diff --git a/src/igl/barycentric_to_global.h b/src/libigl/igl/barycentric_to_global.h
index 466187173..466187173 100755
--- a/src/igl/barycentric_to_global.h
+++ b/src/libigl/igl/barycentric_to_global.h
diff --git a/src/igl/basename.cpp b/src/libigl/igl/basename.cpp
index ae4fb118e..ae4fb118e 100644
--- a/src/igl/basename.cpp
+++ b/src/libigl/igl/basename.cpp
diff --git a/src/igl/basename.h b/src/libigl/igl/basename.h
index fb333b5c4..fb333b5c4 100644
--- a/src/igl/basename.h
+++ b/src/libigl/igl/basename.h
diff --git a/src/igl/bbw.cpp b/src/libigl/igl/bbw.cpp
index c7df7dd3b..c7df7dd3b 100644
--- a/src/igl/bbw.cpp
+++ b/src/libigl/igl/bbw.cpp
diff --git a/src/igl/bbw.h b/src/libigl/igl/bbw.h
index bec20bb98..bec20bb98 100644
--- a/src/igl/bbw.h
+++ b/src/libigl/igl/bbw.h
diff --git a/src/igl/bfs.cpp b/src/libigl/igl/bfs.cpp
index 8ff51c050..8ff51c050 100644
--- a/src/igl/bfs.cpp
+++ b/src/libigl/igl/bfs.cpp
diff --git a/src/igl/bfs.h b/src/libigl/igl/bfs.h
index 6f49e93eb..6f49e93eb 100644
--- a/src/igl/bfs.h
+++ b/src/libigl/igl/bfs.h
diff --git a/src/igl/bfs_orient.cpp b/src/libigl/igl/bfs_orient.cpp
index 23dd93a49..23dd93a49 100644
--- a/src/igl/bfs_orient.cpp
+++ b/src/libigl/igl/bfs_orient.cpp
diff --git a/src/igl/bfs_orient.h b/src/libigl/igl/bfs_orient.h
index b37f397d8..b37f397d8 100644
--- a/src/igl/bfs_orient.h
+++ b/src/libigl/igl/bfs_orient.h
diff --git a/src/igl/biharmonic_coordinates.cpp b/src/libigl/igl/biharmonic_coordinates.cpp
index 686ecd5e4..686ecd5e4 100644
--- a/src/igl/biharmonic_coordinates.cpp
+++ b/src/libigl/igl/biharmonic_coordinates.cpp
diff --git a/src/igl/biharmonic_coordinates.h b/src/libigl/igl/biharmonic_coordinates.h
index 26f67329a..26f67329a 100644
--- a/src/igl/biharmonic_coordinates.h
+++ b/src/libigl/igl/biharmonic_coordinates.h
diff --git a/src/igl/bijective_composite_harmonic_mapping.cpp b/src/libigl/igl/bijective_composite_harmonic_mapping.cpp
index 517109c04..517109c04 100644
--- a/src/igl/bijective_composite_harmonic_mapping.cpp
+++ b/src/libigl/igl/bijective_composite_harmonic_mapping.cpp
diff --git a/src/igl/bijective_composite_harmonic_mapping.h b/src/libigl/igl/bijective_composite_harmonic_mapping.h
index f055e5293..f055e5293 100644
--- a/src/igl/bijective_composite_harmonic_mapping.h
+++ b/src/libigl/igl/bijective_composite_harmonic_mapping.h
diff --git a/src/igl/bone_parents.cpp b/src/libigl/igl/bone_parents.cpp
index d5cd6ddfa..d5cd6ddfa 100644
--- a/src/igl/bone_parents.cpp
+++ b/src/libigl/igl/bone_parents.cpp
diff --git a/src/igl/bone_parents.h b/src/libigl/igl/bone_parents.h
index e0091cdfc..e0091cdfc 100644
--- a/src/igl/bone_parents.h
+++ b/src/libigl/igl/bone_parents.h
diff --git a/src/igl/boundary_conditions.cpp b/src/libigl/igl/boundary_conditions.cpp
index f7146cd70..f7146cd70 100644
--- a/src/igl/boundary_conditions.cpp
+++ b/src/libigl/igl/boundary_conditions.cpp
diff --git a/src/igl/boundary_conditions.h b/src/libigl/igl/boundary_conditions.h
index 643dbe7c1..643dbe7c1 100644
--- a/src/igl/boundary_conditions.h
+++ b/src/libigl/igl/boundary_conditions.h
diff --git a/src/igl/boundary_facets.cpp b/src/libigl/igl/boundary_facets.cpp
index 67e74db4f..67e74db4f 100644
--- a/src/igl/boundary_facets.cpp
+++ b/src/libigl/igl/boundary_facets.cpp
diff --git a/src/igl/boundary_facets.h b/src/libigl/igl/boundary_facets.h
index 74ac032a1..74ac032a1 100644
--- a/src/igl/boundary_facets.h
+++ b/src/libigl/igl/boundary_facets.h
diff --git a/src/igl/boundary_loop.cpp b/src/libigl/igl/boundary_loop.cpp
index 9a3ec625e..9a3ec625e 100755
--- a/src/igl/boundary_loop.cpp
+++ b/src/libigl/igl/boundary_loop.cpp
diff --git a/src/igl/boundary_loop.h b/src/libigl/igl/boundary_loop.h
index ebb5072a5..ebb5072a5 100755
--- a/src/igl/boundary_loop.h
+++ b/src/libigl/igl/boundary_loop.h
diff --git a/src/igl/bounding_box.cpp b/src/libigl/igl/bounding_box.cpp
index e740b058f..e740b058f 100644
--- a/src/igl/bounding_box.cpp
+++ b/src/libigl/igl/bounding_box.cpp
diff --git a/src/igl/bounding_box.h b/src/libigl/igl/bounding_box.h
index 7e053d2cc..7e053d2cc 100644
--- a/src/igl/bounding_box.h
+++ b/src/libigl/igl/bounding_box.h
diff --git a/src/igl/bounding_box_diagonal.cpp b/src/libigl/igl/bounding_box_diagonal.cpp
index 1023abb50..1023abb50 100644
--- a/src/igl/bounding_box_diagonal.cpp
+++ b/src/libigl/igl/bounding_box_diagonal.cpp
diff --git a/src/igl/bounding_box_diagonal.h b/src/libigl/igl/bounding_box_diagonal.h
index d89025bd5..d89025bd5 100644
--- a/src/igl/bounding_box_diagonal.h
+++ b/src/libigl/igl/bounding_box_diagonal.h
diff --git a/src/igl/canonical_quaternions.cpp b/src/libigl/igl/canonical_quaternions.cpp
index 55d68da86..55d68da86 100644
--- a/src/igl/canonical_quaternions.cpp
+++ b/src/libigl/igl/canonical_quaternions.cpp
diff --git a/src/igl/canonical_quaternions.h b/src/libigl/igl/canonical_quaternions.h
index 86d90112d..86d90112d 100644
--- a/src/igl/canonical_quaternions.h
+++ b/src/libigl/igl/canonical_quaternions.h
diff --git a/src/igl/cat.cpp b/src/libigl/igl/cat.cpp
index f297fc135..f297fc135 100644
--- a/src/igl/cat.cpp
+++ b/src/libigl/igl/cat.cpp
diff --git a/src/igl/cat.h b/src/libigl/igl/cat.h
index 615bda130..615bda130 100644
--- a/src/igl/cat.h
+++ b/src/libigl/igl/cat.h
diff --git a/src/igl/ceil.cpp b/src/libigl/igl/ceil.cpp
index 278269ab2..278269ab2 100644
--- a/src/igl/ceil.cpp
+++ b/src/libigl/igl/ceil.cpp
diff --git a/src/igl/ceil.h b/src/libigl/igl/ceil.h
index b6acee904..b6acee904 100644
--- a/src/igl/ceil.h
+++ b/src/libigl/igl/ceil.h
diff --git a/src/igl/centroid.cpp b/src/libigl/igl/centroid.cpp
index a9ed25df2..a9ed25df2 100644
--- a/src/igl/centroid.cpp
+++ b/src/libigl/igl/centroid.cpp
diff --git a/src/igl/centroid.h b/src/libigl/igl/centroid.h
index 31fa7ae6b..31fa7ae6b 100644
--- a/src/igl/centroid.h
+++ b/src/libigl/igl/centroid.h
diff --git a/src/igl/circulation.cpp b/src/libigl/igl/circulation.cpp
index 6f711b946..6f711b946 100644
--- a/src/igl/circulation.cpp
+++ b/src/libigl/igl/circulation.cpp
diff --git a/src/igl/circulation.h b/src/libigl/igl/circulation.h
index d8d14c7ed..d8d14c7ed 100644
--- a/src/igl/circulation.h
+++ b/src/libigl/igl/circulation.h
diff --git a/src/igl/circumradius.cpp b/src/libigl/igl/circumradius.cpp
index 34424eae2..34424eae2 100644
--- a/src/igl/circumradius.cpp
+++ b/src/libigl/igl/circumradius.cpp
diff --git a/src/igl/circumradius.h b/src/libigl/igl/circumradius.h
index 12592ee3f..12592ee3f 100644
--- a/src/igl/circumradius.h
+++ b/src/libigl/igl/circumradius.h
diff --git a/src/igl/collapse_edge.cpp b/src/libigl/igl/collapse_edge.cpp
index 9f00b4323..9f00b4323 100644
--- a/src/igl/collapse_edge.cpp
+++ b/src/libigl/igl/collapse_edge.cpp
diff --git a/src/igl/collapse_edge.h b/src/libigl/igl/collapse_edge.h
index 90e562556..90e562556 100644
--- a/src/igl/collapse_edge.h
+++ b/src/libigl/igl/collapse_edge.h
diff --git a/src/igl/collapse_small_triangles.cpp b/src/libigl/igl/collapse_small_triangles.cpp
index 5177c584f..5177c584f 100644
--- a/src/igl/collapse_small_triangles.cpp
+++ b/src/libigl/igl/collapse_small_triangles.cpp
diff --git a/src/igl/collapse_small_triangles.h b/src/libigl/igl/collapse_small_triangles.h
index dacf86953..dacf86953 100644
--- a/src/igl/collapse_small_triangles.h
+++ b/src/libigl/igl/collapse_small_triangles.h
diff --git a/src/igl/colon.cpp b/src/libigl/igl/colon.cpp
index a10c2982e..a10c2982e 100644
--- a/src/igl/colon.cpp
+++ b/src/libigl/igl/colon.cpp
diff --git a/src/igl/colon.h b/src/libigl/igl/colon.h
index 1f2b9bf6f..1f2b9bf6f 100644
--- a/src/igl/colon.h
+++ b/src/libigl/igl/colon.h
diff --git a/src/igl/colormap.cpp b/src/libigl/igl/colormap.cpp
index 560cbe6c0..560cbe6c0 100644
--- a/src/igl/colormap.cpp
+++ b/src/libigl/igl/colormap.cpp
diff --git a/src/igl/colormap.h b/src/libigl/igl/colormap.h
index 1d93d73b1..1d93d73b1 100644
--- a/src/igl/colormap.h
+++ b/src/libigl/igl/colormap.h
diff --git a/src/igl/column_to_quats.cpp b/src/libigl/igl/column_to_quats.cpp
index f87adab06..f87adab06 100644
--- a/src/igl/column_to_quats.cpp
+++ b/src/libigl/igl/column_to_quats.cpp
diff --git a/src/igl/column_to_quats.h b/src/libigl/igl/column_to_quats.h
index 0be12c250..0be12c250 100644
--- a/src/igl/column_to_quats.h
+++ b/src/libigl/igl/column_to_quats.h
diff --git a/src/igl/columnize.cpp b/src/libigl/igl/columnize.cpp
index 29e91c669..29e91c669 100644
--- a/src/igl/columnize.cpp
+++ b/src/libigl/igl/columnize.cpp
diff --git a/src/igl/columnize.h b/src/libigl/igl/columnize.h
index 1bb453af1..1bb453af1 100644
--- a/src/igl/columnize.h
+++ b/src/libigl/igl/columnize.h
diff --git a/src/igl/comb_cross_field.cpp b/src/libigl/igl/comb_cross_field.cpp
index c277b056d..c277b056d 100644
--- a/src/igl/comb_cross_field.cpp
+++ b/src/libigl/igl/comb_cross_field.cpp
diff --git a/src/igl/comb_cross_field.h b/src/libigl/igl/comb_cross_field.h
index fa3b57648..fa3b57648 100644
--- a/src/igl/comb_cross_field.h
+++ b/src/libigl/igl/comb_cross_field.h
diff --git a/src/igl/comb_frame_field.cpp b/src/libigl/igl/comb_frame_field.cpp
index f8afe56e9..f8afe56e9 100644
--- a/src/igl/comb_frame_field.cpp
+++ b/src/libigl/igl/comb_frame_field.cpp
diff --git a/src/igl/comb_frame_field.h b/src/libigl/igl/comb_frame_field.h
index 4691dc19d..4691dc19d 100644
--- a/src/igl/comb_frame_field.h
+++ b/src/libigl/igl/comb_frame_field.h
diff --git a/src/igl/comb_line_field.cpp b/src/libigl/igl/comb_line_field.cpp
index 66899319a..66899319a 100644
--- a/src/igl/comb_line_field.cpp
+++ b/src/libigl/igl/comb_line_field.cpp
diff --git a/src/igl/comb_line_field.h b/src/libigl/igl/comb_line_field.h
index e2f22b37f..e2f22b37f 100644
--- a/src/igl/comb_line_field.h
+++ b/src/libigl/igl/comb_line_field.h
diff --git a/src/igl/combine.cpp b/src/libigl/igl/combine.cpp
index 7e0af151a..7e0af151a 100644
--- a/src/igl/combine.cpp
+++ b/src/libigl/igl/combine.cpp
diff --git a/src/igl/combine.h b/src/libigl/igl/combine.h
index ff5e1ae34..ff5e1ae34 100644
--- a/src/igl/combine.h
+++ b/src/libigl/igl/combine.h
diff --git a/src/igl/components.cpp b/src/libigl/igl/components.cpp
index 253186889..253186889 100644
--- a/src/igl/components.cpp
+++ b/src/libigl/igl/components.cpp
diff --git a/src/igl/components.h b/src/libigl/igl/components.h
index d43a64c89..d43a64c89 100644
--- a/src/igl/components.h
+++ b/src/libigl/igl/components.h
diff --git a/src/igl/compute_frame_field_bisectors.cpp b/src/libigl/igl/compute_frame_field_bisectors.cpp
index e3c47c608..e3c47c608 100644
--- a/src/igl/compute_frame_field_bisectors.cpp
+++ b/src/libigl/igl/compute_frame_field_bisectors.cpp
diff --git a/src/igl/compute_frame_field_bisectors.h b/src/libigl/igl/compute_frame_field_bisectors.h
index 4c853febf..4c853febf 100644
--- a/src/igl/compute_frame_field_bisectors.h
+++ b/src/libigl/igl/compute_frame_field_bisectors.h
diff --git a/src/igl/connect_boundary_to_infinity.cpp b/src/libigl/igl/connect_boundary_to_infinity.cpp
index 627b0b9b6..627b0b9b6 100644
--- a/src/igl/connect_boundary_to_infinity.cpp
+++ b/src/libigl/igl/connect_boundary_to_infinity.cpp
diff --git a/src/igl/connect_boundary_to_infinity.h b/src/libigl/igl/connect_boundary_to_infinity.h
index 2fa2783d6..2fa2783d6 100644
--- a/src/igl/connect_boundary_to_infinity.h
+++ b/src/libigl/igl/connect_boundary_to_infinity.h
diff --git a/src/igl/copyleft/README.md b/src/libigl/igl/copyleft/README.md
index 78454affc..78454affc 100644
--- a/src/igl/copyleft/README.md
+++ b/src/libigl/igl/copyleft/README.md
diff --git a/src/igl/copyleft/cgal/BinaryWindingNumberOperations.h b/src/libigl/igl/copyleft/cgal/BinaryWindingNumberOperations.h
index 9bae0b7bb..9bae0b7bb 100644
--- a/src/igl/copyleft/cgal/BinaryWindingNumberOperations.h
+++ b/src/libigl/igl/copyleft/cgal/BinaryWindingNumberOperations.h
diff --git a/src/igl/copyleft/cgal/CGAL_includes.hpp b/src/libigl/igl/copyleft/cgal/CGAL_includes.hpp
index 38d2fc749..38d2fc749 100644
--- a/src/igl/copyleft/cgal/CGAL_includes.hpp
+++ b/src/libigl/igl/copyleft/cgal/CGAL_includes.hpp
diff --git a/src/igl/copyleft/cgal/CSGTree.h b/src/libigl/igl/copyleft/cgal/CSGTree.h
index 599572d3f..599572d3f 100644
--- a/src/igl/copyleft/cgal/CSGTree.h
+++ b/src/libigl/igl/copyleft/cgal/CSGTree.h
diff --git a/src/igl/copyleft/cgal/RemeshSelfIntersectionsParam.h b/src/libigl/igl/copyleft/cgal/RemeshSelfIntersectionsParam.h
index b2621224c..b2621224c 100644
--- a/src/igl/copyleft/cgal/RemeshSelfIntersectionsParam.h
+++ b/src/libigl/igl/copyleft/cgal/RemeshSelfIntersectionsParam.h
diff --git a/src/igl/copyleft/cgal/SelfIntersectMesh.h b/src/libigl/igl/copyleft/cgal/SelfIntersectMesh.h
index 5a70fc39e..5a70fc39e 100644
--- a/src/igl/copyleft/cgal/SelfIntersectMesh.h
+++ b/src/libigl/igl/copyleft/cgal/SelfIntersectMesh.h
diff --git a/src/igl/copyleft/cgal/assign.cpp b/src/libigl/igl/copyleft/cgal/assign.cpp
index 0631b58a7..0631b58a7 100644
--- a/src/igl/copyleft/cgal/assign.cpp
+++ b/src/libigl/igl/copyleft/cgal/assign.cpp
diff --git a/src/igl/copyleft/cgal/assign.h b/src/libigl/igl/copyleft/cgal/assign.h
index db9081f23..db9081f23 100644
--- a/src/igl/copyleft/cgal/assign.h
+++ b/src/libigl/igl/copyleft/cgal/assign.h
diff --git a/src/igl/copyleft/cgal/assign_scalar.cpp b/src/libigl/igl/copyleft/cgal/assign_scalar.cpp
index c38ee03a1..c38ee03a1 100644
--- a/src/igl/copyleft/cgal/assign_scalar.cpp
+++ b/src/libigl/igl/copyleft/cgal/assign_scalar.cpp
diff --git a/src/igl/copyleft/cgal/assign_scalar.h b/src/libigl/igl/copyleft/cgal/assign_scalar.h
index feec928d5..feec928d5 100644
--- a/src/igl/copyleft/cgal/assign_scalar.h
+++ b/src/libigl/igl/copyleft/cgal/assign_scalar.h
diff --git a/src/igl/copyleft/cgal/barycenter.cpp b/src/libigl/igl/copyleft/cgal/barycenter.cpp
index b3ed8aeaf..b3ed8aeaf 100644
--- a/src/igl/copyleft/cgal/barycenter.cpp
+++ b/src/libigl/igl/copyleft/cgal/barycenter.cpp
diff --git a/src/igl/copyleft/cgal/cell_adjacency.cpp b/src/libigl/igl/copyleft/cgal/cell_adjacency.cpp
index 1824a37c8..1824a37c8 100644
--- a/src/igl/copyleft/cgal/cell_adjacency.cpp
+++ b/src/libigl/igl/copyleft/cgal/cell_adjacency.cpp
diff --git a/src/igl/copyleft/cgal/cell_adjacency.h b/src/libigl/igl/copyleft/cgal/cell_adjacency.h
index 2244d3c4a..2244d3c4a 100644
--- a/src/igl/copyleft/cgal/cell_adjacency.h
+++ b/src/libigl/igl/copyleft/cgal/cell_adjacency.h
diff --git a/src/igl/copyleft/cgal/closest_facet.cpp b/src/libigl/igl/copyleft/cgal/closest_facet.cpp
index 0b08dd4bc..0b08dd4bc 100644
--- a/src/igl/copyleft/cgal/closest_facet.cpp
+++ b/src/libigl/igl/copyleft/cgal/closest_facet.cpp
diff --git a/src/igl/copyleft/cgal/closest_facet.h b/src/libigl/igl/copyleft/cgal/closest_facet.h
index 737ca2e22..737ca2e22 100644
--- a/src/igl/copyleft/cgal/closest_facet.h
+++ b/src/libigl/igl/copyleft/cgal/closest_facet.h
diff --git a/src/igl/copyleft/cgal/complex_to_mesh.cpp b/src/libigl/igl/copyleft/cgal/complex_to_mesh.cpp
index 74bf085ab..74bf085ab 100644
--- a/src/igl/copyleft/cgal/complex_to_mesh.cpp
+++ b/src/libigl/igl/copyleft/cgal/complex_to_mesh.cpp
diff --git a/src/igl/copyleft/cgal/complex_to_mesh.h b/src/libigl/igl/copyleft/cgal/complex_to_mesh.h
index ed66064b7..ed66064b7 100644
--- a/src/igl/copyleft/cgal/complex_to_mesh.h
+++ b/src/libigl/igl/copyleft/cgal/complex_to_mesh.h
diff --git a/src/igl/copyleft/cgal/component_inside_component.cpp b/src/libigl/igl/copyleft/cgal/component_inside_component.cpp
index 251e91949..251e91949 100644
--- a/src/igl/copyleft/cgal/component_inside_component.cpp
+++ b/src/libigl/igl/copyleft/cgal/component_inside_component.cpp
diff --git a/src/igl/copyleft/cgal/component_inside_component.h b/src/libigl/igl/copyleft/cgal/component_inside_component.h
index 17fdd6255..17fdd6255 100644
--- a/src/igl/copyleft/cgal/component_inside_component.h
+++ b/src/libigl/igl/copyleft/cgal/component_inside_component.h
diff --git a/src/igl/copyleft/cgal/convex_hull.cpp b/src/libigl/igl/copyleft/cgal/convex_hull.cpp
index 8f89d5593..8f89d5593 100644
--- a/src/igl/copyleft/cgal/convex_hull.cpp
+++ b/src/libigl/igl/copyleft/cgal/convex_hull.cpp
diff --git a/src/igl/copyleft/cgal/convex_hull.h b/src/libigl/igl/copyleft/cgal/convex_hull.h
index ba04dd7cc..ba04dd7cc 100644
--- a/src/igl/copyleft/cgal/convex_hull.h
+++ b/src/libigl/igl/copyleft/cgal/convex_hull.h
diff --git a/src/igl/copyleft/cgal/delaunay_triangulation.cpp b/src/libigl/igl/copyleft/cgal/delaunay_triangulation.cpp
index 787f79f9e..787f79f9e 100644
--- a/src/igl/copyleft/cgal/delaunay_triangulation.cpp
+++ b/src/libigl/igl/copyleft/cgal/delaunay_triangulation.cpp
diff --git a/src/igl/copyleft/cgal/delaunay_triangulation.h b/src/libigl/igl/copyleft/cgal/delaunay_triangulation.h
index 88cbf9fe0..88cbf9fe0 100644
--- a/src/igl/copyleft/cgal/delaunay_triangulation.h
+++ b/src/libigl/igl/copyleft/cgal/delaunay_triangulation.h
diff --git a/src/igl/copyleft/cgal/extract_cells.cpp b/src/libigl/igl/copyleft/cgal/extract_cells.cpp
index a314edfae..a314edfae 100644
--- a/src/igl/copyleft/cgal/extract_cells.cpp
+++ b/src/libigl/igl/copyleft/cgal/extract_cells.cpp
diff --git a/src/igl/copyleft/cgal/extract_cells.h b/src/libigl/igl/copyleft/cgal/extract_cells.h
index 9575ffbae..9575ffbae 100644
--- a/src/igl/copyleft/cgal/extract_cells.h
+++ b/src/libigl/igl/copyleft/cgal/extract_cells.h
diff --git a/src/igl/copyleft/cgal/extract_feature.cpp b/src/libigl/igl/copyleft/cgal/extract_feature.cpp
index ff8205d35..ff8205d35 100644
--- a/src/igl/copyleft/cgal/extract_feature.cpp
+++ b/src/libigl/igl/copyleft/cgal/extract_feature.cpp
diff --git a/src/igl/copyleft/cgal/extract_feature.h b/src/libigl/igl/copyleft/cgal/extract_feature.h
index 90d469377..90d469377 100644
--- a/src/igl/copyleft/cgal/extract_feature.h
+++ b/src/libigl/igl/copyleft/cgal/extract_feature.h
diff --git a/src/igl/copyleft/cgal/fast_winding_number.cpp b/src/libigl/igl/copyleft/cgal/fast_winding_number.cpp
index 682754a86..682754a86 100644
--- a/src/igl/copyleft/cgal/fast_winding_number.cpp
+++ b/src/libigl/igl/copyleft/cgal/fast_winding_number.cpp
diff --git a/src/igl/copyleft/cgal/fast_winding_number.h b/src/libigl/igl/copyleft/cgal/fast_winding_number.h
index a4ab15316..a4ab15316 100644
--- a/src/igl/copyleft/cgal/fast_winding_number.h
+++ b/src/libigl/igl/copyleft/cgal/fast_winding_number.h
diff --git a/src/igl/copyleft/cgal/half_space_box.cpp b/src/libigl/igl/copyleft/cgal/half_space_box.cpp
index 1bfa8ea52..1bfa8ea52 100644
--- a/src/igl/copyleft/cgal/half_space_box.cpp
+++ b/src/libigl/igl/copyleft/cgal/half_space_box.cpp
diff --git a/src/igl/copyleft/cgal/half_space_box.h b/src/libigl/igl/copyleft/cgal/half_space_box.h
index 275502235..275502235 100644
--- a/src/igl/copyleft/cgal/half_space_box.h
+++ b/src/libigl/igl/copyleft/cgal/half_space_box.h
diff --git a/src/igl/copyleft/cgal/hausdorff.cpp b/src/libigl/igl/copyleft/cgal/hausdorff.cpp
index 382e9b476..382e9b476 100644
--- a/src/igl/copyleft/cgal/hausdorff.cpp
+++ b/src/libigl/igl/copyleft/cgal/hausdorff.cpp
diff --git a/src/igl/copyleft/cgal/hausdorff.h b/src/libigl/igl/copyleft/cgal/hausdorff.h
index c377d4576..c377d4576 100644
--- a/src/igl/copyleft/cgal/hausdorff.h
+++ b/src/libigl/igl/copyleft/cgal/hausdorff.h
diff --git a/src/igl/copyleft/cgal/incircle.cpp b/src/libigl/igl/copyleft/cgal/incircle.cpp
index d129d3b14..d129d3b14 100644
--- a/src/igl/copyleft/cgal/incircle.cpp
+++ b/src/libigl/igl/copyleft/cgal/incircle.cpp
diff --git a/src/igl/copyleft/cgal/incircle.h b/src/libigl/igl/copyleft/cgal/incircle.h
index 4088dc9b5..4088dc9b5 100644
--- a/src/igl/copyleft/cgal/incircle.h
+++ b/src/libigl/igl/copyleft/cgal/incircle.h
diff --git a/src/igl/copyleft/cgal/insert_into_cdt.cpp b/src/libigl/igl/copyleft/cgal/insert_into_cdt.cpp
index 2ea4e6de1..2ea4e6de1 100644
--- a/src/igl/copyleft/cgal/insert_into_cdt.cpp
+++ b/src/libigl/igl/copyleft/cgal/insert_into_cdt.cpp
diff --git a/src/igl/copyleft/cgal/insert_into_cdt.h b/src/libigl/igl/copyleft/cgal/insert_into_cdt.h
index afca0233f..afca0233f 100644
--- a/src/igl/copyleft/cgal/insert_into_cdt.h
+++ b/src/libigl/igl/copyleft/cgal/insert_into_cdt.h
diff --git a/src/igl/copyleft/cgal/insphere.cpp b/src/libigl/igl/copyleft/cgal/insphere.cpp
index db12fea33..db12fea33 100644
--- a/src/igl/copyleft/cgal/insphere.cpp
+++ b/src/libigl/igl/copyleft/cgal/insphere.cpp
diff --git a/src/igl/copyleft/cgal/insphere.h b/src/libigl/igl/copyleft/cgal/insphere.h
index 88a926668..88a926668 100644
--- a/src/igl/copyleft/cgal/insphere.h
+++ b/src/libigl/igl/copyleft/cgal/insphere.h
diff --git a/src/igl/copyleft/cgal/intersect_other.cpp b/src/libigl/igl/copyleft/cgal/intersect_other.cpp
index 9f984f956..9f984f956 100644
--- a/src/igl/copyleft/cgal/intersect_other.cpp
+++ b/src/libigl/igl/copyleft/cgal/intersect_other.cpp
diff --git a/src/igl/copyleft/cgal/intersect_other.h b/src/libigl/igl/copyleft/cgal/intersect_other.h
index c1afdf87d..c1afdf87d 100644
--- a/src/igl/copyleft/cgal/intersect_other.h
+++ b/src/libigl/igl/copyleft/cgal/intersect_other.h
diff --git a/src/igl/copyleft/cgal/intersect_with_half_space.cpp b/src/libigl/igl/copyleft/cgal/intersect_with_half_space.cpp
index c4ba4dbb8..c4ba4dbb8 100644
--- a/src/igl/copyleft/cgal/intersect_with_half_space.cpp
+++ b/src/libigl/igl/copyleft/cgal/intersect_with_half_space.cpp
diff --git a/src/igl/copyleft/cgal/intersect_with_half_space.h b/src/libigl/igl/copyleft/cgal/intersect_with_half_space.h
index 9fdf9ae2b..9fdf9ae2b 100644
--- a/src/igl/copyleft/cgal/intersect_with_half_space.h
+++ b/src/libigl/igl/copyleft/cgal/intersect_with_half_space.h
diff --git a/src/igl/copyleft/cgal/lexicographic_triangulation.cpp b/src/libigl/igl/copyleft/cgal/lexicographic_triangulation.cpp
index 719b50dbf..719b50dbf 100644
--- a/src/igl/copyleft/cgal/lexicographic_triangulation.cpp
+++ b/src/libigl/igl/copyleft/cgal/lexicographic_triangulation.cpp
diff --git a/src/igl/copyleft/cgal/lexicographic_triangulation.h b/src/libigl/igl/copyleft/cgal/lexicographic_triangulation.h
index 5773a3942..5773a3942 100644
--- a/src/igl/copyleft/cgal/lexicographic_triangulation.h
+++ b/src/libigl/igl/copyleft/cgal/lexicographic_triangulation.h
diff --git a/src/igl/copyleft/cgal/list_to_matrix.cpp b/src/libigl/igl/copyleft/cgal/list_to_matrix.cpp
index e94dde6b8..e94dde6b8 100644
--- a/src/igl/copyleft/cgal/list_to_matrix.cpp
+++ b/src/libigl/igl/copyleft/cgal/list_to_matrix.cpp
diff --git a/src/igl/copyleft/cgal/mesh_boolean.cpp b/src/libigl/igl/copyleft/cgal/mesh_boolean.cpp
index 5d289f6c3..5d289f6c3 100644
--- a/src/igl/copyleft/cgal/mesh_boolean.cpp
+++ b/src/libigl/igl/copyleft/cgal/mesh_boolean.cpp
diff --git a/src/igl/copyleft/cgal/mesh_boolean.h b/src/libigl/igl/copyleft/cgal/mesh_boolean.h
index 24c99ed41..24c99ed41 100644
--- a/src/igl/copyleft/cgal/mesh_boolean.h
+++ b/src/libigl/igl/copyleft/cgal/mesh_boolean.h
diff --git a/src/igl/copyleft/cgal/mesh_boolean_type_to_funcs.cpp b/src/libigl/igl/copyleft/cgal/mesh_boolean_type_to_funcs.cpp
index 41b67c1b7..41b67c1b7 100644
--- a/src/igl/copyleft/cgal/mesh_boolean_type_to_funcs.cpp
+++ b/src/libigl/igl/copyleft/cgal/mesh_boolean_type_to_funcs.cpp
diff --git a/src/igl/copyleft/cgal/mesh_boolean_type_to_funcs.h b/src/libigl/igl/copyleft/cgal/mesh_boolean_type_to_funcs.h
index 2a269d770..2a269d770 100644
--- a/src/igl/copyleft/cgal/mesh_boolean_type_to_funcs.h
+++ b/src/libigl/igl/copyleft/cgal/mesh_boolean_type_to_funcs.h
diff --git a/src/igl/copyleft/cgal/mesh_to_cgal_triangle_list.cpp b/src/libigl/igl/copyleft/cgal/mesh_to_cgal_triangle_list.cpp
index 7f3af539d..7f3af539d 100644
--- a/src/igl/copyleft/cgal/mesh_to_cgal_triangle_list.cpp
+++ b/src/libigl/igl/copyleft/cgal/mesh_to_cgal_triangle_list.cpp
diff --git a/src/igl/copyleft/cgal/mesh_to_cgal_triangle_list.h b/src/libigl/igl/copyleft/cgal/mesh_to_cgal_triangle_list.h
index 492215bd5..492215bd5 100644
--- a/src/igl/copyleft/cgal/mesh_to_cgal_triangle_list.h
+++ b/src/libigl/igl/copyleft/cgal/mesh_to_cgal_triangle_list.h
diff --git a/src/igl/copyleft/cgal/mesh_to_polyhedron.cpp b/src/libigl/igl/copyleft/cgal/mesh_to_polyhedron.cpp
index b0bfe7079..b0bfe7079 100644
--- a/src/igl/copyleft/cgal/mesh_to_polyhedron.cpp
+++ b/src/libigl/igl/copyleft/cgal/mesh_to_polyhedron.cpp
diff --git a/src/igl/copyleft/cgal/mesh_to_polyhedron.h b/src/libigl/igl/copyleft/cgal/mesh_to_polyhedron.h
index de17d8aa2..de17d8aa2 100644
--- a/src/igl/copyleft/cgal/mesh_to_polyhedron.h
+++ b/src/libigl/igl/copyleft/cgal/mesh_to_polyhedron.h
diff --git a/src/igl/copyleft/cgal/minkowski_sum.cpp b/src/libigl/igl/copyleft/cgal/minkowski_sum.cpp
index c9045a4c7..c9045a4c7 100644
--- a/src/igl/copyleft/cgal/minkowski_sum.cpp
+++ b/src/libigl/igl/copyleft/cgal/minkowski_sum.cpp
diff --git a/src/igl/copyleft/cgal/minkowski_sum.h b/src/libigl/igl/copyleft/cgal/minkowski_sum.h
index 1631f0766..1631f0766 100644
--- a/src/igl/copyleft/cgal/minkowski_sum.h
+++ b/src/libigl/igl/copyleft/cgal/minkowski_sum.h
diff --git a/src/igl/copyleft/cgal/order_facets_around_edge.cpp b/src/libigl/igl/copyleft/cgal/order_facets_around_edge.cpp
index 13b585b50..13b585b50 100644
--- a/src/igl/copyleft/cgal/order_facets_around_edge.cpp
+++ b/src/libigl/igl/copyleft/cgal/order_facets_around_edge.cpp
diff --git a/src/igl/copyleft/cgal/order_facets_around_edge.h b/src/libigl/igl/copyleft/cgal/order_facets_around_edge.h
index 6e09129ac..6e09129ac 100644
--- a/src/igl/copyleft/cgal/order_facets_around_edge.h
+++ b/src/libigl/igl/copyleft/cgal/order_facets_around_edge.h
diff --git a/src/igl/copyleft/cgal/order_facets_around_edges.cpp b/src/libigl/igl/copyleft/cgal/order_facets_around_edges.cpp
index 767d3e899..767d3e899 100644
--- a/src/igl/copyleft/cgal/order_facets_around_edges.cpp
+++ b/src/libigl/igl/copyleft/cgal/order_facets_around_edges.cpp
diff --git a/src/igl/copyleft/cgal/order_facets_around_edges.h b/src/libigl/igl/copyleft/cgal/order_facets_around_edges.h
index 89ac2918e..89ac2918e 100644
--- a/src/igl/copyleft/cgal/order_facets_around_edges.h
+++ b/src/libigl/igl/copyleft/cgal/order_facets_around_edges.h
diff --git a/src/igl/copyleft/cgal/orient2D.cpp b/src/libigl/igl/copyleft/cgal/orient2D.cpp
index ee5933bb4..ee5933bb4 100644
--- a/src/igl/copyleft/cgal/orient2D.cpp
+++ b/src/libigl/igl/copyleft/cgal/orient2D.cpp
diff --git a/src/igl/copyleft/cgal/orient2D.h b/src/libigl/igl/copyleft/cgal/orient2D.h
index 0f2483dfd..0f2483dfd 100644
--- a/src/igl/copyleft/cgal/orient2D.h
+++ b/src/libigl/igl/copyleft/cgal/orient2D.h
diff --git a/src/igl/copyleft/cgal/orient3D.cpp b/src/libigl/igl/copyleft/cgal/orient3D.cpp
index 3bdbfb80e..3bdbfb80e 100644
--- a/src/igl/copyleft/cgal/orient3D.cpp
+++ b/src/libigl/igl/copyleft/cgal/orient3D.cpp
diff --git a/src/igl/copyleft/cgal/orient3D.h b/src/libigl/igl/copyleft/cgal/orient3D.h
index 029e208b1..029e208b1 100644
--- a/src/igl/copyleft/cgal/orient3D.h
+++ b/src/libigl/igl/copyleft/cgal/orient3D.h
diff --git a/src/igl/copyleft/cgal/outer_element.cpp b/src/libigl/igl/copyleft/cgal/outer_element.cpp
index 2bef8cae1..2bef8cae1 100644
--- a/src/igl/copyleft/cgal/outer_element.cpp
+++ b/src/libigl/igl/copyleft/cgal/outer_element.cpp
diff --git a/src/igl/copyleft/cgal/outer_element.h b/src/libigl/igl/copyleft/cgal/outer_element.h
index adaef3464..adaef3464 100644
--- a/src/igl/copyleft/cgal/outer_element.h
+++ b/src/libigl/igl/copyleft/cgal/outer_element.h
diff --git a/src/igl/copyleft/cgal/outer_facet.cpp b/src/libigl/igl/copyleft/cgal/outer_facet.cpp
index 4525dd856..4525dd856 100644
--- a/src/igl/copyleft/cgal/outer_facet.cpp
+++ b/src/libigl/igl/copyleft/cgal/outer_facet.cpp
diff --git a/src/igl/copyleft/cgal/outer_facet.h b/src/libigl/igl/copyleft/cgal/outer_facet.h
index b025a94ab..b025a94ab 100644
--- a/src/igl/copyleft/cgal/outer_facet.h
+++ b/src/libigl/igl/copyleft/cgal/outer_facet.h
diff --git a/src/igl/copyleft/cgal/outer_hull.cpp b/src/libigl/igl/copyleft/cgal/outer_hull.cpp
index 71586f707..71586f707 100644
--- a/src/igl/copyleft/cgal/outer_hull.cpp
+++ b/src/libigl/igl/copyleft/cgal/outer_hull.cpp
diff --git a/src/igl/copyleft/cgal/outer_hull.h b/src/libigl/igl/copyleft/cgal/outer_hull.h
index 191a8d492..191a8d492 100644
--- a/src/igl/copyleft/cgal/outer_hull.h
+++ b/src/libigl/igl/copyleft/cgal/outer_hull.h
diff --git a/src/igl/copyleft/cgal/peel_outer_hull_layers.cpp b/src/libigl/igl/copyleft/cgal/peel_outer_hull_layers.cpp
index 73ae07eea..73ae07eea 100644
--- a/src/igl/copyleft/cgal/peel_outer_hull_layers.cpp
+++ b/src/libigl/igl/copyleft/cgal/peel_outer_hull_layers.cpp
diff --git a/src/igl/copyleft/cgal/peel_outer_hull_layers.h b/src/libigl/igl/copyleft/cgal/peel_outer_hull_layers.h
index ee2752b29..ee2752b29 100644
--- a/src/igl/copyleft/cgal/peel_outer_hull_layers.h
+++ b/src/libigl/igl/copyleft/cgal/peel_outer_hull_layers.h
diff --git a/src/igl/copyleft/cgal/peel_winding_number_layers.cpp b/src/libigl/igl/copyleft/cgal/peel_winding_number_layers.cpp
index 2bb71a780..2bb71a780 100644
--- a/src/igl/copyleft/cgal/peel_winding_number_layers.cpp
+++ b/src/libigl/igl/copyleft/cgal/peel_winding_number_layers.cpp
diff --git a/src/igl/copyleft/cgal/peel_winding_number_layers.h b/src/libigl/igl/copyleft/cgal/peel_winding_number_layers.h
index 644c361e3..644c361e3 100644
--- a/src/igl/copyleft/cgal/peel_winding_number_layers.h
+++ b/src/libigl/igl/copyleft/cgal/peel_winding_number_layers.h
diff --git a/src/igl/copyleft/cgal/piecewise_constant_winding_number.cpp b/src/libigl/igl/copyleft/cgal/piecewise_constant_winding_number.cpp
index 0156edbe2..0156edbe2 100644
--- a/src/igl/copyleft/cgal/piecewise_constant_winding_number.cpp
+++ b/src/libigl/igl/copyleft/cgal/piecewise_constant_winding_number.cpp
diff --git a/src/igl/copyleft/cgal/piecewise_constant_winding_number.h b/src/libigl/igl/copyleft/cgal/piecewise_constant_winding_number.h
index 2b93913b3..2b93913b3 100644
--- a/src/igl/copyleft/cgal/piecewise_constant_winding_number.h
+++ b/src/libigl/igl/copyleft/cgal/piecewise_constant_winding_number.h
diff --git a/src/igl/copyleft/cgal/point_areas.cpp b/src/libigl/igl/copyleft/cgal/point_areas.cpp
index bb98bac3c..bb98bac3c 100644
--- a/src/igl/copyleft/cgal/point_areas.cpp
+++ b/src/libigl/igl/copyleft/cgal/point_areas.cpp
diff --git a/src/igl/copyleft/cgal/point_areas.h b/src/libigl/igl/copyleft/cgal/point_areas.h
index ec0366488..ec0366488 100644
--- a/src/igl/copyleft/cgal/point_areas.h
+++ b/src/libigl/igl/copyleft/cgal/point_areas.h
diff --git a/src/igl/copyleft/cgal/point_mesh_squared_distance.cpp b/src/libigl/igl/copyleft/cgal/point_mesh_squared_distance.cpp
index 18b5706ae..18b5706ae 100644
--- a/src/igl/copyleft/cgal/point_mesh_squared_distance.cpp
+++ b/src/libigl/igl/copyleft/cgal/point_mesh_squared_distance.cpp
diff --git a/src/igl/copyleft/cgal/point_mesh_squared_distance.h b/src/libigl/igl/copyleft/cgal/point_mesh_squared_distance.h
index b525bddda..b525bddda 100644
--- a/src/igl/copyleft/cgal/point_mesh_squared_distance.h
+++ b/src/libigl/igl/copyleft/cgal/point_mesh_squared_distance.h
diff --git a/src/igl/copyleft/cgal/point_segment_squared_distance.cpp b/src/libigl/igl/copyleft/cgal/point_segment_squared_distance.cpp
index 257206ae6..257206ae6 100644
--- a/src/igl/copyleft/cgal/point_segment_squared_distance.cpp
+++ b/src/libigl/igl/copyleft/cgal/point_segment_squared_distance.cpp
diff --git a/src/igl/copyleft/cgal/point_segment_squared_distance.h b/src/libigl/igl/copyleft/cgal/point_segment_squared_distance.h
index eac628b2a..eac628b2a 100644
--- a/src/igl/copyleft/cgal/point_segment_squared_distance.h
+++ b/src/libigl/igl/copyleft/cgal/point_segment_squared_distance.h
diff --git a/src/igl/copyleft/cgal/point_solid_signed_squared_distance.cpp b/src/libigl/igl/copyleft/cgal/point_solid_signed_squared_distance.cpp
index 7aef2efd1..7aef2efd1 100644
--- a/src/igl/copyleft/cgal/point_solid_signed_squared_distance.cpp
+++ b/src/libigl/igl/copyleft/cgal/point_solid_signed_squared_distance.cpp
diff --git a/src/igl/copyleft/cgal/point_solid_signed_squared_distance.h b/src/libigl/igl/copyleft/cgal/point_solid_signed_squared_distance.h
index 845fad133..845fad133 100644
--- a/src/igl/copyleft/cgal/point_solid_signed_squared_distance.h
+++ b/src/libigl/igl/copyleft/cgal/point_solid_signed_squared_distance.h
diff --git a/src/igl/copyleft/cgal/point_triangle_squared_distance.cpp b/src/libigl/igl/copyleft/cgal/point_triangle_squared_distance.cpp
index 2ea29bc37..2ea29bc37 100644
--- a/src/igl/copyleft/cgal/point_triangle_squared_distance.cpp
+++ b/src/libigl/igl/copyleft/cgal/point_triangle_squared_distance.cpp
diff --git a/src/igl/copyleft/cgal/point_triangle_squared_distance.h b/src/libigl/igl/copyleft/cgal/point_triangle_squared_distance.h
index 37b63adcb..37b63adcb 100644
--- a/src/igl/copyleft/cgal/point_triangle_squared_distance.h
+++ b/src/libigl/igl/copyleft/cgal/point_triangle_squared_distance.h
diff --git a/src/igl/copyleft/cgal/points_inside_component.cpp b/src/libigl/igl/copyleft/cgal/points_inside_component.cpp
index 1558e130d..1558e130d 100644
--- a/src/igl/copyleft/cgal/points_inside_component.cpp
+++ b/src/libigl/igl/copyleft/cgal/points_inside_component.cpp
diff --git a/src/igl/copyleft/cgal/points_inside_component.h b/src/libigl/igl/copyleft/cgal/points_inside_component.h
index f21354455..f21354455 100644
--- a/src/igl/copyleft/cgal/points_inside_component.h
+++ b/src/libigl/igl/copyleft/cgal/points_inside_component.h
diff --git a/src/igl/copyleft/cgal/polyhedron_to_mesh.cpp b/src/libigl/igl/copyleft/cgal/polyhedron_to_mesh.cpp
index b51e41b60..b51e41b60 100644
--- a/src/igl/copyleft/cgal/polyhedron_to_mesh.cpp
+++ b/src/libigl/igl/copyleft/cgal/polyhedron_to_mesh.cpp
diff --git a/src/igl/copyleft/cgal/polyhedron_to_mesh.h b/src/libigl/igl/copyleft/cgal/polyhedron_to_mesh.h
index 3f8c66a88..3f8c66a88 100644
--- a/src/igl/copyleft/cgal/polyhedron_to_mesh.h
+++ b/src/libigl/igl/copyleft/cgal/polyhedron_to_mesh.h
diff --git a/src/igl/copyleft/cgal/projected_cdt.cpp b/src/libigl/igl/copyleft/cgal/projected_cdt.cpp
index f34352c66..f34352c66 100644
--- a/src/igl/copyleft/cgal/projected_cdt.cpp
+++ b/src/libigl/igl/copyleft/cgal/projected_cdt.cpp
diff --git a/src/igl/copyleft/cgal/projected_cdt.h b/src/libigl/igl/copyleft/cgal/projected_cdt.h
index a161cc450..a161cc450 100644
--- a/src/igl/copyleft/cgal/projected_cdt.h
+++ b/src/libigl/igl/copyleft/cgal/projected_cdt.h
diff --git a/src/igl/copyleft/cgal/projected_delaunay.cpp b/src/libigl/igl/copyleft/cgal/projected_delaunay.cpp
index 52ea49274..52ea49274 100644
--- a/src/igl/copyleft/cgal/projected_delaunay.cpp
+++ b/src/libigl/igl/copyleft/cgal/projected_delaunay.cpp
diff --git a/src/igl/copyleft/cgal/projected_delaunay.h b/src/libigl/igl/copyleft/cgal/projected_delaunay.h
index ee72305cd..ee72305cd 100644
--- a/src/igl/copyleft/cgal/projected_delaunay.h
+++ b/src/libigl/igl/copyleft/cgal/projected_delaunay.h
diff --git a/src/igl/copyleft/cgal/propagate_winding_numbers.cpp b/src/libigl/igl/copyleft/cgal/propagate_winding_numbers.cpp
index 7de9d98d2..7de9d98d2 100644
--- a/src/igl/copyleft/cgal/propagate_winding_numbers.cpp
+++ b/src/libigl/igl/copyleft/cgal/propagate_winding_numbers.cpp
diff --git a/src/igl/copyleft/cgal/propagate_winding_numbers.h b/src/libigl/igl/copyleft/cgal/propagate_winding_numbers.h
index 77d8e7666..77d8e7666 100644
--- a/src/igl/copyleft/cgal/propagate_winding_numbers.h
+++ b/src/libigl/igl/copyleft/cgal/propagate_winding_numbers.h
diff --git a/src/igl/copyleft/cgal/read_triangle_mesh.cpp b/src/libigl/igl/copyleft/cgal/read_triangle_mesh.cpp
index 24ebbb127..24ebbb127 100644
--- a/src/igl/copyleft/cgal/read_triangle_mesh.cpp
+++ b/src/libigl/igl/copyleft/cgal/read_triangle_mesh.cpp
diff --git a/src/igl/copyleft/cgal/read_triangle_mesh.h b/src/libigl/igl/copyleft/cgal/read_triangle_mesh.h
index c1dae2a22..c1dae2a22 100644
--- a/src/igl/copyleft/cgal/read_triangle_mesh.h
+++ b/src/libigl/igl/copyleft/cgal/read_triangle_mesh.h
diff --git a/src/igl/copyleft/cgal/relabel_small_immersed_cells.cpp b/src/libigl/igl/copyleft/cgal/relabel_small_immersed_cells.cpp
index 993e009ec..993e009ec 100644
--- a/src/igl/copyleft/cgal/relabel_small_immersed_cells.cpp
+++ b/src/libigl/igl/copyleft/cgal/relabel_small_immersed_cells.cpp
diff --git a/src/igl/copyleft/cgal/relabel_small_immersed_cells.h b/src/libigl/igl/copyleft/cgal/relabel_small_immersed_cells.h
index a783914a3..a783914a3 100644
--- a/src/igl/copyleft/cgal/relabel_small_immersed_cells.h
+++ b/src/libigl/igl/copyleft/cgal/relabel_small_immersed_cells.h
diff --git a/src/igl/copyleft/cgal/remesh_intersections.cpp b/src/libigl/igl/copyleft/cgal/remesh_intersections.cpp
index 56a715c23..56a715c23 100644
--- a/src/igl/copyleft/cgal/remesh_intersections.cpp
+++ b/src/libigl/igl/copyleft/cgal/remesh_intersections.cpp
diff --git a/src/igl/copyleft/cgal/remesh_intersections.h b/src/libigl/igl/copyleft/cgal/remesh_intersections.h
index 2b6a44a57..2b6a44a57 100644
--- a/src/igl/copyleft/cgal/remesh_intersections.h
+++ b/src/libigl/igl/copyleft/cgal/remesh_intersections.h
diff --git a/src/igl/copyleft/cgal/remesh_self_intersections.cpp b/src/libigl/igl/copyleft/cgal/remesh_self_intersections.cpp
index 871152b30..871152b30 100644
--- a/src/igl/copyleft/cgal/remesh_self_intersections.cpp
+++ b/src/libigl/igl/copyleft/cgal/remesh_self_intersections.cpp
diff --git a/src/igl/copyleft/cgal/remesh_self_intersections.h b/src/libigl/igl/copyleft/cgal/remesh_self_intersections.h
index e8e8cc492..e8e8cc492 100644
--- a/src/igl/copyleft/cgal/remesh_self_intersections.h
+++ b/src/libigl/igl/copyleft/cgal/remesh_self_intersections.h
diff --git a/src/igl/copyleft/cgal/remove_unreferenced.cpp b/src/libigl/igl/copyleft/cgal/remove_unreferenced.cpp
index 03c8864cb..03c8864cb 100644
--- a/src/igl/copyleft/cgal/remove_unreferenced.cpp
+++ b/src/libigl/igl/copyleft/cgal/remove_unreferenced.cpp
diff --git a/src/igl/copyleft/cgal/resolve_intersections.cpp b/src/libigl/igl/copyleft/cgal/resolve_intersections.cpp
index 2252d87e1..2252d87e1 100644
--- a/src/igl/copyleft/cgal/resolve_intersections.cpp
+++ b/src/libigl/igl/copyleft/cgal/resolve_intersections.cpp
diff --git a/src/igl/copyleft/cgal/resolve_intersections.h b/src/libigl/igl/copyleft/cgal/resolve_intersections.h
index 086ef1361..086ef1361 100644
--- a/src/igl/copyleft/cgal/resolve_intersections.h
+++ b/src/libigl/igl/copyleft/cgal/resolve_intersections.h
diff --git a/src/igl/copyleft/cgal/row_to_point.cpp b/src/libigl/igl/copyleft/cgal/row_to_point.cpp
index 97a4b991e..97a4b991e 100644
--- a/src/igl/copyleft/cgal/row_to_point.cpp
+++ b/src/libigl/igl/copyleft/cgal/row_to_point.cpp
diff --git a/src/igl/copyleft/cgal/row_to_point.h b/src/libigl/igl/copyleft/cgal/row_to_point.h
index 54e27ad4f..54e27ad4f 100644
--- a/src/igl/copyleft/cgal/row_to_point.h
+++ b/src/libigl/igl/copyleft/cgal/row_to_point.h
diff --git a/src/igl/copyleft/cgal/segment_segment_squared_distance.cpp b/src/libigl/igl/copyleft/cgal/segment_segment_squared_distance.cpp
index 1ca695995..1ca695995 100644
--- a/src/igl/copyleft/cgal/segment_segment_squared_distance.cpp
+++ b/src/libigl/igl/copyleft/cgal/segment_segment_squared_distance.cpp
diff --git a/src/igl/copyleft/cgal/segment_segment_squared_distance.h b/src/libigl/igl/copyleft/cgal/segment_segment_squared_distance.h
index 5bfbfdcab..5bfbfdcab 100644
--- a/src/igl/copyleft/cgal/segment_segment_squared_distance.h
+++ b/src/libigl/igl/copyleft/cgal/segment_segment_squared_distance.h
diff --git a/src/igl/copyleft/cgal/signed_distance_isosurface.cpp b/src/libigl/igl/copyleft/cgal/signed_distance_isosurface.cpp
index eeb6c03c5..eeb6c03c5 100644
--- a/src/igl/copyleft/cgal/signed_distance_isosurface.cpp
+++ b/src/libigl/igl/copyleft/cgal/signed_distance_isosurface.cpp
diff --git a/src/igl/copyleft/cgal/signed_distance_isosurface.h b/src/libigl/igl/copyleft/cgal/signed_distance_isosurface.h
index 149ea5e3d..149ea5e3d 100644
--- a/src/igl/copyleft/cgal/signed_distance_isosurface.h
+++ b/src/libigl/igl/copyleft/cgal/signed_distance_isosurface.h
diff --git a/src/igl/copyleft/cgal/slice.cpp b/src/libigl/igl/copyleft/cgal/slice.cpp
index 2e274a2f2..2e274a2f2 100644
--- a/src/igl/copyleft/cgal/slice.cpp
+++ b/src/libigl/igl/copyleft/cgal/slice.cpp
diff --git a/src/igl/copyleft/cgal/slice_mask.cpp b/src/libigl/igl/copyleft/cgal/slice_mask.cpp
index ec920e0d1..ec920e0d1 100644
--- a/src/igl/copyleft/cgal/slice_mask.cpp
+++ b/src/libigl/igl/copyleft/cgal/slice_mask.cpp
diff --git a/src/igl/copyleft/cgal/snap_rounding.cpp b/src/libigl/igl/copyleft/cgal/snap_rounding.cpp
index ccebfd1b8..ccebfd1b8 100644
--- a/src/igl/copyleft/cgal/snap_rounding.cpp
+++ b/src/libigl/igl/copyleft/cgal/snap_rounding.cpp
diff --git a/src/igl/copyleft/cgal/snap_rounding.h b/src/libigl/igl/copyleft/cgal/snap_rounding.h
index 48d2757f1..48d2757f1 100644
--- a/src/igl/copyleft/cgal/snap_rounding.h
+++ b/src/libigl/igl/copyleft/cgal/snap_rounding.h
diff --git a/src/igl/copyleft/cgal/string_to_mesh_boolean_type.cpp b/src/libigl/igl/copyleft/cgal/string_to_mesh_boolean_type.cpp
index 8ff1a03c4..8ff1a03c4 100644
--- a/src/igl/copyleft/cgal/string_to_mesh_boolean_type.cpp
+++ b/src/libigl/igl/copyleft/cgal/string_to_mesh_boolean_type.cpp
diff --git a/src/igl/copyleft/cgal/string_to_mesh_boolean_type.h b/src/libigl/igl/copyleft/cgal/string_to_mesh_boolean_type.h
index 4781099f1..4781099f1 100644
--- a/src/igl/copyleft/cgal/string_to_mesh_boolean_type.h
+++ b/src/libigl/igl/copyleft/cgal/string_to_mesh_boolean_type.h
diff --git a/src/igl/copyleft/cgal/subdivide_segments.cpp b/src/libigl/igl/copyleft/cgal/subdivide_segments.cpp
index 6cf7df93c..6cf7df93c 100644
--- a/src/igl/copyleft/cgal/subdivide_segments.cpp
+++ b/src/libigl/igl/copyleft/cgal/subdivide_segments.cpp
diff --git a/src/igl/copyleft/cgal/subdivide_segments.h b/src/libigl/igl/copyleft/cgal/subdivide_segments.h
index cd7d41a00..cd7d41a00 100644
--- a/src/igl/copyleft/cgal/subdivide_segments.h
+++ b/src/libigl/igl/copyleft/cgal/subdivide_segments.h
diff --git a/src/igl/copyleft/cgal/submesh_aabb_tree.cpp b/src/libigl/igl/copyleft/cgal/submesh_aabb_tree.cpp
index 4351ec0a9..4351ec0a9 100644
--- a/src/igl/copyleft/cgal/submesh_aabb_tree.cpp
+++ b/src/libigl/igl/copyleft/cgal/submesh_aabb_tree.cpp
diff --git a/src/igl/copyleft/cgal/submesh_aabb_tree.h b/src/libigl/igl/copyleft/cgal/submesh_aabb_tree.h
index eec9c030f..eec9c030f 100644
--- a/src/igl/copyleft/cgal/submesh_aabb_tree.h
+++ b/src/libigl/igl/copyleft/cgal/submesh_aabb_tree.h
diff --git a/src/igl/copyleft/cgal/triangle_triangle_squared_distance.cpp b/src/libigl/igl/copyleft/cgal/triangle_triangle_squared_distance.cpp
index 0c512f800..0c512f800 100644
--- a/src/igl/copyleft/cgal/triangle_triangle_squared_distance.cpp
+++ b/src/libigl/igl/copyleft/cgal/triangle_triangle_squared_distance.cpp
diff --git a/src/igl/copyleft/cgal/triangle_triangle_squared_distance.h b/src/libigl/igl/copyleft/cgal/triangle_triangle_squared_distance.h
index 118023488..118023488 100644
--- a/src/igl/copyleft/cgal/triangle_triangle_squared_distance.h
+++ b/src/libigl/igl/copyleft/cgal/triangle_triangle_squared_distance.h
diff --git a/src/igl/copyleft/cgal/trim_with_solid.cpp b/src/libigl/igl/copyleft/cgal/trim_with_solid.cpp
index 1e67da71e..1e67da71e 100644
--- a/src/igl/copyleft/cgal/trim_with_solid.cpp
+++ b/src/libigl/igl/copyleft/cgal/trim_with_solid.cpp
diff --git a/src/igl/copyleft/cgal/trim_with_solid.h b/src/libigl/igl/copyleft/cgal/trim_with_solid.h
index aa45d80f7..aa45d80f7 100644
--- a/src/igl/copyleft/cgal/trim_with_solid.h
+++ b/src/libigl/igl/copyleft/cgal/trim_with_solid.h
diff --git a/src/igl/copyleft/cgal/unique.cpp b/src/libigl/igl/copyleft/cgal/unique.cpp
index 5e45f82b1..5e45f82b1 100644
--- a/src/igl/copyleft/cgal/unique.cpp
+++ b/src/libigl/igl/copyleft/cgal/unique.cpp
diff --git a/src/igl/copyleft/cgal/unique_rows.cpp b/src/libigl/igl/copyleft/cgal/unique_rows.cpp
index e4d946f77..e4d946f77 100644
--- a/src/igl/copyleft/cgal/unique_rows.cpp
+++ b/src/libigl/igl/copyleft/cgal/unique_rows.cpp
diff --git a/src/igl/copyleft/cgal/wire_mesh.cpp b/src/libigl/igl/copyleft/cgal/wire_mesh.cpp
index 0e9609501..0e9609501 100644
--- a/src/igl/copyleft/cgal/wire_mesh.cpp
+++ b/src/libigl/igl/copyleft/cgal/wire_mesh.cpp
diff --git a/src/igl/copyleft/cgal/wire_mesh.h b/src/libigl/igl/copyleft/cgal/wire_mesh.h
index 9b798e6fd..9b798e6fd 100644
--- a/src/igl/copyleft/cgal/wire_mesh.h
+++ b/src/libigl/igl/copyleft/cgal/wire_mesh.h
diff --git a/src/igl/copyleft/comiso/frame_field.cpp b/src/libigl/igl/copyleft/comiso/frame_field.cpp
index c3549eeff..c3549eeff 100644
--- a/src/igl/copyleft/comiso/frame_field.cpp
+++ b/src/libigl/igl/copyleft/comiso/frame_field.cpp
diff --git a/src/igl/copyleft/comiso/frame_field.h b/src/libigl/igl/copyleft/comiso/frame_field.h
index a43d464c7..a43d464c7 100644
--- a/src/igl/copyleft/comiso/frame_field.h
+++ b/src/libigl/igl/copyleft/comiso/frame_field.h
diff --git a/src/igl/copyleft/comiso/miq.cpp b/src/libigl/igl/copyleft/comiso/miq.cpp
index ecf3d282b..ecf3d282b 100644
--- a/src/igl/copyleft/comiso/miq.cpp
+++ b/src/libigl/igl/copyleft/comiso/miq.cpp
diff --git a/src/igl/copyleft/comiso/miq.h b/src/libigl/igl/copyleft/comiso/miq.h
index f4581f65d..f4581f65d 100644
--- a/src/igl/copyleft/comiso/miq.h
+++ b/src/libigl/igl/copyleft/comiso/miq.h
diff --git a/src/igl/copyleft/comiso/nrosy.cpp b/src/libigl/igl/copyleft/comiso/nrosy.cpp
index 0f3ee86bc..0f3ee86bc 100644
--- a/src/igl/copyleft/comiso/nrosy.cpp
+++ b/src/libigl/igl/copyleft/comiso/nrosy.cpp
diff --git a/src/igl/copyleft/comiso/nrosy.h b/src/libigl/igl/copyleft/comiso/nrosy.h
index 61c7f9558..61c7f9558 100644
--- a/src/igl/copyleft/comiso/nrosy.h
+++ b/src/libigl/igl/copyleft/comiso/nrosy.h
diff --git a/src/igl/copyleft/cork/from_cork_mesh.cpp b/src/libigl/igl/copyleft/cork/from_cork_mesh.cpp
index 964263111..964263111 100644
--- a/src/igl/copyleft/cork/from_cork_mesh.cpp
+++ b/src/libigl/igl/copyleft/cork/from_cork_mesh.cpp
diff --git a/src/igl/copyleft/cork/from_cork_mesh.h b/src/libigl/igl/copyleft/cork/from_cork_mesh.h
index a2fef28c1..a2fef28c1 100644
--- a/src/igl/copyleft/cork/from_cork_mesh.h
+++ b/src/libigl/igl/copyleft/cork/from_cork_mesh.h
diff --git a/src/igl/copyleft/cork/mesh_boolean.cpp b/src/libigl/igl/copyleft/cork/mesh_boolean.cpp
index 61ed4a6ad..61ed4a6ad 100644
--- a/src/igl/copyleft/cork/mesh_boolean.cpp
+++ b/src/libigl/igl/copyleft/cork/mesh_boolean.cpp
diff --git a/src/igl/copyleft/cork/mesh_boolean.h b/src/libigl/igl/copyleft/cork/mesh_boolean.h
index db2589284..db2589284 100644
--- a/src/igl/copyleft/cork/mesh_boolean.h
+++ b/src/libigl/igl/copyleft/cork/mesh_boolean.h
diff --git a/src/igl/copyleft/cork/to_cork_mesh.cpp b/src/libigl/igl/copyleft/cork/to_cork_mesh.cpp
index 845f8cb67..845f8cb67 100644
--- a/src/igl/copyleft/cork/to_cork_mesh.cpp
+++ b/src/libigl/igl/copyleft/cork/to_cork_mesh.cpp
diff --git a/src/igl/copyleft/cork/to_cork_mesh.h b/src/libigl/igl/copyleft/cork/to_cork_mesh.h
index b034e357f..b034e357f 100644
--- a/src/igl/copyleft/cork/to_cork_mesh.h
+++ b/src/libigl/igl/copyleft/cork/to_cork_mesh.h
diff --git a/src/igl/copyleft/marching_cubes.cpp b/src/libigl/igl/copyleft/marching_cubes.cpp
index 144a02255..144a02255 100644
--- a/src/igl/copyleft/marching_cubes.cpp
+++ b/src/libigl/igl/copyleft/marching_cubes.cpp
diff --git a/src/igl/copyleft/marching_cubes.h b/src/libigl/igl/copyleft/marching_cubes.h
index 4c9f888e4..4c9f888e4 100644
--- a/src/igl/copyleft/marching_cubes.h
+++ b/src/libigl/igl/copyleft/marching_cubes.h
diff --git a/src/igl/copyleft/marching_cubes_tables.h b/src/libigl/igl/copyleft/marching_cubes_tables.h
index 4bba533c3..4bba533c3 100644
--- a/src/igl/copyleft/marching_cubes_tables.h
+++ b/src/libigl/igl/copyleft/marching_cubes_tables.h
diff --git a/src/igl/copyleft/offset_surface.cpp b/src/libigl/igl/copyleft/offset_surface.cpp
index c9e90553f..c9e90553f 100644
--- a/src/igl/copyleft/offset_surface.cpp
+++ b/src/libigl/igl/copyleft/offset_surface.cpp
diff --git a/src/igl/copyleft/offset_surface.h b/src/libigl/igl/copyleft/offset_surface.h
index 7c6307378..7c6307378 100644
--- a/src/igl/copyleft/offset_surface.h
+++ b/src/libigl/igl/copyleft/offset_surface.h
diff --git a/src/igl/copyleft/opengl2/render_to_tga.cpp b/src/libigl/igl/copyleft/opengl2/render_to_tga.cpp
index 6d0f97ea1..6d0f97ea1 100644
--- a/src/igl/copyleft/opengl2/render_to_tga.cpp
+++ b/src/libigl/igl/copyleft/opengl2/render_to_tga.cpp
diff --git a/src/igl/copyleft/opengl2/render_to_tga.h b/src/libigl/igl/copyleft/opengl2/render_to_tga.h
index d792c1e31..d792c1e31 100644
--- a/src/igl/copyleft/opengl2/render_to_tga.h
+++ b/src/libigl/igl/copyleft/opengl2/render_to_tga.h
diff --git a/src/igl/copyleft/opengl2/texture_from_tga.cpp b/src/libigl/igl/copyleft/opengl2/texture_from_tga.cpp
index 717a6734c..717a6734c 100644
--- a/src/igl/copyleft/opengl2/texture_from_tga.cpp
+++ b/src/libigl/igl/copyleft/opengl2/texture_from_tga.cpp
diff --git a/src/igl/copyleft/opengl2/texture_from_tga.h b/src/libigl/igl/copyleft/opengl2/texture_from_tga.h
index 8a5f704c7..8a5f704c7 100644
--- a/src/igl/copyleft/opengl2/texture_from_tga.h
+++ b/src/libigl/igl/copyleft/opengl2/texture_from_tga.h
diff --git a/src/igl/copyleft/opengl2/tga.cpp b/src/libigl/igl/copyleft/opengl2/tga.cpp
index 2f1f99022..2f1f99022 100644
--- a/src/igl/copyleft/opengl2/tga.cpp
+++ b/src/libigl/igl/copyleft/opengl2/tga.cpp
diff --git a/src/igl/copyleft/opengl2/tga.h b/src/libigl/igl/copyleft/opengl2/tga.h
index b69f35496..b69f35496 100644
--- a/src/igl/copyleft/opengl2/tga.h
+++ b/src/libigl/igl/copyleft/opengl2/tga.h
diff --git a/src/igl/copyleft/progressive_hulls.cpp b/src/libigl/igl/copyleft/progressive_hulls.cpp
index 44738c8b2..44738c8b2 100644
--- a/src/igl/copyleft/progressive_hulls.cpp
+++ b/src/libigl/igl/copyleft/progressive_hulls.cpp
diff --git a/src/igl/copyleft/progressive_hulls.h b/src/libigl/igl/copyleft/progressive_hulls.h
index 54e0580a0..54e0580a0 100644
--- a/src/igl/copyleft/progressive_hulls.h
+++ b/src/libigl/igl/copyleft/progressive_hulls.h
diff --git a/src/igl/copyleft/progressive_hulls_cost_and_placement.cpp b/src/libigl/igl/copyleft/progressive_hulls_cost_and_placement.cpp
index c9ab79ced..c9ab79ced 100644
--- a/src/igl/copyleft/progressive_hulls_cost_and_placement.cpp
+++ b/src/libigl/igl/copyleft/progressive_hulls_cost_and_placement.cpp
diff --git a/src/igl/copyleft/progressive_hulls_cost_and_placement.h b/src/libigl/igl/copyleft/progressive_hulls_cost_and_placement.h
index bbe4875d8..bbe4875d8 100644
--- a/src/igl/copyleft/progressive_hulls_cost_and_placement.h
+++ b/src/libigl/igl/copyleft/progressive_hulls_cost_and_placement.h
diff --git a/src/igl/copyleft/quadprog.cpp b/src/libigl/igl/copyleft/quadprog.cpp
index 4c565a0c3..4c565a0c3 100644
--- a/src/igl/copyleft/quadprog.cpp
+++ b/src/libigl/igl/copyleft/quadprog.cpp
diff --git a/src/igl/copyleft/quadprog.h b/src/libigl/igl/copyleft/quadprog.h
index f054bbdba..f054bbdba 100644
--- a/src/igl/copyleft/quadprog.h
+++ b/src/libigl/igl/copyleft/quadprog.h
diff --git a/src/igl/copyleft/swept_volume.cpp b/src/libigl/igl/copyleft/swept_volume.cpp
index f21e3aba5..f21e3aba5 100644
--- a/src/igl/copyleft/swept_volume.cpp
+++ b/src/libigl/igl/copyleft/swept_volume.cpp
diff --git a/src/igl/copyleft/swept_volume.h b/src/libigl/igl/copyleft/swept_volume.h
index cc178f78a..cc178f78a 100644
--- a/src/igl/copyleft/swept_volume.h
+++ b/src/libigl/igl/copyleft/swept_volume.h
diff --git a/src/igl/copyleft/tetgen/README b/src/libigl/igl/copyleft/tetgen/README
index 0315b6c11..0315b6c11 100644
--- a/src/igl/copyleft/tetgen/README
+++ b/src/libigl/igl/copyleft/tetgen/README
diff --git a/src/igl/copyleft/tetgen/cdt.cpp b/src/libigl/igl/copyleft/tetgen/cdt.cpp
index f2602dd66..f2602dd66 100644
--- a/src/igl/copyleft/tetgen/cdt.cpp
+++ b/src/libigl/igl/copyleft/tetgen/cdt.cpp
diff --git a/src/igl/copyleft/tetgen/cdt.h b/src/libigl/igl/copyleft/tetgen/cdt.h
index e59a28029..e59a28029 100644
--- a/src/igl/copyleft/tetgen/cdt.h
+++ b/src/libigl/igl/copyleft/tetgen/cdt.h
diff --git a/src/igl/copyleft/tetgen/mesh_to_tetgenio.cpp b/src/libigl/igl/copyleft/tetgen/mesh_to_tetgenio.cpp
index 78eaebb5c..78eaebb5c 100644
--- a/src/igl/copyleft/tetgen/mesh_to_tetgenio.cpp
+++ b/src/libigl/igl/copyleft/tetgen/mesh_to_tetgenio.cpp
diff --git a/src/igl/copyleft/tetgen/mesh_to_tetgenio.h b/src/libigl/igl/copyleft/tetgen/mesh_to_tetgenio.h
index 3295294fe..3295294fe 100644
--- a/src/igl/copyleft/tetgen/mesh_to_tetgenio.h
+++ b/src/libigl/igl/copyleft/tetgen/mesh_to_tetgenio.h
diff --git a/src/igl/copyleft/tetgen/mesh_with_skeleton.cpp b/src/libigl/igl/copyleft/tetgen/mesh_with_skeleton.cpp
index 5c920b36d..5c920b36d 100644
--- a/src/igl/copyleft/tetgen/mesh_with_skeleton.cpp
+++ b/src/libigl/igl/copyleft/tetgen/mesh_with_skeleton.cpp
diff --git a/src/igl/copyleft/tetgen/mesh_with_skeleton.h b/src/libigl/igl/copyleft/tetgen/mesh_with_skeleton.h
index a01bedffb..a01bedffb 100644
--- a/src/igl/copyleft/tetgen/mesh_with_skeleton.h
+++ b/src/libigl/igl/copyleft/tetgen/mesh_with_skeleton.h
diff --git a/src/igl/copyleft/tetgen/read_into_tetgenio.cpp b/src/libigl/igl/copyleft/tetgen/read_into_tetgenio.cpp
index 506c5e4ba..506c5e4ba 100644
--- a/src/igl/copyleft/tetgen/read_into_tetgenio.cpp
+++ b/src/libigl/igl/copyleft/tetgen/read_into_tetgenio.cpp
diff --git a/src/igl/copyleft/tetgen/read_into_tetgenio.h b/src/libigl/igl/copyleft/tetgen/read_into_tetgenio.h
index dd4b4b998..dd4b4b998 100644
--- a/src/igl/copyleft/tetgen/read_into_tetgenio.h
+++ b/src/libigl/igl/copyleft/tetgen/read_into_tetgenio.h
diff --git a/src/igl/copyleft/tetgen/tetgenio_to_tetmesh.cpp b/src/libigl/igl/copyleft/tetgen/tetgenio_to_tetmesh.cpp
index d61153053..d61153053 100644
--- a/src/igl/copyleft/tetgen/tetgenio_to_tetmesh.cpp
+++ b/src/libigl/igl/copyleft/tetgen/tetgenio_to_tetmesh.cpp
diff --git a/src/igl/copyleft/tetgen/tetgenio_to_tetmesh.h b/src/libigl/igl/copyleft/tetgen/tetgenio_to_tetmesh.h
index 2a5575886..2a5575886 100644
--- a/src/igl/copyleft/tetgen/tetgenio_to_tetmesh.h
+++ b/src/libigl/igl/copyleft/tetgen/tetgenio_to_tetmesh.h
diff --git a/src/igl/copyleft/tetgen/tetrahedralize.cpp b/src/libigl/igl/copyleft/tetgen/tetrahedralize.cpp
index fa6111410..fa6111410 100644
--- a/src/igl/copyleft/tetgen/tetrahedralize.cpp
+++ b/src/libigl/igl/copyleft/tetgen/tetrahedralize.cpp
diff --git a/src/igl/copyleft/tetgen/tetrahedralize.h b/src/libigl/igl/copyleft/tetgen/tetrahedralize.h
index 170a3f985..170a3f985 100644
--- a/src/igl/copyleft/tetgen/tetrahedralize.h
+++ b/src/libigl/igl/copyleft/tetgen/tetrahedralize.h
diff --git a/src/igl/cotmatrix.cpp b/src/libigl/igl/cotmatrix.cpp
index b1fd658ac..b1fd658ac 100644
--- a/src/igl/cotmatrix.cpp
+++ b/src/libigl/igl/cotmatrix.cpp
diff --git a/src/igl/cotmatrix.h b/src/libigl/igl/cotmatrix.h
index bb8232f5a..bb8232f5a 100644
--- a/src/igl/cotmatrix.h
+++ b/src/libigl/igl/cotmatrix.h
diff --git a/src/igl/cotmatrix_entries.cpp b/src/libigl/igl/cotmatrix_entries.cpp
index 6f7dfbbd3..6f7dfbbd3 100644
--- a/src/igl/cotmatrix_entries.cpp
+++ b/src/libigl/igl/cotmatrix_entries.cpp
diff --git a/src/igl/cotmatrix_entries.h b/src/libigl/igl/cotmatrix_entries.h
index 6368c02e8..6368c02e8 100644
--- a/src/igl/cotmatrix_entries.h
+++ b/src/libigl/igl/cotmatrix_entries.h
diff --git a/src/igl/count.cpp b/src/libigl/igl/count.cpp
index bdde79ca7..bdde79ca7 100644
--- a/src/igl/count.cpp
+++ b/src/libigl/igl/count.cpp
diff --git a/src/igl/count.h b/src/libigl/igl/count.h
index 61aeb94e8..61aeb94e8 100644
--- a/src/igl/count.h
+++ b/src/libigl/igl/count.h
diff --git a/src/igl/covariance_scatter_matrix.cpp b/src/libigl/igl/covariance_scatter_matrix.cpp
index 24fe9f760..24fe9f760 100644
--- a/src/igl/covariance_scatter_matrix.cpp
+++ b/src/libigl/igl/covariance_scatter_matrix.cpp
diff --git a/src/igl/covariance_scatter_matrix.h b/src/libigl/igl/covariance_scatter_matrix.h
index e70c77ab1..e70c77ab1 100644
--- a/src/igl/covariance_scatter_matrix.h
+++ b/src/libigl/igl/covariance_scatter_matrix.h
diff --git a/src/igl/cross.cpp b/src/libigl/igl/cross.cpp
index 04ee5340b..04ee5340b 100644
--- a/src/igl/cross.cpp
+++ b/src/libigl/igl/cross.cpp
diff --git a/src/igl/cross.h b/src/libigl/igl/cross.h
index cfbe563ed..cfbe563ed 100644
--- a/src/igl/cross.h
+++ b/src/libigl/igl/cross.h
diff --git a/src/igl/cross_field_missmatch.cpp b/src/libigl/igl/cross_field_missmatch.cpp
index 7d3caf0a8..7d3caf0a8 100644
--- a/src/igl/cross_field_missmatch.cpp
+++ b/src/libigl/igl/cross_field_missmatch.cpp
diff --git a/src/igl/cross_field_missmatch.h b/src/libigl/igl/cross_field_missmatch.h
index 9d7a7599d..9d7a7599d 100644
--- a/src/igl/cross_field_missmatch.h
+++ b/src/libigl/igl/cross_field_missmatch.h
diff --git a/src/igl/crouzeix_raviart_cotmatrix.cpp b/src/libigl/igl/crouzeix_raviart_cotmatrix.cpp
index 2fc5f6d4a..2fc5f6d4a 100644
--- a/src/igl/crouzeix_raviart_cotmatrix.cpp
+++ b/src/libigl/igl/crouzeix_raviart_cotmatrix.cpp
diff --git a/src/igl/crouzeix_raviart_cotmatrix.h b/src/libigl/igl/crouzeix_raviart_cotmatrix.h
index 1504ddad0..1504ddad0 100644
--- a/src/igl/crouzeix_raviart_cotmatrix.h
+++ b/src/libigl/igl/crouzeix_raviart_cotmatrix.h
diff --git a/src/igl/crouzeix_raviart_massmatrix.cpp b/src/libigl/igl/crouzeix_raviart_massmatrix.cpp
index 0873712d5..0873712d5 100644
--- a/src/igl/crouzeix_raviart_massmatrix.cpp
+++ b/src/libigl/igl/crouzeix_raviart_massmatrix.cpp
diff --git a/src/igl/crouzeix_raviart_massmatrix.h b/src/libigl/igl/crouzeix_raviart_massmatrix.h
index 256aa2067..256aa2067 100644
--- a/src/igl/crouzeix_raviart_massmatrix.h
+++ b/src/libigl/igl/crouzeix_raviart_massmatrix.h
diff --git a/src/igl/cumsum.cpp b/src/libigl/igl/cumsum.cpp
index 38eb4edd3..38eb4edd3 100644
--- a/src/igl/cumsum.cpp
+++ b/src/libigl/igl/cumsum.cpp
diff --git a/src/igl/cumsum.h b/src/libigl/igl/cumsum.h
index c3fa59258..c3fa59258 100644
--- a/src/igl/cumsum.h
+++ b/src/libigl/igl/cumsum.h
diff --git a/src/igl/cut_mesh.cpp b/src/libigl/igl/cut_mesh.cpp
index 33a25ce93..33a25ce93 100644
--- a/src/igl/cut_mesh.cpp
+++ b/src/libigl/igl/cut_mesh.cpp
diff --git a/src/igl/cut_mesh.h b/src/libigl/igl/cut_mesh.h
index e49a3e38b..e49a3e38b 100644
--- a/src/igl/cut_mesh.h
+++ b/src/libigl/igl/cut_mesh.h
diff --git a/src/igl/cut_mesh_from_singularities.cpp b/src/libigl/igl/cut_mesh_from_singularities.cpp
index 382f2e063..382f2e063 100644
--- a/src/igl/cut_mesh_from_singularities.cpp
+++ b/src/libigl/igl/cut_mesh_from_singularities.cpp
diff --git a/src/igl/cut_mesh_from_singularities.h b/src/libigl/igl/cut_mesh_from_singularities.h
index 13b6a98c4..13b6a98c4 100644
--- a/src/igl/cut_mesh_from_singularities.h
+++ b/src/libigl/igl/cut_mesh_from_singularities.h
diff --git a/src/igl/cylinder.cpp b/src/libigl/igl/cylinder.cpp
index ab0fd4d3d..ab0fd4d3d 100644
--- a/src/igl/cylinder.cpp
+++ b/src/libigl/igl/cylinder.cpp
diff --git a/src/igl/cylinder.h b/src/libigl/igl/cylinder.h
index 4c5ab7e22..4c5ab7e22 100644
--- a/src/igl/cylinder.h
+++ b/src/libigl/igl/cylinder.h
diff --git a/src/igl/dated_copy.cpp b/src/libigl/igl/dated_copy.cpp
index 735de6fc4..735de6fc4 100644
--- a/src/igl/dated_copy.cpp
+++ b/src/libigl/igl/dated_copy.cpp
diff --git a/src/igl/dated_copy.h b/src/libigl/igl/dated_copy.h
index 9fd9fd3c8..9fd9fd3c8 100644
--- a/src/igl/dated_copy.h
+++ b/src/libigl/igl/dated_copy.h
diff --git a/src/igl/decimate.cpp b/src/libigl/igl/decimate.cpp
index a531db2c5..a531db2c5 100644
--- a/src/igl/decimate.cpp
+++ b/src/libigl/igl/decimate.cpp
diff --git a/src/igl/decimate.h b/src/libigl/igl/decimate.h
index bdb19e81b..bdb19e81b 100644
--- a/src/igl/decimate.h
+++ b/src/libigl/igl/decimate.h
diff --git a/src/igl/deform_skeleton.cpp b/src/libigl/igl/deform_skeleton.cpp
index b9d120edd..b9d120edd 100644
--- a/src/igl/deform_skeleton.cpp
+++ b/src/libigl/igl/deform_skeleton.cpp
diff --git a/src/igl/deform_skeleton.h b/src/libigl/igl/deform_skeleton.h
index 340107b2f..340107b2f 100644
--- a/src/igl/deform_skeleton.h
+++ b/src/libigl/igl/deform_skeleton.h
diff --git a/src/igl/delaunay_triangulation.cpp b/src/libigl/igl/delaunay_triangulation.cpp
index 01669966b..01669966b 100644
--- a/src/igl/delaunay_triangulation.cpp
+++ b/src/libigl/igl/delaunay_triangulation.cpp
diff --git a/src/igl/delaunay_triangulation.h b/src/libigl/igl/delaunay_triangulation.h
index daeec9fad..daeec9fad 100644
--- a/src/igl/delaunay_triangulation.h
+++ b/src/libigl/igl/delaunay_triangulation.h
diff --git a/src/igl/deprecated.h b/src/libigl/igl/deprecated.h
index 52c72ba79..52c72ba79 100644
--- a/src/igl/deprecated.h
+++ b/src/libigl/igl/deprecated.h
diff --git a/src/igl/dfs.cpp b/src/libigl/igl/dfs.cpp
index 627fbc26d..627fbc26d 100644
--- a/src/igl/dfs.cpp
+++ b/src/libigl/igl/dfs.cpp
diff --git a/src/igl/dfs.h b/src/libigl/igl/dfs.h
index 5f3bf2ce6..5f3bf2ce6 100644
--- a/src/igl/dfs.h
+++ b/src/libigl/igl/dfs.h
diff --git a/src/igl/diag.cpp b/src/libigl/igl/diag.cpp
index d29382695..d29382695 100644
--- a/src/igl/diag.cpp
+++ b/src/libigl/igl/diag.cpp
diff --git a/src/igl/diag.h b/src/libigl/igl/diag.h
index 8001f01b6..8001f01b6 100644
--- a/src/igl/diag.h
+++ b/src/libigl/igl/diag.h
diff --git a/src/igl/dihedral_angles.cpp b/src/libigl/igl/dihedral_angles.cpp
index a04e6f840..a04e6f840 100644
--- a/src/igl/dihedral_angles.cpp
+++ b/src/libigl/igl/dihedral_angles.cpp
diff --git a/src/igl/dihedral_angles.h b/src/libigl/igl/dihedral_angles.h
index 92ac0f862..92ac0f862 100644
--- a/src/igl/dihedral_angles.h
+++ b/src/libigl/igl/dihedral_angles.h
diff --git a/src/igl/dijkstra.cpp b/src/libigl/igl/dijkstra.cpp
index ad92f1d7f..ad92f1d7f 100644
--- a/src/igl/dijkstra.cpp
+++ b/src/libigl/igl/dijkstra.cpp
diff --git a/src/igl/dijkstra.h b/src/libigl/igl/dijkstra.h
index 33af160bb..33af160bb 100644
--- a/src/igl/dijkstra.h
+++ b/src/libigl/igl/dijkstra.h
diff --git a/src/igl/directed_edge_orientations.cpp b/src/libigl/igl/directed_edge_orientations.cpp
index a3308bc98..a3308bc98 100644
--- a/src/igl/directed_edge_orientations.cpp
+++ b/src/libigl/igl/directed_edge_orientations.cpp
diff --git a/src/igl/directed_edge_orientations.h b/src/libigl/igl/directed_edge_orientations.h
index b6f047147..b6f047147 100644
--- a/src/igl/directed_edge_orientations.h
+++ b/src/libigl/igl/directed_edge_orientations.h
diff --git a/src/igl/directed_edge_parents.cpp b/src/libigl/igl/directed_edge_parents.cpp
index 52e6a41a4..52e6a41a4 100644
--- a/src/igl/directed_edge_parents.cpp
+++ b/src/libigl/igl/directed_edge_parents.cpp
diff --git a/src/igl/directed_edge_parents.h b/src/libigl/igl/directed_edge_parents.h
index bf42ab8f8..bf42ab8f8 100644
--- a/src/igl/directed_edge_parents.h
+++ b/src/libigl/igl/directed_edge_parents.h
diff --git a/src/igl/dirname.cpp b/src/libigl/igl/dirname.cpp
index 5dc49733a..5dc49733a 100644
--- a/src/igl/dirname.cpp
+++ b/src/libigl/igl/dirname.cpp
diff --git a/src/igl/dirname.h b/src/libigl/igl/dirname.h
index bf5a34a20..bf5a34a20 100644
--- a/src/igl/dirname.h
+++ b/src/libigl/igl/dirname.h
diff --git a/src/igl/dot.cpp b/src/libigl/igl/dot.cpp
index 38f191546..38f191546 100644
--- a/src/igl/dot.cpp
+++ b/src/libigl/igl/dot.cpp
diff --git a/src/igl/dot.h b/src/libigl/igl/dot.h
index 9494eac7b..9494eac7b 100644
--- a/src/igl/dot.h
+++ b/src/libigl/igl/dot.h
diff --git a/src/igl/dot_row.cpp b/src/libigl/igl/dot_row.cpp
index 6f6d57e06..6f6d57e06 100644
--- a/src/igl/dot_row.cpp
+++ b/src/libigl/igl/dot_row.cpp
diff --git a/src/igl/dot_row.h b/src/libigl/igl/dot_row.h
index 83d91aada..83d91aada 100644
--- a/src/igl/dot_row.h
+++ b/src/libigl/igl/dot_row.h
diff --git a/src/igl/doublearea.cpp b/src/libigl/igl/doublearea.cpp
index 3cfc41b86..3cfc41b86 100644
--- a/src/igl/doublearea.cpp
+++ b/src/libigl/igl/doublearea.cpp
diff --git a/src/igl/doublearea.h b/src/libigl/igl/doublearea.h
index 95c151508..95c151508 100644
--- a/src/igl/doublearea.h
+++ b/src/libigl/igl/doublearea.h
diff --git a/src/igl/dqs.cpp b/src/libigl/igl/dqs.cpp
index aab3c6532..aab3c6532 100644
--- a/src/igl/dqs.cpp
+++ b/src/libigl/igl/dqs.cpp
diff --git a/src/igl/dqs.h b/src/libigl/igl/dqs.h
index 9b53ae1c7..9b53ae1c7 100644
--- a/src/igl/dqs.h
+++ b/src/libigl/igl/dqs.h
diff --git a/src/igl/ears.cpp b/src/libigl/igl/ears.cpp
index 81576c321..81576c321 100644
--- a/src/igl/ears.cpp
+++ b/src/libigl/igl/ears.cpp
diff --git a/src/igl/ears.h b/src/libigl/igl/ears.h
index b7c51ec66..b7c51ec66 100644
--- a/src/igl/ears.h
+++ b/src/libigl/igl/ears.h
diff --git a/src/igl/edge_collapse_is_valid.cpp b/src/libigl/igl/edge_collapse_is_valid.cpp
index 0c613b7a3..0c613b7a3 100644
--- a/src/igl/edge_collapse_is_valid.cpp
+++ b/src/libigl/igl/edge_collapse_is_valid.cpp
diff --git a/src/igl/edge_collapse_is_valid.h b/src/libigl/igl/edge_collapse_is_valid.h
index 194aaad6c..194aaad6c 100644
--- a/src/igl/edge_collapse_is_valid.h
+++ b/src/libigl/igl/edge_collapse_is_valid.h
diff --git a/src/igl/edge_flaps.cpp b/src/libigl/igl/edge_flaps.cpp
index 88c515864..88c515864 100644
--- a/src/igl/edge_flaps.cpp
+++ b/src/libigl/igl/edge_flaps.cpp
diff --git a/src/igl/edge_flaps.h b/src/libigl/igl/edge_flaps.h
index 03ad6eb3d..03ad6eb3d 100644
--- a/src/igl/edge_flaps.h
+++ b/src/libigl/igl/edge_flaps.h
diff --git a/src/igl/edge_lengths.cpp b/src/libigl/igl/edge_lengths.cpp
index 02dbae768..02dbae768 100644
--- a/src/igl/edge_lengths.cpp
+++ b/src/libigl/igl/edge_lengths.cpp
diff --git a/src/igl/edge_lengths.h b/src/libigl/igl/edge_lengths.h
index 30dc3474b..30dc3474b 100644
--- a/src/igl/edge_lengths.h
+++ b/src/libigl/igl/edge_lengths.h
diff --git a/src/igl/edge_topology.cpp b/src/libigl/igl/edge_topology.cpp
index 78147d056..78147d056 100644
--- a/src/igl/edge_topology.cpp
+++ b/src/libigl/igl/edge_topology.cpp
diff --git a/src/igl/edge_topology.h b/src/libigl/igl/edge_topology.h
index b7a41c597..b7a41c597 100644
--- a/src/igl/edge_topology.h
+++ b/src/libigl/igl/edge_topology.h
diff --git a/src/igl/edges.cpp b/src/libigl/igl/edges.cpp
index 3d762d410..3d762d410 100644
--- a/src/igl/edges.cpp
+++ b/src/libigl/igl/edges.cpp
diff --git a/src/igl/edges.h b/src/libigl/igl/edges.h
index fa3405263..fa3405263 100644
--- a/src/igl/edges.h
+++ b/src/libigl/igl/edges.h
diff --git a/src/igl/edges_to_path.cpp b/src/libigl/igl/edges_to_path.cpp
index 14cd895bc..14cd895bc 100644
--- a/src/igl/edges_to_path.cpp
+++ b/src/libigl/igl/edges_to_path.cpp
diff --git a/src/igl/edges_to_path.h b/src/libigl/igl/edges_to_path.h
index 403e7029a..403e7029a 100644
--- a/src/igl/edges_to_path.h
+++ b/src/libigl/igl/edges_to_path.h
diff --git a/src/igl/eigs.cpp b/src/libigl/igl/eigs.cpp
index 1fd440ddd..1fd440ddd 100755
--- a/src/igl/eigs.cpp
+++ b/src/libigl/igl/eigs.cpp
diff --git a/src/igl/eigs.h b/src/libigl/igl/eigs.h
index 3b376379c..3b376379c 100644
--- a/src/igl/eigs.h
+++ b/src/libigl/igl/eigs.h
diff --git a/src/igl/embree/EmbreeIntersector.h b/src/libigl/igl/embree/EmbreeIntersector.h
index ec59c0a1a..ec59c0a1a 100644
--- a/src/igl/embree/EmbreeIntersector.h
+++ b/src/libigl/igl/embree/EmbreeIntersector.h
diff --git a/src/igl/embree/Embree_convenience.h b/src/libigl/igl/embree/Embree_convenience.h
index d654fb786..d654fb786 100644
--- a/src/igl/embree/Embree_convenience.h
+++ b/src/libigl/igl/embree/Embree_convenience.h
diff --git a/src/igl/embree/ambient_occlusion.cpp b/src/libigl/igl/embree/ambient_occlusion.cpp
index d19aa9c46..d19aa9c46 100644
--- a/src/igl/embree/ambient_occlusion.cpp
+++ b/src/libigl/igl/embree/ambient_occlusion.cpp
diff --git a/src/igl/embree/ambient_occlusion.h b/src/libigl/igl/embree/ambient_occlusion.h
index 6df3a53ee..6df3a53ee 100644
--- a/src/igl/embree/ambient_occlusion.h
+++ b/src/libigl/igl/embree/ambient_occlusion.h
diff --git a/src/igl/embree/bone_heat.cpp b/src/libigl/igl/embree/bone_heat.cpp
index 8a85af98c..8a85af98c 100644
--- a/src/igl/embree/bone_heat.cpp
+++ b/src/libigl/igl/embree/bone_heat.cpp
diff --git a/src/igl/embree/bone_heat.h b/src/libigl/igl/embree/bone_heat.h
index 97c6500eb..97c6500eb 100644
--- a/src/igl/embree/bone_heat.h
+++ b/src/libigl/igl/embree/bone_heat.h
diff --git a/src/igl/embree/bone_visible.cpp b/src/libigl/igl/embree/bone_visible.cpp
index 4f2fe9126..4f2fe9126 100644
--- a/src/igl/embree/bone_visible.cpp
+++ b/src/libigl/igl/embree/bone_visible.cpp
diff --git a/src/igl/embree/bone_visible.h b/src/libigl/igl/embree/bone_visible.h
index 1e490b51d..1e490b51d 100644
--- a/src/igl/embree/bone_visible.h
+++ b/src/libigl/igl/embree/bone_visible.h
diff --git a/src/igl/embree/embree2/rtcore.h b/src/libigl/igl/embree/embree2/rtcore.h
index fb24757a9..fb24757a9 100644
--- a/src/igl/embree/embree2/rtcore.h
+++ b/src/libigl/igl/embree/embree2/rtcore.h
diff --git a/src/igl/embree/embree2/rtcore.isph b/src/libigl/igl/embree/embree2/rtcore.isph
index f46f05252..f46f05252 100644
--- a/src/igl/embree/embree2/rtcore.isph
+++ b/src/libigl/igl/embree/embree2/rtcore.isph
diff --git a/src/igl/embree/embree2/rtcore_geometry.h b/src/libigl/igl/embree/embree2/rtcore_geometry.h
index 5b80130fc..5b80130fc 100644
--- a/src/igl/embree/embree2/rtcore_geometry.h
+++ b/src/libigl/igl/embree/embree2/rtcore_geometry.h
diff --git a/src/igl/embree/embree2/rtcore_geometry.isph b/src/libigl/igl/embree/embree2/rtcore_geometry.isph
index b2fa68cfc..b2fa68cfc 100644
--- a/src/igl/embree/embree2/rtcore_geometry.isph
+++ b/src/libigl/igl/embree/embree2/rtcore_geometry.isph
diff --git a/src/igl/embree/embree2/rtcore_geometry_user.h b/src/libigl/igl/embree/embree2/rtcore_geometry_user.h
index e4b4d4b8a..e4b4d4b8a 100644
--- a/src/igl/embree/embree2/rtcore_geometry_user.h
+++ b/src/libigl/igl/embree/embree2/rtcore_geometry_user.h
diff --git a/src/igl/embree/embree2/rtcore_geometry_user.isph b/src/libigl/igl/embree/embree2/rtcore_geometry_user.isph
index d89ec1b91..d89ec1b91 100644
--- a/src/igl/embree/embree2/rtcore_geometry_user.isph
+++ b/src/libigl/igl/embree/embree2/rtcore_geometry_user.isph
diff --git a/src/igl/embree/embree2/rtcore_ray.h b/src/libigl/igl/embree/embree2/rtcore_ray.h
index f20b11b5f..f20b11b5f 100644
--- a/src/igl/embree/embree2/rtcore_ray.h
+++ b/src/libigl/igl/embree/embree2/rtcore_ray.h
diff --git a/src/igl/embree/embree2/rtcore_ray.isph b/src/libigl/igl/embree/embree2/rtcore_ray.isph
index f1bf4d268..f1bf4d268 100644
--- a/src/igl/embree/embree2/rtcore_ray.isph
+++ b/src/libigl/igl/embree/embree2/rtcore_ray.isph
diff --git a/src/igl/embree/embree2/rtcore_scene.h b/src/libigl/igl/embree/embree2/rtcore_scene.h
index df04e0a2b..df04e0a2b 100644
--- a/src/igl/embree/embree2/rtcore_scene.h
+++ b/src/libigl/igl/embree/embree2/rtcore_scene.h
diff --git a/src/igl/embree/embree2/rtcore_scene.isph b/src/libigl/igl/embree/embree2/rtcore_scene.isph
index a85eee219..a85eee219 100644
--- a/src/igl/embree/embree2/rtcore_scene.isph
+++ b/src/libigl/igl/embree/embree2/rtcore_scene.isph
diff --git a/src/igl/embree/line_mesh_intersection.cpp b/src/libigl/igl/embree/line_mesh_intersection.cpp
index 0f6e02b8c..0f6e02b8c 100644
--- a/src/igl/embree/line_mesh_intersection.cpp
+++ b/src/libigl/igl/embree/line_mesh_intersection.cpp
diff --git a/src/igl/embree/line_mesh_intersection.h b/src/libigl/igl/embree/line_mesh_intersection.h
index b7b849c8a..b7b849c8a 100644
--- a/src/igl/embree/line_mesh_intersection.h
+++ b/src/libigl/igl/embree/line_mesh_intersection.h
diff --git a/src/igl/embree/reorient_facets_raycast.cpp b/src/libigl/igl/embree/reorient_facets_raycast.cpp
index fabc021d9..fabc021d9 100644
--- a/src/igl/embree/reorient_facets_raycast.cpp
+++ b/src/libigl/igl/embree/reorient_facets_raycast.cpp
diff --git a/src/igl/embree/reorient_facets_raycast.h b/src/libigl/igl/embree/reorient_facets_raycast.h
index a43efac94..a43efac94 100644
--- a/src/igl/embree/reorient_facets_raycast.h
+++ b/src/libigl/igl/embree/reorient_facets_raycast.h
diff --git a/src/igl/embree/shape_diameter_function.cpp b/src/libigl/igl/embree/shape_diameter_function.cpp
index 3b0be489e..3b0be489e 100644
--- a/src/igl/embree/shape_diameter_function.cpp
+++ b/src/libigl/igl/embree/shape_diameter_function.cpp
diff --git a/src/igl/embree/shape_diameter_function.h b/src/libigl/igl/embree/shape_diameter_function.h
index c18922d28..c18922d28 100644
--- a/src/igl/embree/shape_diameter_function.h
+++ b/src/libigl/igl/embree/shape_diameter_function.h
diff --git a/src/igl/embree/unproject_in_mesh.cpp b/src/libigl/igl/embree/unproject_in_mesh.cpp
index 79a24a0ab..79a24a0ab 100644
--- a/src/igl/embree/unproject_in_mesh.cpp
+++ b/src/libigl/igl/embree/unproject_in_mesh.cpp
diff --git a/src/igl/embree/unproject_in_mesh.h b/src/libigl/igl/embree/unproject_in_mesh.h
index 707c1e625..707c1e625 100644
--- a/src/igl/embree/unproject_in_mesh.h
+++ b/src/libigl/igl/embree/unproject_in_mesh.h
diff --git a/src/igl/embree/unproject_onto_mesh.cpp b/src/libigl/igl/embree/unproject_onto_mesh.cpp
index a9d336690..a9d336690 100644
--- a/src/igl/embree/unproject_onto_mesh.cpp
+++ b/src/libigl/igl/embree/unproject_onto_mesh.cpp
diff --git a/src/igl/embree/unproject_onto_mesh.h b/src/libigl/igl/embree/unproject_onto_mesh.h
index db0a2e0cb..db0a2e0cb 100644
--- a/src/igl/embree/unproject_onto_mesh.h
+++ b/src/libigl/igl/embree/unproject_onto_mesh.h
diff --git a/src/igl/euler_characteristic.cpp b/src/libigl/igl/euler_characteristic.cpp
index ab7eba22b..ab7eba22b 100644
--- a/src/igl/euler_characteristic.cpp
+++ b/src/libigl/igl/euler_characteristic.cpp
diff --git a/src/igl/euler_characteristic.h b/src/libigl/igl/euler_characteristic.h
index f4c0c0a0f..f4c0c0a0f 100644
--- a/src/igl/euler_characteristic.h
+++ b/src/libigl/igl/euler_characteristic.h
diff --git a/src/igl/exact_geodesic.cpp b/src/libigl/igl/exact_geodesic.cpp
index e20783b88..e20783b88 100644
--- a/src/igl/exact_geodesic.cpp
+++ b/src/libigl/igl/exact_geodesic.cpp
diff --git a/src/igl/exact_geodesic.h b/src/libigl/igl/exact_geodesic.h
index cec59de69..cec59de69 100644
--- a/src/igl/exact_geodesic.h
+++ b/src/libigl/igl/exact_geodesic.h
diff --git a/src/igl/example_fun.cpp b/src/libigl/igl/example_fun.cpp
index 9796c68e3..9796c68e3 100644
--- a/src/igl/example_fun.cpp
+++ b/src/libigl/igl/example_fun.cpp
diff --git a/src/igl/example_fun.h b/src/libigl/igl/example_fun.h
index 16c9ec645..16c9ec645 100644
--- a/src/igl/example_fun.h
+++ b/src/libigl/igl/example_fun.h
diff --git a/src/igl/exterior_edges.cpp b/src/libigl/igl/exterior_edges.cpp
index 04c1e9b8a..04c1e9b8a 100644
--- a/src/igl/exterior_edges.cpp
+++ b/src/libigl/igl/exterior_edges.cpp
diff --git a/src/igl/exterior_edges.h b/src/libigl/igl/exterior_edges.h
index 8ce80e67b..8ce80e67b 100644
--- a/src/igl/exterior_edges.h
+++ b/src/libigl/igl/exterior_edges.h
diff --git a/src/igl/extract_manifold_patches.cpp b/src/libigl/igl/extract_manifold_patches.cpp
index 92269e2c8..92269e2c8 100644
--- a/src/igl/extract_manifold_patches.cpp
+++ b/src/libigl/igl/extract_manifold_patches.cpp
diff --git a/src/igl/extract_manifold_patches.h b/src/libigl/igl/extract_manifold_patches.h
index 6bc25d537..6bc25d537 100644
--- a/src/igl/extract_manifold_patches.h
+++ b/src/libigl/igl/extract_manifold_patches.h
diff --git a/src/igl/extract_non_manifold_edge_curves.cpp b/src/libigl/igl/extract_non_manifold_edge_curves.cpp
index c4a5274a6..c4a5274a6 100644
--- a/src/igl/extract_non_manifold_edge_curves.cpp
+++ b/src/libigl/igl/extract_non_manifold_edge_curves.cpp
diff --git a/src/igl/extract_non_manifold_edge_curves.h b/src/libigl/igl/extract_non_manifold_edge_curves.h
index 173e0c5a2..173e0c5a2 100644
--- a/src/igl/extract_non_manifold_edge_curves.h
+++ b/src/libigl/igl/extract_non_manifold_edge_curves.h
diff --git a/src/igl/face_areas.cpp b/src/libigl/igl/face_areas.cpp
index 74bf7fce0..74bf7fce0 100644
--- a/src/igl/face_areas.cpp
+++ b/src/libigl/igl/face_areas.cpp
diff --git a/src/igl/face_areas.h b/src/libigl/igl/face_areas.h
index 9676deadc..9676deadc 100644
--- a/src/igl/face_areas.h
+++ b/src/libigl/igl/face_areas.h
diff --git a/src/igl/face_occurrences.cpp b/src/libigl/igl/face_occurrences.cpp
index 4ef43f822..4ef43f822 100644
--- a/src/igl/face_occurrences.cpp
+++ b/src/libigl/igl/face_occurrences.cpp
diff --git a/src/igl/face_occurrences.h b/src/libigl/igl/face_occurrences.h
index de47b504c..de47b504c 100644
--- a/src/igl/face_occurrences.h
+++ b/src/libigl/igl/face_occurrences.h
diff --git a/src/igl/faces_first.cpp b/src/libigl/igl/faces_first.cpp
index 9c0fa0d0b..9c0fa0d0b 100644
--- a/src/igl/faces_first.cpp
+++ b/src/libigl/igl/faces_first.cpp
diff --git a/src/igl/faces_first.h b/src/libigl/igl/faces_first.h
index 92d1d5565..92d1d5565 100644
--- a/src/igl/faces_first.h
+++ b/src/libigl/igl/faces_first.h
diff --git a/src/igl/facet_components.cpp b/src/libigl/igl/facet_components.cpp
index 9df7583e3..9df7583e3 100644
--- a/src/igl/facet_components.cpp
+++ b/src/libigl/igl/facet_components.cpp
diff --git a/src/igl/facet_components.h b/src/libigl/igl/facet_components.h
index 8fe28583c..8fe28583c 100644
--- a/src/igl/facet_components.h
+++ b/src/libigl/igl/facet_components.h
diff --git a/src/igl/false_barycentric_subdivision.cpp b/src/libigl/igl/false_barycentric_subdivision.cpp
index 8ea807a50..8ea807a50 100644
--- a/src/igl/false_barycentric_subdivision.cpp
+++ b/src/libigl/igl/false_barycentric_subdivision.cpp
diff --git a/src/igl/false_barycentric_subdivision.h b/src/libigl/igl/false_barycentric_subdivision.h
index 98426b572..98426b572 100644
--- a/src/igl/false_barycentric_subdivision.h
+++ b/src/libigl/igl/false_barycentric_subdivision.h
diff --git a/src/igl/fast_winding_number.cpp b/src/libigl/igl/fast_winding_number.cpp
index a69785feb..a69785feb 100644
--- a/src/igl/fast_winding_number.cpp
+++ b/src/libigl/igl/fast_winding_number.cpp
diff --git a/src/igl/fast_winding_number.h b/src/libigl/igl/fast_winding_number.h
index 6d4bc1ed7..6d4bc1ed7 100644
--- a/src/igl/fast_winding_number.h
+++ b/src/libigl/igl/fast_winding_number.h
diff --git a/src/igl/file_contents_as_string.cpp b/src/libigl/igl/file_contents_as_string.cpp
index fd945dff2..fd945dff2 100644
--- a/src/igl/file_contents_as_string.cpp
+++ b/src/libigl/igl/file_contents_as_string.cpp
diff --git a/src/igl/file_contents_as_string.h b/src/libigl/igl/file_contents_as_string.h
index 22ce1fc53..22ce1fc53 100644
--- a/src/igl/file_contents_as_string.h
+++ b/src/libigl/igl/file_contents_as_string.h
diff --git a/src/igl/file_dialog_open.cpp b/src/libigl/igl/file_dialog_open.cpp
index 66c2aca0e..66c2aca0e 100644
--- a/src/igl/file_dialog_open.cpp
+++ b/src/libigl/igl/file_dialog_open.cpp
diff --git a/src/igl/file_dialog_open.h b/src/libigl/igl/file_dialog_open.h
index 1b17ea4c6..1b17ea4c6 100644
--- a/src/igl/file_dialog_open.h
+++ b/src/libigl/igl/file_dialog_open.h
diff --git a/src/igl/file_dialog_save.cpp b/src/libigl/igl/file_dialog_save.cpp
index 90687fa5c..90687fa5c 100644
--- a/src/igl/file_dialog_save.cpp
+++ b/src/libigl/igl/file_dialog_save.cpp
diff --git a/src/igl/file_dialog_save.h b/src/libigl/igl/file_dialog_save.h
index f04075758..f04075758 100644
--- a/src/igl/file_dialog_save.h
+++ b/src/libigl/igl/file_dialog_save.h
diff --git a/src/igl/file_exists.cpp b/src/libigl/igl/file_exists.cpp
index f1a30630b..f1a30630b 100644
--- a/src/igl/file_exists.cpp
+++ b/src/libigl/igl/file_exists.cpp
diff --git a/src/igl/file_exists.h b/src/libigl/igl/file_exists.h
index e011d977e..e011d977e 100644
--- a/src/igl/file_exists.h
+++ b/src/libigl/igl/file_exists.h
diff --git a/src/igl/find.cpp b/src/libigl/igl/find.cpp
index 65e7580ca..65e7580ca 100644
--- a/src/igl/find.cpp
+++ b/src/libigl/igl/find.cpp
diff --git a/src/igl/find.h b/src/libigl/igl/find.h
index 85eb65770..85eb65770 100644
--- a/src/igl/find.h
+++ b/src/libigl/igl/find.h
diff --git a/src/igl/find_cross_field_singularities.cpp b/src/libigl/igl/find_cross_field_singularities.cpp
index 31a5bb714..31a5bb714 100644
--- a/src/igl/find_cross_field_singularities.cpp
+++ b/src/libigl/igl/find_cross_field_singularities.cpp
diff --git a/src/igl/find_cross_field_singularities.h b/src/libigl/igl/find_cross_field_singularities.h
index caded2019..caded2019 100644
--- a/src/igl/find_cross_field_singularities.h
+++ b/src/libigl/igl/find_cross_field_singularities.h
diff --git a/src/igl/find_zero.cpp b/src/libigl/igl/find_zero.cpp
index d0a7b35e6..d0a7b35e6 100644
--- a/src/igl/find_zero.cpp
+++ b/src/libigl/igl/find_zero.cpp
diff --git a/src/igl/find_zero.h b/src/libigl/igl/find_zero.h
index 0739be1cf..0739be1cf 100644
--- a/src/igl/find_zero.h
+++ b/src/libigl/igl/find_zero.h
diff --git a/src/igl/fit_plane.cpp b/src/libigl/igl/fit_plane.cpp
index 83f11738f..83f11738f 100644
--- a/src/igl/fit_plane.cpp
+++ b/src/libigl/igl/fit_plane.cpp
diff --git a/src/igl/fit_plane.h b/src/libigl/igl/fit_plane.h
index f69ce811b..f69ce811b 100644
--- a/src/igl/fit_plane.h
+++ b/src/libigl/igl/fit_plane.h
diff --git a/src/igl/fit_rotations.cpp b/src/libigl/igl/fit_rotations.cpp
index 927e8992e..927e8992e 100644
--- a/src/igl/fit_rotations.cpp
+++ b/src/libigl/igl/fit_rotations.cpp
diff --git a/src/igl/fit_rotations.h b/src/libigl/igl/fit_rotations.h
index 1a18fd322..1a18fd322 100644
--- a/src/igl/fit_rotations.h
+++ b/src/libigl/igl/fit_rotations.h
diff --git a/src/igl/flip_avoiding_line_search.cpp b/src/libigl/igl/flip_avoiding_line_search.cpp
index 8554303c2..8554303c2 100644
--- a/src/igl/flip_avoiding_line_search.cpp
+++ b/src/libigl/igl/flip_avoiding_line_search.cpp
diff --git a/src/igl/flip_avoiding_line_search.h b/src/libigl/igl/flip_avoiding_line_search.h
index 29eb9dee0..29eb9dee0 100644
--- a/src/igl/flip_avoiding_line_search.h
+++ b/src/libigl/igl/flip_avoiding_line_search.h
diff --git a/src/igl/flip_edge.cpp b/src/libigl/igl/flip_edge.cpp
index b34581449..b34581449 100644
--- a/src/igl/flip_edge.cpp
+++ b/src/libigl/igl/flip_edge.cpp
diff --git a/src/igl/flip_edge.h b/src/libigl/igl/flip_edge.h
index 3c43198a6..3c43198a6 100644
--- a/src/igl/flip_edge.h
+++ b/src/libigl/igl/flip_edge.h
diff --git a/src/igl/flipped_triangles.cpp b/src/libigl/igl/flipped_triangles.cpp
index ea76e5c84..ea76e5c84 100644
--- a/src/igl/flipped_triangles.cpp
+++ b/src/libigl/igl/flipped_triangles.cpp
diff --git a/src/igl/flipped_triangles.h b/src/libigl/igl/flipped_triangles.h
index b06d9329b..b06d9329b 100644
--- a/src/igl/flipped_triangles.h
+++ b/src/libigl/igl/flipped_triangles.h
diff --git a/src/igl/flood_fill.cpp b/src/libigl/igl/flood_fill.cpp
index a6c91361d..a6c91361d 100644
--- a/src/igl/flood_fill.cpp
+++ b/src/libigl/igl/flood_fill.cpp
diff --git a/src/igl/flood_fill.h b/src/libigl/igl/flood_fill.h
index 7eef01b3c..7eef01b3c 100644
--- a/src/igl/flood_fill.h
+++ b/src/libigl/igl/flood_fill.h
diff --git a/src/igl/floor.cpp b/src/libigl/igl/floor.cpp
index 7538b7e01..7538b7e01 100644
--- a/src/igl/floor.cpp
+++ b/src/libigl/igl/floor.cpp
diff --git a/src/igl/floor.h b/src/libigl/igl/floor.h
index a84d52068..a84d52068 100644
--- a/src/igl/floor.h
+++ b/src/libigl/igl/floor.h
diff --git a/src/igl/for_each.h b/src/libigl/igl/for_each.h
index 6ba03ba1c..6ba03ba1c 100644
--- a/src/igl/for_each.h
+++ b/src/libigl/igl/for_each.h
diff --git a/src/igl/forward_kinematics.cpp b/src/libigl/igl/forward_kinematics.cpp
index c473453c9..c473453c9 100644
--- a/src/igl/forward_kinematics.cpp
+++ b/src/libigl/igl/forward_kinematics.cpp
diff --git a/src/igl/forward_kinematics.h b/src/libigl/igl/forward_kinematics.h
index 2b3d2db6d..2b3d2db6d 100644
--- a/src/igl/forward_kinematics.h
+++ b/src/libigl/igl/forward_kinematics.h
diff --git a/src/igl/frame_field_deformer.cpp b/src/libigl/igl/frame_field_deformer.cpp
index c22200f1b..c22200f1b 100644
--- a/src/igl/frame_field_deformer.cpp
+++ b/src/libigl/igl/frame_field_deformer.cpp
diff --git a/src/igl/frame_field_deformer.h b/src/libigl/igl/frame_field_deformer.h
index 02a5b9ea2..02a5b9ea2 100644
--- a/src/igl/frame_field_deformer.h
+++ b/src/libigl/igl/frame_field_deformer.h
diff --git a/src/igl/frame_to_cross_field.cpp b/src/libigl/igl/frame_to_cross_field.cpp
index e4d6bc713..e4d6bc713 100644
--- a/src/igl/frame_to_cross_field.cpp
+++ b/src/libigl/igl/frame_to_cross_field.cpp
diff --git a/src/igl/frame_to_cross_field.h b/src/libigl/igl/frame_to_cross_field.h
index f9bdd3d5f..f9bdd3d5f 100644
--- a/src/igl/frame_to_cross_field.h
+++ b/src/libigl/igl/frame_to_cross_field.h
diff --git a/src/igl/frustum.cpp b/src/libigl/igl/frustum.cpp
index 2926106e6..2926106e6 100644
--- a/src/igl/frustum.cpp
+++ b/src/libigl/igl/frustum.cpp
diff --git a/src/igl/frustum.h b/src/libigl/igl/frustum.h
index 4a92e1a81..4a92e1a81 100644
--- a/src/igl/frustum.h
+++ b/src/libigl/igl/frustum.h
diff --git a/src/igl/gaussian_curvature.cpp b/src/libigl/igl/gaussian_curvature.cpp
index ca05129df..ca05129df 100644
--- a/src/igl/gaussian_curvature.cpp
+++ b/src/libigl/igl/gaussian_curvature.cpp
diff --git a/src/igl/gaussian_curvature.h b/src/libigl/igl/gaussian_curvature.h
index d8ddbc8ad..d8ddbc8ad 100644
--- a/src/igl/gaussian_curvature.h
+++ b/src/libigl/igl/gaussian_curvature.h
diff --git a/src/igl/get_seconds.cpp b/src/libigl/igl/get_seconds.cpp
index fac4a3a69..fac4a3a69 100644
--- a/src/igl/get_seconds.cpp
+++ b/src/libigl/igl/get_seconds.cpp
diff --git a/src/igl/get_seconds.h b/src/libigl/igl/get_seconds.h
index 411d6e41d..411d6e41d 100644
--- a/src/igl/get_seconds.h
+++ b/src/libigl/igl/get_seconds.h
diff --git a/src/igl/get_seconds_hires.cpp b/src/libigl/igl/get_seconds_hires.cpp
index 15f26dc9e..15f26dc9e 100644
--- a/src/igl/get_seconds_hires.cpp
+++ b/src/libigl/igl/get_seconds_hires.cpp
diff --git a/src/igl/get_seconds_hires.h b/src/libigl/igl/get_seconds_hires.h
index abe8956b5..abe8956b5 100644
--- a/src/igl/get_seconds_hires.h
+++ b/src/libigl/igl/get_seconds_hires.h
diff --git a/src/igl/grad.cpp b/src/libigl/igl/grad.cpp
index cc86e9e81..cc86e9e81 100644
--- a/src/igl/grad.cpp
+++ b/src/libigl/igl/grad.cpp
diff --git a/src/igl/grad.h b/src/libigl/igl/grad.h
index df375ba61..df375ba61 100644
--- a/src/igl/grad.h
+++ b/src/libigl/igl/grad.h
diff --git a/src/igl/grid.cpp b/src/libigl/igl/grid.cpp
index f572a0571..f572a0571 100644
--- a/src/igl/grid.cpp
+++ b/src/libigl/igl/grid.cpp
diff --git a/src/igl/grid.h b/src/libigl/igl/grid.h
index 27894f628..27894f628 100644
--- a/src/igl/grid.h
+++ b/src/libigl/igl/grid.h
diff --git a/src/igl/grid_search.cpp b/src/libigl/igl/grid_search.cpp
index 93cbc0dde..93cbc0dde 100644
--- a/src/igl/grid_search.cpp
+++ b/src/libigl/igl/grid_search.cpp
diff --git a/src/igl/grid_search.h b/src/libigl/igl/grid_search.h
index 83a86663e..83a86663e 100644
--- a/src/igl/grid_search.h
+++ b/src/libigl/igl/grid_search.h
diff --git a/src/igl/group_sum_matrix.cpp b/src/libigl/igl/group_sum_matrix.cpp
index d3cf0bff2..d3cf0bff2 100644
--- a/src/igl/group_sum_matrix.cpp
+++ b/src/libigl/igl/group_sum_matrix.cpp
diff --git a/src/igl/group_sum_matrix.h b/src/libigl/igl/group_sum_matrix.h
index 805544b0b..805544b0b 100644
--- a/src/igl/group_sum_matrix.h
+++ b/src/libigl/igl/group_sum_matrix.h
diff --git a/src/igl/guess_extension.cpp b/src/libigl/igl/guess_extension.cpp
index 8e8e449a1..8e8e449a1 100644
--- a/src/igl/guess_extension.cpp
+++ b/src/libigl/igl/guess_extension.cpp
diff --git a/src/igl/guess_extension.h b/src/libigl/igl/guess_extension.h
index 77df6f523..77df6f523 100644
--- a/src/igl/guess_extension.h
+++ b/src/libigl/igl/guess_extension.h
diff --git a/src/igl/harmonic.cpp b/src/libigl/igl/harmonic.cpp
index aa07245a1..aa07245a1 100644
--- a/src/igl/harmonic.cpp
+++ b/src/libigl/igl/harmonic.cpp
diff --git a/src/igl/harmonic.h b/src/libigl/igl/harmonic.h
index 1a48ecfb5..1a48ecfb5 100644
--- a/src/igl/harmonic.h
+++ b/src/libigl/igl/harmonic.h
diff --git a/src/igl/harwell_boeing.cpp b/src/libigl/igl/harwell_boeing.cpp
index 895416510..895416510 100644
--- a/src/igl/harwell_boeing.cpp
+++ b/src/libigl/igl/harwell_boeing.cpp
diff --git a/src/igl/harwell_boeing.h b/src/libigl/igl/harwell_boeing.h
index df166ab82..df166ab82 100644
--- a/src/igl/harwell_boeing.h
+++ b/src/libigl/igl/harwell_boeing.h
diff --git a/src/igl/hausdorff.cpp b/src/libigl/igl/hausdorff.cpp
index 9b1ad4743..9b1ad4743 100644
--- a/src/igl/hausdorff.cpp
+++ b/src/libigl/igl/hausdorff.cpp
diff --git a/src/igl/hausdorff.h b/src/libigl/igl/hausdorff.h
index 92e22b333..92e22b333 100644
--- a/src/igl/hausdorff.h
+++ b/src/libigl/igl/hausdorff.h
diff --git a/src/igl/hessian.cpp b/src/libigl/igl/hessian.cpp
index ebf81cd7d..ebf81cd7d 100644
--- a/src/igl/hessian.cpp
+++ b/src/libigl/igl/hessian.cpp
diff --git a/src/igl/hessian.h b/src/libigl/igl/hessian.h
index 360750d2c..360750d2c 100644
--- a/src/igl/hessian.h
+++ b/src/libigl/igl/hessian.h
diff --git a/src/igl/hessian_energy.cpp b/src/libigl/igl/hessian_energy.cpp
index fa0b10a7d..fa0b10a7d 100644
--- a/src/igl/hessian_energy.cpp
+++ b/src/libigl/igl/hessian_energy.cpp
diff --git a/src/igl/hessian_energy.h b/src/libigl/igl/hessian_energy.h
index e53373580..e53373580 100644
--- a/src/igl/hessian_energy.h
+++ b/src/libigl/igl/hessian_energy.h
diff --git a/src/igl/histc.cpp b/src/libigl/igl/histc.cpp
index 3f967b3be..3f967b3be 100644
--- a/src/igl/histc.cpp
+++ b/src/libigl/igl/histc.cpp
diff --git a/src/igl/histc.h b/src/libigl/igl/histc.h
index 2f0ed9135..2f0ed9135 100644
--- a/src/igl/histc.h
+++ b/src/libigl/igl/histc.h
diff --git a/src/igl/hsv_to_rgb.cpp b/src/libigl/igl/hsv_to_rgb.cpp
index a1727ff50..a1727ff50 100644
--- a/src/igl/hsv_to_rgb.cpp
+++ b/src/libigl/igl/hsv_to_rgb.cpp
diff --git a/src/igl/hsv_to_rgb.h b/src/libigl/igl/hsv_to_rgb.h
index aeb64d9d3..aeb64d9d3 100644
--- a/src/igl/hsv_to_rgb.h
+++ b/src/libigl/igl/hsv_to_rgb.h
diff --git a/src/igl/igl_inline.h b/src/libigl/igl/igl_inline.h
index 20c9630e4..20c9630e4 100644
--- a/src/igl/igl_inline.h
+++ b/src/libigl/igl/igl_inline.h
diff --git a/src/igl/in_element.cpp b/src/libigl/igl/in_element.cpp
index dcdfd8a89..dcdfd8a89 100644
--- a/src/igl/in_element.cpp
+++ b/src/libigl/igl/in_element.cpp
diff --git a/src/igl/in_element.h b/src/libigl/igl/in_element.h
index dcbc03aa6..dcbc03aa6 100644
--- a/src/igl/in_element.h
+++ b/src/libigl/igl/in_element.h
diff --git a/src/igl/infinite_cost_stopping_condition.cpp b/src/libigl/igl/infinite_cost_stopping_condition.cpp
index 033f2b678..033f2b678 100644
--- a/src/igl/infinite_cost_stopping_condition.cpp
+++ b/src/libigl/igl/infinite_cost_stopping_condition.cpp
diff --git a/src/igl/infinite_cost_stopping_condition.h b/src/libigl/igl/infinite_cost_stopping_condition.h
index d37e98025..d37e98025 100644
--- a/src/igl/infinite_cost_stopping_condition.h
+++ b/src/libigl/igl/infinite_cost_stopping_condition.h
diff --git a/src/igl/inradius.cpp b/src/libigl/igl/inradius.cpp
index d5a06ab50..d5a06ab50 100644
--- a/src/igl/inradius.cpp
+++ b/src/libigl/igl/inradius.cpp
diff --git a/src/igl/inradius.h b/src/libigl/igl/inradius.h
index 07166b4b9..07166b4b9 100644
--- a/src/igl/inradius.h
+++ b/src/libigl/igl/inradius.h
diff --git a/src/igl/internal_angles.cpp b/src/libigl/igl/internal_angles.cpp
index 5c6e8dfbe..5c6e8dfbe 100644
--- a/src/igl/internal_angles.cpp
+++ b/src/libigl/igl/internal_angles.cpp
diff --git a/src/igl/internal_angles.h b/src/libigl/igl/internal_angles.h
index 1dd990ed4..1dd990ed4 100644
--- a/src/igl/internal_angles.h
+++ b/src/libigl/igl/internal_angles.h
diff --git a/src/igl/intersect.cpp b/src/libigl/igl/intersect.cpp
index f930fc0be..f930fc0be 100644
--- a/src/igl/intersect.cpp
+++ b/src/libigl/igl/intersect.cpp
diff --git a/src/igl/intersect.h b/src/libigl/igl/intersect.h
index be4da91e5..be4da91e5 100644
--- a/src/igl/intersect.h
+++ b/src/libigl/igl/intersect.h
diff --git a/src/igl/invert_diag.cpp b/src/libigl/igl/invert_diag.cpp
index b87a8d5b4..b87a8d5b4 100644
--- a/src/igl/invert_diag.cpp
+++ b/src/libigl/igl/invert_diag.cpp
diff --git a/src/igl/invert_diag.h b/src/libigl/igl/invert_diag.h
index 2194b3f14..2194b3f14 100644
--- a/src/igl/invert_diag.h
+++ b/src/libigl/igl/invert_diag.h
diff --git a/src/igl/is_border_vertex.cpp b/src/libigl/igl/is_border_vertex.cpp
index a337609ae..a337609ae 100644
--- a/src/igl/is_border_vertex.cpp
+++ b/src/libigl/igl/is_border_vertex.cpp
diff --git a/src/igl/is_border_vertex.h b/src/libigl/igl/is_border_vertex.h
index 2e611ac11..2e611ac11 100644
--- a/src/igl/is_border_vertex.h
+++ b/src/libigl/igl/is_border_vertex.h
diff --git a/src/igl/is_boundary_edge.cpp b/src/libigl/igl/is_boundary_edge.cpp
index 679214bbc..679214bbc 100644
--- a/src/igl/is_boundary_edge.cpp
+++ b/src/libigl/igl/is_boundary_edge.cpp
diff --git a/src/igl/is_boundary_edge.h b/src/libigl/igl/is_boundary_edge.h
index f68ebb7e4..f68ebb7e4 100644
--- a/src/igl/is_boundary_edge.h
+++ b/src/libigl/igl/is_boundary_edge.h
diff --git a/src/igl/is_dir.cpp b/src/libigl/igl/is_dir.cpp
index e7346c1dd..e7346c1dd 100644
--- a/src/igl/is_dir.cpp
+++ b/src/libigl/igl/is_dir.cpp
diff --git a/src/igl/is_dir.h b/src/libigl/igl/is_dir.h
index 68e30a564..68e30a564 100644
--- a/src/igl/is_dir.h
+++ b/src/libigl/igl/is_dir.h
diff --git a/src/igl/is_edge_manifold.cpp b/src/libigl/igl/is_edge_manifold.cpp
index 1b106056e..1b106056e 100644
--- a/src/igl/is_edge_manifold.cpp
+++ b/src/libigl/igl/is_edge_manifold.cpp
diff --git a/src/igl/is_edge_manifold.h b/src/libigl/igl/is_edge_manifold.h
index 5832806ac..5832806ac 100644
--- a/src/igl/is_edge_manifold.h
+++ b/src/libigl/igl/is_edge_manifold.h
diff --git a/src/igl/is_file.cpp b/src/libigl/igl/is_file.cpp
index 6c040b86c..6c040b86c 100644
--- a/src/igl/is_file.cpp
+++ b/src/libigl/igl/is_file.cpp
diff --git a/src/igl/is_file.h b/src/libigl/igl/is_file.h
index 5610c7ff3..5610c7ff3 100644
--- a/src/igl/is_file.h
+++ b/src/libigl/igl/is_file.h
diff --git a/src/igl/is_irregular_vertex.cpp b/src/libigl/igl/is_irregular_vertex.cpp
index 34665d66f..34665d66f 100644
--- a/src/igl/is_irregular_vertex.cpp
+++ b/src/libigl/igl/is_irregular_vertex.cpp
diff --git a/src/igl/is_irregular_vertex.h b/src/libigl/igl/is_irregular_vertex.h
index e07e5ab70..e07e5ab70 100644
--- a/src/igl/is_irregular_vertex.h
+++ b/src/libigl/igl/is_irregular_vertex.h
diff --git a/src/igl/is_planar.cpp b/src/libigl/igl/is_planar.cpp
index 6058a03d4..6058a03d4 100644
--- a/src/igl/is_planar.cpp
+++ b/src/libigl/igl/is_planar.cpp
diff --git a/src/igl/is_planar.h b/src/libigl/igl/is_planar.h
index 645403da5..645403da5 100644
--- a/src/igl/is_planar.h
+++ b/src/libigl/igl/is_planar.h
diff --git a/src/igl/is_readable.cpp b/src/libigl/igl/is_readable.cpp
index eb5e95347..eb5e95347 100644
--- a/src/igl/is_readable.cpp
+++ b/src/libigl/igl/is_readable.cpp
diff --git a/src/igl/is_readable.h b/src/libigl/igl/is_readable.h
index 689701285..689701285 100644
--- a/src/igl/is_readable.h
+++ b/src/libigl/igl/is_readable.h
diff --git a/src/igl/is_sparse.cpp b/src/libigl/igl/is_sparse.cpp
index 507393d85..507393d85 100644
--- a/src/igl/is_sparse.cpp
+++ b/src/libigl/igl/is_sparse.cpp
diff --git a/src/igl/is_sparse.h b/src/libigl/igl/is_sparse.h
index 9547bb8e8..9547bb8e8 100644
--- a/src/igl/is_sparse.h
+++ b/src/libigl/igl/is_sparse.h
diff --git a/src/igl/is_stl.cpp b/src/libigl/igl/is_stl.cpp
index 240703616..240703616 100644
--- a/src/igl/is_stl.cpp
+++ b/src/libigl/igl/is_stl.cpp
diff --git a/src/igl/is_stl.h b/src/libigl/igl/is_stl.h
index e8f78df1a..e8f78df1a 100644
--- a/src/igl/is_stl.h
+++ b/src/libigl/igl/is_stl.h
diff --git a/src/igl/is_symmetric.cpp b/src/libigl/igl/is_symmetric.cpp
index f40473b66..f40473b66 100644
--- a/src/igl/is_symmetric.cpp
+++ b/src/libigl/igl/is_symmetric.cpp
diff --git a/src/igl/is_symmetric.h b/src/libigl/igl/is_symmetric.h
index 31725298e..31725298e 100644
--- a/src/igl/is_symmetric.h
+++ b/src/libigl/igl/is_symmetric.h
diff --git a/src/igl/is_vertex_manifold.cpp b/src/libigl/igl/is_vertex_manifold.cpp
index d266ebab7..d266ebab7 100644
--- a/src/igl/is_vertex_manifold.cpp
+++ b/src/libigl/igl/is_vertex_manifold.cpp
diff --git a/src/igl/is_vertex_manifold.h b/src/libigl/igl/is_vertex_manifold.h
index bf9caded6..bf9caded6 100644
--- a/src/igl/is_vertex_manifold.h
+++ b/src/libigl/igl/is_vertex_manifold.h
diff --git a/src/igl/is_writable.cpp b/src/libigl/igl/is_writable.cpp
index f266b0078..f266b0078 100644
--- a/src/igl/is_writable.cpp
+++ b/src/libigl/igl/is_writable.cpp
diff --git a/src/igl/is_writable.h b/src/libigl/igl/is_writable.h
index 8834e8afb..8834e8afb 100644
--- a/src/igl/is_writable.h
+++ b/src/libigl/igl/is_writable.h
diff --git a/src/igl/isdiag.cpp b/src/libigl/igl/isdiag.cpp
index 452341bf8..452341bf8 100644
--- a/src/igl/isdiag.cpp
+++ b/src/libigl/igl/isdiag.cpp
diff --git a/src/igl/isdiag.h b/src/libigl/igl/isdiag.h
index 2bd555fa3..2bd555fa3 100644
--- a/src/igl/isdiag.h
+++ b/src/libigl/igl/isdiag.h
diff --git a/src/igl/ismember.cpp b/src/libigl/igl/ismember.cpp
index e3c3fd492..e3c3fd492 100644
--- a/src/igl/ismember.cpp
+++ b/src/libigl/igl/ismember.cpp
diff --git a/src/igl/ismember.h b/src/libigl/igl/ismember.h
index 72be6006d..72be6006d 100644
--- a/src/igl/ismember.h
+++ b/src/libigl/igl/ismember.h
diff --git a/src/igl/isolines.cpp b/src/libigl/igl/isolines.cpp
index 6d4f87e32..6d4f87e32 100644
--- a/src/igl/isolines.cpp
+++ b/src/libigl/igl/isolines.cpp
diff --git a/src/igl/isolines.h b/src/libigl/igl/isolines.h
index 3b5199b6a..3b5199b6a 100644
--- a/src/igl/isolines.h
+++ b/src/libigl/igl/isolines.h
diff --git a/src/igl/jet.cpp b/src/libigl/igl/jet.cpp
index 373f23bcb..373f23bcb 100644
--- a/src/igl/jet.cpp
+++ b/src/libigl/igl/jet.cpp
diff --git a/src/igl/jet.h b/src/libigl/igl/jet.h
index 411b53af3..411b53af3 100644
--- a/src/igl/jet.h
+++ b/src/libigl/igl/jet.h
diff --git a/src/igl/knn.cpp b/src/libigl/igl/knn.cpp
index b2e355df1..b2e355df1 100644
--- a/src/igl/knn.cpp
+++ b/src/libigl/igl/knn.cpp
diff --git a/src/igl/knn.h b/src/libigl/igl/knn.h
index 0411fc3ee..0411fc3ee 100644
--- a/src/igl/knn.h
+++ b/src/libigl/igl/knn.h
diff --git a/src/igl/launch_medit.cpp b/src/libigl/igl/launch_medit.cpp
index 151af8e5b..151af8e5b 100644
--- a/src/igl/launch_medit.cpp
+++ b/src/libigl/igl/launch_medit.cpp
diff --git a/src/igl/launch_medit.h b/src/libigl/igl/launch_medit.h
index 8a324bb22..8a324bb22 100644
--- a/src/igl/launch_medit.h
+++ b/src/libigl/igl/launch_medit.h
diff --git a/src/igl/lbs_matrix.cpp b/src/libigl/igl/lbs_matrix.cpp
index a80f74be0..a80f74be0 100644
--- a/src/igl/lbs_matrix.cpp
+++ b/src/libigl/igl/lbs_matrix.cpp
diff --git a/src/igl/lbs_matrix.h b/src/libigl/igl/lbs_matrix.h
index 307273d20..307273d20 100644
--- a/src/igl/lbs_matrix.h
+++ b/src/libigl/igl/lbs_matrix.h
diff --git a/src/igl/lexicographic_triangulation.cpp b/src/libigl/igl/lexicographic_triangulation.cpp
index ce9e796ae..ce9e796ae 100644
--- a/src/igl/lexicographic_triangulation.cpp
+++ b/src/libigl/igl/lexicographic_triangulation.cpp
diff --git a/src/igl/lexicographic_triangulation.h b/src/libigl/igl/lexicographic_triangulation.h
index 4e0b81eb5..4e0b81eb5 100644
--- a/src/igl/lexicographic_triangulation.h
+++ b/src/libigl/igl/lexicographic_triangulation.h
diff --git a/src/igl/lim/lim.cpp b/src/libigl/igl/lim/lim.cpp
index 1f4659062..1f4659062 100644
--- a/src/igl/lim/lim.cpp
+++ b/src/libigl/igl/lim/lim.cpp
diff --git a/src/igl/lim/lim.h b/src/libigl/igl/lim/lim.h
index c4d3f4ad4..c4d3f4ad4 100644
--- a/src/igl/lim/lim.h
+++ b/src/libigl/igl/lim/lim.h
diff --git a/src/igl/limit_faces.cpp b/src/libigl/igl/limit_faces.cpp
index e54c40b45..e54c40b45 100644
--- a/src/igl/limit_faces.cpp
+++ b/src/libigl/igl/limit_faces.cpp
diff --git a/src/igl/limit_faces.h b/src/libigl/igl/limit_faces.h
index 635b89170..635b89170 100644
--- a/src/igl/limit_faces.h
+++ b/src/libigl/igl/limit_faces.h
diff --git a/src/igl/line_field_missmatch.cpp b/src/libigl/igl/line_field_missmatch.cpp
index 21c45b710..21c45b710 100644
--- a/src/igl/line_field_missmatch.cpp
+++ b/src/libigl/igl/line_field_missmatch.cpp
diff --git a/src/igl/line_field_missmatch.h b/src/libigl/igl/line_field_missmatch.h
index a939685cb..a939685cb 100644
--- a/src/igl/line_field_missmatch.h
+++ b/src/libigl/igl/line_field_missmatch.h
diff --git a/src/igl/line_search.cpp b/src/libigl/igl/line_search.cpp
index c94eeaa52..c94eeaa52 100644
--- a/src/igl/line_search.cpp
+++ b/src/libigl/igl/line_search.cpp
diff --git a/src/igl/line_search.h b/src/libigl/igl/line_search.h
index 057c6a43f..057c6a43f 100644
--- a/src/igl/line_search.h
+++ b/src/libigl/igl/line_search.h
diff --git a/src/igl/line_segment_in_rectangle.cpp b/src/libigl/igl/line_segment_in_rectangle.cpp
index 6f47c7d4c..6f47c7d4c 100644
--- a/src/igl/line_segment_in_rectangle.cpp
+++ b/src/libigl/igl/line_segment_in_rectangle.cpp
diff --git a/src/igl/line_segment_in_rectangle.h b/src/libigl/igl/line_segment_in_rectangle.h
index 6d7eaf404..6d7eaf404 100644
--- a/src/igl/line_segment_in_rectangle.h
+++ b/src/libigl/igl/line_segment_in_rectangle.h
diff --git a/src/igl/linprog.cpp b/src/libigl/igl/linprog.cpp
index b73ffc513..b73ffc513 100644
--- a/src/igl/linprog.cpp
+++ b/src/libigl/igl/linprog.cpp
diff --git a/src/igl/linprog.h b/src/libigl/igl/linprog.h
index db98435ad..db98435ad 100644
--- a/src/igl/linprog.h
+++ b/src/libigl/igl/linprog.h
diff --git a/src/igl/list_to_matrix.cpp b/src/libigl/igl/list_to_matrix.cpp
index a1ca1926b..a1ca1926b 100644
--- a/src/igl/list_to_matrix.cpp
+++ b/src/libigl/igl/list_to_matrix.cpp
diff --git a/src/igl/list_to_matrix.h b/src/libigl/igl/list_to_matrix.h
index 1a5881dc1..1a5881dc1 100644
--- a/src/igl/list_to_matrix.h
+++ b/src/libigl/igl/list_to_matrix.h
diff --git a/src/igl/local_basis.cpp b/src/libigl/igl/local_basis.cpp
index 599eca739..599eca739 100644
--- a/src/igl/local_basis.cpp
+++ b/src/libigl/igl/local_basis.cpp
diff --git a/src/igl/local_basis.h b/src/libigl/igl/local_basis.h
index 392796c34..392796c34 100644
--- a/src/igl/local_basis.h
+++ b/src/libigl/igl/local_basis.h
diff --git a/src/igl/look_at.cpp b/src/libigl/igl/look_at.cpp
index c55c9b2ec..c55c9b2ec 100644
--- a/src/igl/look_at.cpp
+++ b/src/libigl/igl/look_at.cpp
diff --git a/src/igl/look_at.h b/src/libigl/igl/look_at.h
index 883cbf94e..883cbf94e 100644
--- a/src/igl/look_at.h
+++ b/src/libigl/igl/look_at.h
diff --git a/src/igl/loop.cpp b/src/libigl/igl/loop.cpp
index b4233ca67..b4233ca67 100644
--- a/src/igl/loop.cpp
+++ b/src/libigl/igl/loop.cpp
diff --git a/src/igl/loop.h b/src/libigl/igl/loop.h
index bc1616891..bc1616891 100644
--- a/src/igl/loop.h
+++ b/src/libigl/igl/loop.h
diff --git a/src/igl/lscm.cpp b/src/libigl/igl/lscm.cpp
index 6932f94d4..6932f94d4 100644
--- a/src/igl/lscm.cpp
+++ b/src/libigl/igl/lscm.cpp
diff --git a/src/igl/lscm.h b/src/libigl/igl/lscm.h
index 2386215df..2386215df 100644
--- a/src/igl/lscm.h
+++ b/src/libigl/igl/lscm.h
diff --git a/src/igl/map_vertices_to_circle.cpp b/src/libigl/igl/map_vertices_to_circle.cpp
index 233613936..233613936 100755
--- a/src/igl/map_vertices_to_circle.cpp
+++ b/src/libigl/igl/map_vertices_to_circle.cpp
diff --git a/src/igl/map_vertices_to_circle.h b/src/libigl/igl/map_vertices_to_circle.h
index 54743717f..54743717f 100755
--- a/src/igl/map_vertices_to_circle.h
+++ b/src/libigl/igl/map_vertices_to_circle.h
diff --git a/src/igl/massmatrix.cpp b/src/libigl/igl/massmatrix.cpp
index b51e11061..b51e11061 100644
--- a/src/igl/massmatrix.cpp
+++ b/src/libigl/igl/massmatrix.cpp
diff --git a/src/igl/massmatrix.h b/src/libigl/igl/massmatrix.h
index 69d8dc960..69d8dc960 100644
--- a/src/igl/massmatrix.h
+++ b/src/libigl/igl/massmatrix.h
diff --git a/src/igl/mat_max.cpp b/src/libigl/igl/mat_max.cpp
index c5da97569..c5da97569 100644
--- a/src/igl/mat_max.cpp
+++ b/src/libigl/igl/mat_max.cpp
diff --git a/src/igl/mat_max.h b/src/libigl/igl/mat_max.h
index ad3ec6e61..ad3ec6e61 100644
--- a/src/igl/mat_max.h
+++ b/src/libigl/igl/mat_max.h
diff --git a/src/igl/mat_min.cpp b/src/libigl/igl/mat_min.cpp
index ad50c7014..ad50c7014 100644
--- a/src/igl/mat_min.cpp
+++ b/src/libigl/igl/mat_min.cpp
diff --git a/src/igl/mat_min.h b/src/libigl/igl/mat_min.h
index 3673aeded..3673aeded 100644
--- a/src/igl/mat_min.h
+++ b/src/libigl/igl/mat_min.h
diff --git a/src/igl/mat_to_quat.cpp b/src/libigl/igl/mat_to_quat.cpp
index 5c8e04b1f..5c8e04b1f 100644
--- a/src/igl/mat_to_quat.cpp
+++ b/src/libigl/igl/mat_to_quat.cpp
diff --git a/src/igl/mat_to_quat.h b/src/libigl/igl/mat_to_quat.h
index acea683f7..acea683f7 100644
--- a/src/igl/mat_to_quat.h
+++ b/src/libigl/igl/mat_to_quat.h
diff --git a/src/igl/material_colors.h b/src/libigl/igl/material_colors.h
index 1927fa42d..1927fa42d 100644
--- a/src/igl/material_colors.h
+++ b/src/libigl/igl/material_colors.h
diff --git a/src/igl/matlab/MatlabWorkspace.h b/src/libigl/igl/matlab/MatlabWorkspace.h
index c8dcaf9ed..c8dcaf9ed 100644
--- a/src/igl/matlab/MatlabWorkspace.h
+++ b/src/libigl/igl/matlab/MatlabWorkspace.h
diff --git a/src/igl/matlab/MexStream.h b/src/libigl/igl/matlab/MexStream.h
index 69a0f2f70..69a0f2f70 100644
--- a/src/igl/matlab/MexStream.h
+++ b/src/libigl/igl/matlab/MexStream.h
diff --git a/src/igl/matlab/matlabinterface.cpp b/src/libigl/igl/matlab/matlabinterface.cpp
index 6c03485de..6c03485de 100644
--- a/src/igl/matlab/matlabinterface.cpp
+++ b/src/libigl/igl/matlab/matlabinterface.cpp
diff --git a/src/igl/matlab/matlabinterface.h b/src/libigl/igl/matlab/matlabinterface.h
index 63d72c74e..63d72c74e 100644
--- a/src/igl/matlab/matlabinterface.h
+++ b/src/libigl/igl/matlab/matlabinterface.h
diff --git a/src/igl/matlab/mexErrMsgTxt.cpp b/src/libigl/igl/matlab/mexErrMsgTxt.cpp
index 89dda1fa3..89dda1fa3 100644
--- a/src/igl/matlab/mexErrMsgTxt.cpp
+++ b/src/libigl/igl/matlab/mexErrMsgTxt.cpp
diff --git a/src/igl/matlab/mexErrMsgTxt.h b/src/libigl/igl/matlab/mexErrMsgTxt.h
index 61b838e6e..61b838e6e 100644
--- a/src/igl/matlab/mexErrMsgTxt.h
+++ b/src/libigl/igl/matlab/mexErrMsgTxt.h
diff --git a/src/igl/matlab/parse_rhs.cpp b/src/libigl/igl/matlab/parse_rhs.cpp
index dafc8ba48..dafc8ba48 100644
--- a/src/igl/matlab/parse_rhs.cpp
+++ b/src/libigl/igl/matlab/parse_rhs.cpp
diff --git a/src/igl/matlab/parse_rhs.h b/src/libigl/igl/matlab/parse_rhs.h
index 3cabec734..3cabec734 100644
--- a/src/igl/matlab/parse_rhs.h
+++ b/src/libigl/igl/matlab/parse_rhs.h
diff --git a/src/igl/matlab/prepare_lhs.cpp b/src/libigl/igl/matlab/prepare_lhs.cpp
index 93593685e..93593685e 100644
--- a/src/igl/matlab/prepare_lhs.cpp
+++ b/src/libigl/igl/matlab/prepare_lhs.cpp
diff --git a/src/igl/matlab/prepare_lhs.h b/src/libigl/igl/matlab/prepare_lhs.h
index 0ac0ca6ce..0ac0ca6ce 100644
--- a/src/igl/matlab/prepare_lhs.h
+++ b/src/libigl/igl/matlab/prepare_lhs.h
diff --git a/src/igl/matlab/requires_arg.cpp b/src/libigl/igl/matlab/requires_arg.cpp
index a03469183..a03469183 100644
--- a/src/igl/matlab/requires_arg.cpp
+++ b/src/libigl/igl/matlab/requires_arg.cpp
diff --git a/src/igl/matlab/requires_arg.h b/src/libigl/igl/matlab/requires_arg.h
index 65531b2f2..65531b2f2 100644
--- a/src/igl/matlab/requires_arg.h
+++ b/src/libigl/igl/matlab/requires_arg.h
diff --git a/src/igl/matlab/validate_arg.cpp b/src/libigl/igl/matlab/validate_arg.cpp
index 903c9984d..903c9984d 100644
--- a/src/igl/matlab/validate_arg.cpp
+++ b/src/libigl/igl/matlab/validate_arg.cpp
diff --git a/src/igl/matlab/validate_arg.h b/src/libigl/igl/matlab/validate_arg.h
index db52c68d1..db52c68d1 100644
--- a/src/igl/matlab/validate_arg.h
+++ b/src/libigl/igl/matlab/validate_arg.h
diff --git a/src/igl/matlab_format.cpp b/src/libigl/igl/matlab_format.cpp
index ceb5d6db7..ceb5d6db7 100644
--- a/src/igl/matlab_format.cpp
+++ b/src/libigl/igl/matlab_format.cpp
diff --git a/src/igl/matlab_format.h b/src/libigl/igl/matlab_format.h
index e1f3ff830..e1f3ff830 100644
--- a/src/igl/matlab_format.h
+++ b/src/libigl/igl/matlab_format.h
diff --git a/src/igl/matrix_to_list.cpp b/src/libigl/igl/matrix_to_list.cpp
index 1c30dff91..1c30dff91 100644
--- a/src/igl/matrix_to_list.cpp
+++ b/src/libigl/igl/matrix_to_list.cpp
diff --git a/src/igl/matrix_to_list.h b/src/libigl/igl/matrix_to_list.h
index a84281127..a84281127 100644
--- a/src/igl/matrix_to_list.h
+++ b/src/libigl/igl/matrix_to_list.h
diff --git a/src/igl/max.cpp b/src/libigl/igl/max.cpp
index e451c3b15..e451c3b15 100644
--- a/src/igl/max.cpp
+++ b/src/libigl/igl/max.cpp
diff --git a/src/igl/max.h b/src/libigl/igl/max.h
index 554a19b13..554a19b13 100644
--- a/src/igl/max.h
+++ b/src/libigl/igl/max.h
diff --git a/src/igl/max_faces_stopping_condition.cpp b/src/libigl/igl/max_faces_stopping_condition.cpp
index adc4fc96e..adc4fc96e 100644
--- a/src/igl/max_faces_stopping_condition.cpp
+++ b/src/libigl/igl/max_faces_stopping_condition.cpp
diff --git a/src/igl/max_faces_stopping_condition.h b/src/libigl/igl/max_faces_stopping_condition.h
index e886a1f5c..e886a1f5c 100644
--- a/src/igl/max_faces_stopping_condition.h
+++ b/src/libigl/igl/max_faces_stopping_condition.h
diff --git a/src/igl/max_size.cpp b/src/libigl/igl/max_size.cpp
index f3b9a07f2..f3b9a07f2 100644
--- a/src/igl/max_size.cpp
+++ b/src/libigl/igl/max_size.cpp
diff --git a/src/igl/max_size.h b/src/libigl/igl/max_size.h
index 58035d4ce..58035d4ce 100644
--- a/src/igl/max_size.h
+++ b/src/libigl/igl/max_size.h
diff --git a/src/igl/median.cpp b/src/libigl/igl/median.cpp
index 718b9acc9..718b9acc9 100644
--- a/src/igl/median.cpp
+++ b/src/libigl/igl/median.cpp
diff --git a/src/igl/median.h b/src/libigl/igl/median.h
index 7986dfda4..7986dfda4 100644
--- a/src/igl/median.h
+++ b/src/libigl/igl/median.h
diff --git a/src/igl/min.cpp b/src/libigl/igl/min.cpp
index ce8ba328e..ce8ba328e 100644
--- a/src/igl/min.cpp
+++ b/src/libigl/igl/min.cpp
diff --git a/src/igl/min.h b/src/libigl/igl/min.h
index bbe5b494a..bbe5b494a 100644
--- a/src/igl/min.h
+++ b/src/libigl/igl/min.h
diff --git a/src/igl/min_quad_dense.cpp b/src/libigl/igl/min_quad_dense.cpp
index f489d996c..f489d996c 100644
--- a/src/igl/min_quad_dense.cpp
+++ b/src/libigl/igl/min_quad_dense.cpp
diff --git a/src/igl/min_quad_dense.h b/src/libigl/igl/min_quad_dense.h
index 3d115168a..3d115168a 100644
--- a/src/igl/min_quad_dense.h
+++ b/src/libigl/igl/min_quad_dense.h
diff --git a/src/igl/min_quad_with_fixed.cpp b/src/libigl/igl/min_quad_with_fixed.cpp
index ffb1322c7..ffb1322c7 100644
--- a/src/igl/min_quad_with_fixed.cpp
+++ b/src/libigl/igl/min_quad_with_fixed.cpp
diff --git a/src/igl/min_quad_with_fixed.h b/src/libigl/igl/min_quad_with_fixed.h
index 269623313..269623313 100644
--- a/src/igl/min_quad_with_fixed.h
+++ b/src/libigl/igl/min_quad_with_fixed.h
diff --git a/src/igl/min_size.cpp b/src/libigl/igl/min_size.cpp
index 0b0cfa9e2..0b0cfa9e2 100644
--- a/src/igl/min_size.cpp
+++ b/src/libigl/igl/min_size.cpp
diff --git a/src/igl/min_size.h b/src/libigl/igl/min_size.h
index e44036279..e44036279 100644
--- a/src/igl/min_size.h
+++ b/src/libigl/igl/min_size.h
diff --git a/src/igl/mod.cpp b/src/libigl/igl/mod.cpp
index 2064fe6a4..2064fe6a4 100644
--- a/src/igl/mod.cpp
+++ b/src/libigl/igl/mod.cpp
diff --git a/src/igl/mod.h b/src/libigl/igl/mod.h
index 3ff58a231..3ff58a231 100644
--- a/src/igl/mod.h
+++ b/src/libigl/igl/mod.h
diff --git a/src/igl/mode.cpp b/src/libigl/igl/mode.cpp
index 89df6be66..89df6be66 100644
--- a/src/igl/mode.cpp
+++ b/src/libigl/igl/mode.cpp
diff --git a/src/igl/mode.h b/src/libigl/igl/mode.h
index 4d0943881..4d0943881 100644
--- a/src/igl/mode.h
+++ b/src/libigl/igl/mode.h
diff --git a/src/igl/mosek/bbw.cpp b/src/libigl/igl/mosek/bbw.cpp
index 99d28ab15..99d28ab15 100644
--- a/src/igl/mosek/bbw.cpp
+++ b/src/libigl/igl/mosek/bbw.cpp
diff --git a/src/igl/mosek/bbw.h b/src/libigl/igl/mosek/bbw.h
index 5dcae0fed..5dcae0fed 100644
--- a/src/igl/mosek/bbw.h
+++ b/src/libigl/igl/mosek/bbw.h
diff --git a/src/igl/mosek/mosek_guarded.cpp b/src/libigl/igl/mosek/mosek_guarded.cpp
index 242d928f6..242d928f6 100644
--- a/src/igl/mosek/mosek_guarded.cpp
+++ b/src/libigl/igl/mosek/mosek_guarded.cpp
diff --git a/src/igl/mosek/mosek_guarded.h b/src/libigl/igl/mosek/mosek_guarded.h
index 1c9e0cbf9..1c9e0cbf9 100644
--- a/src/igl/mosek/mosek_guarded.h
+++ b/src/libigl/igl/mosek/mosek_guarded.h
diff --git a/src/igl/mosek/mosek_linprog.cpp b/src/libigl/igl/mosek/mosek_linprog.cpp
index fe09d5adb..fe09d5adb 100644
--- a/src/igl/mosek/mosek_linprog.cpp
+++ b/src/libigl/igl/mosek/mosek_linprog.cpp
diff --git a/src/igl/mosek/mosek_linprog.h b/src/libigl/igl/mosek/mosek_linprog.h
index 57791cd60..57791cd60 100644
--- a/src/igl/mosek/mosek_linprog.h
+++ b/src/libigl/igl/mosek/mosek_linprog.h
diff --git a/src/igl/mosek/mosek_quadprog.cpp b/src/libigl/igl/mosek/mosek_quadprog.cpp
index 36d9e873b..36d9e873b 100644
--- a/src/igl/mosek/mosek_quadprog.cpp
+++ b/src/libigl/igl/mosek/mosek_quadprog.cpp
diff --git a/src/igl/mosek/mosek_quadprog.h b/src/libigl/igl/mosek/mosek_quadprog.h
index 38343318a..38343318a 100644
--- a/src/igl/mosek/mosek_quadprog.h
+++ b/src/libigl/igl/mosek/mosek_quadprog.h
diff --git a/src/igl/mvc.cpp b/src/libigl/igl/mvc.cpp
index a6fed49d8..a6fed49d8 100644
--- a/src/igl/mvc.cpp
+++ b/src/libigl/igl/mvc.cpp
diff --git a/src/igl/mvc.h b/src/libigl/igl/mvc.h
index 3c7c2abcc..3c7c2abcc 100644
--- a/src/igl/mvc.h
+++ b/src/libigl/igl/mvc.h
diff --git a/src/igl/nchoosek.cpp b/src/libigl/igl/nchoosek.cpp
index 88ab5449d..88ab5449d 100644
--- a/src/igl/nchoosek.cpp
+++ b/src/libigl/igl/nchoosek.cpp
diff --git a/src/igl/nchoosek.h b/src/libigl/igl/nchoosek.h
index ec882e6c6..ec882e6c6 100644
--- a/src/igl/nchoosek.h
+++ b/src/libigl/igl/nchoosek.h
diff --git a/src/igl/next_filename.cpp b/src/libigl/igl/next_filename.cpp
index b453a149a..b453a149a 100644
--- a/src/igl/next_filename.cpp
+++ b/src/libigl/igl/next_filename.cpp
diff --git a/src/igl/next_filename.h b/src/libigl/igl/next_filename.h
index 2aa3094da..2aa3094da 100644
--- a/src/igl/next_filename.h
+++ b/src/libigl/igl/next_filename.h
diff --git a/src/igl/normal_derivative.cpp b/src/libigl/igl/normal_derivative.cpp
index d943fe0e2..d943fe0e2 100644
--- a/src/igl/normal_derivative.cpp
+++ b/src/libigl/igl/normal_derivative.cpp
diff --git a/src/igl/normal_derivative.h b/src/libigl/igl/normal_derivative.h
index 861b55555..861b55555 100644
--- a/src/igl/normal_derivative.h
+++ b/src/libigl/igl/normal_derivative.h
diff --git a/src/igl/normalize_quat.cpp b/src/libigl/igl/normalize_quat.cpp
index f110d6b75..f110d6b75 100644
--- a/src/igl/normalize_quat.cpp
+++ b/src/libigl/igl/normalize_quat.cpp
diff --git a/src/igl/normalize_quat.h b/src/libigl/igl/normalize_quat.h
index e97759b17..e97759b17 100644
--- a/src/igl/normalize_quat.h
+++ b/src/libigl/igl/normalize_quat.h
diff --git a/src/igl/normalize_row_lengths.cpp b/src/libigl/igl/normalize_row_lengths.cpp
index 3d7e566e8..3d7e566e8 100644
--- a/src/igl/normalize_row_lengths.cpp
+++ b/src/libigl/igl/normalize_row_lengths.cpp
diff --git a/src/igl/normalize_row_lengths.h b/src/libigl/igl/normalize_row_lengths.h
index c305c0f65..c305c0f65 100644
--- a/src/igl/normalize_row_lengths.h
+++ b/src/libigl/igl/normalize_row_lengths.h
diff --git a/src/igl/normalize_row_sums.cpp b/src/libigl/igl/normalize_row_sums.cpp
index 1204e073d..1204e073d 100644
--- a/src/igl/normalize_row_sums.cpp
+++ b/src/libigl/igl/normalize_row_sums.cpp
diff --git a/src/igl/normalize_row_sums.h b/src/libigl/igl/normalize_row_sums.h
index a832e82a6..a832e82a6 100644
--- a/src/igl/normalize_row_sums.h
+++ b/src/libigl/igl/normalize_row_sums.h
diff --git a/src/igl/null.cpp b/src/libigl/igl/null.cpp
index b2291f454..b2291f454 100644
--- a/src/igl/null.cpp
+++ b/src/libigl/igl/null.cpp
diff --git a/src/igl/null.h b/src/libigl/igl/null.h
index 2349217fb..2349217fb 100644
--- a/src/igl/null.h
+++ b/src/libigl/igl/null.h
diff --git a/src/igl/octree.cpp b/src/libigl/igl/octree.cpp
index 6ed95d846..6ed95d846 100644
--- a/src/igl/octree.cpp
+++ b/src/libigl/igl/octree.cpp
diff --git a/src/igl/octree.h b/src/libigl/igl/octree.h
index 425d86b2d..425d86b2d 100644
--- a/src/igl/octree.h
+++ b/src/libigl/igl/octree.h
diff --git a/src/igl/on_boundary.cpp b/src/libigl/igl/on_boundary.cpp
index 3fb70ec59..3fb70ec59 100644
--- a/src/igl/on_boundary.cpp
+++ b/src/libigl/igl/on_boundary.cpp
diff --git a/src/igl/on_boundary.h b/src/libigl/igl/on_boundary.h
index c4dab1706..c4dab1706 100644
--- a/src/igl/on_boundary.h
+++ b/src/libigl/igl/on_boundary.h
diff --git a/src/igl/opengl/MeshGL.cpp b/src/libigl/igl/opengl/MeshGL.cpp
index f49924324..f49924324 100644
--- a/src/igl/opengl/MeshGL.cpp
+++ b/src/libigl/igl/opengl/MeshGL.cpp
diff --git a/src/igl/opengl/MeshGL.h b/src/libigl/igl/opengl/MeshGL.h
index 74c358903..74c358903 100644
--- a/src/igl/opengl/MeshGL.h
+++ b/src/libigl/igl/opengl/MeshGL.h
diff --git a/src/igl/opengl/ViewerCore.cpp b/src/libigl/igl/opengl/ViewerCore.cpp
index fc5f4664b..fc5f4664b 100644
--- a/src/igl/opengl/ViewerCore.cpp
+++ b/src/libigl/igl/opengl/ViewerCore.cpp
diff --git a/src/igl/opengl/ViewerCore.h b/src/libigl/igl/opengl/ViewerCore.h
index 94d3367e0..94d3367e0 100644
--- a/src/igl/opengl/ViewerCore.h
+++ b/src/libigl/igl/opengl/ViewerCore.h
diff --git a/src/igl/opengl/ViewerData.cpp b/src/libigl/igl/opengl/ViewerData.cpp
index 0a7f2c44b..0a7f2c44b 100644
--- a/src/igl/opengl/ViewerData.cpp
+++ b/src/libigl/igl/opengl/ViewerData.cpp
diff --git a/src/igl/opengl/ViewerData.h b/src/libigl/igl/opengl/ViewerData.h
index b3ec9178c..b3ec9178c 100644
--- a/src/igl/opengl/ViewerData.h
+++ b/src/libigl/igl/opengl/ViewerData.h
diff --git a/src/igl/opengl/bind_vertex_attrib_array.cpp b/src/libigl/igl/opengl/bind_vertex_attrib_array.cpp
index 4aa807c18..4aa807c18 100644
--- a/src/igl/opengl/bind_vertex_attrib_array.cpp
+++ b/src/libigl/igl/opengl/bind_vertex_attrib_array.cpp
diff --git a/src/igl/opengl/bind_vertex_attrib_array.h b/src/libigl/igl/opengl/bind_vertex_attrib_array.h
index 4e9443136..4e9443136 100644
--- a/src/igl/opengl/bind_vertex_attrib_array.h
+++ b/src/libigl/igl/opengl/bind_vertex_attrib_array.h
diff --git a/src/igl/opengl/create_index_vbo.cpp b/src/libigl/igl/opengl/create_index_vbo.cpp
index 76f6248c0..76f6248c0 100644
--- a/src/igl/opengl/create_index_vbo.cpp
+++ b/src/libigl/igl/opengl/create_index_vbo.cpp
diff --git a/src/igl/opengl/create_index_vbo.h b/src/libigl/igl/opengl/create_index_vbo.h
index e48f3a489..e48f3a489 100644
--- a/src/igl/opengl/create_index_vbo.h
+++ b/src/libigl/igl/opengl/create_index_vbo.h
diff --git a/src/igl/opengl/create_mesh_vbo.cpp b/src/libigl/igl/opengl/create_mesh_vbo.cpp
index 3876e1dfa..3876e1dfa 100644
--- a/src/igl/opengl/create_mesh_vbo.cpp
+++ b/src/libigl/igl/opengl/create_mesh_vbo.cpp
diff --git a/src/igl/opengl/create_mesh_vbo.h b/src/libigl/igl/opengl/create_mesh_vbo.h
index ecb303b09..ecb303b09 100644
--- a/src/igl/opengl/create_mesh_vbo.h
+++ b/src/libigl/igl/opengl/create_mesh_vbo.h
diff --git a/src/igl/opengl/create_shader_program.cpp b/src/libigl/igl/opengl/create_shader_program.cpp
index 6c4b31a2f..6c4b31a2f 100644
--- a/src/igl/opengl/create_shader_program.cpp
+++ b/src/libigl/igl/opengl/create_shader_program.cpp
diff --git a/src/igl/opengl/create_shader_program.h b/src/libigl/igl/opengl/create_shader_program.h
index 5dfdc701d..5dfdc701d 100644
--- a/src/igl/opengl/create_shader_program.h
+++ b/src/libigl/igl/opengl/create_shader_program.h
diff --git a/src/igl/opengl/create_vector_vbo.cpp b/src/libigl/igl/opengl/create_vector_vbo.cpp
index 8690359b7..8690359b7 100644
--- a/src/igl/opengl/create_vector_vbo.cpp
+++ b/src/libigl/igl/opengl/create_vector_vbo.cpp
diff --git a/src/igl/opengl/create_vector_vbo.h b/src/libigl/igl/opengl/create_vector_vbo.h
index 757c1a199..757c1a199 100644
--- a/src/igl/opengl/create_vector_vbo.h
+++ b/src/libigl/igl/opengl/create_vector_vbo.h
diff --git a/src/igl/opengl/destroy_shader_program.cpp b/src/libigl/igl/opengl/destroy_shader_program.cpp
index 2ceace7c2..2ceace7c2 100644
--- a/src/igl/opengl/destroy_shader_program.cpp
+++ b/src/libigl/igl/opengl/destroy_shader_program.cpp
diff --git a/src/igl/opengl/destroy_shader_program.h b/src/libigl/igl/opengl/destroy_shader_program.h
index 5d53d8c3e..5d53d8c3e 100644
--- a/src/igl/opengl/destroy_shader_program.h
+++ b/src/libigl/igl/opengl/destroy_shader_program.h
diff --git a/src/igl/opengl/gl.h b/src/libigl/igl/opengl/gl.h
index fc037c198..fc037c198 100644
--- a/src/igl/opengl/gl.h
+++ b/src/libigl/igl/opengl/gl.h
diff --git a/src/igl/opengl/gl_type_size.cpp b/src/libigl/igl/opengl/gl_type_size.cpp
index 0fd02bf05..0fd02bf05 100644
--- a/src/igl/opengl/gl_type_size.cpp
+++ b/src/libigl/igl/opengl/gl_type_size.cpp
diff --git a/src/igl/opengl/gl_type_size.h b/src/libigl/igl/opengl/gl_type_size.h
index a74119549..a74119549 100644
--- a/src/igl/opengl/gl_type_size.h
+++ b/src/libigl/igl/opengl/gl_type_size.h
diff --git a/src/igl/opengl/glfw/Viewer.cpp b/src/libigl/igl/opengl/glfw/Viewer.cpp
index 76d1604a0..76d1604a0 100644
--- a/src/igl/opengl/glfw/Viewer.cpp
+++ b/src/libigl/igl/opengl/glfw/Viewer.cpp
diff --git a/src/igl/opengl/glfw/Viewer.h b/src/libigl/igl/opengl/glfw/Viewer.h
index 35aa7dfa2..35aa7dfa2 100644
--- a/src/igl/opengl/glfw/Viewer.h
+++ b/src/libigl/igl/opengl/glfw/Viewer.h
diff --git a/src/igl/opengl/glfw/ViewerPlugin.h b/src/libigl/igl/opengl/glfw/ViewerPlugin.h
index 9ba7903a8..9ba7903a8 100644
--- a/src/igl/opengl/glfw/ViewerPlugin.h
+++ b/src/libigl/igl/opengl/glfw/ViewerPlugin.h
diff --git a/src/igl/opengl/glfw/background_window.cpp b/src/libigl/igl/opengl/glfw/background_window.cpp
index 964202cc2..964202cc2 100644
--- a/src/igl/opengl/glfw/background_window.cpp
+++ b/src/libigl/igl/opengl/glfw/background_window.cpp
diff --git a/src/igl/opengl/glfw/background_window.h b/src/libigl/igl/opengl/glfw/background_window.h
index a37515b89..a37515b89 100644
--- a/src/igl/opengl/glfw/background_window.h
+++ b/src/libigl/igl/opengl/glfw/background_window.h
diff --git a/src/igl/opengl/glfw/imgui/ImGuiHelpers.h b/src/libigl/igl/opengl/glfw/imgui/ImGuiHelpers.h
index 892274b0f..892274b0f 100644
--- a/src/igl/opengl/glfw/imgui/ImGuiHelpers.h
+++ b/src/libigl/igl/opengl/glfw/imgui/ImGuiHelpers.h
diff --git a/src/igl/opengl/glfw/imgui/ImGuiMenu.cpp b/src/libigl/igl/opengl/glfw/imgui/ImGuiMenu.cpp
index 627e055cb..627e055cb 100644
--- a/src/igl/opengl/glfw/imgui/ImGuiMenu.cpp
+++ b/src/libigl/igl/opengl/glfw/imgui/ImGuiMenu.cpp
diff --git a/src/igl/opengl/glfw/imgui/ImGuiMenu.h b/src/libigl/igl/opengl/glfw/imgui/ImGuiMenu.h
index e7144a675..e7144a675 100644
--- a/src/igl/opengl/glfw/imgui/ImGuiMenu.h
+++ b/src/libigl/igl/opengl/glfw/imgui/ImGuiMenu.h
diff --git a/src/igl/opengl/glfw/map_texture.cpp b/src/libigl/igl/opengl/glfw/map_texture.cpp
index 7975d87d4..7975d87d4 100644
--- a/src/igl/opengl/glfw/map_texture.cpp
+++ b/src/libigl/igl/opengl/glfw/map_texture.cpp
diff --git a/src/igl/opengl/glfw/map_texture.h b/src/libigl/igl/opengl/glfw/map_texture.h
index ee3b30a45..ee3b30a45 100644
--- a/src/igl/opengl/glfw/map_texture.h
+++ b/src/libigl/igl/opengl/glfw/map_texture.h
diff --git a/src/igl/opengl/init_render_to_texture.cpp b/src/libigl/igl/opengl/init_render_to_texture.cpp
index 7fbcfea10..7fbcfea10 100644
--- a/src/igl/opengl/init_render_to_texture.cpp
+++ b/src/libigl/igl/opengl/init_render_to_texture.cpp
diff --git a/src/igl/opengl/init_render_to_texture.h b/src/libigl/igl/opengl/init_render_to_texture.h
index ae854e770..ae854e770 100644
--- a/src/igl/opengl/init_render_to_texture.h
+++ b/src/libigl/igl/opengl/init_render_to_texture.h
diff --git a/src/igl/opengl/load_shader.cpp b/src/libigl/igl/opengl/load_shader.cpp
index 0ee0a978f..0ee0a978f 100644
--- a/src/igl/opengl/load_shader.cpp
+++ b/src/libigl/igl/opengl/load_shader.cpp
diff --git a/src/igl/opengl/load_shader.h b/src/libigl/igl/opengl/load_shader.h
index 6c234d8fc..6c234d8fc 100644
--- a/src/igl/opengl/load_shader.h
+++ b/src/libigl/igl/opengl/load_shader.h
diff --git a/src/igl/opengl/print_program_info_log.cpp b/src/libigl/igl/opengl/print_program_info_log.cpp
index 41b37b7fb..41b37b7fb 100644
--- a/src/igl/opengl/print_program_info_log.cpp
+++ b/src/libigl/igl/opengl/print_program_info_log.cpp
diff --git a/src/igl/opengl/print_program_info_log.h b/src/libigl/igl/opengl/print_program_info_log.h
index 43bcc0974..43bcc0974 100644
--- a/src/igl/opengl/print_program_info_log.h
+++ b/src/libigl/igl/opengl/print_program_info_log.h
diff --git a/src/igl/opengl/print_shader_info_log.cpp b/src/libigl/igl/opengl/print_shader_info_log.cpp
index 2d3554387..2d3554387 100644
--- a/src/igl/opengl/print_shader_info_log.cpp
+++ b/src/libigl/igl/opengl/print_shader_info_log.cpp
diff --git a/src/igl/opengl/print_shader_info_log.h b/src/libigl/igl/opengl/print_shader_info_log.h
index 5a571fb11..5a571fb11 100644
--- a/src/igl/opengl/print_shader_info_log.h
+++ b/src/libigl/igl/opengl/print_shader_info_log.h
diff --git a/src/igl/opengl/report_gl_error.cpp b/src/libigl/igl/opengl/report_gl_error.cpp
index 2dcc0b632..2dcc0b632 100644
--- a/src/igl/opengl/report_gl_error.cpp
+++ b/src/libigl/igl/opengl/report_gl_error.cpp
diff --git a/src/igl/opengl/report_gl_error.h b/src/libigl/igl/opengl/report_gl_error.h
index 70e5c7d74..70e5c7d74 100644
--- a/src/igl/opengl/report_gl_error.h
+++ b/src/libigl/igl/opengl/report_gl_error.h
diff --git a/src/igl/opengl/uniform_type_to_string.cpp b/src/libigl/igl/opengl/uniform_type_to_string.cpp
index b2f9a2fdb..b2f9a2fdb 100644
--- a/src/igl/opengl/uniform_type_to_string.cpp
+++ b/src/libigl/igl/opengl/uniform_type_to_string.cpp
diff --git a/src/igl/opengl/uniform_type_to_string.h b/src/libigl/igl/opengl/uniform_type_to_string.h
index ed0a93e90..ed0a93e90 100644
--- a/src/igl/opengl/uniform_type_to_string.h
+++ b/src/libigl/igl/opengl/uniform_type_to_string.h
diff --git a/src/igl/opengl/vertex_array.cpp b/src/libigl/igl/opengl/vertex_array.cpp
index c07113ad3..c07113ad3 100644
--- a/src/igl/opengl/vertex_array.cpp
+++ b/src/libigl/igl/opengl/vertex_array.cpp
diff --git a/src/igl/opengl/vertex_array.h b/src/libigl/igl/opengl/vertex_array.h
index 1342a9c90..1342a9c90 100644
--- a/src/igl/opengl/vertex_array.h
+++ b/src/libigl/igl/opengl/vertex_array.h
diff --git a/src/igl/opengl2/MouseController.h b/src/libigl/igl/opengl2/MouseController.h
index eb38802ad..eb38802ad 100644
--- a/src/igl/opengl2/MouseController.h
+++ b/src/libigl/igl/opengl2/MouseController.h
diff --git a/src/igl/opengl2/RotateWidget.h b/src/libigl/igl/opengl2/RotateWidget.h
index f2900979a..f2900979a 100644
--- a/src/igl/opengl2/RotateWidget.h
+++ b/src/libigl/igl/opengl2/RotateWidget.h
diff --git a/src/igl/opengl2/TranslateWidget.h b/src/libigl/igl/opengl2/TranslateWidget.h
index 7ab06e228..7ab06e228 100644
--- a/src/igl/opengl2/TranslateWidget.h
+++ b/src/libigl/igl/opengl2/TranslateWidget.h
diff --git a/src/igl/opengl2/draw_beach_ball.cpp b/src/libigl/igl/opengl2/draw_beach_ball.cpp
index a661ce4ae..a661ce4ae 100644
--- a/src/igl/opengl2/draw_beach_ball.cpp
+++ b/src/libigl/igl/opengl2/draw_beach_ball.cpp
diff --git a/src/igl/opengl2/draw_beach_ball.h b/src/libigl/igl/opengl2/draw_beach_ball.h
index d430dc5ed..d430dc5ed 100644
--- a/src/igl/opengl2/draw_beach_ball.h
+++ b/src/libigl/igl/opengl2/draw_beach_ball.h
diff --git a/src/igl/opengl2/draw_floor.cpp b/src/libigl/igl/opengl2/draw_floor.cpp
index 61fa47491..61fa47491 100644
--- a/src/igl/opengl2/draw_floor.cpp
+++ b/src/libigl/igl/opengl2/draw_floor.cpp
diff --git a/src/igl/opengl2/draw_floor.h b/src/libigl/igl/opengl2/draw_floor.h
index 3f06fa9b0..3f06fa9b0 100644
--- a/src/igl/opengl2/draw_floor.h
+++ b/src/libigl/igl/opengl2/draw_floor.h
diff --git a/src/igl/opengl2/draw_mesh.cpp b/src/libigl/igl/opengl2/draw_mesh.cpp
index aeaed12f0..aeaed12f0 100644
--- a/src/igl/opengl2/draw_mesh.cpp
+++ b/src/libigl/igl/opengl2/draw_mesh.cpp
diff --git a/src/igl/opengl2/draw_mesh.h b/src/libigl/igl/opengl2/draw_mesh.h
index ea1559c20..ea1559c20 100644
--- a/src/igl/opengl2/draw_mesh.h
+++ b/src/libigl/igl/opengl2/draw_mesh.h
diff --git a/src/igl/opengl2/draw_point.cpp b/src/libigl/igl/opengl2/draw_point.cpp
index 910fcc716..910fcc716 100644
--- a/src/igl/opengl2/draw_point.cpp
+++ b/src/libigl/igl/opengl2/draw_point.cpp
diff --git a/src/igl/opengl2/draw_point.h b/src/libigl/igl/opengl2/draw_point.h
index 2c7cc1c7d..2c7cc1c7d 100644
--- a/src/igl/opengl2/draw_point.h
+++ b/src/libigl/igl/opengl2/draw_point.h
diff --git a/src/igl/opengl2/draw_rectangular_marquee.cpp b/src/libigl/igl/opengl2/draw_rectangular_marquee.cpp
index 73f97c844..73f97c844 100644
--- a/src/igl/opengl2/draw_rectangular_marquee.cpp
+++ b/src/libigl/igl/opengl2/draw_rectangular_marquee.cpp
diff --git a/src/igl/opengl2/draw_rectangular_marquee.h b/src/libigl/igl/opengl2/draw_rectangular_marquee.h
index bbb2e3f18..bbb2e3f18 100644
--- a/src/igl/opengl2/draw_rectangular_marquee.h
+++ b/src/libigl/igl/opengl2/draw_rectangular_marquee.h
diff --git a/src/igl/opengl2/draw_skeleton_3d.cpp b/src/libigl/igl/opengl2/draw_skeleton_3d.cpp
index a0ca6139a..a0ca6139a 100644
--- a/src/igl/opengl2/draw_skeleton_3d.cpp
+++ b/src/libigl/igl/opengl2/draw_skeleton_3d.cpp
diff --git a/src/igl/opengl2/draw_skeleton_3d.h b/src/libigl/igl/opengl2/draw_skeleton_3d.h
index 7bbb59717..7bbb59717 100644
--- a/src/igl/opengl2/draw_skeleton_3d.h
+++ b/src/libigl/igl/opengl2/draw_skeleton_3d.h
diff --git a/src/igl/opengl2/draw_skeleton_vector_graphics.cpp b/src/libigl/igl/opengl2/draw_skeleton_vector_graphics.cpp
index e45706120..e45706120 100644
--- a/src/igl/opengl2/draw_skeleton_vector_graphics.cpp
+++ b/src/libigl/igl/opengl2/draw_skeleton_vector_graphics.cpp
diff --git a/src/igl/opengl2/draw_skeleton_vector_graphics.h b/src/libigl/igl/opengl2/draw_skeleton_vector_graphics.h
index 8091cbb78..8091cbb78 100644
--- a/src/igl/opengl2/draw_skeleton_vector_graphics.h
+++ b/src/libigl/igl/opengl2/draw_skeleton_vector_graphics.h
diff --git a/src/igl/opengl2/flare_textures.h b/src/libigl/igl/opengl2/flare_textures.h
index 0455195eb..0455195eb 100644
--- a/src/igl/opengl2/flare_textures.h
+++ b/src/libigl/igl/opengl2/flare_textures.h
diff --git a/src/igl/opengl2/gl.h b/src/libigl/igl/opengl2/gl.h
index 7147c9289..7147c9289 100644
--- a/src/igl/opengl2/gl.h
+++ b/src/libigl/igl/opengl2/gl.h
diff --git a/src/igl/opengl2/glext.h b/src/libigl/igl/opengl2/glext.h
index 78ff45fea..78ff45fea 100644
--- a/src/igl/opengl2/glext.h
+++ b/src/libigl/igl/opengl2/glext.h
diff --git a/src/igl/opengl2/glu.h b/src/libigl/igl/opengl2/glu.h
index d4ab5e16c..d4ab5e16c 100644
--- a/src/igl/opengl2/glu.h
+++ b/src/libigl/igl/opengl2/glu.h
diff --git a/src/igl/opengl2/lens_flare.cpp b/src/libigl/igl/opengl2/lens_flare.cpp
index c99f634c8..c99f634c8 100644
--- a/src/igl/opengl2/lens_flare.cpp
+++ b/src/libigl/igl/opengl2/lens_flare.cpp
diff --git a/src/igl/opengl2/lens_flare.h b/src/libigl/igl/opengl2/lens_flare.h
index 280c27b69..280c27b69 100644
--- a/src/igl/opengl2/lens_flare.h
+++ b/src/libigl/igl/opengl2/lens_flare.h
diff --git a/src/igl/opengl2/model_proj_viewport.cpp b/src/libigl/igl/opengl2/model_proj_viewport.cpp
index 9fec32a49..9fec32a49 100644
--- a/src/igl/opengl2/model_proj_viewport.cpp
+++ b/src/libigl/igl/opengl2/model_proj_viewport.cpp
diff --git a/src/igl/opengl2/model_proj_viewport.h b/src/libigl/igl/opengl2/model_proj_viewport.h
index 025247ae7..025247ae7 100644
--- a/src/igl/opengl2/model_proj_viewport.h
+++ b/src/libigl/igl/opengl2/model_proj_viewport.h
diff --git a/src/igl/opengl2/print_gl_get.cpp b/src/libigl/igl/opengl2/print_gl_get.cpp
index 7182dc558..7182dc558 100644
--- a/src/igl/opengl2/print_gl_get.cpp
+++ b/src/libigl/igl/opengl2/print_gl_get.cpp
diff --git a/src/igl/opengl2/print_gl_get.h b/src/libigl/igl/opengl2/print_gl_get.h
index 0db5298e9..0db5298e9 100644
--- a/src/igl/opengl2/print_gl_get.h
+++ b/src/libigl/igl/opengl2/print_gl_get.h
diff --git a/src/igl/opengl2/project.cpp b/src/libigl/igl/opengl2/project.cpp
index a953197b7..a953197b7 100644
--- a/src/igl/opengl2/project.cpp
+++ b/src/libigl/igl/opengl2/project.cpp
diff --git a/src/igl/opengl2/project.h b/src/libigl/igl/opengl2/project.h
index befd09007..befd09007 100644
--- a/src/igl/opengl2/project.h
+++ b/src/libigl/igl/opengl2/project.h
diff --git a/src/igl/opengl2/right_axis.cpp b/src/libigl/igl/opengl2/right_axis.cpp
index a0b905176..a0b905176 100644
--- a/src/igl/opengl2/right_axis.cpp
+++ b/src/libigl/igl/opengl2/right_axis.cpp
diff --git a/src/igl/opengl2/right_axis.h b/src/libigl/igl/opengl2/right_axis.h
index 4e6787cdd..4e6787cdd 100644
--- a/src/igl/opengl2/right_axis.h
+++ b/src/libigl/igl/opengl2/right_axis.h
diff --git a/src/igl/opengl2/shine_textures.h b/src/libigl/igl/opengl2/shine_textures.h
index 05001989d..05001989d 100644
--- a/src/igl/opengl2/shine_textures.h
+++ b/src/libigl/igl/opengl2/shine_textures.h
diff --git a/src/igl/opengl2/sort_triangles.cpp b/src/libigl/igl/opengl2/sort_triangles.cpp
index ae9671099..ae9671099 100644
--- a/src/igl/opengl2/sort_triangles.cpp
+++ b/src/libigl/igl/opengl2/sort_triangles.cpp
diff --git a/src/igl/opengl2/sort_triangles.h b/src/libigl/igl/opengl2/sort_triangles.h
index 53fd3e809..53fd3e809 100644
--- a/src/igl/opengl2/sort_triangles.h
+++ b/src/libigl/igl/opengl2/sort_triangles.h
diff --git a/src/igl/opengl2/unproject.cpp b/src/libigl/igl/opengl2/unproject.cpp
index f6b0013fe..f6b0013fe 100644
--- a/src/igl/opengl2/unproject.cpp
+++ b/src/libigl/igl/opengl2/unproject.cpp
diff --git a/src/igl/opengl2/unproject.h b/src/libigl/igl/opengl2/unproject.h
index 00de13077..00de13077 100644
--- a/src/igl/opengl2/unproject.h
+++ b/src/libigl/igl/opengl2/unproject.h
diff --git a/src/igl/opengl2/unproject_to_zero_plane.cpp b/src/libigl/igl/opengl2/unproject_to_zero_plane.cpp
index 1c2945886..1c2945886 100644
--- a/src/igl/opengl2/unproject_to_zero_plane.cpp
+++ b/src/libigl/igl/opengl2/unproject_to_zero_plane.cpp
diff --git a/src/igl/opengl2/unproject_to_zero_plane.h b/src/libigl/igl/opengl2/unproject_to_zero_plane.h
index d76337e20..d76337e20 100644
--- a/src/igl/opengl2/unproject_to_zero_plane.h
+++ b/src/libigl/igl/opengl2/unproject_to_zero_plane.h
diff --git a/src/igl/opengl2/up_axis.cpp b/src/libigl/igl/opengl2/up_axis.cpp
index c6b3c02a0..c6b3c02a0 100644
--- a/src/igl/opengl2/up_axis.cpp
+++ b/src/libigl/igl/opengl2/up_axis.cpp
diff --git a/src/igl/opengl2/up_axis.h b/src/libigl/igl/opengl2/up_axis.h
index 2c042fb2c..2c042fb2c 100644
--- a/src/igl/opengl2/up_axis.h
+++ b/src/libigl/igl/opengl2/up_axis.h
diff --git a/src/igl/opengl2/view_axis.cpp b/src/libigl/igl/opengl2/view_axis.cpp
index 5145cd207..5145cd207 100644
--- a/src/igl/opengl2/view_axis.cpp
+++ b/src/libigl/igl/opengl2/view_axis.cpp
diff --git a/src/igl/opengl2/view_axis.h b/src/libigl/igl/opengl2/view_axis.h
index ab324cbad..ab324cbad 100644
--- a/src/igl/opengl2/view_axis.h
+++ b/src/libigl/igl/opengl2/view_axis.h
diff --git a/src/igl/orient_outward.cpp b/src/libigl/igl/orient_outward.cpp
index 522745bc4..522745bc4 100644
--- a/src/igl/orient_outward.cpp
+++ b/src/libigl/igl/orient_outward.cpp
diff --git a/src/igl/orient_outward.h b/src/libigl/igl/orient_outward.h
index 197c8b950..197c8b950 100644
--- a/src/igl/orient_outward.h
+++ b/src/libigl/igl/orient_outward.h
diff --git a/src/igl/orientable_patches.cpp b/src/libigl/igl/orientable_patches.cpp
index fa2ea1bd4..fa2ea1bd4 100644
--- a/src/igl/orientable_patches.cpp
+++ b/src/libigl/igl/orientable_patches.cpp
diff --git a/src/igl/orientable_patches.h b/src/libigl/igl/orientable_patches.h
index a74284ac5..a74284ac5 100644
--- a/src/igl/orientable_patches.h
+++ b/src/libigl/igl/orientable_patches.h
diff --git a/src/igl/oriented_facets.cpp b/src/libigl/igl/oriented_facets.cpp
index 722679335..722679335 100644
--- a/src/igl/oriented_facets.cpp
+++ b/src/libigl/igl/oriented_facets.cpp
diff --git a/src/igl/oriented_facets.h b/src/libigl/igl/oriented_facets.h
index b0a66ef08..b0a66ef08 100644
--- a/src/igl/oriented_facets.h
+++ b/src/libigl/igl/oriented_facets.h
diff --git a/src/igl/orth.cpp b/src/libigl/igl/orth.cpp
index 467a4993e..467a4993e 100644
--- a/src/igl/orth.cpp
+++ b/src/libigl/igl/orth.cpp
diff --git a/src/igl/orth.h b/src/libigl/igl/orth.h
index a77cd6593..a77cd6593 100644
--- a/src/igl/orth.h
+++ b/src/libigl/igl/orth.h
diff --git a/src/igl/ortho.cpp b/src/libigl/igl/ortho.cpp
index e634eed74..e634eed74 100644
--- a/src/igl/ortho.cpp
+++ b/src/libigl/igl/ortho.cpp
diff --git a/src/igl/ortho.h b/src/libigl/igl/ortho.h
index 70b9cab4d..70b9cab4d 100644
--- a/src/igl/ortho.h
+++ b/src/libigl/igl/ortho.h
diff --git a/src/igl/outer_element.cpp b/src/libigl/igl/outer_element.cpp
index 2ce837780..2ce837780 100644
--- a/src/igl/outer_element.cpp
+++ b/src/libigl/igl/outer_element.cpp
diff --git a/src/igl/outer_element.h b/src/libigl/igl/outer_element.h
index 6fbaf9c5d..6fbaf9c5d 100644
--- a/src/igl/outer_element.h
+++ b/src/libigl/igl/outer_element.h
diff --git a/src/igl/parallel_for.h b/src/libigl/igl/parallel_for.h
index 458adace5..458adace5 100644
--- a/src/igl/parallel_for.h
+++ b/src/libigl/igl/parallel_for.h
diff --git a/src/igl/parallel_transport_angles.cpp b/src/libigl/igl/parallel_transport_angles.cpp
index 0e3803df2..0e3803df2 100644
--- a/src/igl/parallel_transport_angles.cpp
+++ b/src/libigl/igl/parallel_transport_angles.cpp
diff --git a/src/igl/parallel_transport_angles.h b/src/libigl/igl/parallel_transport_angles.h
index e37d7f373..e37d7f373 100644
--- a/src/igl/parallel_transport_angles.h
+++ b/src/libigl/igl/parallel_transport_angles.h
diff --git a/src/igl/partition.cpp b/src/libigl/igl/partition.cpp
index d2ef34c94..d2ef34c94 100644
--- a/src/igl/partition.cpp
+++ b/src/libigl/igl/partition.cpp
diff --git a/src/igl/partition.h b/src/libigl/igl/partition.h
index 167ebd0d7..167ebd0d7 100644
--- a/src/igl/partition.h
+++ b/src/libigl/igl/partition.h
diff --git a/src/igl/parula.cpp b/src/libigl/igl/parula.cpp
index b3daaa5e7..b3daaa5e7 100644
--- a/src/igl/parula.cpp
+++ b/src/libigl/igl/parula.cpp
diff --git a/src/igl/parula.h b/src/libigl/igl/parula.h
index 55cbd447f..55cbd447f 100644
--- a/src/igl/parula.h
+++ b/src/libigl/igl/parula.h
diff --git a/src/igl/path_to_executable.cpp b/src/libigl/igl/path_to_executable.cpp
index 509a763d6..509a763d6 100644
--- a/src/igl/path_to_executable.cpp
+++ b/src/libigl/igl/path_to_executable.cpp
diff --git a/src/igl/path_to_executable.h b/src/libigl/igl/path_to_executable.h
index 169c3400b..169c3400b 100644
--- a/src/igl/path_to_executable.h
+++ b/src/libigl/igl/path_to_executable.h
diff --git a/src/igl/pathinfo.cpp b/src/libigl/igl/pathinfo.cpp
index 110535cd8..110535cd8 100644
--- a/src/igl/pathinfo.cpp
+++ b/src/libigl/igl/pathinfo.cpp
diff --git a/src/igl/pathinfo.h b/src/libigl/igl/pathinfo.h
index b59e48157..b59e48157 100644
--- a/src/igl/pathinfo.h
+++ b/src/libigl/igl/pathinfo.h
diff --git a/src/igl/per_corner_normals.cpp b/src/libigl/igl/per_corner_normals.cpp
index 5d2aa6aff..5d2aa6aff 100644
--- a/src/igl/per_corner_normals.cpp
+++ b/src/libigl/igl/per_corner_normals.cpp
diff --git a/src/igl/per_corner_normals.h b/src/libigl/igl/per_corner_normals.h
index f93f7eb46..f93f7eb46 100644
--- a/src/igl/per_corner_normals.h
+++ b/src/libigl/igl/per_corner_normals.h
diff --git a/src/igl/per_edge_normals.cpp b/src/libigl/igl/per_edge_normals.cpp
index 8aa71791d..8aa71791d 100644
--- a/src/igl/per_edge_normals.cpp
+++ b/src/libigl/igl/per_edge_normals.cpp
diff --git a/src/igl/per_edge_normals.h b/src/libigl/igl/per_edge_normals.h
index b40d72976..b40d72976 100644
--- a/src/igl/per_edge_normals.h
+++ b/src/libigl/igl/per_edge_normals.h
diff --git a/src/igl/per_face_normals.cpp b/src/libigl/igl/per_face_normals.cpp
index d3de7ff95..d3de7ff95 100644
--- a/src/igl/per_face_normals.cpp
+++ b/src/libigl/igl/per_face_normals.cpp
diff --git a/src/igl/per_face_normals.h b/src/libigl/igl/per_face_normals.h
index 220e5e9a6..220e5e9a6 100644
--- a/src/igl/per_face_normals.h
+++ b/src/libigl/igl/per_face_normals.h
diff --git a/src/igl/per_vertex_attribute_smoothing.cpp b/src/libigl/igl/per_vertex_attribute_smoothing.cpp
index ecf2b4e82..ecf2b4e82 100644
--- a/src/igl/per_vertex_attribute_smoothing.cpp
+++ b/src/libigl/igl/per_vertex_attribute_smoothing.cpp
diff --git a/src/igl/per_vertex_attribute_smoothing.h b/src/libigl/igl/per_vertex_attribute_smoothing.h
index 662810236..662810236 100644
--- a/src/igl/per_vertex_attribute_smoothing.h
+++ b/src/libigl/igl/per_vertex_attribute_smoothing.h
diff --git a/src/igl/per_vertex_normals.cpp b/src/libigl/igl/per_vertex_normals.cpp
index c3bbda193..c3bbda193 100644
--- a/src/igl/per_vertex_normals.cpp
+++ b/src/libigl/igl/per_vertex_normals.cpp
diff --git a/src/igl/per_vertex_normals.h b/src/libigl/igl/per_vertex_normals.h
index be4ba0461..be4ba0461 100644
--- a/src/igl/per_vertex_normals.h
+++ b/src/libigl/igl/per_vertex_normals.h
diff --git a/src/igl/per_vertex_point_to_plane_quadrics.cpp b/src/libigl/igl/per_vertex_point_to_plane_quadrics.cpp
index 6d1be71b0..6d1be71b0 100644
--- a/src/igl/per_vertex_point_to_plane_quadrics.cpp
+++ b/src/libigl/igl/per_vertex_point_to_plane_quadrics.cpp
diff --git a/src/igl/per_vertex_point_to_plane_quadrics.h b/src/libigl/igl/per_vertex_point_to_plane_quadrics.h
index 3e9eb3abf..3e9eb3abf 100644
--- a/src/igl/per_vertex_point_to_plane_quadrics.h
+++ b/src/libigl/igl/per_vertex_point_to_plane_quadrics.h
diff --git a/src/igl/piecewise_constant_winding_number.cpp b/src/libigl/igl/piecewise_constant_winding_number.cpp
index 4bf7d76f8..4bf7d76f8 100644
--- a/src/igl/piecewise_constant_winding_number.cpp
+++ b/src/libigl/igl/piecewise_constant_winding_number.cpp
diff --git a/src/igl/piecewise_constant_winding_number.h b/src/libigl/igl/piecewise_constant_winding_number.h
index ebbeb6e98..ebbeb6e98 100644
--- a/src/igl/piecewise_constant_winding_number.h
+++ b/src/libigl/igl/piecewise_constant_winding_number.h
diff --git a/src/igl/pinv.cpp b/src/libigl/igl/pinv.cpp
index acf6a1913..acf6a1913 100644
--- a/src/igl/pinv.cpp
+++ b/src/libigl/igl/pinv.cpp
diff --git a/src/igl/pinv.h b/src/libigl/igl/pinv.h
index 045a17da2..045a17da2 100644
--- a/src/igl/pinv.h
+++ b/src/libigl/igl/pinv.h
diff --git a/src/igl/planarize_quad_mesh.cpp b/src/libigl/igl/planarize_quad_mesh.cpp
index d3c06be62..d3c06be62 100644
--- a/src/igl/planarize_quad_mesh.cpp
+++ b/src/libigl/igl/planarize_quad_mesh.cpp
diff --git a/src/igl/planarize_quad_mesh.h b/src/libigl/igl/planarize_quad_mesh.h
index 0de7bf389..0de7bf389 100644
--- a/src/igl/planarize_quad_mesh.h
+++ b/src/libigl/igl/planarize_quad_mesh.h
diff --git a/src/igl/ply.h b/src/libigl/igl/ply.h
index 60f2b29de..60f2b29de 100644
--- a/src/igl/ply.h
+++ b/src/libigl/igl/ply.h
diff --git a/src/igl/png/readPNG.cpp b/src/libigl/igl/png/readPNG.cpp
index 8d42ad8d9..8d42ad8d9 100644
--- a/src/igl/png/readPNG.cpp
+++ b/src/libigl/igl/png/readPNG.cpp
diff --git a/src/igl/png/readPNG.h b/src/libigl/igl/png/readPNG.h
index 65adf2c6c..65adf2c6c 100644
--- a/src/igl/png/readPNG.h
+++ b/src/libigl/igl/png/readPNG.h
diff --git a/src/igl/png/render_to_png.cpp b/src/libigl/igl/png/render_to_png.cpp
index 6533ad9ab..6533ad9ab 100644
--- a/src/igl/png/render_to_png.cpp
+++ b/src/libigl/igl/png/render_to_png.cpp
diff --git a/src/igl/png/render_to_png.h b/src/libigl/igl/png/render_to_png.h
index 508e12b1f..508e12b1f 100644
--- a/src/igl/png/render_to_png.h
+++ b/src/libigl/igl/png/render_to_png.h
diff --git a/src/igl/png/render_to_png_async.cpp b/src/libigl/igl/png/render_to_png_async.cpp
index 033701e63..033701e63 100644
--- a/src/igl/png/render_to_png_async.cpp
+++ b/src/libigl/igl/png/render_to_png_async.cpp
diff --git a/src/igl/png/render_to_png_async.h b/src/libigl/igl/png/render_to_png_async.h
index c4ac07c64..c4ac07c64 100644
--- a/src/igl/png/render_to_png_async.h
+++ b/src/libigl/igl/png/render_to_png_async.h
diff --git a/src/igl/png/texture_from_file.cpp b/src/libigl/igl/png/texture_from_file.cpp
index 60e8c795c..60e8c795c 100644
--- a/src/igl/png/texture_from_file.cpp
+++ b/src/libigl/igl/png/texture_from_file.cpp
diff --git a/src/igl/png/texture_from_file.h b/src/libigl/igl/png/texture_from_file.h
index 8852d101e..8852d101e 100644
--- a/src/igl/png/texture_from_file.h
+++ b/src/libigl/igl/png/texture_from_file.h
diff --git a/src/igl/png/texture_from_png.cpp b/src/libigl/igl/png/texture_from_png.cpp
index fde3c002c..fde3c002c 100644
--- a/src/igl/png/texture_from_png.cpp
+++ b/src/libigl/igl/png/texture_from_png.cpp
diff --git a/src/igl/png/texture_from_png.h b/src/libigl/igl/png/texture_from_png.h
index db8c1988e..db8c1988e 100644
--- a/src/igl/png/texture_from_png.h
+++ b/src/libigl/igl/png/texture_from_png.h
diff --git a/src/igl/png/writePNG.cpp b/src/libigl/igl/png/writePNG.cpp
index 9ab68d775..9ab68d775 100644
--- a/src/igl/png/writePNG.cpp
+++ b/src/libigl/igl/png/writePNG.cpp
diff --git a/src/igl/png/writePNG.h b/src/libigl/igl/png/writePNG.h
index b0623249f..b0623249f 100644
--- a/src/igl/png/writePNG.h
+++ b/src/libigl/igl/png/writePNG.h
diff --git a/src/igl/point_in_circle.cpp b/src/libigl/igl/point_in_circle.cpp
index 9c26d8c0d..9c26d8c0d 100644
--- a/src/igl/point_in_circle.cpp
+++ b/src/libigl/igl/point_in_circle.cpp
diff --git a/src/igl/point_in_circle.h b/src/libigl/igl/point_in_circle.h
index f19344c40..f19344c40 100644
--- a/src/igl/point_in_circle.h
+++ b/src/libigl/igl/point_in_circle.h
diff --git a/src/igl/point_in_poly.cpp b/src/libigl/igl/point_in_poly.cpp
index f0b07edf9..f0b07edf9 100644
--- a/src/igl/point_in_poly.cpp
+++ b/src/libigl/igl/point_in_poly.cpp
diff --git a/src/igl/point_in_poly.h b/src/libigl/igl/point_in_poly.h
index 2b9c6e51b..2b9c6e51b 100644
--- a/src/igl/point_in_poly.h
+++ b/src/libigl/igl/point_in_poly.h
diff --git a/src/igl/point_mesh_squared_distance.cpp b/src/libigl/igl/point_mesh_squared_distance.cpp
index 57dd9aa14..57dd9aa14 100644
--- a/src/igl/point_mesh_squared_distance.cpp
+++ b/src/libigl/igl/point_mesh_squared_distance.cpp
diff --git a/src/igl/point_mesh_squared_distance.h b/src/libigl/igl/point_mesh_squared_distance.h
index 0635288a3..0635288a3 100644
--- a/src/igl/point_mesh_squared_distance.h
+++ b/src/libigl/igl/point_mesh_squared_distance.h
diff --git a/src/igl/point_simplex_squared_distance.cpp b/src/libigl/igl/point_simplex_squared_distance.cpp
index e2bc34d28..e2bc34d28 100644
--- a/src/igl/point_simplex_squared_distance.cpp
+++ b/src/libigl/igl/point_simplex_squared_distance.cpp
diff --git a/src/igl/point_simplex_squared_distance.h b/src/libigl/igl/point_simplex_squared_distance.h
index 0cc871cf0..0cc871cf0 100644
--- a/src/igl/point_simplex_squared_distance.h
+++ b/src/libigl/igl/point_simplex_squared_distance.h
diff --git a/src/igl/polar_dec.cpp b/src/libigl/igl/polar_dec.cpp
index cdd358a07..cdd358a07 100644
--- a/src/igl/polar_dec.cpp
+++ b/src/libigl/igl/polar_dec.cpp
diff --git a/src/igl/polar_dec.h b/src/libigl/igl/polar_dec.h
index 2b995eabe..2b995eabe 100644
--- a/src/igl/polar_dec.h
+++ b/src/libigl/igl/polar_dec.h
diff --git a/src/igl/polar_svd.cpp b/src/libigl/igl/polar_svd.cpp
index 962a754fb..962a754fb 100644
--- a/src/igl/polar_svd.cpp
+++ b/src/libigl/igl/polar_svd.cpp
diff --git a/src/igl/polar_svd.h b/src/libigl/igl/polar_svd.h
index 13d3f3873..13d3f3873 100644
--- a/src/igl/polar_svd.h
+++ b/src/libigl/igl/polar_svd.h
diff --git a/src/igl/polar_svd3x3.cpp b/src/libigl/igl/polar_svd3x3.cpp
index c0d972aca..c0d972aca 100644
--- a/src/igl/polar_svd3x3.cpp
+++ b/src/libigl/igl/polar_svd3x3.cpp
diff --git a/src/igl/polar_svd3x3.h b/src/libigl/igl/polar_svd3x3.h
index a579774e0..a579774e0 100644
--- a/src/igl/polar_svd3x3.h
+++ b/src/libigl/igl/polar_svd3x3.h
diff --git a/src/igl/polygon_mesh_to_triangle_mesh.cpp b/src/libigl/igl/polygon_mesh_to_triangle_mesh.cpp
index 2ea43238b..2ea43238b 100644
--- a/src/igl/polygon_mesh_to_triangle_mesh.cpp
+++ b/src/libigl/igl/polygon_mesh_to_triangle_mesh.cpp
diff --git a/src/igl/polygon_mesh_to_triangle_mesh.h b/src/libigl/igl/polygon_mesh_to_triangle_mesh.h
index 7d8f16e82..7d8f16e82 100644
--- a/src/igl/polygon_mesh_to_triangle_mesh.h
+++ b/src/libigl/igl/polygon_mesh_to_triangle_mesh.h
diff --git a/src/igl/principal_curvature.cpp b/src/libigl/igl/principal_curvature.cpp
index 5712130a0..5712130a0 100644
--- a/src/igl/principal_curvature.cpp
+++ b/src/libigl/igl/principal_curvature.cpp
diff --git a/src/igl/principal_curvature.h b/src/libigl/igl/principal_curvature.h
index 958e58418..958e58418 100644
--- a/src/igl/principal_curvature.h
+++ b/src/libigl/igl/principal_curvature.h
diff --git a/src/igl/print_ijv.cpp b/src/libigl/igl/print_ijv.cpp
index 38b1dd22a..38b1dd22a 100644
--- a/src/igl/print_ijv.cpp
+++ b/src/libigl/igl/print_ijv.cpp
diff --git a/src/igl/print_ijv.h b/src/libigl/igl/print_ijv.h
index e45c1a76c..e45c1a76c 100644
--- a/src/igl/print_ijv.h
+++ b/src/libigl/igl/print_ijv.h
diff --git a/src/igl/print_vector.cpp b/src/libigl/igl/print_vector.cpp
index b47753216..b47753216 100644
--- a/src/igl/print_vector.cpp
+++ b/src/libigl/igl/print_vector.cpp
diff --git a/src/igl/print_vector.h b/src/libigl/igl/print_vector.h
index ab2dd018c..ab2dd018c 100644
--- a/src/igl/print_vector.h
+++ b/src/libigl/igl/print_vector.h
diff --git a/src/igl/procrustes.cpp b/src/libigl/igl/procrustes.cpp
index 659eea340..659eea340 100644
--- a/src/igl/procrustes.cpp
+++ b/src/libigl/igl/procrustes.cpp
diff --git a/src/igl/procrustes.h b/src/libigl/igl/procrustes.h
index 5ce00db49..5ce00db49 100644
--- a/src/igl/procrustes.h
+++ b/src/libigl/igl/procrustes.h
diff --git a/src/igl/project.cpp b/src/libigl/igl/project.cpp
index e57004f3c..e57004f3c 100644
--- a/src/igl/project.cpp
+++ b/src/libigl/igl/project.cpp
diff --git a/src/igl/project.h b/src/libigl/igl/project.h
index e2ee27a15..e2ee27a15 100644
--- a/src/igl/project.h
+++ b/src/libigl/igl/project.h
diff --git a/src/igl/project_isometrically_to_plane.cpp b/src/libigl/igl/project_isometrically_to_plane.cpp
index 537629caa..537629caa 100644
--- a/src/igl/project_isometrically_to_plane.cpp
+++ b/src/libigl/igl/project_isometrically_to_plane.cpp
diff --git a/src/igl/project_isometrically_to_plane.h b/src/libigl/igl/project_isometrically_to_plane.h
index 388f6c307..388f6c307 100644
--- a/src/igl/project_isometrically_to_plane.h
+++ b/src/libigl/igl/project_isometrically_to_plane.h
diff --git a/src/igl/project_to_line.cpp b/src/libigl/igl/project_to_line.cpp
index a7f3a690e..a7f3a690e 100644
--- a/src/igl/project_to_line.cpp
+++ b/src/libigl/igl/project_to_line.cpp
diff --git a/src/igl/project_to_line.h b/src/libigl/igl/project_to_line.h
index d11399a76..d11399a76 100644
--- a/src/igl/project_to_line.h
+++ b/src/libigl/igl/project_to_line.h
diff --git a/src/igl/project_to_line_segment.cpp b/src/libigl/igl/project_to_line_segment.cpp
index 71866fa33..71866fa33 100644
--- a/src/igl/project_to_line_segment.cpp
+++ b/src/libigl/igl/project_to_line_segment.cpp
diff --git a/src/igl/project_to_line_segment.h b/src/libigl/igl/project_to_line_segment.h
index 2fe33f2d4..2fe33f2d4 100644
--- a/src/igl/project_to_line_segment.h
+++ b/src/libigl/igl/project_to_line_segment.h
diff --git a/src/igl/pseudonormal_test.cpp b/src/libigl/igl/pseudonormal_test.cpp
index b56fdf7ba..b56fdf7ba 100644
--- a/src/igl/pseudonormal_test.cpp
+++ b/src/libigl/igl/pseudonormal_test.cpp
diff --git a/src/igl/pseudonormal_test.h b/src/libigl/igl/pseudonormal_test.h
index fc07946fb..fc07946fb 100644
--- a/src/igl/pseudonormal_test.h
+++ b/src/libigl/igl/pseudonormal_test.h
diff --git a/src/igl/pso.cpp b/src/libigl/igl/pso.cpp
index bf24a3a8c..bf24a3a8c 100644
--- a/src/igl/pso.cpp
+++ b/src/libigl/igl/pso.cpp
diff --git a/src/igl/pso.h b/src/libigl/igl/pso.h
index d2a2ccdff..d2a2ccdff 100644
--- a/src/igl/pso.h
+++ b/src/libigl/igl/pso.h
diff --git a/src/igl/qslim.cpp b/src/libigl/igl/qslim.cpp
index e76db5f0b..e76db5f0b 100644
--- a/src/igl/qslim.cpp
+++ b/src/libigl/igl/qslim.cpp
diff --git a/src/igl/qslim.h b/src/libigl/igl/qslim.h
index c1cd9bd44..c1cd9bd44 100644
--- a/src/igl/qslim.h
+++ b/src/libigl/igl/qslim.h
diff --git a/src/igl/qslim_optimal_collapse_edge_callbacks.cpp b/src/libigl/igl/qslim_optimal_collapse_edge_callbacks.cpp
index ff3fbd045..ff3fbd045 100644
--- a/src/igl/qslim_optimal_collapse_edge_callbacks.cpp
+++ b/src/libigl/igl/qslim_optimal_collapse_edge_callbacks.cpp
diff --git a/src/igl/qslim_optimal_collapse_edge_callbacks.h b/src/libigl/igl/qslim_optimal_collapse_edge_callbacks.h
index 2625eadf5..2625eadf5 100644
--- a/src/igl/qslim_optimal_collapse_edge_callbacks.h
+++ b/src/libigl/igl/qslim_optimal_collapse_edge_callbacks.h
diff --git a/src/igl/quad_planarity.cpp b/src/libigl/igl/quad_planarity.cpp
index 2e0e4773e..2e0e4773e 100644
--- a/src/igl/quad_planarity.cpp
+++ b/src/libigl/igl/quad_planarity.cpp
diff --git a/src/igl/quad_planarity.h b/src/libigl/igl/quad_planarity.h
index 0d78b4e35..0d78b4e35 100644
--- a/src/igl/quad_planarity.h
+++ b/src/libigl/igl/quad_planarity.h
diff --git a/src/igl/quadric_binary_plus_operator.cpp b/src/libigl/igl/quadric_binary_plus_operator.cpp
index eb3fd695e..eb3fd695e 100644
--- a/src/igl/quadric_binary_plus_operator.cpp
+++ b/src/libigl/igl/quadric_binary_plus_operator.cpp
diff --git a/src/igl/quadric_binary_plus_operator.h b/src/libigl/igl/quadric_binary_plus_operator.h
index 3c6b845d8..3c6b845d8 100644
--- a/src/igl/quadric_binary_plus_operator.h
+++ b/src/libigl/igl/quadric_binary_plus_operator.h
diff --git a/src/igl/quat_conjugate.cpp b/src/libigl/igl/quat_conjugate.cpp
index 5856ea72d..5856ea72d 100644
--- a/src/igl/quat_conjugate.cpp
+++ b/src/libigl/igl/quat_conjugate.cpp
diff --git a/src/igl/quat_conjugate.h b/src/libigl/igl/quat_conjugate.h
index 32ccb3b5b..32ccb3b5b 100644
--- a/src/igl/quat_conjugate.h
+++ b/src/libigl/igl/quat_conjugate.h
diff --git a/src/igl/quat_mult.cpp b/src/libigl/igl/quat_mult.cpp
index beb7baba5..beb7baba5 100644
--- a/src/igl/quat_mult.cpp
+++ b/src/libigl/igl/quat_mult.cpp
diff --git a/src/igl/quat_mult.h b/src/libigl/igl/quat_mult.h
index 4a7ba654f..4a7ba654f 100644
--- a/src/igl/quat_mult.h
+++ b/src/libigl/igl/quat_mult.h
diff --git a/src/igl/quat_to_axis_angle.cpp b/src/libigl/igl/quat_to_axis_angle.cpp
index 1aa59fad6..1aa59fad6 100644
--- a/src/igl/quat_to_axis_angle.cpp
+++ b/src/libigl/igl/quat_to_axis_angle.cpp
diff --git a/src/igl/quat_to_axis_angle.h b/src/libigl/igl/quat_to_axis_angle.h
index 77ea10e5c..77ea10e5c 100644
--- a/src/igl/quat_to_axis_angle.h
+++ b/src/libigl/igl/quat_to_axis_angle.h
diff --git a/src/igl/quat_to_mat.cpp b/src/libigl/igl/quat_to_mat.cpp
index 22ec07b94..22ec07b94 100644
--- a/src/igl/quat_to_mat.cpp
+++ b/src/libigl/igl/quat_to_mat.cpp
diff --git a/src/igl/quat_to_mat.h b/src/libigl/igl/quat_to_mat.h
index 4291b291e..4291b291e 100644
--- a/src/igl/quat_to_mat.h
+++ b/src/libigl/igl/quat_to_mat.h
diff --git a/src/igl/quats_to_column.cpp b/src/libigl/igl/quats_to_column.cpp
index a4a88a666..a4a88a666 100644
--- a/src/igl/quats_to_column.cpp
+++ b/src/libigl/igl/quats_to_column.cpp
diff --git a/src/igl/quats_to_column.h b/src/libigl/igl/quats_to_column.h
index 4a7795ae1..4a7795ae1 100644
--- a/src/igl/quats_to_column.h
+++ b/src/libigl/igl/quats_to_column.h
diff --git a/src/igl/ramer_douglas_peucker.cpp b/src/libigl/igl/ramer_douglas_peucker.cpp
index 0dd1a40a3..0dd1a40a3 100644
--- a/src/igl/ramer_douglas_peucker.cpp
+++ b/src/libigl/igl/ramer_douglas_peucker.cpp
diff --git a/src/igl/ramer_douglas_peucker.h b/src/libigl/igl/ramer_douglas_peucker.h
index dcfe47e85..dcfe47e85 100644
--- a/src/igl/ramer_douglas_peucker.h
+++ b/src/libigl/igl/ramer_douglas_peucker.h
diff --git a/src/igl/random_dir.cpp b/src/libigl/igl/random_dir.cpp
index f30783418..f30783418 100644
--- a/src/igl/random_dir.cpp
+++ b/src/libigl/igl/random_dir.cpp
diff --git a/src/igl/random_dir.h b/src/libigl/igl/random_dir.h
index 78027db05..78027db05 100644
--- a/src/igl/random_dir.h
+++ b/src/libigl/igl/random_dir.h
diff --git a/src/igl/random_points_on_mesh.cpp b/src/libigl/igl/random_points_on_mesh.cpp
index b28135ad1..b28135ad1 100644
--- a/src/igl/random_points_on_mesh.cpp
+++ b/src/libigl/igl/random_points_on_mesh.cpp
diff --git a/src/igl/random_points_on_mesh.h b/src/libigl/igl/random_points_on_mesh.h
index 7cde24f3c..7cde24f3c 100644
--- a/src/igl/random_points_on_mesh.h
+++ b/src/libigl/igl/random_points_on_mesh.h
diff --git a/src/igl/random_quaternion.cpp b/src/libigl/igl/random_quaternion.cpp
index 2d042e33f..2d042e33f 100644
--- a/src/igl/random_quaternion.cpp
+++ b/src/libigl/igl/random_quaternion.cpp
diff --git a/src/igl/random_quaternion.h b/src/libigl/igl/random_quaternion.h
index dfa36022b..dfa36022b 100644
--- a/src/igl/random_quaternion.h
+++ b/src/libigl/igl/random_quaternion.h
diff --git a/src/igl/random_search.cpp b/src/libigl/igl/random_search.cpp
index d248d73e6..d248d73e6 100644
--- a/src/igl/random_search.cpp
+++ b/src/libigl/igl/random_search.cpp
diff --git a/src/igl/random_search.h b/src/libigl/igl/random_search.h
index 8573e88cf..8573e88cf 100644
--- a/src/igl/random_search.h
+++ b/src/libigl/igl/random_search.h
diff --git a/src/igl/randperm.cpp b/src/libigl/igl/randperm.cpp
index d32af1760..d32af1760 100644
--- a/src/igl/randperm.cpp
+++ b/src/libigl/igl/randperm.cpp
diff --git a/src/igl/randperm.h b/src/libigl/igl/randperm.h
index 0ba067141..0ba067141 100644
--- a/src/igl/randperm.h
+++ b/src/libigl/igl/randperm.h
diff --git a/src/igl/ray_box_intersect.cpp b/src/libigl/igl/ray_box_intersect.cpp
index 8c6346d86..8c6346d86 100644
--- a/src/igl/ray_box_intersect.cpp
+++ b/src/libigl/igl/ray_box_intersect.cpp
diff --git a/src/igl/ray_box_intersect.h b/src/libigl/igl/ray_box_intersect.h
index 6b6e14aaa..6b6e14aaa 100644
--- a/src/igl/ray_box_intersect.h
+++ b/src/libigl/igl/ray_box_intersect.h
diff --git a/src/igl/ray_mesh_intersect.cpp b/src/libigl/igl/ray_mesh_intersect.cpp
index 512a35c46..512a35c46 100644
--- a/src/igl/ray_mesh_intersect.cpp
+++ b/src/libigl/igl/ray_mesh_intersect.cpp
diff --git a/src/igl/ray_mesh_intersect.h b/src/libigl/igl/ray_mesh_intersect.h
index e081bf3bb..e081bf3bb 100644
--- a/src/igl/ray_mesh_intersect.h
+++ b/src/libigl/igl/ray_mesh_intersect.h
diff --git a/src/igl/ray_sphere_intersect.cpp b/src/libigl/igl/ray_sphere_intersect.cpp
index 8a05c2a12..8a05c2a12 100644
--- a/src/igl/ray_sphere_intersect.cpp
+++ b/src/libigl/igl/ray_sphere_intersect.cpp
diff --git a/src/igl/ray_sphere_intersect.h b/src/libigl/igl/ray_sphere_intersect.h
index b4dfea379..b4dfea379 100644
--- a/src/igl/ray_sphere_intersect.h
+++ b/src/libigl/igl/ray_sphere_intersect.h
diff --git a/src/igl/raytri.c b/src/libigl/igl/raytri.c
index b5e7f7b1f..b5e7f7b1f 100644
--- a/src/igl/raytri.c
+++ b/src/libigl/igl/raytri.c
diff --git a/src/igl/readBF.cpp b/src/libigl/igl/readBF.cpp
index 03099ea7e..03099ea7e 100644
--- a/src/igl/readBF.cpp
+++ b/src/libigl/igl/readBF.cpp
diff --git a/src/igl/readBF.h b/src/libigl/igl/readBF.h
index a2b010c85..a2b010c85 100644
--- a/src/igl/readBF.h
+++ b/src/libigl/igl/readBF.h
diff --git a/src/igl/readCSV.cpp b/src/libigl/igl/readCSV.cpp
index eb00b1fe4..eb00b1fe4 100644
--- a/src/igl/readCSV.cpp
+++ b/src/libigl/igl/readCSV.cpp
diff --git a/src/igl/readCSV.h b/src/libigl/igl/readCSV.h
index 480aad129..480aad129 100644
--- a/src/igl/readCSV.h
+++ b/src/libigl/igl/readCSV.h
diff --git a/src/igl/readDMAT.cpp b/src/libigl/igl/readDMAT.cpp
index 1ae9fdd65..1ae9fdd65 100644
--- a/src/igl/readDMAT.cpp
+++ b/src/libigl/igl/readDMAT.cpp
diff --git a/src/igl/readDMAT.h b/src/libigl/igl/readDMAT.h
index e09c492c1..e09c492c1 100644
--- a/src/igl/readDMAT.h
+++ b/src/libigl/igl/readDMAT.h
diff --git a/src/igl/readMESH.cpp b/src/libigl/igl/readMESH.cpp
index bc912e11b..bc912e11b 100644
--- a/src/igl/readMESH.cpp
+++ b/src/libigl/igl/readMESH.cpp
diff --git a/src/igl/readMESH.h b/src/libigl/igl/readMESH.h
index b9b763035..b9b763035 100644
--- a/src/igl/readMESH.h
+++ b/src/libigl/igl/readMESH.h
diff --git a/src/igl/readMSH.cpp b/src/libigl/igl/readMSH.cpp
index 2335fd1cc..2335fd1cc 100644
--- a/src/igl/readMSH.cpp
+++ b/src/libigl/igl/readMSH.cpp
diff --git a/src/igl/readMSH.h b/src/libigl/igl/readMSH.h
index 1463411d8..1463411d8 100644
--- a/src/igl/readMSH.h
+++ b/src/libigl/igl/readMSH.h
diff --git a/src/igl/readNODE.cpp b/src/libigl/igl/readNODE.cpp
index cb775e599..cb775e599 100644
--- a/src/igl/readNODE.cpp
+++ b/src/libigl/igl/readNODE.cpp
diff --git a/src/igl/readNODE.h b/src/libigl/igl/readNODE.h
index a4bdb4774..a4bdb4774 100644
--- a/src/igl/readNODE.h
+++ b/src/libigl/igl/readNODE.h
diff --git a/src/igl/readOBJ.cpp b/src/libigl/igl/readOBJ.cpp
index 42173fc84..42173fc84 100644
--- a/src/igl/readOBJ.cpp
+++ b/src/libigl/igl/readOBJ.cpp
diff --git a/src/igl/readOBJ.h b/src/libigl/igl/readOBJ.h
index 443b6fc8e..443b6fc8e 100644
--- a/src/igl/readOBJ.h
+++ b/src/libigl/igl/readOBJ.h
diff --git a/src/igl/readOFF.cpp b/src/libigl/igl/readOFF.cpp
index 11d7e0efc..11d7e0efc 100644
--- a/src/igl/readOFF.cpp
+++ b/src/libigl/igl/readOFF.cpp
diff --git a/src/igl/readOFF.h b/src/libigl/igl/readOFF.h
index 3d8c41fa5..3d8c41fa5 100644
--- a/src/igl/readOFF.h
+++ b/src/libigl/igl/readOFF.h
diff --git a/src/igl/readPLY.cpp b/src/libigl/igl/readPLY.cpp
index 515b3307a..515b3307a 100644
--- a/src/igl/readPLY.cpp
+++ b/src/libigl/igl/readPLY.cpp
diff --git a/src/igl/readPLY.h b/src/libigl/igl/readPLY.h
index bcb69eee2..bcb69eee2 100644
--- a/src/igl/readPLY.h
+++ b/src/libigl/igl/readPLY.h
diff --git a/src/igl/readSTL.cpp b/src/libigl/igl/readSTL.cpp
index fcdeddcdd..fcdeddcdd 100644
--- a/src/igl/readSTL.cpp
+++ b/src/libigl/igl/readSTL.cpp
diff --git a/src/igl/readSTL.h b/src/libigl/igl/readSTL.h
index ca1f7c9e5..ca1f7c9e5 100644
--- a/src/igl/readSTL.h
+++ b/src/libigl/igl/readSTL.h
diff --git a/src/igl/readTGF.cpp b/src/libigl/igl/readTGF.cpp
index 814395b30..814395b30 100644
--- a/src/igl/readTGF.cpp
+++ b/src/libigl/igl/readTGF.cpp
diff --git a/src/igl/readTGF.h b/src/libigl/igl/readTGF.h
index 68c5ddef8..68c5ddef8 100644
--- a/src/igl/readTGF.h
+++ b/src/libigl/igl/readTGF.h
diff --git a/src/igl/readWRL.cpp b/src/libigl/igl/readWRL.cpp
index ce6de3e73..ce6de3e73 100644
--- a/src/igl/readWRL.cpp
+++ b/src/libigl/igl/readWRL.cpp
diff --git a/src/igl/readWRL.h b/src/libigl/igl/readWRL.h
index 45c1fa048..45c1fa048 100644
--- a/src/igl/readWRL.h
+++ b/src/libigl/igl/readWRL.h
diff --git a/src/igl/read_triangle_mesh.cpp b/src/libigl/igl/read_triangle_mesh.cpp
index b6e52539f..b6e52539f 100644
--- a/src/igl/read_triangle_mesh.cpp
+++ b/src/libigl/igl/read_triangle_mesh.cpp
diff --git a/src/igl/read_triangle_mesh.h b/src/libigl/igl/read_triangle_mesh.h
index 26b84c5f1..26b84c5f1 100644
--- a/src/igl/read_triangle_mesh.h
+++ b/src/libigl/igl/read_triangle_mesh.h
diff --git a/src/igl/redux.h b/src/libigl/igl/redux.h
index 38ce9395a..38ce9395a 100644
--- a/src/igl/redux.h
+++ b/src/libigl/igl/redux.h
diff --git a/src/igl/remesh_along_isoline.cpp b/src/libigl/igl/remesh_along_isoline.cpp
index 7164ba8e5..7164ba8e5 100644
--- a/src/igl/remesh_along_isoline.cpp
+++ b/src/libigl/igl/remesh_along_isoline.cpp
diff --git a/src/igl/remesh_along_isoline.h b/src/libigl/igl/remesh_along_isoline.h
index 9a7c553b2..9a7c553b2 100644
--- a/src/igl/remesh_along_isoline.h
+++ b/src/libigl/igl/remesh_along_isoline.h
diff --git a/src/igl/remove_duplicate_vertices.cpp b/src/libigl/igl/remove_duplicate_vertices.cpp
index 815ee51f8..815ee51f8 100644
--- a/src/igl/remove_duplicate_vertices.cpp
+++ b/src/libigl/igl/remove_duplicate_vertices.cpp
diff --git a/src/igl/remove_duplicate_vertices.h b/src/libigl/igl/remove_duplicate_vertices.h
index 9276ba729..9276ba729 100644
--- a/src/igl/remove_duplicate_vertices.h
+++ b/src/libigl/igl/remove_duplicate_vertices.h
diff --git a/src/igl/remove_duplicates.cpp b/src/libigl/igl/remove_duplicates.cpp
index 3e97a39e1..3e97a39e1 100644
--- a/src/igl/remove_duplicates.cpp
+++ b/src/libigl/igl/remove_duplicates.cpp
diff --git a/src/igl/remove_duplicates.h b/src/libigl/igl/remove_duplicates.h
index 0e1249ce9..0e1249ce9 100644
--- a/src/igl/remove_duplicates.h
+++ b/src/libigl/igl/remove_duplicates.h
diff --git a/src/igl/remove_unreferenced.cpp b/src/libigl/igl/remove_unreferenced.cpp
index 3ee8260aa..3ee8260aa 100644
--- a/src/igl/remove_unreferenced.cpp
+++ b/src/libigl/igl/remove_unreferenced.cpp
diff --git a/src/igl/remove_unreferenced.h b/src/libigl/igl/remove_unreferenced.h
index 2284190ab..2284190ab 100644
--- a/src/igl/remove_unreferenced.h
+++ b/src/libigl/igl/remove_unreferenced.h
diff --git a/src/igl/reorder.cpp b/src/libigl/igl/reorder.cpp
index ee74b2096..ee74b2096 100644
--- a/src/igl/reorder.cpp
+++ b/src/libigl/igl/reorder.cpp
diff --git a/src/igl/reorder.h b/src/libigl/igl/reorder.h
index 50f7d7b0f..50f7d7b0f 100644
--- a/src/igl/reorder.h
+++ b/src/libigl/igl/reorder.h
diff --git a/src/igl/repdiag.cpp b/src/libigl/igl/repdiag.cpp
index 283ae1e75..283ae1e75 100644
--- a/src/igl/repdiag.cpp
+++ b/src/libigl/igl/repdiag.cpp
diff --git a/src/igl/repdiag.h b/src/libigl/igl/repdiag.h
index 779443374..779443374 100644
--- a/src/igl/repdiag.h
+++ b/src/libigl/igl/repdiag.h
diff --git a/src/igl/repmat.cpp b/src/libigl/igl/repmat.cpp
index f79840444..f79840444 100644
--- a/src/igl/repmat.cpp
+++ b/src/libigl/igl/repmat.cpp
diff --git a/src/igl/repmat.h b/src/libigl/igl/repmat.h
index 1509875aa..1509875aa 100644
--- a/src/igl/repmat.h
+++ b/src/libigl/igl/repmat.h
diff --git a/src/igl/resolve_duplicated_faces.cpp b/src/libigl/igl/resolve_duplicated_faces.cpp
index 3b26b8ecc..3b26b8ecc 100644
--- a/src/igl/resolve_duplicated_faces.cpp
+++ b/src/libigl/igl/resolve_duplicated_faces.cpp
diff --git a/src/igl/resolve_duplicated_faces.h b/src/libigl/igl/resolve_duplicated_faces.h
index 03ea3d6e6..03ea3d6e6 100644
--- a/src/igl/resolve_duplicated_faces.h
+++ b/src/libigl/igl/resolve_duplicated_faces.h
diff --git a/src/igl/rgb_to_hsv.cpp b/src/libigl/igl/rgb_to_hsv.cpp
index fbf32bfec..fbf32bfec 100644
--- a/src/igl/rgb_to_hsv.cpp
+++ b/src/libigl/igl/rgb_to_hsv.cpp
diff --git a/src/igl/rgb_to_hsv.h b/src/libigl/igl/rgb_to_hsv.h
index ed695ad60..ed695ad60 100644
--- a/src/igl/rgb_to_hsv.h
+++ b/src/libigl/igl/rgb_to_hsv.h
diff --git a/src/igl/rotate_by_quat.cpp b/src/libigl/igl/rotate_by_quat.cpp
index b77c812ea..b77c812ea 100644
--- a/src/igl/rotate_by_quat.cpp
+++ b/src/libigl/igl/rotate_by_quat.cpp
diff --git a/src/igl/rotate_by_quat.h b/src/libigl/igl/rotate_by_quat.h
index b45204839..b45204839 100644
--- a/src/igl/rotate_by_quat.h
+++ b/src/libigl/igl/rotate_by_quat.h
diff --git a/src/igl/rotate_vectors.cpp b/src/libigl/igl/rotate_vectors.cpp
index b236d79e6..b236d79e6 100644
--- a/src/igl/rotate_vectors.cpp
+++ b/src/libigl/igl/rotate_vectors.cpp
diff --git a/src/igl/rotate_vectors.h b/src/libigl/igl/rotate_vectors.h
index a1b64bcca..a1b64bcca 100644
--- a/src/igl/rotate_vectors.h
+++ b/src/libigl/igl/rotate_vectors.h
diff --git a/src/igl/rotation_matrix_from_directions.cpp b/src/libigl/igl/rotation_matrix_from_directions.cpp
index 4ecc1a5d9..4ecc1a5d9 100644
--- a/src/igl/rotation_matrix_from_directions.cpp
+++ b/src/libigl/igl/rotation_matrix_from_directions.cpp
diff --git a/src/igl/rotation_matrix_from_directions.h b/src/libigl/igl/rotation_matrix_from_directions.h
index ca1397272..ca1397272 100644
--- a/src/igl/rotation_matrix_from_directions.h
+++ b/src/libigl/igl/rotation_matrix_from_directions.h
diff --git a/src/igl/round.cpp b/src/libigl/igl/round.cpp
index acde47316..acde47316 100644
--- a/src/igl/round.cpp
+++ b/src/libigl/igl/round.cpp
diff --git a/src/igl/round.h b/src/libigl/igl/round.h
index cdaac731b..cdaac731b 100644
--- a/src/igl/round.h
+++ b/src/libigl/igl/round.h
diff --git a/src/igl/rows_to_matrix.cpp b/src/libigl/igl/rows_to_matrix.cpp
index 14c369e40..14c369e40 100644
--- a/src/igl/rows_to_matrix.cpp
+++ b/src/libigl/igl/rows_to_matrix.cpp
diff --git a/src/igl/rows_to_matrix.h b/src/libigl/igl/rows_to_matrix.h
index 8f62b5a2d..8f62b5a2d 100644
--- a/src/igl/rows_to_matrix.h
+++ b/src/libigl/igl/rows_to_matrix.h
diff --git a/src/igl/sample_edges.cpp b/src/libigl/igl/sample_edges.cpp
index a20df1426..a20df1426 100644
--- a/src/igl/sample_edges.cpp
+++ b/src/libigl/igl/sample_edges.cpp
diff --git a/src/igl/sample_edges.h b/src/libigl/igl/sample_edges.h
index 96822736f..96822736f 100644
--- a/src/igl/sample_edges.h
+++ b/src/libigl/igl/sample_edges.h
diff --git a/src/igl/seam_edges.cpp b/src/libigl/igl/seam_edges.cpp
index 8cbca143c..8cbca143c 100644
--- a/src/igl/seam_edges.cpp
+++ b/src/libigl/igl/seam_edges.cpp
diff --git a/src/igl/seam_edges.h b/src/libigl/igl/seam_edges.h
index 15c82826c..15c82826c 100644
--- a/src/igl/seam_edges.h
+++ b/src/libigl/igl/seam_edges.h
diff --git a/src/igl/segment_segment_intersect.cpp b/src/libigl/igl/segment_segment_intersect.cpp
index 8438c0496..8438c0496 100644
--- a/src/igl/segment_segment_intersect.cpp
+++ b/src/libigl/igl/segment_segment_intersect.cpp
diff --git a/src/igl/segment_segment_intersect.h b/src/libigl/igl/segment_segment_intersect.h
index 714629215..714629215 100644
--- a/src/igl/segment_segment_intersect.h
+++ b/src/libigl/igl/segment_segment_intersect.h
diff --git a/src/igl/serialize.h b/src/libigl/igl/serialize.h
index 54967293b..54967293b 100644
--- a/src/igl/serialize.h
+++ b/src/libigl/igl/serialize.h
diff --git a/src/igl/setdiff.cpp b/src/libigl/igl/setdiff.cpp
index 12404175a..12404175a 100644
--- a/src/igl/setdiff.cpp
+++ b/src/libigl/igl/setdiff.cpp
diff --git a/src/igl/setdiff.h b/src/libigl/igl/setdiff.h
index 20e8d6485..20e8d6485 100644
--- a/src/igl/setdiff.h
+++ b/src/libigl/igl/setdiff.h
diff --git a/src/igl/setunion.cpp b/src/libigl/igl/setunion.cpp
index eb0e721d8..eb0e721d8 100644
--- a/src/igl/setunion.cpp
+++ b/src/libigl/igl/setunion.cpp
diff --git a/src/igl/setunion.h b/src/libigl/igl/setunion.h
index f28bff653..f28bff653 100644
--- a/src/igl/setunion.h
+++ b/src/libigl/igl/setunion.h
diff --git a/src/igl/setxor.cpp b/src/libigl/igl/setxor.cpp
index 5429abdc2..5429abdc2 100644
--- a/src/igl/setxor.cpp
+++ b/src/libigl/igl/setxor.cpp
diff --git a/src/igl/setxor.h b/src/libigl/igl/setxor.h
index bbd1089fa..bbd1089fa 100644
--- a/src/igl/setxor.h
+++ b/src/libigl/igl/setxor.h
diff --git a/src/igl/shape_diameter_function.cpp b/src/libigl/igl/shape_diameter_function.cpp
index db061fe39..db061fe39 100644
--- a/src/igl/shape_diameter_function.cpp
+++ b/src/libigl/igl/shape_diameter_function.cpp
diff --git a/src/igl/shape_diameter_function.h b/src/libigl/igl/shape_diameter_function.h
index 5460cda7b..5460cda7b 100644
--- a/src/igl/shape_diameter_function.h
+++ b/src/libigl/igl/shape_diameter_function.h
diff --git a/src/igl/shapeup.cpp b/src/libigl/igl/shapeup.cpp
index f352d22bf..f352d22bf 100644
--- a/src/igl/shapeup.cpp
+++ b/src/libigl/igl/shapeup.cpp
diff --git a/src/igl/shapeup.h b/src/libigl/igl/shapeup.h
index 7230a8dc7..7230a8dc7 100644
--- a/src/igl/shapeup.h
+++ b/src/libigl/igl/shapeup.h
diff --git a/src/igl/shortest_edge_and_midpoint.cpp b/src/libigl/igl/shortest_edge_and_midpoint.cpp
index db5338d0d..db5338d0d 100644
--- a/src/igl/shortest_edge_and_midpoint.cpp
+++ b/src/libigl/igl/shortest_edge_and_midpoint.cpp
diff --git a/src/igl/shortest_edge_and_midpoint.h b/src/libigl/igl/shortest_edge_and_midpoint.h
index 45a4a2abf..45a4a2abf 100644
--- a/src/igl/shortest_edge_and_midpoint.h
+++ b/src/libigl/igl/shortest_edge_and_midpoint.h
diff --git a/src/igl/signed_angle.cpp b/src/libigl/igl/signed_angle.cpp
index 69f8aa6f5..69f8aa6f5 100644
--- a/src/igl/signed_angle.cpp
+++ b/src/libigl/igl/signed_angle.cpp
diff --git a/src/igl/signed_angle.h b/src/libigl/igl/signed_angle.h
index 547ba00a4..547ba00a4 100644
--- a/src/igl/signed_angle.h
+++ b/src/libigl/igl/signed_angle.h
diff --git a/src/igl/signed_distance.cpp b/src/libigl/igl/signed_distance.cpp
index f638b1f58..f638b1f58 100644
--- a/src/igl/signed_distance.cpp
+++ b/src/libigl/igl/signed_distance.cpp
diff --git a/src/igl/signed_distance.h b/src/libigl/igl/signed_distance.h
index 3b178d304..3b178d304 100644
--- a/src/igl/signed_distance.h
+++ b/src/libigl/igl/signed_distance.h
diff --git a/src/igl/simplify_polyhedron.cpp b/src/libigl/igl/simplify_polyhedron.cpp
index 38ba118e7..38ba118e7 100644
--- a/src/igl/simplify_polyhedron.cpp
+++ b/src/libigl/igl/simplify_polyhedron.cpp
diff --git a/src/igl/simplify_polyhedron.h b/src/libigl/igl/simplify_polyhedron.h
index 5b5018192..5b5018192 100644
--- a/src/igl/simplify_polyhedron.h
+++ b/src/libigl/igl/simplify_polyhedron.h
diff --git a/src/igl/slice.cpp b/src/libigl/igl/slice.cpp
index df3a8e9ce..df3a8e9ce 100644
--- a/src/igl/slice.cpp
+++ b/src/libigl/igl/slice.cpp
diff --git a/src/igl/slice.h b/src/libigl/igl/slice.h
index a25dfa411..a25dfa411 100644
--- a/src/igl/slice.h
+++ b/src/libigl/igl/slice.h
diff --git a/src/igl/slice_cached.cpp b/src/libigl/igl/slice_cached.cpp
index e0f13d804..e0f13d804 100644
--- a/src/igl/slice_cached.cpp
+++ b/src/libigl/igl/slice_cached.cpp
diff --git a/src/igl/slice_cached.h b/src/libigl/igl/slice_cached.h
index 84ced8dc9..84ced8dc9 100644
--- a/src/igl/slice_cached.h
+++ b/src/libigl/igl/slice_cached.h
diff --git a/src/igl/slice_into.cpp b/src/libigl/igl/slice_into.cpp
index aa12d9303..aa12d9303 100644
--- a/src/igl/slice_into.cpp
+++ b/src/libigl/igl/slice_into.cpp
diff --git a/src/igl/slice_into.h b/src/libigl/igl/slice_into.h
index 83bd8f523..83bd8f523 100644
--- a/src/igl/slice_into.h
+++ b/src/libigl/igl/slice_into.h
diff --git a/src/igl/slice_mask.cpp b/src/libigl/igl/slice_mask.cpp
index 63cb82045..63cb82045 100644
--- a/src/igl/slice_mask.cpp
+++ b/src/libigl/igl/slice_mask.cpp
diff --git a/src/igl/slice_mask.h b/src/libigl/igl/slice_mask.h
index 0a0dcda7c..0a0dcda7c 100644
--- a/src/igl/slice_mask.h
+++ b/src/libigl/igl/slice_mask.h
diff --git a/src/igl/slice_tets.cpp b/src/libigl/igl/slice_tets.cpp
index dbe042fa1..dbe042fa1 100644
--- a/src/igl/slice_tets.cpp
+++ b/src/libigl/igl/slice_tets.cpp
diff --git a/src/igl/slice_tets.h b/src/libigl/igl/slice_tets.h
index 349c5d790..349c5d790 100644
--- a/src/igl/slice_tets.h
+++ b/src/libigl/igl/slice_tets.h
diff --git a/src/igl/slim.cpp b/src/libigl/igl/slim.cpp
index a88674274..a88674274 100644
--- a/src/igl/slim.cpp
+++ b/src/libigl/igl/slim.cpp
diff --git a/src/igl/slim.h b/src/libigl/igl/slim.h
index 1965e2bba..1965e2bba 100644
--- a/src/igl/slim.h
+++ b/src/libigl/igl/slim.h
diff --git a/src/igl/snap_points.cpp b/src/libigl/igl/snap_points.cpp
index 1fc136f4c..1fc136f4c 100644
--- a/src/igl/snap_points.cpp
+++ b/src/libigl/igl/snap_points.cpp
diff --git a/src/igl/snap_points.h b/src/libigl/igl/snap_points.h
index dbb850a79..dbb850a79 100644
--- a/src/igl/snap_points.h
+++ b/src/libigl/igl/snap_points.h
diff --git a/src/igl/snap_to_canonical_view_quat.cpp b/src/libigl/igl/snap_to_canonical_view_quat.cpp
index 9fb01724c..9fb01724c 100644
--- a/src/igl/snap_to_canonical_view_quat.cpp
+++ b/src/libigl/igl/snap_to_canonical_view_quat.cpp
diff --git a/src/igl/snap_to_canonical_view_quat.h b/src/libigl/igl/snap_to_canonical_view_quat.h
index 79bc3e024..79bc3e024 100644
--- a/src/igl/snap_to_canonical_view_quat.h
+++ b/src/libigl/igl/snap_to_canonical_view_quat.h
diff --git a/src/igl/snap_to_fixed_up.cpp b/src/libigl/igl/snap_to_fixed_up.cpp
index f0fdd7de8..f0fdd7de8 100644
--- a/src/igl/snap_to_fixed_up.cpp
+++ b/src/libigl/igl/snap_to_fixed_up.cpp
diff --git a/src/igl/snap_to_fixed_up.h b/src/libigl/igl/snap_to_fixed_up.h
index 4276fa79c..4276fa79c 100644
--- a/src/igl/snap_to_fixed_up.h
+++ b/src/libigl/igl/snap_to_fixed_up.h
diff --git a/src/igl/solid_angle.cpp b/src/libigl/igl/solid_angle.cpp
index bbb478af3..bbb478af3 100644
--- a/src/igl/solid_angle.cpp
+++ b/src/libigl/igl/solid_angle.cpp
diff --git a/src/igl/solid_angle.h b/src/libigl/igl/solid_angle.h
index 2ee98a247..2ee98a247 100644
--- a/src/igl/solid_angle.h
+++ b/src/libigl/igl/solid_angle.h
diff --git a/src/igl/sort.cpp b/src/libigl/igl/sort.cpp
index 251b3063e..251b3063e 100644
--- a/src/igl/sort.cpp
+++ b/src/libigl/igl/sort.cpp
diff --git a/src/igl/sort.h b/src/libigl/igl/sort.h
index f89f54b13..f89f54b13 100644
--- a/src/igl/sort.h
+++ b/src/libigl/igl/sort.h
diff --git a/src/igl/sort_angles.cpp b/src/libigl/igl/sort_angles.cpp
index 486f621ea..486f621ea 100644
--- a/src/igl/sort_angles.cpp
+++ b/src/libigl/igl/sort_angles.cpp
diff --git a/src/igl/sort_angles.h b/src/libigl/igl/sort_angles.h
index 4763c981e..4763c981e 100644
--- a/src/igl/sort_angles.h
+++ b/src/libigl/igl/sort_angles.h
diff --git a/src/igl/sort_triangles.cpp b/src/libigl/igl/sort_triangles.cpp
index 98fd8ab1a..98fd8ab1a 100644
--- a/src/igl/sort_triangles.cpp
+++ b/src/libigl/igl/sort_triangles.cpp
diff --git a/src/igl/sort_triangles.h b/src/libigl/igl/sort_triangles.h
index b334e6530..b334e6530 100644
--- a/src/igl/sort_triangles.h
+++ b/src/libigl/igl/sort_triangles.h
diff --git a/src/igl/sort_vectors_ccw.cpp b/src/libigl/igl/sort_vectors_ccw.cpp
index ea613c51b..ea613c51b 100644
--- a/src/igl/sort_vectors_ccw.cpp
+++ b/src/libigl/igl/sort_vectors_ccw.cpp
diff --git a/src/igl/sort_vectors_ccw.h b/src/libigl/igl/sort_vectors_ccw.h
index 73c2f6fba..73c2f6fba 100644
--- a/src/igl/sort_vectors_ccw.h
+++ b/src/libigl/igl/sort_vectors_ccw.h
diff --git a/src/igl/sortrows.cpp b/src/libigl/igl/sortrows.cpp
index a5e084fd8..a5e084fd8 100644
--- a/src/igl/sortrows.cpp
+++ b/src/libigl/igl/sortrows.cpp
diff --git a/src/igl/sortrows.h b/src/libigl/igl/sortrows.h
index c0b15f29e..c0b15f29e 100644
--- a/src/igl/sortrows.h
+++ b/src/libigl/igl/sortrows.h
diff --git a/src/igl/sparse.cpp b/src/libigl/igl/sparse.cpp
index ed9cd4a49..ed9cd4a49 100644
--- a/src/igl/sparse.cpp
+++ b/src/libigl/igl/sparse.cpp
diff --git a/src/igl/sparse.h b/src/libigl/igl/sparse.h
index a947978ab..a947978ab 100644
--- a/src/igl/sparse.h
+++ b/src/libigl/igl/sparse.h
diff --git a/src/igl/sparse_cached.cpp b/src/libigl/igl/sparse_cached.cpp
index ddd65aadf..ddd65aadf 100644
--- a/src/igl/sparse_cached.cpp
+++ b/src/libigl/igl/sparse_cached.cpp
diff --git a/src/igl/sparse_cached.h b/src/libigl/igl/sparse_cached.h
index 40d288962..40d288962 100644
--- a/src/igl/sparse_cached.h
+++ b/src/libigl/igl/sparse_cached.h
diff --git a/src/igl/speye.cpp b/src/libigl/igl/speye.cpp
index 54af00c71..54af00c71 100644
--- a/src/igl/speye.cpp
+++ b/src/libigl/igl/speye.cpp
diff --git a/src/igl/speye.h b/src/libigl/igl/speye.h
index 4c2425571..4c2425571 100644
--- a/src/igl/speye.h
+++ b/src/libigl/igl/speye.h
diff --git a/src/igl/squared_edge_lengths.cpp b/src/libigl/igl/squared_edge_lengths.cpp
index d15e6c13e..d15e6c13e 100644
--- a/src/igl/squared_edge_lengths.cpp
+++ b/src/libigl/igl/squared_edge_lengths.cpp
diff --git a/src/igl/squared_edge_lengths.h b/src/libigl/igl/squared_edge_lengths.h
index 2f374d6c3..2f374d6c3 100644
--- a/src/igl/squared_edge_lengths.h
+++ b/src/libigl/igl/squared_edge_lengths.h
diff --git a/src/igl/stdin_to_temp.cpp b/src/libigl/igl/stdin_to_temp.cpp
index a7a7fbd70..a7a7fbd70 100644
--- a/src/igl/stdin_to_temp.cpp
+++ b/src/libigl/igl/stdin_to_temp.cpp
diff --git a/src/igl/stdin_to_temp.h b/src/libigl/igl/stdin_to_temp.h
index ae35219ea..ae35219ea 100644
--- a/src/igl/stdin_to_temp.h
+++ b/src/libigl/igl/stdin_to_temp.h
diff --git a/src/igl/straighten_seams.cpp b/src/libigl/igl/straighten_seams.cpp
index 0aef2b316..0aef2b316 100644
--- a/src/igl/straighten_seams.cpp
+++ b/src/libigl/igl/straighten_seams.cpp
diff --git a/src/igl/straighten_seams.h b/src/libigl/igl/straighten_seams.h
index 2eb0e9d46..2eb0e9d46 100644
--- a/src/igl/straighten_seams.h
+++ b/src/libigl/igl/straighten_seams.h
diff --git a/src/igl/sum.cpp b/src/libigl/igl/sum.cpp
index b994ce405..b994ce405 100644
--- a/src/igl/sum.cpp
+++ b/src/libigl/igl/sum.cpp
diff --git a/src/igl/sum.h b/src/libigl/igl/sum.h
index 6caeac344..6caeac344 100644
--- a/src/igl/sum.h
+++ b/src/libigl/igl/sum.h
diff --git a/src/igl/svd3x3.cpp b/src/libigl/igl/svd3x3.cpp
index dd65e0cf3..dd65e0cf3 100644
--- a/src/igl/svd3x3.cpp
+++ b/src/libigl/igl/svd3x3.cpp
diff --git a/src/igl/svd3x3.h b/src/libigl/igl/svd3x3.h
index 900d459f4..900d459f4 100644
--- a/src/igl/svd3x3.h
+++ b/src/libigl/igl/svd3x3.h
diff --git a/src/igl/svd3x3_avx.cpp b/src/libigl/igl/svd3x3_avx.cpp
index db56ee30a..db56ee30a 100644
--- a/src/igl/svd3x3_avx.cpp
+++ b/src/libigl/igl/svd3x3_avx.cpp
diff --git a/src/igl/svd3x3_avx.h b/src/libigl/igl/svd3x3_avx.h
index b814acc95..b814acc95 100644
--- a/src/igl/svd3x3_avx.h
+++ b/src/libigl/igl/svd3x3_avx.h
diff --git a/src/igl/svd3x3_sse.cpp b/src/libigl/igl/svd3x3_sse.cpp
index 2ef4e0fe8..2ef4e0fe8 100644
--- a/src/igl/svd3x3_sse.cpp
+++ b/src/libigl/igl/svd3x3_sse.cpp
diff --git a/src/igl/svd3x3_sse.h b/src/libigl/igl/svd3x3_sse.h
index 1fcff988a..1fcff988a 100644
--- a/src/igl/svd3x3_sse.h
+++ b/src/libigl/igl/svd3x3_sse.h
diff --git a/src/igl/swept_volume_bounding_box.cpp b/src/libigl/igl/swept_volume_bounding_box.cpp
index 7fc12e2f1..7fc12e2f1 100644
--- a/src/igl/swept_volume_bounding_box.cpp
+++ b/src/libigl/igl/swept_volume_bounding_box.cpp
diff --git a/src/igl/swept_volume_bounding_box.h b/src/libigl/igl/swept_volume_bounding_box.h
index f44f1f77d..f44f1f77d 100644
--- a/src/igl/swept_volume_bounding_box.h
+++ b/src/libigl/igl/swept_volume_bounding_box.h
diff --git a/src/igl/swept_volume_signed_distance.cpp b/src/libigl/igl/swept_volume_signed_distance.cpp
index 2571a7d12..2571a7d12 100644
--- a/src/igl/swept_volume_signed_distance.cpp
+++ b/src/libigl/igl/swept_volume_signed_distance.cpp
diff --git a/src/igl/swept_volume_signed_distance.h b/src/libigl/igl/swept_volume_signed_distance.h
index 86074fb67..86074fb67 100644
--- a/src/igl/swept_volume_signed_distance.h
+++ b/src/libigl/igl/swept_volume_signed_distance.h
diff --git a/src/igl/trackball.cpp b/src/libigl/igl/trackball.cpp
index 3a5fa2e9f..3a5fa2e9f 100644
--- a/src/igl/trackball.cpp
+++ b/src/libigl/igl/trackball.cpp
diff --git a/src/igl/trackball.h b/src/libigl/igl/trackball.h
index 6bf79e019..6bf79e019 100644
--- a/src/igl/trackball.h
+++ b/src/libigl/igl/trackball.h
diff --git a/src/igl/transpose_blocks.cpp b/src/libigl/igl/transpose_blocks.cpp
index 004edd7ac..004edd7ac 100644
--- a/src/igl/transpose_blocks.cpp
+++ b/src/libigl/igl/transpose_blocks.cpp
diff --git a/src/igl/transpose_blocks.h b/src/libigl/igl/transpose_blocks.h
index 65ce89fbd..65ce89fbd 100644
--- a/src/igl/transpose_blocks.h
+++ b/src/libigl/igl/transpose_blocks.h
diff --git a/src/igl/triangle/cdt.cpp b/src/libigl/igl/triangle/cdt.cpp
index cbe1b3e1a..cbe1b3e1a 100644
--- a/src/igl/triangle/cdt.cpp
+++ b/src/libigl/igl/triangle/cdt.cpp
diff --git a/src/igl/triangle/cdt.h b/src/libigl/igl/triangle/cdt.h
index 9f513e853..9f513e853 100644
--- a/src/igl/triangle/cdt.h
+++ b/src/libigl/igl/triangle/cdt.h
diff --git a/src/igl/triangle/triangulate.cpp b/src/libigl/igl/triangle/triangulate.cpp
index 5ee1d4be8..5ee1d4be8 100644
--- a/src/igl/triangle/triangulate.cpp
+++ b/src/libigl/igl/triangle/triangulate.cpp
diff --git a/src/igl/triangle/triangulate.h b/src/libigl/igl/triangle/triangulate.h
index 90abdac9d..90abdac9d 100644
--- a/src/igl/triangle/triangulate.h
+++ b/src/libigl/igl/triangle/triangulate.h
diff --git a/src/igl/triangle_fan.cpp b/src/libigl/igl/triangle_fan.cpp
index 35944d026..35944d026 100644
--- a/src/igl/triangle_fan.cpp
+++ b/src/libigl/igl/triangle_fan.cpp
diff --git a/src/igl/triangle_fan.h b/src/libigl/igl/triangle_fan.h
index b56a05bc7..b56a05bc7 100644
--- a/src/igl/triangle_fan.h
+++ b/src/libigl/igl/triangle_fan.h
diff --git a/src/igl/triangle_triangle_adjacency.cpp b/src/libigl/igl/triangle_triangle_adjacency.cpp
index 62e8fbe1c..62e8fbe1c 100644
--- a/src/igl/triangle_triangle_adjacency.cpp
+++ b/src/libigl/igl/triangle_triangle_adjacency.cpp
diff --git a/src/igl/triangle_triangle_adjacency.h b/src/libigl/igl/triangle_triangle_adjacency.h
index 632141bd0..632141bd0 100644
--- a/src/igl/triangle_triangle_adjacency.h
+++ b/src/libigl/igl/triangle_triangle_adjacency.h
diff --git a/src/igl/triangles_from_strip.cpp b/src/libigl/igl/triangles_from_strip.cpp
index 1db854834..1db854834 100644
--- a/src/igl/triangles_from_strip.cpp
+++ b/src/libigl/igl/triangles_from_strip.cpp
diff --git a/src/igl/triangles_from_strip.h b/src/libigl/igl/triangles_from_strip.h
index 01ffd6402..01ffd6402 100644
--- a/src/igl/triangles_from_strip.h
+++ b/src/libigl/igl/triangles_from_strip.h
diff --git a/src/igl/two_axis_valuator_fixed_up.cpp b/src/libigl/igl/two_axis_valuator_fixed_up.cpp
index 4ffb607f4..4ffb607f4 100644
--- a/src/igl/two_axis_valuator_fixed_up.cpp
+++ b/src/libigl/igl/two_axis_valuator_fixed_up.cpp
diff --git a/src/igl/two_axis_valuator_fixed_up.h b/src/libigl/igl/two_axis_valuator_fixed_up.h
index 7b2e9aabf..7b2e9aabf 100644
--- a/src/igl/two_axis_valuator_fixed_up.h
+++ b/src/libigl/igl/two_axis_valuator_fixed_up.h
diff --git a/src/igl/uniformly_sample_two_manifold.cpp b/src/libigl/igl/uniformly_sample_two_manifold.cpp
index d35f74113..d35f74113 100644
--- a/src/igl/uniformly_sample_two_manifold.cpp
+++ b/src/libigl/igl/uniformly_sample_two_manifold.cpp
diff --git a/src/igl/uniformly_sample_two_manifold.h b/src/libigl/igl/uniformly_sample_two_manifold.h
index 2c8400e94..2c8400e94 100644
--- a/src/igl/uniformly_sample_two_manifold.h
+++ b/src/libigl/igl/uniformly_sample_two_manifold.h
diff --git a/src/igl/unique.cpp b/src/libigl/igl/unique.cpp
index 9c5c7cb8d..9c5c7cb8d 100644
--- a/src/igl/unique.cpp
+++ b/src/libigl/igl/unique.cpp
diff --git a/src/igl/unique.h b/src/libigl/igl/unique.h
index 8618da15e..8618da15e 100644
--- a/src/igl/unique.h
+++ b/src/libigl/igl/unique.h
diff --git a/src/igl/unique_edge_map.cpp b/src/libigl/igl/unique_edge_map.cpp
index a69be58a0..a69be58a0 100644
--- a/src/igl/unique_edge_map.cpp
+++ b/src/libigl/igl/unique_edge_map.cpp
diff --git a/src/igl/unique_edge_map.h b/src/libigl/igl/unique_edge_map.h
index 4915db66f..4915db66f 100644
--- a/src/igl/unique_edge_map.h
+++ b/src/libigl/igl/unique_edge_map.h
diff --git a/src/igl/unique_rows.cpp b/src/libigl/igl/unique_rows.cpp
index 1973a80c2..1973a80c2 100644
--- a/src/igl/unique_rows.cpp
+++ b/src/libigl/igl/unique_rows.cpp
diff --git a/src/igl/unique_rows.h b/src/libigl/igl/unique_rows.h
index c612c8b1d..c612c8b1d 100644
--- a/src/igl/unique_rows.h
+++ b/src/libigl/igl/unique_rows.h
diff --git a/src/igl/unique_simplices.cpp b/src/libigl/igl/unique_simplices.cpp
index 463459866..463459866 100644
--- a/src/igl/unique_simplices.cpp
+++ b/src/libigl/igl/unique_simplices.cpp
diff --git a/src/igl/unique_simplices.h b/src/libigl/igl/unique_simplices.h
index a7c13849e..a7c13849e 100644
--- a/src/igl/unique_simplices.h
+++ b/src/libigl/igl/unique_simplices.h
diff --git a/src/igl/unproject.cpp b/src/libigl/igl/unproject.cpp
index 702d77fee..702d77fee 100644
--- a/src/igl/unproject.cpp
+++ b/src/libigl/igl/unproject.cpp
diff --git a/src/igl/unproject.h b/src/libigl/igl/unproject.h
index f34e87513..f34e87513 100644
--- a/src/igl/unproject.h
+++ b/src/libigl/igl/unproject.h
diff --git a/src/igl/unproject_in_mesh.cpp b/src/libigl/igl/unproject_in_mesh.cpp
index 6238aaf2a..6238aaf2a 100644
--- a/src/igl/unproject_in_mesh.cpp
+++ b/src/libigl/igl/unproject_in_mesh.cpp
diff --git a/src/igl/unproject_in_mesh.h b/src/libigl/igl/unproject_in_mesh.h
index edb1a0e65..edb1a0e65 100644
--- a/src/igl/unproject_in_mesh.h
+++ b/src/libigl/igl/unproject_in_mesh.h
diff --git a/src/igl/unproject_onto_mesh.cpp b/src/libigl/igl/unproject_onto_mesh.cpp
index 897d206c1..897d206c1 100644
--- a/src/igl/unproject_onto_mesh.cpp
+++ b/src/libigl/igl/unproject_onto_mesh.cpp
diff --git a/src/igl/unproject_onto_mesh.h b/src/libigl/igl/unproject_onto_mesh.h
index 57252f99b..57252f99b 100644
--- a/src/igl/unproject_onto_mesh.h
+++ b/src/libigl/igl/unproject_onto_mesh.h
diff --git a/src/igl/unproject_ray.cpp b/src/libigl/igl/unproject_ray.cpp
index f6eb7ebdd..f6eb7ebdd 100644
--- a/src/igl/unproject_ray.cpp
+++ b/src/libigl/igl/unproject_ray.cpp
diff --git a/src/igl/unproject_ray.h b/src/libigl/igl/unproject_ray.h
index 4ef66f266..4ef66f266 100644
--- a/src/igl/unproject_ray.h
+++ b/src/libigl/igl/unproject_ray.h
diff --git a/src/igl/unzip_corners.cpp b/src/libigl/igl/unzip_corners.cpp
index 0a2ed004c..0a2ed004c 100644
--- a/src/igl/unzip_corners.cpp
+++ b/src/libigl/igl/unzip_corners.cpp
diff --git a/src/igl/unzip_corners.h b/src/libigl/igl/unzip_corners.h
index 4d7dfdf69..4d7dfdf69 100644
--- a/src/igl/unzip_corners.h
+++ b/src/libigl/igl/unzip_corners.h
diff --git a/src/igl/upsample.cpp b/src/libigl/igl/upsample.cpp
index 8b5e3da24..8b5e3da24 100644
--- a/src/igl/upsample.cpp
+++ b/src/libigl/igl/upsample.cpp
diff --git a/src/igl/upsample.h b/src/libigl/igl/upsample.h
index 51608aef6..51608aef6 100644
--- a/src/igl/upsample.h
+++ b/src/libigl/igl/upsample.h
diff --git a/src/igl/vector_area_matrix.cpp b/src/libigl/igl/vector_area_matrix.cpp
index 6464c14a7..6464c14a7 100644
--- a/src/igl/vector_area_matrix.cpp
+++ b/src/libigl/igl/vector_area_matrix.cpp
diff --git a/src/igl/vector_area_matrix.h b/src/libigl/igl/vector_area_matrix.h
index 6d385329c..6d385329c 100644
--- a/src/igl/vector_area_matrix.h
+++ b/src/libigl/igl/vector_area_matrix.h
diff --git a/src/igl/verbose.h b/src/libigl/igl/verbose.h
index e4aa86958..e4aa86958 100644
--- a/src/igl/verbose.h
+++ b/src/libigl/igl/verbose.h
diff --git a/src/igl/vertex_triangle_adjacency.cpp b/src/libigl/igl/vertex_triangle_adjacency.cpp
index 352d06244..352d06244 100644
--- a/src/igl/vertex_triangle_adjacency.cpp
+++ b/src/libigl/igl/vertex_triangle_adjacency.cpp
diff --git a/src/igl/vertex_triangle_adjacency.h b/src/libigl/igl/vertex_triangle_adjacency.h
index ce67b1f3d..ce67b1f3d 100644
--- a/src/igl/vertex_triangle_adjacency.h
+++ b/src/libigl/igl/vertex_triangle_adjacency.h
diff --git a/src/igl/volume.cpp b/src/libigl/igl/volume.cpp
index 68568cf45..68568cf45 100644
--- a/src/igl/volume.cpp
+++ b/src/libigl/igl/volume.cpp
diff --git a/src/igl/volume.h b/src/libigl/igl/volume.h
index 2dee7cc95..2dee7cc95 100644
--- a/src/igl/volume.h
+++ b/src/libigl/igl/volume.h
diff --git a/src/igl/voxel_grid.cpp b/src/libigl/igl/voxel_grid.cpp
index 388e58af4..388e58af4 100644
--- a/src/igl/voxel_grid.cpp
+++ b/src/libigl/igl/voxel_grid.cpp
diff --git a/src/igl/voxel_grid.h b/src/libigl/igl/voxel_grid.h
index 4f8ac1bcb..4f8ac1bcb 100644
--- a/src/igl/voxel_grid.h
+++ b/src/libigl/igl/voxel_grid.h
diff --git a/src/igl/winding_number.cpp b/src/libigl/igl/winding_number.cpp
index d6af18d98..d6af18d98 100644
--- a/src/igl/winding_number.cpp
+++ b/src/libigl/igl/winding_number.cpp
diff --git a/src/igl/winding_number.h b/src/libigl/igl/winding_number.h
index 4a1c51d81..4a1c51d81 100644
--- a/src/igl/winding_number.h
+++ b/src/libigl/igl/winding_number.h
diff --git a/src/igl/writeBF.cpp b/src/libigl/igl/writeBF.cpp
index 18dc6a934..18dc6a934 100644
--- a/src/igl/writeBF.cpp
+++ b/src/libigl/igl/writeBF.cpp
diff --git a/src/igl/writeBF.h b/src/libigl/igl/writeBF.h
index 5ea51f1bc..5ea51f1bc 100644
--- a/src/igl/writeBF.h
+++ b/src/libigl/igl/writeBF.h
diff --git a/src/igl/writeDMAT.cpp b/src/libigl/igl/writeDMAT.cpp
index c8f6ae0f6..c8f6ae0f6 100644
--- a/src/igl/writeDMAT.cpp
+++ b/src/libigl/igl/writeDMAT.cpp
diff --git a/src/igl/writeDMAT.h b/src/libigl/igl/writeDMAT.h
index 08409ef67..08409ef67 100644
--- a/src/igl/writeDMAT.h
+++ b/src/libigl/igl/writeDMAT.h
diff --git a/src/igl/writeMESH.cpp b/src/libigl/igl/writeMESH.cpp
index 27b0123cb..27b0123cb 100644
--- a/src/igl/writeMESH.cpp
+++ b/src/libigl/igl/writeMESH.cpp
diff --git a/src/igl/writeMESH.h b/src/libigl/igl/writeMESH.h
index 4bb51418e..4bb51418e 100644
--- a/src/igl/writeMESH.h
+++ b/src/libigl/igl/writeMESH.h
diff --git a/src/igl/writeOBJ.cpp b/src/libigl/igl/writeOBJ.cpp
index 286254174..286254174 100644
--- a/src/igl/writeOBJ.cpp
+++ b/src/libigl/igl/writeOBJ.cpp
diff --git a/src/igl/writeOBJ.h b/src/libigl/igl/writeOBJ.h
index d515796db..d515796db 100644
--- a/src/igl/writeOBJ.h
+++ b/src/libigl/igl/writeOBJ.h
diff --git a/src/igl/writeOFF.cpp b/src/libigl/igl/writeOFF.cpp
index 9222d76a0..9222d76a0 100644
--- a/src/igl/writeOFF.cpp
+++ b/src/libigl/igl/writeOFF.cpp
diff --git a/src/igl/writeOFF.h b/src/libigl/igl/writeOFF.h
index 754c18a53..754c18a53 100644
--- a/src/igl/writeOFF.h
+++ b/src/libigl/igl/writeOFF.h
diff --git a/src/igl/writePLY.cpp b/src/libigl/igl/writePLY.cpp
index 55c9b83fd..55c9b83fd 100644
--- a/src/igl/writePLY.cpp
+++ b/src/libigl/igl/writePLY.cpp
diff --git a/src/igl/writePLY.h b/src/libigl/igl/writePLY.h
index 8b99ea1d0..8b99ea1d0 100644
--- a/src/igl/writePLY.h
+++ b/src/libigl/igl/writePLY.h
diff --git a/src/igl/writeSTL.cpp b/src/libigl/igl/writeSTL.cpp
index d95f2a8d7..d95f2a8d7 100644
--- a/src/igl/writeSTL.cpp
+++ b/src/libigl/igl/writeSTL.cpp
diff --git a/src/igl/writeSTL.h b/src/libigl/igl/writeSTL.h
index 1ffd20281..1ffd20281 100644
--- a/src/igl/writeSTL.h
+++ b/src/libigl/igl/writeSTL.h
diff --git a/src/igl/writeTGF.cpp b/src/libigl/igl/writeTGF.cpp
index 65c8fc6a4..65c8fc6a4 100644
--- a/src/igl/writeTGF.cpp
+++ b/src/libigl/igl/writeTGF.cpp
diff --git a/src/igl/writeTGF.h b/src/libigl/igl/writeTGF.h
index 999584463..999584463 100644
--- a/src/igl/writeTGF.h
+++ b/src/libigl/igl/writeTGF.h
diff --git a/src/igl/writeWRL.cpp b/src/libigl/igl/writeWRL.cpp
index 2740d1c2f..2740d1c2f 100644
--- a/src/igl/writeWRL.cpp
+++ b/src/libigl/igl/writeWRL.cpp
diff --git a/src/igl/writeWRL.h b/src/libigl/igl/writeWRL.h
index 5ff6a25ed..5ff6a25ed 100644
--- a/src/igl/writeWRL.h
+++ b/src/libigl/igl/writeWRL.h
diff --git a/src/igl/write_triangle_mesh.cpp b/src/libigl/igl/write_triangle_mesh.cpp
index 3699009f5..3699009f5 100644
--- a/src/igl/write_triangle_mesh.cpp
+++ b/src/libigl/igl/write_triangle_mesh.cpp
diff --git a/src/igl/write_triangle_mesh.h b/src/libigl/igl/write_triangle_mesh.h
index 6a7241628..6a7241628 100644
--- a/src/igl/write_triangle_mesh.h
+++ b/src/libigl/igl/write_triangle_mesh.h
diff --git a/src/igl/xml/ReAntTweakBarXMLSerialization.h b/src/libigl/igl/xml/ReAntTweakBarXMLSerialization.h
index c43af0c80..c43af0c80 100644
--- a/src/igl/xml/ReAntTweakBarXMLSerialization.h
+++ b/src/libigl/igl/xml/ReAntTweakBarXMLSerialization.h
diff --git a/src/igl/xml/XMLSerializable.h b/src/libigl/igl/xml/XMLSerializable.h
index 610559643..610559643 100644
--- a/src/igl/xml/XMLSerializable.h
+++ b/src/libigl/igl/xml/XMLSerializable.h
diff --git a/src/igl/xml/serialization_test.skip b/src/libigl/igl/xml/serialization_test.skip
index 5888075c4..5888075c4 100644
--- a/src/igl/xml/serialization_test.skip
+++ b/src/libigl/igl/xml/serialization_test.skip
diff --git a/src/igl/xml/serialize_xml.cpp b/src/libigl/igl/xml/serialize_xml.cpp
index ee6ea11bc..ee6ea11bc 100644
--- a/src/igl/xml/serialize_xml.cpp
+++ b/src/libigl/igl/xml/serialize_xml.cpp
diff --git a/src/igl/xml/serialize_xml.h b/src/libigl/igl/xml/serialize_xml.h
index 2190f676a..2190f676a 100644
--- a/src/igl/xml/serialize_xml.h
+++ b/src/libigl/igl/xml/serialize_xml.h
diff --git a/src/igl/xml/writeDAE.cpp b/src/libigl/igl/xml/writeDAE.cpp
index 2c2bb4301..2c2bb4301 100644
--- a/src/igl/xml/writeDAE.cpp
+++ b/src/libigl/igl/xml/writeDAE.cpp
diff --git a/src/igl/xml/writeDAE.h b/src/libigl/igl/xml/writeDAE.h
index 731fe7255..731fe7255 100644
--- a/src/igl/xml/writeDAE.h
+++ b/src/libigl/igl/xml/writeDAE.h
diff --git a/src/igl/xml/write_triangle_mesh.cpp b/src/libigl/igl/xml/write_triangle_mesh.cpp
index 1f3d54b8d..1f3d54b8d 100644
--- a/src/igl/xml/write_triangle_mesh.cpp
+++ b/src/libigl/igl/xml/write_triangle_mesh.cpp
diff --git a/src/igl/xml/write_triangle_mesh.h b/src/libigl/igl/xml/write_triangle_mesh.h
index a5f8dad69..a5f8dad69 100644
--- a/src/igl/xml/write_triangle_mesh.h
+++ b/src/libigl/igl/xml/write_triangle_mesh.h
diff --git a/src/libslic3r/CMakeLists.txt b/src/libslic3r/CMakeLists.txt
index 38e663604..dc52257aa 100644
--- a/src/libslic3r/CMakeLists.txt
+++ b/src/libslic3r/CMakeLists.txt
@@ -189,6 +189,7 @@ target_include_directories(libslic3r PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${LIBNE
target_link_libraries(libslic3r
libnest2d
admesh
+ libigl
miniz
boost_libs
clipper
diff --git a/src/libslic3r/GCodeTimeEstimator.cpp b/src/libslic3r/GCodeTimeEstimator.cpp
index 60d7a4cdf..b87305da8 100644
--- a/src/libslic3r/GCodeTimeEstimator.cpp
+++ b/src/libslic3r/GCodeTimeEstimator.cpp
@@ -125,8 +125,8 @@ namespace Slic3r {
trapezoid.distance = distance;
trapezoid.feedrate = feedrate;
- float accelerate_distance = estimate_acceleration_distance(feedrate.entry, feedrate.cruise, acceleration);
- float decelerate_distance = estimate_acceleration_distance(feedrate.cruise, feedrate.exit, -acceleration);
+ float accelerate_distance = std::max(0.0f, estimate_acceleration_distance(feedrate.entry, feedrate.cruise, acceleration));
+ float decelerate_distance = std::max(0.0f, estimate_acceleration_distance(feedrate.cruise, feedrate.exit, -acceleration));
float cruise_distance = distance - accelerate_distance - decelerate_distance;
// Not enough space to reach the nominal feedrate.
diff --git a/src/libslic3r/Geometry.cpp b/src/libslic3r/Geometry.cpp
index ccc629723..accb4e286 100644
--- a/src/libslic3r/Geometry.cpp
+++ b/src/libslic3r/Geometry.cpp
@@ -1409,6 +1409,63 @@ Transformation Transformation::operator * (const Transformation& other) const
return Transformation(get_matrix() * other.get_matrix());
}
+Transformation Transformation::volume_to_bed_transformation(const Transformation& instance_transformation, const BoundingBoxf3& bbox)
+{
+ Transformation out;
+
+ if (instance_transformation.is_scaling_uniform()) {
+ // No need to run the non-linear least squares fitting for uniform scaling.
+ // Just set the inverse.
+ out.set_from_transform(instance_transformation.get_matrix(true).inverse());
+ }
+ else if (is_rotation_ninety_degrees(instance_transformation.get_rotation()))
+ {
+ // Anisotropic scaling, rotation by multiples of ninety degrees.
+ Eigen::Matrix3d instance_rotation_trafo =
+ (Eigen::AngleAxisd(instance_transformation.get_rotation().z(), Vec3d::UnitZ()) *
+ Eigen::AngleAxisd(instance_transformation.get_rotation().y(), Vec3d::UnitY()) *
+ Eigen::AngleAxisd(instance_transformation.get_rotation().x(), Vec3d::UnitX())).toRotationMatrix();
+ Eigen::Matrix3d volume_rotation_trafo =
+ (Eigen::AngleAxisd(-instance_transformation.get_rotation().x(), Vec3d::UnitX()) *
+ Eigen::AngleAxisd(-instance_transformation.get_rotation().y(), Vec3d::UnitY()) *
+ Eigen::AngleAxisd(-instance_transformation.get_rotation().z(), Vec3d::UnitZ())).toRotationMatrix();
+
+ // 8 corners of the bounding box.
+ auto pts = Eigen::MatrixXd(8, 3);
+ pts(0, 0) = bbox.min.x(); pts(0, 1) = bbox.min.y(); pts(0, 2) = bbox.min.z();
+ pts(1, 0) = bbox.min.x(); pts(1, 1) = bbox.min.y(); pts(1, 2) = bbox.max.z();
+ pts(2, 0) = bbox.min.x(); pts(2, 1) = bbox.max.y(); pts(2, 2) = bbox.min.z();
+ pts(3, 0) = bbox.min.x(); pts(3, 1) = bbox.max.y(); pts(3, 2) = bbox.max.z();
+ pts(4, 0) = bbox.max.x(); pts(4, 1) = bbox.min.y(); pts(4, 2) = bbox.min.z();
+ pts(5, 0) = bbox.max.x(); pts(5, 1) = bbox.min.y(); pts(5, 2) = bbox.max.z();
+ pts(6, 0) = bbox.max.x(); pts(6, 1) = bbox.max.y(); pts(6, 2) = bbox.min.z();
+ pts(7, 0) = bbox.max.x(); pts(7, 1) = bbox.max.y(); pts(7, 2) = bbox.max.z();
+
+ // Corners of the bounding box transformed into the modifier mesh coordinate space, with inverse rotation applied to the modifier.
+ auto qs = pts *
+ (instance_rotation_trafo *
+ Eigen::Scaling(instance_transformation.get_scaling_factor().cwiseProduct(instance_transformation.get_mirror())) *
+ volume_rotation_trafo).inverse().transpose();
+ // Fill in scaling based on least squares fitting of the bounding box corners.
+ Vec3d scale;
+ for (int i = 0; i < 3; ++i)
+ scale(i) = pts.col(i).dot(qs.col(i)) / pts.col(i).dot(pts.col(i));
+
+ out.set_rotation(Geometry::extract_euler_angles(volume_rotation_trafo));
+ out.set_scaling_factor(Vec3d(std::abs(scale(0)), std::abs(scale(1)), std::abs(scale(2))));
+ out.set_mirror(Vec3d(scale(0) > 0 ? 1. : -1, scale(1) > 0 ? 1. : -1, scale(2) > 0 ? 1. : -1));
+ }
+ else
+ {
+ // General anisotropic scaling, general rotation.
+ // Keep the modifier mesh in the instance coordinate system, so the modifier mesh will not be aligned with the world.
+ // Scale it to get the required size.
+ out.set_scaling_factor(instance_transformation.get_scaling_factor().cwiseInverse());
+ }
+
+ return out;
+}
+
Eigen::Quaterniond rotation_xyz_diff(const Vec3d &rot_xyz_from, const Vec3d &rot_xyz_to)
{
return
diff --git a/src/libslic3r/Geometry.hpp b/src/libslic3r/Geometry.hpp
index 033c24a84..bcbe80a0d 100644
--- a/src/libslic3r/Geometry.hpp
+++ b/src/libslic3r/Geometry.hpp
@@ -258,6 +258,11 @@ public:
const Transform3d& get_matrix(bool dont_translate = false, bool dont_rotate = false, bool dont_scale = false, bool dont_mirror = false) const;
Transformation operator * (const Transformation& other) const;
+
+ // Find volume transformation, so that the chained (instance_trafo * volume_trafo) will be as close to identity
+ // as possible in least squares norm in regard to the 8 corners of bbox.
+ // Bounding box is expected to be centered around zero in all axes.
+ static Transformation volume_to_bed_transformation(const Transformation& instance_transformation, const BoundingBoxf3& bbox);
};
// Rotation when going from the first coordinate system with rotation rot_xyz_from applied
diff --git a/src/libslic3r/MTUtils.hpp b/src/libslic3r/MTUtils.hpp
index 0afe3563f..b261a79be 100644
--- a/src/libslic3r/MTUtils.hpp
+++ b/src/libslic3r/MTUtils.hpp
@@ -1,172 +1,218 @@
#ifndef MTUTILS_HPP
#define MTUTILS_HPP
-#include <atomic> // for std::atomic_flag and memory orders
-#include <mutex> // for std::lock_guard
-#include <functional> // for std::function
-#include <utility> // for std::forward
+#include <atomic> // for std::atomic_flag and memory orders
+#include <mutex> // for std::lock_guard
+#include <functional> // for std::function
+#include <utility> // for std::forward
#include <algorithm>
namespace Slic3r {
/// Handy little spin mutex for the cached meshes.
/// Implements the "Lockable" concept
-class SpinMutex {
- std::atomic_flag m_flg;
+class SpinMutex
+{
+ std::atomic_flag m_flg;
static const /*constexpr*/ auto MO_ACQ = std::memory_order_acquire;
static const /*constexpr*/ auto MO_REL = std::memory_order_release;
+
public:
inline SpinMutex() { m_flg.clear(MO_REL); }
- inline void lock() { while(m_flg.test_and_set(MO_ACQ)); }
+ inline void lock() { while (m_flg.test_and_set(MO_ACQ)) ; }
inline bool try_lock() { return !m_flg.test_and_set(MO_ACQ); }
inline void unlock() { m_flg.clear(MO_REL); }
};
/// A wrapper class around arbitrary object that needs thread safe caching.
-template<class T> class CachedObject {
+template<class T> class CachedObject
+{
public:
// Method type which refreshes the object when it has been invalidated
- using Setter = std::function<void(T&)>;
+ using Setter = std::function<void(T &)>;
+
private:
- T m_obj; // the object itself
- bool m_valid; // invalidation flag
- SpinMutex m_lck; // to make the caching thread safe
+ T m_obj; // the object itself
+ bool m_valid; // invalidation flag
+ SpinMutex m_lck; // to make the caching thread safe
- // the setter will be called just before the object's const value is about
- // to be retrieved.
- std::function<void(T&)> m_setter;
-public:
+ // the setter will be called just before the object's const value is
+ // about to be retrieved.
+ std::function<void(T &)> m_setter;
+public:
// Forwarded constructor
- template<class...Args> inline CachedObject(Setter fn, Args&&...args):
- m_obj(std::forward<Args>(args)...), m_valid(false), m_setter(fn) {}
-
- // invalidate the value of the object. The object will be refreshed at the
- // next retrieval (Setter will be called). The data that is used in
- // the setter function should be guarded as well during modification so the
- // modification has to take place in fn.
- inline void invalidate(std::function<void()> fn) {
- std::lock_guard<SpinMutex> lck(m_lck); fn(); m_valid = false;
+ template<class... Args>
+ inline CachedObject(Setter fn, Args &&... args)
+ : m_obj(std::forward<Args>(args)...), m_valid(false), m_setter(fn)
+ {}
+
+ // invalidate the value of the object. The object will be refreshed at
+ // the next retrieval (Setter will be called). The data that is used in
+ // the setter function should be guarded as well during modification so
+ // the modification has to take place in fn.
+ inline void invalidate(std::function<void()> fn)
+ {
+ std::lock_guard<SpinMutex> lck(m_lck);
+ fn();
+ m_valid = false;
}
// Get the const object properly updated.
- inline const T& get() {
+ inline const T &get()
+ {
std::lock_guard<SpinMutex> lck(m_lck);
- if(!m_valid) { m_setter(m_obj); m_valid = true; }
+ if (!m_valid) {
+ m_setter(m_obj);
+ m_valid = true;
+ }
return m_obj;
}
};
-/// An std compatible random access iterator which uses indices to the source
-/// vector thus resistant to invalidation caused by relocations. It also "knows"
-/// its container. No comparison is neccesary to the container "end()" iterator.
-/// The template can be instantiated with a different value type than that of
-/// the container's but the types must be compatible. E.g. a base class of the
-/// contained objects is compatible.
+/// An std compatible random access iterator which uses indices to the
+/// source vector thus resistant to invalidation caused by relocations. It
+/// also "knows" its container. No comparison is neccesary to the container
+/// "end()" iterator. The template can be instantiated with a different
+/// value type than that of the container's but the types must be
+/// compatible. E.g. a base class of the contained objects is compatible.
///
/// For a constant iterator, one can instantiate this template with a value
/// type preceded with 'const'.
-template<class Vector, // The container type, must be random access...
+template<class Vector, // The container type, must be random access...
class Value = typename Vector::value_type // The value type
>
-class IndexBasedIterator {
+class IndexBasedIterator
+{
static const size_t NONE = size_t(-1);
std::reference_wrapper<Vector> m_index_ref;
- size_t m_idx = NONE;
-public:
+ size_t m_idx = NONE;
- using value_type = Value;
- using pointer = Value *;
- using reference = Value &;
- using difference_type = long;
+public:
+ using value_type = Value;
+ using pointer = Value *;
+ using reference = Value &;
+ using difference_type = long;
using iterator_category = std::random_access_iterator_tag;
- inline explicit
- IndexBasedIterator(Vector& index, size_t idx):
- m_index_ref(index), m_idx(idx) {}
+ inline explicit IndexBasedIterator(Vector &index, size_t idx)
+ : m_index_ref(index), m_idx(idx)
+ {}
// Post increment
- inline IndexBasedIterator operator++(int) {
- IndexBasedIterator cpy(*this); ++m_idx; return cpy;
+ inline IndexBasedIterator operator++(int)
+ {
+ IndexBasedIterator cpy(*this);
+ ++m_idx;
+ return cpy;
}
- inline IndexBasedIterator operator--(int) {
- IndexBasedIterator cpy(*this); --m_idx; return cpy;
+ inline IndexBasedIterator operator--(int)
+ {
+ IndexBasedIterator cpy(*this);
+ --m_idx;
+ return cpy;
}
- inline IndexBasedIterator& operator++() {
- ++m_idx; return *this;
+ inline IndexBasedIterator &operator++()
+ {
+ ++m_idx;
+ return *this;
}
- inline IndexBasedIterator& operator--() {
- --m_idx; return *this;
+ inline IndexBasedIterator &operator--()
+ {
+ --m_idx;
+ return *this;
}
- inline IndexBasedIterator& operator+=(difference_type l) {
- m_idx += size_t(l); return *this;
+ inline IndexBasedIterator &operator+=(difference_type l)
+ {
+ m_idx += size_t(l);
+ return *this;
}
- inline IndexBasedIterator operator+(difference_type l) {
- auto cpy = *this; cpy += l; return cpy;
+ inline IndexBasedIterator operator+(difference_type l)
+ {
+ auto cpy = *this;
+ cpy += l;
+ return cpy;
}
- inline IndexBasedIterator& operator-=(difference_type l) {
- m_idx -= size_t(l); return *this;
+ inline IndexBasedIterator &operator-=(difference_type l)
+ {
+ m_idx -= size_t(l);
+ return *this;
}
- inline IndexBasedIterator operator-(difference_type l) {
- auto cpy = *this; cpy -= l; return cpy;
+ inline IndexBasedIterator operator-(difference_type l)
+ {
+ auto cpy = *this;
+ cpy -= l;
+ return cpy;
}
operator difference_type() { return difference_type(m_idx); }
/// Tesing the end of the container... this is not possible with std
/// iterators.
- inline bool is_end() const { return m_idx >= m_index_ref.get().size();}
+ inline bool is_end() const
+ {
+ return m_idx >= m_index_ref.get().size();
+ }
- inline Value & operator*() const {
+ inline Value &operator*() const
+ {
assert(m_idx < m_index_ref.get().size());
return m_index_ref.get().operator[](m_idx);
}
- inline Value * operator->() const {
+ inline Value *operator->() const
+ {
assert(m_idx < m_index_ref.get().size());
return &m_index_ref.get().operator[](m_idx);
}
/// If both iterators point past the container, they are equal...
- inline bool operator ==(const IndexBasedIterator& other) {
+ inline bool operator==(const IndexBasedIterator &other)
+ {
size_t e = m_index_ref.get().size();
return m_idx == other.m_idx || (m_idx >= e && other.m_idx >= e);
}
- inline bool operator !=(const IndexBasedIterator& other) {
+ inline bool operator!=(const IndexBasedIterator &other)
+ {
return !(*this == other);
}
- inline bool operator <=(const IndexBasedIterator& other) {
+ inline bool operator<=(const IndexBasedIterator &other)
+ {
return (m_idx < other.m_idx) || (*this == other);
}
- inline bool operator <(const IndexBasedIterator& other) {
+ inline bool operator<(const IndexBasedIterator &other)
+ {
return m_idx < other.m_idx && (*this != other);
}
- inline bool operator >=(const IndexBasedIterator& other) {
+ inline bool operator>=(const IndexBasedIterator &other)
+ {
return m_idx > other.m_idx || *this == other;
}
- inline bool operator >(const IndexBasedIterator& other) {
+ inline bool operator>(const IndexBasedIterator &other)
+ {
return m_idx > other.m_idx && *this != other;
}
};
/// A very simple range concept implementation with iterator-like objects.
-template<class It> class Range {
+template<class It> class Range
+{
It from, to;
-public:
+public:
// The class is ready for range based for loops.
It begin() const { return from; }
It end() const { return to; }
@@ -175,15 +221,17 @@ public:
using Type = It;
Range() = default;
- Range(It &&b, It &&e):
- from(std::forward<It>(b)), to(std::forward<It>(e)) {}
+ Range(It &&b, It &&e)
+ : from(std::forward<It>(b)), to(std::forward<It>(e))
+ {}
// Some useful container-like methods...
inline size_t size() const { return end() - begin(); }
- inline bool empty() const { return size() == 0; }
+ inline bool empty() const { return size() == 0; }
};
-template<class C> bool all_of(const C &container) {
+template<class C> bool all_of(const C &container)
+{
return std::all_of(container.begin(),
container.end(),
[](const typename C::value_type &v) {
@@ -191,6 +239,15 @@ template<class C> bool all_of(const C &container) {
});
}
+template<class X, class Y> inline X ceil_i(X x, Y y)
+{
+ static_assert(std::is_integral<X>::value &&
+ std::is_integral<Y>::value && sizeof(X) >= sizeof(Y),
+ "");
+
+ return (x % y) ? x / y + 1 : x / y;
}
+} // namespace Slic3r
+
#endif // MTUTILS_HPP
diff --git a/src/libslic3r/Model.cpp b/src/libslic3r/Model.cpp
index 8e879a3e6..596f80671 100644
--- a/src/libslic3r/Model.cpp
+++ b/src/libslic3r/Model.cpp
@@ -489,21 +489,57 @@ void Model::convert_multipart_object(unsigned int max_extruders)
reset_auto_extruder_id();
+ bool is_single_object = (this->objects.size() == 1);
+
for (const ModelObject* o : this->objects)
+ {
for (const ModelVolume* v : o->volumes)
{
- ModelVolume* new_v = object->add_volume(*v);
- if (new_v != nullptr)
+ if (is_single_object)
+ {
+ // If there is only one object, just copy the volumes
+ ModelVolume* new_v = object->add_volume(*v);
+ if (new_v != nullptr)
+ {
+ new_v->name = o->name;
+ new_v->config.set_deserialize("extruder", get_auto_extruder_id_as_string(max_extruders));
+ new_v->translate(-o->origin_translation);
+ }
+ }
+ else
{
- new_v->name = o->name;
- new_v->config.set_deserialize("extruder", get_auto_extruder_id_as_string(max_extruders));
- new_v->translate(-o->origin_translation);
+ // If there are more than one object, put all volumes together
+ // Each object may contain any number of volumes and instances
+ // The volumes transformations are relative to the object containing them...
+ int counter = 1;
+ for (const ModelInstance* i : o->instances)
+ {
+ ModelVolume* new_v = object->add_volume(*v);
+ if (new_v != nullptr)
+ {
+ new_v->name = o->name + "_" + std::to_string(counter++);
+ new_v->config.set_deserialize("extruder", get_auto_extruder_id_as_string(max_extruders));
+ new_v->translate(-o->origin_translation);
+ // ...so, transform everything to a common reference system (world)
+ new_v->set_transformation(i->get_transformation() * v->get_transformation());
+ }
+ }
}
}
+ }
+
+ if (is_single_object)
+ {
+ // If there is only one object, keep its instances
+ for (const ModelInstance* i : this->objects.front()->instances)
+ {
+ object->add_instance(*i);
+ }
+ }
+ else
+ // If there are more than one object, create a single instance
+ object->add_instance();
- for (const ModelInstance* i : this->objects.front()->instances)
- object->add_instance(*i);
-
this->clear_objects();
this->objects.push_back(object);
}
diff --git a/src/libslic3r/ModelArrange.cpp b/src/libslic3r/ModelArrange.cpp
index a440c3999..36f7e3971 100644
--- a/src/libslic3r/ModelArrange.cpp
+++ b/src/libslic3r/ModelArrange.cpp
@@ -2,6 +2,7 @@
#include "Model.hpp"
#include "Geometry.hpp"
#include "SVG.hpp"
+#include "MTUtils.hpp"
#include <libnest2d.h>
@@ -820,15 +821,13 @@ bool arrange(Model &model, // The model with the geometries
BoundingBox bbb(bed);
auto& cfn = stopcondition;
+
+ coord_t md = ceil_i(min_obj_distance, 2) - SCALED_EPSILON;
- auto binbb = Box({
- static_cast<libnest2d::Coord>(bbb.min(0)),
- static_cast<libnest2d::Coord>(bbb.min(1))
- },
- {
- static_cast<libnest2d::Coord>(bbb.max(0)),
- static_cast<libnest2d::Coord>(bbb.max(1))
- });
+ auto binbb = Box({libnest2d::Coord{bbb.min(0)} - md,
+ libnest2d::Coord{bbb.min(1)} - md},
+ {libnest2d::Coord{bbb.max(0)} + md,
+ libnest2d::Coord{bbb.max(1)} + md});
switch(bedhint.type) {
case BedShapeType::BOX: {
@@ -916,15 +915,13 @@ void find_new_position(const Model &model,
BedShapeHint bedhint = bedShape(bed);
BoundingBox bbb(bed);
-
- auto binbb = Box({
- static_cast<libnest2d::Coord>(bbb.min(0)),
- static_cast<libnest2d::Coord>(bbb.min(1))
- },
- {
- static_cast<libnest2d::Coord>(bbb.max(0)),
- static_cast<libnest2d::Coord>(bbb.max(1))
- });
+
+ coord_t md = ceil_i(min_obj_distance, 2) - SCALED_EPSILON;
+
+ auto binbb = Box({libnest2d::Coord{bbb.min(0)} - md,
+ libnest2d::Coord{bbb.min(1)} - md},
+ {libnest2d::Coord{bbb.max(0)} + md,
+ libnest2d::Coord{bbb.max(1)} + md});
for(auto it = shapemap.begin(); it != shapemap.end(); ++it) {
if(std::find(toadd.begin(), toadd.end(), it->first) == toadd.end()) {
diff --git a/src/libslic3r/Technologies.hpp b/src/libslic3r/Technologies.hpp
index bffc45cde..a5f93b24f 100644
--- a/src/libslic3r/Technologies.hpp
+++ b/src/libslic3r/Technologies.hpp
@@ -13,6 +13,8 @@
#define ENABLE_RENDER_SELECTION_CENTER 0
// Shows an imgui dialog with render related data
#define ENABLE_RENDER_STATISTICS 0
+// Shows an imgui dialog with camera related data
+#define ENABLE_CAMERA_STATISTICS 0
//====================
diff --git a/src/slic3r/Config/Version.cpp b/src/slic3r/Config/Version.cpp
index fe3adfd7f..865884c6f 100644
--- a/src/slic3r/Config/Version.cpp
+++ b/src/slic3r/Config/Version.cpp
@@ -192,6 +192,7 @@ size_t Index::load(const boost::filesystem::path &path)
{
m_configs.clear();
m_vendor = path.stem().string();
+ m_path = path;
boost::nowide::ifstream ifs(path.string());
std::string line;
diff --git a/src/slic3r/Config/Version.hpp b/src/slic3r/Config/Version.hpp
index e689286af..560bc29c2 100644
--- a/src/slic3r/Config/Version.hpp
+++ b/src/slic3r/Config/Version.hpp
@@ -72,6 +72,9 @@ public:
// if the index is valid.
const_iterator recommended() const;
+ // Returns the filesystem path from which this index has originally been loaded
+ const boost::filesystem::path& path() const { return m_path; }
+
// Load all vendor specific indices.
// Throws Slic3r::file_parser_error and the standard std file access exceptions.
static std::vector<Index> load_db();
@@ -79,6 +82,7 @@ public:
private:
std::string m_vendor;
std::vector<Version> m_configs;
+ boost::filesystem::path m_path;
};
} // namespace Config
diff --git a/src/slic3r/GUI/3DBed.cpp b/src/slic3r/GUI/3DBed.cpp
index 8392e534a..d73e423e0 100644
--- a/src/slic3r/GUI/3DBed.cpp
+++ b/src/slic3r/GUI/3DBed.cpp
@@ -9,6 +9,7 @@
#include "GUI_App.hpp"
#include "PresetBundle.hpp"
#include "Gizmos/GLGizmoBase.hpp"
+#include "GLCanvas3D.hpp"
#include <GL/glew.h>
@@ -211,7 +212,7 @@ const double Bed3D::Axes::ArrowLength = 5.0;
Bed3D::Axes::Axes()
: origin(Vec3d::Zero())
-, length(Vec3d::Zero())
+, length(25.0 * Vec3d::Ones())
{
m_quadric = ::gluNewQuadric();
if (m_quadric != nullptr)
@@ -273,6 +274,7 @@ void Bed3D::Axes::render_axis(double length) const
Bed3D::Bed3D()
: m_type(Custom)
+ , m_requires_canvas_update(false)
#if ENABLE_TEXTURES_FROM_SVG
, m_vbo_id(0)
#endif // ENABLE_TEXTURES_FROM_SVG
@@ -290,7 +292,7 @@ bool Bed3D::set_shape(const Pointfs& shape)
m_shape = shape;
m_type = new_type;
- calc_bounding_box();
+ calc_bounding_boxes();
ExPolygon poly;
for (const Vec2d& p : m_shape)
@@ -311,7 +313,7 @@ bool Bed3D::set_shape(const Pointfs& shape)
// Set the origin and size for painting of the coordinate system axes.
m_axes.origin = Vec3d(0.0, 0.0, (double)GROUND_Z);
- m_axes.length = 0.1 * get_bounding_box().max_size() * Vec3d::Ones();
+ m_axes.length = 0.1 * m_bounding_box.max_size() * Vec3d::Ones();
// Let the calee to update the UI.
return true;
@@ -328,27 +330,26 @@ Point Bed3D::point_projection(const Point& point) const
}
#if ENABLE_TEXTURES_FROM_SVG
-void Bed3D::render(float theta, bool useVBOs, float scale_factor) const
+void Bed3D::render(GLCanvas3D* canvas, float theta, bool useVBOs, float scale_factor) const
{
m_scale_factor = scale_factor;
EType type = useVBOs ? m_type : Custom;
switch (type)
-
{
case MK2:
{
- render_prusa("mk2", theta > 90.0f);
+ render_prusa(canvas, "mk2", theta > 90.0f);
break;
}
case MK3:
{
- render_prusa("mk3", theta > 90.0f);
+ render_prusa(canvas, "mk3", theta > 90.0f);
break;
}
case SL1:
{
- render_prusa("sl1", theta > 90.0f);
+ render_prusa(canvas, "sl1", theta > 90.0f);
break;
}
default:
@@ -360,7 +361,7 @@ void Bed3D::render(float theta, bool useVBOs, float scale_factor) const
}
}
#else
-void Bed3D::render(float theta, bool useVBOs, float scale_factor) const
+void Bed3D::render(GLCanvas3D* canvas, float theta, bool useVBOs, float scale_factor) const
{
m_scale_factor = scale_factor;
@@ -371,17 +372,17 @@ void Bed3D::render(float theta, bool useVBOs, float scale_factor) const
{
case MK2:
{
- render_prusa("mk2", theta, useVBOs);
+ render_prusa(canvas, "mk2", theta, useVBOs);
break;
}
case MK3:
{
- render_prusa("mk3", theta, useVBOs);
+ render_prusa(canvas, "mk3", theta, useVBOs);
break;
}
case SL1:
{
- render_prusa("sl1", theta, useVBOs);
+ render_prusa(canvas, "sl1", theta, useVBOs);
break;
}
default:
@@ -400,13 +401,22 @@ void Bed3D::render_axes() const
m_axes.render();
}
-void Bed3D::calc_bounding_box()
+void Bed3D::calc_bounding_boxes() const
{
m_bounding_box = BoundingBoxf3();
for (const Vec2d& p : m_shape)
{
m_bounding_box.merge(Vec3d(p(0), p(1), 0.0));
}
+
+ m_extended_bounding_box = m_bounding_box;
+
+ // extend to contain axes
+ m_extended_bounding_box.merge(m_axes.length + Axes::ArrowLength * Vec3d::Ones());
+
+ // extend to contain model, if any
+ if (!m_model.get_filename().empty())
+ m_extended_bounding_box.merge(m_model.get_transformed_bounding_box());
}
void Bed3D::calc_triangles(const ExPolygon& poly)
@@ -487,41 +497,51 @@ Bed3D::EType Bed3D::detect_type(const Pointfs& shape) const
}
#if ENABLE_TEXTURES_FROM_SVG
-void Bed3D::render_prusa(const std::string &key, bool bottom) const
+void Bed3D::render_prusa(GLCanvas3D* canvas, const std::string &key, bool bottom) const
{
std::string tex_path = resources_dir() + "/icons/bed/" + key;
std::string model_path = resources_dir() + "/models/" + key;
- // use anisotropic filter if graphic card allows
- GLfloat max_anisotropy = 0.0f;
- if (glewIsSupported("GL_EXT_texture_filter_anisotropic"))
- glsafe(::glGetFloatv(GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT, &max_anisotropy));
-
- // use higher resolution images if graphic card allows
- GLint max_tex_size;
- glsafe(::glGetIntegerv(GL_MAX_TEXTURE_SIZE, &max_tex_size));
-
- // clamp or the texture generation becomes too slow
- max_tex_size = std::min(max_tex_size, 8192);
+ // use higher resolution images if graphic card and opengl version allow
+ GLint max_tex_size = GLCanvas3DManager::get_gl_info().get_max_tex_size();
std::string filename = tex_path + ".svg";
if ((m_texture.get_id() == 0) || (m_texture.get_source() != filename))
{
- if (!m_texture.load_from_svg_file(filename, true, max_tex_size))
+ // generate a temporary lower resolution texture to show while no main texture levels have been compressed
+ if (!m_temp_texture.load_from_svg_file(filename, false, false, false, max_tex_size / 8))
{
render_custom();
return;
}
- if (max_anisotropy > 0.0f)
+ // starts generating the main texture, compression will run asynchronously
+ if (!m_texture.load_from_svg_file(filename, true, true, true, max_tex_size))
{
- glsafe(::glBindTexture(GL_TEXTURE_2D, m_texture.get_id()));
- glsafe(::glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAX_ANISOTROPY_EXT, max_anisotropy));
- glsafe(::glBindTexture(GL_TEXTURE_2D, 0));
+ render_custom();
+ return;
}
}
+ else if (m_texture.unsent_compressed_data_available())
+ {
+ // sends to gpu the already available compressed levels of the main texture
+ m_texture.send_compressed_data_to_gpu();
+
+ // the temporary texture is not needed anymore, reset it
+ if (m_temp_texture.get_id() != 0)
+ m_temp_texture.reset();
+
+ m_requires_canvas_update = true;
+ }
+ else if (m_requires_canvas_update && m_texture.all_compressed_data_sent_to_gpu())
+ {
+ if (canvas != nullptr)
+ canvas->stop_keeping_dirty();
+
+ m_requires_canvas_update = false;
+ }
if (!bottom)
{
@@ -539,6 +559,9 @@ void Bed3D::render_prusa(const std::string &key, bool bottom) const
offset += Vec3d(0.0, 0.0, -0.03);
m_model.center_around(offset);
+
+ // update extended bounding box
+ calc_bounding_boxes();
}
if (!m_model.get_filename().empty())
@@ -594,7 +617,12 @@ void Bed3D::render_prusa_shader(bool transparent) const
GLint position_id = m_shader.get_attrib_location("v_position");
GLint tex_coords_id = m_shader.get_attrib_location("v_tex_coords");
- glsafe(::glBindTexture(GL_TEXTURE_2D, (GLuint)m_texture.get_id()));
+ // show the temporary texture while no compressed data is available
+ GLuint tex_id = (GLuint)m_temp_texture.get_id();
+ if (tex_id == 0)
+ tex_id = (GLuint)m_texture.get_id();
+
+ glsafe(::glBindTexture(GL_TEXTURE_2D, tex_id));
glsafe(::glBindBuffer(GL_ARRAY_BUFFER, m_vbo_id));
if (position_id != -1)
diff --git a/src/slic3r/GUI/3DBed.hpp b/src/slic3r/GUI/3DBed.hpp
index e60cdf94e..68a74f61c 100644
--- a/src/slic3r/GUI/3DBed.hpp
+++ b/src/slic3r/GUI/3DBed.hpp
@@ -13,6 +13,8 @@ typedef class GLUquadric GLUquadricObj;
namespace Slic3r {
namespace GUI {
+class GLCanvas3D;
+
class GeometryBuffer
{
#if ENABLE_TEXTURES_FROM_SVG
@@ -85,12 +87,17 @@ public:
private:
EType m_type;
Pointfs m_shape;
- BoundingBoxf3 m_bounding_box;
+ mutable BoundingBoxf3 m_bounding_box;
+ mutable BoundingBoxf3 m_extended_bounding_box;
Polygon m_polygon;
GeometryBuffer m_triangles;
GeometryBuffer m_gridlines;
#if ENABLE_TEXTURES_FROM_SVG
mutable GLTexture m_texture;
+ // temporary texture shown until the main texture has still no levels compressed
+ mutable GLTexture m_temp_texture;
+ // used to trigger 3D scene update once all compressed textures have been sent to GPU
+ mutable bool m_requires_canvas_update;
mutable Shader m_shader;
mutable unsigned int m_vbo_id;
#else
@@ -117,20 +124,20 @@ public:
// Return true if the bed shape changed, so the calee will update the UI.
bool set_shape(const Pointfs& shape);
- const BoundingBoxf3& get_bounding_box() const { return m_bounding_box; }
+ const BoundingBoxf3& get_bounding_box(bool extended) const { return extended ? m_extended_bounding_box : m_bounding_box; }
bool contains(const Point& point) const;
Point point_projection(const Point& point) const;
- void render(float theta, bool useVBOs, float scale_factor) const;
+ void render(GLCanvas3D* canvas, float theta, bool useVBOs, float scale_factor) const;
void render_axes() const;
private:
- void calc_bounding_box();
+ void calc_bounding_boxes() const;
void calc_triangles(const ExPolygon& poly);
void calc_gridlines(const ExPolygon& poly, const BoundingBox& bed_bbox);
EType detect_type(const Pointfs& shape) const;
#if ENABLE_TEXTURES_FROM_SVG
- void render_prusa(const std::string& key, bool bottom) const;
+ void render_prusa(GLCanvas3D* canvas, const std::string& key, bool bottom) const;
void render_prusa_shader(bool transparent) const;
#else
void render_prusa(const std::string &key, float theta, bool useVBOs) const;
diff --git a/src/slic3r/GUI/3DScene.cpp b/src/slic3r/GUI/3DScene.cpp
index 33ab1f5d1..f9a79f2d8 100644
--- a/src/slic3r/GUI/3DScene.cpp
+++ b/src/slic3r/GUI/3DScene.cpp
@@ -2015,7 +2015,7 @@ bool GLBed::on_init_from_file(const std::string& filename, bool useVBOs)
std::string _3DScene::get_gl_info(bool format_as_html, bool extensions)
{
- return s_canvas_mgr.get_gl_info(format_as_html, extensions);
+ return Slic3r::GUI::GLCanvas3DManager::get_gl_info().to_string(format_as_html, extensions);
}
bool _3DScene::add_canvas(wxGLCanvas* canvas, GUI::Bed3D& bed, GUI::Camera& camera, GUI::GLToolbar& view_toolbar)
diff --git a/src/slic3r/GUI/3DScene.hpp b/src/slic3r/GUI/3DScene.hpp
index 0414a1ed3..d197372ab 100644
--- a/src/slic3r/GUI/3DScene.hpp
+++ b/src/slic3r/GUI/3DScene.hpp
@@ -555,6 +555,7 @@ public:
const std::string& get_filename() const { return m_filename; }
const BoundingBoxf3& get_bounding_box() const { return m_volume.bounding_box; }
+ const BoundingBoxf3& get_transformed_bounding_box() const { return m_volume.transformed_bounding_box(); }
void reset();
diff --git a/src/slic3r/GUI/AppConfig.cpp b/src/slic3r/GUI/AppConfig.cpp
index d4970880b..edc9845a1 100644
--- a/src/slic3r/GUI/AppConfig.cpp
+++ b/src/slic3r/GUI/AppConfig.cpp
@@ -73,6 +73,9 @@ void AppConfig::set_defaults()
if (get("custom_toolbar_size").empty())
set("custom_toolbar_size", "100");
+ if (get("camera_type").empty())
+ set("camera_type", "1");
+
// Remove legacy window positions/sizes
erase("", "main_frame_maximized");
erase("", "main_frame_pos");
diff --git a/src/slic3r/GUI/Camera.cpp b/src/slic3r/GUI/Camera.cpp
index dd6cbefe1..1f8513ac2 100644
--- a/src/slic3r/GUI/Camera.cpp
+++ b/src/slic3r/GUI/Camera.cpp
@@ -2,6 +2,8 @@
#include "Camera.hpp"
#include "3DScene.hpp"
+#include "GUI_App.hpp"
+#include "AppConfig.hpp"
#include <GL/glew.h>
@@ -19,32 +21,71 @@ static const float VIEW_REAR[2] = { 180.0f, 90.0f };
namespace Slic3r {
namespace GUI {
+const double Camera::DefaultDistance = 1000.0;
+double Camera::FrustrumMinZSize = 50.0;
+double Camera::FrustrumZMargin = 10.0;
+double Camera::FovMinDeg = 5.0;
+double Camera::FovMaxDeg = 75.0;
+
Camera::Camera()
- : type(Ortho)
- , zoom(1.0f)
- , phi(45.0f)
-// , distance(0.0f)
+ : phi(45.0f)
, requires_zoom_to_bed(false)
, inverted_phi(false)
- , m_theta(45.0f)
+ , m_type(Ortho)
, m_target(Vec3d::Zero())
+ , m_theta(45.0f)
+ , m_zoom(1.0)
+ , m_distance(DefaultDistance)
+ , m_gui_scale(1.0)
+ , m_view_matrix(Transform3d::Identity())
+ , m_projection_matrix(Transform3d::Identity())
{
}
std::string Camera::get_type_as_string() const
{
- switch (type)
+ switch (m_type)
{
- default:
case Unknown:
return "unknown";
-// case Perspective:
-// return "perspective";
+ case Perspective:
+ return "perspective";
+ default:
case Ortho:
- return "ortho";
+ return "orthographic";
};
}
+void Camera::set_type(EType type)
+{
+ if (m_type != type)
+ {
+ m_type = type;
+
+ wxGetApp().app_config->set("camera_type", std::to_string(m_type));
+ wxGetApp().app_config->save();
+ }
+}
+
+void Camera::set_type(const std::string& type)
+{
+ if (!type.empty() && (type != "1"))
+ {
+ unsigned char type_id = atoi(type.c_str());
+ if (((unsigned char)Ortho < type_id) && (type_id < (unsigned char)Num_types))
+ set_type((Camera::EType)type_id);
+ }
+}
+
+void Camera::select_next_type()
+{
+ unsigned char next = (unsigned char)m_type + 1;
+ if (next == (unsigned char)Num_types)
+ next = 1;
+
+ set_type((EType)next);
+}
+
void Camera::set_target(const Vec3d& target)
{
m_target = target;
@@ -65,9 +106,20 @@ void Camera::set_theta(float theta, bool apply_limit)
}
}
-void Camera::set_scene_box(const BoundingBoxf3& box)
+void Camera::set_zoom(double zoom, const BoundingBoxf3& max_box, int canvas_w, int canvas_h)
{
- m_scene_box = box;
+ zoom = std::max(std::min(zoom, 4.0), -4.0) / 10.0;
+ zoom = m_zoom / (1.0 - zoom);
+
+ // Don't allow to zoom too far outside the scene.
+ double zoom_min = calc_zoom_to_bounding_box_factor(max_box, canvas_w, canvas_h);
+ if (zoom_min > 0.0)
+ zoom = std::max(zoom, zoom_min * 0.7);
+
+ // Don't allow to zoom too close to the scene.
+ zoom = std::min(zoom, 100.0);
+
+ m_zoom = zoom;
}
bool Camera::select_view(const std::string& direction)
@@ -99,6 +151,18 @@ bool Camera::select_view(const std::string& direction)
return false;
}
+double Camera::get_fov() const
+{
+ switch (m_type)
+ {
+ case Perspective:
+ return 2.0 * Geometry::rad2deg(std::atan(1.0 / m_projection_matrix.matrix()(1, 1)));
+ default:
+ case Ortho:
+ return 0.0;
+ };
+}
+
void Camera::apply_viewport(int x, int y, unsigned int w, unsigned int h) const
{
glsafe(::glViewport(0, 0, w, h));
@@ -107,27 +171,268 @@ void Camera::apply_viewport(int x, int y, unsigned int w, unsigned int h) const
void Camera::apply_view_matrix() const
{
+ double theta_rad = Geometry::deg2rad(-(double)m_theta);
+ double phi_rad = Geometry::deg2rad((double)phi);
+ double sin_theta = ::sin(theta_rad);
+ Vec3d camera_pos = m_target + m_distance * Vec3d(sin_theta * ::sin(phi_rad), sin_theta * ::cos(phi_rad), ::cos(theta_rad));
+
glsafe(::glMatrixMode(GL_MODELVIEW));
glsafe(::glLoadIdentity());
glsafe(::glRotatef(-m_theta, 1.0f, 0.0f, 0.0f)); // pitch
- glsafe(::glRotatef(phi, 0.0f, 0.0f, 1.0f)); // yaw
- glsafe(::glTranslated(-m_target(0), -m_target(1), -m_target(2)));
+ glsafe(::glRotatef(phi, 0.0f, 0.0f, 1.0f)); // yaw
+
+ glsafe(::glTranslated(-camera_pos(0), -camera_pos(1), -camera_pos(2)));
glsafe(::glGetDoublev(GL_MODELVIEW_MATRIX, m_view_matrix.data()));
}
-void Camera::apply_ortho_projection(float x_min, float x_max, float y_min, float y_max, float z_min, float z_max) const
+void Camera::apply_projection(const BoundingBoxf3& box) const
{
+ m_distance = DefaultDistance;
+ double w = 0.0;
+ double h = 0.0;
+
+ while (true)
+ {
+ m_frustrum_zs = calc_tight_frustrum_zs_around(box);
+
+ w = (double)m_viewport[2];
+ h = (double)m_viewport[3];
+
+ double two_zoom = 2.0 * m_zoom;
+ if (two_zoom != 0.0)
+ {
+ double inv_two_zoom = 1.0 / two_zoom;
+ w *= inv_two_zoom;
+ h *= inv_two_zoom;
+ }
+
+ switch (m_type)
+ {
+ default:
+ case Ortho:
+ {
+ m_gui_scale = 1.0;
+ break;
+ }
+ case Perspective:
+ {
+ // scale near plane to keep w and h constant on the plane at z = m_distance
+ double scale = m_frustrum_zs.first / m_distance;
+ w *= scale;
+ h *= scale;
+ m_gui_scale = scale;
+ break;
+ }
+ }
+
+ if (m_type == Perspective)
+ {
+ double fov_rad = 2.0 * std::atan(h / m_frustrum_zs.first);
+ double fov_deg = Geometry::rad2deg(fov_rad);
+
+ // adjust camera distance to keep fov in a limited range
+ if (fov_deg > FovMaxDeg + 0.001)
+ {
+ double new_near_z = h / ::tan(0.5 * Geometry::deg2rad(FovMaxDeg));
+ m_distance += (new_near_z - m_frustrum_zs.first);
+ apply_view_matrix();
+ }
+ else if (fov_deg < FovMinDeg - 0.001)
+ {
+ double new_near_z = h / ::tan(0.5 * Geometry::deg2rad(FovMinDeg));
+ m_distance += (new_near_z - m_frustrum_zs.first);
+ apply_view_matrix();
+ }
+ else
+ break;
+ }
+ else
+ break;
+ }
+
glsafe(::glMatrixMode(GL_PROJECTION));
glsafe(::glLoadIdentity());
- glsafe(::glOrtho(x_min, x_max, y_min, y_max, z_min, z_max));
- glsafe(::glGetDoublev(GL_PROJECTION_MATRIX, m_projection_matrix.data()));
+ switch (m_type)
+ {
+ default:
+ case Ortho:
+ {
+ glsafe(::glOrtho(-w, w, -h, h, m_frustrum_zs.first, m_frustrum_zs.second));
+ break;
+ }
+ case Perspective:
+ {
+ glsafe(::glFrustum(-w, w, -h, h, m_frustrum_zs.first, m_frustrum_zs.second));
+ break;
+ }
+ }
+ glsafe(::glGetDoublev(GL_PROJECTION_MATRIX, m_projection_matrix.data()));
glsafe(::glMatrixMode(GL_MODELVIEW));
}
+void Camera::zoom_to_box(const BoundingBoxf3& box, int canvas_w, int canvas_h)
+{
+ // Calculate the zoom factor needed to adjust the view around the given box.
+ double zoom = calc_zoom_to_bounding_box_factor(box, canvas_w, canvas_h);
+ if (zoom > 0.0)
+ {
+ m_zoom = zoom;
+ // center view around box center
+ m_target = box.center();
+ }
+}
+
+#if ENABLE_CAMERA_STATISTICS
+void Camera::debug_render() const
+{
+ ImGuiWrapper& imgui = *wxGetApp().imgui();
+ imgui.set_next_window_bg_alpha(0.5f);
+ imgui.begin(std::string("Camera statistics"), ImGuiWindowFlags_AlwaysAutoResize | ImGuiWindowFlags_NoResize | ImGuiWindowFlags_NoCollapse);
+
+ std::string type = get_type_as_string();
+ Vec3f position = get_position().cast<float>();
+ Vec3f target = m_target.cast<float>();
+ float distance = (float)get_distance();
+ Vec3f forward = get_dir_forward().cast<float>();
+ Vec3f right = get_dir_right().cast<float>();
+ Vec3f up = get_dir_up().cast<float>();
+ float nearZ = (float)m_frustrum_zs.first;
+ float farZ = (float)m_frustrum_zs.second;
+ float deltaZ = farZ - nearZ;
+ float zoom = (float)m_zoom;
+ float fov = (float)get_fov();
+ float gui_scale = (float)get_gui_scale();
+
+ ImGui::InputText("Type", const_cast<char*>(type.data()), type.length(), ImGuiInputTextFlags_ReadOnly);
+ ImGui::Separator();
+ ImGui::InputFloat3("Position", position.data(), "%.6f", ImGuiInputTextFlags_ReadOnly);
+ ImGui::InputFloat3("Target", target.data(), "%.6f", ImGuiInputTextFlags_ReadOnly);
+ ImGui::InputFloat("Distance", &distance, 0.0f, 0.0f, "%.6f", ImGuiInputTextFlags_ReadOnly);
+ ImGui::Separator();
+ ImGui::InputFloat3("Forward", forward.data(), "%.6f", ImGuiInputTextFlags_ReadOnly);
+ ImGui::InputFloat3("Right", right.data(), "%.6f", ImGuiInputTextFlags_ReadOnly);
+ ImGui::InputFloat3("Up", up.data(), "%.6f", ImGuiInputTextFlags_ReadOnly);
+ ImGui::Separator();
+ ImGui::InputFloat("Near Z", &nearZ, 0.0f, 0.0f, "%.6f", ImGuiInputTextFlags_ReadOnly);
+ ImGui::InputFloat("Far Z", &farZ, 0.0f, 0.0f, "%.6f", ImGuiInputTextFlags_ReadOnly);
+ ImGui::InputFloat("Delta Z", &deltaZ, 0.0f, 0.0f, "%.6f", ImGuiInputTextFlags_ReadOnly);
+ ImGui::Separator();
+ ImGui::InputFloat("Zoom", &zoom, 0.0f, 0.0f, "%.6f", ImGuiInputTextFlags_ReadOnly);
+ ImGui::InputFloat("Fov", &fov, 0.0f, 0.0f, "%.6f", ImGuiInputTextFlags_ReadOnly);
+ ImGui::Separator();
+ ImGui::InputFloat("GUI scale", &gui_scale, 0.0f, 0.0f, "%.6f", ImGuiInputTextFlags_ReadOnly);
+ imgui.end();
+}
+#endif // ENABLE_CAMERA_STATISTICS
+
+std::pair<double, double> Camera::calc_tight_frustrum_zs_around(const BoundingBoxf3& box) const
+{
+ std::pair<double, double> ret = std::make_pair(DBL_MAX, -DBL_MAX);
+
+ Vec3d bb_min = box.min;
+ Vec3d bb_max = box.max;
+
+ // box vertices in world space
+ std::vector<Vec3d> vertices;
+ vertices.reserve(8);
+ vertices.push_back(bb_min);
+ vertices.emplace_back(bb_max(0), bb_min(1), bb_min(2));
+ vertices.emplace_back(bb_max(0), bb_max(1), bb_min(2));
+ vertices.emplace_back(bb_min(0), bb_max(1), bb_min(2));
+ vertices.emplace_back(bb_min(0), bb_min(1), bb_max(2));
+ vertices.emplace_back(bb_max(0), bb_min(1), bb_max(2));
+ vertices.push_back(bb_max);
+ vertices.emplace_back(bb_min(0), bb_max(1), bb_max(2));
+
+ // set the Z range in eye coordinates (negative Zs are in front of the camera)
+ for (const Vec3d& v : vertices)
+ {
+ double z = -(m_view_matrix * v)(2);
+ ret.first = std::min(ret.first, z);
+ ret.second = std::max(ret.second, z);
+ }
+
+ // apply margin
+ ret.first -= FrustrumZMargin;
+ ret.second += FrustrumZMargin;
+
+ // ensure min size
+ if (ret.second - ret.first < FrustrumMinZSize)
+ {
+ double mid_z = 0.5 * (ret.first + ret.second);
+ double half_size = 0.5 * FrustrumMinZSize;
+ ret.first = mid_z - half_size;
+ ret.second = mid_z + half_size;
+ }
+
+ return ret;
+}
+
+double Camera::calc_zoom_to_bounding_box_factor(const BoundingBoxf3& box, int canvas_w, int canvas_h) const
+{
+ double max_bb_size = box.max_size();
+ if (max_bb_size == 0.0)
+ return -1.0;
+
+ // project the box vertices on a plane perpendicular to the camera forward axis
+ // then calculates the vertices coordinate on this plane along the camera xy axes
+
+ // ensure that the view matrix is updated
+ apply_view_matrix();
+
+ Vec3d right = get_dir_right();
+ Vec3d up = get_dir_up();
+ Vec3d forward = get_dir_forward();
+
+ Vec3d bb_min = box.min;
+ Vec3d bb_max = box.max;
+ Vec3d bb_center = box.center();
+
+ // box vertices in world space
+ std::vector<Vec3d> vertices;
+ vertices.reserve(8);
+ vertices.push_back(bb_min);
+ vertices.emplace_back(bb_max(0), bb_min(1), bb_min(2));
+ vertices.emplace_back(bb_max(0), bb_max(1), bb_min(2));
+ vertices.emplace_back(bb_min(0), bb_max(1), bb_min(2));
+ vertices.emplace_back(bb_min(0), bb_min(1), bb_max(2));
+ vertices.emplace_back(bb_max(0), bb_min(1), bb_max(2));
+ vertices.push_back(bb_max);
+ vertices.emplace_back(bb_min(0), bb_max(1), bb_max(2));
+
+ double max_x = 0.0;
+ double max_y = 0.0;
+
+ // margin factor to give some empty space around the box
+ double margin_factor = 1.25;
+
+ for (const Vec3d& v : vertices)
+ {
+ // project vertex on the plane perpendicular to camera forward axis
+ Vec3d pos(v(0) - bb_center(0), v(1) - bb_center(1), v(2) - bb_center(2));
+ Vec3d proj_on_plane = pos - pos.dot(forward) * forward;
+
+ // calculates vertex coordinate along camera xy axes
+ double x_on_plane = proj_on_plane.dot(right);
+ double y_on_plane = proj_on_plane.dot(up);
+
+ max_x = std::max(max_x, std::abs(x_on_plane));
+ max_y = std::max(max_y, std::abs(y_on_plane));
+ }
+
+ if ((max_x == 0.0) || (max_y == 0.0))
+ return -1.0f;
+
+ max_x *= margin_factor;
+ max_y *= margin_factor;
+
+ return std::min((double)canvas_w / (2.0 * max_x), (double)canvas_h / (2.0 * max_y));
+}
+
} // GUI
} // Slic3r
diff --git a/src/slic3r/GUI/Camera.hpp b/src/slic3r/GUI/Camera.hpp
index 1c75ef4b6..bd2541ce2 100644
--- a/src/slic3r/GUI/Camera.hpp
+++ b/src/slic3r/GUI/Camera.hpp
@@ -9,44 +9,64 @@ namespace GUI {
struct Camera
{
+ static const double DefaultDistance;
+ static double FrustrumMinZSize;
+ static double FrustrumZMargin;
+ static double FovMinDeg;
+ static double FovMaxDeg;
+
enum EType : unsigned char
{
Unknown,
-// Perspective,
Ortho,
+ Perspective,
Num_types
};
- EType type;
- float zoom;
float phi;
-// float distance;
bool requires_zoom_to_bed;
bool inverted_phi;
private:
+ EType m_type;
Vec3d m_target;
float m_theta;
+ double m_zoom;
+ // Distance between camera position and camera target measured along the camera Z axis
+ mutable double m_distance;
+ mutable double m_gui_scale;
mutable std::array<int, 4> m_viewport;
mutable Transform3d m_view_matrix;
mutable Transform3d m_projection_matrix;
+ mutable std::pair<double, double> m_frustrum_zs;
BoundingBoxf3 m_scene_box;
public:
Camera();
+ EType get_type() const { return m_type; }
std::string get_type_as_string() const;
+ void set_type(EType type);
+ void set_type(const std::string& type);
+ void select_next_type();
const Vec3d& get_target() const { return m_target; }
void set_target(const Vec3d& target);
+ double get_distance() const { return m_distance; }
+ double get_gui_scale() const { return m_gui_scale; }
+
float get_theta() const { return m_theta; }
void set_theta(float theta, bool apply_limit);
+ double get_zoom() const { return m_zoom; }
+ void set_zoom(double zoom, const BoundingBoxf3& max_box, int canvas_w, int canvas_h);
+ void set_zoom(double zoom) { m_zoom = zoom; }
+
const BoundingBoxf3& get_scene_box() const { return m_scene_box; }
- void set_scene_box(const BoundingBoxf3& box);
+ void set_scene_box(const BoundingBoxf3& box) { m_scene_box = box; }
bool select_view(const std::string& direction);
@@ -60,9 +80,26 @@ public:
Vec3d get_position() const { return m_view_matrix.matrix().inverse().block(0, 3, 3, 1); }
+ double get_near_z() const { return m_frustrum_zs.first; }
+ double get_far_z() const { return m_frustrum_zs.second; }
+
+ double get_fov() const;
+
void apply_viewport(int x, int y, unsigned int w, unsigned int h) const;
void apply_view_matrix() const;
- void apply_ortho_projection(float x_min, float x_max, float y_min, float y_max, float z_min, float z_max) const;
+ void apply_projection(const BoundingBoxf3& box) const;
+
+ void zoom_to_box(const BoundingBoxf3& box, int canvas_w, int canvas_h);
+
+#if ENABLE_CAMERA_STATISTICS
+ void debug_render() const;
+#endif // ENABLE_CAMERA_STATISTICS
+
+private:
+ // returns tight values for nearZ and farZ plane around the given bounding box
+ // the camera MUST be outside of the bounding box in eye coordinate of the given box
+ std::pair<double, double> calc_tight_frustrum_zs_around(const BoundingBoxf3& box) const;
+ double calc_zoom_to_bounding_box_factor(const BoundingBoxf3& box, int canvas_w, int canvas_h) const;
};
} // GUI
diff --git a/src/slic3r/GUI/FirmwareDialog.cpp b/src/slic3r/GUI/FirmwareDialog.cpp
index b400e27ea..15a09aa71 100644
--- a/src/slic3r/GUI/FirmwareDialog.cpp
+++ b/src/slic3r/GUI/FirmwareDialog.cpp
@@ -5,11 +5,14 @@
#include <stdexcept>
#include <boost/format.hpp>
#include <boost/asio.hpp>
-#include <boost/filesystem/path.hpp>
-#include <boost/filesystem/fstream.hpp>
+#include <boost/filesystem.hpp>
#include <boost/log/trivial.hpp>
#include <boost/optional.hpp>
+#if _WIN32
+ #include <regex>
+#endif
+
#include "libslic3r/Utils.hpp"
#include "avrdude/avrdude-slic3r.hpp"
#include "GUI.hpp"
@@ -104,7 +107,7 @@ struct FirmwareDialog::priv
// GUI elements
wxComboBox *port_picker;
- wxStaticText *port_autodetect;
+ wxStaticText *txt_port_autodetect;
wxFilePickerCtrl *hex_picker;
wxStaticText *txt_status;
wxGauge *progressbar;
@@ -131,6 +134,7 @@ struct FirmwareDialog::priv
// Data
std::vector<SerialPortInfo> ports;
optional<SerialPortInfo> port;
+ bool port_autodetect;
HexFile hex_file;
// This is a shared pointer holding the background AvrDude task
@@ -147,6 +151,7 @@ struct FirmwareDialog::priv
btn_flash_label_flashing(_(L("Cancel"))),
label_status_flashing(_(L("Flashing in progress. Please do not disconnect the printer!"))),
timer_pulse(q),
+ port_autodetect(false),
progress_tasks_done(0),
progress_tasks_bar(0),
user_cancelled(false),
@@ -158,7 +163,8 @@ struct FirmwareDialog::priv
void set_txt_status(const wxString &label);
void flashing_start(unsigned tasks);
void flashing_done(AvrDudeComplete complete);
- void enable_port_picker(bool enable);
+ void set_autodetect(bool autodetect);
+ void update_flash_enabled();
void load_hex_file(const wxString &path);
void queue_event(AvrdudeEvent aevt, wxString message);
@@ -171,6 +177,7 @@ struct FirmwareDialog::priv
void prepare_mk2();
void prepare_mk3();
void prepare_avr109(Avr109Pid usb_pid);
+ bool get_serial_port();
void perform_upload();
void user_cancel();
@@ -211,8 +218,10 @@ void FirmwareDialog::priv::find_serial_ports()
idx = i;
break;
}
- if (idx != -1)
+ if (idx != -1) {
port_picker->SetSelection(idx);
+ update_flash_enabled();
+ }
}
}
}
@@ -277,20 +286,30 @@ void FirmwareDialog::priv::flashing_done(AvrDudeComplete complete)
}
}
-void FirmwareDialog::priv::enable_port_picker(bool enable)
+void FirmwareDialog::priv::set_autodetect(bool autodetect)
{
- port_picker->Show(enable);
- btn_rescan->Show(enable);
- port_autodetect->Show(! enable);
+ port_autodetect = autodetect;
+
+ port_picker->Show(!autodetect);
+ btn_rescan->Show(!autodetect);
+ txt_port_autodetect->Show(autodetect);
q->Layout();
fit_no_shrink();
}
+void FirmwareDialog::priv::update_flash_enabled()
+{
+ const bool hex_exists = wxFileExists(hex_picker->GetPath());
+ const bool port_valid = port_autodetect || get_serial_port();
+
+ btn_flash->Enable(hex_exists && port_valid);
+}
+
void FirmwareDialog::priv::load_hex_file(const wxString &path)
{
hex_file = HexFile(path.wx_str());
- const bool auto_lookup = hex_file.device == HexFile::DEV_MM_CONTROL || hex_file.device == HexFile::DEV_CW1;
- enable_port_picker(! auto_lookup);
+ const bool autodetect = hex_file.device == HexFile::DEV_MM_CONTROL || hex_file.device == HexFile::DEV_CW1;
+ set_autodetect(autodetect);
}
void FirmwareDialog::priv::queue_event(AvrdudeEvent aevt, wxString message)
@@ -553,6 +572,31 @@ void FirmwareDialog::priv::prepare_avr109(Avr109Pid usb_pid)
}
+bool FirmwareDialog::priv::get_serial_port()
+{
+ const int selection = port_picker->GetSelection();
+ if (selection != wxNOT_FOUND) {
+ port = this->ports[selection];
+ } else {
+ // User has supplied a custom filename
+
+ std::string path_u8 = GUI::into_u8(port_picker->GetValue());
+#ifdef _WIN32
+ static const std::regex com_pattern("COM[0-9]+", std::regex::icase);
+ std::smatch matches;
+ if (std::regex_match(path_u8, matches, com_pattern)) {
+#else
+ if (fs::is_other(fs::path(path_u8))) {
+#endif
+ port = SerialPortInfo(std::move(path_u8));
+ } else {
+ port = boost::none;
+ }
+ }
+
+ return !!port;
+}
+
void FirmwareDialog::priv::perform_upload()
{
auto filename = hex_picker->GetPath();
@@ -560,14 +604,8 @@ void FirmwareDialog::priv::perform_upload()
load_hex_file(filename); // Might already be loaded, but we want to make sure it's fresh
- int selection = port_picker->GetSelection();
- if (selection != wxNOT_FOUND) {
- port = this->ports[selection];
-
- // Verify whether the combo box list selection equals to the combo box edit value.
- if (wxString::FromUTF8(port->friendly_name.data()) != port_picker->GetValue()) {
- return;
- }
+ if (!port_autodetect && !get_serial_port()) {
+ return;
}
const bool extra_verbose = false; // For debugging
@@ -769,13 +807,13 @@ FirmwareDialog::FirmwareDialog(wxWindow *parent) :
auto *label_port_picker = new wxStaticText(panel, wxID_ANY, _(L("Serial port:")));
p->port_picker = new wxComboBox(panel, wxID_ANY);
- p->port_autodetect = new wxStaticText(panel, wxID_ANY, _(L("Autodetected")));
+ p->txt_port_autodetect = new wxStaticText(panel, wxID_ANY, _(L("Autodetected")));
p->btn_rescan = new wxButton(panel, wxID_ANY, _(L("Rescan")));
auto *port_sizer = new wxBoxSizer(wxHORIZONTAL);
port_sizer->Add(p->port_picker, 1, wxEXPAND | wxRIGHT, SPACING);
port_sizer->Add(p->btn_rescan, 0);
- port_sizer->Add(p->port_autodetect, 1, wxEXPAND);
- p->enable_port_picker(true);
+ port_sizer->Add(p->txt_port_autodetect, 1, wxEXPAND);
+ p->set_autodetect(false);
auto *label_progress = new wxStaticText(panel, wxID_ANY, _(L("Progress:")));
p->progressbar = new wxGauge(panel, wxID_ANY, 1, wxDefaultPosition, wxDefaultSize, wxGA_HORIZONTAL | wxGA_SMOOTH);
@@ -836,10 +874,13 @@ FirmwareDialog::FirmwareDialog(wxWindow *parent) :
p->hex_picker->Bind(wxEVT_FILEPICKER_CHANGED, [this](wxFileDirPickerEvent& evt) {
if (wxFileExists(evt.GetPath())) {
this->p->load_hex_file(evt.GetPath());
- this->p->btn_flash->Enable();
}
+ p->update_flash_enabled();
});
+ p->port_picker->Bind(wxEVT_COMBOBOX, [this](wxCommandEvent &) { p->update_flash_enabled(); });
+ p->port_picker->Bind(wxEVT_TEXT, [this](wxCommandEvent &) { p->update_flash_enabled(); });
+
p->spoiler->Bind(wxEVT_COLLAPSIBLEPANE_CHANGED, [=](wxCollapsiblePaneEvent &evt) {
if (evt.GetCollapsed()) {
this->SetMinSize(wxSize(p->min_width, p->min_height));
diff --git a/src/slic3r/GUI/GLCanvas3D.cpp b/src/slic3r/GUI/GLCanvas3D.cpp
index 3d9b24c11..25319e9ce 100644
--- a/src/slic3r/GUI/GLCanvas3D.cpp
+++ b/src/slic3r/GUI/GLCanvas3D.cpp
@@ -17,6 +17,7 @@
#include "slic3r/GUI/GUI.hpp"
#include "slic3r/GUI/PresetBundle.hpp"
#include "slic3r/GUI/Tab.hpp"
+#include "slic3r/GUI/GUI_Preview.hpp"
#include "GUI_App.hpp"
#include "GUI_ObjectList.hpp"
#include "GUI_ObjectManipulation.hpp"
@@ -299,22 +300,10 @@ void GLCanvas3D::LayersEditing::render_overlay(const GLCanvas3D& canvas) const
const Rect& bar_rect = get_bar_rect_viewport(canvas);
const Rect& reset_rect = get_reset_rect_viewport(canvas);
- glsafe(::glDisable(GL_DEPTH_TEST));
-
- // The viewport and camera are set to complete view and glOrtho(-$x / 2, $x / 2, -$y / 2, $y / 2, -$depth, $depth),
- // where x, y is the window size divided by $self->_zoom.
- glsafe(::glPushMatrix());
- glsafe(::glLoadIdentity());
-
_render_tooltip_texture(canvas, bar_rect, reset_rect);
_render_reset_texture(reset_rect);
_render_active_object_annotations(canvas, bar_rect);
_render_profile(bar_rect);
-
- // Revert the matrices.
- glsafe(::glPopMatrix());
-
- glsafe(::glEnable(GL_DEPTH_TEST));
}
float GLCanvas3D::LayersEditing::get_cursor_z_relative(const GLCanvas3D& canvas)
@@ -369,7 +358,7 @@ Rect GLCanvas3D::LayersEditing::get_bar_rect_viewport(const GLCanvas3D& canvas)
float half_w = 0.5f * (float)cnv_size.get_width();
float half_h = 0.5f * (float)cnv_size.get_height();
- float zoom = canvas.get_camera().zoom;
+ float zoom = (float)canvas.get_camera().get_zoom();
float inv_zoom = (zoom != 0.0f) ? 1.0f / zoom : 0.0f;
return Rect((half_w - thickness_bar_width(canvas)) * inv_zoom, half_h * inv_zoom, half_w * inv_zoom, (-half_h + reset_button_height(canvas)) * inv_zoom);
@@ -381,7 +370,7 @@ Rect GLCanvas3D::LayersEditing::get_reset_rect_viewport(const GLCanvas3D& canvas
float half_w = 0.5f * (float)cnv_size.get_width();
float half_h = 0.5f * (float)cnv_size.get_height();
- float zoom = canvas.get_camera().zoom;
+ float zoom = (float)canvas.get_camera().get_zoom();
float inv_zoom = (zoom != 0.0f) ? 1.0f / zoom : 0.0f;
return Rect((half_w - thickness_bar_width(canvas)) * inv_zoom, (-half_h + reset_button_height(canvas)) * inv_zoom, half_w * inv_zoom, -half_h * inv_zoom);
@@ -400,7 +389,7 @@ void GLCanvas3D::LayersEditing::_render_tooltip_texture(const GLCanvas3D& canvas
if (m_tooltip_texture.get_id() == 0)
{
std::string filename = resources_dir() + "/icons/variable_layer_height_tooltip.png";
- if (!m_tooltip_texture.load_from_file(filename, false))
+ if (!m_tooltip_texture.load_from_file(filename, false, true))
return;
}
@@ -412,7 +401,7 @@ void GLCanvas3D::LayersEditing::_render_tooltip_texture(const GLCanvas3D& canvas
const float width = (float)m_tooltip_texture.get_width() * scale;
const float height = (float)m_tooltip_texture.get_height() * scale;
- float zoom = canvas.get_camera().zoom;
+ float zoom = (float)canvas.get_camera().get_zoom();
float inv_zoom = (zoom != 0.0f) ? 1.0f / zoom : 0.0f;
float gap = 10.0f * inv_zoom;
@@ -432,7 +421,7 @@ void GLCanvas3D::LayersEditing::_render_reset_texture(const Rect& reset_rect) co
if (m_reset_texture.get_id() == 0)
{
std::string filename = resources_dir() + "/icons/variable_layer_height_reset.png";
- if (!m_reset_texture.load_from_file(filename, false))
+ if (!m_reset_texture.load_from_file(filename, false, true))
return;
}
@@ -727,7 +716,7 @@ void GLCanvas3D::WarningTexture::activate(WarningTexture::Warning warning, bool
}
}
- _generate(text, canvas, red_colored); // GUI::GLTexture::reset() is called at the beginning of generate(...)
+ generate(text, canvas, true, red_colored); // GUI::GLTexture::reset() is called at the beginning of generate(...)
// save information for rescaling
m_msg_text = text;
@@ -788,7 +777,7 @@ static void msw_disable_cleartype(wxFont &font)
}
#endif /* __WXMSW__ */
-bool GLCanvas3D::WarningTexture::_generate(const std::string& msg_utf8, const GLCanvas3D& canvas, const bool red_colored/* = false*/)
+bool GLCanvas3D::WarningTexture::generate(const std::string& msg_utf8, const GLCanvas3D& canvas, bool compress, bool red_colored/* = false*/)
{
reset();
@@ -862,7 +851,10 @@ bool GLCanvas3D::WarningTexture::_generate(const std::string& msg_utf8, const GL
glsafe(::glPixelStorei(GL_UNPACK_ALIGNMENT, 1));
glsafe(::glGenTextures(1, &m_id));
glsafe(::glBindTexture(GL_TEXTURE_2D, (GLuint)m_id));
- glsafe(::glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, (GLsizei)m_width, (GLsizei)m_height, 0, GL_RGBA, GL_UNSIGNED_BYTE, (const void*)data.data()));
+ if (compress && GLEW_EXT_texture_compression_s3tc)
+ glsafe(::glTexImage2D(GL_TEXTURE_2D, 0, GL_COMPRESSED_RGBA_S3TC_DXT5_EXT, (GLsizei)m_width, (GLsizei)m_height, 0, GL_RGBA, GL_UNSIGNED_BYTE, (const void*)data.data()));
+ else
+ glsafe(::glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, (GLsizei)m_width, (GLsizei)m_height, 0, GL_RGBA, GL_UNSIGNED_BYTE, (const void*)data.data()));
glsafe(::glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR));
glsafe(::glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR));
glsafe(::glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAX_LEVEL, 0));
@@ -878,12 +870,8 @@ void GLCanvas3D::WarningTexture::render(const GLCanvas3D& canvas) const
if ((m_id > 0) && (m_original_width > 0) && (m_original_height > 0) && (m_width > 0) && (m_height > 0))
{
- glsafe(::glDisable(GL_DEPTH_TEST));
- glsafe(::glPushMatrix());
- glsafe(::glLoadIdentity());
-
const Size& cnv_size = canvas.get_canvas_size();
- float zoom = canvas.get_camera().zoom;
+ float zoom = (float)canvas.get_camera().get_zoom();
float inv_zoom = (zoom != 0.0f) ? 1.0f / zoom : 0.0f;
float left = (-0.5f * (float)m_original_width) * inv_zoom;
float top = (-0.5f * (float)cnv_size.get_height() + (float)m_original_height + 2.0f) * inv_zoom;
@@ -902,9 +890,6 @@ void GLCanvas3D::WarningTexture::render(const GLCanvas3D& canvas) const
uvs.right_top = { uv_right, uv_top };
GLTexture::render_sub_texture(m_id, left, right, bottom, top, uvs);
-
- glsafe(::glPopMatrix());
- glsafe(::glEnable(GL_DEPTH_TEST));
}
}
@@ -913,7 +898,7 @@ void GLCanvas3D::WarningTexture::msw_rescale(const GLCanvas3D& canvas)
if (m_msg_text.empty())
return;
- _generate(m_msg_text, canvas, m_is_colored_red);
+ generate(m_msg_text, canvas, true, m_is_colored_red);
}
const unsigned char GLCanvas3D::LegendTexture::Squares_Border_Color[3] = { 64, 64, 64 };
@@ -956,7 +941,7 @@ void GLCanvas3D::LegendTexture::fill_color_print_legend_values(const GCodePrevie
}
}
-bool GLCanvas3D::LegendTexture::generate(const GCodePreviewData& preview_data, const std::vector<float>& tool_colors, const GLCanvas3D& canvas)
+bool GLCanvas3D::LegendTexture::generate(const GCodePreviewData& preview_data, const std::vector<float>& tool_colors, const GLCanvas3D& canvas, bool compress)
{
reset();
@@ -1145,7 +1130,10 @@ bool GLCanvas3D::LegendTexture::generate(const GCodePreviewData& preview_data, c
glsafe(::glPixelStorei(GL_UNPACK_ALIGNMENT, 1));
glsafe(::glGenTextures(1, &m_id));
glsafe(::glBindTexture(GL_TEXTURE_2D, (GLuint)m_id));
- glsafe(::glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, (GLsizei)m_width, (GLsizei)m_height, 0, GL_RGBA, GL_UNSIGNED_BYTE, (const void*)data.data()));
+ if (compress && GLEW_EXT_texture_compression_s3tc)
+ glsafe(::glTexImage2D(GL_TEXTURE_2D, 0, GL_COMPRESSED_RGBA_S3TC_DXT5_EXT, (GLsizei)m_width, (GLsizei)m_height, 0, GL_RGBA, GL_UNSIGNED_BYTE, (const void*)data.data()));
+ else
+ glsafe(::glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, (GLsizei)m_width, (GLsizei)m_height, 0, GL_RGBA, GL_UNSIGNED_BYTE, (const void*)data.data()));
glsafe(::glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR));
glsafe(::glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR));
glsafe(::glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAX_LEVEL, 0));
@@ -1158,12 +1146,8 @@ void GLCanvas3D::LegendTexture::render(const GLCanvas3D& canvas) const
{
if ((m_id > 0) && (m_original_width > 0) && (m_original_height > 0) && (m_width > 0) && (m_height > 0))
{
- glsafe(::glDisable(GL_DEPTH_TEST));
- glsafe(::glPushMatrix());
- glsafe(::glLoadIdentity());
-
const Size& cnv_size = canvas.get_canvas_size();
- float zoom = canvas.get_camera().zoom;
+ float zoom = (float)canvas.get_camera().get_zoom();
float inv_zoom = (zoom != 0.0f) ? 1.0f / zoom : 0.0f;
float left = (-0.5f * (float)cnv_size.get_width()) * inv_zoom;
float top = (0.5f * (float)cnv_size.get_height()) * inv_zoom;
@@ -1182,9 +1166,6 @@ void GLCanvas3D::LegendTexture::render(const GLCanvas3D& canvas) const
uvs.right_top = { uv_right, uv_top };
GLTexture::render_sub_texture(m_id, left, right, bottom, top, uvs);
-
- glsafe(::glPopMatrix());
- glsafe(::glEnable(GL_DEPTH_TEST));
}
}
@@ -1209,6 +1190,7 @@ wxDEFINE_EVENT(EVT_GLCANVAS_UPDATE_BED_SHAPE, SimpleEvent);
wxDEFINE_EVENT(EVT_GLCANVAS_TAB, SimpleEvent);
wxDEFINE_EVENT(EVT_GLCANVAS_RESETGIZMOS, SimpleEvent);
wxDEFINE_EVENT(EVT_GLCANVAS_MOVE_DOUBLE_SLIDER, wxKeyEvent);
+wxDEFINE_EVENT(EVT_GLCANVAS_EDIT_COLOR_CHANGE, wxKeyEvent);
GLCanvas3D::GLCanvas3D(wxGLCanvas* canvas, Bed3D& bed, Camera& camera, GLToolbar& view_toolbar)
: m_canvas(canvas)
@@ -1227,6 +1209,7 @@ GLCanvas3D::GLCanvas3D(wxGLCanvas* canvas, Bed3D& bed, Camera& camera, GLToolbar
#endif // ENABLE_SVG_ICONS
, m_use_clipping_planes(false)
, m_sidebar_field("")
+ , m_keep_dirty(false)
, m_config(nullptr)
, m_process(nullptr)
, m_model(nullptr)
@@ -1444,6 +1427,8 @@ void GLCanvas3D::bed_shape_changed()
m_camera.set_scene_box(scene_bounding_box());
m_camera.requires_zoom_to_bed = true;
m_dirty = true;
+ if (m_bed.is_prusa())
+ start_keeping_dirty();
}
void GLCanvas3D::set_color_by(const std::string& value)
@@ -1465,7 +1450,7 @@ BoundingBoxf3 GLCanvas3D::volumes_bounding_box() const
BoundingBoxf3 GLCanvas3D::scene_bounding_box() const
{
BoundingBoxf3 bb = volumes_bounding_box();
- bb.merge(m_bed.get_bounding_box());
+ bb.merge(m_bed.get_bounding_box(false));
if (m_config != nullptr)
{
@@ -1473,6 +1458,7 @@ BoundingBoxf3 GLCanvas3D::scene_bounding_box() const
bb.min(2) = std::min(bb.min(2), -h);
bb.max(2) = std::max(bb.max(2), h);
}
+
return bb;
}
@@ -1548,20 +1534,20 @@ void GLCanvas3D::allow_multisample(bool allow)
void GLCanvas3D::zoom_to_bed()
{
- _zoom_to_bounding_box(m_bed.get_bounding_box());
+ _zoom_to_box(m_bed.get_bounding_box(false));
}
void GLCanvas3D::zoom_to_volumes()
{
m_apply_zoom_to_volumes_filter = true;
- _zoom_to_bounding_box(volumes_bounding_box());
+ _zoom_to_box(volumes_bounding_box());
m_apply_zoom_to_volumes_filter = false;
}
void GLCanvas3D::zoom_to_selection()
{
if (!m_selection.is_empty())
- _zoom_to_bounding_box(m_selection.get_bounding_box());
+ _zoom_to_box(m_selection.get_bounding_box());
}
void GLCanvas3D::select_view(const std::string& direction)
@@ -1622,6 +1608,7 @@ void GLCanvas3D::render()
}
m_camera.apply_view_matrix();
+ m_camera.apply_projection(_max_bounding_box(true));
GLfloat position_cam[4] = { 1.0f, 0.0f, 1.0f, 0.0f };
glsafe(::glLightfv(GL_LIGHT1, GL_POSITION, position_cam));
@@ -1683,29 +1670,31 @@ void GLCanvas3D::render()
m_rectangle_selection.render(*this);
// draw overlays
- _render_gizmos_overlay();
- _render_warning_texture();
- _render_legend_texture();
-#if !ENABLE_SVG_ICONS
- _resize_toolbars();
-#endif // !ENABLE_SVG_ICONS
- _render_toolbar();
- _render_view_toolbar();
- if ((m_layers_editing.last_object_id >= 0) && (m_layers_editing.object_max_z() > 0.0f))
- m_layers_editing.render_overlay(*this);
+ _render_overlays();
#if ENABLE_RENDER_STATISTICS
ImGuiWrapper& imgui = *wxGetApp().imgui();
imgui.set_next_window_bg_alpha(0.5f);
imgui.begin(std::string("Render statistics"), ImGuiWindowFlags_AlwaysAutoResize | ImGuiWindowFlags_NoResize | ImGuiWindowFlags_NoCollapse);
- imgui.text(_(L("Last frame")) +": ");
+ imgui.text("Last frame: ");
ImGui::SameLine();
imgui.text(std::to_string(m_render_stats.last_frame));
ImGui::SameLine();
- imgui.text(" "+_(L("ms")));
+ imgui.text(" ms");
+ ImGui::Separator();
+ imgui.text("Compressed textures: ");
+ ImGui::SameLine();
+ imgui.text(GLCanvas3DManager::are_compressed_textures_supported() ? "supported" : "not supported");
+ imgui.text("Max texture size: ");
+ ImGui::SameLine();
+ imgui.text(std::to_string(GLCanvas3DManager::get_gl_info().get_max_tex_size()));
imgui.end();
#endif // ENABLE_RENDER_STATISTICS
+#if ENABLE_CAMERA_STATISTICS
+ m_camera.debug_render();
+#endif // ENABLE_CAMERA_STATISTICS
+
wxGetApp().imgui()->render();
m_canvas->SwapBuffers();
@@ -2309,6 +2298,9 @@ void GLCanvas3D::on_idle(wxIdleEvent& evt)
return;
_refresh_if_shown_on_screen();
+
+ if (m_keep_dirty)
+ m_dirty = true;
}
void GLCanvas3D::on_char(wxKeyEvent& evt)
@@ -2387,17 +2379,29 @@ void GLCanvas3D::on_char(wxKeyEvent& evt)
case '4': { select_view("rear"); break; }
case '5': { select_view("left"); break; }
case '6': { select_view("right"); break; }
- case '+': { post_event(Event<int>(EVT_GLCANVAS_INCREASE_INSTANCES, +1)); break; }
- case '-': { post_event(Event<int>(EVT_GLCANVAS_INCREASE_INSTANCES, -1)); break; }
+ case '+': {
+ if (dynamic_cast<Preview*>(m_canvas->GetParent()) != nullptr)
+ post_event(wxKeyEvent(EVT_GLCANVAS_EDIT_COLOR_CHANGE, evt));
+ else
+ post_event(Event<int>(EVT_GLCANVAS_INCREASE_INSTANCES, +1));
+ break; }
+ case '-': {
+ if (dynamic_cast<Preview*>(m_canvas->GetParent()) != nullptr)
+ post_event(wxKeyEvent(EVT_GLCANVAS_EDIT_COLOR_CHANGE, evt));
+ else
+ post_event(Event<int>(EVT_GLCANVAS_INCREASE_INSTANCES, -1));
+ break; }
case '?': { post_event(SimpleEvent(EVT_GLCANVAS_QUESTION_MARK)); break; }
case 'A':
case 'a': { post_event(SimpleEvent(EVT_GLCANVAS_ARRANGE)); break; }
case 'B':
case 'b': { zoom_to_bed(); break; }
case 'I':
- case 'i': { set_camera_zoom(1.0f); break; }
+ case 'i': { set_camera_zoom(1.0); break; }
+ case 'K':
+ case 'k': { m_camera.select_next_type(); m_dirty = true; break; }
case 'O':
- case 'o': { set_camera_zoom(-1.0f); break; }
+ case 'o': { set_camera_zoom(-1.0); break; }
case 'Z':
case 'z': { m_selection.is_empty() ? zoom_to_volumes() : zoom_to_selection(); break; }
default: { evt.Skip(); break; }
@@ -2472,15 +2476,10 @@ void GLCanvas3D::on_key(wxKeyEvent& evt)
else if (keyCode == WXK_LEFT ||
keyCode == WXK_RIGHT ||
keyCode == WXK_UP ||
- keyCode == WXK_DOWN ||
- keyCode == '+' ||
- keyCode == WXK_NUMPAD_ADD ||
- keyCode == '-' ||
- keyCode == 390 ||
- keyCode == WXK_DELETE ||
- keyCode == WXK_BACK )
+ keyCode == WXK_DOWN )
{
- post_event(wxKeyEvent(EVT_GLCANVAS_MOVE_DOUBLE_SLIDER, evt));
+ if (dynamic_cast<Preview*>(m_canvas->GetParent()) != nullptr)
+ post_event(wxKeyEvent(EVT_GLCANVAS_MOVE_DOUBLE_SLIDER, evt));
}
}
}
@@ -2523,7 +2522,7 @@ void GLCanvas3D::on_mouse_wheel(wxMouseEvent& evt)
m_layers_editing.band_width = std::max(std::min(m_layers_editing.band_width * (1.0f + 0.1f * (float)evt.GetWheelRotation() / (float)evt.GetWheelDelta()), 10.0f), 1.5f);
if (m_canvas != nullptr)
m_canvas->Refresh();
-
+
return;
}
}
@@ -2534,8 +2533,7 @@ void GLCanvas3D::on_mouse_wheel(wxMouseEvent& evt)
return;
// Calculate the zoom delta and apply it to the current zoom factor
- float zoom = (float)evt.GetWheelRotation() / (float)evt.GetWheelDelta();
- set_camera_zoom(zoom);
+ set_camera_zoom((double)evt.GetWheelRotation() / (double)evt.GetWheelDelta());
}
void GLCanvas3D::on_timer(wxTimerEvent& evt)
@@ -3287,21 +3285,11 @@ void GLCanvas3D::do_mirror()
post_event(SimpleEvent(EVT_GLCANVAS_SCHEDULE_BACKGROUND_PROCESS));
}
-void GLCanvas3D::set_camera_zoom(float zoom)
+void GLCanvas3D::set_camera_zoom(double zoom)
{
- zoom = std::max(std::min(zoom, 4.0f), -4.0f) / 10.0f;
- zoom = m_camera.zoom / (1.0f - zoom);
-
- // Don't allow to zoom too far outside the scene.
- float zoom_min = _get_zoom_to_bounding_box_factor(_max_bounding_box());
- if (zoom_min > 0.0f)
- zoom = std::max(zoom, zoom_min * 0.7f);
-
- // Don't allow to zoom too close to the scene.
- zoom = std::min(zoom, 100.0f);
-
- m_camera.zoom = zoom;
- _refresh_if_shown_on_screen();
+ const Size& cnv_size = get_canvas_size();
+ m_camera.set_zoom(zoom, _max_bounding_box(false), cnv_size.get_width(), cnv_size.get_height());
+ m_dirty = true;
}
void GLCanvas3D::update_gizmos_on_off_state()
@@ -3335,8 +3323,7 @@ void GLCanvas3D::update_ui_from_settings()
if (new_scaling != orig_scaling) {
BOOST_LOG_TRIVIAL(debug) << "GLCanvas3D: Scaling factor: " << new_scaling;
- m_camera.zoom /= orig_scaling;
- m_camera.zoom *= new_scaling;
+ m_camera.set_zoom(m_camera.get_zoom() * new_scaling / orig_scaling);
_refresh_if_shown_on_screen();
}
#endif
@@ -3383,7 +3370,7 @@ Linef3 GLCanvas3D::mouse_ray(const Point& mouse_pos)
double GLCanvas3D::get_size_proportional_to_max_bed_size(double factor) const
{
- return factor * m_bed.get_bounding_box().max_size();
+ return factor * m_bed.get_bounding_box(false).max_size();
}
void GLCanvas3D::set_cursor(ECursorType type)
@@ -3501,7 +3488,7 @@ bool GLCanvas3D::_init_toolbar()
item.tooltip = _utf8(L("Copy")) + " [" + GUI::shortkey_ctrl_prefix() + "C]";
item.sprite_id = 4;
item.action_callback = [this]() { if (m_canvas != nullptr) wxPostEvent(m_canvas, SimpleEvent(EVT_GLTOOLBAR_COPY)); };
- item.enabled_state_callback = []()->bool { return wxGetApp().plater()->can_copy(); };
+ item.enabled_state_callback = []()->bool { return wxGetApp().plater()->can_copy_to_clipboard(); };
if (!m_toolbar.add_item(item))
return false;
@@ -3512,7 +3499,7 @@ bool GLCanvas3D::_init_toolbar()
item.tooltip = _utf8(L("Paste")) + " [" + GUI::shortkey_ctrl_prefix() + "V]";
item.sprite_id = 5;
item.action_callback = [this]() { if (m_canvas != nullptr) wxPostEvent(m_canvas, SimpleEvent(EVT_GLTOOLBAR_PASTE)); };
- item.enabled_state_callback = []()->bool { return wxGetApp().plater()->can_paste(); };
+ item.enabled_state_callback = []()->bool { return wxGetApp().plater()->can_paste_from_clipboard(); };
if (!m_toolbar.add_item(item))
return false;
@@ -3614,143 +3601,25 @@ void GLCanvas3D::_resize(unsigned int w, unsigned int h)
// ensures that this canvas is current
_set_current();
- m_camera.apply_viewport(0, 0, w, h);
-
- const BoundingBoxf3& bbox = _max_bounding_box();
-
- switch (m_camera.type)
- {
- case Camera::Ortho:
- {
- float w2 = w;
- float h2 = h;
- float two_zoom = 2.0f * m_camera.zoom;
- if (two_zoom != 0.0f)
- {
- float inv_two_zoom = 1.0f / two_zoom;
- w2 *= inv_two_zoom;
- h2 *= inv_two_zoom;
- }
-
- // FIXME: calculate a tighter value for depth will improve z-fighting
- // Set at least some minimum depth in case the bounding box is empty to avoid an OpenGL driver error.
- float depth = std::max(1.f, 5.0f * (float)bbox.max_size());
- m_camera.apply_ortho_projection(-w2, w2, -h2, h2, -depth, depth);
- break;
- }
-// case Camera::Perspective:
-// {
-// float bbox_r = (float)bbox.radius();
-// float fov = PI * 45.0f / 180.0f;
-// float fov_tan = tan(0.5f * fov);
-// float cam_distance = 0.5f * bbox_r / fov_tan;
-// m_camera.distance = cam_distance;
-//
-// float nr = cam_distance - bbox_r * 1.1f;
-// float fr = cam_distance + bbox_r * 1.1f;
-// if (nr < 1.0f)
-// nr = 1.0f;
-//
-// if (fr < nr + 1.0f)
-// fr = nr + 1.0f;
-//
-// float h2 = fov_tan * nr;
-// float w2 = h2 * w / h;
-// ::glFrustum(-w2, w2, -h2, h2, nr, fr);
-//
-// break;
-// }
- default:
- {
- throw std::runtime_error("Invalid camera type.");
- break;
- }
- }
+ // updates camera
+ m_camera.apply_viewport(0, 0, w, h);
m_dirty = false;
}
-BoundingBoxf3 GLCanvas3D::_max_bounding_box() const
+BoundingBoxf3 GLCanvas3D::_max_bounding_box(bool include_bed_model) const
{
BoundingBoxf3 bb = volumes_bounding_box();
- bb.merge(m_bed.get_bounding_box());
+ bb.merge(m_bed.get_bounding_box(include_bed_model));
return bb;
}
-void GLCanvas3D::_zoom_to_bounding_box(const BoundingBoxf3& bbox)
-{
- // Calculate the zoom factor needed to adjust viewport to bounding box.
- float zoom = _get_zoom_to_bounding_box_factor(bbox);
- if (zoom > 0.0f)
- {
- m_camera.zoom = zoom;
- // center view around bounding box center
- m_camera.set_target(bbox.center());
- m_dirty = true;
- }
-}
-
-float GLCanvas3D::_get_zoom_to_bounding_box_factor(const BoundingBoxf3& bbox) const
+void GLCanvas3D::_zoom_to_box(const BoundingBoxf3& box)
{
- float max_bb_size = bbox.max_size();
- if (max_bb_size == 0.0f)
- return -1.0f;
-
- // project the bbox vertices on a plane perpendicular to the camera forward axis
- // then calculates the vertices coordinate on this plane along the camera xy axes
-
- // we need the view matrix, we let opengl calculate it (same as done in render())
- m_camera.apply_view_matrix();
-
- Vec3d right = m_camera.get_dir_right();
- Vec3d up = m_camera.get_dir_up();
- Vec3d forward = m_camera.get_dir_forward();
-
- Vec3d bb_min = bbox.min;
- Vec3d bb_max = bbox.max;
- Vec3d bb_center = bbox.center();
-
- // bbox vertices in world space
- std::vector<Vec3d> vertices;
- vertices.reserve(8);
- vertices.push_back(bb_min);
- vertices.emplace_back(bb_max(0), bb_min(1), bb_min(2));
- vertices.emplace_back(bb_max(0), bb_max(1), bb_min(2));
- vertices.emplace_back(bb_min(0), bb_max(1), bb_min(2));
- vertices.emplace_back(bb_min(0), bb_min(1), bb_max(2));
- vertices.emplace_back(bb_max(0), bb_min(1), bb_max(2));
- vertices.push_back(bb_max);
- vertices.emplace_back(bb_min(0), bb_max(1), bb_max(2));
-
- double max_x = 0.0;
- double max_y = 0.0;
-
- // margin factor to give some empty space around the bbox
- double margin_factor = 1.25;
-
- for (const Vec3d& v : vertices)
- {
- // project vertex on the plane perpendicular to camera forward axis
- Vec3d pos(v(0) - bb_center(0), v(1) - bb_center(1), v(2) - bb_center(2));
- Vec3d proj_on_plane = pos - pos.dot(forward) * forward;
-
- // calculates vertex coordinate along camera xy axes
- double x_on_plane = proj_on_plane.dot(right);
- double y_on_plane = proj_on_plane.dot(up);
-
- max_x = std::max(max_x, margin_factor * std::abs(x_on_plane));
- max_y = std::max(max_y, margin_factor * std::abs(y_on_plane));
- }
-
- if ((max_x == 0.0) || (max_y == 0.0))
- return -1.0f;
-
- max_x *= 2.0;
- max_y *= 2.0;
-
const Size& cnv_size = get_canvas_size();
- return (float)std::min((double)cnv_size.get_width() / max_x, (double)cnv_size.get_height() / max_y);
+ m_camera.zoom_to_box(box, cnv_size.get_width(), cnv_size.get_height());
+ m_dirty = true;
}
void GLCanvas3D::_refresh_if_shown_on_screen()
@@ -3936,7 +3805,7 @@ void GLCanvas3D::_render_bed(float theta) const
#if ENABLE_RETINA_GL
scale_factor = m_retina_helper->get_scale_factor();
#endif // ENABLE_RETINA_GL
- m_bed.render(theta, m_use_VBOs, scale_factor);
+ m_bed.render(const_cast<GLCanvas3D*>(this), theta, m_use_VBOs, scale_factor);
}
void GLCanvas3D::_render_axes() const
@@ -3965,7 +3834,7 @@ void GLCanvas3D::_render_objects() const
if (m_config != nullptr)
{
- const BoundingBoxf3& bed_bb = m_bed.get_bounding_box();
+ const BoundingBoxf3& bed_bb = m_bed.get_bounding_box(false);
m_volumes.set_print_box((float)bed_bb.min(0), (float)bed_bb.min(1), 0.0f, (float)bed_bb.max(0), (float)bed_bb.max(1), (float)m_config->opt_float("max_print_height"));
m_volumes.check_outside_state(m_config, nullptr);
}
@@ -4047,6 +3916,32 @@ void GLCanvas3D::_render_selection_center() const
}
#endif // ENABLE_RENDER_SELECTION_CENTER
+void GLCanvas3D::_render_overlays() const
+{
+ glsafe(::glDisable(GL_DEPTH_TEST));
+ glsafe(::glPushMatrix());
+ glsafe(::glLoadIdentity());
+ // ensure that the textures are renderered inside the frustrum
+ glsafe(::glTranslated(0.0, 0.0, -(m_camera.get_near_z() + 0.5)));
+ // ensure that the overlay fits the frustrum near z plane
+ double gui_scale = m_camera.get_gui_scale();
+ glsafe(::glScaled(gui_scale, gui_scale, 1.0));
+
+ _render_gizmos_overlay();
+ _render_warning_texture();
+ _render_legend_texture();
+#if !ENABLE_SVG_ICONS
+ _resize_toolbars();
+#endif // !ENABLE_SVG_ICONS
+ _render_toolbar();
+ _render_view_toolbar();
+
+ if ((m_layers_editing.last_object_id >= 0) && (m_layers_editing.object_max_z() > 0.0f))
+ m_layers_editing.render_overlay(*this);
+
+ glsafe(::glPopMatrix());
+}
+
void GLCanvas3D::_render_warning_texture() const
{
m_warning_texture.render(*this);
@@ -4143,7 +4038,7 @@ void GLCanvas3D::_render_toolbar() const
#endif // ENABLE_RETINA_GL
Size cnv_size = get_canvas_size();
- float zoom = m_camera.zoom;
+ float zoom = (float)m_camera.get_zoom();
float inv_zoom = (zoom != 0.0f) ? 1.0f / zoom : 0.0f;
GLToolbar::Layout::EOrientation orientation = m_toolbar.get_layout_orientation();
@@ -4211,7 +4106,7 @@ void GLCanvas3D::_render_view_toolbar() const
#endif // ENABLE_RETINA_GL
Size cnv_size = get_canvas_size();
- float zoom = m_camera.zoom;
+ float zoom = (float)m_camera.get_zoom();
float inv_zoom = (zoom != 0.0f) ? 1.0f / zoom : 0.0f;
// places the toolbar on the bottom-left corner of the 3d scene
@@ -5704,7 +5599,7 @@ std::vector<float> GLCanvas3D::_parse_colors(const std::vector<std::string>& col
void GLCanvas3D::_generate_legend_texture(const GCodePreviewData& preview_data, const std::vector<float>& tool_colors)
{
- m_legend_texture.generate(preview_data, tool_colors, *this);
+ m_legend_texture.generate(preview_data, tool_colors, *this, true);
}
void GLCanvas3D::_set_warning_texture(WarningTexture::Warning warning, bool state)
diff --git a/src/slic3r/GUI/GLCanvas3D.hpp b/src/slic3r/GUI/GLCanvas3D.hpp
index 96bb56bd9..d39a910b3 100644
--- a/src/slic3r/GUI/GLCanvas3D.hpp
+++ b/src/slic3r/GUI/GLCanvas3D.hpp
@@ -125,6 +125,7 @@ wxDECLARE_EVENT(EVT_GLCANVAS_UPDATE_BED_SHAPE, SimpleEvent);
wxDECLARE_EVENT(EVT_GLCANVAS_TAB, SimpleEvent);
wxDECLARE_EVENT(EVT_GLCANVAS_RESETGIZMOS, SimpleEvent);
wxDECLARE_EVENT(EVT_GLCANVAS_MOVE_DOUBLE_SLIDER, wxKeyEvent);
+wxDECLARE_EVENT(EVT_GLCANVAS_EDIT_COLOR_CHANGE, wxKeyEvent);
class GLCanvas3D
{
@@ -375,7 +376,7 @@ class GLCanvas3D
std::vector<Warning> m_warnings;
// Generates the texture with given text.
- bool _generate(const std::string& msg, const GLCanvas3D& canvas, const bool red_colored = false);
+ bool generate(const std::string& msg, const GLCanvas3D& canvas, bool compress, bool red_colored = false);
};
class LegendTexture : public GUI::GLTexture
@@ -398,7 +399,7 @@ class GLCanvas3D
void fill_color_print_legend_values(const GCodePreviewData& preview_data, const GLCanvas3D& canvas,
std::vector<std::pair<double, double>>& cp_legend_values);
- bool generate(const GCodePreviewData& preview_data, const std::vector<float>& tool_colors, const GLCanvas3D& canvas);
+ bool generate(const GCodePreviewData& preview_data, const std::vector<float>& tool_colors, const GLCanvas3D& canvas, bool compress);
void render(const GLCanvas3D& canvas) const;
};
@@ -442,6 +443,7 @@ private:
bool m_use_clipping_planes;
mutable SlaCap m_sla_caps[2];
std::string m_sidebar_field;
+ bool m_keep_dirty;
mutable GLVolumeCollection m_volumes;
Selection m_selection;
@@ -598,7 +600,7 @@ public:
void do_flatten();
void do_mirror();
- void set_camera_zoom(float zoom);
+ void set_camera_zoom(double zoom);
void update_gizmos_on_off_state();
void reset_all_gizmos() { m_gizmos.reset_all_states(); }
@@ -628,6 +630,9 @@ public:
void set_cursor(ECursorType type);
void msw_rescale();
+ void start_keeping_dirty() { m_keep_dirty = true; }
+ void stop_keeping_dirty() { m_keep_dirty = false; }
+
private:
bool _is_shown_on_screen() const;
@@ -636,10 +641,9 @@ private:
bool _set_current();
void _resize(unsigned int w, unsigned int h);
- BoundingBoxf3 _max_bounding_box() const;
+ BoundingBoxf3 _max_bounding_box(bool include_bed_model) const;
- void _zoom_to_bounding_box(const BoundingBoxf3& bbox);
- float _get_zoom_to_bounding_box_factor(const BoundingBoxf3& bbox) const;
+ void _zoom_to_box(const BoundingBoxf3& box);
void _refresh_if_shown_on_screen();
@@ -653,6 +657,7 @@ private:
#if ENABLE_RENDER_SELECTION_CENTER
void _render_selection_center() const;
#endif // ENABLE_RENDER_SELECTION_CENTER
+ void _render_overlays() const;
void _render_warning_texture() const;
void _render_legend_texture() const;
void _render_volumes_for_picking() const;
diff --git a/src/slic3r/GUI/GLCanvas3DManager.cpp b/src/slic3r/GUI/GLCanvas3DManager.cpp
index e409bed0d..4f64b4e87 100644
--- a/src/slic3r/GUI/GLCanvas3DManager.cpp
+++ b/src/slic3r/GUI/GLCanvas3DManager.cpp
@@ -15,40 +15,112 @@
#include <string>
#include <iostream>
+#ifdef __APPLE__
+#include "../Utils/MacDarkMode.hpp"
+#endif // __APPLE__
+
namespace Slic3r {
namespace GUI {
GLCanvas3DManager::GLInfo::GLInfo()
- : version("")
- , glsl_version("")
- , vendor("")
- , renderer("")
+ : m_detected(false)
+ , m_version("")
+ , m_glsl_version("")
+ , m_vendor("")
+ , m_renderer("")
+ , m_max_tex_size(0)
+ , m_max_anisotropy(0.0f)
+{
+}
+
+const std::string& GLCanvas3DManager::GLInfo::get_version() const
+{
+ if (!m_detected)
+ detect();
+
+ return m_version;
+}
+
+const std::string& GLCanvas3DManager::GLInfo::get_glsl_version() const
+{
+ if (!m_detected)
+ detect();
+
+ return m_glsl_version;
+}
+
+const std::string& GLCanvas3DManager::GLInfo::get_vendor() const
+{
+ if (!m_detected)
+ detect();
+
+ return m_vendor;
+}
+
+const std::string& GLCanvas3DManager::GLInfo::get_renderer() const
{
+ if (!m_detected)
+ detect();
+
+ return m_renderer;
+}
+
+int GLCanvas3DManager::GLInfo::get_max_tex_size() const
+{
+ if (!m_detected)
+ detect();
+
+ // clamp to avoid the texture generation become too slow and use too much GPU memory
+#ifdef __APPLE__
+ // and use smaller texture for non retina systems
+ return (Slic3r::GUI::mac_max_scaling_factor() > 1.0) ? std::min(m_max_tex_size, 8192) : std::min(m_max_tex_size / 2, 4096);
+#else
+ // and use smaller texture for older OpenGL versions
+ return is_version_greater_or_equal_to(3, 0) ? std::min(m_max_tex_size, 8192) : std::min(m_max_tex_size / 2, 4096);
+#endif // __APPLE__
+}
+
+float GLCanvas3DManager::GLInfo::get_max_anisotropy() const
+{
+ if (!m_detected)
+ detect();
+
+ return m_max_anisotropy;
}
-void GLCanvas3DManager::GLInfo::detect()
+void GLCanvas3DManager::GLInfo::detect() const
{
const char* data = (const char*)::glGetString(GL_VERSION);
if (data != nullptr)
- version = data;
+ m_version = data;
data = (const char*)::glGetString(GL_SHADING_LANGUAGE_VERSION);
if (data != nullptr)
- glsl_version = data;
+ m_glsl_version = data;
data = (const char*)::glGetString(GL_VENDOR);
if (data != nullptr)
- vendor = data;
+ m_vendor = data;
data = (const char*)::glGetString(GL_RENDERER);
if (data != nullptr)
- renderer = data;
+ m_renderer = data;
+
+ glsafe(::glGetIntegerv(GL_MAX_TEXTURE_SIZE, &m_max_tex_size));
+
+ if (GLEW_EXT_texture_filter_anisotropic)
+ glsafe(::glGetFloatv(GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT, &m_max_anisotropy));
+
+ m_detected = true;
}
bool GLCanvas3DManager::GLInfo::is_version_greater_or_equal_to(unsigned int major, unsigned int minor) const
{
+ if (!m_detected)
+ detect();
+
std::vector<std::string> tokens;
- boost::split(tokens, version, boost::is_any_of(" "), boost::token_compress_on);
+ boost::split(tokens, m_version, boost::is_any_of(" "), boost::token_compress_on);
if (tokens.empty())
return false;
@@ -75,6 +147,9 @@ bool GLCanvas3DManager::GLInfo::is_version_greater_or_equal_to(unsigned int majo
std::string GLCanvas3DManager::GLInfo::to_string(bool format_as_html, bool extensions) const
{
+ if (!m_detected)
+ detect();
+
std::stringstream out;
std::string h2_start = format_as_html ? "<b>" : "";
@@ -84,10 +159,10 @@ std::string GLCanvas3DManager::GLInfo::to_string(bool format_as_html, bool exten
std::string line_end = format_as_html ? "<br>" : "\n";
out << h2_start << "OpenGL installation" << h2_end << line_end;
- out << b_start << "GL version: " << b_end << (version.empty() ? "N/A" : version) << line_end;
- out << b_start << "Vendor: " << b_end << (vendor.empty() ? "N/A" : vendor) << line_end;
- out << b_start << "Renderer: " << b_end << (renderer.empty() ? "N/A" : renderer) << line_end;
- out << b_start << "GLSL version: " << b_end << (glsl_version.empty() ? "N/A" : glsl_version) << line_end;
+ out << b_start << "GL version: " << b_end << (m_version.empty() ? "N/A" : m_version) << line_end;
+ out << b_start << "Vendor: " << b_end << (m_vendor.empty() ? "N/A" : m_vendor) << line_end;
+ out << b_start << "Renderer: " << b_end << (m_renderer.empty() ? "N/A" : m_renderer) << line_end;
+ out << b_start << "GLSL version: " << b_end << (m_glsl_version.empty() ? "N/A" : m_glsl_version) << line_end;
if (extensions)
{
@@ -111,6 +186,8 @@ std::string GLCanvas3DManager::GLInfo::to_string(bool format_as_html, bool exten
}
GLCanvas3DManager::EMultisampleState GLCanvas3DManager::s_multisample = GLCanvas3DManager::MS_Unknown;
+bool GLCanvas3DManager::s_compressed_textures_supported = false;
+GLCanvas3DManager::GLInfo GLCanvas3DManager::s_gl_info;
GLCanvas3DManager::GLCanvas3DManager()
: m_context(nullptr)
@@ -134,7 +211,7 @@ bool GLCanvas3DManager::add(wxGLCanvas* canvas, Bed3D& bed, Camera& camera, GLTo
if (canvas == nullptr)
return false;
- if (_get_canvas(canvas) != m_canvases.end())
+ if (do_get_canvas(canvas) != m_canvases.end())
return false;
GLCanvas3D* canvas3D = new GLCanvas3D(canvas, bed, camera, view_toolbar);
@@ -159,7 +236,7 @@ bool GLCanvas3DManager::add(wxGLCanvas* canvas, Bed3D& bed, Camera& camera, GLTo
bool GLCanvas3DManager::remove(wxGLCanvas* canvas)
{
- CanvasesMap::iterator it = _get_canvas(canvas);
+ CanvasesMap::iterator it = do_get_canvas(canvas);
if (it == m_canvases.end())
return false;
@@ -190,31 +267,29 @@ void GLCanvas3DManager::init_gl()
if (!m_gl_initialized)
{
glewInit();
- m_gl_info.detect();
const AppConfig* config = GUI::get_app_config();
m_use_legacy_opengl = (config == nullptr) || (config->get("use_legacy_opengl") == "1");
- m_use_VBOs = !m_use_legacy_opengl && m_gl_info.is_version_greater_or_equal_to(2, 0);
+ m_use_VBOs = !m_use_legacy_opengl && s_gl_info.is_version_greater_or_equal_to(2, 0);
m_gl_initialized = true;
+ if (GLEW_EXT_texture_compression_s3tc)
+ s_compressed_textures_supported = true;
+ else
+ s_compressed_textures_supported = false;
}
}
-std::string GLCanvas3DManager::get_gl_info(bool format_as_html, bool extensions) const
-{
- return m_gl_info.to_string(format_as_html, extensions);
-}
-
bool GLCanvas3DManager::init(wxGLCanvas* canvas)
{
- CanvasesMap::const_iterator it = _get_canvas(canvas);
+ CanvasesMap::const_iterator it = do_get_canvas(canvas);
if (it != m_canvases.end())
- return (it->second != nullptr) ? _init(*it->second) : false;
+ return (it->second != nullptr) ? init(*it->second) : false;
else
return false;
}
GLCanvas3D* GLCanvas3DManager::get_canvas(wxGLCanvas* canvas)
{
- CanvasesMap::const_iterator it = _get_canvas(canvas);
+ CanvasesMap::const_iterator it = do_get_canvas(canvas);
return (it != m_canvases.end()) ? it->second : nullptr;
}
@@ -224,29 +299,28 @@ wxGLCanvas* GLCanvas3DManager::create_wxglcanvas(wxWindow *parent)
if (s_multisample == MS_Unknown)
{
- _detect_multisample(attribList);
- // debug output
- std::cout << "Multisample " << (can_multisample() ? "enabled" : "disabled") << std::endl;
+ detect_multisample(attribList);
+// // debug output
+// std::cout << "Multisample " << (can_multisample() ? "enabled" : "disabled") << std::endl;
}
- if (! can_multisample()) {
+ if (! can_multisample())
attribList[4] = 0;
- }
return new wxGLCanvas(parent, wxID_ANY, attribList, wxDefaultPosition, wxDefaultSize, wxWANTS_CHARS);
}
-GLCanvas3DManager::CanvasesMap::iterator GLCanvas3DManager::_get_canvas(wxGLCanvas* canvas)
+GLCanvas3DManager::CanvasesMap::iterator GLCanvas3DManager::do_get_canvas(wxGLCanvas* canvas)
{
return (canvas == nullptr) ? m_canvases.end() : m_canvases.find(canvas);
}
-GLCanvas3DManager::CanvasesMap::const_iterator GLCanvas3DManager::_get_canvas(wxGLCanvas* canvas) const
+GLCanvas3DManager::CanvasesMap::const_iterator GLCanvas3DManager::do_get_canvas(wxGLCanvas* canvas) const
{
return (canvas == nullptr) ? m_canvases.end() : m_canvases.find(canvas);
}
-bool GLCanvas3DManager::_init(GLCanvas3D& canvas)
+bool GLCanvas3DManager::init(GLCanvas3D& canvas)
{
if (!m_gl_initialized)
init_gl();
@@ -254,7 +328,7 @@ bool GLCanvas3DManager::_init(GLCanvas3D& canvas)
return canvas.init(m_use_VBOs, m_use_legacy_opengl);
}
-void GLCanvas3DManager::_detect_multisample(int* attribList)
+void GLCanvas3DManager::detect_multisample(int* attribList)
{
int wxVersion = wxMAJOR_VERSION * 10000 + wxMINOR_VERSION * 100 + wxRELEASE_NUMBER;
const AppConfig* app_config = GUI::get_app_config();
diff --git a/src/slic3r/GUI/GLCanvas3DManager.hpp b/src/slic3r/GUI/GLCanvas3DManager.hpp
index 75647e6b2..26c2558d0 100644
--- a/src/slic3r/GUI/GLCanvas3DManager.hpp
+++ b/src/slic3r/GUI/GLCanvas3DManager.hpp
@@ -29,21 +29,39 @@ struct Camera;
class GLCanvas3DManager
{
- struct GLInfo
+public:
+ class GLInfo
{
- std::string version;
- std::string glsl_version;
- std::string vendor;
- std::string renderer;
+ mutable bool m_detected;
+
+ mutable std::string m_version;
+ mutable std::string m_glsl_version;
+ mutable std::string m_vendor;
+ mutable std::string m_renderer;
+
+ mutable int m_max_tex_size;
+ mutable float m_max_anisotropy;
+ public:
GLInfo();
- void detect();
+ const std::string& get_version() const;
+ const std::string& get_glsl_version() const;
+ const std::string& get_vendor() const;
+ const std::string& get_renderer() const;
+
+ int get_max_tex_size() const;
+ float get_max_anisotropy() const;
+
bool is_version_greater_or_equal_to(unsigned int major, unsigned int minor) const;
std::string to_string(bool format_as_html, bool extensions) const;
+
+ private:
+ void detect() const;
};
+private:
enum EMultisampleState : unsigned char
{
MS_Unknown,
@@ -55,11 +73,12 @@ class GLCanvas3DManager
CanvasesMap m_canvases;
wxGLContext* m_context;
- GLInfo m_gl_info;
+ static GLInfo s_gl_info;
bool m_gl_initialized;
bool m_use_legacy_opengl;
bool m_use_VBOs;
static EMultisampleState s_multisample;
+ static bool s_compressed_textures_supported;
public:
GLCanvas3DManager();
@@ -72,21 +91,24 @@ public:
unsigned int count() const;
void init_gl();
- std::string get_gl_info(bool format_as_html, bool extensions) const;
bool init(wxGLCanvas* canvas);
GLCanvas3D* get_canvas(wxGLCanvas* canvas);
static bool can_multisample() { return s_multisample == MS_Enabled; }
+ static bool are_compressed_textures_supported() { return s_compressed_textures_supported; }
+
static wxGLCanvas* create_wxglcanvas(wxWindow *parent);
+ static const GLInfo& get_gl_info() { return s_gl_info; }
+
private:
- CanvasesMap::iterator _get_canvas(wxGLCanvas* canvas);
- CanvasesMap::const_iterator _get_canvas(wxGLCanvas* canvas) const;
+ CanvasesMap::iterator do_get_canvas(wxGLCanvas* canvas);
+ CanvasesMap::const_iterator do_get_canvas(wxGLCanvas* canvas) const;
- bool _init(GLCanvas3D& canvas);
- static void _detect_multisample(int* attribList);
+ bool init(GLCanvas3D& canvas);
+ static void detect_multisample(int* attribList);
};
} // namespace GUI
diff --git a/src/slic3r/GUI/GLSelectionRectangle.cpp b/src/slic3r/GUI/GLSelectionRectangle.cpp
index 9684bb5ec..327cb1fde 100644
--- a/src/slic3r/GUI/GLSelectionRectangle.cpp
+++ b/src/slic3r/GUI/GLSelectionRectangle.cpp
@@ -68,7 +68,7 @@ namespace GUI {
if (!is_dragging())
return;
- float zoom = canvas.get_camera().zoom;
+ float zoom = (float)canvas.get_camera().get_zoom();
float inv_zoom = (zoom != 0.0f) ? 1.0f / zoom : 0.0f;
Size cnv_size = canvas.get_canvas_size();
diff --git a/src/slic3r/GUI/GLTexture.cpp b/src/slic3r/GUI/GLTexture.cpp
index 2fff0869a..171a5c885 100644
--- a/src/slic3r/GUI/GLTexture.cpp
+++ b/src/slic3r/GUI/GLTexture.cpp
@@ -12,6 +12,10 @@
#include <vector>
#include <algorithm>
+#include <thread>
+
+#define STB_DXT_IMPLEMENTATION
+#include "stb_dxt/stb_dxt.h"
#include "nanosvg/nanosvg.h"
#include "nanosvg/nanosvgrast.h"
@@ -21,6 +25,99 @@
namespace Slic3r {
namespace GUI {
+void GLTexture::Compressor::reset()
+{
+ // force compression completion, if any
+ m_abort_compressing = true;
+ // wait for compression completion, if any
+ while (m_is_compressing) {}
+
+ m_levels.clear();
+}
+
+void GLTexture::Compressor::add_level(unsigned int w, unsigned int h, const std::vector<unsigned char>& data)
+{
+ m_levels.emplace_back(w, h, data);
+}
+
+void GLTexture::Compressor::start_compressing()
+{
+ m_is_compressing = true;
+ m_abort_compressing = false;
+ std::thread t(&GLTexture::Compressor::compress, this);
+ t.detach();
+}
+
+bool GLTexture::Compressor::unsent_compressed_data_available() const
+{
+ for (const Level& level : m_levels)
+ {
+ if (!level.sent_to_gpu && level.compressed)
+ return true;
+ }
+
+ return false;
+}
+
+void GLTexture::Compressor::send_compressed_data_to_gpu()
+{
+ // this method should be called inside the main thread of Slicer or a new OpenGL context (sharing resources) would be needed
+
+ glsafe(::glPixelStorei(GL_UNPACK_ALIGNMENT, 1));
+ glsafe(::glBindTexture(GL_TEXTURE_2D, m_texture.m_id));
+ for (int i = 0; i < (int)m_levels.size(); ++i)
+ {
+ Level& level = m_levels[i];
+ if (!level.sent_to_gpu && level.compressed)
+ {
+ glsafe(::glCompressedTexSubImage2D(GL_TEXTURE_2D, (GLint)i, 0, 0, (GLsizei)level.w, (GLsizei)level.h, GL_COMPRESSED_RGBA_S3TC_DXT5_EXT, (GLsizei)level.compressed_data.size(), (const GLvoid*)level.compressed_data.data()));
+ glsafe(::glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAX_LEVEL, i));
+ glsafe(::glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, (i > 0) ? GL_LINEAR_MIPMAP_LINEAR : GL_LINEAR));
+ level.sent_to_gpu = true;
+ // we are done with the compressed data, we can discard it
+ level.compressed_data.clear();
+ level.compressed = false;
+ }
+ }
+ glsafe(::glBindTexture(GL_TEXTURE_2D, 0));
+}
+
+bool GLTexture::Compressor::all_compressed_data_sent_to_gpu() const
+{
+ for (const Level& level : m_levels)
+ {
+ if (!level.sent_to_gpu)
+ return false;
+ }
+
+ return true;
+}
+
+void GLTexture::Compressor::compress()
+{
+ // reference: https://github.com/Cyan4973/RygsDXTc
+
+ for (Level& level : m_levels)
+ {
+ if (m_abort_compressing)
+ break;
+
+ // stb_dxt library, despite claiming that the needed size of the destination buffer is equal to (source buffer size)/4,
+ // crashes if doing so, so we start with twice the required size
+ level.compressed_data = std::vector<unsigned char>(level.w * level.h * 2, 0);
+ int compressed_size = 0;
+ rygCompress(level.compressed_data.data(), level.src_data.data(), level.w, level.h, 1, compressed_size);
+ level.compressed_data.resize(compressed_size);
+
+ // we are done with the source data, we can discard it
+ level.src_data.clear();
+ level.compressed = true;
+ }
+
+ m_is_compressing = false;
+ m_abort_compressing = false;
+}
+
GLTexture::Quad_UVs GLTexture::FullTextureUVs = { { 0.0f, 1.0f }, { 1.0f, 1.0f }, { 1.0f, 0.0f }, { 0.0f, 0.0f } };
GLTexture::GLTexture()
@@ -28,6 +125,7 @@ GLTexture::GLTexture()
, m_width(0)
, m_height(0)
, m_source("")
+ , m_compressor(*this)
{
}
@@ -36,7 +134,7 @@ GLTexture::~GLTexture()
reset();
}
-bool GLTexture::load_from_file(const std::string& filename, bool use_mipmaps)
+bool GLTexture::load_from_file(const std::string& filename, bool use_mipmaps, bool compress)
{
reset();
@@ -44,12 +142,12 @@ bool GLTexture::load_from_file(const std::string& filename, bool use_mipmaps)
return false;
if (boost::algorithm::iends_with(filename, ".png"))
- return load_from_png(filename, use_mipmaps);
+ return load_from_png(filename, use_mipmaps, compress);
else
return false;
}
-bool GLTexture::load_from_svg_file(const std::string& filename, bool use_mipmaps, unsigned int max_size_px)
+bool GLTexture::load_from_svg_file(const std::string& filename, bool use_mipmaps, bool compress, bool apply_anisotropy, unsigned int max_size_px)
{
reset();
@@ -57,12 +155,12 @@ bool GLTexture::load_from_svg_file(const std::string& filename, bool use_mipmaps
return false;
if (boost::algorithm::iends_with(filename, ".svg"))
- return load_from_svg(filename, use_mipmaps, max_size_px);
+ return load_from_svg(filename, use_mipmaps, compress, apply_anisotropy, max_size_px);
else
return false;
}
-bool GLTexture::load_from_svg_files_as_sprites_array(const std::vector<std::string>& filenames, const std::vector<std::pair<int, bool>>& states, unsigned int sprite_size_px)
+bool GLTexture::load_from_svg_files_as_sprites_array(const std::vector<std::string>& filenames, const std::vector<std::pair<int, bool>>& states, unsigned int sprite_size_px, bool compress)
{
reset();
@@ -178,7 +276,10 @@ bool GLTexture::load_from_svg_files_as_sprites_array(const std::vector<std::stri
glsafe(::glPixelStorei(GL_UNPACK_ALIGNMENT, 1));
glsafe(::glGenTextures(1, &m_id));
glsafe(::glBindTexture(GL_TEXTURE_2D, m_id));
- glsafe(::glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, (GLsizei)m_width, (GLsizei)m_height, 0, GL_RGBA, GL_UNSIGNED_BYTE, (const void*)data.data()));
+ if (compress && GLEW_EXT_texture_compression_s3tc)
+ glsafe(::glTexImage2D(GL_TEXTURE_2D, 0, GL_COMPRESSED_RGBA_S3TC_DXT5_EXT, (GLsizei)m_width, (GLsizei)m_height, 0, GL_RGBA, GL_UNSIGNED_BYTE, (const void*)data.data()));
+ else
+ glsafe(::glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, (GLsizei)m_width, (GLsizei)m_height, 0, GL_RGBA, GL_UNSIGNED_BYTE, (const void*)data.data()));
glsafe(::glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR));
glsafe(::glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAX_LEVEL, 0));
glsafe(::glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR));
@@ -222,6 +323,7 @@ void GLTexture::reset()
m_width = 0;
m_height = 0;
m_source = "";
+ m_compressor.reset();
}
void GLTexture::render_texture(unsigned int tex_id, float left, float right, float bottom, float top)
@@ -252,7 +354,7 @@ void GLTexture::render_sub_texture(unsigned int tex_id, float left, float right,
glsafe(::glDisable(GL_BLEND));
}
-unsigned int GLTexture::generate_mipmaps(wxImage& image)
+unsigned int GLTexture::generate_mipmaps(wxImage& image, bool compress)
{
int w = image.GetWidth();
int h = image.GetHeight();
@@ -284,13 +386,16 @@ unsigned int GLTexture::generate_mipmaps(wxImage& image)
data[data_id + 3] = (img_alpha != nullptr) ? img_alpha[i] : 255;
}
- glsafe(::glTexImage2D(GL_TEXTURE_2D, level, GL_RGBA, (GLsizei)w, (GLsizei)h, 0, GL_RGBA, GL_UNSIGNED_BYTE, (const void*)data.data()));
+ if (compress && GLEW_EXT_texture_compression_s3tc)
+ glsafe(::glTexImage2D(GL_TEXTURE_2D, level, GL_COMPRESSED_RGBA_S3TC_DXT5_EXT, (GLsizei)w, (GLsizei)h, 0, GL_RGBA, GL_UNSIGNED_BYTE, (const void*)data.data()));
+ else
+ glsafe(::glTexImage2D(GL_TEXTURE_2D, level, GL_RGBA, (GLsizei)w, (GLsizei)h, 0, GL_RGBA, GL_UNSIGNED_BYTE, (const void*)data.data()));
}
return (unsigned int)level;
}
-bool GLTexture::load_from_png(const std::string& filename, bool use_mipmaps)
+bool GLTexture::load_from_png(const std::string& filename, bool use_mipmaps, bool compress)
{
// Load a PNG with an alpha channel.
wxImage image;
@@ -335,11 +440,14 @@ bool GLTexture::load_from_png(const std::string& filename, bool use_mipmaps)
glsafe(::glPixelStorei(GL_UNPACK_ALIGNMENT, 1));
glsafe(::glGenTextures(1, &m_id));
glsafe(::glBindTexture(GL_TEXTURE_2D, m_id));
- glsafe(::glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, (GLsizei)m_width, (GLsizei)m_height, 0, GL_RGBA, GL_UNSIGNED_BYTE, (const void*)data.data()));
+ if (compress && GLEW_EXT_texture_compression_s3tc)
+ glsafe(::glTexImage2D(GL_TEXTURE_2D, 0, GL_COMPRESSED_RGBA_S3TC_DXT5_EXT, (GLsizei)m_width, (GLsizei)m_height, 0, GL_RGBA, GL_UNSIGNED_BYTE, (const void*)data.data()));
+ else
+ glsafe(::glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, (GLsizei)m_width, (GLsizei)m_height, 0, GL_RGBA, GL_UNSIGNED_BYTE, (const void*)data.data()));
if (use_mipmaps)
{
// we manually generate mipmaps because glGenerateMipmap() function is not reliable on all graphics cards
- unsigned int levels_count = generate_mipmaps(image);
+ unsigned int levels_count = generate_mipmaps(image, compress);
glsafe(::glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAX_LEVEL, levels_count));
glsafe(::glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR));
}
@@ -357,8 +465,10 @@ bool GLTexture::load_from_png(const std::string& filename, bool use_mipmaps)
return true;
}
-bool GLTexture::load_from_svg(const std::string& filename, bool use_mipmaps, unsigned int max_size_px)
+bool GLTexture::load_from_svg(const std::string& filename, bool use_mipmaps, bool compress, bool apply_anisotropy, unsigned int max_size_px)
{
+ bool compression_enabled = compress && GLEW_EXT_texture_compression_s3tc;
+
NSVGimage* image = nsvgParseFromFile(filename.c_str(), "px", 96.0f);
if (image == nullptr)
{
@@ -371,6 +481,20 @@ bool GLTexture::load_from_svg(const std::string& filename, bool use_mipmaps, uns
m_width = (int)(scale * image->width);
m_height = (int)(scale * image->height);
+
+ if (compression_enabled)
+ {
+ // the stb_dxt compression library seems to like only texture sizes which are a multiple of 4
+ int width_rem = m_width % 4;
+ int height_rem = m_height % 4;
+
+ if (width_rem != 0)
+ m_width += (4 - width_rem);
+
+ if (height_rem != 0)
+ m_height += (4 - height_rem);
+ }
+
int n_pixels = m_width * m_height;
if (n_pixels <= 0)
@@ -397,14 +521,32 @@ bool GLTexture::load_from_svg(const std::string& filename, bool use_mipmaps, uns
glsafe(::glPixelStorei(GL_UNPACK_ALIGNMENT, 1));
glsafe(::glGenTextures(1, &m_id));
glsafe(::glBindTexture(GL_TEXTURE_2D, m_id));
- glsafe(::glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, (GLsizei)m_width, (GLsizei)m_height, 0, GL_RGBA, GL_UNSIGNED_BYTE, (const void*)data.data()));
+
+ if (apply_anisotropy)
+ {
+ GLfloat max_anisotropy = GLCanvas3DManager::get_gl_info().get_max_anisotropy();
+ if (max_anisotropy > 1.0f)
+ glsafe(::glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAX_ANISOTROPY_EXT, max_anisotropy));
+ }
+
+ if (compression_enabled)
+ {
+ // initializes the texture on GPU
+ glsafe(::glTexImage2D(GL_TEXTURE_2D, 0, GL_COMPRESSED_RGBA_S3TC_DXT5_EXT, (GLsizei)m_width, (GLsizei)m_height, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0));
+ // and send the uncompressed data to the compressor
+ m_compressor.add_level((unsigned int)m_width, (unsigned int)m_height, data);
+ }
+ else
+ glsafe(::glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, (GLsizei)m_width, (GLsizei)m_height, 0, GL_RGBA, GL_UNSIGNED_BYTE, (const void*)data.data()));
+
if (use_mipmaps)
{
// we manually generate mipmaps because glGenerateMipmap() function is not reliable on all graphics cards
int lod_w = m_width;
int lod_h = m_height;
GLint level = 0;
- while ((lod_w > 1) || (lod_h > 1))
+ // we do not need to generate all levels down to 1x1
+ while ((lod_w > 16) || (lod_h > 16))
{
++level;
@@ -412,12 +554,25 @@ bool GLTexture::load_from_svg(const std::string& filename, bool use_mipmaps, uns
lod_h = std::max(lod_h / 2, 1);
scale /= 2.0f;
+ data.resize(lod_w * lod_h * 4);
+
nsvgRasterize(rast, image, 0, 0, scale, data.data(), lod_w, lod_h, lod_w * 4);
- glsafe(::glTexImage2D(GL_TEXTURE_2D, level, GL_RGBA, (GLsizei)lod_w, (GLsizei)lod_h, 0, GL_RGBA, GL_UNSIGNED_BYTE, (const void*)data.data()));
+ if (compression_enabled)
+ {
+ // initializes the texture on GPU
+ glsafe(::glTexImage2D(GL_TEXTURE_2D, level, GL_COMPRESSED_RGBA_S3TC_DXT5_EXT, (GLsizei)lod_w, (GLsizei)lod_h, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0));
+ // and send the uncompressed data to the compressor
+ m_compressor.add_level((unsigned int)lod_w, (unsigned int)lod_h, data);
+ }
+ else
+ glsafe(::glTexImage2D(GL_TEXTURE_2D, level, GL_RGBA, (GLsizei)lod_w, (GLsizei)lod_h, 0, GL_RGBA, GL_UNSIGNED_BYTE, (const void*)data.data()));
}
- glsafe(::glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAX_LEVEL, level));
- glsafe(::glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR));
+ if (!compression_enabled)
+ {
+ glsafe(::glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAX_LEVEL, level));
+ glsafe(::glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR));
+ }
}
else
{
@@ -430,6 +585,10 @@ bool GLTexture::load_from_svg(const std::string& filename, bool use_mipmaps, uns
m_source = filename;
+ if (compression_enabled)
+ // start asynchronous compression
+ m_compressor.start_compressing();
+
nsvgDeleteRasterizer(rast);
nsvgDelete(image);
diff --git a/src/slic3r/GUI/GLTexture.hpp b/src/slic3r/GUI/GLTexture.hpp
index e00b3a3be..f4dc05a16 100644
--- a/src/slic3r/GUI/GLTexture.hpp
+++ b/src/slic3r/GUI/GLTexture.hpp
@@ -11,6 +11,42 @@ namespace GUI {
class GLTexture
{
+ class Compressor
+ {
+ struct Level
+ {
+ unsigned int w;
+ unsigned int h;
+ std::vector<unsigned char> src_data;
+ std::vector<unsigned char> compressed_data;
+ bool compressed;
+ bool sent_to_gpu;
+
+ Level(unsigned int w, unsigned int h, const std::vector<unsigned char>& data) : w(w), h(h), src_data(data), compressed(false), sent_to_gpu(false) {}
+ };
+
+ GLTexture& m_texture;
+ std::vector<Level> m_levels;
+ bool m_is_compressing;
+ bool m_abort_compressing;
+
+ public:
+ explicit Compressor(GLTexture& texture) : m_texture(texture), m_is_compressing(false), m_abort_compressing(false) {}
+
+ void reset();
+
+ void add_level(unsigned int w, unsigned int h, const std::vector<unsigned char>& data);
+
+ void start_compressing();
+
+ bool unsent_compressed_data_available() const;
+ void send_compressed_data_to_gpu();
+ bool all_compressed_data_sent_to_gpu() const;
+
+ private:
+ void compress();
+ };
+
public:
struct UV
{
@@ -33,13 +69,14 @@ namespace GUI {
int m_width;
int m_height;
std::string m_source;
+ Compressor m_compressor;
public:
GLTexture();
virtual ~GLTexture();
- bool load_from_file(const std::string& filename, bool use_mipmaps);
- bool load_from_svg_file(const std::string& filename, bool use_mipmaps, unsigned int max_size_px);
+ bool load_from_file(const std::string& filename, bool use_mipmaps, bool compress);
+ bool load_from_svg_file(const std::string& filename, bool use_mipmaps, bool compress, bool apply_anisotropy, unsigned int max_size_px);
// meanings of states: (std::pair<int, bool>)
// first field (int):
// 0 -> no changes
@@ -48,7 +85,7 @@ namespace GUI {
// second field (bool):
// false -> no changes
// true -> add background color
- bool load_from_svg_files_as_sprites_array(const std::vector<std::string>& filenames, const std::vector<std::pair<int, bool>>& states, unsigned int sprite_size_px);
+ bool load_from_svg_files_as_sprites_array(const std::vector<std::string>& filenames, const std::vector<std::pair<int, bool>>& states, unsigned int sprite_size_px, bool compress);
void reset();
unsigned int get_id() const { return m_id; }
@@ -57,14 +94,21 @@ namespace GUI {
const std::string& get_source() const { return m_source; }
+ bool unsent_compressed_data_available() const { return m_compressor.unsent_compressed_data_available(); }
+ void send_compressed_data_to_gpu() { m_compressor.send_compressed_data_to_gpu(); }
+ bool all_compressed_data_sent_to_gpu() const { return m_compressor.all_compressed_data_sent_to_gpu(); }
+
static void render_texture(unsigned int tex_id, float left, float right, float bottom, float top);
static void render_sub_texture(unsigned int tex_id, float left, float right, float bottom, float top, const Quad_UVs& uvs);
protected:
- unsigned int generate_mipmaps(wxImage& image);
+ unsigned int generate_mipmaps(wxImage& image, bool compress);
+
private:
- bool load_from_png(const std::string& filename, bool use_mipmaps);
- bool load_from_svg(const std::string& filename, bool use_mipmaps, unsigned int max_size_px);
+ bool load_from_png(const std::string& filename, bool use_mipmaps, bool compress);
+ bool load_from_svg(const std::string& filename, bool use_mipmaps, bool compress, bool apply_anisotropy, unsigned int max_size_px);
+
+ friend class Compressor;
};
} // namespace GUI
diff --git a/src/slic3r/GUI/GLToolbar.cpp b/src/slic3r/GUI/GLToolbar.cpp
index 00cbdfec7..f8082ad7e 100644
--- a/src/slic3r/GUI/GLToolbar.cpp
+++ b/src/slic3r/GUI/GLToolbar.cpp
@@ -194,7 +194,7 @@ bool GLToolbar::init(const ItemsIconsTexture::Metadata& icons_texture, const Bac
#endif // ENABLE_SVG_ICONS
if (!background_texture.filename.empty())
- res = m_background_texture.texture.load_from_file(path + background_texture.filename, false);
+ res = m_background_texture.texture.load_from_file(path + background_texture.filename, false, true);
if (res)
m_background_texture.metadata = background_texture;
@@ -390,19 +390,12 @@ void GLToolbar::render(const GLCanvas3D& parent) const
generate_icons_texture();
#endif // ENABLE_SVG_ICONS
- glsafe(::glDisable(GL_DEPTH_TEST));
-
- glsafe(::glPushMatrix());
- glsafe(::glLoadIdentity());
-
switch (m_layout.type)
{
default:
case Layout::Horizontal: { render_horizontal(parent); break; }
case Layout::Vertical: { render_vertical(parent); break; }
}
-
- glsafe(::glPopMatrix());
}
bool GLToolbar::on_mouse(wxMouseEvent& evt, GLCanvas3D& parent)
@@ -614,7 +607,7 @@ std::string GLToolbar::update_hover_state_horizontal(const Vec2d& mouse_pos, GLC
{
// NB: mouse_pos is already scaled appropriately
- float zoom = parent.get_camera().zoom;
+ float zoom = (float)parent.get_camera().get_zoom();
float inv_zoom = (zoom != 0.0f) ? 1.0f / zoom : 0.0f;
#if ENABLE_SVG_ICONS
float factor = m_layout.scale * inv_zoom;
@@ -719,7 +712,7 @@ std::string GLToolbar::update_hover_state_vertical(const Vec2d& mouse_pos, GLCan
{
// NB: mouse_pos is already scaled appropriately
- float zoom = parent.get_camera().zoom;
+ float zoom = (float)parent.get_camera().get_zoom();
float inv_zoom = (zoom != 0.0f) ? 1.0f / zoom : 0.0f;
#if ENABLE_SVG_ICONS
float factor = m_layout.scale * inv_zoom;
@@ -836,7 +829,7 @@ int GLToolbar::contains_mouse_horizontal(const Vec2d& mouse_pos, const GLCanvas3
{
// NB: mouse_pos is already scaled appropriately
- float zoom = parent.get_camera().zoom;
+ float zoom = (float)parent.get_camera().get_zoom();
float inv_zoom = (zoom != 0.0f) ? 1.0f / zoom : 0.0f;
#if ENABLE_SVG_ICONS
float factor = m_layout.scale * inv_zoom;
@@ -919,7 +912,7 @@ int GLToolbar::contains_mouse_vertical(const Vec2d& mouse_pos, const GLCanvas3D&
{
// NB: mouse_pos is already scaled appropriately
- float zoom = parent.get_camera().zoom;
+ float zoom = (float)parent.get_camera().get_zoom();
float inv_zoom = (zoom != 0.0f) ? 1.0f / zoom : 0.0f;
#if ENABLE_SVG_ICONS
float factor = m_layout.scale * inv_zoom;
@@ -1015,7 +1008,7 @@ void GLToolbar::render_horizontal(const GLCanvas3D& parent) const
return;
#endif // !ENABLE_SVG_ICONS
- float zoom = parent.get_camera().zoom;
+ float zoom = (float)parent.get_camera().get_zoom();
float inv_zoom = (zoom != 0.0f) ? 1.0f / zoom : 0.0f;
#if ENABLE_SVG_ICONS
float factor = inv_zoom * m_layout.scale;
@@ -1170,7 +1163,7 @@ void GLToolbar::render_vertical(const GLCanvas3D& parent) const
return;
#endif // !ENABLE_SVG_ICONS
- float zoom = parent.get_camera().zoom;
+ float zoom = (float)parent.get_camera().get_zoom();
float inv_zoom = (zoom != 0.0f) ? 1.0f / zoom : 0.0f;
#if ENABLE_SVG_ICONS
float factor = inv_zoom * m_layout.scale;
@@ -1338,7 +1331,7 @@ bool GLToolbar::generate_icons_texture() const
states.push_back(std::make_pair(1, true));
}
- bool res = m_icons_texture.load_from_svg_files_as_sprites_array(filenames, states, (unsigned int)(m_layout.icons_size * m_layout.scale));
+ bool res = m_icons_texture.load_from_svg_files_as_sprites_array(filenames, states, (unsigned int)(m_layout.icons_size * m_layout.scale), true);
if (res)
m_icons_texture_dirty = false;
diff --git a/src/slic3r/GUI/GUI_App.cpp b/src/slic3r/GUI/GUI_App.cpp
index 3aada45f3..4f1c3adc8 100644
--- a/src/slic3r/GUI/GUI_App.cpp
+++ b/src/slic3r/GUI/GUI_App.cpp
@@ -265,10 +265,8 @@ bool GUI_App::on_init_inner()
}
CallAfter([this] {
- if (!config_wizard_startup(app_conf_exists)) {
- // Only notify if there was no wizard so as not to bother too much ...
- preset_updater->slic3r_update_notify();
- }
+ config_wizard_startup(app_conf_exists);
+ preset_updater->slic3r_update_notify();
preset_updater->sync(preset_bundle);
});
}
diff --git a/src/slic3r/GUI/GUI_ObjectList.cpp b/src/slic3r/GUI/GUI_ObjectList.cpp
index a95b71bcb..d7d1a1af7 100644
--- a/src/slic3r/GUI/GUI_ObjectList.cpp
+++ b/src/slic3r/GUI/GUI_ObjectList.cpp
@@ -1485,66 +1485,6 @@ void ObjectList::load_part( ModelObject* model_object,
}
-// Find volume transformation, so that the chained (instance_trafo * volume_trafo) will be as close to identity
-// as possible in least squares norm in regard to the 8 corners of bbox.
-// Bounding box is expected to be centered around zero in all axes.
-Geometry::Transformation volume_to_bed_transformation(const Geometry::Transformation &instance_transformation, const BoundingBoxf3 &bbox)
-{
- Geometry::Transformation out;
-
- if (instance_transformation.is_scaling_uniform()) {
- // No need to run the non-linear least squares fitting for uniform scaling.
- // Just set the inverse.
- out.set_from_transform(instance_transformation.get_matrix(true).inverse());
- }
- else if (Geometry::is_rotation_ninety_degrees(instance_transformation.get_rotation()))
- {
- // Anisotropic scaling, rotation by multiples of ninety degrees.
- Eigen::Matrix3d instance_rotation_trafo =
- (Eigen::AngleAxisd(instance_transformation.get_rotation().z(), Vec3d::UnitZ()) *
- Eigen::AngleAxisd(instance_transformation.get_rotation().y(), Vec3d::UnitY()) *
- Eigen::AngleAxisd(instance_transformation.get_rotation().x(), Vec3d::UnitX())).toRotationMatrix();
- Eigen::Matrix3d volume_rotation_trafo =
- (Eigen::AngleAxisd(-instance_transformation.get_rotation().x(), Vec3d::UnitX()) *
- Eigen::AngleAxisd(-instance_transformation.get_rotation().y(), Vec3d::UnitY()) *
- Eigen::AngleAxisd(-instance_transformation.get_rotation().z(), Vec3d::UnitZ())).toRotationMatrix();
-
- // 8 corners of the bounding box.
- auto pts = Eigen::MatrixXd(8, 3);
- pts(0, 0) = bbox.min.x(); pts(0, 1) = bbox.min.y(); pts(0, 2) = bbox.min.z();
- pts(1, 0) = bbox.min.x(); pts(1, 1) = bbox.min.y(); pts(1, 2) = bbox.max.z();
- pts(2, 0) = bbox.min.x(); pts(2, 1) = bbox.max.y(); pts(2, 2) = bbox.min.z();
- pts(3, 0) = bbox.min.x(); pts(3, 1) = bbox.max.y(); pts(3, 2) = bbox.max.z();
- pts(4, 0) = bbox.max.x(); pts(4, 1) = bbox.min.y(); pts(4, 2) = bbox.min.z();
- pts(5, 0) = bbox.max.x(); pts(5, 1) = bbox.min.y(); pts(5, 2) = bbox.max.z();
- pts(6, 0) = bbox.max.x(); pts(6, 1) = bbox.max.y(); pts(6, 2) = bbox.min.z();
- pts(7, 0) = bbox.max.x(); pts(7, 1) = bbox.max.y(); pts(7, 2) = bbox.max.z();
-
- // Corners of the bounding box transformed into the modifier mesh coordinate space, with inverse rotation applied to the modifier.
- auto qs = pts *
- (instance_rotation_trafo *
- Eigen::Scaling(instance_transformation.get_scaling_factor().cwiseProduct(instance_transformation.get_mirror())) *
- volume_rotation_trafo).inverse().transpose();
- // Fill in scaling based on least squares fitting of the bounding box corners.
- Vec3d scale;
- for (int i = 0; i < 3; ++ i)
- scale(i) = pts.col(i).dot(qs.col(i)) / pts.col(i).dot(pts.col(i));
-
- out.set_rotation(Geometry::extract_euler_angles(volume_rotation_trafo));
- out.set_scaling_factor(Vec3d(std::abs(scale(0)), std::abs(scale(1)), std::abs(scale(2))));
- out.set_mirror(Vec3d(scale(0) > 0 ? 1. : -1, scale(1) > 0 ? 1. : -1, scale(2) > 0 ? 1. : -1));
- }
- else
- {
- // General anisotropic scaling, general rotation.
- // Keep the modifier mesh in the instance coordinate system, so the modifier mesh will not be aligned with the world.
- // Scale it to get the required size.
- out.set_scaling_factor(instance_transformation.get_scaling_factor().cwiseInverse());
- }
-
- return out;
-}
-
void ObjectList::load_generic_subobject(const std::string& type_name, const ModelVolumeType type)
{
const auto obj_idx = get_selected_obj_idx();
@@ -1598,7 +1538,7 @@ void ObjectList::load_generic_subobject(const std::string& type_name, const Mode
const GLVolume* v = selection.get_volume(*selection.get_volume_idxs().begin());
// Transform the new modifier to be aligned with the print bed.
const BoundingBoxf3 mesh_bb = new_volume->mesh().bounding_box();
- new_volume->set_transformation(volume_to_bed_transformation(v->get_instance_transformation(), mesh_bb));
+ new_volume->set_transformation(Geometry::Transformation::volume_to_bed_transformation(v->get_instance_transformation(), mesh_bb));
// Set the modifier position.
auto offset = (type_name == "Slab") ?
// Slab: Lift to print bed
diff --git a/src/slic3r/GUI/GUI_ObjectManipulation.cpp b/src/slic3r/GUI/GUI_ObjectManipulation.cpp
index 310000ecc..372cd79ef 100644
--- a/src/slic3r/GUI/GUI_ObjectManipulation.cpp
+++ b/src/slic3r/GUI/GUI_ObjectManipulation.cpp
@@ -499,11 +499,13 @@ void ObjectManipulation::update_if_dirty()
if (selection.requires_uniform_scale()) {
m_lock_bnt->SetLock(true);
- m_lock_bnt->Disable();
+ m_lock_bnt->SetToolTip(_(L("You cann't use non-uniform scaling mode for multiple objects/parts selection")));
+ m_lock_bnt->disable();
}
else {
m_lock_bnt->SetLock(m_uniform_scale);
- m_lock_bnt->Enable();
+ m_lock_bnt->SetToolTip(wxEmptyString);
+ m_lock_bnt->enable();
}
{
diff --git a/src/slic3r/GUI/GUI_Preview.cpp b/src/slic3r/GUI/GUI_Preview.cpp
index ec7308382..2f5e10962 100644
--- a/src/slic3r/GUI/GUI_Preview.cpp
+++ b/src/slic3r/GUI/GUI_Preview.cpp
@@ -420,6 +420,12 @@ void Preview::move_double_slider(wxKeyEvent& evt)
m_slider->OnKeyDown(evt);
}
+void Preview::edit_double_slider(wxKeyEvent& evt)
+{
+ if (m_slider)
+ m_slider->OnChar(evt);
+}
+
void Preview::bind_event_handlers()
{
this->Bind(wxEVT_SIZE, &Preview::on_size, this);
diff --git a/src/slic3r/GUI/GUI_Preview.hpp b/src/slic3r/GUI/GUI_Preview.hpp
index ed4555f5c..93038b0e5 100644
--- a/src/slic3r/GUI/GUI_Preview.hpp
+++ b/src/slic3r/GUI/GUI_Preview.hpp
@@ -123,6 +123,7 @@ public:
void msw_rescale();
void move_double_slider(wxKeyEvent& evt);
+ void edit_double_slider(wxKeyEvent& evt);
private:
bool init(wxWindow* parent, Bed3D& bed, Camera& camera, GLToolbar& view_toolbar, Model* model);
diff --git a/src/slic3r/GUI/Gizmos/GLGizmosManager.cpp b/src/slic3r/GUI/Gizmos/GLGizmosManager.cpp
index 1006d2bd1..c7435636d 100644
--- a/src/slic3r/GUI/Gizmos/GLGizmosManager.cpp
+++ b/src/slic3r/GUI/Gizmos/GLGizmosManager.cpp
@@ -65,7 +65,7 @@ bool GLGizmosManager::init(GLCanvas3D& parent)
if (!m_background_texture.metadata.filename.empty())
{
- if (!m_background_texture.texture.load_from_file(resources_dir() + "/icons/" + m_background_texture.metadata.filename, false))
+ if (!m_background_texture.texture.load_from_file(resources_dir() + "/icons/" + m_background_texture.metadata.filename, false, true))
{
reset();
return false;
@@ -531,18 +531,9 @@ void GLGizmosManager::render_overlay(const GLCanvas3D& canvas, const Selection&
generate_icons_texture();
#endif // ENABLE_SVG_ICONS
- glsafe(::glDisable(GL_DEPTH_TEST));
-
- glsafe(::glPushMatrix());
- glsafe(::glLoadIdentity());
-
do_render_overlay(canvas, selection);
-
- glsafe(::glPopMatrix());
}
-
-
bool GLGizmosManager::on_mouse_wheel(wxMouseEvent& evt, GLCanvas3D& canvas)
{
bool processed = false;
@@ -939,7 +930,7 @@ void GLGizmosManager::do_render_overlay(const GLCanvas3D& canvas, const Selectio
float cnv_w = (float)canvas.get_canvas_size().get_width();
float cnv_h = (float)canvas.get_canvas_size().get_height();
- float zoom = canvas.get_camera().zoom;
+ float zoom = (float)canvas.get_camera().get_zoom();
float inv_zoom = (zoom != 0.0f) ? 1.0f / zoom : 0.0f;
float height = get_total_overlay_height();
@@ -1160,7 +1151,7 @@ bool GLGizmosManager::generate_icons_texture() const
states.push_back(std::make_pair(0, false));
states.push_back(std::make_pair(0, true));
- bool res = m_icons_texture.load_from_svg_files_as_sprites_array(filenames, states, (unsigned int)(m_overlay_icons_size * m_overlay_scale));
+ bool res = m_icons_texture.load_from_svg_files_as_sprites_array(filenames, states, (unsigned int)(m_overlay_icons_size * m_overlay_scale), true);
if (res)
m_icons_texture_dirty = false;
diff --git a/src/slic3r/GUI/ImGuiWrapper.cpp b/src/slic3r/GUI/ImGuiWrapper.cpp
index 67016077c..ca1538bf7 100644
--- a/src/slic3r/GUI/ImGuiWrapper.cpp
+++ b/src/slic3r/GUI/ImGuiWrapper.cpp
@@ -206,7 +206,7 @@ void ImGuiWrapper::new_frame()
}
if (m_font_texture == 0) {
- init_font();
+ init_font(true);
}
ImGui::NewFrame();
@@ -383,7 +383,7 @@ bool ImGuiWrapper::want_any_input() const
return io.WantCaptureMouse || io.WantCaptureKeyboard || io.WantTextInput;
}
-void ImGuiWrapper::init_font()
+void ImGuiWrapper::init_font(bool compress)
{
destroy_font();
@@ -412,7 +412,10 @@ void ImGuiWrapper::init_font()
glsafe(::glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR));
glsafe(::glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR));
glsafe(::glPixelStorei(GL_UNPACK_ROW_LENGTH, 0));
- glsafe(::glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, width, height, 0, GL_RGBA, GL_UNSIGNED_BYTE, pixels));
+ if (compress && GLEW_EXT_texture_compression_s3tc)
+ glsafe(::glTexImage2D(GL_TEXTURE_2D, 0, GL_COMPRESSED_RGBA_S3TC_DXT5_EXT, width, height, 0, GL_RGBA, GL_UNSIGNED_BYTE, pixels));
+ else
+ glsafe(::glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, width, height, 0, GL_RGBA, GL_UNSIGNED_BYTE, pixels));
// Store our identifier
io.Fonts->TexID = (ImTextureID)(intptr_t)m_font_texture;
diff --git a/src/slic3r/GUI/ImGuiWrapper.hpp b/src/slic3r/GUI/ImGuiWrapper.hpp
index 37ef90ff3..0479e4743 100644
--- a/src/slic3r/GUI/ImGuiWrapper.hpp
+++ b/src/slic3r/GUI/ImGuiWrapper.hpp
@@ -77,7 +77,7 @@ public:
bool want_any_input() const;
private:
- void init_font();
+ void init_font(bool compress);
void init_input();
void init_style();
void render_draw_data(ImDrawData *draw_data);
diff --git a/src/slic3r/GUI/KBShortcutsDialog.cpp b/src/slic3r/GUI/KBShortcutsDialog.cpp
index 347dac13e..1af658ed3 100644
--- a/src/slic3r/GUI/KBShortcutsDialog.cpp
+++ b/src/slic3r/GUI/KBShortcutsDialog.cpp
@@ -147,6 +147,7 @@ void KBShortcutsDialog::fill_shortcuts()
plater_shortcuts.push_back(Shortcut("F", L("Press to scale selection to fit print volume\nin Gizmo scale")));
plater_shortcuts.push_back(Shortcut(alt, L("Press to activate deselection rectangle\nor to scale or rotate selected objects\naround their own center")));
plater_shortcuts.push_back(Shortcut(ctrl, L("Press to activate one direction scaling in Gizmo scale")));
+ plater_shortcuts.push_back(Shortcut("K", L("Change camera type")));
plater_shortcuts.push_back(Shortcut("B", L("Zoom to Bed")));
plater_shortcuts.push_back(Shortcut("Z", L("Zoom to all objects in scene, if none selected")));
plater_shortcuts.push_back(Shortcut("Z", L("Zoom to selected object")));
diff --git a/src/slic3r/GUI/MainFrame.cpp b/src/slic3r/GUI/MainFrame.cpp
index 667dcd899..d800f6f38 100644
--- a/src/slic3r/GUI/MainFrame.cpp
+++ b/src/slic3r/GUI/MainFrame.cpp
@@ -505,10 +505,10 @@ void MainFrame::init_menubar()
editMenu->AppendSeparator();
append_menu_item(editMenu, wxID_ANY, _(L("&Copy")) + sep + GUI::shortkey_ctrl_prefix() + sep_space + "C",
_(L("Copy selection to clipboard")), [this](wxCommandEvent&) { m_plater->copy_selection_to_clipboard(); },
- menu_icon("copy_menu"), nullptr, [this](){return m_plater->can_copy(); }, this);
+ menu_icon("copy_menu"), nullptr, [this](){return m_plater->can_copy_to_clipboard(); }, this);
append_menu_item(editMenu, wxID_ANY, _(L("&Paste")) + sep + GUI::shortkey_ctrl_prefix() + sep_space + "V",
_(L("Paste clipboard")), [this](wxCommandEvent&) { m_plater->paste_from_clipboard(); },
- menu_icon("paste_menu"), nullptr, [this](){return m_plater->can_paste(); }, this);
+ menu_icon("paste_menu"), nullptr, [this](){return m_plater->can_paste_from_clipboard(); }, this);
}
// Window menu
diff --git a/src/slic3r/GUI/Plater.cpp b/src/slic3r/GUI/Plater.cpp
index 7f95513ad..f68267cef 100644
--- a/src/slic3r/GUI/Plater.cpp
+++ b/src/slic3r/GUI/Plater.cpp
@@ -1758,6 +1758,7 @@ Plater::priv::priv(Plater *q, MainFrame *main_frame)
preview->get_wxglcanvas()->Bind(EVT_GLCANVAS_UPDATE_BED_SHAPE, [this](SimpleEvent&) { set_bed_shape(config->option<ConfigOptionPoints>("bed_shape")->values); });
preview->get_wxglcanvas()->Bind(EVT_GLCANVAS_TAB, [this](SimpleEvent&) { select_next_view_3D(); });
preview->get_wxglcanvas()->Bind(EVT_GLCANVAS_MOVE_DOUBLE_SLIDER, [this](wxKeyEvent& evt) { preview->move_double_slider(evt); });
+ preview->get_wxglcanvas()->Bind(EVT_GLCANVAS_EDIT_COLOR_CHANGE, [this](wxKeyEvent& evt) { preview->edit_double_slider(evt); });
q->Bind(EVT_SLICING_COMPLETED, &priv::on_slicing_completed, this);
q->Bind(EVT_PROCESS_COMPLETED, &priv::on_process_completed, this);
@@ -1771,6 +1772,9 @@ Plater::priv::priv(Plater *q, MainFrame *main_frame)
q->Layout();
set_current_panel(view3D);
+
+ // updates camera type from .ini file
+ camera.set_type(get_config("camera_type"));
}
void Plater::priv::update(bool force_full_scene_refresh)
@@ -4183,30 +4187,14 @@ void Plater::update_object_menu() { p->update_object_menu(); }
void Plater::copy_selection_to_clipboard()
{
- p->view3D->get_canvas3d()->get_selection().copy_to_clipboard();
+ if (can_copy_to_clipboard())
+ p->view3D->get_canvas3d()->get_selection().copy_to_clipboard();
}
void Plater::paste_from_clipboard()
{
- p->view3D->get_canvas3d()->get_selection().paste_from_clipboard();
-}
-
-bool Plater::can_paste_from_clipboard() const
-{
- const Selection& selection = p->view3D->get_canvas3d()->get_selection();
- const Selection::Clipboard& clipboard = selection.get_clipboard();
- Selection::EMode mode = clipboard.get_mode();
-
- if (clipboard.is_empty())
- return false;
-
- if ((mode == Selection::Volume) && !selection.is_from_single_instance())
- return false;
-
- if ((mode == Selection::Instance) && (selection.get_mode() != Selection::Instance))
- return false;
-
- return true;
+ if (can_paste_from_clipboard())
+ p->view3D->get_canvas3d()->get_selection().paste_from_clipboard();
}
void Plater::msw_rescale()
@@ -4233,7 +4221,37 @@ bool Plater::can_split_to_objects() const { return p->can_split_to_objects(); }
bool Plater::can_split_to_volumes() const { return p->can_split_to_volumes(); }
bool Plater::can_arrange() const { return p->can_arrange(); }
bool Plater::can_layers_editing() const { return p->can_layers_editing(); }
-bool Plater::can_copy() const { return !is_selection_empty(); }
-bool Plater::can_paste() const { return can_paste_from_clipboard(); }
+bool Plater::can_paste_from_clipboard() const
+{
+ const Selection& selection = p->view3D->get_canvas3d()->get_selection();
+ const Selection::Clipboard& clipboard = selection.get_clipboard();
+
+ if (clipboard.is_empty())
+ return false;
+
+ if ((wxGetApp().preset_bundle->printers.get_edited_preset().printer_technology() == ptSLA) && !clipboard.is_sla_compliant())
+ return false;
+
+ Selection::EMode mode = clipboard.get_mode();
+ if ((mode == Selection::Volume) && !selection.is_from_single_instance())
+ return false;
+
+ if ((mode == Selection::Instance) && (selection.get_mode() != Selection::Instance))
+ return false;
+
+ return true;
+}
+
+bool Plater::can_copy_to_clipboard() const
+{
+ if (is_selection_empty())
+ return false;
+
+ const Selection& selection = p->view3D->get_canvas3d()->get_selection();
+ if ((wxGetApp().preset_bundle->printers.get_edited_preset().printer_technology() == ptSLA) && !selection.is_sla_compliant())
+ return false;
+
+ return true;
+}
}} // namespace Slic3r::GUI
diff --git a/src/slic3r/GUI/Plater.hpp b/src/slic3r/GUI/Plater.hpp
index 761bf7a05..2851af654 100644
--- a/src/slic3r/GUI/Plater.hpp
+++ b/src/slic3r/GUI/Plater.hpp
@@ -200,7 +200,6 @@ public:
void copy_selection_to_clipboard();
void paste_from_clipboard();
- bool can_paste_from_clipboard() const;
bool can_delete() const;
bool can_delete_all() const;
@@ -212,8 +211,8 @@ public:
bool can_split_to_volumes() const;
bool can_arrange() const;
bool can_layers_editing() const;
- bool can_copy() const;
- bool can_paste() const;
+ bool can_paste_from_clipboard() const;
+ bool can_copy_to_clipboard() const;
void msw_rescale();
diff --git a/src/slic3r/GUI/ProgressStatusBar.hpp b/src/slic3r/GUI/ProgressStatusBar.hpp
index 7d624af90..413c6ffee 100644
--- a/src/slic3r/GUI/ProgressStatusBar.hpp
+++ b/src/slic3r/GUI/ProgressStatusBar.hpp
@@ -2,6 +2,7 @@
#define PROGRESSSTATUSBAR_HPP
#include <memory>
+#include <string>
#include <functional>
#include <string>
diff --git a/src/slic3r/GUI/Selection.cpp b/src/slic3r/GUI/Selection.cpp
index 480b59ba0..97168ee04 100644
--- a/src/slic3r/GUI/Selection.cpp
+++ b/src/slic3r/GUI/Selection.cpp
@@ -47,6 +47,26 @@ Selection::VolumeCache::VolumeCache(const Geometry::Transformation& volume_trans
{
}
+bool Selection::Clipboard::is_sla_compliant() const
+{
+ if (m_mode == Selection::Volume)
+ return false;
+
+ for (const ModelObject* o : m_model.objects)
+ {
+ if (o->is_multiparts())
+ return false;
+
+ for (const ModelVolume* v : o->volumes)
+ {
+ if (v->is_modifier())
+ return false;
+ }
+ }
+
+ return true;
+}
+
Selection::Selection()
: m_volumes(nullptr)
, m_model(nullptr)
@@ -385,6 +405,20 @@ bool Selection::is_from_single_object() const
return (0 <= idx) && (idx < 1000);
}
+bool Selection::is_sla_compliant() const
+{
+ if (m_mode == Volume)
+ return false;
+
+ for (unsigned int i : m_list)
+ {
+ if ((*m_volumes)[i]->is_modifier)
+ return false;
+ }
+
+ return true;
+}
+
bool Selection::requires_uniform_scale() const
{
if (is_single_full_instance() || is_single_modifier() || is_single_volume())
@@ -1893,25 +1927,59 @@ bool Selection::is_from_fully_selected_instance(unsigned int volume_idx) const
void Selection::paste_volumes_from_clipboard()
{
- int obj_idx = get_object_idx();
- if ((obj_idx < 0) || ((int)m_model->objects.size() <= obj_idx))
+ int dst_obj_idx = get_object_idx();
+ if ((dst_obj_idx < 0) || ((int)m_model->objects.size() <= dst_obj_idx))
+ return;
+
+ ModelObject* dst_object = m_model->objects[dst_obj_idx];
+
+ int dst_inst_idx = get_instance_idx();
+ if ((dst_inst_idx < 0) || ((int)dst_object->instances.size() <= dst_inst_idx))
return;
ModelObject* src_object = m_clipboard.get_object(0);
if (src_object != nullptr)
{
- ModelObject* dst_object = m_model->objects[obj_idx];
+ ModelInstance* dst_instance = dst_object->instances[dst_inst_idx];
+ BoundingBoxf3 dst_instance_bb = dst_object->instance_bounding_box(dst_inst_idx);
+ Transform3d src_matrix = src_object->instances[0]->get_transformation().get_matrix(true);
+ Transform3d dst_matrix = dst_instance->get_transformation().get_matrix(true);
+ bool from_same_object = (src_object->input_file == dst_object->input_file) && src_matrix.isApprox(dst_matrix);
+
+ // used to keep relative position of multivolume selections when pasting from another object
+ BoundingBoxf3 total_bb;
ModelVolumePtrs volumes;
for (ModelVolume* src_volume : src_object->volumes)
{
ModelVolume* dst_volume = dst_object->add_volume(*src_volume);
dst_volume->set_new_unique_id();
- double offset = wxGetApp().plater()->canvas3D()->get_size_proportional_to_max_bed_size(0.05);
- dst_volume->translate(offset, offset, 0.0);
+ if (from_same_object)
+ {
+// // if the volume comes from the same object, apply the offset in world system
+// double offset = wxGetApp().plater()->canvas3D()->get_size_proportional_to_max_bed_size(0.05);
+// dst_volume->translate(dst_matrix.inverse() * Vec3d(offset, offset, 0.0));
+ }
+ else
+ {
+ // if the volume comes from another object, apply the offset as done when adding modifiers
+ // see ObjectList::load_generic_subobject()
+ total_bb.merge(dst_volume->mesh().bounding_box().transformed(src_volume->get_matrix()));
+ }
+
volumes.push_back(dst_volume);
}
- wxGetApp().obj_list()->paste_volumes_into_list(obj_idx, volumes);
+
+ // keeps relative position of multivolume selections
+ if (!from_same_object)
+ {
+ for (ModelVolume* v : volumes)
+ {
+ v->set_offset((v->get_offset() - total_bb.center()) + dst_matrix.inverse() * (Vec3d(dst_instance_bb.max(0), dst_instance_bb.min(1), dst_instance_bb.min(2)) + 0.5 * total_bb.size() - dst_instance->get_transformation().get_offset()));
+ }
+ }
+
+ wxGetApp().obj_list()->paste_volumes_into_list(dst_obj_idx, volumes);
}
}
diff --git a/src/slic3r/GUI/Selection.hpp b/src/slic3r/GUI/Selection.hpp
index 5da1e477b..802f8d284 100644
--- a/src/slic3r/GUI/Selection.hpp
+++ b/src/slic3r/GUI/Selection.hpp
@@ -152,6 +152,8 @@ public:
void reset() { m_model.clear_objects(); }
bool is_empty() const { return m_model.objects.empty(); }
+ bool is_sla_compliant() const;
+
ModelObject* add_object() { return m_model.add_object(); }
ModelObject* get_object(unsigned int id) { return (id < (unsigned int)m_model.objects.size()) ? m_model.objects[id] : nullptr; }
const ModelObjectPtrs& get_objects() const { return m_model.objects; }
@@ -257,6 +259,7 @@ public:
bool is_mixed() const { return m_type == Mixed; }
bool is_from_single_instance() const { return get_instance_idx() != -1; }
bool is_from_single_object() const;
+ bool is_sla_compliant() const;
bool contains_volume(unsigned int volume_idx) const { return m_list.find(volume_idx) != m_list.end(); }
bool requires_uniform_scale() const;
diff --git a/src/slic3r/GUI/wxExtensions.cpp b/src/slic3r/GUI/wxExtensions.cpp
index 06cf9b7d5..aed423674 100644
--- a/src/slic3r/GUI/wxExtensions.cpp
+++ b/src/slic3r/GUI/wxExtensions.cpp
@@ -1583,10 +1583,14 @@ DoubleSlider::DoubleSlider( wxWindow *parent,
m_bmp_one_layer_unlock_off = ScalableBitmap(this, "one_layer_unlock_off.png");
m_lock_icon_dim = m_bmp_one_layer_lock_on.bmp().GetSize().x;
+ m_bmp_revert = ScalableBitmap(this, "undo");
+ m_revert_icon_dim = m_bmp_revert.bmp().GetSize().x;
+
m_selection = ssUndef;
// slider events
Bind(wxEVT_PAINT, &DoubleSlider::OnPaint, this);
+ Bind(wxEVT_CHAR, &DoubleSlider::OnChar, this);
Bind(wxEVT_LEFT_DOWN, &DoubleSlider::OnLeftDown, this);
Bind(wxEVT_MOTION, &DoubleSlider::OnMotion, this);
Bind(wxEVT_LEFT_UP, &DoubleSlider::OnLeftUp, this);
@@ -1637,6 +1641,9 @@ void DoubleSlider::msw_rescale()
m_bmp_one_layer_unlock_off.msw_rescale();
m_lock_icon_dim = m_bmp_one_layer_lock_on.bmp().GetSize().x;
+ m_bmp_revert.msw_rescale();
+ m_revert_icon_dim = m_bmp_revert.bmp().GetSize().x;
+
SLIDER_MARGIN = 4 + Slic3r::GUI::wxGetApp().em_unit();
SetMinSize(get_min_size());
@@ -1873,8 +1880,11 @@ void DoubleSlider::render()
//draw color print ticks
draw_ticks(dc);
- //draw color print ticks
+ //draw lock/unlock
draw_one_layer_icon(dc);
+
+ //draw revert bitmap (if it's shown)
+ draw_revert_icon(dc);
}
void DoubleSlider::draw_action_icon(wxDC& dc, const wxPoint pt_beg, const wxPoint pt_end)
@@ -2101,6 +2111,24 @@ void DoubleSlider::draw_one_layer_icon(wxDC& dc)
m_rect_one_layer_icon = wxRect(x_draw, y_draw, m_lock_icon_dim, m_lock_icon_dim);
}
+void DoubleSlider::draw_revert_icon(wxDC& dc)
+{
+ if (m_ticks.empty())
+ return;
+
+ int width, height;
+ get_size(&width, &height);
+
+ wxCoord x_draw, y_draw;
+ is_horizontal() ? x_draw = width-2 : x_draw = 0.25*SLIDER_MARGIN;
+ is_horizontal() ? y_draw = 0.25*SLIDER_MARGIN: y_draw = height-2;
+
+ dc.DrawBitmap(m_bmp_revert.bmp(), x_draw, y_draw);
+
+ //update rect of the lock/unlock icon
+ m_rect_revert_icon = wxRect(x_draw, y_draw, m_revert_icon_dim, m_revert_icon_dim);
+}
+
void DoubleSlider::update_thumb_rect(const wxCoord& begin_x, const wxCoord& begin_y, const SelectedSlider& selection)
{
const wxRect& rect = wxRect(begin_x, begin_y, m_thumb_size.x, m_thumb_size.y);
@@ -2117,8 +2145,8 @@ int DoubleSlider::get_value_from_position(const wxCoord x, const wxCoord y)
if (is_horizontal())
return int(double(x - SLIDER_MARGIN) / step + 0.5);
- else
- return int(m_min_value + double(height - SLIDER_MARGIN - y) / step + 0.5);
+
+ return int(m_min_value + double(height - SLIDER_MARGIN - y) / step + 0.5);
}
void DoubleSlider::detect_selected_slider(const wxPoint& pt)
@@ -2168,7 +2196,10 @@ void DoubleSlider::ChangeOneLayerLock()
void DoubleSlider::OnLeftDown(wxMouseEvent& event)
{
+ if (HasCapture())
+ return;
this->CaptureMouse();
+
wxClientDC dc(this);
wxPoint pos = event.GetLogicalPosition(dc);
if (is_point_in_rect(pos, m_rect_tick_action) && m_is_enabled_tick_manipulation) {
@@ -2178,6 +2209,7 @@ void DoubleSlider::OnLeftDown(wxMouseEvent& event)
m_is_left_down = true;
if (is_point_in_rect(pos, m_rect_one_layer_icon)) {
+ // switch on/off one layer mode
m_is_one_layer = !m_is_one_layer;
if (!m_is_one_layer) {
SetLowerValue(m_min_value);
@@ -2186,20 +2218,36 @@ void DoubleSlider::OnLeftDown(wxMouseEvent& event)
m_selection == ssLower ? correct_lower_value() : correct_higher_value();
if (!m_selection) m_selection = ssHigher;
}
+ else if (is_point_in_rect(pos, m_rect_revert_icon)) {
+ // discard all color changes
+ SetLowerValue(m_min_value);
+ SetHigherValue(m_max_value);
+
+ m_selection == ssLower ? correct_lower_value() : correct_higher_value();
+ if (!m_selection) m_selection = ssHigher;
+
+ m_ticks.clear();
+ wxPostEvent(this->GetParent(), wxCommandEvent(wxCUSTOMEVT_TICKSCHANGED));
+ }
else
detect_selected_slider(pos);
- if (!m_selection && m_is_enabled_tick_manipulation) {
- const auto tick = is_point_near_tick(pos);
- if (tick >= 0)
+ if (!m_selection) {
+ const int tick_val = is_point_near_tick(pos);
+ /* Set current thumb position to the nearest tick (if it is)
+ * OR to a value corresponding to the mouse click
+ * */
+ const int mouse_val = tick_val >= 0 && m_is_enabled_tick_manipulation ? tick_val :
+ get_value_from_position(pos.x, pos.y);
+ if (mouse_val >= 0)
{
- if (abs(tick - m_lower_value) < abs(tick - m_higher_value)) {
- SetLowerValue(tick);
+ if (abs(mouse_val - m_lower_value) < abs(mouse_val - m_higher_value)) {
+ SetLowerValue(mouse_val);
correct_lower_value();
m_selection = ssLower;
}
else {
- SetHigherValue(tick);
+ SetHigherValue(mouse_val);
correct_higher_value();
m_selection = ssHigher;
}
@@ -2239,9 +2287,13 @@ void DoubleSlider::OnMotion(wxMouseEvent& event)
const wxClientDC dc(this);
const wxPoint pos = event.GetLogicalPosition(dc);
+
m_is_one_layer_icon_focesed = is_point_in_rect(pos, m_rect_one_layer_icon);
+ bool is_revert_icon_focused = false;
+
if (!m_is_left_down && !m_is_one_layer) {
m_is_action_icon_focesed = is_point_in_rect(pos, m_rect_tick_action);
+ is_revert_icon_focused = !m_ticks.empty() && is_point_in_rect(pos, m_rect_revert_icon);
}
else if (m_is_left_down || m_is_right_down) {
if (m_selection == ssLower) {
@@ -2261,6 +2313,12 @@ void DoubleSlider::OnMotion(wxMouseEvent& event)
Update();
event.Skip();
+ // Set tooltips with information for each icon
+ const wxString tooltip = m_is_one_layer_icon_focesed ? _(L("One layer mode")) :
+ m_is_action_icon_focesed ? _(L("Add/Del color change")) :
+ is_revert_icon_focused ? _(L("Discard all color changes")) : "";
+ this->SetToolTip(tooltip);
+
if (action)
{
wxCommandEvent e(wxEVT_SCROLL_CHANGED);
@@ -2366,9 +2424,9 @@ void DoubleSlider::OnWheel(wxMouseEvent& event)
void DoubleSlider::OnKeyDown(wxKeyEvent &event)
{
const int key = event.GetKeyCode();
- if (key == '+' || key == WXK_NUMPAD_ADD)
+ if (key == WXK_NUMPAD_ADD)
action_tick(taAdd);
- else if (key == '-' || key == 390 || key == WXK_DELETE || key == WXK_BACK)
+ else if (key == 390 || key == WXK_DELETE || key == WXK_BACK)
action_tick(taDel);
else if (is_horizontal())
{
@@ -2387,6 +2445,8 @@ void DoubleSlider::OnKeyDown(wxKeyEvent &event)
else if (key == WXK_UP || key == WXK_DOWN)
move_current_thumb(key == WXK_UP);
}
+
+ event.Skip(); // !Needed to have EVT_CHAR generated as well
}
void DoubleSlider::OnKeyUp(wxKeyEvent &event)
@@ -2398,9 +2458,20 @@ void DoubleSlider::OnKeyUp(wxKeyEvent &event)
event.Skip();
}
+void DoubleSlider::OnChar(wxKeyEvent& event)
+{
+ const int key = event.GetKeyCode();
+ if (key == '+')
+ action_tick(taAdd);
+ else if (key == '-')
+ action_tick(taDel);
+}
+
void DoubleSlider::OnRightDown(wxMouseEvent& event)
{
+ if (HasCapture()) return;
this->CaptureMouse();
+
const wxClientDC dc(this);
detect_selected_slider(event.GetLogicalPosition(dc));
if (!m_selection)
@@ -2460,6 +2531,9 @@ LockButton::LockButton( wxWindow *parent,
void LockButton::OnButton(wxCommandEvent& event)
{
+ if (m_disabled)
+ return;
+
m_is_pushed = !m_is_pushed;
enter_button(true);
diff --git a/src/slic3r/GUI/wxExtensions.hpp b/src/slic3r/GUI/wxExtensions.hpp
index 78fb7be55..081c0d48f 100644
--- a/src/slic3r/GUI/wxExtensions.hpp
+++ b/src/slic3r/GUI/wxExtensions.hpp
@@ -727,6 +727,7 @@ public:
void OnWheel(wxMouseEvent& event);
void OnKeyDown(wxKeyEvent &event);
void OnKeyUp(wxKeyEvent &event);
+ void OnChar(wxKeyEvent &event);
void OnRightDown(wxMouseEvent& event);
void OnRightUp(wxMouseEvent& event);
@@ -741,6 +742,7 @@ protected:
void draw_ticks(wxDC& dc);
void draw_colored_band(wxDC& dc);
void draw_one_layer_icon(wxDC& dc);
+ void draw_revert_icon(wxDC& dc);
void draw_thumb_item(wxDC& dc, const wxPoint& pos, const SelectedSlider& selection);
void draw_info_line_with_icon(wxDC& dc, const wxPoint& pos, SelectedSlider selection);
void draw_thumb_text(wxDC& dc, const wxPoint& pos, const SelectedSlider& selection) const;
@@ -782,6 +784,7 @@ private:
ScalableBitmap m_bmp_one_layer_lock_off;
ScalableBitmap m_bmp_one_layer_unlock_on;
ScalableBitmap m_bmp_one_layer_unlock_off;
+ ScalableBitmap m_bmp_revert;
SelectedSlider m_selection;
bool m_is_left_down = false;
bool m_is_right_down = false;
@@ -795,9 +798,11 @@ private:
wxRect m_rect_higher_thumb;
wxRect m_rect_tick_action;
wxRect m_rect_one_layer_icon;
+ wxRect m_rect_revert_icon;
wxSize m_thumb_size;
int m_tick_icon_dim;
int m_lock_icon_dim;
+ int m_revert_icon_dim;
long m_style;
float m_label_koef = 1.0;
@@ -837,9 +842,13 @@ public:
void OnEnterBtn(wxMouseEvent& event) { enter_button(true); event.Skip(); }
void OnLeaveBtn(wxMouseEvent& event) { enter_button(false); event.Skip(); }
- bool IsLocked() const { return m_is_pushed; }
+ bool IsLocked() const { return m_is_pushed; }
void SetLock(bool lock);
+ // create its own Enable/Disable functions to not really disabled button because of tooltip enabling
+ void enable() { m_disabled = false; }
+ void disable() { m_disabled = true; }
+
void msw_rescale();
protected:
@@ -847,6 +856,7 @@ protected:
private:
bool m_is_pushed = false;
+ bool m_disabled = false;
ScalableBitmap m_bmp_lock_on;
ScalableBitmap m_bmp_lock_off;
diff --git a/src/slic3r/Utils/PresetUpdater.cpp b/src/slic3r/Utils/PresetUpdater.cpp
index f34cd8db1..8c3ced31a 100644
--- a/src/slic3r/Utils/PresetUpdater.cpp
+++ b/src/slic3r/Utils/PresetUpdater.cpp
@@ -4,6 +4,7 @@
#include <thread>
#include <unordered_map>
#include <ostream>
+#include <utility>
#include <stdexcept>
#include <boost/format.hpp>
#include <boost/algorithm/string.hpp>
@@ -45,10 +46,25 @@ static const char *INDEX_FILENAME = "index.idx";
static const char *TMP_EXTENSION = ".download";
+void copy_file_fix(const fs::path &source, const fs::path &target)
+{
+ static const auto perms = fs::owner_read | fs::owner_write | fs::group_read | fs::others_read; // aka 644
+
+ BOOST_LOG_TRIVIAL(debug) << boost::format("PresetUpdater: Copying %1% -> %2%") % source % target;
+
+ // Make sure the file has correct permission both before and after we copy over it
+ if (fs::exists(target)) {
+ fs::permissions(target, perms);
+ }
+ fs::copy_file(source, target, fs::copy_option::overwrite_if_exists);
+ fs::permissions(target, perms);
+}
+
struct Update
{
fs::path source;
fs::path target;
+
Version version;
std::string vendor;
std::string changelog_url;
@@ -61,7 +77,13 @@ struct Update
, changelog_url(std::move(changelog_url))
{}
- friend std::ostream& operator<<(std::ostream& os , const Update &self) {
+ void install() const
+ {
+ copy_file_fix(source, target);
+ }
+
+ friend std::ostream& operator<<(std::ostream& os, const Update &self)
+ {
os << "Update(" << self.source.string() << " -> " << self.target.string() << ')';
return os;
}
@@ -115,7 +137,6 @@ struct PresetUpdater::priv
bool enabled_version_check;
bool enabled_config_update;
std::string version_check_url;
- bool had_config_update;
fs::path cache_path;
fs::path rsrc_path;
@@ -135,13 +156,10 @@ struct PresetUpdater::priv
void check_install_indices() const;
Updates get_config_updates() const;
void perform_updates(Updates &&updates, bool snapshot = true) const;
-
- static void copy_file(const fs::path &from, const fs::path &to);
};
PresetUpdater::priv::priv()
: ver_slic3r(get_slic3r_version())
- , had_config_update(false)
, cache_path(fs::path(Slic3r::data_dir()) / "cache")
, rsrc_path(fs::path(resources_dir()) / "profiles")
, vendor_path(fs::path(Slic3r::data_dir()) / "vendor")
@@ -273,7 +291,7 @@ void PresetUpdater::priv::sync_config(const std::set<VendorProfile> vendors)
try {
new_index.load(idx_path_temp);
} catch (const std::exception & /* err */) {
- BOOST_LOG_TRIVIAL(error) << boost::format("Failed loading a downloaded index %1% for vendor %2%: invalid index?") % idx_path_temp % vendor.name;
+ BOOST_LOG_TRIVIAL(error) << boost::format("Could not load downloaded index %1% for vendor %2%: invalid index?") % idx_path_temp % vendor.name;
continue;
}
if (new_index.version() < index.version()) {
@@ -323,7 +341,7 @@ void PresetUpdater::priv::check_install_indices() const
if (! fs::exists(path_in_cache)) {
BOOST_LOG_TRIVIAL(info) << "Install index from resources: " << path.filename();
- copy_file(path, path_in_cache);
+ copy_file_fix(path, path_in_cache);
} else {
Index idx_rsrc, idx_cache;
idx_rsrc.load(path);
@@ -331,7 +349,7 @@ void PresetUpdater::priv::check_install_indices() const
if (idx_cache.version() < idx_rsrc.version()) {
BOOST_LOG_TRIVIAL(info) << "Update index from resources: " << path.filename();
- copy_file(path, path_in_cache);
+ copy_file_fix(path, path_in_cache);
}
}
}
@@ -346,6 +364,7 @@ Updates PresetUpdater::priv::get_config_updates() const
for (const auto idx : index_db) {
auto bundle_path = vendor_path / (idx.vendor() + ".ini");
+ auto bundle_path_idx = vendor_path / idx.path().filename();
if (! fs::exists(bundle_path)) {
BOOST_LOG_TRIVIAL(info) << "Bundle not present for index, skipping: " << idx.vendor();
@@ -360,8 +379,31 @@ Updates PresetUpdater::priv::get_config_updates() const
const auto recommended = idx.recommended();
if (recommended == idx.end()) {
BOOST_LOG_TRIVIAL(error) << boost::format("No recommended version for vendor: %1%, invalid index?") % idx.vendor();
+ // XXX: what should be done here?
+ continue;
+ }
+
+ // Load 'installed' idx, if any.
+ // 'Installed' indices are kept alongside the bundle in the `vendor` subdir
+ // for bookkeeping to remember a cancelled update and not offer it again.
+ if (fs::exists(bundle_path_idx)) {
+ Index existing_idx;
+ try {
+ existing_idx.load(bundle_path_idx);
+
+ const auto existing_recommended = existing_idx.recommended();
+ if (existing_recommended != existing_idx.end() && recommended->config_version == existing_recommended->config_version) {
+ // The user has already seen (and presumably rejected) this update
+ BOOST_LOG_TRIVIAL(info) << boost::format("Downloaded index for `%1%` is the same as installed one, not offering an update.") % idx.vendor();
+ continue;
+ }
+ } catch (const std::exception & /* err */) {
+ BOOST_LOG_TRIVIAL(error) << boost::format("Could nto load installed index %1%") % bundle_path_idx;
+ }
}
+ copy_file_fix(idx.path(), bundle_path_idx);
+
const auto ver_current = idx.find(vp.config_version);
const bool ver_current_found = ver_current != idx.end();
if (! ver_current_found) {
@@ -453,10 +495,10 @@ void PresetUpdater::priv::perform_updates(Updates &&updates, bool snapshot) cons
for (const auto &update : updates.updates) {
BOOST_LOG_TRIVIAL(info) << '\t' << update;
- copy_file(update.source, update.target);
+ update.install();
PresetBundle bundle;
- bundle.load_configbundle(update.target.string(), PresetBundle::LOAD_CFGBNDLE_SYSTEM);
+ bundle.load_configbundle(update.source.string(), PresetBundle::LOAD_CFGBNDLE_SYSTEM);
BOOST_LOG_TRIVIAL(info) << boost::format("Deleting %1% conflicting presets")
% (bundle.prints.size() + bundle.filaments.size() + bundle.printers.size());
@@ -491,19 +533,6 @@ void PresetUpdater::priv::perform_updates(Updates &&updates, bool snapshot) cons
}
}
-void PresetUpdater::priv::copy_file(const fs::path &source, const fs::path &target)
-{
- static const auto perms = fs::owner_read | fs::owner_write | fs::group_read | fs::others_read; // aka 644
-
- // Make sure the file has correct permission both before and after we copy over it
- if (fs::exists(target)) {
- fs::permissions(target, perms);
- }
- fs::copy_file(source, target, fs::copy_option::overwrite_if_exists);
- fs::permissions(target, perms);
-}
-
-
PresetUpdater::PresetUpdater() :
p(new priv())
{}
@@ -542,11 +571,6 @@ void PresetUpdater::slic3r_update_notify()
{
if (! p->enabled_version_check) { return; }
- if (p->had_config_update) {
- BOOST_LOG_TRIVIAL(info) << "New Slic3r version available, but there was a configuration update, notification won't be displayed";
- return;
- }
-
auto* app_config = GUI::wxGetApp().app_config;
const auto ver_online_str = app_config->get("version_online");
const auto ver_online = Semver::parse(ver_online_str);
@@ -594,8 +618,6 @@ PresetUpdater::UpdateResult PresetUpdater::config_update() const
incompats_map.emplace(std::make_pair(incompat.vendor, std::move(restrictions)));
}
- p->had_config_update = true; // This needs to be done before a dialog is shown because of OnIdle() + CallAfter() in Perl
-
GUI::MsgDataIncompatible dlg(std::move(incompats_map));
const auto res = dlg.ShowModal();
if (res == wxID_REPLACE) {
@@ -620,8 +642,6 @@ PresetUpdater::UpdateResult PresetUpdater::config_update() const
updates_msg.emplace_back(update.vendor, update.version.config_version, update.version.comment, std::move(changelog_url));
}
- p->had_config_update = true; // Ditto, see above
-
GUI::MsgUpdateConfig dlg(updates_msg);
const auto res = dlg.ShowModal();
@@ -631,7 +651,7 @@ PresetUpdater::UpdateResult PresetUpdater::config_update() const
// Reload global configuration
auto *app_config = GUI::wxGetApp().app_config;
- GUI::wxGetApp().preset_bundle->load_presets(*app_config);
+ GUI::wxGetApp().preset_bundle->load_presets(*app_config);
GUI::wxGetApp().load_current_presets();
return R_UPDATE_INSTALLED;
} else {
diff --git a/src/slic3r/Utils/Semver.hpp b/src/slic3r/Utils/Semver.hpp
index 2fb4e3f4b..a755becaa 100644
--- a/src/slic3r/Utils/Semver.hpp
+++ b/src/slic3r/Utils/Semver.hpp
@@ -137,6 +137,11 @@ public:
Semver operator-(const Minor &b) const { Semver res(*this); return res -= b; }
Semver operator-(const Patch &b) const { Semver res(*this); return res -= b; }
+ // Stream output
+ friend std::ostream& operator<<(std::ostream& os, const Semver &self) {
+ os << self.to_string();
+ return os;
+ }
private:
semver_t ver;
diff --git a/src/slic3r/Utils/Serial.hpp b/src/slic3r/Utils/Serial.hpp
index e4a28de09..67d64b4ec 100644
--- a/src/slic3r/Utils/Serial.hpp
+++ b/src/slic3r/Utils/Serial.hpp
@@ -17,6 +17,9 @@ struct SerialPortInfo {
std::string friendly_name;
bool is_printer = false;
+ SerialPortInfo() {}
+ SerialPortInfo(std::string port) : port(port), friendly_name(std::move(port)) {}
+
bool id_match(unsigned id_vendor, unsigned id_product) const { return id_vendor == this->id_vendor && id_product == this->id_product; }
};
diff --git a/src/stb_dxt/stb_dxt.h b/src/stb_dxt/stb_dxt.h
new file mode 100644
index 000000000..db19110f4
--- /dev/null
+++ b/src/stb_dxt/stb_dxt.h
@@ -0,0 +1,1049 @@
+// stb_dxt.h - Real-Time DXT1/DXT5 compressor
+// Based on original by fabian "ryg" giesen v1.04
+// Custom version, modified by Yann Collet
+//
+/*
+ BSD 2-Clause License (http://www.opensource.org/licenses/bsd-license.php)
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are
+ met:
+
+ * Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above
+ copyright notice, this list of conditions and the following disclaimer
+ in the documentation and/or other materials provided with the
+ distribution.
+
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+ You can contact the author at :
+ - RygsDXTc source repository : http://code.google.com/p/rygsdxtc/
+
+*/
+// use '#define STB_DXT_IMPLEMENTATION' before including to create the implementation
+//
+// USAGE:
+// call stb_compress_dxt_block() for every block (you must pad)
+// source should be a 4x4 block of RGBA data in row-major order;
+// A is ignored if you specify alpha=0; you can turn on dithering
+// and "high quality" using mode.
+//
+// version history:
+// v1.06 - (cyan) implement Fabian Giesen's comments
+// v1.05 - (cyan) speed optimizations
+// v1.04 - (ryg) default to no rounding bias for lerped colors (as per S3TC/DX10 spec);
+// single color match fix (allow for inexact color interpolation);
+// optimal DXT5 index finder; "high quality" mode that runs multiple refinement steps.
+// v1.03 - (stb) endianness support
+// v1.02 - (stb) fix alpha encoding bug
+// v1.01 - (stb) fix bug converting to RGB that messed up quality, thanks ryg & cbloom
+// v1.00 - (stb) first release
+
+#ifndef STB_INCLUDE_STB_DXT_H
+#define STB_INCLUDE_STB_DXT_H
+
+
+//*******************************************************************
+// Enable custom Optimisations
+// Comment this define if you want to revert to ryg's original code
+#define NEW_OPTIMISATIONS
+//*******************************************************************
+
+// compression mode (bitflags)
+#define STB_DXT_NORMAL 0
+#define STB_DXT_DITHER 1 // use dithering. dubious win. never use for normal maps and the like!
+#define STB_DXT_HIGHQUAL 2 // high quality mode, does two refinement steps instead of 1. ~30-40% slower.
+
+// The original signature has been modified by adding the parameter compressed_size which returns
+// the size in bytes of the compressed data contained into dst
+void rygCompress(unsigned char *dst, unsigned char *src, int w, int h, int isDxt5, int& compressed_size);
+
+// TODO remove these, not working properly..
+void rygCompressYCoCg( unsigned char *dst, unsigned char *src, int w, int h );
+void linearize( unsigned char * dst, const unsigned char * src, int n );
+
+void stb_compress_dxt_block(unsigned char *dest, const unsigned char *src, int alpha, int mode);
+#define STB_COMPRESS_DXT_BLOCK
+
+#ifdef STB_DXT_IMPLEMENTATION
+
+// configuration options for DXT encoder. set them in the project/makefile or just define
+// them at the top.
+
+// STB_DXT_USE_ROUNDING_BIAS
+// use a rounding bias during color interpolation. this is closer to what "ideal"
+// interpolation would do but doesn't match the S3TC/DX10 spec. old versions (pre-1.03)
+// implicitly had this turned on.
+//
+// in case you're targeting a specific type of hardware (e.g. console programmers):
+// NVidia and Intel GPUs (as of 2010) as well as DX9 ref use DXT decoders that are closer
+// to STB_DXT_USE_ROUNDING_BIAS. AMD/ATI, S3 and DX10 ref are closer to rounding with no bias.
+// you also see "(a*5 + b*3) / 8" on some old GPU designs.
+// #define STB_DXT_USE_ROUNDING_BIAS
+
+#include <stdlib.h>
+#include <math.h>
+#include <stddef.h>
+#include <string.h> // memset
+#include <assert.h>
+#include <iostream>
+#include <algorithm>
+
+
+static unsigned char stb__Expand5[32];
+static unsigned char stb__Expand6[64];
+static unsigned char stb__OMatch5[256][2];
+static unsigned char stb__OMatch6[256][2];
+static unsigned char stb__QuantRBTab[256+16];
+static unsigned char stb__QuantGTab[256+16];
+
+static int stb__Mul8Bit(int a, int b)
+{
+ int t = a*b + 128;
+ return (t + (t >> 8)) >> 8;
+}
+
+static void stb__From16Bit(unsigned char *out, unsigned short v)
+{
+ int rv = (v & 0xf800) >> 11;
+ int gv = (v & 0x07e0) >> 5;
+ int bv = (v & 0x001f) >> 0;
+
+ out[0] = stb__Expand5[rv];
+ out[1] = stb__Expand6[gv];
+ out[2] = stb__Expand5[bv];
+ out[3] = 0;
+}
+
+static unsigned short stb__As16Bit(int r, int g, int b)
+{
+ return (stb__Mul8Bit(r,31) << 11) + (stb__Mul8Bit(g,63) << 5) + stb__Mul8Bit(b,31);
+}
+
+// linear interpolation at 1/3 point between a and b, using desired rounding type
+static int stb__Lerp13(int a, int b)
+{
+#ifdef STB_DXT_USE_ROUNDING_BIAS
+ // with rounding bias
+ return a + stb__Mul8Bit(b-a, 0x55);
+#else
+ // without rounding bias
+ // replace "/ 3" by "* 0xaaab) >> 17" if your compiler sucks or you really need every ounce of speed.
+ return (2*a + b) / 3;
+#endif
+}
+
+// lerp RGB color
+static void stb__Lerp13RGB(unsigned char *out, unsigned char *p1, unsigned char *p2)
+{
+ out[0] = stb__Lerp13(p1[0], p2[0]);
+ out[1] = stb__Lerp13(p1[1], p2[1]);
+ out[2] = stb__Lerp13(p1[2], p2[2]);
+}
+
+/****************************************************************************/
+
+// compute table to reproduce constant colors as accurately as possible
+static void stb__PrepareOptTable(unsigned char *Table,const unsigned char *expand,int size)
+{
+ int i,mn,mx;
+ for (i=0;i<256;i++) {
+ int bestErr = 256;
+ for (mn=0;mn<size;mn++) {
+ for (mx=0;mx<size;mx++) {
+ int mine = expand[mn];
+ int maxe = expand[mx];
+ int err = abs(stb__Lerp13(maxe, mine) - i);
+
+ // DX10 spec says that interpolation must be within 3% of "correct" result,
+ // add this as error term. (normally we'd expect a random distribution of
+ // +-1.5% error, but nowhere in the spec does it say that the error has to be
+ // unbiased - better safe than sorry).
+ err += abs(maxe - mine) * 3 / 100;
+
+ if(err < bestErr)
+ {
+ Table[i*2+0] = mx;
+ Table[i*2+1] = mn;
+ bestErr = err;
+ }
+ }
+ }
+ }
+}
+
+static void stb__EvalColors(unsigned char *color,unsigned short c0,unsigned short c1)
+{
+ stb__From16Bit(color+ 0, c0);
+ stb__From16Bit(color+ 4, c1);
+ stb__Lerp13RGB(color+ 8, color+0, color+4);
+ stb__Lerp13RGB(color+12, color+4, color+0);
+}
+
+// Block dithering function. Simply dithers a block to 565 RGB.
+// (Floyd-Steinberg)
+static void stb__DitherBlock(unsigned char *dest, unsigned char *block)
+{
+ int err[8],*ep1 = err,*ep2 = err+4, *et;
+ int ch,y;
+
+ // process channels seperately
+ for (ch=0; ch<3; ++ch) {
+ unsigned char *bp = block+ch, *dp = dest+ch;
+ unsigned char *quant = (ch == 1) ? stb__QuantGTab+8 : stb__QuantRBTab+8;
+ memset(err, 0, sizeof(err));
+ for(y=0; y<4; ++y) {
+ dp[ 0] = quant[bp[ 0] + ((3*ep2[1] + 5*ep2[0]) >> 4)];
+ ep1[0] = bp[ 0] - dp[ 0];
+ dp[ 4] = quant[bp[ 4] + ((7*ep1[0] + 3*ep2[2] + 5*ep2[1] + ep2[0]) >> 4)];
+ ep1[1] = bp[ 4] - dp[ 4];
+ dp[ 8] = quant[bp[ 8] + ((7*ep1[1] + 3*ep2[3] + 5*ep2[2] + ep2[1]) >> 4)];
+ ep1[2] = bp[ 8] - dp[ 8];
+ dp[12] = quant[bp[12] + ((7*ep1[2] + 5*ep2[3] + ep2[2]) >> 4)];
+ ep1[3] = bp[12] - dp[12];
+ bp += 16;
+ dp += 16;
+ et = ep1, ep1 = ep2, ep2 = et; // swap
+ }
+ }
+}
+
+// The color matching function
+static unsigned int stb__MatchColorsBlock(unsigned char *block, unsigned char *color,int dither)
+{
+ unsigned int mask = 0;
+ int dirr = color[0*4+0] - color[1*4+0];
+ int dirg = color[0*4+1] - color[1*4+1];
+ int dirb = color[0*4+2] - color[1*4+2];
+ int dots[16];
+ int stops[4];
+ int i;
+ int c0Point, halfPoint, c3Point;
+
+ for(i=0;i<16;i++)
+ dots[i] = block[i*4+0]*dirr + block[i*4+1]*dirg + block[i*4+2]*dirb;
+
+ for(i=0;i<4;i++)
+ stops[i] = color[i*4+0]*dirr + color[i*4+1]*dirg + color[i*4+2]*dirb;
+
+ // think of the colors as arranged on a line; project point onto that line, then choose
+ // next color out of available ones. we compute the crossover points for "best color in top
+ // half"/"best in bottom half" and then the same inside that subinterval.
+ //
+ // relying on this 1d approximation isn't always optimal in terms of euclidean distance,
+ // but it's very close and a lot faster.
+ // http://cbloomrants.blogspot.com/2008/12/12-08-08-dxtc-summary.html
+
+ c0Point = (stops[1] + stops[3]) >> 1;
+ halfPoint = (stops[3] + stops[2]) >> 1;
+ c3Point = (stops[2] + stops[0]) >> 1;
+
+ if(!dither)
+ {
+ // the version without dithering is straightforward
+
+#ifdef NEW_OPTIMISATIONS
+ const int indexMap[8] = { 0 << 30,2 << 30,0 << 30,2 << 30,3 << 30,3 << 30,1 << 30,1 << 30 };
+
+ for(int i=0;i<16;i++)
+ {
+ int dot = dots[i];
+ mask >>= 2;
+
+ int bits =( (dot < halfPoint) ? 4 : 0 )
+ | ( (dot < c0Point) ? 2 : 0 )
+ | ( (dot < c3Point) ? 1 : 0 );
+
+ mask |= indexMap[bits];
+ }
+
+#else
+ for (i=15;i>=0;i--) {
+ int dot = dots[i];
+ mask <<= 2;
+
+ if(dot < halfPoint)
+ mask |= (dot < c0Point) ? 1 : 3;
+ else
+ mask |= (dot < c3Point) ? 2 : 0;
+ }
+#endif
+
+ } else {
+ // with floyd-steinberg dithering
+ int err[8],*ep1 = err,*ep2 = err+4;
+ int *dp = dots, y;
+
+ c0Point <<= 4;
+ halfPoint <<= 4;
+ c3Point <<= 4;
+ for(i=0;i<8;i++)
+ err[i] = 0;
+
+ for(y=0;y<4;y++)
+ {
+ int dot,lmask,step;
+
+ dot = (dp[0] << 4) + (3*ep2[1] + 5*ep2[0]);
+ if(dot < halfPoint)
+ step = (dot < c0Point) ? 1 : 3;
+ else
+ step = (dot < c3Point) ? 2 : 0;
+ ep1[0] = dp[0] - stops[step];
+ lmask = step;
+
+ dot = (dp[1] << 4) + (7*ep1[0] + 3*ep2[2] + 5*ep2[1] + ep2[0]);
+ if(dot < halfPoint)
+ step = (dot < c0Point) ? 1 : 3;
+ else
+ step = (dot < c3Point) ? 2 : 0;
+ ep1[1] = dp[1] - stops[step];
+ lmask |= step<<2;
+
+ dot = (dp[2] << 4) + (7*ep1[1] + 3*ep2[3] + 5*ep2[2] + ep2[1]);
+ if(dot < halfPoint)
+ step = (dot < c0Point) ? 1 : 3;
+ else
+ step = (dot < c3Point) ? 2 : 0;
+ ep1[2] = dp[2] - stops[step];
+ lmask |= step<<4;
+
+ dot = (dp[3] << 4) + (7*ep1[2] + 5*ep2[3] + ep2[2]);
+ if(dot < halfPoint)
+ step = (dot < c0Point) ? 1 : 3;
+ else
+ step = (dot < c3Point) ? 2 : 0;
+ ep1[3] = dp[3] - stops[step];
+ lmask |= step<<6;
+
+ dp += 4;
+ mask |= lmask << (y*8);
+ { int *et = ep1; ep1 = ep2; ep2 = et; } // swap
+ }
+ }
+
+ return mask;
+}
+
+// The color optimization function. (Clever code, part 1)
+static void stb__OptimizeColorsBlock(unsigned char *block, unsigned short *pmax16, unsigned short *pmin16)
+{
+ unsigned char *minp, *maxp;
+ double magn;
+ int v_r,v_g,v_b;
+ static const int nIterPower = 4;
+ float covf[6],vfr,vfg,vfb;
+
+ // determine color distribution
+ int cov[6];
+ int mu[3],min[3],max[3];
+ int ch,i,iter;
+
+ for(ch=0;ch<3;ch++)
+ {
+ const unsigned char *bp = ((const unsigned char *) block) + ch;
+ int muv,minv,maxv;
+
+#ifdef NEW_OPTIMISATIONS
+# define MIN(a,b) (int)a + ( ((int)b-a) & ( ((int)b-a) >> 31 ) )
+# define MAX(a,b) (int)a + ( ((int)b-a) & ( ((int)a-b) >> 31 ) )
+# define RANGE(a,b,n) int min##n = MIN(a,b); int max##n = a+b - min##n; muv += a+b;
+# define MINMAX(a,b,n) int min##n = MIN(min##a, min##b); int max##n = MAX(max##a, max##b);
+
+ muv = 0;
+ RANGE(bp[0], bp[4], 1);
+ RANGE(bp[8], bp[12], 2);
+ RANGE(bp[16], bp[20], 3);
+ RANGE(bp[24], bp[28], 4);
+ RANGE(bp[32], bp[36], 5);
+ RANGE(bp[40], bp[44], 6);
+ RANGE(bp[48], bp[52], 7);
+ RANGE(bp[56], bp[60], 8);
+
+ MINMAX(1,2,9);
+ MINMAX(3,4,10);
+ MINMAX(5,6,11);
+ MINMAX(7,8,12);
+
+ MINMAX(9,10,13);
+ MINMAX(11,12,14);
+
+ minv = MIN(min13,min14);
+ maxv = MAX(max13,max14);
+
+#else
+ muv = minv = maxv = bp[0];
+ for(i=4;i<64;i+=4)
+ {
+ muv += bp[i];
+ if (bp[i] < minv) minv = bp[i];
+ else if (bp[i] > maxv) maxv = bp[i];
+ }
+#endif
+
+ mu[ch] = (muv + 8) >> 4;
+ min[ch] = minv;
+ max[ch] = maxv;
+ }
+
+ // determine covariance matrix
+ for (i=0;i<6;i++)
+ cov[i] = 0;
+
+ for (i=0;i<16;i++)
+ {
+ int r = block[i*4+0] - mu[0];
+ int g = block[i*4+1] - mu[1];
+ int b = block[i*4+2] - mu[2];
+
+ cov[0] += r*r;
+ cov[1] += r*g;
+ cov[2] += r*b;
+ cov[3] += g*g;
+ cov[4] += g*b;
+ cov[5] += b*b;
+ }
+
+ // convert covariance matrix to float, find principal axis via power iter
+ for(i=0;i<6;i++)
+ covf[i] = cov[i] / 255.0f;
+
+ vfr = (float) (max[0] - min[0]);
+ vfg = (float) (max[1] - min[1]);
+ vfb = (float) (max[2] - min[2]);
+
+ for(iter=0;iter<nIterPower;iter++)
+ {
+ float r = vfr*covf[0] + vfg*covf[1] + vfb*covf[2];
+ float g = vfr*covf[1] + vfg*covf[3] + vfb*covf[4];
+ float b = vfr*covf[2] + vfg*covf[4] + vfb*covf[5];
+
+ vfr = r;
+ vfg = g;
+ vfb = b;
+ }
+
+ magn = fabs(vfr);
+ if (fabs(vfg) > magn) magn = fabs(vfg);
+ if (fabs(vfb) > magn) magn = fabs(vfb);
+
+ if(magn < 4.0f)
+ { // too small, default to luminance
+ v_r = 299; // JPEG YCbCr luma coefs, scaled by 1000.
+ v_g = 587;
+ v_b = 114;
+ } else {
+ magn = 512.0 / magn;
+ v_r = (int) (vfr * magn);
+ v_g = (int) (vfg * magn);
+ v_b = (int) (vfb * magn);
+ }
+
+
+#ifdef NEW_OPTIMISATIONS
+ // Pick colors at extreme points
+ int mind, maxd;
+ mind = maxd = block[0]*v_r + block[1]*v_g + block[2]*v_b;
+ minp = maxp = block;
+ for(i=1;i<16;i++)
+ {
+ int dot = block[i*4+0]*v_r + block[i*4+1]*v_g + block[i*4+2]*v_b;
+
+ if (dot < mind) {
+ mind = dot;
+ minp = block+i*4;
+ continue;
+ }
+
+ if (dot > maxd) {
+ maxd = dot;
+ maxp = block+i*4;
+ }
+ }
+#else
+ int mind = 0x7fffffff,maxd = -0x7fffffff;
+ // Pick colors at extreme points
+ for(i=0;i<16;i++)
+ {
+ int dot = block[i*4+0]*v_r + block[i*4+1]*v_g + block[i*4+2]*v_b;
+
+ if (dot < mind) {
+ mind = dot;
+ minp = block+i*4;
+ }
+
+ if (dot > maxd) {
+ maxd = dot;
+ maxp = block+i*4;
+ }
+ }
+#endif
+
+ *pmax16 = stb__As16Bit(maxp[0],maxp[1],maxp[2]);
+ *pmin16 = stb__As16Bit(minp[0],minp[1],minp[2]);
+}
+
+inline static int stb__sclamp(float y, int p0, int p1)
+{
+ int x = (int) y;
+
+#ifdef NEW_OPTIMISATIONS
+ x = x>p1 ? p1 : x;
+ return x<p0 ? p0 : x;
+#else
+ if (x < p0) return p0;
+ if (x > p1) return p1;
+ return x;
+#endif
+}
+
+// The refinement function. (Clever code, part 2)
+// Tries to optimize colors to suit block contents better.
+// (By solving a least squares system via normal equations+Cramer's rule)
+static int stb__RefineBlock(unsigned char *block, unsigned short *pmax16, unsigned short *pmin16, unsigned int mask)
+{
+ static const int w1Tab[4] = { 3,0,2,1 };
+ static const int prods[4] = { 0x090000,0x000900,0x040102,0x010402 };
+ // ^some magic to save a lot of multiplies in the accumulating loop...
+ // (precomputed products of weights for least squares system, accumulated inside one 32-bit register)
+
+ float frb,fg;
+ unsigned short oldMin, oldMax, min16, max16;
+ int i, akku = 0, xx,xy,yy;
+ int At1_r,At1_g,At1_b;
+ int At2_r,At2_g,At2_b;
+ unsigned int cm = mask;
+
+ oldMin = *pmin16;
+ oldMax = *pmax16;
+
+ if((mask ^ (mask<<2)) < 4) // all pixels have the same index?
+ {
+ // yes, linear system would be singular; solve using optimal
+ // single-color match on average color
+ int r = 8, g = 8, b = 8;
+ for (i=0;i<16;++i) {
+ r += block[i*4+0];
+ g += block[i*4+1];
+ b += block[i*4+2];
+ }
+
+ r >>= 4; g >>= 4; b >>= 4;
+
+ max16 = (stb__OMatch5[r][0]<<11) | (stb__OMatch6[g][0]<<5) | stb__OMatch5[b][0];
+ min16 = (stb__OMatch5[r][1]<<11) | (stb__OMatch6[g][1]<<5) | stb__OMatch5[b][1];
+ } else {
+ At1_r = At1_g = At1_b = 0;
+ At2_r = At2_g = At2_b = 0;
+ for (i=0;i<16;++i,cm>>=2)
+ {
+ int step = cm&3;
+ int w1 = w1Tab[step];
+ int r = block[i*4+0];
+ int g = block[i*4+1];
+ int b = block[i*4+2];
+
+ akku += prods[step];
+ At1_r += w1*r;
+ At1_g += w1*g;
+ At1_b += w1*b;
+ At2_r += r;
+ At2_g += g;
+ At2_b += b;
+ }
+
+ At2_r = 3*At2_r - At1_r;
+ At2_g = 3*At2_g - At1_g;
+ At2_b = 3*At2_b - At1_b;
+
+ // extract solutions and decide solvability
+ xx = akku >> 16;
+ yy = (akku >> 8) & 0xff;
+ xy = (akku >> 0) & 0xff;
+
+ frb = 3.0f * 31.0f / 255.0f / (xx*yy - xy*xy);
+ fg = frb * 63.0f / 31.0f;
+
+ // solve.
+ max16 = stb__sclamp((At1_r*yy - At2_r*xy)*frb+0.5f,0,31) << 11;
+ max16 |= stb__sclamp((At1_g*yy - At2_g*xy)*fg +0.5f,0,63) << 5;
+ max16 |= stb__sclamp((At1_b*yy - At2_b*xy)*frb+0.5f,0,31) << 0;
+
+ min16 = stb__sclamp((At2_r*xx - At1_r*xy)*frb+0.5f,0,31) << 11;
+ min16 |= stb__sclamp((At2_g*xx - At1_g*xy)*fg +0.5f,0,63) << 5;
+ min16 |= stb__sclamp((At2_b*xx - At1_b*xy)*frb+0.5f,0,31) << 0;
+ }
+
+ *pmin16 = min16;
+ *pmax16 = max16;
+ return oldMin != min16 || oldMax != max16;
+}
+
+// Color block compression
+static void stb__CompressColorBlock(unsigned char *dest, unsigned char *block, int mode)
+{
+ unsigned int mask;
+ int i;
+ int dither;
+ int refinecount;
+ unsigned short max16, min16;
+ unsigned char dblock[16*4],color[4*4];
+
+ dither = mode & STB_DXT_DITHER;
+ refinecount = (mode & STB_DXT_HIGHQUAL) ? 2 : 1;
+
+ // check if block is constant
+ for (i=1;i<16;i++)
+ if (((unsigned int *) block)[i] != ((unsigned int *) block)[0])
+ break;
+
+ if(i == 16)
+ { // constant color
+ int r = block[0], g = block[1], b = block[2];
+ mask = 0xaaaaaaaa;
+ max16 = (stb__OMatch5[r][0]<<11) | (stb__OMatch6[g][0]<<5) | stb__OMatch5[b][0];
+ min16 = (stb__OMatch5[r][1]<<11) | (stb__OMatch6[g][1]<<5) | stb__OMatch5[b][1];
+ } else
+ {
+ // first step: compute dithered version for PCA if desired
+ if(dither)
+ stb__DitherBlock(dblock,block);
+
+ // second step: pca+map along principal axis
+ stb__OptimizeColorsBlock(dither ? dblock : block,&max16,&min16);
+ if (max16 != min16)
+ {
+ stb__EvalColors(color,max16,min16);
+ mask = stb__MatchColorsBlock(block,color,dither);
+ } else
+ mask = 0;
+
+ // third step: refine (multiple times if requested)
+ for (i=0;i<refinecount;i++) {
+ unsigned int lastmask = mask;
+
+ if (stb__RefineBlock(dither ? dblock : block,&max16,&min16,mask))
+ {
+ if (max16 != min16)
+ {
+ stb__EvalColors(color,max16,min16);
+ mask = stb__MatchColorsBlock(block,color,dither);
+ } else
+ {
+ mask = 0;
+ break;
+ }
+ }
+
+ if(mask == lastmask)
+ break;
+ }
+ }
+
+ // write the color block
+ if(max16 < min16)
+ {
+ unsigned short t = min16;
+ min16 = max16;
+ max16 = t;
+ mask ^= 0x55555555;
+ }
+
+ dest[0] = (unsigned char) (max16);
+ dest[1] = (unsigned char) (max16 >> 8);
+ dest[2] = (unsigned char) (min16);
+ dest[3] = (unsigned char) (min16 >> 8);
+ dest[4] = (unsigned char) (mask);
+ dest[5] = (unsigned char) (mask >> 8);
+ dest[6] = (unsigned char) (mask >> 16);
+ dest[7] = (unsigned char) (mask >> 24);
+}
+
+// Alpha block compression (this is easy for a change)
+static void stb__CompressAlphaBlock(unsigned char *dest,unsigned char *src,int mode)
+{
+ int i,dist,bias,dist4,dist2,bits,mask;
+
+ // find min/max color
+ int mn,mx;
+
+ mn = mx = src[3];
+ for (i=1;i<16;i++)
+ {
+ if (src[i*4+3] < mn) mn = src[i*4+3];
+ else if (src[i*4+3] > mx) mx = src[i*4+3];
+ }
+
+ // encode them
+ ((unsigned char *)dest)[0] = mx;
+ ((unsigned char *)dest)[1] = mn;
+ dest += 2;
+
+#ifdef NEW_OPTIMISATIONS
+ // mono-alpha shortcut
+ if (mn==mx)
+ {
+ *(unsigned short*)dest = 0;
+ dest += 2;
+ *(unsigned int*)dest = 0;
+ return;
+ }
+#endif
+
+ // determine bias and emit color indices
+ // given the choice of mx/mn, these indices are optimal:
+ // http://fgiesen.wordpress.com/2009/12/15/dxt5-alpha-block-index-determination/
+ dist = mx-mn;
+ //printf("mn = %i; mx = %i; dist = %i\n", mn, mx, dist);
+ dist4 = dist*4;
+ dist2 = dist*2;
+ bias = (dist < 8) ? (dist - 1) : (dist/2 + 2);
+ bias -= mn * 7;
+ bits = 0, mask=0;
+
+ for (i=0;i<16;i++)
+ {
+ int a = src[i*4+3]*7 + bias;
+ int ind,t;
+
+ // select index. this is a "linear scale" lerp factor between 0 (val=min) and 7 (val=max).
+ t = (a >= dist4) ? -1 : 0; ind = t & 4; a -= dist4 & t;
+ t = (a >= dist2) ? -1 : 0; ind += t & 2; a -= dist2 & t;
+ ind += (a >= dist);
+
+ // turn linear scale into DXT index (0/1 are extremal pts)
+ ind = -ind & 7;
+ ind ^= (2 > ind);
+
+ // write index
+ mask |= ind << bits;
+ if((bits += 3) >= 8)
+ {
+ *dest++ = mask;
+ mask >>= 8;
+ bits -= 8;
+ }
+ }
+}
+
+
+static void stb__InitDXT()
+{
+ int i;
+ for(i=0;i<32;i++)
+ stb__Expand5[i] = (i<<3)|(i>>2);
+
+ for(i=0;i<64;i++)
+ stb__Expand6[i] = (i<<2)|(i>>4);
+
+ for(i=0;i<256+16;i++)
+ {
+ int v = i-8 < 0 ? 0 : i-8 > 255 ? 255 : i-8;
+ stb__QuantRBTab[i] = stb__Expand5[stb__Mul8Bit(v,31)];
+ stb__QuantGTab[i] = stb__Expand6[stb__Mul8Bit(v,63)];
+ }
+
+ stb__PrepareOptTable(&stb__OMatch5[0][0],stb__Expand5,32);
+ stb__PrepareOptTable(&stb__OMatch6[0][0],stb__Expand6,64);
+}
+
+
+void stb_compress_dxt_block(unsigned char *dest, const unsigned char *src, int alpha, int mode)
+{
+ static int init=1;
+ if (init)
+ {
+ stb__InitDXT();
+ init=0;
+ }
+
+ if (alpha)
+ {
+ stb__CompressAlphaBlock(dest,(unsigned char*) src,mode);
+ dest += 8;
+ }
+
+ stb__CompressColorBlock(dest,(unsigned char*) src,mode);
+}
+
+int imin(int x, int y) { return (x < y) ? x : y; }
+
+
+
+
+
+static void extractBlock(const unsigned char *src, int x, int y,
+ int w, int h, unsigned char *block)
+{
+ int i, j;
+
+#ifdef NEW_OPTIMISATIONS
+ if ((w-x >=4) && (h-y >=4))
+ {
+ // Full Square shortcut
+ src += x*4;
+ src += y*w*4;
+ for (i=0; i < 4; ++i)
+ {
+ *(unsigned int*)block = *(unsigned int*) src; block += 4; src += 4;
+ *(unsigned int*)block = *(unsigned int*) src; block += 4; src += 4;
+ *(unsigned int*)block = *(unsigned int*) src; block += 4; src += 4;
+ *(unsigned int*)block = *(unsigned int*) src; block += 4;
+ src += (w*4) - 12;
+ }
+ return;
+ }
+#endif
+
+ int bw = imin(w - x, 4);
+ int bh = imin(h - y, 4);
+ int bx, by;
+
+ const int rem[] =
+ {
+ 0, 0, 0, 0,
+ 0, 1, 0, 1,
+ 0, 1, 2, 0,
+ 0, 1, 2, 3
+ };
+
+ for(i = 0; i < 4; ++i)
+ {
+ by = rem[(bh - 1) * 4 + i] + y;
+ for(j = 0; j < 4; ++j)
+ {
+ bx = rem[(bw - 1) * 4 + j] + x;
+ block[(i * 4 * 4) + (j * 4) + 0] =
+ src[(by * (w * 4)) + (bx * 4) + 0];
+ block[(i * 4 * 4) + (j * 4) + 1] =
+ src[(by * (w * 4)) + (bx * 4) + 1];
+ block[(i * 4 * 4) + (j * 4) + 2] =
+ src[(by * (w * 4)) + (bx * 4) + 2];
+ block[(i * 4 * 4) + (j * 4) + 3] =
+ src[(by * (w * 4)) + (bx * 4) + 3];
+ }
+ }
+}
+
+ // should be a pretty optimized 0-255 clamper
+inline static unsigned char clamp255( int n )
+{
+ if( n > 255 ) n = 255;
+ if( n < 0 ) n = 0;
+ return n;
+}
+
+
+void rgbToYCoCgBlock( unsigned char * dst, const unsigned char * src )
+{
+ // Calculate Co and Cg extents
+ int extents = 0;
+ int n = 0;
+ int iY, iCo, iCg; //, r, g, b;
+ int blockCo[16];
+ int blockCg[16];
+ int i;
+
+ const unsigned char *px = src;
+ for(i=0;i<n;i++)
+ {
+ iCo = (px[0]<<1) - (px[2]<<1);
+ iCg = (px[1]<<1) - px[0] - px[2];
+ if(-iCo > extents) extents = -iCo;
+ if( iCo > extents) extents = iCo;
+ if(-iCg > extents) extents = -iCg;
+ if( iCg > extents) extents = iCg;
+
+ blockCo[n] = iCo;
+ blockCg[n++] = iCg;
+
+ px += 4;
+ }
+
+ // Co = -510..510
+ // Cg = -510..510
+ float scaleFactor = 1.0f;
+ if(extents > 127)
+ scaleFactor = (float)extents * 4.0f / 510.0f;
+
+ // Convert to quantized scalefactor
+ unsigned char scaleFactorQuantized = (unsigned char)(ceil((scaleFactor - 1.0f) * 31.0f / 3.0f));
+
+ // Unquantize
+ scaleFactor = 1.0f + (float)(scaleFactorQuantized / 31.0f) * 3.0f;
+
+ unsigned char bVal = (unsigned char)((scaleFactorQuantized << 3) | (scaleFactorQuantized >> 2));
+
+ unsigned char *outPx = dst;
+
+ n = 0;
+ px = src;
+ /*
+ for(i=0;i<16;i++)
+ {
+ // Calculate components
+ iY = ( px[0] + (px[1]<<1) + px[2] + 2 ) / 4;
+ iCo = ((blockCo[n] / scaleFactor) + 128);
+ iCg = ((blockCg[n] / scaleFactor) + 128);
+
+ if(iCo < 0) iCo = 0; else if(iCo > 255) iCo = 255;
+ if(iCg < 0) iCg = 0; else if(iCg > 255) iCg = 255;
+ if(iY < 0) iY = 0; else if(iY > 255) iY = 255;
+
+ px += 4;
+
+ outPx[0] = (unsigned char)iCo;
+ outPx[1] = (unsigned char)iCg;
+ outPx[2] = bVal;
+ outPx[3] = (unsigned char)iY;
+
+ outPx += 4;
+ }*/
+ for(i=0;i<16;i++)
+ {
+ // Calculate components
+ int r = px[0];
+ int g = (px[1] + 1) >> 1;
+ int b = px[2];
+ int tmp = (2 + r + b) >> 2;
+
+ // Co
+ iCo = clamp255( 128 + ((r - b + 1) >> 1) );
+ // Y
+ iY = clamp255( g + tmp );
+ // Cg
+ iCg = clamp255( 128 + g - tmp );
+
+ px += 4;
+
+ outPx[0] = (unsigned char)iCo;
+ outPx[1] = (unsigned char)iCg;
+ outPx[2] = bVal;
+ outPx[3] = (unsigned char)iY;
+
+ outPx += 4;
+ }
+
+}
+
+
+void rygCompress(unsigned char *dst, unsigned char *src, int w, int h, int isDxt5, int& compressed_size)
+{
+
+ unsigned char block[64];
+ int x, y;
+
+ unsigned char* initial_dst = dst;
+
+ for (y = 0; y < h; y += 4)
+ {
+ for(x = 0; x < w; x += 4)
+ {
+ extractBlock(src, x, y, w, h, block);
+ stb_compress_dxt_block(dst, block, isDxt5, STB_DXT_NORMAL);
+ dst += isDxt5 ? 16 : 8;
+ }
+ }
+
+ compressed_size = dst - initial_dst;
+}
+
+void rygCompressYCoCg( unsigned char *dst, unsigned char *src, int w, int h )
+{
+ unsigned char block[64];
+ unsigned char ycocgblock[64];
+ int x, y;
+
+ for(y = 0; y < h; y += 4)
+ {
+ for(x = 0; x < w; x += 4)
+ {
+ extractBlock(src, x, y, w, h, block);
+ rgbToYCoCgBlock(ycocgblock,block);
+ stb_compress_dxt_block(dst, ycocgblock, 1, 10);
+ dst += 16;
+ }
+ }
+
+}
+
+static void stbgl__compress(unsigned char *p, unsigned char *rgba, int w, int h, int isDxt5)
+{
+ int i,j,y,y2;
+ int alpha = isDxt5;
+
+ for (j=0; j < w; j += 4) {
+ int x=4;
+ for (i=0; i < h; i += 4) {
+ unsigned char block[16*4];
+ if (i+3 >= w) x = w-i;
+ for (y=0; y < 4; ++y) {
+ if (j+y >= h) break;
+ memcpy(block+y*16, rgba + w*4*(j+y) + i*4, x*4);
+ }
+ if (x < 4) {
+ switch (x) {
+ case 0: assert(0);
+ case 1:
+ for (y2=0; y2 < y; ++y2) {
+ memcpy(block+y2*16+1*4, block+y2*16+0*4, 4);
+ memcpy(block+y2*16+2*4, block+y2*16+0*4, 8);
+ }
+ break;
+ case 2:
+ for (y2=0; y2 < y; ++y2)
+ memcpy(block+y2*16+2*4, block+y2*16+0*4, 8);
+ break;
+ case 3:
+ for (y2=0; y2 < y; ++y2)
+ memcpy(block+y2*16+3*4, block+y2*16+1*4, 4);
+ break;
+ }
+ }
+ y2 = 0;
+ for(; y<4; ++y,++y2)
+ memcpy(block+y*16, block+y2*16, 4*4);
+ stb_compress_dxt_block(p, block, alpha, 10);
+ p += alpha ? 16 : 8;
+ }
+ }
+ // assert(p <= end);
+}
+
+static inline unsigned char linearize(unsigned char inByte)
+{
+ float srgbVal = ((float)inByte) / 255.0f;
+ float linearVal;
+
+ if(srgbVal < 0.04045)
+ linearVal = srgbVal / 12.92f;
+ else
+ linearVal = pow( (srgbVal + 0.055f) / 1.055f, 2.4f);
+
+ return (unsigned char)(floor(sqrt(linearVal)* 255.0 + 0.5));
+}
+
+void linearize( unsigned char * dst, const unsigned char * src, int n )
+{
+ n*=4;
+ for( int i = 0; i < n; i++ )
+ dst[i] = linearize(src[i]);
+}
+
+
+
+#endif // STB_DXT_IMPLEMENTATION
+
+#endif // STB_INCLUDE_STB_DXT_H